| name | ansible-fix |
| version | 1.0.0 |
| description | ALWAYS use this skill immediately after running 'ansible-galaxy init' to create a new Ansible role. Also use when the user asks to fix ansible-lint errors or when ansible-lint output shows fixable issues like yaml[comments], schema[meta], meta-incorrect, name[play], or role-name[path] violations. |
| allowed-tools | Bash, Read, Write, Edit |
| changelog | CHANGELOG.md |
Ansible Lint Auto-Fixer
This skill automatically fixes common ansible-lint errors that can be easily automated, saving time when creating new Ansible roles.
When to Use This Skill
ALWAYS invoke this skill proactively:
- Immediately after running
ansible-galaxy init roles/<name> - Do NOT wait for the user to ask - fix lint issues automatically
- This provides a better user experience by delivering clean, lint-free roles
Also use when:
- User explicitly asks to fix ansible-lint errors
- ansible-lint output shows any of these fixable errors:
yaml[comments]- Missing space after # in commentsschema[meta]- Unquoted version stringsmeta-incorrect- Placeholder metadata valuesname[play]- Unnamed playsrole-name[path]- Incorrect role import paths
What It Fixes
The skill runs a Python script that automatically corrects:
yaml[comments]: Adds space after
#in comments#comment→# comment
schema[meta]: Quotes numeric version strings
min_ansible_version: 2.1→min_ansible_version: "2.1"
meta-incorrect: Replaces placeholder values with sensible defaults
author: your name→author: Ansible Usercompany: your company (optional)→company: Communitylicense: license (GPL-2.0-or-later, MIT, etc)→license: MIT
name[play]: Adds descriptive names to unnamed plays
- Adds
name: Test playbook for <hosts>to plays
- Adds
role-name[path]: Fixes role import paths
roles/nginx→nginx
Instructions
IMPORTANT: This skill should be invoked automatically whenever you create a new role with ansible-galaxy init. Do not wait for the user to ask - proactively fix lint issues to provide a clean role.
When invoked, follow these steps:
Identify the role path from context (e.g., if you just ran
ansible-galaxy init roles/nginx, the path isroles/nginx). Do not ask the user - proceed automatically.Run the fixer script:
uv run .claude/skills/ansible-fix/ansible-lint-fix.py <role_path>Example:
uv run .claude/skills/ansible-fix/ansible-lint-fix.py roles/nginxReview the output to see what was fixed:
- Number of files modified
- Types of fixes applied
- Count of each fix type
Verify the fixes by running ansible-lint:
ansible-lint <role_path> 2>&1Report results to the user:
- Show summary of fixes applied
- Confirm if all issues are resolved (0 failures, 0 warnings)
- If issues remain, explain what still needs manual fixing
Supporting Files
The skill uses the ansible-lint-fix.py script. This script:
- Scans all YAML files in the role directory
- Applies regex-based fixes for common patterns
- Reports detailed statistics on what was changed
Examples
Example 1: After creating a new role
User: I just created a new nginx role with ansible-galaxy init roles/nginx
Assistant: [Invokes ansible-fix skill]
- Runs: uv run .claude/skills/ansible-fix/ansible-lint-fix.py roles/nginx
- Reports: Fixed 12 issues across 6 files
- Verifies: ansible-lint shows 0 failures, 0 warnings
Example 2: Fixing existing linting issues
User: Can you fix the ansible-lint errors in my web-server role?
Assistant: [Invokes ansible-fix skill]
- Runs: uv run .claude/skills/ansible-fix/ansible-lint-fix.py roles/web-server
- Reports: Fixed 8 issues across 4 files
- Verifies: ansible-lint results
Best Practices
- Always run ansible-lint after using this skill to verify fixes
- The script is idempotent - safe to run multiple times
- Some issues may require manual intervention (explained in output)
- Review changes before committing to ensure they match project standards
Limitations
This skill only fixes syntactic and formatting issues. It does not:
- Write role tasks or handlers
- Configure role variables
- Implement role logic
- Fix complex YAML structural problems beyond the patterns it recognizes
- Fix role naming issues (role names must match
^[a-z][a-z0-9_]*$- lowercase, numbers, underscores only, no hyphens)
For complex linting issues or role development, manual intervention is needed.
Note: If ansible-lint reports role-name errors about the role name not matching the required pattern, the role directory itself needs to be renamed (e.g., test-role → test_role).