From ansible-skills
Guides Ansible playbook creation, roles, inventories, project structure, modules, handlers, error handling, and debugging YAML syntax, module failures, variable precedence.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ansible-skills:ansible-playbookThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Ansible playbooks declare desired system state rather than imperative commands. The core principle is idempotency: running a playbook multiple times produces the same result without unintended changes.
Ansible playbooks declare desired system state rather than imperative commands. The core principle is idempotency: running a playbook multiple times produces the same result without unintended changes.
project/
├── ansible.cfg # Configuration
├── inventory # Host definitions
├── group_vars/ # Group variables
├── host_vars/ # Host-specific vars
├── roles/ # Reusable roles
└── playbooks/ # Playbook files
[defaults]
inventory = ./inventory
roles_path = ./roles
host_key_checking = False
stdout_callback = yaml
[privilege_escalation]
become = True
become_method = sudo
| Operation | Module | Key Parameters |
|---|---|---|
| Create directory | ansible.builtin.file | state: directory, mode, owner |
| Copy file | ansible.builtin.copy | src, dest, mode |
| Template | ansible.builtin.template | src, dest, variables in .j2 |
| Install package | ansible.builtin.package | name, state: present |
| Manage service | ansible.builtin.service | name, state, enabled |
| Run command | ansible.builtin.command | cmd, register result, set changed_when |
defaults/main.yml)vars/main.yml)-e)tasks:
- name: Update config
ansible.builtin.template:
src: app.conf.j2
dest: /etc/app.conf
notify: Restart app
handlers:
- name: Restart app
ansible.builtin.service:
name: app
state: restarted
- block:
- name: Risky operation
ansible.builtin.command: /opt/app/upgrade.sh
rescue:
- name: Handle failure
ansible.builtin.debug:
msg: "Upgrade failed, rolling back"
always:
- name: Cleanup
ansible.builtin.file:
path: /tmp/upgrade.lock
state: absent
| Mistake | Fix |
|---|---|
| Using short module names | Always use FQCN: ansible.builtin.copy not copy |
| Hardcoded values | Extract to variables in defaults/main.yml |
Missing changed_when on commands | Add changed_when: "'created' in result.stdout" |
| Forgetting handler flush | Use meta: flush_handlers when needed before dependent tasks |
| YAML indentation errors | Use 2 spaces, never tabs |
| Colon in unquoted string | Quote values containing : |
ansible-playbook --syntax-check playbook.yml # Check YAML
ansible-playbook --check playbook.yml # Dry run
ansible-playbook --check --diff playbook.yml # Show file changes
ansible-inventory --list # Verify inventory
ansible-inventory --host hostname # Check host vars
npx claudepluginhub cruftyoldsysadmin/ansible-skills --plugin ansible-skillsGuides Ansible playbook creation, roles, inventories, project structure, modules, handlers, error handling, and debugging YAML syntax, module failures, variable precedence.
Provides examples and best practices for writing Ansible playbooks to automate configuration management, server setup, and infrastructure orchestration.
Provides Ansible playbook and role structures plus best practices for idempotent tasks, handlers, FQCN, and inventory management. Use when writing playbooks, roles, or automating infrastructure.