diff options
author | Stamatis Katsaounis <mokats@intracom-telecom.com> | 2018-09-12 13:00:09 +0300 |
---|---|---|
committer | Stamatis Katsaounis <mokats@intracom-telecom.com> | 2018-10-08 13:40:34 +0300 |
commit | c05105a4f9f51f7bb31cad791e65d664e5a3bc4b (patch) | |
tree | f20058c515e55f82b084980fcff3506b30c69eed /sdnvpn/lib/utils.py | |
parent | ae9dc4895258d200b6f7a90b389a5710ac271b33 (diff) |
Replace nova client calls with openstack sdk
JIRA: SDNVPN-220
This patch replaces all calls of nova client with openstack sdk.
Change-Id: I9e3a0fe08ba36bfb64483238cd286acad829ae90
Signed-off-by: Stamatis Katsaounis <mokats@intracom-telecom.com>
Diffstat (limited to 'sdnvpn/lib/utils.py')
-rw-r--r-- | sdnvpn/lib/utils.py | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/sdnvpn/lib/utils.py b/sdnvpn/lib/utils.py index 9b0673d..900092c 100644 --- a/sdnvpn/lib/utils.py +++ b/sdnvpn/lib/utils.py @@ -155,16 +155,16 @@ def update_port_allowed_address_pairs(neutron_client, port_id, address_pairs): return None -def create_instance(nova_client, +def create_instance(conn, name, image_id, network_id, sg_id, secgroup_name=None, fixed_ip=None, - compute_node='', + compute_node=None, userdata=None, - files=None, + files=[], **kwargs ): if 'flavor' not in kwargs: @@ -192,10 +192,12 @@ def create_instance(nova_client, logger.error("Error while booting instance.") raise Exception("Error while booting instance {}".format(name)) else: + # Retrieve IP of INSTANCE + network_name = conn.network.get_network(network_id).name + instance_ip = conn.compute.get_server(instance).\ + addresses.get(network_name)[0]['addr'] logger.debug("Instance '%s' booted successfully. IP='%s'." % - (name, instance.networks.itervalues().next()[0])) - # Retrieve IP of INSTANCE - # instance_ip = instance.networks.get(network_id)[0] + (name, instance_ip)) if secgroup_name: logger.debug("Adding '%s' to security group '%s'..." @@ -203,7 +205,7 @@ def create_instance(nova_client, else: logger.debug("Adding '%s' to security group '%s'..." % (name, sg_id)) - os_utils.add_secgroup_to_instance(nova_client, instance.id, sg_id) + os_utils.add_secgroup_to_instance(conn, instance.id, sg_id) return instance @@ -321,18 +323,21 @@ def get_installer_ip(): return str(os.environ['INSTALLER_IP']) -def get_instance_ip(instance): - instance_ip = instance.networks.itervalues().next()[0] +def get_instance_ip(conn, instance): + instance_ip = conn.compute.get_server(instance).\ + addresses.values()[0][0]['addr'] return instance_ip def wait_for_instance(instance, pattern=".* login:", tries=40): logger.info("Waiting for instance %s to boot up" % instance.id) + conn = os_utils.get_os_connection() sleep_time = 2 expected_regex = re.compile(pattern) console_log = "" while tries > 0 and not expected_regex.search(console_log): - console_log = instance.get_console_output() + console_log = conn.compute.\ + get_server_console_output(instance)['output'] time.sleep(sleep_time) tries -= 1 @@ -371,14 +376,14 @@ def async_Wait_for_instances(instances, tries=40): logger.error("one or more instances is not yet booted up") -def wait_for_instance_delete(nova_client, instance_id, tries=30): +def wait_for_instance_delete(conn, instance_id, tries=30): sleep_time = 2 instances = [instance_id] logger.debug("Waiting for instance %s to be deleted" % (instance_id)) while tries > 0 and instance_id in instances: instances = [instance.id for instance in - os_utils.get_instances(nova_client)] + os_utils.get_instances(conn)] time.sleep(sleep_time) tries -= 1 if instance_id in instances: @@ -441,10 +446,10 @@ def wait_before_subtest(*args, **kwargs): time.sleep(30) -def assert_and_get_compute_nodes(nova_client, required_node_number=2): +def assert_and_get_compute_nodes(conn, required_node_number=2): """Get the compute nodes in the deployment Exit if the deployment doesn't have enough compute nodes""" - compute_nodes = os_utils.get_hypervisors(nova_client) + compute_nodes = os_utils.get_hypervisors(conn) num_compute_nodes = len(compute_nodes) if num_compute_nodes < 2: @@ -561,7 +566,7 @@ def run_odl_cmd(odl_node, cmd): return odl_node.run_cmd(karaf_cmd) -def wait_for_cloud_init(instance): +def wait_for_cloud_init(conn, instance): success = True # ubuntu images take a long time to start tries = 20 @@ -569,7 +574,8 @@ def wait_for_cloud_init(instance): logger.info("Waiting for cloud init of instance: {}" "".format(instance.name)) while tries > 0: - instance_log = instance.get_console_output() + instance_log = conn.compute.\ + get_server_console_output(instance)['output'] if "Failed to run module" in instance_log: success = False logger.error("Cloud init failed to run. Reason: %s", @@ -592,7 +598,7 @@ def wait_for_cloud_init(instance): def attach_instance_to_ext_br(instance, compute_node): - libvirt_instance_name = getattr(instance, "OS-EXT-SRV-ATTR:instance_name") + libvirt_instance_name = instance.instance_name installer_type = str(os.environ['INSTALLER_TYPE'].lower()) if installer_type == "fuel": bridge = "br-ex" @@ -621,7 +627,7 @@ def attach_instance_to_ext_br(instance, compute_node): def detach_instance_from_ext_br(instance, compute_node): - libvirt_instance_name = getattr(instance, "OS-EXT-SRV-ATTR:instance_name") + libvirt_instance_name = instance.instance_name mac = compute_node.run_cmd("for vm in $(sudo virsh list | " "grep running | awk '{print $2}'); " "do echo -n ; sudo virsh dumpxml $vm| " @@ -707,18 +713,18 @@ def cleanup_neutron(neutron_client, floatingip_ids, bgpvpn_ids, interfaces, return True -def cleanup_nova(nova_client, instance_ids, flavor_ids=None): +def cleanup_nova(conn, instance_ids, flavor_ids=None): if flavor_ids is not None and len(flavor_ids) != 0: for flavor_id in flavor_ids: - nova_client.flavors.delete(flavor_id) + conn.compute.delete_flavor(flavor_id) if len(instance_ids) != 0: for instance_id in instance_ids: - if not os_utils.delete_instance(nova_client, instance_id): + if not os_utils.delete_instance(conn, instance_id): logger.error('Fail to delete all instances. ' 'Instance with id {} was not deleted.'. format(instance_id)) else: - wait_for_instance_delete(nova_client, instance_id) + wait_for_instance_delete(conn, instance_id) return True @@ -826,12 +832,12 @@ def update_nw_subnet_port_quota(neutron_client, tenant_id, nw_quota, return False -def update_instance_quota_class(nova_client, instances_quota): +def update_instance_quota_class(cloud, instances_quota): try: - nova_client.quota_classes.update("default", instances=instances_quota) + cloud.set_compute_quotas('admin', instances=instances_quota) return True except Exception as e: - logger.error("Error [update_instance_quota_class(nova_client," + logger.error("Error [update_instance_quota_class(compute," " '%s' )]: %s" % (instances_quota, e)) return False @@ -845,9 +851,9 @@ def get_neutron_quota(neutron_client, tenant_id): raise -def get_nova_instances_quota(nova_client): +def get_nova_instances_quota(cloud): try: - return nova_client.quota_classes.get("default").instances + return cloud.get_compute_quotas('admin').instances except Exception as e: logger.error("Error in getting nova instances quota: %s" % e) raise |