Google Cloud Platform Team przygotował moduł PoweShell za pomocą którego możemy w łatwy sposób zarządzać różnymi serwisami platformy chmurowej.
W tym poście pokaże jak pobrać listę instancji oraz kawałek kodu bonusowego pokazujący jak pobrać po jednym hoście z każdego Manage Instance Group.
Na początek instalujemy moduł GoogleCloud:
Install-Module GoogleCloud
Komenda pozwalająca wyświetlić wszystkie instancje dla naszego projektu w GCP:
Get-GceInstance -Project "project_Id"
Zostaną wyświetlone wszystkie wirtualne maszyny (Compute Engine) stworzone w naszym projekcie.
Przypuśćmy, że nasz projekt składa się z wielu Manage Instance Groups (MIG). Naszym zadaniem jest sprawdzić na jednej maszynie z danego MIGu np. wersje dll-ki. Chcemy więc napisać kod, który zwróci nam po jednej maszynie dla każdego MIGa. Przyjmijmy dodatkowo że nasze maszyny mają formę nazewnictwa które pozwala w łatwy sposób przyporządkować ją do MIGa.
Możemy dla przykładu przyjąć, że przykładowa lista maszyn to:
envirsvrin-f6mf
envirsvrin-fgmf
envirsvrin-igmf
envirjsrul-femf
envirjsrul-fe1f
envirsvleo-ftmf
envirsvleo-f5mf
Patrząc na to zestawienie od 5-tego znaku, 5 znaków jest unikalnych dla danego MIGa.
Moja propozycja rozwiązania tego zadania, to użycie słownika i przechowanie jednej maszyny dla każdego z migów. Dodatkowo pobrane maszyny sortujemy po dacie stworzenia - tak więc mamy pewność, że maszyna działa od jakiegoś czasu i nie powinno być problemu z połączeniem do niej. Czy jest to najbardziej optymalne rozwiązanie? Zapewne nie - bardziej eleganckim rozwiązaniem byłoby pobranie wszystkich MIGów a następnie pobranie po jednej maszynie z każdego z nich.
$allVmsInProject = Get-GceInstance -Project "projectId" | Sort-Object -Property TimeCreated
#store one Vm for each mig
$vmDictionary = @{}
$(foreach ($vm in $allVmsInProject) {
$vmDictionary[$vm.Name.Substring(5, 5)] = $vm.Name
})
foreach ($vm in $vmDictionary.Values) {
Write-Host $vm
}
Po wykonaniu skryptu otrzymamy następujący rezultat:
envirjsrul-fe1f
envirsvleo-f5mf
envirsvrin-f6mf