diff options
-rwxr-xr-x | functest/ci/testcases.yaml | 36 | ||||
-rwxr-xr-x | functest/utils/openstack_utils.py | 103 | ||||
-rwxr-xr-x[-rw-r--r--] | requirements.txt | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | test-requirements.txt | 2 |
4 files changed, 123 insertions, 20 deletions
diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml index 56ca4017..d57ac306 100755 --- a/functest/ci/testcases.yaml +++ b/functest/ci/testcases.yaml @@ -37,24 +37,6 @@ tiers: module: 'functest.opnfv_tests.openstack.snaps.connection_check' class: 'ConnectionCheck' - - - name: api_check - criteria: 'status == "PASS"' - blocking: true - description: >- - This test case verifies the retrieval of OpenStack clients: - Keystone, Glance, Neutron and Nova and may perform some - simple queries. When the config value of - snaps.use_keystone is True, functest must have access to - the cloud's private network. - - dependencies: - installer: '' - scenario: '' - run: - module: 'functest.opnfv_tests.openstack.snaps.api_check' - class: 'ApiCheck' - - name: smoke order: 1 @@ -143,6 +125,24 @@ tiers: scenario: 'onos' - + name: api_check + criteria: 'status == "PASS"' + blocking: true + description: >- + This test case verifies the retrieval of OpenStack clients: + Keystone, Glance, Neutron and Nova and may perform some + simple queries. When the config value of + snaps.use_keystone is True, functest must have access to + the cloud's private network. + + dependencies: + installer: '' + scenario: '' + run: + module: 'functest.opnfv_tests.openstack.snaps.api_check' + class: 'ApiCheck' + + - name: snaps_smoke criteria: 'status == "PASS"' blocking: true diff --git a/functest/utils/openstack_utils.py b/functest/utils/openstack_utils.py index 1aac869e..15dc87c3 100755 --- a/functest/utils/openstack_utils.py +++ b/functest/utils/openstack_utils.py @@ -245,6 +245,45 @@ def get_flavor_id_by_ram_range(nova_client, min_ram, max_ram): return id +def get_aggregates(nova_client): + try: + aggregates = nova_client.aggregates.list() + return aggregates + except Exception, e: + logger.error("Error [get_aggregates(nova_client)]: %s" % e) + return None + + +def get_aggregate_id(nova_client, aggregate_name): + try: + aggregates = get_aggregates(nova_client) + _id = [ag.id for ag in aggregates if ag.name == aggregate_name][0] + return _id + except Exception, e: + logger.error("Error [get_aggregate_id(nova_client, %s)]:" + " %s" % (aggregate_name, e)) + return None + + +def get_availability_zones(nova_client): + try: + availability_zones = nova_client.availability_zones.list() + return availability_zones + except Exception, e: + logger.error("Error [get_availability_zones(nova_client)]: %s" % e) + return None + + +def get_availability_zone_names(nova_client): + try: + az_names = [az.zoneName for az in get_availability_zones(nova_client)] + return az_names + except Exception, e: + logger.error("Error [get_availability_zone_names(nova_client)]:" + " %s" % e) + return None + + def create_flavor(nova_client, flavor_name, ram, disk, vcpus, public=True): try: flavor = nova_client.flavors.create( @@ -308,6 +347,40 @@ def get_hypervisors(nova_client): return None +def create_aggregate(nova_client, aggregate_name, av_zone): + try: + nova_client.aggregates.create(aggregate_name, av_zone) + return True + except Exception, e: + logger.error("Error [create_aggregate(nova_client, %s, %s)]: %s" + % (aggregate_name, av_zone, e)) + return None + + +def add_host_to_aggregate(nova_client, aggregate_name, compute_host): + try: + aggregate_id = get_aggregate_id(nova_client, aggregate_name) + nova_client.aggregates.add_host(aggregate_id, compute_host) + return True + except Exception, e: + logger.error("Error [add_host_to_aggregate(nova_client, %s, %s)]: %s" + % (aggregate_name, compute_host, e)) + return None + + +def create_aggregate_with_host( + nova_client, aggregate_name, av_zone, compute_host): + try: + create_aggregate(nova_client, aggregate_name, av_zone) + add_host_to_aggregate(nova_client, aggregate_name, compute_host) + return True + except Exception, e: + logger.error("Error [create_aggregate_with_host(" + "nova_client, %s, %s, %s)]: %s" + % (aggregate_name, av_zone, compute_host, e)) + return None + + def create_instance(flavor_name, image_id, network_id, @@ -430,6 +503,36 @@ def delete_floating_ip(nova_client, floatingip_id): return False +def remove_host_from_aggregate(nova_client, aggregate_name, compute_host): + try: + aggregate_id = get_aggregate_id(nova_client, aggregate_name) + nova_client.aggregates.remove_host(aggregate_id, compute_host) + return True + except Exception, e: + logger.error("Error [remove_host_from_aggregate(nova_client, %s, %s)]:" + " %s" % (aggregate_name, compute_host, e)) + return False + + +def remove_hosts_from_aggregate(nova_client, aggregate_name): + aggregate_id = get_aggregate_id(nova_client, aggregate_name) + hosts = nova_client.aggregates.get(aggregate_id).hosts + assert( + all(remove_host_from_aggregate(nova_client, aggregate_name, host) + for host in hosts)) + + +def delete_aggregate(nova_client, aggregate_name): + try: + remove_hosts_from_aggregate(nova_client, aggregate_name) + nova_client.aggregates.delete(aggregate_name) + return True + except Exception, e: + logger.error("Error [delete_aggregate(nova_client, %s)]: %s" + % (aggregate_name, e)) + return False + + # ********************************************* # NEUTRON # ********************************************* diff --git a/requirements.txt b/requirements.txt index 88d0d7de..28b3fed3 100644..100755 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ python-ceilometerclient==2.6.2 python-keystoneclient==3.5.0 python-neutronclient==6.0.0 python-congressclient==1.5.0 -virtualenv==1.11.4 +virtualenv==15.1.0 pexpect==4.0 requests>=2.8.0 robotframework==2.9.1 diff --git a/test-requirements.txt b/test-requirements.txt index d65e12f6..8be8e203 100644..100755 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -20,4 +20,4 @@ requests==2.8.0 robotframework==2.9.1 robotframework-requests==0.3.8 robotframework-sshlibrary==2.1.1 -virtualenv==1.11.4
\ No newline at end of file +virtualenv==15.1.0
\ No newline at end of file |