OVH Community, votre nouvel espace communautaire.

[SDK] Ajout d'une carte réseau à une VM


manu1602
29/10/2014, 09h41
Bonjour

Y as-t-il un moyen de supprimer une carte par un script similaire (pour les VDS) ?

(Jamais content )

Cdlt

Manu1602

floiseau
08/09/2014, 13h46
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,
    );