RegisterVM_task onliner

Raiders Of The Lost VMX est l’un des plus vieux et des plus célèbres script de Luc Dekens. Pour rappel il permet, entre autres, d’enregistrer en masse des vmx “perdus”. Très pratique pour les tests de Disaster Recovery en mode artisanal…

Apres un crash de carte SD de boot, sans backup du state.tgz (sinon c’est pas drôle), nous devions ré-enregistrer les VM présentent sur ce host en standalone. Ces VM étant des replicas Veeam, nous ne pouvions pas risquer de perdre le MoRef, donc obligation de les enregistrer en direct sur l’ESX fraichement redeployé. Et comme il y en avait plus de 150, pas question de le faire à la main donc pourquoi ne pas utiliser le script de Luc ? Oui pourquoi ? Et bien parce que nous voulions le faire avec un oneliner bien sur !

Voici donc un oneliner qui va chercher les fichiers vmx dans le datastore datastore1 (à changer au début du oneliner) et les enregistrer avec leur nom original (DisplayName dans le vmx) sur l’ESX.

Get-View -ViewType Datastore -Property Name,Browser -Filter @{"Name" = "^datastore1$"}|%{(Get-View $_.Browser).SearchDatastoreSubFolders($("[" + $_.Name + "]"),(New-Object VMware.Vim.HostDatastoreBrowserSearchSpec -Property @{matchPattern=("*.vmx")}))}|%{(Get-View -ViewType Folder -Property Name -Filter @{"Name" = "^vm"}).GetType().GetMethod("RegisterVM_Task").Invoke($(Get-View -ViewType Folder -Property Name -Filter @{"Name" = "^vm"}),@($($_.FolderPath + "/" + $_.File.Path),$null,$false,(Get-View -ViewType ResourcePool -Property Name -Filter @{"Name" = "Resources"}).MoRef,$null))}

1ere chose importante, ce onliner doit impérativement être exécuté depuis l’ESX et non le vcenter pour ne pas perde le MoRef des vm, si toute fois elles existent déjà dans le vCenter. Donc c’est un connect-viserver sur l’ESX qu’il convient d’exécuter dans votre console PowerCLI.

2eme chose, la difficulté de ce oneliner à été de faire passer un $null pour le paramètre “name” à la method RegisterVM_Task :

If this parameter is not set, the displayName configuration parameter of the virtual machine is used

Ca a l’air de rien mais en l’état c’est impossible et c’est grâce à un vieux post de Luc (encore lui !) qui retranscrit une solution provenant du support VMware :

VMware Support came up with a solution.
Big thanks to Jain

The problem was basically how to “not set” the name parameter from within PowerShell.

Nous avons donc pu intégrer ce bout de script au notre. Enjoy!

The (old) Ladykillers

Pour bien commencer le printemps et son grand ménage traditionnel, nous vous proposons un petit oneliner qui vous affichera la liste des vm éteintes avec la date du poweroff basée sur la dernière modification du fichier nvram (qui coincide au fameux “VMX has left the building” dans le vmware.log) donc pas de dépendance avec la stratégie de rétention des tasks et events de votre VCDB.

Nous avons ajouté la taille de la VM pour vous motiver à faire un VeeamZIP et à en finir définitivement avec ces VM qui risque d’être redémarrées après un crash d’ESX…

get-view -viewtype virtualmachine -property name,runtime,layoutex|?{$_.Runtime.PowerState -eq "poweredOff" -and $_.Runtime.ConnectionState -eq "connected" -and !$_.config.template}|?{$_.LayoutEx.File|?{$_.type -match "nvram"}}|%{$_|select Name, @{n="Modification";e={((get-view (get-view -viewtype datastore –filter @{"Name"=($_.LayoutEx.File|?{$_.type -eq "nvram"}).name.split("[]")[1]}).browser).SearchDatastore(($_.LayoutEx.File|?{$_.type -eq "nvram"}).name.split("/")[0],(New-Object VMware.Vim.HostDatastoreBrowserSearchSpec -property @{matchPattern=("*.nvram"); details=(New-Object VMware.Vim.FileQueryFlags -property @{modification=$true})}))|%{$_.file}).Modification}}, @{n="SizeGB";e={[math]::round(($_.LayoutEx.File|measure -Property size -sum).sum/1GB,1)}}}

Tags: , ,

Welcome to the 2017 vExpert Program

Cela fait déjà plus d’un mois mais je me devais d’adresser un message de remerciement comme le veut la coutume et j’en profite pour rassurer les fanatiques d’Hyper-V sur la rumeur de fermeture d’Hypervisor.fr : j’étais juste un peu occupé à plein d’autres choses mais l’histoire ne s’arrête évidement pas là…

Donc encore merci à tous et stay tuned ;)

Tags:

vExpert VSAN 2016

Depuis quelques jours, je fais parti, ainsi que mon très cher “confrère” et ami Frédéric, du cercle très fermé des vExpert VSAN 2016.

C’est un honneur que nous devons en grande parti au travail effectué sur SexiGraf ainsi qu’à la communauté qui nous a largement soutenu dans notre démarche.

Merci à tous pour votre implication, vos retours et vos critique qui nous permettent de faire avancer cet outil dans la bonne direction!

Tags:

VSAN SwapThickProvisionDisabled OneLiner

Alors que nous en rêvions depuis 10 ans pour VMFS, VMware a introduit dans VSAN 6.2 la possibilité de “thin provisioner” la swap des VM :

In Virtual SAN 6.2, we introduced an advanced host setting called SwapThickProvisionDisabled, when enabled, removes the space reservation for .vswp files.

Une preuve de plus, s’il en fallait, que la bataille du SDS/HCI est rude jusqu’à en rogner ses best practices. En effet, nous rappelons à ceux qui auraient un trou de mémoire que placer le fichier de swap d’une VM sur un stockage “thin provisioné” va à l’encontre de toutes les bonnes règles de gestion et d’overcommit.

Do not store swap files on thin-provisioned LUNs. Running a virtual machine with a swap file that is stored on a thin-provisioned LUN can cause swap file growth failure, which can lead to termination of the virtual machine.

Regardless of the storage type or location used for the regular swap file, for the best performance, and to avoid the possibility of running out of space, swap files should not be placed on thin-provisioned storage.

Qu’importe, ca nous arrange bien aussi et pour l’occasion nous avons fait peter un petit oneliner pour fixer la bonne valeur :

Get-VMHost|%{(Get-EsxCli -VMHost $_).system.settings.advanced.set($null,"1","/VSAN/SwapThickProvisionDisabled",$null)}

Et un autre pour vérifier que c’est bien appliqué :

Get-VMHost|%{(Get-EsxCli -VMHost $_).system.settings.advanced.list($null,"/VSAN/SwapThickProvisionDisabled",$null)}

Avec un petit coup de SexiGraf pour monitorer le tout, on est bon :

Tags: , ,