agentsclimarketplace

Ansible automation and playbooks

Skill hamzabellouch/agent-skills/Infrastructure as Code and Edge/ansible-automation-and-playbooks

Master enterprise Ansible automation, idempotent playbook execution, reusable role design, Ansible Vault security, and Molecule automated testing.From its SKILL.md

Install
npx -y skills add hamzabellouch/agent-skills --skill ansible-automation-and-playbooks

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

  • 25 days oldThe repository was created 25 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • 3 stars3 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.

SKILL.md

7.0 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it

Ansible Automation & Playbooks Skill Guide

This skill provides production standards, directory layouts, security practices, and code patterns for writing enterprise-grade, idempotent Ansible playbooks and roles.


1. Directory Layout & Architecture Standards

Always follow the official Ansible Collection / Multi-Role Repository directory structure.

ansible-infrastructure/
├── inventory/
│   ├── production/
│   │   ├── hosts.yml          # Production inventory definition
│   │   └── group_vars/
│   │       ├── all.yml        # Global variables across production
│   │       ├── webservers.yml # Webserver group overrides
│   │       └── vault.yml      # Encrypted secrets via Ansible Vault
│   └── staging/
│       ├── hosts.yml
│       └── group_vars/
├── roles/
│   └── web_server/
│       ├── defaults/
│       │   └── main.yml       # Low-precedence default variables
│       ├── vars/
│       │   └── main.yml       # High-precedence explicit role variables
│       ├── tasks/
│       │   └── main.yml       # Entry point for tasks
│       ├── handlers/
│       │   └── main.yml       # Event-driven service notifications
│       ├── templates/
│       │   └── nginx.conf.j2  # Jinja2 template files
│       ├── meta/
│       │   └── main.yml       # Role dependencies & metadata
│       └── molecule/
│           └── default/
│               ├── molecule.yml # Molecule test harness config
│               └── converge.yml # Test execution playbook
├── site.yml                   # Master orchestration playbook
├── ansible.cfg                # Ansible configuration file
├── requirements.yml           # External galaxy role & collection dependencies
└── .ansible-lint              # Static analysis configuration

2. Standard Configuration (ansible.cfg)

[defaults]
inventory           = ./inventory/production/hosts.yml
roles_path          = ./roles
remote_user         = devops
host_key_checking   = True
stdout_callback     = yaml
bin_ansible_callbacks = True
forks               = 25
retry_files_enabled = False
interpreter_python  = auto_silent

[privilege_escalation]
become              = True
become_method       = sudo
become_user         = root
become_ask_pass     = False

3. Idempotent Ansible Playbook & Role Implementation

A. Master Playbook Orchestration (site.yml)

---
- name: Configure Webservers and Edge Reverse Proxies
  hosts: webservers
  gather_facts: true
  become: true

  pre_tasks:
    - name: Ensure OS dependencies are up to date
      ansible.builtin.apt:
        update_cache: true
        cache_valid_time: 3600
      when: ansible_os_family == "Debian"

  roles:
    - role: web_server

  post_tasks:
    - name: Verify Web Service Health
      ansible.builtin.uri:
        url: "http://localhost:80/health"
        status_code: 200
      register: result
      until: result.status == 200
      retries: 5
      delay: 3

B. Role Task Definitions (roles/web_server/tasks/main.yml)

Always enforce idempotency, use explicit module names (ansible.builtin.*), and name every task clearly.

---
- name: Install NGINX web server package
  ansible.builtin.package:
    name: "{{ web_server_package_name }}"
    state: present

- name: Render NGINX configuration template
  ansible.builtin.template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    owner: root
    group: root
    mode: '0644'
  notify: Restart Nginx Service

- name: Ensure NGINX document root exists
  ansible.builtin.file:
    path: "{{ web_server_doc_root }}"
    state: directory
    owner: www-data
    group: www-data
    mode: '0755'

- name: Deploy application index file
  ansible.builtin.copy:
    content: "<html><body><h1>Deployed by Ansible</h1></body></html>\n"
    dest: "{{ web_server_doc_root }}/index.html"
    owner: www-data
    group: www-data
    mode: '0644'

- name: Ensure NGINX service is enabled and running
  ansible.builtin.systemd:
    name: nginx
    state: started
    enabled: true

C. Handlers (roles/web_server/handlers/main.yml)

Handlers execute once at the end of a play if notified by a state change.

---
- name: Restart Nginx Service
  ansible.builtin.systemd:
    name: nginx
    state: restarted

4. Secrets Management with Ansible Vault

Never commit plaintext passwords, API keys, or certificates to source control.

Encrypting Variables File

# Encrypt an existing file
ansible-vault encrypt inventory/production/group_vars/vault.yml

# Edit encrypted file
ansible-vault edit inventory/production/group_vars/vault.yml

# Execute playbook using vault password file
ansible-playbook -i inventory/production/hosts.yml site.yml --vault-password-file .vault_pass

Vault Encrypted Data Structure (group_vars/vault.yml)

vault_db_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          36303037363630346162383563373539316538353364373138353138383335343431353736323630
          63333433393931343730306338303866383637383765383100103734633730336531313735353535
          35623035346536373832383437316533316631623337613530343363383439366661333334326532

5. Automated Role Testing with Molecule & Docker

Molecule tests roles isolated inside ephemeral containers or virtual machines.

molecule/default/molecule.yml

---
dependency:
  name: galaxy
driver:
  name: docker
platforms:
  - name: instance-ubuntu-2204
    image: geerlingguy/docker-ubuntu2204-ansible:latest
    command: ""
    volumes:
      - /sys/fs/cgroup:/sys/fs/cgroup:rw
    cgroupns_mode: host
    privileged: true
    pre_build_image: true
provisioner:
  name: ansible
verifier:
  name: ansible

6. Anti-Patterns & Best Practices

Anti-PatternOperational FailureProduction Best Practice
Using shell or command modules for package/file managementBypasses idempotency checks; executes on every run even if no state change is needed.Use native declarative modules (ansible.builtin.apt, ansible.builtin.file, ansible.builtin.systemd).
Hardcoding Hostnames or IPs in PlaybooksPrevents playbook reuse across staging, QA, and production environments.Parameterize hosts via inventory files (hosts.yml) and group_vars.
Storing Plaintext Passwords in GitExposes production credentials in version control history.Encrypt sensitive variables with ansible-vault or retrieve dynamically from HashiCorp Vault.
Ignoring ansible-lint ViolationsResults in deprecated module usage, unhandled errors, non-standard code styles.Add ansible-lint checks into CI/CD pipelines as a required gate before merging.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,645. 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.