Em suma, você está querendo criar um modelo. Em sua programação de manutenção, converta-a em uma máquina virtual, inicialize a nova máquina virtual, execute sudo yum -y update ; sudo shutdown -h now
.
Quando estiver desativado, converta de volta para um modelo de uma VM ativa. Como você já tem o gerenciamento de configuração no local, você simplesmente criaria uma nova VM correspondente aos manifestos do antigo e rolaria a configuração para a nova, trocaria os registros de DNS e eliminaria o antigo.
Eu não vi uma ferramenta enlatada para executar esse trabalho, mas o VMWare PowerCLI (plug-in do PowerShell para VMWare VCenter) pode converter entre modelos e VMs usando os comandos Set-VM -ToTemplate
e Set-Template -ToVM
[1].
Uma vez que você tenha a VM ativa (a representação ao vivo do modelo) em funcionamento, você pode emitir comandos para o convidado usando o comando Invoke-VMScript
[2], tal como emitindo seus comandos yum [3].
Eu estava brincando com a ideia disso e tenho um hack Q & D de fim de semana. Eu não testei este script, e é quase certamente errado, mas aqui está a idéia básica para você começar. Observe que ele possui algumas ideias ruins, como incluir uma senha em um script ou assumir um espaço de nome simples para suas VMs e Templates.
################################# ## Convert a VMWare template to a running ## system, apply maintenance, then convert ## back to a template ## ## Note, this naively does not do any error- ## checking and does not specify much info ## ## Please adapt to your environment ## ################################# Param { [string] $templatename ; } $RHELPasswd = 'P@$$w0rd!' ; if(! $templatename) { Write-Error "Please pass the name of the template on the command-line" ; exit(-1) ; } if(Get-Template -Name $templatename) { $vm = Set-Template -Template $templatename -ToVM ; $guestscript = 'sudo yum -y update ; sudo shutdown -h now' ; Invoke-VMScript -VM $vm -ScriptText $guestscript -GuestUser 'root' -GuestPassword $RHELPasswd ; Get-VM $vm |Set-VM -ToTemplate -name $templatename ; }