Ansible-Playbook 剧本编写

Ansible Playbook 是 YAML 格式的自动化脚本,核心作用是将多步运维任务(如安装软件、配置文件、启动服务)编排成可重复执行的 "自动化流程"。其结构遵循固定的层级逻辑,从基础到进阶可拆解为「YAML 基础规范 + Play 核心结构 + 进阶组件」三部分,以下结合实操示例详细说明:

一、先掌握:Playbook 的 YAML 基础(必守规则)

Playbook 基于 YAML 编写,YAML 的语法规则直接决定 Playbook 是否能正常执行,核心规则:

  1. 缩进:用 2 个空格缩进(禁止用 Tab),层级靠缩进区分(最核心!);
  2. 列表项 :用 - 开头表示一个列表元素(比如一个 Play、一个任务);
  3. 键值对 :用 key: value 格式(冒号后必须加空格);
  4. 字符串:简单字符串可不用引号,含特殊字符(如空格、*)需用单 / 双引号包裹;
  5. 注释 :用 # 开头,注释内容不会执行。

二、Playbook 的核心结构(从基础到进阶)

一个 Playbook 由 一个或多个 Play 组成,每个 Play 对应 "对一组主机执行一系列任务"。单个 Play 的核心结构如下(按优先级 / 常用度排序):

核心元素 作用 示例
hosts 必选!指定要操作的主机 / 组(对应 Inventory 里的分组 / IP) hosts: webservers / all
remote_user 远程执行任务的用户(通常是 root) remote_user: root
become/become_user 提权(普通用户 sudo 到 root) become: yes + become_user: root
vars 自定义变量(可在任务中引用) vars: {nginx_port: 80}
tasks 必选!要执行的任务列表(每个任务对应一个 Ansible 模块) 见下方示例
handlers 处理器(触发式任务,仅被 notify 调用时执行,如重启服务) 见下方示例
roles 调用预定义的 Role(模块化复用) roles: [nginx, mysql]
pre_tasks/post_tasks 任务执行前 / 后的前置 / 后置任务(如执行前备份配置) 见进阶示例
tags 标签(指定只执行部分任务,方便调试) tags: ["deploy",
  1. 缩进必须 "层级分明"

    • Play 层级(gather_facts/hosts/tasks):相对于- name: first play1缩进 2 个空格;
    • Tasks 下的任务名称(- name:):相对于tasks:缩进 2 个空格(总计 4 个);
    • 任务的模块(ping:/command:/service:):相对于- name:缩进 2 个空格(总计 6 个);
    • 模块的参数(src:/name:/state:):相对于模块(copy:/service:)缩进 2 个空格(总计 8 个);✅ 核心:子元素必须比父元素多缩进 2 个空格,且全程用空格(禁止 Tab)。

示例

按 Ansible 缩进规则(2 个空格递进)拆解,核心层级缩进如下:

层级 内容示例 实际缩进量 规范要求
Play 根层级 - name: first play1 0 空格 根层级无缩进
Play 级参数 gather_facts: false 2 空格 比根层级 + 2
Tasks 列表项 - name: test connection 4 空格 比 tasks:+2
模块层级(核心) ping: / command: 6 空格 比任务项 + 2
Handlers 列表项 - name: restart httpd 4 空格 比 handlers:+2
Handler 模块层级 service: name=httpd... 6 空格 比 handler 项 + 2

验证命令

ansible-playbook test1.yaml --syntax-check

输出

相关推荐
Hy行者勇哥19 小时前
用Cursor智能编写Ansible/Terraform脚本,打通CI/CD链路
ci/cd·ansible·terraform
芷栀夏3 天前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
悠然南风13 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠22 天前
ansible编辑
网络·ansible
芳心粽伙饭23 天前
Ansible课后作业
ansible
烁34724 天前
Ansible初识
ansible
烁34724 天前
Ansible安装部署调试
ansible
烁34724 天前
Ansible命令
ansible
小义_24 天前
【Ansible】(三)基础配置与连接设置
云原生·ansible
炸炸鱼.1 个月前
Ansible 企业级实战:Playbook 与 Roles 完全指南
网络·ansible