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

输出

相关推荐
cly12 天前
Ansible自动化(十五):加解密详解
运维·自动化·ansible
cly12 天前
Ansible自动化(十二):Jinja2过滤器
运维·自动化·ansible
cly12 天前
Ansible自动化(十三):调试与优化
数据库·自动化·ansible
cly12 天前
Ansible自动化(十四):Roles(角色)
服务器·自动化·ansible
cly12 天前
Ansible自动化(十一):Jinja2模板
网络·自动化·ansible
cly12 天前
Ansible自动化(八):条件语句
运维·自动化·ansible
China_Yanhy2 天前
Ansible 工业级项目标准化架构指南 (V1.0)
架构·ansible
cly12 天前
Ansible自动化(九):循环语句
windows·自动化·ansible
cly12 天前
Ansible自动化(十):配置文件管理模块(lineinfile / blockinfile)
运维·自动化·ansible
tyatyatya3 天前
Ansible自动化配置,从入门到实战
运维·自动化·ansible