From c7ba89444d160cb81656a49cb93416ee5013aa8f Mon Sep 17 00:00:00 2001 From: spisarski Date: Thu, 22 Jun 2017 12:43:09 -0600 Subject: Use neutron to create floating IPs. This patch moves the floating IP creation out of nova and into neutron. Other changes include the use of domain objects for VM and Floating IP instances, addition of new nova_utils tests to exercise the create server functionality, and more PEP8 compliance. JIRA: SNAPS-92 Change-Id: I16c12b26b56008901633e90ae307586ad2045f9b Signed-off-by: spisarski --- snaps/provisioning/tests/ansible_utils_tests.py | 128 ++++++++++++++++-------- 1 file changed, 84 insertions(+), 44 deletions(-) (limited to 'snaps/provisioning') diff --git a/snaps/provisioning/tests/ansible_utils_tests.py b/snaps/provisioning/tests/ansible_utils_tests.py index cddedcd..733068f 100644 --- a/snaps/provisioning/tests/ansible_utils_tests.py +++ b/snaps/provisioning/tests/ansible_utils_tests.py @@ -13,21 +13,23 @@ # See the License for the specific language governing permissions and # limitations under the License. +import uuid + import os import pkg_resources -import uuid from scp import SCPClient -from snaps.openstack.create_security_group import SecurityGroupRuleSettings, Direction, Protocol, \ - OpenStackSecurityGroup, SecurityGroupSettings - from snaps.openstack import create_flavor -from snaps.openstack import create_instance from snaps.openstack import create_image +from snaps.openstack import create_instance from snaps.openstack import create_keypairs from snaps.openstack import create_network from snaps.openstack import create_router +from snaps.openstack.create_security_group import ( + SecurityGroupRuleSettings, Direction, Protocol, OpenStackSecurityGroup, + SecurityGroupSettings) from snaps.openstack.tests import openstack_tests, create_instance_tests from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase +from snaps.openstack.utils import nova_utils from snaps.provisioning import ansible_utils VM_BOOT_TIMEOUT = 600 @@ -38,16 +40,19 @@ ip_2 = '10.0.1.200' class AnsibleProvisioningTests(OSIntegrationTestCase): """ - Test for the CreateInstance class with two NIC/Ports, eth0 with floating IP and eth1 w/o + Test for the CreateInstance class with two NIC/Ports, eth0 with floating IP + and eth1 w/o """ def setUp(self): """ - Instantiates the CreateImage object that is responsible for downloading and creating an OS image file - within OpenStack + 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) + guid = self.__class__.__name__ + '-' + str(uuid.uuid4()) self.keypair_priv_filepath = 'tmp/' + guid self.keypair_pub_filepath = self.keypair_priv_filepath + '.pub' @@ -69,62 +74,78 @@ class AnsibleProvisioningTests(OSIntegrationTestCase): try: # Create Image - os_image_settings = openstack_tests.ubuntu_image_settings(name=guid + '-' + '-image', - image_metadata=self.image_metadata) - self.image_creator = create_image.OpenStackImage(self.os_creds, os_image_settings) + os_image_settings = openstack_tests.ubuntu_image_settings( + name=guid + '-' + '-image', + image_metadata=self.image_metadata) + self.image_creator = create_image.OpenStackImage(self.os_creds, + os_image_settings) self.image_creator.create() # First network is public 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) - self.network_creator = create_network.OpenStackNetwork(self.os_creds, self.pub_net_config.network_settings) + self.network_creator = create_network.OpenStackNetwork( + self.os_creds, self.pub_net_config.network_settings) self.network_creator.create() # Create routers - self.router_creator = create_router.OpenStackRouter(self.os_creds, self.pub_net_config.router_settings) + self.router_creator = create_router.OpenStackRouter( + self.os_creds, self.pub_net_config.router_settings) self.router_creator.create() # Create Flavor self.flavor_creator = create_flavor.OpenStackFlavor( self.admin_os_creds, - create_flavor.FlavorSettings(name=guid + '-flavor-name', ram=2048, disk=10, vcpus=2, + create_flavor.FlavorSettings(name=guid + '-flavor-name', + ram=2048, disk=10, vcpus=2, metadata=self.flavor_metadata)) self.flavor_creator.create() # Create Key/Pair self.keypair_creator = create_keypairs.OpenStackKeypair( self.os_creds, create_keypairs.KeypairSettings( - name=self.keypair_name, public_filepath=self.keypair_pub_filepath, + name=self.keypair_name, + public_filepath=self.keypair_pub_filepath, private_filepath=self.keypair_priv_filepath)) self.keypair_creator.create() # Create Security Group sec_grp_name = guid + '-sec-grp' - rule1 = SecurityGroupRuleSettings(sec_grp_name=sec_grp_name, direction=Direction.ingress, + rule1 = SecurityGroupRuleSettings(sec_grp_name=sec_grp_name, + direction=Direction.ingress, protocol=Protocol.icmp) - rule2 = SecurityGroupRuleSettings(sec_grp_name=sec_grp_name, direction=Direction.ingress, - protocol=Protocol.tcp, port_range_min=22, port_range_max=22) + rule2 = SecurityGroupRuleSettings(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, - SecurityGroupSettings(name=sec_grp_name, rule_settings=[rule1, rule2])) + SecurityGroupSettings(name=sec_grp_name, + rule_settings=[rule1, rule2])) self.sec_grp_creator.create() # Create instance ports_settings = list() ports_settings.append( - create_network.PortSettings(name=self.port_1_name, - network_name=self.pub_net_config.network_settings.name)) + create_network.PortSettings( + name=self.port_1_name, + network_name=self.pub_net_config.network_settings.name)) instance_settings = create_instance.VmInstanceSettings( - name=self.vm_inst_name, flavor=self.flavor_creator.flavor_settings.name, port_settings=ports_settings, + name=self.vm_inst_name, + flavor=self.flavor_creator.flavor_settings.name, + port_settings=ports_settings, floating_ip_settings=[create_instance.FloatingIpSettings( name=self.floating_ip_name, port_name=self.port_1_name, router_name=self.pub_net_config.router_settings.name)]) self.inst_creator = create_instance.OpenStackVmInstance( - self.os_creds, instance_settings, self.image_creator.image_settings, + self.os_creds, instance_settings, + self.image_creator.image_settings, keypair_settings=self.keypair_creator.keypair_settings) except: self.tearDown() @@ -165,10 +186,13 @@ class AnsibleProvisioningTests(OSIntegrationTestCase): def test_apply_simple_playbook(self): """ - Tests application of an Ansible playbook that simply copies over a file: - 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. + Tests application of an Ansible playbook that simply copies over a file + 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. """ vm = self.inst_creator.create(block=True) @@ -176,10 +200,12 @@ class AnsibleProvisioningTests(OSIntegrationTestCase): self.assertTrue(self.inst_creator.vm_ssh_active(block=True)) priv_ip = self.inst_creator.get_port_ip(self.port_1_name) - self.assertTrue(create_instance_tests.check_dhcp_lease(vm, priv_ip)) + self.assertTrue(create_instance_tests.check_dhcp_lease( + self.nova, vm, priv_ip)) # Apply Security Group - self.inst_creator.add_security_group(self.sec_grp_creator.get_security_group()) + self.inst_creator.add_security_group( + self.sec_grp_creator.get_security_group()) ssh_client = self.inst_creator.ssh_client() self.assertIsNotNone(ssh_client) @@ -187,16 +213,19 @@ class AnsibleProvisioningTests(OSIntegrationTestCase): self.assertIsNotNone(out) self.assertGreater(len(out), 1) - # Need to use the first floating IP as subsequent ones are currently broken with Apex CO + # Need to use the first floating IP as subsequent ones are currently + # broken with Apex CO ip = self.inst_creator.get_floating_ip().ip user = self.inst_creator.get_image_user() priv_key = self.inst_creator.keypair_settings.private_filepath - relative_pb_path = pkg_resources.resource_filename('snaps.provisioning.tests.playbooks', 'simple_playbook.yml') + relative_pb_path = pkg_resources.resource_filename( + 'snaps.provisioning.tests.playbooks', 'simple_playbook.yml') retval = self.inst_creator.apply_ansible_playbook(relative_pb_path) self.assertEqual(0, retval) - ssh = ansible_utils.ssh_client(ip, user, priv_key, self.os_creds.proxy_settings) + ssh = ansible_utils.ssh_client(ip, user, priv_key, + self.os_creds.proxy_settings) self.assertIsNotNone(ssh) scp = SCPClient(ssh.get_transport()) scp.get('~/hello.txt', self.test_file_local_path) @@ -209,10 +238,14 @@ class AnsibleProvisioningTests(OSIntegrationTestCase): def test_apply_template_playbook(self): """ - Tests application of an Ansible playbook that applies a template to a file: - 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. + Tests application of an Ansible playbook that applies a template to a + file: + 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. """ vm = self.inst_creator.create(block=True) @@ -220,22 +253,29 @@ class AnsibleProvisioningTests(OSIntegrationTestCase): self.assertTrue(self.inst_creator.vm_ssh_active(block=True)) priv_ip = self.inst_creator.get_port_ip(self.port_1_name) - self.assertTrue(create_instance_tests.check_dhcp_lease(vm, priv_ip)) + self.assertTrue(create_instance_tests.check_dhcp_lease( + self.nova, vm, priv_ip)) # Apply Security Group - self.inst_creator.add_security_group(self.sec_grp_creator.get_security_group()) + self.inst_creator.add_security_group( + self.sec_grp_creator.get_security_group()) - # Need to use the first floating IP as subsequent ones are currently broken with Apex CO + # Need to use the first floating IP as subsequent ones are currently + # broken with Apex CO ip = self.inst_creator.get_floating_ip().ip user = self.inst_creator.get_image_user() priv_key = self.inst_creator.keypair_settings.private_filepath - relative_pb_path = pkg_resources.resource_filename('snaps.provisioning.tests.playbooks', - 'template_playbook.yml') - retval = self.inst_creator.apply_ansible_playbook(relative_pb_path, variables={'name': 'Foo'}) + relative_pb_path = pkg_resources.resource_filename( + 'snaps.provisioning.tests.playbooks', + 'template_playbook.yml') + retval = self.inst_creator.apply_ansible_playbook(relative_pb_path, + variables={ + 'name': 'Foo'}) self.assertEqual(0, retval) - ssh = ansible_utils.ssh_client(ip, user, priv_key, self.os_creds.proxy_settings) + ssh = ansible_utils.ssh_client(ip, user, priv_key, + self.os_creds.proxy_settings) self.assertIsNotNone(ssh) scp = SCPClient(ssh.get_transport()) scp.get('/tmp/hello.txt', self.test_file_local_path) -- cgit 1.2.3-korg