Reformatting
This commit is contained in:
parent
ddd0590097
commit
0133ea085b
@ -1,20 +1,23 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import platform
|
||||||
|
import socket
|
||||||
|
from ipaddress import ip_address
|
||||||
|
from os import environ as env
|
||||||
|
from os import system
|
||||||
|
from os.path import exists, expanduser
|
||||||
|
from typing import List
|
||||||
|
|
||||||
import novaclient.client
|
import novaclient.client
|
||||||
from novaclient.v2.client import Client
|
import novaclient.v2.client
|
||||||
|
from keystoneauth1.identity import v3
|
||||||
|
from keystoneauth1.session import Session
|
||||||
from novaclient.v2.keypairs import Keypair
|
from novaclient.v2.keypairs import Keypair
|
||||||
from novaclient.v2.servers import Server
|
from novaclient.v2.servers import Server
|
||||||
from keystoneauth1 import session
|
|
||||||
from keystoneauth1.identity import v3
|
|
||||||
from os import environ as env
|
|
||||||
from os.path import exists, expanduser
|
|
||||||
from os import system
|
|
||||||
from time import sleep
|
|
||||||
import platform
|
|
||||||
from pick import pick
|
from pick import pick
|
||||||
from typing import List
|
|
||||||
from ipaddress import ip_address
|
|
||||||
import socket
|
|
||||||
|
|
||||||
def try_connect(ip):
|
SERVER_NAME='gbv'
|
||||||
|
|
||||||
|
def try_connect(ip: str) -> bool:
|
||||||
sock = None
|
sock = None
|
||||||
try:
|
try:
|
||||||
sock = socket.create_connection((ip, 22), 1)
|
sock = socket.create_connection((ip, 22), 1)
|
||||||
@ -23,38 +26,39 @@ def try_connect(ip):
|
|||||||
sock.close()
|
sock.close()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def open_conn(ip, port=23406):
|
|
||||||
|
def open_conn(ip: str, port: int = 23406):
|
||||||
|
print('Opening tunnel...')
|
||||||
system(f'ssh -D {port} -i ~/.ssh/id_ovh -o StrictHostKeyChecking=no -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -N debian@{ip}')
|
system(f'ssh -D {port} -i ~/.ssh/id_ovh -o StrictHostKeyChecking=no -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -N debian@{ip}')
|
||||||
|
|
||||||
|
|
||||||
auth = v3.Password(auth_url=env['OS_AUTH_URL'],
|
sess = Session(v3.Password(
|
||||||
username=env['OS_USERNAME'],
|
auth_url=env['OS_AUTH_URL'],
|
||||||
password=env['OS_PASSWORD'],
|
username=env['OS_USERNAME'],
|
||||||
project_id=env['OS_TENANT_ID'],
|
password=env['OS_PASSWORD'],
|
||||||
user_domain_name=env['OS_USER_DOMAIN_NAME'])
|
project_id=env['OS_TENANT_ID'],
|
||||||
sess = session.Session(auth)
|
user_domain_name=env['OS_USER_DOMAIN_NAME']))
|
||||||
|
|
||||||
nova: Client = novaclient.client.Client("2.1", session=sess, region_name=env['OS_REGION_NAME'])
|
nova: novaclient.v2.client.Client = novaclient.client.Client(
|
||||||
|
"2.1", session=sess, region_name=env['OS_REGION_NAME'])
|
||||||
|
|
||||||
if not exists(expanduser('~/.ssh/id_ovh')):
|
if not exists(expanduser('~/.ssh/id_ovh')):
|
||||||
system("ssh-keygen -f ~/.ssh/id_ovh")
|
system("ssh-keygen -f ~/.ssh/id_ovh")
|
||||||
|
|
||||||
# List keypairs
|
|
||||||
keypairs: List[Keypair] = nova.keypairs.list()
|
keypairs: List[Keypair] = nova.keypairs.list()
|
||||||
keyname = 'ovh_' + platform.uname()[1].split('.', 1)[0]
|
keyname = 'ovh_' + platform.uname()[1].split('.', 1)[0]
|
||||||
if keyname not in (k.name for k in keypairs):
|
if keyname not in (k.name for k in keypairs):
|
||||||
with open(expanduser('~/.ssh/id_ovh')) as f:
|
with open(expanduser('~/.ssh/id_ovh')) as f:
|
||||||
nova.keypairs.create(keyname, f.read())
|
nova.keypairs.create(keyname, f.read())
|
||||||
|
|
||||||
# Select flavor
|
|
||||||
flavor = nova.flavors.find(name='s1-2')
|
flavor = nova.flavors.find(name='s1-2')
|
||||||
|
|
||||||
# Select image
|
|
||||||
|
|
||||||
image = nova.glance.find_image('Debian 10')
|
image = nova.glance.find_image('Debian 10')
|
||||||
net = nova.neutron.find_network('Ext-Net')
|
net = nova.neutron.find_network('Ext-Net')
|
||||||
nova.servers.create('gbv', image, flavor, nics=[{'net-id':net.id}], key_name=keyname)
|
|
||||||
sv: Server = nova.servers.find(name='gbv')
|
|
||||||
|
nova.servers.create(SERVER_NAME, image, flavor,
|
||||||
|
nics=[{'net-id': net.id}], key_name=keyname)
|
||||||
|
sv: Server = nova.servers.find(name=SERVER_NAME)
|
||||||
ips = []
|
ips = []
|
||||||
for x in sv.interface_list():
|
for x in sv.interface_list():
|
||||||
for i in x.fixed_ips:
|
for i in x.fixed_ips:
|
||||||
@ -62,7 +66,7 @@ for x in sv.interface_list():
|
|||||||
|
|
||||||
ip = list(filter(lambda x: ip_address(x).version == 4, ips))[0]
|
ip = list(filter(lambda x: ip_address(x).version == 4, ips))[0]
|
||||||
|
|
||||||
while not try_connect(ip):
|
while sv.status != 'ACTIVE' and not try_connect(ip):
|
||||||
print('Waiting for server to come online...')
|
print('Waiting for server to come online...')
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -70,7 +74,8 @@ open_conn(ip)
|
|||||||
|
|
||||||
exit = False
|
exit = False
|
||||||
while not exit:
|
while not exit:
|
||||||
choice = pick(['Reconnect', 'Destroy server and exit', 'Keep server online and exit'], 'The connection has ended. How do you want to proceed?')
|
choice = pick(['Reconnect', 'Destroy server and exit', 'Keep server online and exit'],
|
||||||
|
'The connection has ended. How do you want to proceed?')
|
||||||
if choice == 'Reconnect':
|
if choice == 'Reconnect':
|
||||||
open_conn(ip)
|
open_conn(ip)
|
||||||
elif choice == 'Destroy server and exit':
|
elif choice == 'Destroy server and exit':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user