Esempio n. 1
0
    def test_find_network_with_name_returns_none(self):
        session = mock.Mock()
        session.network.get_by_name_label.return_value = []

        result = network_utils.find_network_with_name_label(session, "label")

        self.assertIsNone(result)
Esempio n. 2
0
    def test_find_network_with_name_returns_none(self):
        session = mock.Mock()
        session.network.get_by_name_label.return_value = []

        result = network_utils.find_network_with_name_label(session, "label")

        self.assertIsNone(result)
Esempio n. 3
0
    def test_find_network_with_name_label_works(self):
        session = mock.Mock()
        session.network.get_by_name_label.return_value = ["net"]

        result = network_utils.find_network_with_name_label(session, "label")

        self.assertEqual("net", result)
        session.network.get_by_name_label.assert_called_once_with("label")
Esempio n. 4
0
    def test_find_network_with_name_label_works(self):
        session = mock.Mock()
        session.network.get_by_name_label.return_value = ["net"]

        result = network_utils.find_network_with_name_label(session, "label")

        self.assertEqual("net", result)
        session.network.get_by_name_label.assert_called_once_with("label")
Esempio n. 5
0
    def _ensure_vlan_bridge(self, network):
        """Ensure that a VLAN bridge exists."""

        vlan_num = network.get_meta('vlan')
        bridge = network['bridge']
        bridge_interface = (CONF.vlan_interface
                            or network.get_meta('bridge_interface'))
        # Check whether bridge already exists
        # Retrieve network whose name_label is "bridge"
        network_ref = network_utils.find_network_with_name_label(
            self._session, bridge)
        if network_ref is None:
            # If bridge does not exists
            # 1 - create network
            description = 'network for patron bridge %s' % bridge
            network_rec = {
                'name_label': bridge,
                'name_description': description,
                'other_config': {}
            }
            network_ref = self._session.call_xenapi('network.create',
                                                    network_rec)
            # 2 - find PIF for VLAN NOTE(salvatore-orlando): using double
            # quotes inside single quotes as xapi filter only support
            # tokens in double quotes
            expr = ('field "device" = "%s" and field "VLAN" = "-1"' %
                    bridge_interface)
            pifs = self._session.call_xenapi('PIF.get_all_records_where', expr)
            pif_ref = None
            # Multiple PIF are ok: we are dealing with a pool
            if len(pifs) == 0:
                raise Exception(
                    _('Found no PIF for device %s') % bridge_interface)
            for pif_ref in pifs.keys():
                self._session.call_xenapi('VLAN.create', pif_ref,
                                          str(vlan_num), network_ref)
        else:
            # Check VLAN tag is appropriate
            network_rec = self._session.call_xenapi('network.get_record',
                                                    network_ref)
            # Retrieve PIFs from network
            for pif_ref in network_rec['PIFs']:
                # Retrieve VLAN from PIF
                pif_rec = self._session.call_xenapi('PIF.get_record', pif_ref)
                pif_vlan = int(pif_rec['VLAN'])
                # Raise an exception if VLAN != vlan_num
                if pif_vlan != vlan_num:
                    raise Exception(
                        _("PIF %(pif_uuid)s for network "
                          "%(bridge)s has VLAN id %(pif_vlan)d. "
                          "Expected %(vlan_num)d"), {
                              'pif_uuid': pif_rec['uuid'],
                              'bridge': bridge,
                              'pif_vlan': pif_vlan,
                              'vlan_num': vlan_num
                          })

        return network_ref