En plus de pouvoir exécuter des commandes de la CLI Google Cloud depuis la ligne de commande, vous pouvez les exécuter à partir de scripts ou d'autres types de traitement automatisé, par exemple lorsque vous utilisez Jenkins pour piloter l'automatisation des tâches Google Cloud.
La gcloud CLI est fournie avec divers outils tels que le filtrage,
et l'option --quiet
, qui vous permet de gérer efficacement les sorties
et automatiser des tâches.
Principes de base de l'écriture de scripts avec gcloud CLI
Pour un guide par étapes sur la création de scripts de base avec la CLI gcloud, consultez cet article de blog : Écrire des scripts avec gcloud : guide du débutant pour automatiser les tâches Google Cloud.
Autorisation
Lorsque vous créez des scripts avec la CLI gcloud, vous devez tenir compte des méthodes d'autorisation. La CLI gcloud propose deux options :
- Autorisation via un compte utilisateur
- Autorisation via un compte de service
L'autorisation via un compte utilisateur est recommandée si vous exécutez un script ou une autre forme d'automatisation sur une seule machine.
Pour autoriser l'accès et effectuer d'autres configurations courantes de la gcloud CLI étapes:
gcloud init
L'autorisation via un compte de service est recommandée si vous déployez un script ou une autre forme d'automatisation sur des machines d'un environnement de production. C'est également la méthode d'autorisation recommandée si vous exécutez des commandes de CLI gcloud sur une instance de machine virtuelle Compute Engine où tous les utilisateurs ont accès à root
.
Pour utiliser l'autorisation via un compte de service, utilisez un compte de service existant ou créez ou créez-en un sur la page "Comptes de service" :
Accéder à la page "Comptes de service"
Pour créer et télécharger la clé privée associée sous la forme d'un fichier de clé au format JSON, sélectionnez Gérer les clés dans le menu d'actions du compte de service.
Pour exécuter l'autorisation, exécutez la commande suivante :
gcloud auth activate-service-account
:
gcloud auth activate-service-account --key-file [KEY_FILE]
Vous pouvez vous connecter en SSH
à votre instance de VM en utilisant
gcloud compute ssh
,
qui s'occupe de l'authentification. Les fichiers de configuration SSH peuvent être définis à l'aide de gcloud compute config-ssh
.
Pour obtenir des instructions détaillées sur l'autorisation des outils gcloud CLI, consultez la section Autoriser gcloud CLI.
Désactiver les invites
Certaines commandes de CLI gcloud sont interactives et invitent les utilisateurs à confirmer une opération ou demandent une entrée supplémentaire pour une commande saisie.
Dans la plupart des cas, ce comportement n'est pas souhaitable lors de l'exécution de commandes dans un script ou une autre forme d'automatisation. Vous pouvez désactiver les invites des commandes de la CLI gcloud en définissant la propriété disable_prompts
dans votre configuration sur True
ou en utilisant l'option globale --quiet
ou -q
. La plupart des commandes interactives possèdent des valeurs par défaut lorsqu'une confirmation ou une entrée supplémentaire est requise. Si les invites sont désactivées, ces valeurs par défaut sont utilisées.
Exemple :
gcloud debug targets list --quiet
Filtrer et mettre en forme les résultats
Pour écrire un script avec la gcloud CLI, il est important d'avoir
des résultats prévisibles ; c'est ici
--filter
et
Aide concernant les indicateurs --format
. Elles garantissent que, lorsque vous exécutez une commande à l'aide de la CLI gcloud, celle-ci produit un résultat correspondant à vos spécifications en termes de format (json, yaml, csv ou texte) et de filtrage (noms de VM comportant le préfixe "test", année de création postérieure à 2015, etc.).
Pour suivre un tutoriel interactif sur l'utilisation des options de filtrage et de mise en forme, cliquez sur le bouton ci-dessous :
Voici des exemples d'utilisations courantes de la mise en forme et du filtrage avec les commandes de CLI gcloud :
Répertorier les instances créées dans la zone us-central1-a :
gcloud compute instances list --filter="zone:us-central1-a"
Répertorier au format JSON les projets pour lesquels les libellés correspondent à des valeurs spécifiques (par exemple, label.env est 'test' et label.version est alpha) :
gcloud projects list --format="json" \
--filter="labels.env=test AND labels.version=alpha"
Répertorier les projets avec leur date et heure de création dans le fuseau horaire local :
gcloud projects list \
--format="table(name, project_id, createTime.date(tz=LOCAL))"
Répertorier les projets créés après une date donnée sous forme de table :
gcloud projects list \
--format="table(projectNumber,projectId,createTime)" \
--filter="createTime.date('%Y-%m-%d', Z)='2016-05-11'"
Notez que, dans le dernier exemple, une projection sur la clé a été utilisée. Le filtre est
appliquée à la clé createTime
une fois le format de la date défini.
Répertorier une table imbriquée des quotas d'une région :
gcloud compute regions describe us-central1 \
--format="table(quotas:format='table(metric,limit,usage)')"
Afficher une liste aplatie des quotas globaux au format CSV :
gcloud compute project-info describe --flatten='quotas[]' \
--format='csv(quotas.metric,quotas.limit,quotas.usage)'
Répertorier les ressources d'instance de calcul avec les attributs et les titres de cadre, triées par nom, sous forme de table :
gcloud compute instances list \
--format='table[box,title=Instances](name:sort=1,zone:label=zone,status)'
Répertorier l'adresse e-mail de l'utilisateur authentifié du projet :
gcloud info --format='value(config.account)'
Pour voir des exemples plus complexes des capacités de configuration des sorties
dans la filters
de la gcloud CLI,
formats
projections
: consultez cette
article de blog sur
filtrage et mise en forme.
Bonnes pratiques
Si vous souhaitez qu'un script ou une autre forme d'automatisation exécute des actions de manière conditionnelle en fonction du résultat d'une commande de CLI gcloud, tenez compte des éléments suivants :
Fiez-vous à l'état de sortie de la commande.
Si l'état de sortie est différent de zéro, une erreur s'est produite et le résultat peut être incomplet, sauf indication contraire dans la documentation de la commande. Par exemple, une commande qui crée plusieurs ressources peut n'en créer que quelques-unes, les répertorier sur la sortie standard, puis se terminer avec un état différent de zéro. Vous pouvez également utiliser la propriété
show_structured_logs
pour analyser les journaux d'erreurs. Exécutezgcloud config
pour obtenir davantage d'informations.Ne vous fiez pas aux messages affichés avec une erreur standard.
La formulation de ces messages est susceptible de changer dans les futures versions de la CLI gcloud et ainsi d'interrompre votre mécanisme d'automatisation.
Ne vous fiez pas au résultat brut des messages affichés avec la sortie standard.
Le résultat par défaut d'une commande peut changer dans une version ultérieure. Vous pouvez minimiser l'impact de ces changements en utilisant l'option
--format
pour mettre en forme le résultat avec l'un des éléments suivants :--format=json|yaml|csv|text|list
pour spécifier les valeurs à renvoyer. Exécutezgcloud topic formats
pour obtenir plus d'options.Vous pouvez modifier le résultat par défaut de
--format
en utilisantprojections
. Pour une granularité accrue, utilisez l'option--filter
pour renvoyer un sous-ensemble de valeurs basé sur une expression. Vous pouvez ensuite écrire un script par rapport à ces valeurs renvoyées.Vous trouverez des exemples de mise en forme et de filtrage du résultat dans la section ci-dessous.
Exemples de scripts
En utilisant la fonctionnalité de mise en forme et de filtre, vous pouvez combiner des commandes de gcloud CLI dans un script pour extraire facilement des informations.
Listez les clés pour tous vos projets comptes de service
Les exemples de scripts ci-dessous répertorient les clés associées à l'ensemble des clés des comptes de service par:
- Itérer sur vos projets
- Pour chaque projet, obtenir les comptes de service associés
Pour chaque compte de service, obtenir les clés associées
Bash
#!/bin/bash
for project in $(gcloud projects list --format="value(projectId)")
do
echo "ProjectId: $project"
for robot in $(gcloud iam service-accounts list --project $project --format="value(email)")
do
echo " -> Robot $robot"
for key in $(gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
do
echo " $key"
done
done
done
Windows PowerShell
Via Windows PowerShell :
foreach ($project in gcloud projects list --format="value(projectId)")
{
Write-Host "ProjectId: $project"
foreach ($robot in gcloud iam service-accounts list --project $project --format="value(email)")
{
Write-Host " -> Robot $robot"
foreach ($key in gcloud iam service-accounts keys list --iam-account $robot --project $project --format="value(name.basename())")
{
Write-Host " $key"
}
}
}
Analyser la sortie pour traitement
L'exemple suivant illustre l'analyse des résultats en vue de leur traitement. Plus précisément, l'exemple de script écrit les informations du compte de service dans un tableau et sépare les valeurs dans le champ serviceAccounts.scope()
à valeurs multiples au format CSV :
#!/bin/bash
for scopesInfo in $(
gcloud compute instances list --filter=name:instance-1 \
--format="csv[no-heading](name,id,serviceAccounts[].email.list(),
serviceAccounts[].scopes[].map().list(separator=;))")
do
IFS=',' read -r -a scopesInfoArray<<< "$scopesInfo"
NAME="${scopesInfoArray[0]}"
ID="${scopesInfoArray[1]}"
EMAIL="${scopesInfoArray[2]}"
SCOPES_LIST="${scopesInfoArray[3]}"
echo "NAME: $NAME, ID: $ID, EMAIL: $EMAIL"
echo ""
IFS=';' read -r -a scopeListArray<<< "$SCOPES_LIST"
for SCOPE in "${scopeListArray[@]}"
do
echo " SCOPE: $SCOPE"
done
done