Aller au contenu
Infrastructure as Code medium

Premiers pas avec AWX : lancer son premier job

12 min de lecture

Logo AWX

Votre plateforme tourne, l'interface est vide, et rien n'indique par où commencer. Ce guide vous fait exécuter un vrai playbook sur un vrai serveur, en assemblant les quatre objets qui constituent tout job AWX : un identifiant, un inventaire, un projet et un job template.

Comptez une vingtaine de minutes. À la fin, vous saurez lire un PLAY RECAP depuis l'interface et comprendrez pourquoi AWX a besoin de ces quatre briques, et pas d'une de moins.

  • Assembler les quatre objets indispensables à toute exécution
  • Créer un identifiant machine à partir d'une clé SSH
  • Déclarer un hôte dans un inventaire
  • Rattacher un projet Git contenant vos playbooks
  • Lancer un job et interpréter sa sortie
  • Diagnostiquer les deux échecs les plus fréquents du premier job
  • Une plateforme AWX ou Ascender fonctionnelle. Voir Installer Ascender sur k3s.
  • Un compte sur cette plateforme, et le droit d'y créer des objets. Un utilisateur neuf ne voit rien tant qu'un administrateur ne lui a rien accordé : voir Les premières actions d'administration.
  • Un serveur cible joignable en SSH depuis la plateforme, sur lequel vous disposez d'un compte avec sudo.
  • Des notions d'Ansible : playbook, inventaire, variable. Sans elles, l'interface reste opaque. Voir la formation Ansible.

Avant de cliquer, comprenez le modèle. Un job template n'exécute rien par lui-même : il assemble trois ressources, et c'est cet assemblage qui devient lançable.

ObjetRépond à la questionExemple
ProjetQuel playbook ?un dépôt Git contenant gather_facts.yml
InventaireSur quelles machines ?un hôte serveur-lab
IdentifiantAvec quelle authentification ?un utilisateur et une clé SSH
Job templateComment les combiner ?les trois précédents, plus des options

Cette séparation est le cœur de la gouvernance d'AWX : une équipe peut recevoir le droit de lancer un job template sans jamais voir la clé SSH qu'il utilise, ni pouvoir modifier le playbook qu'il exécute.

Ouvrez https://ascender.lab.local/ et connectez-vous avec votre compte nominatif, celui créé lors des premières actions d'administration. Les objets que vous allez créer porteront ainsi votre nom dans le journal d'activité, ce qui n'arriverait pas derrière un compte admin partagé.

Si vous montez un lab jetable et que le compte admin d'origine vous suffit, son mot de passe est stocké dans un secret Kubernetes, qui fait foi :

Fenêtre de terminal
kubectl -n ascender get secret ascender-app-admin-password \
-o jsonpath="{.data.password}" | base64 -d ; echo

Écran de connexion d'Ascender

L'identifiant, appelé credential, contient le compte et la clé privée qu'Ansible utilisera pour se connecter à vos serveurs. Il est chiffré en base dès l'enregistrement.

  1. Préparez une clé dédiée sur votre poste, plutôt que de réutiliser votre clé personnelle. Une plateforme d'automatisation mérite sa propre identité, révocable indépendamment :

    Fenêtre de terminal
    ssh-keygen -t ed25519 -C "ascender-lab" -f ~/.ssh/ascender-lab

    Autorisez la clé publique sur le serveur cible :

    Fenêtre de terminal
    ssh-copy-id -i ~/.ssh/ascender-lab.pub ubuntu@192.168.10.208
  2. Dans l'interface, ouvrez Ressources > Informations d'identification (Resources > Credentials), puis Ajouter (Add). Renseignez :

    • Nom (Name) : Lab SSH
    • Type d'informations d'identification (Credential Type) : Machine
    • Nom d'utilisateur (Username) : ubuntu
    • Clé privée SSH (SSH Private Key) : collez le contenu de ~/.ssh/ascender-lab (la clé privée, sans l'extension .pub)
  3. Enregistrez (Save). Rouvrez la fiche : le champ de la clé affiche Crypté, et son contenu n'est plus jamais relisible, y compris par un administrateur.

Identifiant machine dans AWX : la clé SSH affiche ENCRYPTED

L'inventaire décrit le parc. Une installation neuve en fournit un vide, nommé Default Inventory.

  1. Ouvrez Ressources > Inventaires (Resources > Inventories), puis Default Inventory, onglet Hôtes (Hosts), et Ajouter (Add).

  2. Renseignez le nom (Name) serveur-lab. Ce nom est une étiquette, pas une adresse : c'est lui qui apparaîtra dans les sorties de job.

  3. Dans Variables, donnez l'adresse réelle :

    ansible_host: 192.168.10.208

Hôte serveur-lab dans l'inventaire AWX, avec la variable ansible_host

Le projet relie un dépôt Git à la plateforme. AWX le clone, puis met le contenu à disposition des jobs.

Une installation d'Ascender arrive avec un projet déjà synchronisé, Ascender Playbooks, qui contient trois playbooks utilisables immédiatement : gather_facts.yml, patching.yml et selinux.yml. Nous utiliserons le premier.

Pour rattacher votre dépôt, ouvrez Ressources > Projets (Resources > Projects), puis Ajouter (Add), et renseignez le type de source Git, l'URL du dépôt, et la branche. Un dépôt privé nécessite en plus un identifiant de type Source Control, libellé qui reste en anglais dans l'interface.

Projet Git synchronisé dans AWX, statut Successful

Le job template est l'objet qui assemble les trois précédents.

  1. Ouvrez Ressources > Modèles (Resources > Templates), puis Ajouter (Add), et Ajouter un modèle de job (Add job template).

  2. Renseignez :

    • Nom (Name) : Collecter les faits
    • Type de Job (Job Type) : Exécuter (Run)
    • Inventaire (Inventory) : Default Inventory
    • Projet (Project) : Ascender Playbooks
    • Playbook : gather_facts.yml
    • Informations d'identification (Credentials) : Lab SSH
  3. Enregistrez (Save). La liste des playbooks proposés provient du dépôt cloné : si elle est vide, la synchronisation du projet a échoué.

Job template AWX assemblant un inventaire, un projet, un playbook et un identifiant

Cliquez sur la fusée à côté du template. L'interface bascule sur la sortie, qui défile en temps réel.

Identity added: /runner/artifacts/7/ssh_key_data (ascender-lab)
PLAY [Gather System Facts] *****************************************************
TASK [Gathering Facts] *********************************************************
ok: [serveur-lab]
TASK [Gather package facts] ****************************************************
ok: [serveur-lab]
TASK [Gather service facts] ****************************************************
ok: [serveur-lab]
TASK [Gather Windows Disk Facts] ***********************************************
skipping: [serveur-lab]
PLAY RECAP *********************************************************************
serveur-lab : ok=3 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0

Trois lignes méritent votre attention.

La première, Identity added, montre AWX injectant la clé privée du credential dans l'agent SSH du conteneur d'exécution, au moment du lancement. La clé n'existe que le temps du job.

Le nom serveur-lab apparaît partout, jamais l'adresse IP : c'est l'étiquette de l'inventaire qui prime.

Enfin le PLAY RECAP est le même que celui d'ansible-playbook en ligne de commande, parce que c'est le même programme. AWX ne réimplémente pas Ansible, il l'exécute dans un conteneur appelé Execution Environment, puis capture sa sortie.

Sortie d'un job AWX réussi, avec le PLAY RECAP

SymptômeCauseCorrectif
UNREACHABLE, Permission denied (publickey)la clé publique n'est pas autorisée sur la ciblessh-copy-id vers le serveur, puis relancer
UNREACHABLE, délai dépasséle conteneur d'exécution ne joint pas le port 22 de la ciblevérifier le routage et le pare-feu depuis le cluster
La liste des playbooks est videla synchronisation du projet a échouélire le journal dans l'onglet Jobs du projet
sudo: a password is requiredl'escalade de privilèges n'a pas de mot de passecocher Élévation des privilèges (Privilege Escalation) et renseigner le mot de passe become dans le credential
Le job réussit mais ne fait rienl'inventaire ne contient aucun hôte correspondantvérifier que le playbook cible bien le groupe où se trouve l'hôte
  • Un job template n'exécute rien seul : il assemble un projet, un inventaire et un identifiant.
  • Cette séparation permet de déléguer l'exécution sans déléguer les secrets ni le code.
  • Un secret entré dans AWX est chiffré et non relisible : conservez l'original ailleurs.
  • Le nom d'un hôte est une étiquette ; son adresse vit dans la variable ansible_host.
  • AWX n'exécute pas Ansible différemment : il lance ansible-playbook dans un Execution Environment et capture sa sortie. Le PLAY RECAP est identique.
  • Un PLAY RECAP sans ligne d'hôte signifie que le job n'a rien fait, même s'il est marqué réussi.
  • Les deux échecs les plus fréquents du premier job sont une clé non autorisée sur la cible et un projet mal synchronisé.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn