def _create_virtual_nic(self, instance, image_info, network_info, vm_ref): if network_info is None: return vif_model = image_info.vif_model if not vif_model: vif_model = "VirtualE1000" vif_infos = [] for vif in network_info: portgroup_name = [] mac_address = vif['address'] network_id = vif['network']['id'] portgroup_name.append(network_id) network_id_cluster_id = (network_id + "-" + self._get_mo_id_from_instance(instance)) portgroup_name.append(network_id_cluster_id) # wait for port group creation (if not present) by neutron agent. network_ref = self._wait_and_get_portgroup_details( self._session, vm_ref, portgroup_name) if not network_ref: msg = ("Portgroup %(vlan)s (or) Portgroup %(vxlan)s.", { 'vlan': network_id, 'vxlan': network_id_cluster_id }) raise exception.NetworkNotCreated(msg) vif_infos.append({ 'network_name': network_id_cluster_id, 'mac_address': mac_address, 'network_ref': network_ref, 'iface_id': vif['id'], 'vif_model': vif_model }) config_spec = self.client_factory.create('ns0:' 'VirtualMachineConfigSpec') vif_spec_list = [] for vif_info in vif_infos: vif_spec = vm_util._create_vif_spec(self.client_factory, vif_info) vif_spec_list.append(vif_spec) config_spec.deviceChange = vif_spec_list # add vm-uuid and iface-id.x values for Neutron. extra_config = [] i = 0 for vif_info in vif_infos: if vif_info['iface_id']: opt = self.client_factory.create('ns0:OptionValue') opt.key = "nvp.iface-id.%d" % i opt.value = vif_info['iface_id'] extra_config.append(opt) i += 1 config_spec.extraConfig = extra_config LOG.debug("Reconfiguring VM instance to attach NIC.") reconfig_task = self._session._call_method(self._session.vim, "ReconfigVM_Task", vm_ref, spec=config_spec) self._session._wait_for_task(reconfig_task) LOG.debug("Reconfigured VM instance to attach NIC.")
def create(self, *args, **kwargs): if kwargs['label'] == 'fail_NetworkNotCreated': raise exception.NetworkNotCreated(req='fake_fail') return self.network_manager.create_networks(*args, **kwargs)