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

输出

相关推荐
The star"'20 小时前
04-管理变量和事实
运维·云计算·ansible
tzhou6445221 小时前
自动化运维利器Ansible
运维·自动化·ansible
可爱又迷人的反派角色“yang”1 天前
ansible的概念及基本操作(一)
运维·ansible
乾元1 天前
网络遥测(Telemetry/gNMI)的结构化建模与特征化体系—— 从“采集指标”到“可被 AI 推理的状态向量”
运维·服务器·网络·人工智能·网络协议·华为·ansible
原神启动11 天前
Ansible(一)—— 自动化运维工具 Ansible:集中化管理服务器
运维·自动化·ansible
The star"'2 天前
02-Ansible 基本使用
运维·云计算·ansible
元气满满-樱2 天前
Ansible变量定义以及引用
ansible
Xyz996_2 天前
Ansible进行Nginx编译安装的详细步骤
运维·ansible
元气满满-樱3 天前
ansible-hoc 模块使用
运维·ansible