예제 #1
0
    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.")
예제 #2
0
 def create(self, *args, **kwargs):
     if kwargs['label'] == 'fail_NetworkNotCreated':
         raise exception.NetworkNotCreated(req='fake_fail')
     return self.network_manager.create_networks(*args, **kwargs)