Exercice : Demander des informations système et d’exécution concernant la machine virtuelle

Effectué

Une fois que nous avons créé une machine virtuelle, nous pouvons obtenir des informations sur celle-ci via d’autres commandes.

Commencez par exécuter vm list.

az vm list

Cette commande retourne toutes les machines virtuelles définies dans cet abonnement. Vous pouvez filtrer la sortie pour un groupe de ressources spécifique à l’aide du paramètre --resource-group.

Types de sorties

Notez que le type de réponse par défaut pour toutes les commandes que nous avons créées jusqu’à présent est JSON. C’est parfait pour l’écriture de scripts, mais la plupart des gens trouvent que c’est plus difficile à lire. Vous pouvez modifier le style de sortie pour toute réponse via l’indicateur --output. Par exemple, exécutez la commande suivante dans Azure Cloud Shell pour voir le style de sortie différent.

az vm list --output table

Avec table, vous pouvez spécifier json (valeur par défaut), jsonc (JSON coloré) ou tsv (valeurs séparées par des tabulations). Essayez quelques variantes de la commande précédente pour voir la différence.

Obtenir l’adresse IP

vm list-ip-addresses est une autre commande utile, qui liste les adresses IP publiques et privées d’une machine virtuelle. Si elles changent ou si vous ne les avez pas capturées lors de la création, vous pouvez les récupérer à tout moment.

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

Cela retourne une sortie comme suit :

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

Conseil

Notez que nous utilisons une syntaxe abrégée de l’indicateur --output sous la forme -o. Vous pouvez raccourcir la plupart des paramètres pour les commandes Azure CLI en un tiret et une lettre. Par exemple, vous pouvez raccourcir --name en -n et --resource-group en -g. Cela est pratique pour la saisie de caractères au clavier, mais nous vous recommandons d’utiliser le nom d’option complet dans les scripts pour plus de clarté. Pour plus d’informations sur chaque commande, consultez la documentation associée.

Obtenir les détails d’une machine virtuelle

Vous pouvez obtenir des informations plus détaillées sur une machine virtuelle spécifique par nom ou par ID en exécutant la commande vm show.

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

Cela retourne un bloc JSON assez volumineux contenant toutes sortes d’informations sur la machine virtuelle, notamment les dispositifs de stockage connectés, les interfaces réseau et tous les ID d’objet des ressources auxquelles la machine virtuelle est connectée. Une fois encore, nous pourrions opter pour un format de table, mais celui-ci omet la quasi-totalité des données intéressantes. Au lieu de cela, nous pouvons nous tourner vers un langage de requête intégré pour JSON appelé JMESPath.

Ajouter des filtres aux requêtes avec JMESPath

JMESPath est un langage de requête standard construit autour d’objets JSON. La requête la plus simple consiste à spécifier un identificateur qui sélectionne une clé dans l’objet JSON.

Par exemple, étant donné l’objet :

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

Nous pouvons utiliser la requête people pour retourner le tableau de valeurs pour le tableau people. Si nous voulons simplement une des personnes, nous pouvons utiliser un indexeur. Par exemple, people[1] retournerait :

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

Nous pouvons également ajouter des qualificateurs spécifiques qui retournent une partie des objets en fonction de certains critères. Par exemple, l’ajout du qualificateur people[?age > '25'] retournerait :

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

Pour finir, nous pouvons limiter les résultats en ajoutant une instruction select people[?age > '25'].[name] qui retourne uniquement les noms :

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

JMESQuery offre plusieurs autres fonctionnalités de requête intéressantes. Quand vous en avez le temps, consultez le didacticiel en ligne disponible sur le site JMESPath.org.

Filtrer vos requêtes Azure CLI

Avec une compréhension de base des requêtes JMES, nous pouvons ajouter des filtres aux données retournées par les requêtes, par exemple la commande vm show. Par exemple, vous pouvez récupérer le nom d’utilisateur administrateur :

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

Nous pouvons obtenir la taille attribuée à notre machine virtuelle :

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

Ou, pour récupérer tous les ID de vos interfaces réseau, nous pouvons exécuter cette requête :

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

Cette technique de requête fonctionne avec n’importe quelle commande Azure CLI. Vous pouvez l’utiliser pour extraire de petites parties de données spécifiques sur la ligne de commande. Elle est également utile pour l’écriture de scripts. Par exemple, vous pouvez extraire une valeur de votre compte Azure et la stocker dans une variable d’environnement ou de script. Si vous décidez de l’utiliser de cette façon, il est utile d’ajouter le paramètre --output tsv (que vous pouvez raccourcir en -o tsv). Cela retourne des résultats qui incluent uniquement les valeurs de données réelles avec des tabulations séparatrices.

Par exemple :

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

retourne le texte : /subscriptions/20f4b944-fc7a-4d38-b02c-900c8223c3a0/resourceGroups/2568d0d0-efe3-4d04-a08f-df7f009f822a/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic