Review role
Claude code ansible skill
npx -y skills add 3A2DEV/ansible-designer --skill review-roleAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 5 stars5 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.
What its author says it does
Copied from the file, not written here
Review an existing Ansible role and produce a structured severity report grouped by CRITICAL, WARNING, and INFO. Triggered by /review-role. Checks directory structure completeness, task FQCN, tag coverage, no_log on secret tasks, defaults vs vars usage, meta/main.yml validity, and handler correctness. NEVER modifies files.
SKILL.md
4.7 KB, as published. Nobody here has run it
review-role
Review an Ansible role and produce a structured severity report. This command never modifies files.
Required Inputs
- role_name or FQCN — The role to review (resolved from discovery if not provided)
Behavior
Step 1 — Discovery
Run discovery per references/discovery.md. Locate the role:
- By name in
roles_pathdirectories - By FQCN in
collections_pathdirectories
Step 2 — Load Role
Read all files in the role directory: tasks/, defaults/, vars/, handlers/, meta/, templates/.
Step 3 — Generate Severity Report
## Role Review: <role_name>
Path: <role_path>
Reviewed: <timestamp>
Tasks found: <count> Handlers: <count>
---
### CRITICAL
[Critical issues]
### WARNING
[Warnings]
### INFO
[Informational notes]
---
Summary: <X> critical, <Y> warnings, <Z> info
Checks to Perform
CRITICAL
| Check | Condition | Message |
|---|---|---|
| Bare module names | Any task uses module without FQCN | [tasks/main.yml:line <N>] Task "<name>" uses bare module name '<mod>' — must use FQCN |
| Missing no_log on secrets | Task has password:, secret:, token:, or references vault_* variables without no_log: true | [tasks/main.yml:line <N>] Task "<name>" handles secrets without no_log: true |
| Deprecated include syntax | Use of bare include: | [tasks/main.yml:line <N>] Deprecated 'include:' — use ansible.builtin.include_tasks or ansible.builtin.import_tasks |
| Missing tasks/main.yml | The file does not exist | CRITICAL: tasks/main.yml is missing — role has no entry point |
| Meta/main.yml missing required fields | galaxy_info is absent or missing author/description/min_ansible_version | [meta/main.yml] Missing required galaxy_info field: <field> |
WARNING
| Check | Condition | Message |
|---|---|---|
| Untagged tasks | Any task without tags: | [tasks/main.yml:line <N>] Task "<name>" has no tags — add component name + action category |
| vars/ used for overridable values | Variable in vars/main.yml that clearly should be in defaults/ (e.g., port, version) | [vars/main.yml] Variable '<var>' looks like an operator-overridable default — consider moving to defaults/main.yml |
| defaults/ used for internal constants | Variable in defaults/main.yml with underscore prefix or clearly internal | [defaults/main.yml] Variable '<var>' looks like an internal constant — consider moving to vars/main.yml |
| Missing directory | Standard dir (files/, templates/, handlers/) absent | Directory '<dir>/' is missing from role structure (not required but recommended) |
| Handler not referenced | Handler defined in handlers/main.yml but no task calls notify: for it | [handlers/main.yml] Handler '<name>' is defined but never notified by any task |
| Orphaned notify | Task notifies a handler name that doesn't exist in handlers/main.yml | [tasks/main.yml:line <N>] Task notifies '<name>' but no handler with that name/listen exists |
| Shell/command without idempotency | ansible.builtin.shell or ansible.builtin.command without creates:, removes:, or changed_when: | [tasks/main.yml:line <N>] Task "<name>" uses shell/command without idempotency guard |
| meta/main.yml: min_ansible_version not set | min_ansible_version absent | [meta/main.yml] min_ansible_version not set — recommend setting to "2.15" |
INFO
| Check | Condition | Message |
|---|---|---|
| No tests/ directory | tests/ absent | No tests/ directory found — consider adding tests/test.yml for smoke testing |
| No validation guidance | role has example content but no clear smoke-test path | Add tests/test.yml or README validation guidance aligned with references/testing.md |
| No README.md | Role has no README | Role is missing a README.md — document variables, dependencies, and usage |
| tasks/main.yml lacks assertions | No ansible.builtin.assert in tasks/main.yml | Consider adding an assert to validate minimum Ansible version or required variables |
| Templates not validated | ansible.builtin.template task without validate: parameter | [tasks/main.yml:line <N>] Template task for <dest> could use 'validate:' to verify syntax before deployment |
Constraints
- Never modify files. This command is read-only.
- Do not generate a "fixed" version of any file.
- Do not suggest sed/awk commands.
- Conclude with: "Use
/ansible-designer:update-roleto apply fixes."