Cvičení – systém dotazů a informace runtime o virtuálním počítači

Dokončeno

Teď, když jsme vytvořili virtuální počítač, můžeme o něm získat informace prostřednictvím jiných příkazů.

Začněme tím, že spustíme vm list.

az vm list

Tento příkaz vrátí všechny virtuální počítače definované v tomto předplatném. Výstup můžete filtrovat do konkrétní skupiny prostředků prostřednictvím parametru --resource-group .

Typy výstupu

Všimněte si, že výchozí typ odpovědi pro všechny příkazy, které jsme dosud provedli, je JSON. To je skvělé pro skriptování, ale většina lidí je obtížně čitelný. Typ výstupu pro kteroukoli odpověď můžete změnit příznakem --output. Například spuštěním následujícího příkazu v Azure Cloud Shellu zobrazte jiný styl výstupu.

az vm list --output table

S příkazem table můžete zadat json (výchozí), jsonc (obarvený JSON) nebo tsv (hodnoty oddělené tabulátorem). Vyzkoušejte několik variant s předchozím příkazem, abyste viděli rozdíl.

Získání IP adresy

Dalším užitečným příkazem je vm list-ip-addresses, který uvádí veřejné a privátní IP adresy pro virtuální počítač. Pokud se adresy změní nebo pokud jste si je nepoznamenali při vytváření, můžete je získat kdykoli.

az vm list-ip-addresses -n SampleVM -o table

Vrátí výstup podobný následujícímu:

VirtualMachine    PublicIPAddresses    PrivateIPAddresses
----------------  -------------------  --------------------
SampleVM          168.61.54.62         10.0.0.4

Tip

Všimněte si, že používáme zkratkovou syntaxi příznaku --output jako -o. Většinu parametrů můžete zkrátit na příkazy Azure CLI na jednu pomlčku a písmeno. Můžete například zkrátit --name na -n a --resource-group na -g. To je užitečné pro zadávání znaků klávesnice, ale pro přehlednost doporučujeme použít úplný název možnosti ve skriptech. Podrobnosti o jednotlivých příkazech najdete v dokumentaci.

Získání podrobností o virtuálním počítači

Podrobnější informace o konkrétním virtuálním počítači můžeme získat podle názvu nebo ID spuštění vm show příkazu.

az vm show --resource-group "<rgn>[sandbox resource group name]</rgn>" --name SampleVM

Tím se vrátí poměrně velký blok JSON s nejrůznějšími informacemi o virtuálním počítači, včetně připojených úložných zařízení, síťových rozhraní a všech ID objektů pro prostředky, ke kterým je virtuální počítač připojený. Opět můžeme změnit formát výstupu na tabulku, ale tím ztratíme skoro všechna zajímavá data. Místo toho můžeme přepnout na integrovaný dotazovací jazyk pro JSON nazvaný JMESPath.

Přidání filtrů do dotazů pomocí JMESPathu

JMESPath je standardní dotazovací jazyk postavené na objektech JSON. Nejjednodušším dotazem je zadání identifikátoru, který vybere v objektu JSON určitý klíč.

Mějme například objekt:

{
  "people": [
    {
      "name": "Fred",
      "age": 28
    },
    {
      "name": "Barney",
      "age": 25
    },
    {
      "name": "Wilma",
      "age": 27
    }
  ]
}

Můžeme použít dotaz people, který vrátí pole hodnot pro pole people. Pokud budeme chtít jen jednoho člověka, můžeme použít indexer. Například people[1] vrátí:

{
    "name": "Barney",
    "age": 25
}

Můžeme také přidat konkrétní kvalifikátory, které vrátí podmnožinu objektů na základě určitých kritérií. Například přidaný kvalifikátor people[?age > '25'] vrátí:

[
  {
    "name": "Fred",
    "age": 28
  },
  {
    "name": "Wilma",
    "age": 27
  }
]

Nakonec můžeme výsledky omezit přidáním výběru people[?age > '25'].[name], který vrátí jenom názvy:

[
  [
    "Fred"
  ],
  [
    "Wilma"
  ]
]

JMESQuery má několik dalších zajímavých funkcí dotazování. Pokud máte čas, přečtěte si online kurz, který je k dispozici webu JMESPath.org.

Filtrování dotazů Azure CLI

Díky základnímu porozumění dotazům JMES můžeme do dat vrácených dotazy, jako je tento vm show příkaz, přidat filtry. Můžeme například načíst uživatelské jméno správce:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "osProfile.adminUsername"

Můžeme získat velikost přiřazenou k virtuálnímu počítači:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query hardwareProfile.vmSize

Pokud chcete načíst všechna ID vašich síťových rozhraní, můžeme dotaz spustit:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id"

Tato technika dotazu funguje s libovolným příkazem Azure CLI a můžete ji použít k načtení konkrétních bitů dat z příkazového řádku. Je užitečná i pro skriptování. Můžete například získat hodnotu z účtu Azure a uložit ji do prostředí nebo proměnné skriptu. Pokud se rozhodnete tento způsob použít, je užitečné přidat --output tsv parametr (na který můžete zkrátit -o tsv). Tím se vrátí výsledky, které obsahují pouze skutečné hodnoty dat s oddělovači tabulátorů.

Příklad:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id" -o tsv

vrátí tento text: /subscriptions/20f4b944-fc7a-4d38-b02c-900c8223c3a0/resourceGroups/2568d0d0-efe3-4d04-a08f-df7f009f822a/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic