diff options
author | spisarski <s.pisarski@cablelabs.com> | 2017-07-24 11:27:59 -0600 |
---|---|---|
committer | spisarski <s.pisarski@cablelabs.com> | 2017-07-24 11:27:59 -0600 |
commit | 3d6ec1eeaf70ae4e46042946f8bd35d5b5380401 (patch) | |
tree | 9d2881a2f73de6e779d266ceb6798ec3930d42ea | |
parent | feae63d11f8295a0d9327496f42949ad5b67fca4 (diff) |
Fixed problems when setting the OpenStack project ID.
There were several calls to retrieve the project ID that required
named parameters which was causing the utility function to always
return None. Additionally, when creating the dict() required by the
Neutron create API 'body' parameter key 'project_id' is not supported
and still uses 'tenant_id'.
As these problems should have been found earlier, this patch also
extends the tests for networks, subnets, ports, and security groups
to use 'tenant_id' rather than 'project_id'.
JIRA: SNAPS-143
Change-Id: Ic69e56145ea6070718d821edd22a1d0f9970995d
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r-- | snaps/openstack/create_network.py | 17 | ||||
-rw-r--r-- | snaps/openstack/create_router.py | 5 | ||||
-rw-r--r-- | snaps/openstack/create_security_group.py | 5 | ||||
-rw-r--r-- | snaps/openstack/tests/create_network_tests.py | 60 | ||||
-rw-r--r-- | snaps/openstack/tests/create_router_tests.py | 86 | ||||
-rw-r--r-- | snaps/openstack/tests/create_security_group_tests.py | 57 | ||||
-rw-r--r-- | snaps/openstack/tests/os_source_file_test.py | 3 |
7 files changed, 197 insertions, 36 deletions
diff --git a/snaps/openstack/create_network.py b/snaps/openstack/create_network.py index 4f27eec..2f26c43 100644 --- a/snaps/openstack/create_network.py +++ b/snaps/openstack/create_network.py @@ -190,7 +190,6 @@ class NetworkSettings: if not self.name or len(self.name) < 1: raise NetworkSettingsError('Name required for networks') - raise NetworkSettingsError('Name required for networks') def get_project_id(self, os_creds): """ @@ -203,8 +202,8 @@ class NetworkSettings: else: if self.project_name: keystone = keystone_utils.keystone_client(os_creds) - project = keystone_utils.get_project(keystone, - self.project_name) + project = keystone_utils.get_project( + keystone=keystone, project_name=self.project_name) if project: return project.id @@ -231,7 +230,7 @@ class NetworkSettings: if self.project_name: project_id = self.get_project_id(os_creds) if project_id: - out['project_id'] = project_id + out['tenant_id'] = project_id else: raise NetworkSettingsError( 'Could not find project ID for project named - ' + @@ -345,12 +344,13 @@ class SubnetSettings: out['name'] = self.name if self.project_name: keystone = keystone_utils.keystone_client(os_creds) - project = keystone_utils.get_project(keystone, self.project_name) + project = keystone_utils.get_project( + keystone=keystone, project_name=self.project_name) project_id = None if project: project_id = project.id if project_id: - out['project_id'] = project_id + out['tenant_id'] = project_id else: raise SubnetSettingsError( 'Could not find project ID for project named - ' + @@ -492,7 +492,8 @@ class PortSettings: project_id = None if self.project_name: keystone = keystone_utils.keystone_client(os_creds) - project = keystone_utils.get_project(keystone, self.project_name) + project = keystone_utils.get_project( + keystone=keystone, project_name=self.project_name) if project: project_id = project.id @@ -512,7 +513,7 @@ class PortSettings: out['name'] = self.name if self.project_name: if project_id: - out['project_id'] = project_id + out['tenant_id'] = project_id else: raise PortSettingsError( 'Could not find project ID for project named - ' + diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py index e50009c..acf6602 100644 --- a/snaps/openstack/create_router.py +++ b/snaps/openstack/create_router.py @@ -238,12 +238,13 @@ class RouterSettings: out['name'] = self.name if self.project_name: keystone = keystone_utils.keystone_client(os_creds) - project = keystone_utils.get_project(keystone, self.project_name) + project = keystone_utils.get_project( + keystone=keystone, project_name=self.project_name) project_id = None if project: project_id = project.id if project_id: - out['project_id'] = project_id + out['tenant_id'] = project_id else: raise RouterSettingsError( 'Could not find project ID for project named - ' + diff --git a/snaps/openstack/create_security_group.py b/snaps/openstack/create_security_group.py index 4291796..bde5d01 100644 --- a/snaps/openstack/create_security_group.py +++ b/snaps/openstack/create_security_group.py @@ -265,12 +265,13 @@ class SecurityGroupSettings: if self.description: out['description'] = self.description if self.project_name: - project = keystone_utils.get_project(keystone, self.project_name) + project = keystone_utils.get_project( + keystone=keystone, project_name=self.project_name) project_id = None if project: project_id = project.id if project_id: - out['project_id'] = project_id + out['tenant_id'] = project_id else: raise SecurityGroupSettingsError( 'Could not find project ID for project named - ' + diff --git a/snaps/openstack/tests/create_network_tests.py b/snaps/openstack/tests/create_network_tests.py index 322d383..bd373f1 100644 --- a/snaps/openstack/tests/create_network_tests.py +++ b/snaps/openstack/tests/create_network_tests.py @@ -464,6 +464,66 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase): self.assertEqual(self.net_creator.get_network().id, self.net_creator2.get_network().id) + def test_create_network_router_admin_user_to_new_project(self): + """ + Tests the creation of an OpenStack network and router with the current + user to the admin project. + """ + # Create Network/Subnet where the project names have been changed + admin_project_name = self.admin_os_creds.project_name + self.net_config.network_settings.project_name = admin_project_name + self.net_config.network_settings.subnet_settings[0].project_name = \ + admin_project_name + self.net_creator = OpenStackNetwork(self.os_creds, + self.net_config.network_settings) + self.net_creator.create() + + retrieved_net = neutron_utils.get_network( + self.neutron, self.net_config.network_settings.name) + + self.assertEqual(self.net_creator.get_network().id, retrieved_net.id) + + # Create Router + self.net_config.router_settings.project_name = admin_project_name + self.router_creator = create_router.OpenStackRouter( + self.os_creds, self.net_config.router_settings) + self.router_creator.create() + + retrieved_router = neutron_utils.get_router_by_name( + self.neutron, self.router_creator.get_router().name) + self.assertEqual( + self.router_creator.get_router().id, retrieved_router.id) + + def test_create_network_router_new_user_to_admin_project(self): + """ + Tests the creation of an OpenStack network and router with the admin + user to the new project. + """ + # Create Network/Subnet where the project names have been changed + new_project_name = self.os_creds.project_name + self.net_config.network_settings.project_name = new_project_name + self.net_config.network_settings.subnet_settings[0].project_name = \ + new_project_name + self.net_creator = OpenStackNetwork(self.admin_os_creds, + self.net_config.network_settings) + self.net_creator.create() + + retrieved_net = neutron_utils.get_network( + self.neutron, self.net_config.network_settings.name) + + self.assertEqual(self.net_creator.get_network().id, retrieved_net.id) + + # Create Router + self.net_config.router_settings.project_name = new_project_name + self.router_creator = create_router.OpenStackRouter( + self.admin_os_creds, self.net_config.router_settings) + self.router_creator.create() + + retrieved_router = neutron_utils.get_router_by_name( + self.neutron, self.router_creator.get_router().name) + self.assertEqual( + self.router_creator.get_router().id, retrieved_router.id) + class CreateNetworkTypeTests(OSComponentTestCase): """ diff --git a/snaps/openstack/tests/create_router_tests.py b/snaps/openstack/tests/create_router_tests.py index efa0993..6e10d66 100644 --- a/snaps/openstack/tests/create_router_tests.py +++ b/snaps/openstack/tests/create_router_tests.py @@ -21,7 +21,7 @@ from snaps.openstack.create_network import ( NetworkSettings, PortSettings) from snaps.openstack.create_network import OpenStackNetwork from snaps.openstack.create_router import ( - RouterSettings, RouterSettingsError, RouterCreationError) + RouterSettings, RouterSettingsError) from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase from snaps.openstack.utils import neutron_utils @@ -169,6 +169,46 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.assertTrue(verify_router_attributes( router, self.router_creator, ext_gateway=self.ext_net_name)) + def test_create_router_admin_user_to_new_project(self): + """ + Test creation of a most basic router with the admin user pointing + to the new project. + """ + router_settings = RouterSettings( + name=self.guid + '-pub-router', external_gateway=self.ext_net_name, + project_name=self.os_creds.project_name) + + self.router_creator = create_router.OpenStackRouter( + self.admin_os_creds, router_settings) + self.router_creator.create() + + router = neutron_utils.get_router_by_name(self.neutron, + router_settings.name) + self.assertIsNotNone(router) + + self.assertTrue(verify_router_attributes( + router, self.router_creator, ext_gateway=self.ext_net_name)) + + def test_create_router_new_user_to_admin_project(self): + """ + Test creation of a most basic router with the new user pointing + to the admin project. + """ + router_settings = RouterSettings( + name=self.guid + '-pub-router', external_gateway=self.ext_net_name, + project_name=self.admin_os_creds.project_name) + + self.router_creator = create_router.OpenStackRouter( + self.os_creds, router_settings) + self.router_creator.create() + + router = neutron_utils.get_router_by_name(self.neutron, + router_settings.name) + self.assertIsNotNone(router) + + self.assertTrue(verify_router_attributes( + router, self.router_creator, ext_gateway=self.ext_net_name)) + def test_create_delete_router(self): """ Test that clean() will not raise an exception if the router is deleted @@ -257,14 +297,23 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.network_creator2.create() port_settings = [ - create_network.PortSettings(name=self.guid + '-port1', ip_addrs=[ - {'subnet_name': network_settings1.subnet_settings[0].name, - 'ip': static_gateway_ip1}], - network_name=network_settings1.name), - create_network.PortSettings(name=self.guid + '-port2', ip_addrs=[ - {'subnet_name': network_settings2.subnet_settings[0].name, - 'ip': static_gateway_ip2}], - network_name=network_settings2.name)] + create_network.PortSettings( + name=self.guid + '-port1', + ip_addrs=[{ + 'subnet_name': + network_settings1.subnet_settings[0].name, + 'ip': static_gateway_ip1 + }], + network_name=network_settings1.name, + project_name=self.os_creds.project_name), + create_network.PortSettings( + name=self.guid + '-port2', + ip_addrs=[{ + 'subnet_name': network_settings2.subnet_settings[0].name, + 'ip': static_gateway_ip2 + }], + network_name=network_settings2.name, + project_name=self.os_creds.project_name)] router_settings = RouterSettings(name=self.guid + '-pub-router', port_settings=port_settings) @@ -293,14 +342,17 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.network_creator1.create() port_settings = [ - create_network.PortSettings(name=self.guid + '-port1', ip_addrs=[ - {'subnet_name': network_settings.subnet_settings[0].name, - 'ip': static_gateway_ip1}], - network_name=network_settings.name)] - - router_settings = RouterSettings(name=self.guid + '-pub-router', - external_gateway=self.ext_net_name, - port_settings=port_settings) + create_network.PortSettings( + name=self.guid + '-port1', + ip_addrs=[{ + 'subnet_name': network_settings.subnet_settings[0].name, + 'ip': static_gateway_ip1}], + network_name=network_settings.name, + project_name=self.os_creds.project_name)] + + router_settings = RouterSettings( + name=self.guid + '-pub-router', external_gateway=self.ext_net_name, + port_settings=port_settings) self.router_creator = create_router.OpenStackRouter(self.os_creds, router_settings) self.router_creator.create() diff --git a/snaps/openstack/tests/create_security_group_tests.py b/snaps/openstack/tests/create_security_group_tests.py index dd28d7d..7cae62b 100644 --- a/snaps/openstack/tests/create_security_group_tests.py +++ b/snaps/openstack/tests/create_security_group_tests.py @@ -16,12 +16,9 @@ import unittest import uuid from snaps.openstack import create_security_group -from snaps.openstack.create_security_group import (SecurityGroupSettings, - SecurityGroupRuleSettings, - Direction, Ethertype, - Protocol, - SecurityGroupRuleSettingsError, - SecurityGroupSettingsError) +from snaps.openstack.create_security_group import ( + SecurityGroupSettings, SecurityGroupRuleSettings, Direction, Ethertype, + Protocol, SecurityGroupRuleSettingsError, SecurityGroupSettingsError) from snaps.openstack.tests import validation_utils from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase from snaps.openstack.utils import neutron_utils @@ -212,6 +209,54 @@ class CreateSecurityGroupTests(OSIntegrationTestCase): validation_utils.objects_equivalent(self.sec_grp_creator.get_rules(), rules) + def test_create_group_admin_user_to_new_project(self): + """ + Tests the creation of an OpenStack Security Group without custom rules. + """ + # Create Image + sec_grp_settings = SecurityGroupSettings( + name=self.sec_grp_name, description='hello group', + project_name=self.admin_os_creds.project_name) + self.sec_grp_creator = create_security_group.OpenStackSecurityGroup( + self.os_creds, sec_grp_settings) + self.sec_grp_creator.create() + + sec_grp = neutron_utils.get_security_group(self.neutron, + self.sec_grp_name) + self.assertIsNotNone(sec_grp) + + validation_utils.objects_equivalent( + self.sec_grp_creator.get_security_group(), sec_grp) + rules = neutron_utils.get_rules_by_security_group( + self.neutron, self.sec_grp_creator.get_security_group()) + self.assertEqual(len(self.sec_grp_creator.get_rules()), len(rules)) + validation_utils.objects_equivalent(self.sec_grp_creator.get_rules(), + rules) + + def test_create_group_new_user_to_admin_project(self): + """ + Tests the creation of an OpenStack Security Group without custom rules. + """ + # Create Image + sec_grp_settings = SecurityGroupSettings( + name=self.sec_grp_name, description='hello group', + project_name=self.os_creds.project_name) + self.sec_grp_creator = create_security_group.OpenStackSecurityGroup( + self.admin_os_creds, sec_grp_settings) + self.sec_grp_creator.create() + + sec_grp = neutron_utils.get_security_group(self.neutron, + self.sec_grp_name) + self.assertIsNotNone(sec_grp) + + validation_utils.objects_equivalent( + self.sec_grp_creator.get_security_group(), sec_grp) + rules = neutron_utils.get_rules_by_security_group( + self.neutron, self.sec_grp_creator.get_security_group()) + self.assertEqual(len(self.sec_grp_creator.get_rules()), len(rules)) + validation_utils.objects_equivalent(self.sec_grp_creator.get_rules(), + rules) + def test_create_delete_group(self): """ Tests the creation of an OpenStack Security Group without custom rules. diff --git a/snaps/openstack/tests/os_source_file_test.py b/snaps/openstack/tests/os_source_file_test.py index 2ccee3f..da474a2 100644 --- a/snaps/openstack/tests/os_source_file_test.py +++ b/snaps/openstack/tests/os_source_file_test.py @@ -31,6 +31,7 @@ dev_os_env_file = pkg_resources.resource_filename( requests.packages.urllib3.disable_warnings(InsecureRequestWarning) + class OSComponentTestCase(unittest.TestCase): def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None, @@ -82,7 +83,7 @@ class OSComponentTestCase(unittest.TestCase): class OSIntegrationTestCase(OSComponentTestCase): def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None, - use_keystone=False, flavor_metadata=None, image_metadata=None, + use_keystone=True, flavor_metadata=None, image_metadata=None, log_level=logging.DEBUG): """ Super for integration tests requiring a connection to OpenStack |