讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

剧云
剧云

中文短剧剧本制作平台

AniShort
AniShort

AI短剧协同制作平台

EZ Ansible Skill

Polar Sponsor
爱发电 赞助
.NET 9.0

生成、审查并优化 Ansible 自动化脚本;在用户提及 Ansible、playbook、角色、清单、任务、处理器等情况时使用本技能。

Ansible Skill.

功能概述

Ansible Skill.是一项面向实际任务的技能,主要用于A 生成生产级Ansble自动化的技巧:游戏本,角色,目录,.;Jinja2模板,可变文件,以及官后完整的项目结构.bes.。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。

使用与执行

从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;

结果检查与注意事项

若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

Ansible 技能

一项用于生成生产级 Ansible 自动化内容的技能:Playbook、Role、Inventory、Jinja2 模板、变量文件,以及遵循官方最佳实践的完整项目结构。

工作流概览

1. 明确意图        → 理解目标操作系统、任务类型、规模、幂等性需求
2. 选择输出类型    → Playbook / Role / Inventory / 模板 / 完整项目
3. 生成制品        → 生成嵌入最佳实践的 YAML 文件
4. 验证与注释      → 添加 lint 提示、--check 命令及幂等性说明
5. 输出结构        → 清晰展示文件路径与执行指令

第 1 步:明确意图

生成前需收集以下信息(上下文明确时可自动推断):

参数 说明 示例
target_os 被管主机的操作系统家族 Ubuntu 22.04, RHEL 9
task_type 需自动化的操作类型 deploy app, manage users
connection_type Ansible 的连接方式 SSH(默认)、WinRM
privilege 是否需要 sudo/become 权限? yes / no
scale 主机/主机组数量 3 webservers, 1 DB
idempotency 是否必须支持重复安全执行? yes(始终推荐)
var_source 变量来源 group_vars, vault, extra

若上下文已足够清晰,可跳过交互式确认,直接生成。

第 2 步:输出类型

A) 单个 Playbook

适用场景:临时任务、简单自动化、一次性操作。

模板:

---
# playbooks/.yml
- name: <描述性 Play 名称>
  hosts: 
  become: true
  gather_facts: true

  vars:
    app_port: 8080
    app_user: deploy

  pre_tasks:
    - name: Ensure required packages are present
      ansible.builtin.package:
        name: "{{ item }}"
        state: present
      loop:
        - curl
        - git

  roles:
    - role: 
      when: ansible_os_family == "Debian"

  tasks:
    - name: Task description (use verb + object)
      ansible.builtin.module:
        param: value
      notify: Restart service
      tags:
        - setup
        - deploy

  handlers:
    - name: Restart service
      ansible.builtin.service:
        name: 
        state: restarted

规则:

  • 始终使用 FQCN(Fully Qualified Collection Name):如 ansible.builtin.copy,而非 copy
  • 使用 state: present/absent 保证幂等性
  • 为任务添加 tags,支持选择性执行
  • 服务重启必须通过 notify + handler 实现(禁止在 task 中内联重启)
  • 优先使用 loop 而非已弃用的 with_items

B) Role 骨架

适用场景:可复用、可共享、可测试的自动化单元。

目录结构:

roles//
├── defaults/
│   └── main.yml          # 低优先级默认值(可被覆盖)
├── vars/
│   └── main.yml          # 高优先级 Role 内部变量
├── tasks/
│   ├── main.yml          # 入口文件(按 OS/功能 import_tasks)
│   ├── install.yml
│   ├── configure.yml
│   └── service.yml
├── handlers/
│   └── main.yml
├── templates/
│   └── .conf.j2
├── files/
│   └── 
├── meta/
│   └── main.yml          # Galaxy 元数据与依赖声明
└── README.md

tasks/main.yml 模式:

---
- name: Include OS-specific variables
  ansible.builtin.include_vars: "{{ ansible_os_family }}.yml"
  failed_when: false

- ansible.builtin.import_tasks: install.yml
  tags: [install]

- ansible.builtin.import_tasks: configure.yml
  tags: [configure]

- ansible.builtin.import_tasks: service.yml
  tags: [service]

defaults/main.yml 模式:

---
# Role: 
# All variables with safe defaults

role_package_name: nginx
role_service_name: nginx
role_config_path: /etc/nginx/nginx.conf
role_user: www-data
role_port: 80
role_enabled: true

C) Inventory

静态 Inventory(INI 格式):

# inventory/hosts

[webservers]
web01.example.com ansible_host=10.0.1.10
web02.example.com ansible_host=10.0.1.11

[databases]
db01.example.com ansible_host=10.0.2.10

[loadbalancers]
lb01.example.com

[production:children]
webservers
databases
loadbalancers

[all:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/id_rsa
ansible_python_interpreter=/usr/bin/python3

静态 Inventory(YAML 格式 — 推荐):

# inventory/hosts.yml
all:
  vars:
    ansible_user: deploy
    ansible_python_interpreter: /usr/bin/python3

  children:
    webservers:
      hosts:
        web01:
          ansible_host: 10.0.1.10
          http_port: 80
        web02:
          ansible_host: 10.0.1.11
          http_port: 80

    databases:
      hosts:
        db01:
          ansible_host: 10.0.2.10
          db_port: 5432

    staging:
      children:
        webservers:
        databases:

group_vars 目录结构:

inventory/
├── hosts.yml
├── group_vars/
│   ├── all.yml              # 应用于所有主机
│   ├── all/
│   │   ├── vars.yml
│   │   └── vault.yml        # ansible-vault 加密的敏感信息
│   ├── webservers.yml
│   └── databases.yml
└── host_vars/
    └── web01.yml

D) Jinja2 模板

配置文件模板模式:

{# templates/nginx.conf.j2 #}
{# Managed by Ansible - Do not edit manually #}

user {{ nginx_user | default('www-data') }};
worker_processes {{ nginx_worker_processes | default(ansible_processor_vcpus) }};

events {
    worker_connections {{ nginx_worker_connections | default(1024) }};
}

http {
    include mime.types;
    default_type application/octet-stream;

    {% if nginx_log_format is defined %}
    log_format main '{{ nginx_log_format }}';
    {% endif %}

    {% for vhost in nginx_vhosts | default([]) %}
    server {
        listen {{ vhost.port | default(80) }};
        server_name {{ vhost.name }};
        root {{ vhost.root }};

        {% if vhost.ssl | default(false) %}
        listen 443 ssl;
        ssl_certificate {{ vhost.ssl_cert }};
        ssl_certificate_key {{ vhost.ssl_key }};
        {% endif %}
    }
    {% endfor %}
}

Jinja2 关键模式:

{# 默认值过滤器 #}
{{ variable | default('fallback_value') }}

{# 条件块 #}
{% if ansible_os_family == "Debian" %}
apt_cache_valid_time: 3600
{% elif ansible_os_family == "RedHat" %}
yum_releasever: latest
{% endif %}

{# 遍历字典 #}
{% for key, value in config_dict.items() %}
{{ key }} = {{ value }}
{% endfor %}

{# 列表拼接 #}
{{ my_list | join(', ') }}

{# 大写 / 替换 #}
{{ service_name | upper | replace('-', '_') }}

E) 变量文件

变量优先级顺序(高 → 低):

extra vars (-e)           # 最高优先级
task vars
block vars
role and include vars
play vars
host facts
host_vars
group_vars/all
role defaults            # 最低优先级

vault.yml 模式(存放敏感数据):

# group_vars/all/vault.yml
# Encrypt with: ansible-vault encrypt vault.yml

vault_db_password: "super_secret_password"
vault_api_key: "abc123xyz"
vault_ssl_cert_content: |
  -----BEGIN CERTIFICATE-----
  ...
  -----END CERTIFICATE-----

vars.yml(引用 vault 中的变量):

# group_vars/all/vars.yml
db_password: "{{ vault_db_password }}"
api_key: "{{ vault_api_key }}"

F) ansible.cfg

[defaults]
inventory           = ./inventory/hosts.yml
roles_path          = ./roles:~/.ansible/roles
collections_paths   = ./collections:~/.ansible/collections
remote_user         = deploy
private_key_file    = ~/.ssh/id_rsa
host_key_checking   = False
retry_files_enabled = False
stdout_callback     = yaml
callbacks_enabled   = profile_tasks, timer
interpreter_python  = auto_silent

# 性能调优
forks               = 10
pipelining          = True
gathering           = smart
fact_caching        = jsonfile
fact_caching_connection = /tmp/ansible_facts
fact_caching_timeout = 3600

[privilege_escalation]
become              = True
become_method       = sudo
become_user         = root
become_ask_pass     = False

[ssh_connection]
ssh_args            = -C -o ControlMaster=auto -o ControlPersist=60s
control_path_dir    = /tmp/.ansible/cp

第 3 步:完整项目结构

对于完整项目,请生成如下布局:

/
├── ansible.cfg
├── requirements.yml          # Galaxy roles/collections 依赖声明
├── site.yml                  # 主 Playbook
├── playbooks/
│   ├── deploy.yml
│   ├── rollback.yml
│   └── maintenance.yml
├── roles/
│   └── /          # 见上方 Role 骨架定义
├── inventory/
│   ├── production/
│   │   ├── hosts.yml
│   │   ├── group_vars/
│   │   └── host_vars/
│   └── staging/
│       ├── hosts.yml
│       └── group_vars/
├── collections/
│   └── requirements.yml
├── filter_plugins/           # 自定义 Jinja2 过滤器
├── library/                  # 自定义模块
└── .github/
    └── workflows/
        └── ansible-lint.yml  # CI 验证流程

requirements.yml:

---
collections:
  - name: community.general
    version: ">=7.0.0"
  - name: ansible.posix
  - name: community.docker
    version: "3.4.0"

roles:
  - name: geerlingguy.nodejs
    version: "6.1.0"
  - src: https://github.com/org/role.git
    scm: git
    version: main
    name: custom_role

第 4 步:验证与执行说明

所有生成内容末尾均须附加以下说明:

语法检查:

ansible-playbook playbooks/deploy.yml --syntax-check

模拟运行(不实际变更):

ansible-playbook playbooks/deploy.yml --check --diff

代码规范检查(需安装 ansible-lint):

pip install ansible-lint
ansible-lint playbooks/deploy.yml

使用 Vault 执行:

ansible-playbook playbooks/deploy.yml --ask-vault-pass
# 或指定 vault 密码文件:
ansible-playbook playbooks/deploy.yml --vault-password-file ~/.vault_pass

限制执行范围(特定主机/主机组):

ansible-playbook site.yml --limit webservers
ansible-playbook site.yml --limit web01.example.com

执行特定标签的任务:

ansible-playbook site.yml --tags deploy,configure
ansible-playbook site.yml --skip-tags debug

Ad-hoc 命令示例:

# Ping 所有主机
ansible all -m ping

# 收集主机事实
ansible webservers -m ansible.builtin.setup

# 执行 Shell 命令
ansible databases -m ansible.builtin.shell -a "df -h"

# 复制文件
ansible all -m ansible.builtin.copy -a "src=file.conf dest=/etc/file.conf"

最佳实践检查清单

务必始终遵循以下原则:

  • ✅ FQCN:使用 ansible.builtin.copy,而非 copy
  • ✅ 幂等性:每个任务都必须支持安全地重复执行
  • ✅ 显式声明 state:资源类模块必须始终指定 state:
  • ✅ 避免不必要的 shell:优先使用原生模块,而非 shell/command
  • ✅ 重启交由 Handler 处理:禁止在 task 中内联重启服务
  • ✅ 合理使用 tags:每个 task/block 都应设置 tag,便于选择性执行
  • ✅ Vault 管理密钥:禁止以明文形式硬编码密码或密钥
  • ✅ Role 所有变量均设默认值:每个 role 变量都应在 defaults/main.yml 中提供安全默认值
  • ✅ 显式控制 changed_when / failed_when:对 shell/command 类任务必须设置
  • ✅ 条件判断基于 Ansible Fact:使用 when 表达式,而非 shell 条件语句
  • ✅ 统一头部注释:每个文件首行均为:# Managed by Ansible

常用模块参考

任务 模块
安装软件包 ansible.builtin.package
复制文件 ansible.builtin.copy
渲染模板文件 ansible.builtin.template
管理服务 ansible.builtin.service
管理用户 ansible.builtin.user
执行命令 ansible.builtin.command
执行 Shell 命令 ansible.builtin.shell
管理文件/目录 ansible.builtin.file
编辑文件中的某行 ansible.builtin.lineinfile
下载文件 ansible.builtin.get_url
解压归档包 ansible.builtin.unarchive
管理定时任务 ansible.builtin.cron
管理防火墙 ansible.posix.firewalld
Docker 容器管理 community.docker.docker_container
Git 克隆 ansible.builtin.git
等待条件满足 ansible.builtin.wait_for
设置自定义 Fact ansible.builtin.set_fact
断言条件成立 ansible.builtin.assert
导入变量文件 ansible.builtin.include_vars
调试输出 ansible.builtin.debug

输出格式规范

交付 Ansible 制品时请遵守:

  1. 每个文件顶部必须注明完整路径,作为注释行
  2. 相关文件分组呈现,并使用清晰分隔符
  3. 对非常规设计决策进行内联说明,使用 # comment
  4. 每份响应结尾必须提供可执行命令
  5. 明确标识敏感信息 —— 指出哪些位置需使用 ansible-vault 加密
  6. 一个代码块仅包含一个文件 —— 禁止将多个文件合并至同一代码块中
目录

热门AI工具

更多
码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

0

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

0

2026.11.05

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

0

2026.11.04

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

0

2026.11.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn