agentsclimarketplace

Ansible playbook builder

Skill WhiteMuush/Your-Claude-DevOps-Teacher/skills/ansible-playbook-builder

My own configuration CLAUDE, Dev & Ops specialist and 100% educational.

Install
npx -y skills add WhiteMuush/Your-Claude-DevOps-Teacher --skill ansible-playbook-builder

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Automatisation d'infrastructure avec Ansible, playbooks, roles, inventaires, vault et modules. Se déclenche avec "Ansible", "playbook", "ansible-playbook", "Ansible role", "Ansible vault", "automatisation serveur".

SKILL.md

7.1 KB, as published. Nobody here has run it

Ansible Playbook Builder

Workflow

1. Analyser l'infrastructure cible

Recenser : systèmes d'exploitation (RHEL/Ubuntu/Debian), accès SSH (clé ou bastion), utilisateur de connexion (ansible_user), privilèges sudo.

Critères de décision, inventaire statique vs dynamique :

  • < 20 hôtes stables → inventaire statique INI/YAML
  • Cloud (AWS, Azure, GCP) ou infra éphémère → plugin dynamique (amazon.aws.ec2, azure.azcollection.azure_rm)

2. Structurer l'inventaire

# inventories/production/hosts.ini
[web]
web01.prod.example.com ansible_user=deploy
web02.prod.example.com ansible_user=deploy

[db]
db01.prod.example.com ansible_user=deploy

[all:vars]
ansible_ssh_private_key_file=~/.ssh/id_ed25519
inventories/
  production/
    hosts.ini
    group_vars/
      all.yml          # variables communes
      web.yml          # variables groupe web
    host_vars/
      db01.prod.example.com.yml
  staging/
    hosts.ini
    group_vars/

Tester la connectivité avant tout playbook :

ansible all -i inventories/production/hosts.ini -m ping

3. Concevoir les playbooks

Structure minimale production-ready :

# site.yml
---
- name: Configure web servers
  hosts: web
  become: true
  gather_facts: true
  tags: [web]

  pre_tasks:
    - name: Ensure Python3 is present
      raw: apt-get install -y python3
      changed_when: false

  roles:
    - role: common
    - role: nginx
      vars:
        nginx_port: 443

  post_tasks:
    - name: Verify nginx is responding
      uri:
        url: "https://{{ ansible_fqdn }}"
        status_code: 200
      delegate_to: localhost

Commandes courantes :

# Dry-run avec diff
ansible-playbook -i inventories/production/hosts.ini site.yml --check --diff

# Exécution ciblée par tag
ansible-playbook site.yml -i inventories/production/hosts.ini --tags nginx

# Limiter à un hôte
ansible-playbook site.yml -i inventories/production/hosts.ini --limit web01.prod.example.com

# Verbose pour debug
ansible-playbook site.yml -vvv

4. Développer les roles

Structure standard à respecter :

roles/nginx/
  tasks/
    main.yml
    install.yml
    configure.yml
  handlers/
    main.yml          # notify: Restart nginx
  templates/
    nginx.conf.j2
  files/
    dhparam.pem
  defaults/
    main.yml          # variables surchargeables (priorité basse)
  vars/
    main.yml          # variables internes (priorité haute)
  meta/
    main.yml          # dépendances, galaxy_info

defaults/main.yml, toujours documenter :

# Port d'écoute HTTP
nginx_http_port: 80
# Port d'écoute HTTPS (0 = désactivé)
nginx_https_port: 443
# Nombre de workers (auto = nb CPUs)
nginx_worker_processes: auto

Handler exemple :

# handlers/main.yml
- name: Restart nginx
  service:
    name: nginx
    state: restarted
  listen: Restart nginx

5. Sécuriser avec Ansible Vault

# Chiffrer un fichier de secrets
ansible-vault encrypt inventories/production/group_vars/all/vault.yml

# Éditer un fichier chiffré
ansible-vault edit inventories/production/group_vars/all/vault.yml

# Exécuter avec le mot de passe vault
ansible-playbook site.yml --vault-password-file ~/.vault_pass.txt
# ou via variable d'environnement CI/CD
ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt ansible-playbook site.yml

Convention de nommage, préfixe vault_ pour les variables chiffrées :

# group_vars/all/vars.yml (clair)
db_password: "{{ vault_db_password }}"

# group_vars/all/vault.yml (chiffré)
vault_db_password: "S3cr3t!"

6. Templates Jinja2

{# templates/nginx.conf.j2 #}
worker_processes {{ nginx_worker_processes }};

server {
    listen {{ nginx_https_port }} ssl;
    server_name {{ ansible_fqdn }};

    {% for location in nginx_locations %}
    location {{ location.path }} {
        proxy_pass {{ location.backend }};
    }
    {% endfor %}
}

Filtres utiles :

# Convertir en majuscules
- debug: msg="{{ env | upper }}"
# Valeur par défaut
- debug: msg="{{ timeout | default(30) }}"
# Joindre une liste
- debug: msg="{{ groups['web'] | join(',') }}"

7. Tester les playbooks

# Lint (ansible-lint >= 6)
pip install ansible-lint
ansible-lint site.yml

# Syntaxe seule
ansible-playbook --syntax-check site.yml

# Test de role avec Molecule (driver Docker)
pip install molecule molecule-docker
cd roles/nginx
molecule init scenario --driver-name docker
molecule test   # create → converge → verify → destroy

molecule/default/verify.yml minimal :

- name: Verify nginx
  hosts: all
  tasks:
    - name: Check nginx service is running
      service_facts:
    - assert:
        that: "'nginx' in services and services['nginx'].state == 'running'"

8. Orchestrer les déploiements

Rolling update :

- hosts: web
  serial: "25%"        # 25% des hôtes à la fois
  max_fail_percentage: 0
  roles:
    - nginx

Intégration CI/CD (GitHub Actions) :

- name: Deploy to production
  run: |
    ansible-playbook -i inventories/production/hosts.ini site.yml \
      --vault-password-file <(echo "$VAULT_PASS") \
      --diff
  env:
    VAULT_PASS: ${{ secrets.ANSIBLE_VAULT_PASS }}

Garde-fous / Anti-patterns / Pièges

Anti-patternRisqueCorrection
shell: rm -rf /tmp/{{ app }}Idempotence cassée + risque injectionfile: path=... state=absent
command: service nginx restartNon-idempotentModule service + handler
Variables en clair dans gitFuite de secretsAnsible Vault obligatoire
ignore_errors: true systématiqueErreurs silencieuses en prodGérer explicitement les cas d'échec
gather_facts: false par défautPerte des variables ansible_*Désactiver seulement si perf critique et bien documenté
Pas de --check avant prodChangements imprévusToujours dry-run sur staging d'abord
become: true sur tout le playbookSurface d'attaque élargiebecome: true uniquement sur les tâches qui le nécessitent

Bonnes pratiques 2026

  • Collections > rôles communautaires : utiliser ansible.posix, community.general, community.docker via requirements.yml + ansible-galaxy collection install -r requirements.yml.
  • ansible.cfg versionné dans le dépôt : [defaults] host_key_checking = True, forks = 10, callback_whitelist = profile_tasks.
  • Épingler la version Ansible dans le CI (pip install ansible-core==2.17.*) pour éviter les régressions.
  • Pas de boucle with_items → remplacer par loop (syntaxe moderne depuis Ansible 2.5).
  • changed_when et failed_when explicites sur les modules command/shell inévitables.
  • Secrets rotation : intégrer HashiCorp Vault ou AWS Secrets Manager via le lookup community.hashi_vault.vault_read plutôt que Ansible Vault seul pour les environnements multi-équipes.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.