X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=snaps%2Fopenstack%2Ftests%2Fcreate_instance_tests.py;h=12ae10bd0bafe1dedc1d736cdf1dd380ced1f604;hb=fb0ab37c323717ca10ac3f3bda24ae390635495e;hp=055a5d8958f23de8df8d53c40388bcbfb151624f;hpb=e3011f7a8914a10cbe02a61bf5fe30f5bdbf1082;p=snaps.git diff --git a/snaps/openstack/tests/create_instance_tests.py b/snaps/openstack/tests/create_instance_tests.py index 055a5d8..12ae10b 100644 --- a/snaps/openstack/tests/create_instance_tests.py +++ b/snaps/openstack/tests/create_instance_tests.py @@ -20,8 +20,8 @@ import unittest import uuid import os -from neutronclient.common.exceptions import InvalidIpForSubnetClient -from novaclient.exceptions import BadRequest +from neutronclient.common.exceptions import ( + InvalidIpForSubnetClient, BadRequest) from snaps import file_utils from snaps.config.flavor import FlavorConfig @@ -48,9 +48,8 @@ from snaps.openstack.create_volume import OpenStackVolume from snaps.openstack.tests import openstack_tests, validation_utils from snaps.openstack.tests.os_source_file_test import ( OSIntegrationTestCase, OSComponentTestCase) -from snaps.openstack.utils import nova_utils +from snaps.openstack.utils import nova_utils, keystone_utils, neutron_utils from snaps.openstack.utils.nova_utils import RebootType -from snaps.openstack.utils import nova_utils, settings_utils, neutron_utils __author__ = 'spisarski' @@ -411,22 +410,16 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase): def setUp(self): """ - Instantiates the CreateImage object that is responsible for downloading - and creating an OS image file - within OpenStack + Setup the objects required for the test """ super(self.__class__, self).__start__() - guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) - self.vm_inst_name = guid + '-inst' + self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) + self.vm_inst_name = self.guid + '-inst' self.nova = nova_utils.nova_client(self.os_creds) self.neutron = neutron_utils.neutron_client(self.os_creds) os_image_settings = openstack_tests.cirros_image_settings( - name=guid + '-image', image_metadata=self.image_metadata) - - net_config = openstack_tests.get_priv_net_config( - net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet', - router_name=guid + '-pub-router', external_net=self.ext_net_name) + name=self.guid + '-image', image_metadata=self.image_metadata) # Initialize for tearDown() self.image_creator = None @@ -444,19 +437,10 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase): # Create Flavor self.flavor_creator = OpenStackFlavor( self.admin_os_creds, - FlavorConfig(name=guid + '-flavor-name', ram=256, disk=10, + FlavorConfig(name=self.guid + '-flavor-name', ram=256, disk=10, vcpus=2, metadata=self.flavor_metadata)) self.flavor_creator.create() - - # Create Network - self.network_creator = OpenStackNetwork( - self.os_creds, net_config.network_settings) - self.network_creator.create() - - self.port_settings = PortConfig( - name=guid + '-port', - network_name=net_config.network_settings.name) - + self.network_creator = None except Exception as e: self.tearDown() raise e @@ -503,6 +487,21 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase): Tests the creation of an OpenStack instance with a single port with a static IP without a Floating IP. """ + # Create Network + net_config = openstack_tests.get_priv_net_config( + net_name=self.guid + '-pub-net', + subnet_name=self.guid + '-pub-subnet', + router_name=self.guid + '-pub-router', + external_net=self.ext_net_name, + netconf_override=self.netconf_override) + self.network_creator = OpenStackNetwork( + self.os_creds, net_config.network_settings) + self.network_creator.create() + + self.port_settings = PortConfig( + name=self.guid + '-port', + network_name=net_config.network_settings.name) + instance_settings = VmInstanceConfig( name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, @@ -512,20 +511,72 @@ class CreateInstanceSimpleTests(OSIntegrationTestCase): self.os_creds, instance_settings, self.image_creator.image_settings) - vm_inst = self.inst_creator.create() + vm_inst = self.inst_creator.create(block=True) self.assertIsNotNone(nova_utils.get_server( - self.nova, self.neutron, vm_inst_settings=instance_settings)) + self.nova, self.neutron, self.keystone, + vm_inst_settings=instance_settings)) + + self.assertIsNotNone(self.inst_creator.get_vm_inst().availability_zone) + self.assertIsNone(self.inst_creator.get_vm_inst().compute_host) # Delete instance nova_utils.delete_vm_instance(self.nova, vm_inst) self.assertTrue(self.inst_creator.vm_deleted(block=True)) self.assertIsNone(nova_utils.get_server( - self.nova, self.neutron, vm_inst_settings=instance_settings)) + self.nova, self.neutron, self.keystone, + vm_inst_settings=instance_settings)) # Exception should not be thrown self.inst_creator.clean() + def test_create_admin_instance(self): + """ + Tests the creation of an OpenStack instance with a single port with a + static IP without a Floating IP. + """ + # Create Network + net_config = openstack_tests.get_priv_net_config( + net_name=self.guid + '-pub-net', + subnet_name=self.guid + '-pub-subnet', + router_name=self.guid + '-pub-router', + external_net=self.ext_net_name, + netconf_override=self.netconf_override) + self.network_creator = OpenStackNetwork( + self.admin_os_creds, net_config.network_settings) + self.network_creator.create() + + self.port_settings = PortConfig( + name=self.guid + '-port', + network_name=net_config.network_settings.name) + + instance_settings = VmInstanceConfig( + name=self.vm_inst_name, + flavor=self.flavor_creator.flavor_settings.name, + port_settings=[self.port_settings]) + + self.inst_creator = OpenStackVmInstance( + self.admin_os_creds, instance_settings, + self.image_creator.image_settings) + + admin_nova = nova_utils.nova_client(self.admin_os_creds) + admin_neutron = neutron_utils.neutron_client(self.admin_os_creds) + admin_key = keystone_utils.keystone_client(self.admin_os_creds) + vm_inst = self.inst_creator.create(block=True) + + self.assertIsNotNone(vm_inst) + vm_inst_get = nova_utils.get_server( + admin_nova, admin_neutron, admin_key, + vm_inst_settings=instance_settings) + self.assertEqual(vm_inst, vm_inst_get) + + self.assertIsNone(nova_utils.get_server( + self.nova, self.neutron, self.keystone, + vm_inst_settings=instance_settings)) + + self.assertIsNotNone(self.inst_creator.get_vm_inst().availability_zone) + self.assertIsNotNone(self.inst_creator.get_vm_inst().compute_host) + class CreateInstanceSingleNetworkTests(OSIntegrationTestCase): """ @@ -560,7 +611,8 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase): self.pub_net_config = openstack_tests.get_pub_net_config( net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet', - router_name=guid + '-pub-router', external_net=self.ext_net_name) + router_name=guid + '-pub-router', external_net=self.ext_net_name, + netconf_override=self.netconf_override) os_image_settings = openstack_tests.cirros_image_settings( name=guid + '-image', image_metadata=self.image_metadata) try: @@ -814,19 +866,19 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase): # Test default reboot which should be 'SOFT' inst_creator.reboot() # Lag time to allow for shutdown routine to take effect - time.sleep(10) + time.sleep(15) self.assertTrue(check_dhcp_lease(inst_creator, ip)) self.assertTrue(validate_ssh_client(inst_creator)) # Test 'SOFT' reboot inst_creator.reboot(reboot_type=RebootType.soft) - time.sleep(10) + time.sleep(15) self.assertTrue(check_dhcp_lease(inst_creator, ip)) self.assertTrue(validate_ssh_client(inst_creator)) # Test 'HARD' reboot inst_creator.reboot(reboot_type=RebootType.hard) - time.sleep(10) + time.sleep(15) self.assertTrue(check_dhcp_lease(inst_creator, ip)) self.assertTrue(validate_ssh_client(inst_creator)) @@ -897,7 +949,7 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase): derived_inst_creator = create_instance.generate_creator( self.os_creds, vm_inst, self.image_creator.image_settings, - self.keypair_creator.keypair_settings) + self.os_creds.project_name, self.keypair_creator.keypair_settings) derived_inst_creator.add_floating_ip(FloatingIpConfig( name=self.floating_ip_name, port_name=self.port_1_name, @@ -1201,7 +1253,8 @@ class CreateInstancePortManipulationTests(OSIntegrationTestCase): self.net_config = openstack_tests.get_priv_net_config( net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet', - router_name=guid + '-pub-router', external_net=self.ext_net_name) + router_name=guid + '-pub-router', external_net=self.ext_net_name, + netconf_override=self.netconf_override) os_image_settings = openstack_tests.cirros_image_settings( name=guid + '-image', image_metadata=self.image_metadata) @@ -1498,7 +1551,8 @@ class CreateInstanceOnComputeHost(OSIntegrationTestCase): self.inst_creators = list() self.priv_net_config = openstack_tests.get_priv_net_config( - net_name=guid + '-priv-net', subnet_name=guid + '-priv-subnet') + net_name=guid + '-priv-net', subnet_name=guid + '-priv-subnet', + netconf_override=self.netconf_override) os_image_settings = openstack_tests.cirros_image_settings( name=guid + '-image', image_metadata=self.image_metadata) @@ -1588,7 +1642,11 @@ class CreateInstanceOnComputeHost(OSIntegrationTestCase): self.admin_os_creds, instance_settings, self.image_creator.image_settings) self.inst_creators.append(inst_creator) - inst_creator.create() + inst_creator.create(block=True) + avail_zone = inst_creator.get_vm_inst().availability_zone + self.assertTrue(avail_zone in zone) + compute_host = inst_creator.get_vm_inst().compute_host + self.assertTrue(compute_host in zone) # Validate instances to ensure they've been deployed to the correct # server @@ -1603,224 +1661,6 @@ class CreateInstanceOnComputeHost(OSIntegrationTestCase): index += 1 -class CreateInstancePubPrivNetTests(OSIntegrationTestCase): - """ - Test for the CreateInstance class with two NIC/Ports, eth0 with floating IP - and eth1 w/o. - These tests require a Centos image - """ - - def setUp(self): - """ - Instantiates the CreateImage object that is responsible for downloading - and creating an OS image file within OpenStack - """ - super(self.__class__, self).__start__() - - self.nova = nova_utils.nova_client(self.os_creds) - - # Initialize for tearDown() - self.image_creator = None - self.network_creators = list() - self.router_creators = list() - self.flavor_creator = None - self.keypair_creator = None - self.sec_grp_creator = None - self.inst_creator = None - - self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) - self.keypair_priv_filepath = 'tmp/' + self.guid - self.keypair_pub_filepath = self.keypair_priv_filepath + '.pub' - self.keypair_name = self.guid + '-kp' - self.vm_inst_name = self.guid + '-inst' - self.port_1_name = self.guid + '-port-1' - self.port_2_name = self.guid + '-port-2' - self.floating_ip_name = self.guid + 'fip1' - self.priv_net_config = openstack_tests.get_priv_net_config( - net_name=self.guid + '-priv-net', - subnet_name=self.guid + '-priv-subnet', - router_name=self.guid + '-priv-router', - external_net=self.ext_net_name) - self.pub_net_config = openstack_tests.get_pub_net_config( - net_name=self.guid + '-pub-net', - subnet_name=self.guid + '-pub-subnet', - router_name=self.guid + '-pub-router', - external_net=self.ext_net_name) - - image_name = self.__class__.__name__ + '-' + str(uuid.uuid4()) - os_image_settings = openstack_tests.centos_image_settings( - name=image_name, image_metadata=self.image_metadata) - - try: - # Create Image - self.image_creator = OpenStackImage(self.os_creds, - os_image_settings) - self.image_creator.create() - - # First network is public - self.network_creators.append(OpenStackNetwork( - self.os_creds, self.pub_net_config.network_settings)) - # Second network is private - self.network_creators.append(OpenStackNetwork( - self.os_creds, self.priv_net_config.network_settings)) - for network_creator in self.network_creators: - network_creator.create() - - self.router_creators.append(OpenStackRouter( - self.os_creds, self.pub_net_config.router_settings)) - self.router_creators.append(OpenStackRouter( - self.os_creds, self.priv_net_config.router_settings)) - - # Create Routers - for router_creator in self.router_creators: - router_creator.create() - - # Create Flavor - self.flavor_creator = OpenStackFlavor( - self.admin_os_creds, - FlavorConfig(name=self.guid + '-flavor-name', ram=512, - disk=10, vcpus=2, - metadata=self.flavor_metadata)) - self.flavor_creator.create() - - # Create Keypair - self.keypair_creator = OpenStackKeypair( - self.os_creds, KeypairConfig( - name=self.keypair_name, - public_filepath=self.keypair_pub_filepath, - private_filepath=self.keypair_priv_filepath)) - self.keypair_creator.create() - - sec_grp_name = self.guid + '-sec-grp' - rule1 = SecurityGroupRuleConfig( - sec_grp_name=sec_grp_name, direction=Direction.ingress, - protocol=Protocol.icmp) - rule2 = SecurityGroupRuleConfig( - sec_grp_name=sec_grp_name, direction=Direction.ingress, - protocol=Protocol.tcp, port_range_min=22, port_range_max=22) - self.sec_grp_creator = OpenStackSecurityGroup( - self.os_creds, - SecurityGroupConfig( - name=sec_grp_name, rule_settings=[rule1, rule2])) - self.sec_grp_creator.create() - except: - self.tearDown() - raise - - def tearDown(self): - """ - Cleans the created objects - """ - if self.inst_creator: - try: - self.inst_creator.clean() - except Exception as e: - logger.error( - 'Unexpected exception cleaning VM instance with message ' - '- %s', e) - - if self.keypair_creator: - try: - self.keypair_creator.clean() - except Exception as e: - logger.error( - 'Unexpected exception cleaning keypair with message - %s', - e) - - if self.flavor_creator: - try: - self.flavor_creator.clean() - except Exception as e: - logger.error( - 'Unexpected exception cleaning flavor with message - %s', - e) - - for router_creator in self.router_creators: - try: - router_creator.clean() - except Exception as e: - logger.error( - 'Unexpected exception cleaning router with message - %s', - e) - - for network_creator in self.network_creators: - try: - network_creator.clean() - except Exception as e: - logger.error( - 'Unexpected exception cleaning network with message - %s', - e) - - if self.sec_grp_creator: - try: - self.sec_grp_creator.clean() - except Exception as e: - logger.error( - 'Unexpected exception cleaning security group with message' - ' - %s', e) - - if self.image_creator and not self.image_creator.image_settings.exists: - try: - self.image_creator.clean() - except Exception as e: - logger.error( - 'Unexpected exception cleaning image with message - %s', e) - - super(self.__class__, self).__clean__() - - def test_dual_ports_dhcp(self): - """ - Tests the creation of an OpenStack instance with a dual ports/NICs with - a DHCP assigned IP. - NOTE: This test and any others that call ansible will most likely fail - unless you do one of two things: - 1. Have a ~/.ansible.cfg (or alternate means) to - set host_key_checking = False - 2. Set the following environment variable in your executing shell: - ANSIBLE_HOST_KEY_CHECKING=False - Should this not be performed, the creation of the host ssh key will - cause your ansible calls to fail. - """ - # Create ports/NICs for instance - ports_settings = [] - ctr = 1 - for network_creator in self.network_creators: - ports_settings.append(PortConfig( - name=self.guid + '-port-' + str(ctr), - network_name=network_creator.network_settings.name)) - ctr += 1 - - # Create instance - instance_settings = VmInstanceConfig( - name=self.vm_inst_name, - flavor=self.flavor_creator.flavor_settings.name, - port_settings=ports_settings, - security_group_names=[self.sec_grp_creator.sec_grp_settings.name], - floating_ip_settings=[FloatingIpConfig( - name=self.floating_ip_name, port_name=self.port_1_name, - router_name=self.pub_net_config.router_settings.name)]) - - self.inst_creator = OpenStackVmInstance( - self.os_creds, instance_settings, - self.image_creator.image_settings, - keypair_settings=self.keypair_creator.keypair_settings) - - vm_inst = self.inst_creator.create(block=True) - - self.assertEqual(vm_inst.id, self.inst_creator.get_vm_inst().id) - - # Effectively blocks until VM has been properly activated - self.assertTrue(self.inst_creator.vm_active(block=True)) - - ip = self.inst_creator.get_port_ip(ports_settings[0].name) - self.assertTrue(check_dhcp_lease(self.inst_creator, ip)) - - # Effectively blocks until VM's ssh port has been opened - self.assertTrue(self.inst_creator.vm_ssh_active(block=True)) - - self.assertEqual(0, self.inst_creator.config_nics()) - - class InstanceSecurityGroupTests(OSIntegrationTestCase): """ Tests that include, add, and remove security groups from VM instances @@ -1848,7 +1688,8 @@ class InstanceSecurityGroupTests(OSIntegrationTestCase): net_name=self.guid + '-pub-net', subnet_name=self.guid + '-pub-subnet', router_name=self.guid + '-pub-router', - external_net=self.ext_net_name) + external_net=self.ext_net_name, + netconf_override=self.netconf_override) # Initialize for tearDown() self.image_creator = None @@ -2169,7 +2010,8 @@ class CreateInstanceFromThreePartImage(OSIntegrationTestCase): net_config = openstack_tests.get_priv_net_config( net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet', - router_name=guid + '-pub-router', external_net=self.ext_net_name) + router_name=guid + '-pub-router', external_net=self.ext_net_name, + netconf_override=self.netconf_override) # Initialize for tearDown() self.image_creator = None @@ -2828,13 +2670,14 @@ class CreateInstanceTwoNetTests(OSIntegrationTestCase): try: # Create Image - self.image_creator = OpenStackImage(self.os_creds, - os_image_settings) + self.image_creator = OpenStackImage( + self.os_creds, os_image_settings) self.image_creator.create() # First network is public self.network_creators.append(OpenStackNetwork( self.os_creds, self.net_config_1)) + # Second network is private self.network_creators.append(OpenStackNetwork( self.os_creds, self.net_config_2)) @@ -2842,32 +2685,29 @@ class CreateInstanceTwoNetTests(OSIntegrationTestCase): network_creator.create() port_settings = [ - create_network.PortConfig( + PortConfig( name=self.guid + '-router-port1', ip_addrs=[{ 'subnet_name': self.net_config_1.subnet_settings[0].name, 'ip': static_gateway_ip1 }], - network_name=self.net_config_1.name, - project_name=self.os_creds.project_name), - create_network.PortConfig( + network_name=self.net_config_1.name), + PortConfig( name=self.guid + '-router-port2', ip_addrs=[{ 'subnet_name': self.net_config_2.subnet_settings[0].name, 'ip': static_gateway_ip2 }], - network_name=self.net_config_2.name, - project_name=self.os_creds.project_name)] + network_name=self.net_config_2.name)] router_settings = RouterConfig( name=self.guid + '-pub-router', port_settings=port_settings) - self.router_creator = create_router.OpenStackRouter( + self.router_creator = OpenStackRouter( self.os_creds, router_settings) self.router_creator.create() - # Create Flavor self.flavor_creator = OpenStackFlavor( self.admin_os_creds, FlavorConfig(name=self.guid + '-flavor-name', ram=512, @@ -3025,7 +2865,8 @@ class CreateInstanceVolumeTests(OSIntegrationTestCase): net_config = openstack_tests.get_priv_net_config( net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet', - router_name=guid + '-pub-router', external_net=self.ext_net_name) + router_name=guid + '-pub-router', external_net=self.ext_net_name, + netconf_override=self.netconf_override) self.volume_settings1 = VolumeConfig( name=self.__class__.__name__ + '-' + str(guid) + '-1') @@ -3144,7 +2985,8 @@ class CreateInstanceVolumeTests(OSIntegrationTestCase): vm_inst = self.inst_creator.create(block=True) self.assertIsNotNone(nova_utils.get_server( - self.nova, self.neutron, vm_inst_settings=instance_settings)) + self.nova, self.neutron, self.keystone, + vm_inst_settings=instance_settings)) self.assertIsNotNone(vm_inst) self.assertEqual(1, len(vm_inst.volume_ids)) @@ -3168,7 +3010,8 @@ class CreateInstanceVolumeTests(OSIntegrationTestCase): vm_inst = self.inst_creator.create(block=True) self.assertIsNotNone(nova_utils.get_server( - self.nova, self.neutron, vm_inst_settings=instance_settings)) + self.nova, self.neutron, self.keystone, + vm_inst_settings=instance_settings)) self.assertIsNotNone(vm_inst) self.assertEqual(2, len(vm_inst.volume_ids))