Reformatting

This commit is contained in:
iwonder 2022-12-01 13:00:16 +01:00
parent ddd0590097
commit 0133ea085b

View File

@ -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
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.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 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
try:
sock = socket.create_connection((ip, 22), 1)
@ -23,38 +26,39 @@ def try_connect(ip):
sock.close()
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}')
auth = v3.Password(auth_url=env['OS_AUTH_URL'],
username=env['OS_USERNAME'],
password=env['OS_PASSWORD'],
project_id=env['OS_TENANT_ID'],
user_domain_name=env['OS_USER_DOMAIN_NAME'])
sess = session.Session(auth)
sess = Session(v3.Password(
auth_url=env['OS_AUTH_URL'],
username=env['OS_USERNAME'],
password=env['OS_PASSWORD'],
project_id=env['OS_TENANT_ID'],
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')):
system("ssh-keygen -f ~/.ssh/id_ovh")
# List keypairs
keypairs: List[Keypair] = nova.keypairs.list()
keyname = 'ovh_' + platform.uname()[1].split('.', 1)[0]
if keyname not in (k.name for k in keypairs):
with open(expanduser('~/.ssh/id_ovh')) as f:
nova.keypairs.create(keyname, f.read())
# Select flavor
flavor = nova.flavors.find(name='s1-2')
# Select image
image = nova.glance.find_image('Debian 10')
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 = []
for x in sv.interface_list():
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]
while not try_connect(ip):
while sv.status != 'ACTIVE' and not try_connect(ip):
print('Waiting for server to come online...')
pass
@ -70,7 +74,8 @@ open_conn(ip)
exit = False
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':
open_conn(ip)
elif choice == 'Destroy server and exit':