PowerCLI Move-VM Retorna falha mas vm ainda se move

2

Eu tenho um script que está movendo as VMs de um armazenamento de dados para outro. Eu tenho outra lógica para proteger o backend de armazenamento e fabric de assinatura e esperar para enviar novos pedidos em momentos específicos (requisito de negócio). Estou apenas movendo datastores e não hosts. Eu tenho um bloco try catch em torno do Move-VM como eu quero lidar com a falha. As primeiras duas ou três vezes eu executei o script apenas alguns erros ocorrem e foram tratados como eu esperava. Nas últimas cinco vezes, a movimentação retorna um erro, mas a solicitação de movimentação da VM é bem-sucedida, conforme indicado pela tarefa que vejo no vCenter. Este trabalho também é concluído com sucesso. O Move-VM não está usando o comutador RunAsync. O que faria com que o Move-VM retornasse um erro, mas enviasse com êxito a solicitação de movimentação.

$VMs = Get-VM -Name $ComputerName
$CurrentDataStores = Get-Datastore

foreach ($VM in $VMs){
   foreach ($store in $CurrentDataStores){
      if ($store.name -eq "$Datastore"){
         $rawDatastore = $store
      }
      if ($store.id -Match $VM.DatastoreIdList){
         $VMDatastore = $store.name
      } 
   }
   if ($VMDatastore -eq "$Datastore"){
      Write-Output "$VM : is already on requested Datastore"
   }
   else{
      try {
          Move-VM -VM $VM -Datastore $rawDatastore -ErrorAction Stop
      }
      catch {
         Write-OutPut "$VM : Unable to move VM to new Datastore" 
         continue
      }
   }
}

Move-VMDatastore : <VM Name> : Unable to move VM to new Datastore
At line:1 char:1
+ Move-VMDatastore -ComputerName <VM Name> -Datastore <Move TO Datastore>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Move-VMDatastore


Move-VMDatastore : 12/24/2014 12:50:02 AM    Move-VM        Operation is not valid due to the current state of the
object.
At line:1 char:1
+ Move-VMDatastore -ComputerName <ComputerName[]> -Datastore <Datastore>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Move-VMDatastore
    
por TechGuyTJ 23.12.2014 / 15:42

3 respostas

4

Meu entendimento desse problema é que na implementação do Move-VM, o PowerCLI executa uma tarefa assíncrona, obtém a tarefa e, em seguida, executa Wait-Task nela.

Se a operação for muito rápida, ela falhará com esse problema. Este é um palpite com base no fato de que esta é a exceção exata que você obtém quando você Wait-Task para uma tarefa concluída.

Então basicamente o seu problema é que o seu servidor VMware é muito rápido ...

Uma solução alternativa seria usar o switch -RunAsync e implementar o comportamento correto por conta própria. Algo como:

$Task = Move-VM -VM $VM -Datastore $rawDatastore -ErrorAction Stop -RunAsync
while($true)
{
    switch ($task.State)
    {
         'Success' { $Task.Result; break }
         'Error' { throw $Task.ExtensionData.Info.Error.LocalizedMessage }
         Start-Sleep 5
    }
}

Edit: Eu vi exatamente o mesmo problema com Stop-VM e Remove-VM e trabalhei em torno deles da mesma maneira

    
por 16.12.2015 / 19:05
1

Caso alguém se depare com esse problema, parece que a variável $ task não é atualizada por si só. No meu caso, eu tive que fazer:

 while($task.state -eq "Running")
 {
   Start-Sleep 5
   $task = Get-Task -ID $task.id
 }
    
por 12.05.2017 / 09:05
-1

Eu tive esse problema também. Parece que algo faz com que a conexão do powercli ao servidor do vcenter seja corrompida. Cada vez que eu corro depois que o fato produz o mesmo erro. Eu tenho que fechar minha janela de comando e abrir uma nova janela para resolver o problema.

    
por 24.09.2015 / 18:40