Bonjour,
Voici un bout de script qui permet d'ajouter un nombre de vCPU à une VM.
Ce script prend en compte l'état de la VM et si la VM a le CPU hot Add enabled en cas d'état powered On.
Le retour :
Code:
:[~]$ perl vm.pl
Connecting
Connected
Getting Datacenter view
Got Datacenter View
vm-test-vcpu uuid is => 4223ef75-7367-baaf-225f-631baa506923
VM is CPU Hot Add enabled, going ahead
VM state is poweredOn
Task started
Waiting for task to finish on vcenter...
Disconnected
Le code :
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 $VMViews = Vim::find_entity_views(
'view_type' => 'VirtualMachine',
'begin_entity' => $DatacenterView ,
'filter' => {'name' => 'vm-test-vcpu'}
);
!$VMView and die('Failed to get VMViews');
# Choisir donc le nombre. Attention à la license utilisée.
my $numCPU = 7;
foreach my $VMView (@{ $VMViews })
{
print $VMView->name . " uuid is => " . $VMView->summary->config->uuid . "\n";
if ($VMView->summary->runtime->powerState->{'val'} eq "poweredOn" )
{
if( $VMView->config->cpuHotAddEnabled)
{
print "VM is CPU Hot Add enabled, going ahead \n";
}
else
{
Util::disconnect();
die "VM is " . $VMView->summary->runtime->powerState->{'val'} ." and CPU hot Add is not enabled. Exiting\n";
}
}
print "VM state is " . $VMView->summary->runtime->powerState->{'val'} . "\n";
my $VirtualMachineConfigSpec = VirtualMachineConfigSpec->new(
'numCPUs' => $numCPU,
) ;
my $Task;
eval{$Task = $VMView->ReconfigVM_Task(
'spec' => $VirtualMachineConfigSpec
);
};
if ($@)
{
Util::disconnect();
die ("Error while reconfiguring VM : " , $@);
}
print "Task started \n";
my $finished;
my $TaskView = Vim::get_view('mo_ref' => $Task);
while (!defined $finished)
{
$TaskView->ViewBase::update_view_data();
my $Info = $TaskView->info;
if ($Info->state->val eq 'success')
{
print "Ok \n";
$finished = 1;
}
elsif ($Info->state->val eq 'error')
{
Util::disconnect();
die "Stop waiting, got an error";
}
else
{
print "Waiting for task to finish on vcenter...\n";
sleep 3;
}
}
}
Util::disconnect();
print "Disconnected \n";