
Resolvi postar sobre scripting/automation já que é um dos principais requisitos (skills) da nova cultura IT, comumente chamada por DevOps, que está a ser adoptada pela comunidade IT, e várias empresas mundialmente, inclusive, a Cisco já possui no seu programa de certificações, um curso para desenvolvedores chamado DevNet que valida habilidades (skills) de profissionais DevOps, Automation etc. Seguindo esta tendência decidi aprender (já que em poucas palavras IT: evolui ou morre) e ganhar skills e assim começar a automatizar o máximo possível as minhas tarefas. Quanto a role DevOps, uns dizem que DevOps Enginner não é nada mais que System Enginner 2.0, até acho que faz sentido e concordo, mas essa é uma conversa para outra ocasião.
Indo directo ao tema, escolhi esse post porque no meu datacenter tenho alertas reportando que existem VMs que não tem o VMware Tools instalado, e já podem imaginar que o processo normal de instalação é mesmo manual (1 by 1 VM/VM) diferente do processo de update do VMware Tools que podemos efecturar via vCenter usando o VUM que automatiza esse processo ou mesmo via script PowerCLI.
Portanto, para eliminar esse processo manual, reduzir o tempo de execução desta tarefa e também reduzir a possibilidade de erro humano no processo resolvi automatizar este processo desenvolvendo o script:
import-Module VMware.PowerCLI #Variaveis globais $vc= (Get-VICredentialStoreItem).Host $cred= Get-Credential $conn_vc= Connect-VIServer -Server $vc -Credential $cred $SnapDate= (Get-Date).ToString("dd/MM/yyyy") -replace '/','' $ToolsNotInstalled=@{} #Seleciona VMs com guest/OS windows $VMs=Get-VM * | ? {$_.GuestId -like '*windows*'} | Select Name,PowerState,@{ Name="ToolStatus"; Expression={$_.ExtensionData.Guest.ToolsVersionStatus}},@{N="OSName";Expression= {$_.Guest.OSFullName}} #Verifica se a VM tem o tools instalado e se esta ligada, copia para hashtable foreach($vm in $VMs){ if($vm.ToolStatus -like "guestToolsNotInstalled" -and $vm.PowerState -like "PoweredOn" ) { $ToolsNotInstalled["Nome"]+=@($vm.Name) $ToolsNotInstalled["Estado"]+=@($vm.PowerState) } } #Cria snapshot na VM foreach($vm in $ToolsNotInstalled.Nome) { write-host "Efectuando Snapshot na" $vm new-snapshot -vm $vm -name $vm -description "Snap before VMtools Instalation date $SnapDate" -Memory:$false -RunAsync } #Instala VMware Tools foreach($vm in $ToolsNotInstalled.Nome) { Get-VM $vm | Mount-Tools write-host "instalando VM tools na"$vm -ForegroundColor Yellow -BackgroundColor Black Invoke-Command -computername $vm -ScriptBlock {Start-Process D:\setup64.exe -ArgumentList '/S /v',"/qn REBOOT=R" -Wait } -Credential $cred } #Apaga snapshots criados Get-Snapshot $ToolsNotInstalled.Nome | Remove-Snapshot -RunAsync -Confirm:$false
Nota:
- O script no momento apenas funciona para VMs com sistema operativo Windows.
- A VM tem que estar no dominio.
- Assume que o drive D: (CD/DVD Drive) é usado como ponto de montagem do VMware tools ISO Image.
Bom, por hoje é tudo, espero que apartir de hoje automação seja o vosso melhor amigo, Automation is a Mindset.