Ansible Generator
Trigger Phrases
Use this skill when the request is to generate or scaffold Ansible content, for example:
- - "Create a playbook to deploy nginx with TLS."
- "Generate an Ansible role for PostgreSQL backups."
- "Write inventory files for prod and staging."
- "Build reusable Ansible tasks for user provisioning."
- "Initialize an Ansible project with ansible.cfg and requirements.yml."
- "Give me a quick Ansible snippet to install Docker."
Do not use this skill as the primary workflow when the request is validation/debug-only (syntax errors, lint failures, Molecule/test failures). Use ansible-validator for those cases.
Deterministic Execution Flow
Run these stages in order. Do not skip a stage unless the Validation Exceptions Matrix explicitly allows it.
Stage 0: Classify Request Mode
Determine one mode first:
| Mode | Typical user intent | Deliverable |
|---|
| INLINECODE2 | "create/build/generate" a full playbook/role/inventory/project file set | Complete file(s), production-ready |
| INLINECODE3 |
"quick snippet/example" without full file context | Focused task/play snippet |
|
docs-only | explanation, pattern comparison, or conceptual guidance only | Explanatory content, optional examples |
Stage 1: Collect Minimum Inputs
If details are missing, ask briefly. If the user does not provide them, proceed with safe defaults and state assumptions.
| Resource type | Required inputs | Safe defaults if missing |
|---|
| Playbook | target hosts, privilege (become), OS family, objective | INLINECODE6 , become: false, OS-agnostic modules |
| Role |
role name, primary service/package, supported OS | role name from task domain, Debian + RedHat vars |
| Tasks file | operation scope, required vars, execution context | standalone reusable tasks with documented vars |
| Inventory | environments, host groups, hostnames/IPs |
production/
staging groups with placeholders |
| Project config | collections/roles dependencies, lint policy | minimal
ansible.cfg,
requirements.yml,
.ansible-lint |
Stage 2: Reference Extraction Checklist
Before drafting content, extract the following from local references/templates.
Required references
- Extract: FQCN requirements, idempotency rules, naming, security expectations.
- Extract: correct module/parameter patterns for the exact task type.
Required templates by output type
- - Playbook: INLINECODE15
- Role:
assets/templates/role/ (including meta/argument_specs.yml and molecule/default/ for test scaffolding) - Inventory (INI): INLINECODE19
- Inventory (YAML): INLINECODE20
- Project config:
assets/templates/project/ansible.cfg, assets/templates/project/requirements.yml, INLINECODE23
Extraction checks
- - Identify every
[PLACEHOLDER] that must be replaced. - Decide module selection priority (
ansible.builtin.* first). - Capture at least one OS-appropriate package pattern when OS-specific behavior is needed.
- Capture required prerequisites (collections, binaries, target assumptions).
Stage 3: Generate
Apply these generation standards:
- 1. Use FQCN module names (
ansible.builtin.* first choice). - Keep tasks idempotent (
state, creates/removes, changed_when when needed). - Use descriptive verb-first task names.
- Use
true/false booleans (not yes/no). - Add
no_log: true for sensitive values. - Replace all placeholders before presenting output.
- Prefer
ansible.builtin.dnf for RHEL 8+/CentOS 8+ (legacy yum only for older systems).
Stage 4: Validate (Default) or Apply Exception (Fallback)
Use the matrix below to keep validation deterministic and non-blocking.
Validation Exceptions Matrix
| Scenario | Default behavior | Allowed fallback | What to report |
|---|
| INLINECODE37 | Run ansible-validator after generation and after each fix pass | If validator/tools are unavailable, run manual static checks (YAML shape, placeholder scan, FQCN/idempotency/security review) and provide exact deferred validation commands | Explicitly list which checks ran, which were skipped, and why |
| INLINECODE39 |
Skip full validator by default; do inline sanity checks | Run full validator only if user asks or snippet is promoted to full file | State that validation was limited because output is snippet-only |
|
docs-only | No runtime validation | None needed | State that no executable artifact was generated |
| Offline environment (no web/docs access) | Continue with local references and templates | Skip external doc lookups; prefer builtin-module implementations; provide notes for later external verification | State offline constraint and impacted checks/lookups |
Resource Generation Guidance
Playbooks
- - Use
assets/templates/playbook/basic_playbook.yml as structure. - Include: header comments,
pre_tasks/tasks/post_tasks as needed, handlers, tags. - Add health checks when service deployment/configuration is involved.
Roles
- - Build from
assets/templates/role/ structure. - Keep defaults in
defaults/main.yml; keep higher-priority role vars in vars/main.yml. - Include OS-specific vars (
vars/Debian.yml, vars/RedHat.yml) when relevant. - Add
meta/argument_specs.yml for variable validation. - Include
molecule/default/ scaffold (from assets/templates/role/molecule/) for production-ready roles.
Task Files
- - Keep scope narrow and reusable.
- Document required input variables in comments.
- Use conditionals for environment/OS-sensitive operations.
Inventory
- - Build logical host groups and optional group hierarchies.
- Use variable layering intentionally:
group_vars/all.yml -> group -> host. - Default to INI format (
hosts) for simple topologies; use YAML format (hosts.yml) when the user requests it or when the hierarchy is complex.
Project Configuration
- - Provide baseline
ansible.cfg, requirements.yml, and .ansible-lint. - Keep defaults practical and editable.
Custom Modules and Collections
When the request depends on non-builtin modules/collections:
- 1. Identify collection + module and required version sensitivity.
- Check local
references/module-patterns.md first. - If still unresolved and network/tools are available, query Context7:
-
mcp__context7__resolve-library-id
-
mcp__context7__query-docs
- 4. If Context7 is unavailable, use official Ansible docs / Ansible Galaxy pages.
- If external lookup is unavailable, provide a builtin fallback approach and state the limitation.
Always include collection installation guidance when collection modules are used.
Canonical Example Flows
Flow A: Full Generation (Playbook)
User prompt: "Create a playbook to deploy nginx with TLS on Ubuntu and RHEL."
- 1. Classify as
full-generation. - Gather/confirm required inputs (hosts, cert paths, become, service name).
- Extract required references (
best-practices.md, module-patterns.md) and playbook template. - Generate complete playbook with OS conditionals (
apt/dnf), handlers, validation for config templates. - Run
ansible-validator. - Fix issues and rerun until checks pass (or apply matrix fallback if tooling unavailable).
- Present output with validation summary, usage command, and prerequisites.
Flow B: Quick Snippet (Task Block)
User prompt: "Give me a snippet to create a user and SSH key."
- 1. Classify as
snippet-only. - Extract minimal module patterns for
ansible.builtin.user and ansible.builtin.authorized_key. - Generate concise snippet with FQCN, idempotency, and variable placeholders.
- Perform inline sanity checks (YAML shape, FQCN, obvious idempotency/security).
- Present snippet and note that full validator run was skipped due to snippet-only mode.
Output Requirements
For generated executable artifacts, use this response structure:
CODEBLOCK0 bash
[Exact command(s)]
CODEBLOCK1
Done Criteria
This skill execution is complete only when all applicable items are true:
- - Trigger decision is explicit (
full-generation, snippet-only, or docs-only). - Required references/templates were consulted for the selected artifact type.
- Generated output has no unresolved placeholders.
- Validation followed default behavior or a documented exception from the matrix.
- Any skipped checks include a concrete reason and deferred command(s).
- Final output includes summary, assumptions, usage, and prerequisites.
Ansible Generator
触发短语
当请求生成或搭建Ansible内容时使用此技能,例如:
- - 创建一个使用TLS部署nginx的剧本。
- 为PostgreSQL备份生成一个Ansible角色。
- 为生产环境和预发布环境编写清单文件。
- 构建可复用的Ansible任务用于用户配置。
- 使用ansible.cfg和requirements.yml初始化一个Ansible项目。
- 给我一个快速安装Docker的Ansible代码片段。
当请求仅为验证/调试(语法错误、lint失败、Molecule/测试失败)时,不要将此技能作为主要工作流程。这些情况请使用ansible-validator。
确定性执行流程
按顺序执行以下阶段。除非验证异常矩阵明确允许,否则不要跳过任何阶段。
阶段0:分类请求模式
首先确定一种模式:
| 模式 | 典型用户意图 | 交付物 |
|---|
| 完整生成 | 创建/构建/生成完整的剧本/角色/清单/项目文件集 | 完整的文件,生产就绪 |
| 仅代码片段 |
快速代码片段/示例,无需完整文件上下文 | 聚焦的任务/剧本片段 |
| 仅文档 | 仅需解释、模式对比或概念指导 | 解释性内容,可选示例 |
阶段1:收集最低输入
如果缺少详细信息,简要询问。如果用户未提供,则使用安全默认值并说明假设。
| 资源类型 | 必需输入 | 缺失时的安全默认值 |
|---|
| 剧本 | 目标主机、权限(become)、操作系统系列、目标 | hosts: all,become: false,操作系统无关模块 |
| 角色 |
角色名称、主要服务/包、支持的操作系统 | 根据任务域的角色名称,Debian + RedHat变量 |
| 任务文件 | 操作范围、必需变量、执行上下文 | 独立的可复用任务,带有文档化变量 |
| 清单 | 环境、主机组、主机名/IP | 带有占位符的production/staging组 |
| 项目配置 | 集合/角色依赖、lint策略 | 最小化的ansible.cfg、requirements.yml、.ansible-lint |
阶段2:参考提取清单
在起草内容之前,从本地参考/模板中提取以下内容。
必需参考
- - references/best-practices.md
- 提取:FQCN要求、幂等性规则、命名、安全期望。
- - references/module-patterns.md
- 提取:针对确切任务类型的正确模块/参数模式。
按输出类型的必需模板
- - 剧本:assets/templates/playbook/basicplaybook.yml
- 角色:assets/templates/role/(包括用于测试脚手架meta/argumentspecs.yml和molecule/default/)
- 清单(INI):assets/templates/inventory/hosts
- 清单(YAML):assets/templates/inventory/hosts.yml
- 项目配置:assets/templates/project/ansible.cfg、assets/templates/project/requirements.yml、assets/templates/project/.ansible-lint
提取检查
- - 识别所有必须替换的[占位符]。
- 决定模块选择优先级(优先ansible.builtin.*)。
- 当需要特定操作系统行为时,至少捕获一个适合操作系统的包模式。
- 捕获必需的先决条件(集合、二进制文件、目标假设)。
阶段3:生成
应用以下生成标准:
- 1. 使用FQCN模块名称(首选ansible.builtin.*)。
- 保持任务幂等性(需要时使用state、creates/removes、changedwhen)。
- 使用描述性的动词优先任务名称。
- 使用true/false布尔值(而不是yes/no)。
- 对敏感值添加nolog: true。
- 在呈现输出前替换所有占位符。
- 对于RHEL 8+/CentOS 8+优先使用ansible.builtin.dnf(仅旧系统使用传统的yum)。
阶段4:验证(默认)或应用异常(回退)
使用以下矩阵保持验证确定性和非阻塞性。
验证异常矩阵
| 场景 | 默认行为 | 允许的回退 | 报告内容 |
|---|
| 完整生成 | 生成后和每次修复后运行ansible-validator | 如果验证器/工具不可用,运行手动静态检查(YAML格式、占位符扫描、FQCN/幂等性/安全审查)并提供确切的延迟验证命令 | 明确列出哪些检查已运行、哪些已跳过及原因 |
| 仅代码片段 |
默认跳过完整验证器;进行内联健全性检查 | 仅当用户要求或代码片段升级为完整文件时运行完整验证器 | 说明验证受限,因为输出仅为代码片段 |
| 仅文档 | 无运行时验证 | 无需 | 说明未生成可执行工件 |
| 离线环境(无网络/文档访问) | 继续使用本地参考和模板 | 跳过外部文档查找;优先使用内置模块实现;提供注释供后续外部验证 | 说明离线约束及受影响的检查/查找 |
资源生成指南
剧本
- - 使用assets/templates/playbook/basicplaybook.yml作为结构。
- 包括:头部注释、根据需要添加pretasks/tasks/post_tasks、处理程序、标签。
- 当涉及服务部署/配置时添加健康检查。
角色
- - 从assets/templates/role/结构构建。
- 将默认值放在defaults/main.yml中;将优先级更高的角色变量放在vars/main.yml中。
- 在相关时包含特定操作系统的变量(vars/Debian.yml、vars/RedHat.yml)。
- 添加meta/argument_specs.yml用于变量验证。
- 对于生产就绪的角色,包含molecule/default/脚手架(来自assets/templates/role/molecule/)。
任务文件
- - 保持范围狭窄且可复用。
- 在注释中记录必需的输入变量。
- 对环境/操作系统敏感的操作使用条件语句。
清单
- - 构建逻辑主机组和可选的组层次结构。
- 有意使用变量分层:group_vars/all.yml -> 组 -> 主机。
- 对于简单拓扑结构默认使用INI格式(hosts);当用户要求或层次结构复杂时使用YAML格式(hosts.yml)。
项目配置
- - 提供基线ansible.cfg、requirements.yml和.ansible-lint。
- 保持默认值实用且可编辑。
自定义模块和集合
当请求依赖于非内置模块/集合时:
- 1. 识别集合+模块及所需的版本敏感性。
- 首先检查本地references/module-patterns.md。
- 如果仍未解决且网络/工具可用,查询Context7:
- mcp
context7resolve-library-id
- mcp
context7query-docs
- 4. 如果Context7不可用,使用官方Ansible文档/Ansible Galaxy页面。
- 如果外部查找不可用,提供内置回退方法并说明限制。
使用集合模块时始终包含集合安装指南。
规范示例流程
流程A:完整生成(剧本)
用户提示:创建一个在Ubuntu和RHEL上使用TLS部署nginx的剧本。
- 1. 分类为完整生成。
- 收集/确认必需输入(主机、证书路径、become、服务名称)。
- 提取必需参考(best-practices.md、module-patterns.md)和剧本模板。
- 生成包含操作系统条件(apt/dnf)、处理程序、配置模板验证的完整剧本。
- 运行ansible-validator。
- 修复问题并重新运行直到检查通过(如果工具不可用则应用矩阵回退)。
- 呈现输出,包括验证摘要、使用命令和先决条件。
流程B:快速代码片段(任务块)
用户提示:给我一个创建用户和SSH密钥的代码片段。
- 1. 分类为仅代码片段。
- 提取ansible.builtin.user和ansible.builtin.authorized_key的最小模块模式。
- 生成包含FQCN、幂等性和变量占位符的简洁代码片段。
- 执行内联健全性检查(YAML格式、FQCN、明显的幂等性/安全性)。
- 呈现代码片段并说明由于仅代码片段模式跳过了完整验证器运行。
输出要求
对于生成的可执行工件,使用以下响应结构: