Skillshub creating-ansible-playbooks
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/jeremylongshore/claude-code-plugins-plus-skills/creating-ansible-playbooks" ~/.claude/skills/comeonoliver-skillshub-creating-ansible-playbooks-4a9da3 && rm -rf "$T"
manifest:
skills/jeremylongshore/claude-code-plugins-plus-skills/creating-ansible-playbooks/SKILL.mdsource content
Creating Ansible Playbooks
Overview
Generate production-ready Ansible playbooks, roles, and inventories for infrastructure automation. Supports provisioning servers, deploying applications, configuring services, and enforcing desired state across fleets of machines using SSH-based agentless automation.
Prerequisites
- Ansible 2.14+ installed (
)ansible --version - SSH access to target hosts with key-based authentication
- Python 3.9+ on control node and managed nodes
- Inventory of target hosts (IPs or hostnames)
- Privilege escalation credentials (sudo) if configuring system-level resources
installed for playbook validationansible-lint
Instructions
- Scan the project for existing Ansible files (
,ansible.cfg
,inventory/
,roles/
) to understand current structuregroup_vars/ - Determine the automation target: server provisioning, application deployment, configuration management, or security hardening
- Create the playbook YAML with proper structure:
,hosts
,become
,vars
,taskshandlers - Extract reusable logic into roles using the standard directory layout (
,tasks/
,handlers/
,templates/
,defaults/
,vars/
)meta/ - Define variables in
andgroup_vars/
for environment-specific values, keeping secrets inhost_vars/
-encrypted filesvault - Use Jinja2 templates for configuration files that vary across environments
- Add handlers for service restarts triggered by configuration changes
- Validate the playbook with
andansible-lint
(dry run)ansible-playbook --check --diff - Test idempotency by running the playbook twice and confirming no changes on the second run
Output
- Ansible playbooks (
) with structured tasks, handlers, and variables.yml - Role directories following Ansible Galaxy structure
- Jinja2 templates (
) for dynamic configuration files.j2 - Inventory files (INI or YAML) with host groups
andgroup_vars/
for environment separationhost_vars/
with connection and privilege escalation settingsansible.cfg
Error Handling
| Error | Cause | Solution |
|---|---|---|
| SSH connection failure or wrong host/port | Verify SSH keys, host IPs, and that port 22 is open with |
on become | Missing or incorrect sudo password | Add or configure in vault |
| Variable not defined in vars, defaults, or inventory | Check variable precedence; define in or |
| YAML syntax error or deprecated module usage | Run and fix reported issues; replace deprecated modules |
on every run (not idempotent) | Using / without / guards | Add parameter or switch to purpose-built modules (, , ) |
Examples
- "Create an Ansible playbook to provision an Ubuntu 22.04 server with Nginx, Certbot, and a firewall allowing only 80/443."
- "Generate a role that deploys a Python Flask app with Gunicorn, systemd service file, and log rotation."
- "Write an Ansible playbook to harden SSH config across all servers: disable root login, enforce key auth, set idle timeout."
Resources
- Ansible documentation: https://docs.ansible.com/ansible/latest/
- Ansible Galaxy roles: https://galaxy.ansible.com/
- Ansible Lint rules: https://ansible.readthedocs.io/projects/lint/rules/
- Best practices guide: https://docs.ansible.com/ansible/latest/tips_tricks/ansible_tips_tricks.html