wtorek, 7 marca 2023

Pobranie listy instancji Google Cloud Platform za pomocą PowerShella

 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  

Brak komentarzy:

Prześlij komentarz