AWX : piloter Ansible depuis une interface web
Si vous avez suivi le tutoriel « Ansible : installation et prise en main », vous savez maintenant Ă©crire et exĂ©cuter des playbooks en ligne de commande. TrĂšs bien pour un usage personnel ou une petite Ă©quipe technique â plus limitĂ© dĂšs qu’il faut partager l’automatisation avec des collĂšgues moins Ă l’aise en CLI, garder un historique centralisĂ© des exĂ©cutions, ou restreindre qui a le droit de lancer quoi. C’est exactement ce qu’apporte AWX.
Qu’est-ce qu’AWX ?
AWX est le projet open source qui sert de base amont (upstream) au produit commercial Red Hat Ansible Automation Controller (anciennement « Ansible Tower »). Il ajoute une couche web complÚte au-dessus du moteur Ansible :
- Une interface web pour lancer des playbooks sans taper de commande
- Une API REST complĂšte pour intĂ©grer l’automatisation dans d’autres outils
- La gestion centralisée des credentials (SSH, cloud, vault) chiffrés en base, jamais exposés en clair aux utilisateurs
- Le RBAC (contrĂŽle d’accĂšs basĂ© sur les rĂŽles) : qui peut voir, modifier ou exĂ©cuter quoi, par organisation et par Ă©quipe
- La planification de jobs rĂ©currents et les notifications (email, SlackâŠ) en cas d’Ă©chec
- Un historique complet et consultable de chaque exécution, avec les logs détaillés de chaque tùche
- Des inventaires dynamiques synchronisés automatiquement depuis vos sources (cloud, VMware, fichiers)
En rĂ©sumĂ© : Ansible reste le moteur d’exĂ©cution ; AWX est la tour de contrĂŽle qui l’entoure pour un usage en Ă©quipe.
Prérequis
Depuis plusieurs versions, AWX se dĂ©ploie exclusivement via l’awx-operator sur un cluster Kubernetes â l’ancienne mĂ©thode par Docker Compose est abandonnĂ©e. Pour tester ou pour un usage en petite structure, un cluster Minikube local suffit trĂšs bien.
kubectlinstallĂ© et configurĂ©kustomize(intĂ©grĂ© Ăkubectldepuis la version 1.14, viakubectl apply -k)- Minikube pour un dĂ©ploiement de test, ou un cluster Kubernetes existant avec une StorageClass supportant le provisionnement dynamique en production
- Au minimum 4 CPU et 6 Go de RAM alloués au cluster de test
Ătape 1 â PrĂ©parer un cluster de test avec Minikube
minikube start --cpus=4 --memory=6g --addons=ingress
kubectl cluster-info
Ătape 2 â DĂ©ployer l’awx-operator
CrĂ©ez un dossier de dĂ©ploiement avec un fichier kustomization.yaml. VĂ©rifiez au prĂ©alable, sur la page des releases GitHub d’ansible/awx-operator, la derniĂšre version stable disponible plutĂŽt que de recopier un numĂ©ro figĂ© qui sera vite dĂ©passĂ© :
mkdir awx-deploy && cd awx-deploy
cat > kustomization.yaml <<EOF
resources:
- github.com/ansible/awx-operator/config/default?ref=VERSION_A_VERIFIER
images:
- name: quay.io/ansible/awx-operator
newTag: VERSION_A_VERIFIER
namespace: awx
EOF
kubectl apply -k .
kubectl get pods -n awx --watch
Patientez jusqu’Ă ce que le pod awx-operator-controller-manager passe en statut Running avant de continuer.
Ătape 3 â DĂ©ployer l’instance AWX elle-mĂȘme
L’opĂ©rateur Ă©tant en place, il ne reste qu’Ă lui dĂ©clarer une ressource personnalisĂ©e AWX pour qu’il provisionne automatiquement la base de donnĂ©es, le service web et les pods nĂ©cessaires :
cat > awx-demo.yml <<EOF
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-demo
namespace: awx
spec:
service_type: nodeport
EOF
kubectl apply -f awx-demo.yml
kubectl get pods -n awx --watch
Le premier dĂ©ploiement peut prendre plusieurs minutes (migration de base de donnĂ©es incluse) â un comportement normal, pas un blocage Ă corriger.
Ătape 4 â RĂ©cupĂ©rer le mot de passe administrateur
kubectl get secret awx-demo-admin-password -n awx \
-o jsonpath="{.data.password}" | base64 --decode ; echo
L’identifiant par dĂ©faut est admin.
Ătape 5 â AccĂ©der Ă l’interface web
# Avec Minikube
minikube service awx-demo-service --url -n awx
# Ou via un port-forward classique
kubectl port-forward service/awx-demo-service -n awx 8080:80
Ouvrez l’URL obtenue (ou http://localhost:8080 avec le port-forward) et connectez-vous avec admin et le mot de passe rĂ©cupĂ©rĂ© Ă l’Ă©tape prĂ©cĂ©dente.
Ătape 6 â Premiers pas dans l’interface
- Credentials : crĂ©ez un credential de type « Machine » avec votre clĂ© SSH privĂ©e â c’est ce qui remplace la clĂ© locale que vous utilisiez en ligne de commande, dĂ©sormais stockĂ©e chiffrĂ©e cĂŽtĂ© serveur.
- Projects : dĂ©clarez un projet pointant vers votre dĂ©pĂŽt Git contenant les playbooks (le mĂȘme que celui utilisĂ© dans le tutoriel Ansible prĂ©cĂ©dent). AWX synchronise automatiquement la derniĂšre version Ă chaque exĂ©cution.
- Inventories : recréez votre inventaire, soit manuellement (import du fichier
inventory.ini), soit via une source dynamique si vos machines viennent d’un cloud ou d’un hyperviseur dĂ©jĂ supportĂ©. - Job Templates : associez un playbook du projet, un inventaire et un credential dans un modĂšle de job rĂ©utilisable â c’est l’Ă©quivalent web de votre commande
ansible-playbook. - Lancez le job depuis l’interface et suivez l’exĂ©cution en direct, tĂąche par tĂąche, avec le mĂȘme niveau de dĂ©tail que la sortie CLI d’Ansible.
RBAC : organiser les accÚs en équipe
AWX structure les permissions autour de trois notions :
- Organizations : le regroupement de plus haut niveau (une organisation par client, par exemple, dans un contexte de prestation).
- Teams : des groupes d’utilisateurs au sein d’une organisation.
- RĂŽles attribuĂ©s Ă un niveau prĂ©cis (projet, inventaire, job templateâŠ) : Admin, Execute (lancer un job sans pouvoir le modifier), Read seulement, etc.
Bonne pratique : donnez le rĂŽle Execute Ă la majoritĂ© des utilisateurs sur les job templates de production â ils peuvent lancer les automatisations validĂ©es, sans pouvoir modifier les playbooks ni les credentials sous-jacents.
Bonnes pratiques et limites Ă connaĂźtre
- Sauvegardez la base de donnĂ©es du cluster AWX rĂ©guliĂšrement â elle contient l’historique des jobs, les credentials chiffrĂ©s et toute la configuration ; sa perte revient Ă repartir de zĂ©ro.
- Mettez Ă jour l’opĂ©rateur en changeant la rĂ©fĂ©rence de version dans
kustomization.yamlpuis en rĂ©appliquant â ne modifiez jamais les ressources Kubernetes gĂ©nĂ©rĂ©es Ă la main. - AWX ajoute une couche d’infrastructure (Kubernetes) Ă maintenir en plus d’Ansible lui-mĂȘme â pour une Ă©quipe d’une ou deux personnes gĂ©rant quelques serveurs, la ligne de commande reste souvent plus simple ; AWX devient pertinent dĂšs que plusieurs personnes doivent partager l’automatisation en toute sĂ©curitĂ©.
- Si le support commercial et les garanties de version vous importent, la version payante Ansible Automation Platform de Red Hat s’appuie sur les mĂȘmes concepts qu’AWX, avec du support officiel en plus.