Пример #1
0
 def test_add_network_create_some_ports_fail(self, log_mock):
     object_utils.create_test_port(
         self.context, node_id=self.node.id,
         uuid=uuidutils.generate_uuid(),
         address='52:54:55:cf:2d:32',
         extra={'vif_port_id': uuidutils.generate_uuid()}
     )
     self.client_mock.create_port.side_effect = [
         {'port': self.neutron_port}, neutron_client_exc.ConnectionFailed]
     with task_manager.acquire(self.context, self.node.uuid) as task:
         neutron.add_ports_to_network(task, self.network_uuid)
         self.assertIn("Could not create neutron port for node's",
                       log_mock.warning.call_args_list[0][0][0])
         self.assertIn("Some errors were encountered when updating",
                       log_mock.warning.call_args_list[1][0][0])
Пример #2
0
 def test_add_network_fail_create_some_ports_empty(self, create_mock,
                                                   rollback_mock, log_mock):
     port2 = object_utils.create_test_port(
         self.context, node_id=self.node.id,
         uuid=uuidutils.generate_uuid(),
         address='52:54:55:cf:2d:32',
         extra={'vif_port_id': uuidutils.generate_uuid()}
     )
     create_mock.side_effect = [{'port': self.neutron_port}, {}]
     with task_manager.acquire(self.context, self.node.uuid) as task:
         neutron.add_ports_to_network(task, self.network_uuid)
         self.assertIn(str(port2.uuid),
                       # Call #0, argument #1
                       log_mock.warning.call_args[0][1]['ports'])
         self.assertFalse(rollback_mock.called)
Пример #3
0
 def _test_add_ports_to_flat_network(self, is_client_id):
     port = self.ports[0]
     if is_client_id:
         extra = port.extra
         extra['client-id'] = self._CLIENT_ID
         port.extra = extra
         port.save()
     expected_body = {
         'port': {
             'network_id': self.network_uuid,
             'admin_state_up': True,
             'binding:vnic_type': 'baremetal',
             'device_owner': 'baremetal:none',
             'device_id': self.node.uuid,
             'mac_address': port.address,
             'binding:profile': {
                 'local_link_information': [port.local_link_connection]
             }
         }
     }
     if is_client_id:
         expected_body['port']['extra_dhcp_opts'] = (
             [{'opt_name': 'client-id', 'opt_value': self._CLIENT_ID}])
     # Ensure we can create ports
     self.client_mock.create_port.return_value = {
         'port': self.neutron_port}
     expected = {port.uuid: self.neutron_port['id']}
     with task_manager.acquire(self.context, self.node.uuid) as task:
         ports = neutron.add_ports_to_network(task, self.network_uuid,
                                              is_flat=True)
         self.assertEqual(expected, ports)
         self.client_mock.create_port.assert_called_once_with(
             expected_body)
Пример #4
0
 def test_add_ports_to_vlan_network_instance_uuid(self, create_mock):
     self.node.instance_uuid = uuidutils.generate_uuid()
     self.node.save()
     port = self.ports[0]
     expected_body = {
         'port': {
             'network_id': self.network_uuid,
             'admin_state_up': True,
             'binding:vnic_type': 'baremetal',
             'device_owner': 'baremetal:none',
             'binding:host_id': self.node.uuid,
             'device_id': self.node.instance_uuid,
             'mac_address': port.address,
             'binding:profile': {
                 'local_link_information': [port.local_link_connection]
             }
         }
     }
     # Ensure we can create ports
     create_mock.return_value = {'port': self.neutron_port}
     expected = {port.uuid: self.neutron_port['id']}
     with task_manager.acquire(self.context, self.node.uuid) as task:
         ports = neutron.add_ports_to_network(task, self.network_uuid)
         self.assertEqual(expected, ports)
         create_mock.assert_called_once_with(expected_body)
Пример #5
0
 def test_add_ports_to_network_instance_uuid(self, vpi_mock):
     self.node.instance_uuid = uuidutils.generate_uuid()
     self.node.network_interface = 'neutron'
     self.node.save()
     port = self.ports[0]
     expected_body = {
         'port': {
             'network_id': self.network_uuid,
             'admin_state_up': True,
             'binding:vnic_type': 'baremetal',
             'device_owner': 'baremetal:none',
             'binding:host_id': self.node.uuid,
             'device_id': self.node.instance_uuid,
             'mac_address': port.address,
             'binding:profile': {
                 'local_link_information': [port.local_link_connection]
             }
         }
     }
     vpi_mock.return_value = True
     # Ensure we can create ports
     self.client_mock.create_port.return_value = {'port': self.neutron_port}
     expected = {port.uuid: self.neutron_port['id']}
     with task_manager.acquire(self.context, self.node.uuid) as task:
         ports = neutron.add_ports_to_network(task, self.network_uuid)
         self.assertEqual(expected, ports)
         self.client_mock.create_port.assert_called_once_with(expected_body)
     self.assertTrue(vpi_mock.called)
Пример #6
0
    def add_cleaning_network(self, task):
        """Add the cleaning network to a node.

        :param task: A TaskManager instance.
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        :raises: NetworkError, InvalidParameterValue
        """
        if not uuidutils.is_uuid_like(CONF.neutron.cleaning_network_uuid):
            raise exception.InvalidParameterValue(
                _(
                    "You must provide a valid cleaning network UUID in "
                    "[neutron]cleaning_network_uuid configuration option."
                )
            )
        # If we have left over ports from a previous cleaning, remove them
        neutron.rollback_ports(task, CONF.neutron.cleaning_network_uuid)
        LOG.info(_LI("Adding cleaning network to node %s"), task.node.uuid)
        vifs = neutron.add_ports_to_network(task, CONF.neutron.cleaning_network_uuid, is_flat=True)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info["cleaning_vif_port_id"] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs
Пример #7
0
 def _add_service_network(self, task, network, process):
     # If we have left over ports from a previous process, remove them
     neutron.rollback_ports(task, network)
     LOG.info('Adding %s network to node %s', process, task.node.uuid)
     vifs = neutron.add_ports_to_network(task, network)
     field = '%s_vif_port_id' % process
     for port in task.ports:
         if port.uuid in vifs:
             internal_info = port.internal_info
             internal_info[field] = vifs[port.uuid]
             port.internal_info = internal_info
             port.save()
     return vifs
Пример #8
0
    def _test_add_ports_to_vlan_network(self,
                                        is_client_id,
                                        security_groups=None):
        # Ports will be created only if pxe_enabled is True
        self.node.network_interface = 'neutron'
        self.node.save()
        object_utils.create_test_port(self.context,
                                      node_id=self.node.id,
                                      uuid=uuidutils.generate_uuid(),
                                      address='52:54:00:cf:2d:22',
                                      pxe_enabled=False)
        port = self.ports[0]
        if is_client_id:
            extra = port.extra
            extra['client-id'] = self._CLIENT_ID
            port.extra = extra
            port.save()
        expected_body = {
            'port': {
                'network_id': self.network_uuid,
                'admin_state_up': True,
                'binding:vnic_type': 'baremetal',
                'device_owner': 'baremetal:none',
                'binding:host_id': self.node.uuid,
                'device_id': self.node.uuid,
                'mac_address': port.address,
                'binding:profile': {
                    'local_link_information': [port.local_link_connection]
                }
            }
        }
        if security_groups:
            expected_body['port']['security_groups'] = security_groups

        if is_client_id:
            expected_body['port']['extra_dhcp_opts'] = ([{
                'opt_name':
                'client-id',
                'opt_value':
                self._CLIENT_ID
            }])
        # Ensure we can create ports
        self.client_mock.create_port.return_value = {'port': self.neutron_port}
        expected = {port.uuid: self.neutron_port['id']}
        with task_manager.acquire(self.context, self.node.uuid) as task:
            ports = neutron.add_ports_to_network(
                task, self.network_uuid, security_groups=security_groups)
            self.assertEqual(expected, ports)
            self.client_mock.create_port.assert_called_once_with(expected_body)
Пример #9
0
    def add_provisioning_network(self, task):
        """Add the provisioning network to a node.

        :param task: A TaskManager instance.
        :raises: NetworkError
        """
        LOG.info(_LI('Adding provisioning network to node %s'), task.node.uuid)
        vifs = neutron.add_ports_to_network(
            task, CONF.neutron.provisioning_network_uuid)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['provisioning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
Пример #10
0
    def add_provisioning_network(self, task):
        """Add the provisioning network to a node.

        :param task: A TaskManager instance.
        :raises: NetworkError
        """
        LOG.info(_LI('Adding provisioning network to node %s'),
                 task.node.uuid)
        vifs = neutron.add_ports_to_network(
            task, CONF.neutron.provisioning_network_uuid)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['provisioning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
Пример #11
0
    def _test_add_ports_to_network(self, is_client_id,
                                   security_groups=None):
        # Ports will be created only if pxe_enabled is True
        self.node.network_interface = 'neutron'
        self.node.save()
        object_utils.create_test_port(
            self.context, node_id=self.node.id,
            uuid=uuidutils.generate_uuid(),
            address='52:54:00:cf:2d:22',
            pxe_enabled=False
        )
        port = self.ports[0]
        if is_client_id:
            extra = port.extra
            extra['client-id'] = self._CLIENT_ID
            port.extra = extra
            port.save()
        expected_body = {
            'port': {
                'network_id': self.network_uuid,
                'admin_state_up': True,
                'binding:vnic_type': 'baremetal',
                'device_owner': 'baremetal:none',
                'binding:host_id': self.node.uuid,
                'device_id': self.node.uuid,
                'mac_address': port.address,
                'binding:profile': {
                    'local_link_information': [port.local_link_connection]
                }
            }
        }
        if security_groups:
            expected_body['port']['security_groups'] = security_groups

        if is_client_id:
            expected_body['port']['extra_dhcp_opts'] = (
                [{'opt_name': 'client-id', 'opt_value': self._CLIENT_ID}])
        # Ensure we can create ports
        self.client_mock.create_port.return_value = {
            'port': self.neutron_port}
        expected = {port.uuid: self.neutron_port['id']}
        with task_manager.acquire(self.context, self.node.uuid) as task:
            ports = neutron.add_ports_to_network(
                task, self.network_uuid, security_groups=security_groups)
            self.assertEqual(expected, ports)
            self.client_mock.create_port.assert_called_once_with(
                expected_body)
Пример #12
0
    def add_cleaning_network(self, task):
        """Add the cleaning network to a node.

        :param task: A TaskManager instance.
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        :raises: NetworkError, InvalidParameterValue
        """
        # If we have left over ports from a previous cleaning, remove them
        neutron.rollback_ports(task, self.get_cleaning_network_uuid())
        LOG.info(_LI('Adding cleaning network to node %s'), task.node.uuid)
        vifs = neutron.add_ports_to_network(
            task, self.get_cleaning_network_uuid())
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['cleaning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs
Пример #13
0
    def add_cleaning_network(self, task):
        """Create neutron ports for each port on task.node to boot the ramdisk.

        :param task: a TaskManager instance.
        :raises: NetworkError
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        """
        # If we have left over ports from a previous cleaning, remove them
        neutron.rollback_ports(task, CONF.neutron.cleaning_network_uuid)
        LOG.info(_LI('Adding cleaning network to node %s'), task.node.uuid)
        vifs = neutron.add_ports_to_network(task,
                                            CONF.neutron.cleaning_network_uuid)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['cleaning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs
Пример #14
0
    def add_cleaning_network(self, task):
        """Add the cleaning network to a node.

        :param task: A TaskManager instance.
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        :raises: NetworkError, InvalidParameterValue
        """
        # If we have left over ports from a previous cleaning, remove them
        neutron.rollback_ports(task, self.get_cleaning_network_uuid())
        LOG.info('Adding cleaning network to node %s', task.node.uuid)
        vifs = neutron.add_ports_to_network(
            task, self.get_cleaning_network_uuid())
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['cleaning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs
Пример #15
0
    def add_cleaning_network(self, task):
        """Create neutron ports for each port on task.node to boot the ramdisk.

        :param task: a TaskManager instance.
        :raises: NetworkError
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        """
        # If we have left over ports from a previous cleaning, remove them
        neutron.rollback_ports(task, CONF.neutron.cleaning_network_uuid)
        LOG.info(_LI('Adding cleaning network to node %s'), task.node.uuid)
        vifs = neutron.add_ports_to_network(task,
                                            CONF.neutron.cleaning_network_uuid)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['cleaning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs
Пример #16
0
    def add_provisioning_network(self, task):
        """Add the provisioning network to a node.

        :param task: A TaskManager instance.
        :raises: NetworkError
        """
        # If we have left over ports from a previous provision attempt, remove
        # them
        neutron.rollback_ports(task, self.get_provisioning_network_uuid())
        LOG.info(_LI('Adding provisioning network to node %s'), task.node.uuid)
        vifs = neutron.add_ports_to_network(
            task,
            self.get_provisioning_network_uuid(),
            security_groups=CONF.neutron.provisioning_network_security_groups)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['provisioning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
Пример #17
0
    def add_provisioning_network(self, task):
        """Add the provisioning network to a node.

        :param task: A TaskManager instance.
        :raises: NetworkError
        """
        # If we have left over ports from a previous provision attempt, remove
        # them
        neutron.rollback_ports(task, self.get_provisioning_network_uuid())
        LOG.info('Adding provisioning network to node %s',
                 task.node.uuid)
        vifs = neutron.add_ports_to_network(
            task, self.get_provisioning_network_uuid(),
            security_groups=CONF.neutron.provisioning_network_security_groups)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['provisioning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
Пример #18
0
    def add_rescuing_network(self, task):
        """Create neutron ports for each port to boot the rescue ramdisk.

        :param task: a TaskManager instance.
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        """
        # If we have left over ports from a previous rescue, remove them
        neutron.rollback_ports(task, self.get_rescuing_network_uuid(task))
        LOG.info('Adding rescuing network to node %s', task.node.uuid)
        security_groups = CONF.neutron.rescuing_network_security_groups
        vifs = neutron.add_ports_to_network(
            task,
            self.get_rescuing_network_uuid(task),
            security_groups=security_groups)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['rescuing_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs
Пример #19
0
    def add_rescuing_network(self, task):
        """Create neutron ports for each port to boot the rescue ramdisk.

        :param task: a TaskManager instance.
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        """
        # If we have left over ports from a previous rescue, remove them
        neutron.rollback_ports(task, self.get_rescuing_network_uuid(task))
        LOG.info('Adding rescuing network to node %s', task.node.uuid)
        security_groups = CONF.neutron.rescuing_network_security_groups
        vifs = neutron.add_ports_to_network(
            task,
            self.get_rescuing_network_uuid(task),
            security_groups=security_groups)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['rescuing_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs
Пример #20
0
    def add_cleaning_network(self, task):
        """Add the cleaning network to a node.

        :param task: A TaskManager instance.
        :returns: a dictionary in the form {port.uuid: neutron_port['id']}
        :raises: NetworkError, InvalidParameterValue
        """
        if not uuidutils.is_uuid_like(CONF.neutron.cleaning_network_uuid):
            raise exception.InvalidParameterValue(_(
                'You must provide a valid cleaning network UUID in '
                '[neutron]cleaning_network_uuid configuration option.'))
        # If we have left over ports from a previous cleaning, remove them
        neutron.rollback_ports(task, CONF.neutron.cleaning_network_uuid)
        LOG.info(_LI('Adding cleaning network to node %s'), task.node.uuid)
        vifs = neutron.add_ports_to_network(
            task, CONF.neutron.cleaning_network_uuid, is_flat=True)
        for port in task.ports:
            if port.uuid in vifs:
                internal_info = port.internal_info
                internal_info['cleaning_vif_port_id'] = vifs[port.uuid]
                port.internal_info = internal_info
                port.save()
        return vifs