def test_single_port_static(self):
        """
        Tests the creation of an OpenStack instance with a single port with a static IP.
        """
        port_settings = create_network.PortSettings(name='test-port-1',
                                                    ip_address=ip_1)
        ports = [
            neutron_utils.create_port(self.network_creator.neutron,
                                      port_settings,
                                      self.network_creator.network)
        ]
        floating_ip_conf = {
            'port_name': 'test-port-1',
            'ext_net': pub_net_config.router_settings.external_gateway
        }
        self.inst_creator = create_instance.OpenStackVmInstance(
            self.os_creds,
            vm_inst_name,
            flavor,
            self.image_creator,
            ports,
            self.os_image_settings.image_user,
            floating_ip_conf=floating_ip_conf)
        vm_inst = self.inst_creator.create()

        self.assertEquals(
            ip_1, self.inst_creator.ports[0]['port']['dns_assignment'][0]
            ['ip_address'])
        self.assertTrue(self.inst_creator.vm_active(block=True))

        # TODO - add check to ensure can ssh with timout. Commented line below will almost always return False on the
        # first several attempts
        # self.assertTrue(self.inst_creator._ssh_active())
        self.assertEquals(vm_inst, self.inst_creator.vm)
def create_vm_instance(os_conn_config, instance_config, image, network_dict,
                       keypair_creator):
    """
    Creates a VM instance
    :param os_conn_config: The OpenStack credentials
    :param instance_config: The VM instance configuration
    :param image: The VM image
    :param network_dict: A dictionary of network objects returned by OpenStack where the key contains the network name.
    :param keypair_creator: The object responsible for creating the keypair associated with this VM instance.
    :return: A reference to the VM instance object
    """
    from openstack.create_network import PortSettings
    from openstack.create_instance import OpenStackVmInstance

    os_creds = get_os_credentials(os_conn_config)
    neutron = neutron_utils.neutron_client(os_creds)
    config = instance_config['instance']
    ports_config = config['ports']
    existing_ports = neutron.list_ports()['ports']
    ports = list()

    for port_config in ports_config:
        network_name = port_config['port']['network_name']
        port_name = port_config['port']['name']
        found = False
        for existing_port in existing_ports:
            if existing_port['name'] == port_name:
                existing_port_dict = {'port': existing_port}
                ports.append(existing_port_dict)
                found = True

        if not found:
            os_network_obj = network_dict.get(network_name)
            if os_network_obj:
                logger.info('Creating port [' + port_config['port']['name'] +
                            '] for network name - ' + network_name)
                port_setting = PortSettings(port_config)
                ports.append(
                    neutron_utils.create_port(neutron, port_setting,
                                              os_network_obj.network,
                                              os_network_obj.subnet))
            else:
                logger.warn(
                    'Cannot create port as associated network name of [' +
                    network_name + '] not configured.')
                raise Exception

    from openstack.create_image import OpenStackImage
    # TODO - need to configure in the image username
    image_creator = OpenStackImage(image=image, image_user='******')
    vm_inst = OpenStackVmInstance(os_creds, config['name'], config['flavor'],
                                  image_creator, ports, config['sudo_user'],
                                  keypair_creator, config.get('floating_ip'))
    vm_inst.create()
    return vm_inst
    def setUp(self):
        """
        Instantiates the CreateImage object that is responsible for downloading and creating an OS image file
        within OpenStack
        """
        # Create Image
        self.os_image_settings = openstack_tests.get_instance_image_settings()
        self.image_creator = create_image.OpenStackImage(self.os_creds, self.os_image_settings.image_user,
                                                         self.os_image_settings.format,
                                                         self.os_image_settings.url,
                                                         self.os_image_settings.name,
                                                         self.os_image_settings.download_file_path)
        self.image_creator.create()

        # Create Network
        self.network_creators = list()
        # First network is public
        self.network_creators.append(create_network.OpenStackNetwork(self.os_creds, pub_net_config.network_settings,
                                                                     pub_net_config.subnet_settings,
                                                                     pub_net_config.router_settings))
        # Second network is private
        self.network_creators.append(create_network.OpenStackNetwork(self.os_creds, priv_net_config.network_settings,
                                                                     priv_net_config.subnet_settings,
                                                                     priv_net_config.router_settings))
        for network_creator in self.network_creators:
            network_creator.create()

        self.keypair_creator = create_keypairs.OpenStackKeypair(self.os_creds,
                                                                create_keypairs.KeypairSettings(name=keypair_name,
                                                                                public_filepath=keypair_pub_filepath,
                                                                                private_filepath=keypair_priv_filepath))
        self.keypair_creator.create()

        floating_ip_conf = dict()

        ports = []
        for network_creator in self.network_creators:
            idx = self.network_creators.index(network_creator)
            # port_name = 'test-port-' + `idx`
            port_name = 'test-port-' + repr(idx)
            if idx == 0:
                floating_ip_conf = {'port_name': port_name, 'ext_net': pub_net_config.router_settings.external_gateway}

            port_settings = create_network.PortSettings(name=port_name)
            ports.append(neutron_utils.create_port(network_creator.neutron, port_settings, network_creator.network))

        # Create instance
        self.inst_creator = create_instance.OpenStackVmInstance(self.os_creds, vm_inst_name, flavor,
                                                                self.image_creator, ports,
                                                                self.os_image_settings.image_user,
                                                                keypair_creator=self.keypair_creator,
                                                                floating_ip_conf=floating_ip_conf)
        self.inst_creator.create()

        self.test_file_local_path = '/tmp/hello.txt'
Пример #4
0
    def test_create_port_invalid_ip_to_subnet(self):
        """
        Tests the neutron_utils.create_port() function for an Exception when the IP value is None
        """
        self.network = neutron_utils.create_network(self.neutron, self.net_config.network_settings)
        self.assertEqual(self.net_config.net_name, self.network['network']['name'])
        self.assertTrue(validate_network(self.neutron, self.net_config.net_name, True))

        self.subnet = neutron_utils.create_subnet(self.neutron, self.net_config.subnet_settings, self.network)
        validate_subnet(self.neutron, self.net_config.subnet_name, self.net_config.subnet_cidr, True)

        with self.assertRaises(Exception):
            self.port = neutron_utils.create_port(self.neutron, port_name, self.network, '10.197.123.100')
Пример #5
0
    def test_create_port_null_network_object(self):
        """
        Tests the neutron_utils.create_port() function for an Exception when the network object is None
        """
        self.network = neutron_utils.create_network(self.neutron, self.net_config.network_settings)
        self.assertEqual(self.net_config.net_name, self.network['network']['name'])
        self.assertTrue(validate_network(self.neutron, self.net_config.net_name, True))

        self.subnet = neutron_utils.create_subnet(self.neutron, self.net_config.subnet_settings, self.network)
        validate_subnet(self.neutron, self.net_config.subnet_name, self.net_config.subnet_cidr, True)

        with self.assertRaises(Exception):
            self.port = neutron_utils.create_port(self.neutron, port_name, None, ip_1)
Пример #6
0
    def test_create_port_empty_name(self):
        """
        Tests the neutron_utils.create_port() function
        """
        self.network = neutron_utils.create_network(self.neutron, self.net_config.network_settings)
        self.assertEqual(self.net_config.net_name, self.network['network']['name'])
        self.assertTrue(validate_network(self.neutron, self.net_config.net_name, True))

        self.subnet = neutron_utils.create_subnet(self.neutron, self.net_config.subnet_settings, self.network)
        validate_subnet(self.neutron, self.net_config.subnet_name, self.net_config.subnet_cidr, True)

        self.port = neutron_utils.create_port(self.neutron, create_network.PortSettings(ip_address=ip_1), self.network)
        validate_port(self.neutron, port_name, True)
    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.
        """
        floating_ip_conf = dict()
        # Create ports/NICs for instance
        ports = []
        for network_creator in self.network_creators:
            idx = self.network_creators.index(network_creator)
            # port_name = 'test-port-' + `idx`
            port_name = 'test-port-' + repr(idx)
            if idx == 0:
                floating_ip_conf = {
                    'port_name': port_name,
                    'ext_net': pub_net_config.router_settings.external_gateway
                }

            port_settings = create_network.PortSettings(name=port_name)
            ports.append(
                neutron_utils.create_port(network_creator.neutron,
                                          port_settings,
                                          network_creator.network))

        # Create instance
        self.inst_creator = create_instance.OpenStackVmInstance(
            self.os_creds,
            vm_inst_name,
            flavor,
            self.image_creator,
            ports,
            self.os_image_settings.image_user,
            keypair_creator=self.keypair_creator,
            floating_ip_conf=floating_ip_conf)
        vm_inst = self.inst_creator.create()
        self.assertEquals(vm_inst, self.inst_creator.vm)

        # Effectively blocks until VM has been properly activated
        self.assertTrue(self.inst_creator.vm_active(block=True))

        # Effectively blocks until VM's ssh port has been opened
        self.assertTrue(self.inst_creator.vm_ssh_active(block=True))

        self.inst_creator.config_rpm_nics()
    def test_single_port_dhcp(self):
        """
        Tests the creation of an OpenStack instance with a single port with a DHCP assigned IP.
        """
        port_settings = create_network.PortSettings(name='test-port-1')
        ports = [neutron_utils.create_port(self.network_creator.neutron, port_settings, self.network_creator.network)]
        self.inst_creator = create_instance.OpenStackVmInstance(self.os_creds, vm_inst_name, flavor,
                                                                self.image_creator, ports,
                                                                self.os_image_settings.image_user)
        vm_inst = self.inst_creator.create()

        self.assertTrue(self.inst_creator.vm_active(block=True))

        # TODO - add check to ensure can ssh with timout. Commented line below will almost always return False on the
        # first several attempts
        # self.assertTrue(self.inst_creator._ssh_active())
        self.assertEquals(vm_inst, self.inst_creator.vm)
    def test_single_port_static(self):
        """
        Tests the creation of an OpenStack instance with a single port with a static IP.
        """
        port_settings = create_network.PortSettings(name='test-port-1', ip_address=ip_1)
        ports = [neutron_utils.create_port(self.network_creator.neutron, port_settings, self.network_creator.network)]
        floating_ip_conf = {'port_name': 'test-port-1', 'ext_net': pub_net_config.router_settings.external_gateway}
        self.inst_creator = create_instance.OpenStackVmInstance(self.os_creds, vm_inst_name, flavor,
                                                                self.image_creator, ports,
                                                                self.os_image_settings.image_user,
                                                                floating_ip_conf=floating_ip_conf)
        vm_inst = self.inst_creator.create()

        self.assertEquals(ip_1, self.inst_creator.ports[0]['port']['dns_assignment'][0]['ip_address'])
        self.assertTrue(self.inst_creator.vm_active(block=True))

        # TODO - add check to ensure can ssh with timout. Commented line below will almost always return False on the
        # first several attempts
        # self.assertTrue(self.inst_creator._ssh_active())
        self.assertEquals(vm_inst, self.inst_creator.vm)
    def test_single_port_dhcp(self):
        """
        Tests the creation of an OpenStack instance with a single port with a DHCP assigned IP.
        """
        port_settings = create_network.PortSettings(name='test-port-1')
        ports = [
            neutron_utils.create_port(self.network_creator.neutron,
                                      port_settings,
                                      self.network_creator.network)
        ]
        self.inst_creator = create_instance.OpenStackVmInstance(
            self.os_creds, vm_inst_name, flavor, self.image_creator, ports,
            self.os_image_settings.image_user)
        vm_inst = self.inst_creator.create()

        self.assertTrue(self.inst_creator.vm_active(block=True))

        # TODO - add check to ensure can ssh with timout. Commented line below will almost always return False on the
        # first several attempts
        # self.assertTrue(self.inst_creator._ssh_active())
        self.assertEquals(vm_inst, self.inst_creator.vm)
    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.
        """
        floating_ip_conf = dict()
        # Create ports/NICs for instance
        ports = []
        for network_creator in self.network_creators:
            idx = self.network_creators.index(network_creator)
            # port_name = 'test-port-' + `idx`
            port_name = 'test-port-' + repr(idx)
            if idx == 0:
                floating_ip_conf = {'port_name': port_name, 'ext_net': pub_net_config.router_settings.external_gateway}

            port_settings = create_network.PortSettings(name=port_name)
            ports.append(neutron_utils.create_port(network_creator.neutron, port_settings, network_creator.network))

        # Create instance
        self.inst_creator = create_instance.OpenStackVmInstance(self.os_creds, vm_inst_name, flavor,
                                                                self.image_creator, ports,
                                                                self.os_image_settings.image_user,
                                                                keypair_creator=self.keypair_creator,
                                                                floating_ip_conf=floating_ip_conf)
        vm_inst = self.inst_creator.create()
        self.assertEquals(vm_inst, self.inst_creator.vm)

        # Effectively blocks until VM has been properly activated
        self.assertTrue(self.inst_creator.vm_active(block=True))

        # Effectively blocks until VM's ssh port has been opened
        self.assertTrue(self.inst_creator.vm_ssh_active(block=True))

        self.inst_creator.config_rpm_nics()