From 9fbe0a129c35af252f7c8332c0500982d1746a74 Mon Sep 17 00:00:00 2001 From: iwonder Date: Thu, 1 Dec 2022 13:41:57 +0100 Subject: [PATCH] Patch anwenden --- .gitignore | 1 + setup_tunnel.py | 36 ++++++++++++++++++++++++++++-------- start.sh | 4 ++-- 3 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 .gitignore mode change 100644 => 100755 setup_tunnel.py mode change 100644 => 100755 start.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3dc4c38 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +openrc.sh diff --git a/setup_tunnel.py b/setup_tunnel.py old mode 100644 new mode 100755 index b5e695d..657d92e --- a/setup_tunnel.py +++ b/setup_tunnel.py @@ -5,6 +5,7 @@ from ipaddress import ip_address from os import environ as env from os import system from os.path import exists, expanduser +from time import sleep from typing import List import novaclient.client @@ -39,35 +40,54 @@ sess = Session(v3.Password( project_id=env['OS_TENANT_ID'], user_domain_name=env['OS_USER_DOMAIN_NAME'])) +print('Logging in...') 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") +print('Making sure keypair is present...') 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: + print('Uploading keypair...') nova.keypairs.create(keyname, f.read()) flavor = nova.flavors.find(name='s1-2') image = nova.glance.find_image('Debian 10') net = nova.neutron.find_network('Ext-Net') - +print('Creating server...') 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: - ips.append(i['ip_address']) + +while sv.status != 'ACTIVE': + print('Waiting for server to POST...') + sleep(5) + sv = nova.servers.find(name=SERVER_NAME) + pass + +ips = [] + +interface = None +while not interface: + interfaces = sv.interface_list() + ext_interface = [k for k in interfaces if k.net_id == net.id] + if ext_interface and ext_interface[0].port_state == 'ACTIVE': + interface = ext_interface[0] + else: + sleep(2) + +for i in interface.fixed_ips: + ips.append(i['ip_address']) ip = list(filter(lambda x: ip_address(x).version == 4, ips))[0] -while sv.status != 'ACTIVE' and not try_connect(ip): - print('Waiting for server to come online...') +while not try_connect(ip): + print('Waiting for SSH service to become available...') pass open_conn(ip) @@ -75,7 +95,7 @@ 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?') + 'The connection has ended. How do you want to proceed?')[0] if choice == 'Reconnect': open_conn(ip) elif choice == 'Destroy server and exit': diff --git a/start.sh b/start.sh old mode 100644 new mode 100755 index 296e31c..de1c0de --- a/start.sh +++ b/start.sh @@ -1,6 +1,6 @@ -#!/bin/sh +#!/bin/bash if [ ! -e openrc.sh ]; then echo "'openrc.sh' is missing. Cannot operate without OpenStack environment file." fi source openrc.sh -./setup_tunnel.py \ No newline at end of file +./setup_tunnel.py