Infraestrutura,VMWare, Redes, Automação e o que mais estiver no sangue...

Fique por dentro

Não perca os últimos posts. Increva-se agora e tenha acesso à posts exclusivos para membros.

jamie@example.com
Infra Expert

Encontrando uma VM através do MAC Address no vCenter

Encontrando uma VM através do MAC Address no vCenter

Há sempre aquele momento em que você precisa encontrar uma VM no seu ambiente VMware e você tem apenas o MAC address da interface da VM... Ai eu lhe pergunto, o que você faz nessas horas?
Se você não faz idéia do que você pode fazer, ou faz idéia... fique comigo aqui pois irei mostrar uma forma que talvez você ainda não conheça.

Primeiro vamos elaborar uma situação hipotética (porém acontece com mais frequência do que queremos as vezes), sua equipe de rede lhe informa que há um endereço IP duplicado na rede, e isso está atrapalhando o bom funcionamento do ambiente e você precisa resolver essa situação o mais breve e rápido.
Aqui temos diversas possibilidades que podermos decorrer para resolver o problema... Uma delas é que a depender do ambiente, você consegue saber em qual porta esta esse MAC address e a partir dessa informação você encontra o host que a VM está, mas ainda assim são muitas VM's no host para você procurar uma a uma... Concordas?

Vamos por uma outra abordagem então...

Com um simples script você pode acessar seu ambiente e buscar informações de hardware e descobrir qual é o nome da VM que está lhe atrapalhando.

# MAC address a ser encontrado no ambiente
$strMacToFind = "00:50:50:00:00:69"

Get-View -Viewtype VirtualMachine -Property Name, Config.Hardware.Device | ?{$_.Config.Hardware.Device | ?{($_ -is [VMware.Vim.VirtualEthernetCard]) -and ($_.MacAddress -eq $strMacToFind)}}

A saída do comando acima será um pouco extensa, pois ela irá mostrar diversas informações do Objeto em si.

Name                 : vm-teste
Config               : VMware.Vim.VirtualMachineConfigInfo
Capability           : 
Layout               : 
LayoutEx             : 
Storage              : 
EnvironmentBrowser   : 
ResourcePool         : 
ParentVApp           : 
ResourceConfig       : 
Runtime              : 
Guest                : 
Summary              : 
Datastore            : 
Network              : 
Snapshot             : 
RootSnapshot         : 
GuestHeartbeatStatus : gray
LinkedView           : 
Parent               : 
CustomValue          : 
OverallStatus        : gray
ConfigStatus         : gray
ConfigIssue          : 
EffectiveRole        : 
Permission           : 
DisabledMethod       : 
RecentTask           : 
DeclaredAlarmState   : 
TriggeredAlarmState  : 
AlarmActionsEnabled  : False
Tag                  : 
Value                : 
AvailableField       : 
MoRef                : VirtualMachine-vm-20794
Client               : VMware.Vim.VimClientImpl

Mas há uma forma de simplificar essa saída e nos trazer apenas o nome da máquina, exatamente como precisamos:

# MAC address a ser encontrado no ambiente
$strMacToFind = "00:50:50:00:00:69"

Get-View -Viewtype VirtualMachine -Property Name, Config.Hardware.Device | ?{$_.Config.Hardware.Device | ?{($_ -is [VMware.Vim.VirtualEthernetCard]) -and ($_.MacAddress -eq $strMacToFind)}} | Select name, @{n="MAC(s)"; e={($_.Config.Hardware.Device | ?{($_ -is [VMware.Vim.VirtualEthernetCard])} | %{$_.MacAddress}) -join ","}}

E como saída nós temos exatamente o que precisamos:

Name                      MAC(s)
----                      ------
vm-teste 00:50:50:00:00:69

Uma coisa que é importante salientar é que você precisa de alguns comandos antes no script, para poder logar no seu vcenter e buscar essas informações.

# se você tem um certificado invalido em seu vCenter, você ira utilizar a linha abaixo, se não for seu caso, utilize apenas a outra linha.
Set-PowerCLIConfiguration -InvalidCertificateAction:Ignore -Scope:User

# essa linha server para conectar ao seu vCenter
Connect-VIServer -Server vcenter.dominio.br

E agora vem uma dica bônus:
Você pode rodar esses comandos diretamente do conforto do seu container Docker... (eu amo docker, essa é a real...). Para isso basta executar o comando no terminal e abrir o container do PowerCLI:

docker run --rm -it vmware/powerclicore

Após isso, já irá abrir direto a console, e aí é só ser feliz 😄

Set-PowerCLIConfiguration -InvalidCertificateAction:Ignore -Scope:User
Connect-VIServer -Server vcenter.dominio.br

$strMacToFind = "00:50:50:00:00:69"

Get-View -Viewtype VirtualMachine -Property Name, Config.Hardware.Device | ?{$_.Config.Hardware.Device | ?{($_ -is [VMware.Vim.VirtualEthernetCard]) -and ($_.MacAddress -eq $strMacToFind)}}

Mais informações sobre PowerCLI você encontra no repositório:

GitHub - vmware/powerclicore: PowerCLI Core Dockerfile
PowerCLI Core Dockerfile. Contribute to vmware/powerclicore development by creating an account on GitHub.
Último Post