agentleFS
G1JoshiG1Joshi/Agent-Skills/skills/devops/ansible/SKILL.md

ansible

Skill15 starsChanged 44 days agoMITView on GitHub

Expert Ansible automation assistance covering playbooks, roles, inventory, idempotent modules, and Ansible Vault. Use when automating server configuration, application deployment, and infrastructure orchestration.

  • Reads credentials

6 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

6 rules. 0 are common, 3 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 4 edited versions we read keep these.

  • 3

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use notification handlers triggered by templated tasks:

    line 123
  2. Very specific:

    Always use fully qualified collection names (FQCN), e.g.

    line 155
  3. Very specific:

    Verify idempotency by running playbooks twice in CI.

    line 156
  4. Distinctive:

    Test roles and playbooks using Molecule and testinfra in automated CI pipelines.

    line 158
  5. Very specific:

    Use ansible.builtin.shell or command when a dedicated idempotent Ansible module exists.

    line 162
  6. Distinctive:

    Commit unencrypted vault passwords or plain text secrets to version control.

    line 163

“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Ansible

Ansible is an agentless automation engine for configuration management, infrastructure provisioning, and multi-tier application deployment via declarative YAML playbooks.

When to Use

  • Agentless Infrastructure Configuration: Automating multi-node server setup over SSH without installing client daemons.
  • Application Deployment & Provisioning: Deploying microservices, security patches, and system packages idempotently.
  • Security Hardening & Compliance: Enforcing CIS benchmarks, firewall rules, and SSH hardening across fleet servers.
  • Orchestration & Rolling Updates: Coordinating zero-downtime rolling upgrades across clustered backend nodes.

Quick Start

# playbook.yml
- name: Configure Webservers
  hosts: web
  become: true
  tasks:
    - name: Install Nginx
      ansible.builtin.apt:
        name: nginx
        state: present

    - name: Start Service
      ansible.builtin.service:
        name: nginx
        state: started

Core Concepts

Idempotent Playbook Structure with Handlers

Configuring web servers with automated restart triggers:

---
# playbooks/deploy_web.yml
- name: Configure and Harden Nginx Web Nodes
  hosts: webservers
  become: true
  vars:
    nginx_port: 80
    app_root: /var/www/production

  tasks:
    - name: Install Nginx web server
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true

    - name: Deploy hardened Nginx configuration
      ansible.builtin.template:
        src: templates/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: "0644"
      notify: Reload Nginx Service

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

  handlers:
    - name: Reload Nginx Service
      ansible.builtin.service:
        name: nginx
        state: reloaded

Dynamic Inventory & Host Grouping

Targeting cloud infrastructure dynamically:

# inventory/hosts.ini
[webservers]
web-01.infra.internal ansible_host=10.0.1.10
web-02.infra.internal ansible_host=10.0.1.11

[database]
db-primary.infra.internal ansible_host=10.0.2.20

[production:children]
webservers
database

[production:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/prod_deploy.pem
ansible_python_interpreter=/usr/bin/python3

Ansible Vault for Secret Protection

Encrypting credentials and sensitive environment variables:

# Encrypt sensitive variables file
ansible-vault create vars/vault_secrets.yml

# Execute playbook passing vault password file
ansible-playbook -i inventory/hosts.ini playbooks/deploy_web.yml --vault-password-file ~/.vault_pass

Common Patterns

Idempotent Nginx Configuration and Service Handler

Problem: Applying configuration changes repeatedly without restarting services unless template files changed.

Solution: Use notification handlers triggered by templated tasks:

---
- name: Configure Web Servers
  hosts: webservers
  become: true
  tasks:
    - name: Ensure Nginx is installed
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true

    - name: Deploy Nginx site configuration
      ansible.builtin.template:
        src: templates/site.conf.j2
        dest: /etc/nginx/sites-available/default
        mode: "0644"
      notify: Reload Nginx

  handlers:
    - name: Reload Nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded

Best Practices

Do:

  • Always use fully qualified collection names (FQCN), e.g. ansible.builtin.template, community.docker.docker_container.
  • Verify idempotency by running playbooks twice in CI; the second run must report changed=0.
  • Store credentials, certificates, and passwords in ansible-vault or retrieve from HashiCorp Vault.
  • Test roles and playbooks using Molecule and testinfra in automated CI pipelines.

Don't:

  • Use ansible.builtin.shell or command when a dedicated idempotent Ansible module exists.
  • Commit unencrypted vault passwords or plain text secrets to version control.
  • Perform large inventory operations without --forks tuned for network concurrency.

Troubleshooting

ErrorCauseSolution
Permission denied (publickey)SSH key missing, incorrect user, or host key verification failed.Specify private key via --private-key or set ansible_user in inventory.
FAILED! => {"changed": false, "msg": "Destination ... is not writable"}Task requires root escalation but become: true is missing.Add become: true at playbook or task level.
Syntax Error while loading YAMLTab characters or improper indentation in YAML playbook.Ensure consistent 2-space indentation and run ansible-lint playbook.yml.

References

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.