Exemple #1
0
    def test_router_create_by_admin_to_different_project(self):
        """
        Tests the creation of an OpenStackRouter by the admin user and
        initialize again with tenant credentials.
        """
        # Create Network

        admin_router_config = RouterConfig(
            name=self.guid + '-router',
            project_name=self.os_creds.project_name)

        self.admin_router_creator = OpenStackRouter(self.admin_os_creds,
                                                    admin_router_config)
        self.admin_router_creator.create()

        proj_router_config = RouterConfig(
            name=self.guid + '-router',
            project_name=self.os_creds.project_name)

        self.proj_router_creator = OpenStackRouter(self.os_creds,
                                                   proj_router_config)
        self.proj_router_creator.create()

        self.assertEqual(self.admin_router_creator.get_router().id,
                         self.proj_router_creator.get_router().id)
Exemple #2
0
    def test_create_router_admin_ports(self):
        """
        Test creation of a router with ports to subnets owned by the admin
        project
        """
        network_settings = NetworkConfig(
            name=self.guid + '-pub-net1',
            subnet_settings=[
                create_network.SubnetConfig(cidr=cidr1,
                                            name=self.guid + '-pub-subnet1',
                                            gateway_ip=static_gateway_ip1)
            ])
        self.network_creator = OpenStackNetwork(self.admin_os_creds,
                                                network_settings)
        self.network_creator.create()

        port_settings = [
            create_network.PortConfig(
                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 = RouterConfig(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)

        with self.assertRaises(PortConfigError):
            self.router_creator.create()
Exemple #3
0
    def test_create_with_invalid_internal_sub(self):
        """
        Test adding an internal subnet owned by admin which should fail.
        """
        network_settings1 = NetworkConfig(
            name=self.guid + '-pub-net1',
            subnet_settings=[
                create_network.SubnetConfig(cidr=cidr1,
                                            name=self.guid + '-pub-subnet1',
                                            gateway_ip=static_gateway_ip1)
            ])
        self.network_creator1 = OpenStackNetwork(self.admin_os_creds,
                                                 network_settings1)

        self.network_creator1.create()
        self.router_settings = RouterConfig(
            name=self.guid + '-pub-router',
            external_gateway=self.ext_net_name,
            internal_subnets=[network_settings1.subnet_settings[0].name])

        self.router_creator = create_router.OpenStackRouter(
            self.os_creds, self.router_settings)

        with self.assertRaises(RouterCreationError):
            self.router_creator.create()
Exemple #4
0
    def test_router_same_name_diff_proj(self):
        """
        Tests the creation of an OpenStackNetwork with the same name
        within a different project/tenant when not configured but implied by
        the OSCreds.
        """
        # Create Router

        router_config = RouterConfig(name=self.guid + '-router')
        self.admin_router_creator = OpenStackRouter(self.admin_os_creds,
                                                    router_config)
        self.admin_router_creator.create()

        self.proj_router_creator = OpenStackRouter(self.os_creds,
                                                   router_config)
        self.proj_router_creator.create()

        self.assertNotEqual(self.admin_router_creator.get_router().id,
                            self.proj_router_creator.get_router().id)

        admin_creator2 = OpenStackRouter(self.admin_os_creds, router_config)
        admin_creator2.create()
        self.assertEqual(self.admin_router_creator.get_router(),
                         admin_creator2.get_router())

        proj_creator2 = OpenStackRouter(self.os_creds, router_config)
        proj_creator2.create()
        self.assertEqual(self.proj_router_creator.get_router(),
                         proj_creator2.get_router())
Exemple #5
0
    def test_create_delete_router(self):
        """
        Test that clean() will not raise an exception if the router is deleted
        by another process.
        """
        self.router_settings = RouterConfig(name=self.guid + '-pub-router',
                                            external_gateway=self.ext_net_name)

        self.router_creator = create_router.OpenStackRouter(
            self.os_creds, self.router_settings)
        created_router = self.router_creator.create()
        self.assertIsNotNone(created_router)
        retrieved_router = neutron_utils.get_router(
            self.neutron,
            self.keystone,
            router_settings=self.router_settings,
            project_name=self.os_creds.project_name)
        self.assertIsNotNone(retrieved_router)

        neutron_utils.delete_router(self.neutron, created_router)

        retrieved_router = neutron_utils.get_router(
            self.neutron,
            self.keystone,
            router_settings=self.router_settings,
            project_name=self.os_creds.project_name)
        self.assertIsNone(retrieved_router)

        # Should not raise an exception
        self.router_creator.clean()
 def prepare_network(self):
     """Create network/subnet/router if they doen't exist yet"""
     self.logger.info(
         "Creating network/subnet/router if they doen't exist yet...")
     subnet_settings = SubnetConfig(name='%s_subnet' % self.case_name,
                                    cidr="192.168.100.0/24")
     network_settings = NetworkConfig(name='%s_net' % self.case_name,
                                      subnet_settings=[subnet_settings])
     orchestra_network = OpenStackNetwork(self.snaps_creds,
                                          network_settings)
     orchestra_network_info = orchestra_network.create()
     self.mano['details']['network'] = {}
     self.mano['details']['network']['id'] = orchestra_network_info.id
     self.mano['details']['network']['name'] = orchestra_network_info.name
     self.mano['details']['external_net_name'] = \
         snaps_utils.get_ext_net_name(self.snaps_creds)
     self.created_resources.append(orchestra_network)
     orchestra_router = OpenStackRouter(
         self.snaps_creds,
         RouterConfig(
             name='%s_router' % self.case_name,
             external_gateway=self.mano['details']['external_net_name'],
             internal_subnets=[subnet_settings.name]))
     orchestra_router.create()
     self.created_resources.append(orchestra_router)
     self.logger.info("Created network and router for Open Baton NFVO...")
Exemple #7
0
    def test_create_router_secure_port(self):
        """
        Test creation of a router with a port that has a security group.
        """
        network_settings = NetworkConfig(
            name=self.guid + '-pub-net1',
            subnet_settings=[
                create_network.SubnetConfig(cidr=cidr1,
                                            name=self.guid + '-pub-subnet1')
            ])
        self.network_creator = OpenStackNetwork(self.os_creds,
                                                network_settings)
        self.network_creator.create()

        port_settings = [
            create_network.PortConfig(
                name=self.guid + '-port1',
                ip_addrs=[{
                    'subnet_name': network_settings.subnet_settings[0].name,
                    'ip': static_gateway_ip1
                }],
                network_name=network_settings.name,
                security_groups=[self.sec_grp_creator.sec_grp_settings.name])
        ]

        router_settings = RouterConfig(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()
Exemple #8
0
    def create_network_infrastructure(self, net_name, subnet_name, subnet_cidr,
                                      router_name):
        logger.info("Creating networks...")
        # Network and subnet
        subnet_settings = SubnetConfig(name=subnet_name, cidr=subnet_cidr)
        network_settings = NetworkConfig(name=net_name,
                                         subnet_settings=[subnet_settings])
        network_creator = OpenStackNetwork(self.os_creds, network_settings)
        network = network_creator.create()

        self.creators.append(network_creator)

        # Router
        logger.info("Creating the router...")
        ext_network_name = env.get('EXTERNAL_NETWORK')

        router_settings = RouterConfig(name=router_name,
                                       external_gateway=ext_network_name,
                                       internal_subnets=[subnet_name])

        router_creator = OpenStackRouter(self.os_creds, router_settings)
        router = router_creator.create()

        self.creators.append(router_creator)

        return network, router
Exemple #9
0
    def __init__(self,
                 project_name,
                 net_name,
                 mtu=None,
                 subnet_name=None,
                 subnet_cidr=None,
                 router_name=None,
                 external_gateway=None,
                 netconf_override=None):
        """
        :param netconf_override: dict() containing the reconfigured
                                 network_type, physical_network and
                                 segmentation_id
        """
        if subnet_name and subnet_cidr:
            network_conf = NetworkConfig(name=net_name,
                                         mtu=mtu,
                                         subnet_settings=[
                                             SubnetConfig(cidr=subnet_cidr,
                                                          name=subnet_name)
                                         ])
        else:
            network_conf = NetworkConfig(name=net_name)
        if netconf_override:
            network_conf.network_type = netconf_override.get('network_type')
            network_conf.physical_network = netconf_override.get(
                'physical_network')
            network_conf.segmentation_id = netconf_override.get(
                'segmentation_id')
        self.network_settings = network_conf

        if router_name:
            if subnet_name:
                self.router_settings = RouterConfig(
                    name=router_name,
                    external_gateway=external_gateway,
                    internal_subnets=[{
                        'subnet': {
                            'project_name': project_name,
                            'network_name': net_name,
                            'subnet_name': subnet_name
                        }
                    }])
            else:
                self.router_settings = RouterConfig(
                    name=router_name, external_gateway=external_gateway)
Exemple #10
0
 def test_create_router_invalid_gateway_name(self):
     """
     Test creating a router without a valid network gateway name.
     """
     with self.assertRaises(RouterConfigError):
         router_settings = RouterConfig(name=self.guid + '-pub-router',
                                        external_gateway="Invalid_name")
         self.router_creator = create_router.OpenStackRouter(
             self.os_creds, router_settings)
         self.router_creator.create()
Exemple #11
0
 def test_create_router_noname(self):
     """
     Test creating a router without a name.
     """
     with self.assertRaises(RouterConfigError):
         router_settings = RouterConfig(name=None,
                                        external_gateway=self.ext_net_name)
         self.router_creator = create_router.OpenStackRouter(
             self.os_creds, router_settings)
         self.router_creator.create()
Exemple #12
0
 def test_create_router_port_external(self):
     """
     Test creation of a router with a port to an custom external network
     created by admin.
     """
     router_settings = RouterConfig(
         name=self.guid + '-pub-router',
         network_name=self.ext_network_creator.get_network().name)
     self.router_creator = create_router.OpenStackRouter(
         self.os_creds, router_settings)
     self.router_creator.create()
Exemple #13
0
 def test_config_with_name_only(self):
     settings = RouterConfig(**{'name': 'foo'})
     self.assertEqual('foo', settings.name)
     self.assertIsNone(settings.project_name)
     self.assertIsNone(settings.external_gateway)
     self.assertTrue(settings.admin_state_up)
     self.assertIsNone(settings.enable_snat)
     self.assertIsNotNone(settings.internal_subnets)
     self.assertTrue(isinstance(settings.internal_subnets, list))
     self.assertEqual(0, len(settings.internal_subnets))
     self.assertIsNotNone(settings.port_settings)
     self.assertTrue(isinstance(settings.port_settings, list))
     self.assertEqual(0, len(settings.port_settings))
Exemple #14
0
    def test_vping_ssh(self, create_vm, path_exists, flavor_create,
                       get_port_ip, vm_active, ssh_active, ssh_client,
                       scp_client, trans_script, do_vping_ssh, ext_net_name):
        os_vm_inst = mock.MagicMock(name='get_console_output')
        os_vm_inst.get_console_output.return_value = 'vPing OK'
        ssh_client = mock.MagicMock(name='get_transport')
        ssh_client.get_transport.return_value = None
        scp_client = mock.MagicMock(name='put')
        scp_client.put.return_value = None

        with mock.patch('snaps.openstack.utils.deploy_utils.create_image',
                        return_value=OpenStackImage(self.os_creds, None)), \
                mock.patch('snaps.openstack.utils.deploy_utils.create_network',
                           return_value=OpenStackNetwork(
                               self.os_creds,
                               NetworkConfig(
                                   name='foo',
                                   subnet_settings=[
                                       SubnetConfig(
                                           name='bar',
                                           cidr='10.0.0.1/24')]))), \
                mock.patch('snaps.openstack.utils.deploy_utils.'
                           'create_vm_instance',
                           return_value=OpenStackVmInstance(
                               self.os_creds,
                               VmInstanceConfig(
                                   name='foo', flavor='bar',
                                   port_settings=[PortConfig(
                                       name='foo', network_name='bar')]),
                               None)), \
                mock.patch('snaps.openstack.utils.deploy_utils.create_keypair',
                           return_value=OpenStackKeypair(
                               self.os_creds, KeypairConfig(name='foo'))), \
                mock.patch('snaps.openstack.utils.deploy_utils.create_router',
                           return_value=OpenStackRouter(
                               self.os_creds, RouterConfig(name='foo'))), \
                mock.patch('snaps.openstack.utils.deploy_utils.'
                           'create_security_group',
                           return_value=OpenStackSecurityGroup(
                               self.os_creds,
                               SecurityGroupConfig(name='foo'))), \
                mock.patch('snaps.openstack.create_instance.'
                           'OpenStackVmInstance.'
                           'get_vm_inst', return_value=os_vm_inst), \
                mock.patch('snaps.openstack.create_instance.'
                           'OpenStackVmInstance.'
                           'ssh_client', return_value=ssh_client):
            self.assertEquals(TestCase.EX_OK, self.vping_ssh.run())
Exemple #15
0
    def test_create_router_port_shared(self):
        """
        Test creation of a router with a port to an custom shared network
        created by admin.
        """
        port_settings = [
            create_network.PortConfig(
                name=self.guid + '-port1',
                network_name=self.shared_network_creator.get_network().name)
        ]

        router_settings = RouterConfig(name=self.guid + '-pub-router',
                                       port_settings=port_settings)
        self.router_creator = create_router.OpenStackRouter(
            self.os_creds, router_settings)
        self.router_creator.create()
Exemple #16
0
 def test_all_internal_subnets_str(self):
     port_settings = PortConfig(name='foo', network_name='bar')
     settings = RouterConfig(
         name='foo', project_name='bar', external_gateway='foo_gateway',
         admin_state_up=True, enable_snat=False,
         internal_subnets=['10.0.0.1/24'], interfaces=[port_settings])
     self.assertEqual('foo', settings.name)
     self.assertEqual('bar', settings.project_name)
     self.assertEqual('foo_gateway', settings.external_gateway)
     self.assertTrue(settings.admin_state_up)
     self.assertFalse(settings.enable_snat)
     self.assertIsNotNone(settings.internal_subnets)
     self.assertTrue(isinstance(settings.internal_subnets, list))
     self.assertEqual(1, len(settings.internal_subnets))
     self.assertEqual(['10.0.0.1/24'], settings.internal_subnets)
     self.assertEqual([port_settings], settings.port_settings)
Exemple #17
0
    def test_create_router_with_ext_port(self):
        """
        Test creation of a router with a port to an external network as an
        'admin' user.
        """
        port_settings = [
            create_network.PortConfig(name=self.guid + '-port1',
                                      network_name=self.ext_net_name)
        ]

        router_settings = RouterConfig(name=self.guid + '-pub-router',
                                       port_settings=port_settings)
        self.router_creator = create_router.OpenStackRouter(
            self.admin_os_creds, router_settings)
        self.router_creator.create()

        admin_neutron = neutron_utils.neutron_client(self.admin_os_creds,
                                                     self.admin_os_session)
        admin_keystone = keystone_utils.keystone_client(
            self.admin_os_creds, self.admin_os_session)
        router = neutron_utils.get_router(
            admin_neutron,
            admin_keystone,
            router_settings=router_settings,
            project_name=self.admin_os_creds.project_name)

        self.assertIsNotNone(router)
        self.assertEquals(router, self.router_creator.get_router())

        ext_net = neutron_utils.get_network(admin_neutron,
                                            admin_keystone,
                                            network_name=self.ext_net_name)

        self.assertIsNotNone(ext_net)
        self.assertIsNotNone(router.port_subnets)

        id_found = False
        for port, subnets in router.port_subnets:
            self.assertIsNotNone(subnets)
            self.assertIsNotNone(port)

            if ext_net.id == port.network_id:
                id_found = True
                for subnet in subnets:
                    self.assertIsNotNone(subnet)
                    self.assertEqual(ext_net.id, subnet.network_id)
        self.assertTrue(id_found)
Exemple #18
0
def create_router_config(neutron, router):
    """
    Returns a RouterConfig object
    :param neutron: the neutron client
    :param router: a SNAPS-OO Router domain object
    :return:
    """
    ext_net_name = None

    if router.external_network_id:
        network = neutron_utils.get_network_by_id(neutron,
                                                  router.external_network_id)
        if network:
            ext_net_name = network.name

    out_ports = list()
    if router.port_subnets:
        for port, subnets in router.port_subnets:
            network = neutron_utils.get_network_by_id(neutron, port.network_id)

            ip_addrs = list()
            if network and router.external_fixed_ips:
                for ext_fixed_ips in router.external_fixed_ips:
                    for subnet in subnets:
                        if ext_fixed_ips['subnet_id'] == subnet.id:
                            ip_addrs.append(ext_fixed_ips['ip_address'])
            else:
                for ip in port.ips:
                    ip_addrs.append(ip['ip_address'])

            ports = neutron_utils.get_ports(neutron, network, ip_addrs)
            for out_port in ports:
                out_ports.append(out_port)

    port_settings = __create_port_configs(neutron, out_ports)

    filtered_settings = list()
    for port_setting in port_settings:
        if port_setting.network_name != ext_net_name:
            filtered_settings.append(port_setting)

    return RouterConfig(name=router.name,
                        external_gateway=ext_net_name,
                        admin_state_up=router.admin_state_up,
                        port_settings=filtered_settings)
Exemple #19
0
    def test_create_router_external_network(self):
        """
        Test creation of a router connected to an external network and a
        private network.
        """
        network_settings = NetworkConfig(
            name=self.guid + '-pub-net1',
            subnet_settings=[
                create_network.SubnetConfig(cidr=cidr1,
                                            name=self.guid + '-pub-subnet1',
                                            gateway_ip=static_gateway_ip1)
            ])
        self.network_creator1 = OpenStackNetwork(self.os_creds,
                                                 network_settings)
        self.network_creator1.create()

        port_settings = [
            create_network.PortConfig(
                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 = RouterConfig(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()

        router = neutron_utils.get_router(
            self.neutron,
            self.keystone,
            router_settings=router_settings,
            project_name=self.os_creds.project_name)

        self.assertEquals(router, self.router_creator.get_router())

        self.check_router_recreation(router, router_settings)
Exemple #20
0
 def test_all_internal_subnets_dict(self):
     port_settings = PortConfig(name='foo', network_name='bar')
     int_subs = {'subnet': {
         'project_name': 'proj_a', 'network_name': 'net_name',
         'subnet_name': 'sub_name'}}
     settings = RouterConfig(
         name='foo', project_name='bar', external_gateway='foo_gateway',
         admin_state_up=True, enable_snat=False,
         internal_subnets=int_subs,
         interfaces=[port_settings])
     self.assertEqual('foo', settings.name)
     self.assertEqual('bar', settings.project_name)
     self.assertEqual('foo_gateway', settings.external_gateway)
     self.assertTrue(settings.admin_state_up)
     self.assertFalse(settings.enable_snat)
     self.assertIsNotNone(settings.internal_subnets)
     self.assertTrue(isinstance(settings.internal_subnets, dict))
     self.assertEqual(1, len(settings.internal_subnets))
     self.assertEqual(int_subs, settings.internal_subnets)
     self.assertEqual([port_settings], settings.port_settings)
Exemple #21
0
    def test_create_router_vanilla(self):
        """
        Test creation of a most basic router with minimal options.
        """
        router_settings = RouterConfig(name=self.guid + '-pub-router',
                                       external_gateway=self.ext_net_name)

        self.router_creator = create_router.OpenStackRouter(
            self.os_creds, router_settings)
        self.router_creator.create()

        router = neutron_utils.get_router(
            self.neutron,
            self.keystone,
            router_settings=router_settings,
            project_name=self.os_creds.project_name)
        self.assertIsNotNone(router)

        self.assertEqual(self.router_creator.get_router(), router)

        self.check_router_recreation(router, router_settings)
Exemple #22
0
    def test_create_router_admin_state_True(self):
        """
        Test creation of a basic router with admin state Up.
        """
        router_settings = RouterConfig(name=self.guid + '-pub-router',
                                       admin_state_up=True)

        self.router_creator = create_router.OpenStackRouter(
            self.os_creds, router_settings)
        self.router_creator.create()

        router = neutron_utils.get_router(
            self.neutron,
            self.keystone,
            router_settings=router_settings,
            project_name=self.os_creds.project_name)
        self.assertIsNotNone(router)

        self.assertEqual(self.router_creator.get_router(), router)

        self.check_router_recreation(router, router_settings)
Exemple #23
0
 def test_vping_userdata(self, *args):
     # pylint: disable=unused-argument
     with mock.patch('snaps.openstack.utils.deploy_utils.create_image',
                     return_value=OpenStackImage(self.os_creds, None)), \
             mock.patch('snaps.openstack.utils.deploy_utils.create_network',
                        return_value=OpenStackNetwork(
                            self.os_creds, NetworkConfig(name='foo'))), \
             mock.patch('snaps.openstack.utils.deploy_utils.create_router',
                        return_value=OpenStackRouter(
                            self.os_creds, RouterConfig(name='foo'))), \
             mock.patch('snaps.openstack.utils.deploy_utils.'
                        'create_vm_instance',
                        return_value=OpenStackVmInstance(
                            self.os_creds,
                            VmInstanceConfig(
                                name='foo', flavor='bar',
                                port_settings=[PortConfig(
                                    name='foo', network_name='bar')]),
                            None)), \
             mock.patch('snaps.openstack.create_instance.'
                        'OpenStackVmInstance.get_console_output',
                        return_value='vPing OK'):
         self.assertEquals(TestCase.EX_OK, self.vping_userdata.run())
Exemple #24
0
    def test_create_router_new_user_as_admin_project(self):
        """
        Test creation of a most basic router with the new user pointing
        to the admin project.
        """
        router_settings = RouterConfig(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(
            self.neutron,
            self.keystone,
            router_settings=router_settings,
            project_name=self.os_creds.project_name)
        self.assertIsNotNone(router)

        self.assertEqual(self.router_creator.get_router().id, router.id)

        self.check_router_recreation(router, router_settings)
Exemple #25
0
 def test_config_all_internal_subnets_str(self):
     int_subs = {'subnet': {
         'project_name': 'proj_a', 'network_name': 'net_name',
         'subnet_name': 'sub_name'}}
     settings = RouterConfig(
         **{'name': 'foo', 'project_name': 'bar',
            'external_gateway': 'foo_gateway', 'admin_state_up': True,
            'enable_snat': False,
            'internal_subnets': int_subs,
            'interfaces':
                [{'port': {'name': 'foo-port',
                           'network_name': 'bar-net'}}]})
     self.assertEqual('foo', settings.name)
     self.assertEqual('bar', settings.project_name)
     self.assertEqual('foo_gateway', settings.external_gateway)
     self.assertTrue(settings.admin_state_up)
     self.assertFalse(settings.enable_snat)
     self.assertIsNotNone(settings.internal_subnets)
     self.assertTrue(isinstance(settings.internal_subnets, dict))
     self.assertEqual(1, len(settings.internal_subnets))
     self.assertEqual(int_subs, settings.internal_subnets)
     self.assertEqual([PortConfig(**{'name': 'foo-port',
                                     'network_name': 'bar-net'})],
                      settings.port_settings)
Exemple #26
0
    def test_create_with_internal_sub(self):
        """
        Test internal_subnets works.
        """
        network_settings1 = NetworkConfig(
            name=self.guid + '-pub-net1',
            subnet_settings=[
                create_network.SubnetConfig(cidr=cidr1,
                                            name=self.guid + '-pub-subnet1',
                                            gateway_ip=static_gateway_ip1)
            ])
        self.network_creator1 = OpenStackNetwork(self.os_creds,
                                                 network_settings1)

        self.network_creator1.create()
        self.router_settings = RouterConfig(
            name=self.guid + '-pub-router',
            external_gateway=self.ext_net_name,
            internal_subnets=[network_settings1.subnet_settings[0].name])

        self.router_creator = create_router.OpenStackRouter(
            self.os_creds, self.router_settings)
        created_router = self.router_creator.create()
        self.assertIsNotNone(created_router)
    def test_vnf(self):
        """Run IXIA Stress test on clearwater ims instance."""
        start_time = time.time()

        cfy_client = self.orchestrator['object']

        outputs = cfy_client.deployments.outputs.get(
            self.vnf['descriptor'].get('name'))['outputs']
        dns_ip = outputs['dns_ip']
        ellis_ip = outputs['ellis_ip']

        self.__logger.info("Creating full IXIA network ...")
        subnet_settings = SubnetConfig(name='ixia_management_subnet',
                                       cidr='10.10.10.0/24',
                                       dns_nameservers=[env.get('NAMESERVER')])
        network_settings = NetworkConfig(name='ixia_management_network',
                                         subnet_settings=[subnet_settings])
        network_creator = OpenStackNetwork(self.snaps_creds, network_settings)
        network_creator.create()
        self.created_object.append(network_creator)
        ext_net_name = snaps_utils.get_ext_net_name(self.snaps_creds)
        router_creator = OpenStackRouter(
            self.snaps_creds,
            RouterConfig(name='ixia_management_router',
                         external_gateway=ext_net_name,
                         internal_subnets=[subnet_settings.name]))
        router_creator.create()
        self.created_object.append(router_creator)

        # security group creation
        self.__logger.info("Creating security groups for IXIA VMs")
        sg_rules = list()
        sg_rules.append(
            SecurityGroupRuleConfig(sec_grp_name="ixia_management",
                                    direction=Direction.ingress,
                                    protocol=Protocol.tcp,
                                    port_range_min=1,
                                    port_range_max=65535))
        sg_rules.append(
            SecurityGroupRuleConfig(sec_grp_name="ixia_management",
                                    direction=Direction.ingress,
                                    protocol=Protocol.udp,
                                    port_range_min=1,
                                    port_range_max=65535))
        sg_rules.append(
            SecurityGroupRuleConfig(sec_grp_name="ixia_management",
                                    direction=Direction.ingress,
                                    protocol=Protocol.icmp))

        ixia_managment_sg_settings = SecurityGroupConfig(
            name="ixia_management", rule_settings=sg_rules)
        securit_group_creator = OpenStackSecurityGroup(
            self.snaps_creds, ixia_managment_sg_settings)

        securit_group_creator.create()
        self.created_object.append(securit_group_creator)

        sg_rules = list()
        sg_rules.append(
            SecurityGroupRuleConfig(sec_grp_name="ixia_ssh_http",
                                    direction=Direction.ingress,
                                    protocol=Protocol.tcp,
                                    port_range_min=1,
                                    port_range_max=65535))

        ixia_ssh_http_sg_settings = SecurityGroupConfig(name="ixia_ssh_http",
                                                        rule_settings=sg_rules)
        securit_group_creator = OpenStackSecurityGroup(
            self.snaps_creds, ixia_ssh_http_sg_settings)

        securit_group_creator.create()
        self.created_object.append(securit_group_creator)

        chassis_flavor_settings = FlavorConfig(name="ixia_vChassis",
                                               ram=4096,
                                               disk=40,
                                               vcpus=2)
        flavor_creator = OpenStackFlavor(self.snaps_creds,
                                         chassis_flavor_settings)
        flavor_creator.create()
        self.created_object.append(flavor_creator)

        card_flavor_settings = FlavorConfig(name="ixia_vCard",
                                            ram=4096,
                                            disk=4,
                                            vcpus=2)
        flavor_creator = OpenStackFlavor(self.snaps_creds,
                                         card_flavor_settings)
        flavor_creator.create()
        self.created_object.append(flavor_creator)

        load_flavor_settings = FlavorConfig(name="ixia_vLoad",
                                            ram=8192,
                                            disk=100,
                                            vcpus=4)
        flavor_creator = OpenStackFlavor(self.snaps_creds,
                                         load_flavor_settings)
        flavor_creator.create()
        self.created_object.append(flavor_creator)

        chassis_image_settings = ImageConfig(
            name=self.test['requirements']['chassis']['image'],
            image_user='******',
            exists=True)

        card_image_settings = ImageConfig(
            name=self.test['requirements']['card']['image'],
            image_user='******',
            exists=True)

        load_image_settings = ImageConfig(
            name=self.test['requirements']['load']['image'],
            image_user='******',
            exists=True)

        chassis_port_settings = PortConfig(name='ixia_chassis_port',
                                           network_name=network_settings.name)

        card1_port1_settings = PortConfig(name='ixia_card1_port1',
                                          network_name=network_settings.name)

        card2_port1_settings = PortConfig(name='ixia_card2_port1',
                                          network_name=network_settings.name)

        card1_port2_settings = PortConfig(name='ixia_card1_port2',
                                          network_name="cloudify_ims_network")

        card2_port2_settings = PortConfig(name='ixia_card2_port2',
                                          network_name="cloudify_ims_network")

        load_port_settings = PortConfig(name='ixia_load_port',
                                        network_name=network_settings.name)

        chassis_settings = VmInstanceConfig(
            name='ixia_vChassis',
            flavor=chassis_flavor_settings.name,
            port_settings=[chassis_port_settings],
            security_group_names=[
                ixia_ssh_http_sg_settings.name, ixia_managment_sg_settings.name
            ],
            floating_ip_settings=[
                FloatingIpConfig(
                    name='ixia_vChassis_fip',
                    port_name=chassis_port_settings.name,
                    router_name=router_creator.router_settings.name)
            ])

        vm_creator = OpenStackVmInstance(self.snaps_creds, chassis_settings,
                                         chassis_image_settings)

        self.__logger.info("Creating Ixia vChassis VM")
        vm_creator.create()
        fip_chassis = vm_creator.get_floating_ip().ip
        self.created_object.append(vm_creator)

        card1_settings = VmInstanceConfig(
            name='ixia_vCard1',
            flavor=card_flavor_settings.name,
            port_settings=[card1_port1_settings, card1_port2_settings],
            security_group_names=[ixia_managment_sg_settings.name])

        vm_creator = OpenStackVmInstance(self.snaps_creds, card1_settings,
                                         card_image_settings)

        self.__logger.info("Creating Ixia vCard1 VM")
        vm_creator.create()
        vcard_ips = list()
        vcard_ips_p2 = list()
        vcard_ips.append(vm_creator.get_port_ip('ixia_card1_port1'))
        vcard_ips_p2.append(vm_creator.get_port_ip('ixia_card1_port2'))
        self.created_object.append(vm_creator)

        card2_settings = VmInstanceConfig(
            name='ixia_vCard2',
            flavor=card_flavor_settings.name,
            port_settings=[card2_port1_settings, card2_port2_settings],
            security_group_names=[ixia_managment_sg_settings.name])

        vm_creator = OpenStackVmInstance(self.snaps_creds, card2_settings,
                                         card_image_settings)

        self.__logger.info("Creating Ixia vCard2 VM")
        vm_creator.create()
        vcard_ips.append(vm_creator.get_port_ip('ixia_card2_port1'))
        vcard_ips_p2.append(vm_creator.get_port_ip('ixia_card2_port2'))
        self.created_object.append(vm_creator)

        load_settings = VmInstanceConfig(
            name='ixia_vLoad',
            flavor=load_flavor_settings.name,
            port_settings=[load_port_settings],
            security_group_names=[
                ixia_ssh_http_sg_settings.name, ixia_managment_sg_settings.name
            ],
            floating_ip_settings=[
                FloatingIpConfig(
                    name='ixia_vLoad_fip',
                    port_name=load_port_settings.name,
                    router_name=router_creator.router_settings.name)
            ])

        vm_creator = OpenStackVmInstance(self.snaps_creds, load_settings,
                                         load_image_settings)

        self.__logger.info("Creating Ixia vLoad VM")
        vm_creator.create()
        fip_load = vm_creator.get_floating_ip().ip
        self.created_object.append(vm_creator)

        self.__logger.info("Chassis IP is: %s", fip_chassis)
        login_url = "https://" + str(fip_chassis) + "/api/v1/auth/session"
        cards_url = "https://" + str(fip_chassis) + "/api/v2/ixos/cards/"

        payload = json.dumps({
            "username": "******",
            "password": "******",
            "rememberMe": "false"
        })
        api_key = json.loads(
            (IxChassisUtils.ChassisRestAPI.postWithPayload(login_url,
                                                           payload)))["apiKey"]

        self.__logger.info("Adding 2 card back inside the ixia chassis...")

        for ip in vcard_ips:
            payload = {"ipAddress": str(ip)}
            response = json.loads(
                IxChassisUtils.ChassisRestAPI.postOperation(
                    cards_url, api_key, payload))
            count = 0
            while (int(
                    IxChassisUtils.ChassisRestAPI.getWithHeaders(
                        response['url'], api_key)['progress']) != 100):
                self.__logger.debug("Operation did not finish yet. \
                                    Waiting for 1 more second..")
                time.sleep(1)
                if count > 60:
                    raise Exception("Adding card take more than 60 seconds")
                count += 1

        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
        ssh.connect(fip_chassis, username="******", password="******")
        cmd = "set license-check disable"
        run_blocking_ssh_command(ssh, cmd)
        cmd = "restart-service ixServer"
        run_blocking_ssh_command(ssh, cmd)

        self.config_ellis(ellis_ip)

        # Get IPs of P-CSCF
        resolver = dns.resolver.Resolver()
        resolver.nameservers = [dns_ip]
        result = resolver.query("bono.clearwater.local")

        iplistims = ''
        i = 0
        for rdata in result:
            i = i + 1
            print rdata.address
            iplistims += str(rdata.address)
            if i != len(result):
                iplistims += ';'

        kResourcesUrl = 'http://%s:%s/api/v0/resources' % (fip_load, 8080)

        kRxfPath = r"REG_CALL_OPNFV_v13.rxf"
        test_filname = self.test['inputs']['test_filname']
        kGatewaySharedFolder = '/mnt/ixload-share/'
        kRxfRelativeUploadPath = 'uploads/%s' % os.path.split(kRxfPath)[1]
        kRxfAbsoluteUploadPath = os.path.join(kGatewaySharedFolder,
                                              kRxfRelativeUploadPath)
        kChassisList = [str(fip_chassis)]
        dataFileNameList = [
            test_filname, 'Registration_only_LPS.tst', 'SIPCall.tst'
        ]

        kPortListPerCommunityCommunity = {
            "VoIP1@VM1": [(1, 1, 1)],
            "VoIP2@VM2": [(1, 2, 1)]
        }

        kStatsToDisplayDict = self.test['inputs']['stats']
        connection = IxRestUtils.getConnection(fip_load, 8080)

        self.__logger.info("Creating a new session...")
        sessionUrl = IxLoadUtils.createSession(connection,
                                               self.test['version'])

        license_server = self.test['inputs']['licenseServer']
        IxLoadUtils.configureLicenseServer(connection, sessionUrl,
                                           license_server)

        files_dir = os.path.join(self.case_dir, 'ixia/files')
        target_file = open(os.path.join(files_dir, test_filname), 'w')
        j2_env = Environment(loader=FileSystemLoader(files_dir),
                             trim_blocks=True)
        self.test['inputs'].update(
            dict(ipchassis=fip_chassis,
                 ipcard1=vcard_ips_p2[0],
                 ipcard2=vcard_ips_p2[1],
                 iplistims=iplistims))

        target_file.write(
            j2_env.get_template(test_filname + '.template').render(
                self.test['inputs']))
        target_file.close()

        self.__logger.info('Uploading files %s...' % kRxfPath)
        for dataFile in dataFileNameList:
            localFilePath = os.path.join(files_dir, dataFile)
            remoteFilePath = os.path.join(kGatewaySharedFolder,
                                          'uploads/%s' % dataFile)
            IxLoadUtils.uploadFile(connection, kResourcesUrl, localFilePath,
                                   remoteFilePath)
        self.__logger.info('Upload file finished.')

        self.__logger.info("Loading repository %s..." % kRxfAbsoluteUploadPath)
        IxLoadUtils.loadRepository(connection, sessionUrl,
                                   kRxfAbsoluteUploadPath)

        self.__logger.info("Clearing chassis list...")
        IxLoadUtils.clearChassisList(connection, sessionUrl)

        self.__logger.info("Adding chassis %s..." % (kChassisList))
        IxLoadUtils.addChassisList(connection, sessionUrl, kChassisList)

        self.__logger.info("Assigning new ports...")
        IxLoadUtils.assignPorts(connection, sessionUrl,
                                kPortListPerCommunityCommunity)

        self.__logger.info("Starting the test...")
        IxLoadUtils.runTest(connection, sessionUrl)

        self.__logger.info("Polling values for stats %s..." %
                           (kStatsToDisplayDict))
        result = IxLoadUtils.pollStats(connection, sessionUrl,
                                       kStatsToDisplayDict)
        self.__logger.info("Test finished.")
        self.__logger.info("Checking test status...")
        testRunError = IxLoadUtils.getTestRunError(connection, sessionUrl)

        self.__logger.info(result)
        duration = time.time() - start_time
        self.details['test_vnf'].update(status='PASS',
                                        result=result,
                                        duration=duration)
        if testRunError:
            self.__logger.info("The test exited with following error: %s" %
                               (testRunError))
            self.details['test_vnf'].update(status='FAIL', duration=duration)
            return False
        else:
            self.__logger.info("The test completed successfully.")
            self.details['test_vnf'].update(status='PASS', duration=duration)
            self.result += 1 / 3 * 100
            return True
Exemple #28
0
    def deploy_orchestrator(self):
        """
        Deploy Cloudify Manager.

        network, security group, fip, VM creation
        """
        # network creation

        start_time = time.time()
        self.__logger.info("Creating keypair ...")
        kp_file = os.path.join(self.data_dir, "cloudify_ims.pem")
        keypair_settings = KeypairConfig(name='cloudify_ims_kp',
                                         private_filepath=kp_file)
        keypair_creator = OpenStackKeypair(self.snaps_creds, keypair_settings)
        keypair_creator.create()
        self.created_object.append(keypair_creator)

        self.__logger.info("Creating full network ...")
        subnet_settings = SubnetConfig(name='cloudify_ims_subnet',
                                       cidr='10.67.79.0/24')
        network_settings = NetworkConfig(name='cloudify_ims_network',
                                         subnet_settings=[subnet_settings])
        network_creator = OpenStackNetwork(self.snaps_creds, network_settings)
        network_creator.create()
        self.created_object.append(network_creator)
        ext_net_name = snaps_utils.get_ext_net_name(self.snaps_creds)
        router_creator = OpenStackRouter(
            self.snaps_creds,
            RouterConfig(name='cloudify_ims_router',
                         external_gateway=ext_net_name,
                         internal_subnets=[subnet_settings.name]))
        router_creator.create()
        self.created_object.append(router_creator)

        # security group creation
        self.__logger.info("Creating security group for cloudify manager vm")
        sg_rules = list()
        sg_rules.append(
            SecurityGroupRuleConfig(sec_grp_name="sg-cloudify-manager",
                                    direction=Direction.ingress,
                                    protocol=Protocol.tcp,
                                    port_range_min=1,
                                    port_range_max=65535))
        sg_rules.append(
            SecurityGroupRuleConfig(sec_grp_name="sg-cloudify-manager",
                                    direction=Direction.ingress,
                                    protocol=Protocol.udp,
                                    port_range_min=1,
                                    port_range_max=65535))

        securit_group_creator = OpenStackSecurityGroup(
            self.snaps_creds,
            SecurityGroupConfig(name="sg-cloudify-manager",
                                rule_settings=sg_rules))

        securit_group_creator.create()
        self.created_object.append(securit_group_creator)

        # orchestrator VM flavor
        self.__logger.info("Get or create flavor for cloudify manager vm ...")

        flavor_settings = FlavorConfig(
            name=self.orchestrator['requirements']['flavor']['name'],
            ram=self.orchestrator['requirements']['flavor']['ram_min'],
            disk=50,
            vcpus=2)
        flavor_creator = OpenStackFlavor(self.snaps_creds, flavor_settings)
        flavor_creator.create()
        self.created_object.append(flavor_creator)
        image_settings = ImageConfig(
            name=self.orchestrator['requirements']['os_image'],
            image_user='******',
            exists=True)

        port_settings = PortConfig(name='cloudify_manager_port',
                                   network_name=network_settings.name)

        manager_settings = VmInstanceConfig(
            name='cloudify_manager',
            flavor=flavor_settings.name,
            port_settings=[port_settings],
            security_group_names=[securit_group_creator.sec_grp_settings.name],
            floating_ip_settings=[
                FloatingIpConfig(
                    name='cloudify_manager_fip',
                    port_name=port_settings.name,
                    router_name=router_creator.router_settings.name)
            ])

        manager_creator = OpenStackVmInstance(self.snaps_creds,
                                              manager_settings, image_settings,
                                              keypair_settings)

        self.__logger.info("Creating cloudify manager VM")
        manager_creator.create()
        self.created_object.append(manager_creator)

        public_auth_url = keystone_utils.get_endpoint(self.snaps_creds,
                                                      'identity')

        self.__logger.info("Set creds for cloudify manager")
        cfy_creds = dict(keystone_username=self.snaps_creds.username,
                         keystone_password=self.snaps_creds.password,
                         keystone_tenant_name=self.snaps_creds.project_name,
                         keystone_url=public_auth_url)

        cfy_client = CloudifyClient(host=manager_creator.get_floating_ip().ip,
                                    username='******',
                                    password='******',
                                    tenant='default_tenant')

        self.orchestrator['object'] = cfy_client

        self.__logger.info("Attemps running status of the Manager")
        cfy_status = None
        retry = 10
        while str(cfy_status) != 'running' and retry:
            try:
                cfy_status = cfy_client.manager.get_status()['status']
                self.__logger.debug("The current manager status is %s",
                                    cfy_status)
            except Exception:  # pylint: disable=broad-except
                self.__logger.warning("Cloudify Manager isn't " +
                                      "up and running. Retrying ...")
            retry = retry - 1
            time.sleep(30)

        if str(cfy_status) == 'running':
            self.__logger.info("Cloudify Manager is up and running")
        else:
            raise Exception("Cloudify Manager isn't up and running")

        self.__logger.info("Put OpenStack creds in manager")
        secrets_list = cfy_client.secrets.list()
        for k, val in cfy_creds.iteritems():
            if not any(d.get('key', None) == k for d in secrets_list):
                cfy_client.secrets.create(k, val)
            else:
                cfy_client.secrets.update(k, val)

        duration = time.time() - start_time

        self.__logger.info("Put private keypair in manager")
        if manager_creator.vm_ssh_active(block=True):
            ssh = manager_creator.ssh_client()
            scp = SCPClient(ssh.get_transport(), socket_timeout=15.0)
            scp.put(kp_file, '~/')
            cmd = "sudo cp ~/cloudify_ims.pem /etc/cloudify/"
            run_blocking_ssh_command(ssh, cmd)
            cmd = "sudo chmod 444 /etc/cloudify/cloudify_ims.pem"
            run_blocking_ssh_command(ssh, cmd)
            cmd = "sudo yum install -y gcc python-devel"
            run_blocking_ssh_command(
                ssh, cmd, "Unable to install packages \
                                                on manager")

        self.details['orchestrator'].update(status='PASS', duration=duration)

        self.vnf['inputs'].update(
            dict(external_network_name=ext_net_name,
                 network_name=network_settings.name))
        self.result = 1 / 3 * 100
        return True
Exemple #29
0
    def deploy_orchestrator(self):  # pylint: disable=too-many-locals
        """
        Create network, subnet, router

        Bootstrap juju
        """
        self.__logger.info("Deployed Orchestrator")
        private_net_name = getattr(
            CONST, 'vnf_{}_private_net_name'.format(self.case_name))
        private_subnet_name = getattr(
            CONST, 'vnf_{}_private_subnet_name'.format(self.case_name))
        private_subnet_cidr = getattr(
            CONST, 'vnf_{}_private_subnet_cidr'.format(self.case_name))
        abot_router = getattr(
            CONST, 'vnf_{}_external_router'.format(self.case_name))

        self.__logger.info("Creating full network ...")
        subnet_settings = SubnetConfig(
            name=private_subnet_name, cidr=private_subnet_cidr)
        network_settings = NetworkConfig(
            name=private_net_name, subnet_settings=[subnet_settings])
        network_creator = OpenStackNetwork(self.snaps_creds, network_settings)
        net_id = network_creator.create().id
        self.created_object.append(network_creator)

        ext_net_name = snaps_utils.get_ext_net_name(self.snaps_creds)
        self.__logger.info("Creating network Router ....")
        router_creator = OpenStackRouter(
            self.snaps_creds, RouterConfig(
                name=abot_router,
                external_gateway=ext_net_name,
                internal_subnets=[subnet_settings.name]))
        router_creator.create()
        self.created_object.append(router_creator)
        self.__logger.info("Creating Flavor ....")
        flavor_settings = FlavorConfig(
            name=self.orchestrator['requirements']['flavor']['name'],
            ram=self.orchestrator['requirements']['flavor']['ram_min'],
            disk=10, vcpus=1)
        flavor_creator = OpenStackFlavor(self.snaps_creds, flavor_settings)
        flavor_creator.create()
        self.created_object.append(flavor_creator)
        self.__logger.info("Upload some OS images if it doesn't exist")
        images = get_config("tenant_images", self.config_file)
        self.__logger.info("Images needed for vEPC: %s", images)
        for image_name, image_file in images.iteritems():
            self.__logger.info("image: %s, file: %s", image_name, image_file)
            if image_file and image_name:
                image_creator = OpenStackImage(self.snaps_creds, ImageConfig(
                    name=image_name, image_user='******', img_format='qcow2',
                    image_file=image_file))
                image_id = image_creator.create().id
                os.system(
                    'juju metadata generate-image -d ~ -i {} -s {} -r '
                    '{} -u {}'.format(
                        image_id, image_name,
                        os.environ.get(
                            "OS_REGION_NAME", self.default_region_name),
                        self.public_auth_url))
                self.created_object.append(image_creator)
        self.__logger.info("Credential information  : %s", net_id)
        juju_bootstrap_command = (
            'juju bootstrap abot-epc abot-controller --config network={} '
            '--metadata-source ~  --config ssl-hostname-verification=false '
            '--constraints mem=2G --bootstrap-series xenial '
            '--config use-floating-ip=true --debug '
            '--config use-default-secgroup=true'.format(net_id))
        os.system(juju_bootstrap_command)
        return True
Exemple #30
0
    def _prepare_env(self):
        """Create resources needed by test scenarios."""
        LOGGER.debug('Validating the test name...')
        if self.test_name not in self.TESTS:
            raise Exception("Test name '%s' is invalid" % self.test_name)

        network_name = self.RALLY_PRIVATE_NET_NAME + self.guid
        subnet_name = self.RALLY_PRIVATE_SUBNET_NAME + self.guid
        router_name = self.RALLY_ROUTER_NAME + self.guid
        self.image_name = self.GLANCE_IMAGE_NAME + self.guid
        self.flavor_name = self.FLAVOR_NAME + self.guid
        self.flavor_alt_name = self.FLAVOR_ALT_NAME + self.guid
        self.ext_net_name = snaps_utils.get_ext_net_name(self.os_creds)
        self.compute_cnt = snaps_utils.get_active_compute_cnt(self.os_creds)

        LOGGER.debug("Creating image '%s'...", self.image_name)
        image_creator = deploy_utils.create_image(
            self.os_creds, ImageConfig(
                name=self.image_name,
                image_file=self.GLANCE_IMAGE_PATH,
                img_format=self.GLANCE_IMAGE_FORMAT,
                image_user=self.GLANCE_IMAGE_USERNAME,
                public=True,
                extra_properties=self.GLANCE_IMAGE_EXTRA_PROPERTIES))
        if image_creator is None:
            raise Exception("Failed to create image")
        self.creators.append(image_creator)

        LOGGER.debug("Creating network '%s'...", network_name)

        rally_network_type = None
        rally_physical_network = None
        rally_segmentation_id = None

        if hasattr(CONST, 'rally_network_type'):
            rally_network_type = CONST.__getattribute__(
                'rally_network_type')
        if hasattr(CONST, 'rally_physical_network'):
            rally_physical_network = CONST.__getattribute__(
                'rally_physical_network')
        if hasattr(CONST, 'rally_segmentation_id'):
            rally_segmentation_id = CONST.__getattribute__(
                'rally_segmentation_id')

        network_creator = deploy_utils.create_network(
            self.os_creds, NetworkConfig(
                name=network_name,
                shared=True,
                network_type=rally_network_type,
                physical_network=rally_physical_network,
                segmentation_id=rally_segmentation_id,
                subnet_settings=[SubnetConfig(
                    name=subnet_name,
                    cidr=self.RALLY_PRIVATE_SUBNET_CIDR)]))
        if network_creator is None:
            raise Exception("Failed to create private network")
        self.priv_net_id = network_creator.get_network().id
        self.creators.append(network_creator)

        LOGGER.debug("Creating router '%s'...", router_name)
        router_creator = deploy_utils.create_router(
            self.os_creds, RouterConfig(
                name=router_name,
                external_gateway=self.ext_net_name,
                internal_subnets=[subnet_name]))
        if router_creator is None:
            raise Exception("Failed to create router")
        self.creators.append(router_creator)

        LOGGER.debug("Creating flavor '%s'...", self.flavor_name)
        flavor_creator = OpenStackFlavor(
            self.os_creds, FlavorConfig(
                name=self.flavor_name, ram=self.FLAVOR_RAM, disk=1, vcpus=1,
                metadata=self.FLAVOR_EXTRA_SPECS))
        if flavor_creator is None or flavor_creator.create() is None:
            raise Exception("Failed to create flavor")
        self.creators.append(flavor_creator)

        LOGGER.debug("Creating flavor '%s'...", self.flavor_alt_name)
        flavor_alt_creator = OpenStackFlavor(
            self.os_creds, FlavorConfig(
                name=self.flavor_alt_name, ram=self.FLAVOR_RAM_ALT, disk=1,
                vcpus=1, metadata=self.FLAVOR_EXTRA_SPECS))
        if flavor_alt_creator is None or flavor_alt_creator.create() is None:
            raise Exception("Failed to create flavor")
        self.creators.append(flavor_alt_creator)