Bonjour,
Suite à une demande sur la ml pcc@, voici un moyen, en utilisant le SDK perl de VMware
de rajouter une carte réseau à une VM.
Pour rappel :
Installation, connection/céco au VC :
http://forum.ovh.com/showthread.php?...8API-VMware%29
Le code pour rajouter une nic donc :
On récupère le datacenter et la VM dans un premier temps.
Code:
print "Getting Datacenter view \n";
my $DatacenterView = Vim::find_entity_view(
'view_type' => 'Datacenter',
'filter' => {
'name' => 'pcc-XXX-XXX-XXX-XXX_Datacenter1'} );
!$DatacenterView and die('Failed to get DatacenterView');
print "Got Datacenter View\n";
my $VMView = Vim::find_entity_view(
'view_type' => 'VirtualMachine',
'begin_entity' => $DatacenterView ,
'filter' => { 'name' => 'MaVM' }
);
!$VMView and die('Failed to get VMViews');
Ok, si on a tout, on peut modifier les paramètres de la VM.
Attention, le process n'est pas le même si on a un vDS ou un nexus1000v (VMware Distributed Switch)
ou un vSS (VMware Standard Switch)
* Méthode VSS :
On build les params :
Code:
my $BackingInfo = VirtualEthernetCardNetworkBackingInfo->new(
'deviceName' => 'VM Network'
);
my $Description = Description->new(
'label' => 'VM Network',
'summary' => 'VM Network'
);
my $VirtualDeviceConnectInfo = VirtualDeviceConnectInfo->new(
'allowGuestControl' => 'true',
'connected' => 'true',
'startConnected' => 'true'
);
my $NetworkDevice = VirtualVmxnet3->new(
'key' => 0,
'backing' => $BackingInfo,
'deviceInfo' => $Description,
'addressType' => 'assigned',
'connectable' => $VirtualDeviceConnectInfo,
'wakeOnLanEnabled' => 1,
);
my $ConfSpec = VirtualDeviceConfigSpec->new(
'device' => $NetworkDevice,
'operation' => VirtualDeviceConfigSpecOperation->new('add'),
);
my $VirtualMachineConfigSpec = VirtualMachineConfigSpec->new( 'deviceChange' => [ $ConfSpec ] ) ;
Et on envoie la request :
Code:
$VMView->ReconfigVM_Task('spec' => $VirtualMachineConfigSpec);};
* Méthode VDS :
Avant de build les params, il faut récupérer la view du DVS avant :
Code:
my $DVSView = Vim::find_entity_view(
'view_type' => 'DistributedVirtualSwitch',
'filter' => { 'name' => 'pcc-XXX-XXX-XXX-XXX-dc1234-n1' },
'begin_entity' => $DatacenterView,
);
!$DVSView and die ("Failed to get DVSView");
my $NetworkView ;
foreach my $Pg (@{ $DVSView->portgroup })
{
my $PgView = Vim::get_view('mo_ref' => $Pg);
if ($PgView->config->name eq 'VM Network')
{
$NetworkView = $PgView;
}
}
!$NetworkView and die "Failed to get NetworkView";
On build les params :
Code:
my $BackingInfo = VirtualEthernetCardDistributedVirtualPortBackingInfo->new(
'port' => DistributedVirtualSwitchPortConnection->new(
'switchUuid' => $DVSView->uuid,
'portgroupKey' => $NetworkView->{'mo_ref'}->value,
),
);
my $Description = Description->new(
'label' => 'VM Network',
'summary' => 'VM Network'
);
my $VirtualDeviceConnectInfo = VirtualDeviceConnectInfo->new(
'allowGuestControl' => 'true',
'connected' => 'true',
'startConnected' => 'true'
);
$NetworkDevice = VirtualVmxnet3->new(
'key' => 0,
'backing' => $BackingInfo,
'deviceInfo' => $Description,
'addressType' => 'assigned',
'connectable' => $VirtualDeviceConnectInfo,
'wakeOnLanEnabled' => 1,
);
my $ConfSpec = VirtualDeviceConfigSpec->new(
'device' => $NetworkDevice,
'operation' => VirtualDeviceConfigSpecOperation->new('add'),
);
my $VirtualMachineConfigSpec = VirtualMachineConfigSpec->new( 'deviceChange' => [ $ConfSpec ] ) ;
+
Et on envoie la request :
Code:
$VMView->ReconfigVM_Task('spec' => $VirtualMachineConfigSpec);};
Remarque :
Si vous voulez un E1000 à la place du VMXNet3, remplacer le $NetworkDevice
par un E1000 :
Code:
my $NetworkDevice = VirtualE1000->new(
'key' => 0,
'backing' => $BackingInfo,
'deviceInfo' => $Description,
'addressType' => 'assigned',
'connectable' => $VirtualDeviceConnectInfo,
'wakeOnLanEnabled' => 1,
);