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)
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")
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