Przedstawię dzisiaj jedną z możliwości portalu https://resources.azure.com, w którym będziemy dokonywać edycji maszyny wirtualnej za pomocą JSON. Edycja maszyny wirtualnej to tylko jedna z wielu możliwości jakie daje nam zarówno w/w portal oraz JSON. Możemy tak naprawdę dokonywać zarówno edycji, jak i tworzenia nowych elementów z poziomu kodu. Portal jest bardzo czytelny i przyjemny w poruszaniu się, wszystkie elementy mają logiczny układ. Jeżeli nie jesteśmy programistami lub nie mamy czasu na zabawę w kodzie od podstaw, możemy skorzystać z gotowych skryptów, które pomogą nam uruchomić np. nasze środowisko do testów. Skrypty są dostępne na stronie https://github.com/Azure, gotowe w formacie JSON do implementacji. Do szczegółowego zapoznania się z JSON odsyłam do dokumentacji Microsoft. Wymagania wstępne: Rozpoczynamy od zalogowania się na portal https://resources.azure.com, gdzie przechodzimy do wyboru sekcji, w której znajduje się nasza maszyna wirtualna. Postępujemy zgodnie ze schematem rozwijając po kolei: Następnym krokiem jest wybór maszyny wirtualnej, w moim przypadku to „TestVM1”. Zmieniamy uprawnienia w witrynie z Read Only na Read/Write. Przechodzi do skopiowania całego kodu maszyny wirtualnej w formacie JSON. Wklejamy kod do naszego ulubionego edytora tekstu. Ja korzystam z Notepad++ , ponieważ potrafi podczas edycji przypisać format kodu JSON do pliku. Jest to bardzo wygodne ze względu na widok kodu i jego układ. Teraz przechodzimy do edycji kodu. Musimy pozbyć się „niepotrzebnych” wpisów oraz edytować istniejące elementy. Poniżej zamieszczę sekcje, które zostały usunięte z kodu. Tak wygląda cały kod maszyny wirtualnej, nie jest zbyt „userfirendly” Poniżej umieszczone zostały usunięte całe sekcje oraz poszczególne elementy kodu: Sekcja zawiera numer unikalny maszyny, kasujemy go, ponieważ zostanie nadany nowy, unikalny numer. Image Reference zawiera informacje o obrazie systemu operacyjnego, którego tutaj nie będziemy używać, ponieważ edytujemy maszynę wirtualną z już zainstalowanym systemem. Dodatkowe pola, które nie zawierają żadnych danych i przez to nie są nam potrzebne. OsProfile zawiera informacje o konfiguracji systemu operacyjnego, np. login administratora czy też nazwę komputera. provisioningState zawiera informacje o statusie maszyny w Azure. Wpis będzie utworzony na nowo. Ponownie puste sekcje, które nie zostały wykorzystane. Tak wygląda nasz kod po skasowaniu sekcji. Jak widać, wygląda lepiej. Teraz musimy dokonać ostatecznej edycji kodu poprzez kasowanie przecinków, nawiasów i zmianę nazw pól. Gotowy, zamieszczony poniżej kod jest już możliwy do wgrania do Azure. Zmieniłem pola z zapisów: na zapisy przedstawione poniżej: Mamy już gotowy kod, możemy zatem przystąpić do skasowania naszej maszyny wirtualnej z poziomu portalu. Wykonujemy to za pomocą opcje „Delete” w zakładce „Actions (POST,DELETE)” Po kilku chwilach możemy dodać nasz kod – wybieramy opcję „Create”, kasujemy cały schemat kodu i wklejamy ten z notatnika. Przepisujemy nazwę maszyny wirtualnej i wybieramy opcję „PUT” Po paru sekundach maszyna wirtualna pojawi się na liście ze statusem „Creating” Oczekiwany wynik to “provisioningState”: “Succeeded” Sprawdzamy z poziomu portalu możliwość zalogowania się do maszyny wirtualnej pobierając plik RDP. Jak widać maszyna działa i ma się dobrze. Podsumowując: edycja maszyny wirtualnej nie jest skomplikowanym procesem. Kod na początku może przerażać, ale po bliższym zapoznaniu nie jest trudny do okiełznania. Jeżeli zajdzie potrzeba edycji dodatkowych elementów, takich jak np. sieć czy VPN Gateway, wykonamy je w podobny sposób w portalu.
Azure Resource Manager JSON
Portal Azure Resources – modyfikacje elementów za pomocą JSON.
i zaraz to zmienimy. Kod zamieszczam w postaci pliku TXT, ponieważ w tekście zajmie zbyt dużo miejsca.
"vmId": "29ccd31f-49fb-4282-ad46-81dd2d2de300",
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "2016-Datacenter",
"version": "latest",
"id": "(string)"
},
"encryptionSettings": {
"diskEncryptionKey": {
"secretUrl": "(string)",
"sourceVault": {
"id": "(string)"
}
},
"keyEncryptionKey": {
"keyUrl": "(string)",
"sourceVault": {
"id": "(string)"
}
},
"enabled": "(boolean)"
},
"image": {
"uri": "(string)"
},
"diskSizeGB": "(integer)",
"managedDisk": {
"id": "(string)",
"storageAccountType": "(string)"
}
},
{
"lun": "(integer)",
"name": "(string)",
"vhd": {
"uri": "(string)"
},
"image": {
"uri": "(string)"
},
"caching": "(string)",
"createOption": "(string)",
"diskSizeGB": "(integer)",
"managedDisk": {
"id": "(string)",
"storageAccountType": "(string)"
}
}
"osProfile": {
"computerName": "TestVM1",
"adminUsername": "lcholewa",
"windowsConfiguration": {
"provisionVMAgent": true,
"enableAutomaticUpdates": true,
"timeZone": "(string)",
"additionalUnattendContent": [
{
"passName": "(string)",
"componentName": "(string)",
"settingName": "(string)",
"content": "(string)"
}
],
"winRM": {
"listeners": [
{
"protocol": "(string)",
"certificateUrl": "(string)"
}
]
}
},
"secrets": [
{
"sourceVault": {
"id": "(string)"
},
"vaultCertificates": [
{
"certificateUrl": "(string)",
"certificateStore": "(string)"
}
]
}
],
"adminPassword": "(string)",
"customData": "(string)",
"linuxConfiguration": {
"disablePasswordAuthentication": "(boolean)",
"ssh": {
"publicKeys": [
{
"path": "(string)",
"keyData": "(string)"
}
]
}
}
},
{
"id": "(string)",
"properties": {
"primary": "(boolean)"
}
}
"provisioningState": "Succeeded",
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": "(boolean)",
"storageUri": "(string)"
}
},
"availabilitySet": {
"id": "(string)"
},
"instanceView": {
"platformUpdateDomain": "(integer)",
"platformFaultDomain": "(integer)",
"rdpThumbPrint": "(string)",
"vmAgent": {
"vmAgentVersion": "(string)",
"extensionHandlers": [
{
"type": "(string)",
"typeHandlerVersion": "(string)",
"status": {
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
}
],
"statuses": [
{
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
]
},
"disks": [
{
"name": "(string)",
"statuses": [
{
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
]
}
],
"extensions": [
{
"name": "(string)",
"type": "(string)",
"typeHandlerVersion": "(string)",
"substatuses": [
{
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
],
"statuses": [
{
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
]
}
],
"bootDiagnostics": {
"consoleScreenshotBlobUri": "(string)",
"serialConsoleLogBlobUri": "(string)"
},
"statuses": [
{
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
]
},
"licenseType": "(string)"
},
"tags": {},
"plan": {
"name": "(string)",
"publisher": "(string)",
"product": "(string)",
"promotionCode": "(string)"
},
"resources": [
{
"id": "(string)",
"name": "(string)",
"type": "(string)",
"location": "(string)",
"tags": {},
"properties": {
"forceUpdateTag": "(string)",
"publisher": "(string)",
"type": "(string)",
"typeHandlerVersion": "(string)",
"autoUpgradeMinorVersion": "(boolean)",
"settings": {},
"protectedSettings": {},
"provisioningState": "(string)",
"instanceView": {
"name": "(string)",
"type": "(string)",
"typeHandlerVersion": "(string)",
"substatuses": [
{
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
],
"statuses": [
{
"code": "(string)",
"level": "(string)",
"displayStatus": "(string)",
"message": "(string)",
"time": "(string)"
}
]
}
}
}
],
"identity": {
"principalId": "(string)",
"tenantId": "(string)",
"type": "(string)"
}
{
"properties": {
"hardwareProfile": {
"vmSize": "Basic_A0"
},
"storageProfile": {
"osDisk": {
"osType": "Windows",
"name": "TestVM1",
"createOption": "FromImage",
"vhd": {
"uri": "https://democlients7664.blob.core.windows.net/vhds/TestVM120170501203642.vhd"
},
"caching": "ReadWrite",
"dataDisks": [
]
},
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/22g25809-526c-4d69-785dd-44b748bjhgasd50/resourceGroups/DemoClients/providers/Microsoft.Network/networkInterfaces/testvm1959"
},
]
},
"type": "Microsoft.Compute/virtualMachines",
"location": "westeurope",
"id": "/subscriptions/22g25809-526c-4d69-785dd-44b748bjhgasd50/resourceGroups/DemoClients/providers/Microsoft.Compute/virtualMachines/TestVM1",
"name": "TestVM1",
}
{
"properties": {
"hardwareProfile": {
"vmSize": "Basic_A0"
},
"storageProfile": {
"osDisk": {
"osType": "Windows",
"name": "TestVM1Modified",
"createOption": "Attach",
"vhd": {
"uri": "https://democlients7664.blob.core.windows.net/vhds/TestVM120170501203642.vhd"
},
"caching": "ReadWrite"
},
"dataDisks": [
]
},
"networkProfile": {
"networkInterfaces": [
{
"id": "/subscriptions/22g25809-526c-4d69-785dd-44b748bjhgasd50/resourceGroups/DemoClients/providers/Microsoft.Network/networkInterfaces/testvm1959"
}
]
}
},
"type": "Microsoft.Compute/virtualMachines",
"location": "westeurope",
"id": "/subscriptions/22g25809-526c-4d69-785dd-44b748bjhgasd50/resourceGroups/DemoClients/providers/Microsoft.Compute/virtualMachines/TestVM1",
"name": "TestVM1Modified"
}
Łukasz zawodowo od około 11 lat, a hobbystycznie od dwóch dekad zajmuje się szeroko rozumianymi usługami w zakresie IT – począwszy od struktury podzespołów, poprzez konfigurację systemów i aplikacji, na opracowywaniu dokumentacji technicznej skończywszy. Łącząc doświadczenie i pasję, aktywnie uczestniczy w konferencjach związanych z tematyką Cloud computing, by następnie móc dzielić się wiedzą oraz dopasowywać rozwiązania do potrzeb klientów. Prywatnie Łukasz jest pasjonatem motocykli (jest mocno przywiązany do swojej Yamahy FJR 1300) i lubi rowerowe wycieczki oraz bieganie. Zespół: Cloud Productivity
Autor:
Łukasz Cholewa
Łukasz Cholewa
Ostatnie artykuły autora
Skontaktuj się z Łukaszem