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

输出

相关推荐
http阿拉丁神猫1 天前
ansible脚本解读
服务器·ansible·apache
汪汪大队u4 天前
基于 K8s 的物联网平台运维体系:Ansible+Zabbix 自动化监控与故障自愈(一)—— 环境准备与 Zabbix Server 部署
运维·kubernetes·自动化·ansible·zabbix
IT大白鼠6 天前
Ansible vs 运维智能体:自动化工具的优劣对比与适用场景分析
运维·自动化·ansible
悠悠121388 天前
从0到1掌握Ansible:让自动化运维不再是梦想
运维·自动化·ansible
卧室小白10 天前
ansible自动化
ansible
yuezhilangniao11 天前
Ansible基础 ansible入门 针对不同python3版本 - 含 Terraform 入门联动
运维·自动化·ansible
Koma_zhe13 天前
【Ansible开源自动化运维工具】别再手动装监控了,Ansible能让上百台机器同时搞定Node Exporter(1)
运维·开源·ansible
.柒宇.15 天前
RedHat10-Ansible部署Docker操作
docker·eureka·ansible
道清茗23 天前
【RH294知识点汇总】第 7 章 《 使用角色和 Ansible 内容集合简化 Playbook 》常见问题
ansible
何中应24 天前
Ansible安装&使用
运维·自动化·ansible·运维开发·自动化运维