Ansible教程:Playbook介绍

介绍

Playbook 是 Ansible 的剧本,使用 YAML 编写,用来定义一组在多台主机上顺序执行的自动化任务,替代 ad-hoc 临时命令,适合复杂部署、配置管理、应用发布。

概念

  • Playbook:整个YAML文件,由一个或多个 Play 组成
  • Play:绑定一组主机 + 变量 + 任务集合
  • Task:单个动作,调用 Ansible Module(模块),从上往下顺序执行
  • Module:Ansible内置执行单元(yum、copy、service、template等)

Task(任务)

最小执行单元,一个 Task 对应一次动作,调用 Ansible 模块完成操作。

  • 一个 Task 只做一件事:创建文件、安装包、启动服务等
  • 关键字:name(任务名称,方便看日志)、模块名(yum/file/service)
  • 执行特点:在目标主机上顺序执行,一个 Task 失败默认停止整个 Play

示例单个 Task:

- name: 安装nginx
  yum:
    name: nginx
    state: present

Play(剧本段落)

由一组 Task 组成,选定一批目标主机,在这些主机上依次执行 Tasks。

  • 一个 Play 核心要素:hosts(指定哪些主机执行)、tasks(任务列表)、vars/become等配置
  • 一个 Playbook 文件,可以包含多个 Play(从一个主机组切换到另一个主机组执行不同任务)

示例一个完整 Play:

- name: 部署nginx的Play
  hosts: webservers   # 目标主机组
  become: true        # 提权sudo
  tasks:
    - name: 安装nginx
      yum:
        name: nginx
        state: present
    - name: 启动nginx
      service:
        name: nginx
        state: started

Playbook

.yml 后缀文件,可以包含 1 个或多个 Play。

# Playbook 包含两个Play
- name: Play1 配置web节点
  hosts: web
  tasks:
    ...

- name: Play2 配置db节点
  hosts: db
  tasks:
    ...

三者关系总结

  • Playbook 文件 包含多个 Play
  • 每个 Play 指定目标主机,内部顺序执行一组 Task
  • Task 调用模块完成具体操作。
Playbook
├─ Play #1(hosts: web)
│   ├─ Task 1
│   └─ Task 2
└─ Play #2(hosts: db)
    ├─ Task A
    └─ Task B

补充

  1. Play 的范围是主机:同一个 Play 里所有 Task 都会在 hosts 指定的所有主机上运行
  2. Task 是串行执行:同一个 Play,主机上先跑完 Task1,再跑 Task2
  3. 模块(module):Task 底层执行者,Task 只是模块的调用包装

特点

幂等性,多次执行结果一致,只会做必要变更;无客户端,基于SSH;可版本控制(git),可复用。


原文出处:/show_1GW47QCIULHx.html