Ansible Playbook

什么是 Playbook ?首先 Play 是一组有序的 tasks ,这些任务是可以在 inventory 中的主机执行,而 Playbook 它是一个文本文件,里面包含了一个或多个 Play
Play 可以允许将复杂、冗长的手动管理任务转换为可以预测成功结果的可重复例程。在 Playbook 中,可以保存可读和可执行的 tasks 队列,可以按照应用部署的步骤来编写 Playbook 来进行部署应用或基础架构。

Playbook 格式

首先先看到之前介绍过的 Ad Hoc 命令:

$ ansible -m user -a "name=Tom uid=1200 state=present" demo.example.com

以上命令的作用是在 demo.example.com 上创建一个 Tom 用户,UID 为1200 。这是一个 Task ,把它转化成 Playbook 格式如下:

---
- name: Create Tom User
  hosts: demo.example.com
  tasks:
    - name: Tom exists with UID 1200
      user:
         name: Tom
         uid: 1200
         state: present
...

先不看格式,根据内容相信都能看懂,这就是 Playbook 的易读性,接下来将介绍其格式。
Playbook 文本文件使用的是 YAML 格式书写的,通常后缀是 .yml 。Playbook 主要使用缩进和空格字符来表明数据层次结构,YAML 格式没有严格限制缩进要使用多少空格(一般是两个),但是要遵循以下两个基本原则:
1、层次结构中相同级别的元素(如:相同的列表和项)必须具有相同的缩进。
2、条目中的子条目相对其它条目需要比父目录更缩进。
在 Playbook 文件开头需要输入三个破折号(---),标记文档的开始,同时在文档的结尾也需要输入三个点符号(...),标记文档的结束,当然不写开头和结尾的标记符也是可以的。
介于开头和结尾标记符号之间,Playbook 定义了一些 Play 列表,在 YAML 格式中在每一个列表前面需要添加一个破折号然后紧跟一个空格。
Example:

---
- name: Just an Example
  hosts: webservers
  tasks:
    - first
    - second
    - third
...

Example: 在 demo.example.com 托管主机上安装 httpd 并且启动该服务

---
- name: Configure Web Service on demo.example.com
  hosts: demo.example.com
  tasks:
    - name: Install Web Service
      yum:
        name: httpd
        state: latest

    - name: Start and Enable Web Service
      service:
        name: httpd
        state: started
        enabled: true
...

运行 Playbook

通过 ansible-playbook 命令后面接 Playbook 文件就可以运行 Playbook 。
ansible-playbook 命令选项:

选项 用途
--syntax-check 检查 Playbook 语法检查
-C dry run ,测试运行,不会真的操作
-v -vvv -vvvv 显示详细信息(啰嗦模式),通常配合 -C 使用

多 Play 的 Playbook

在 Playbook 中可以书写多个 Play 可以在不同的托管主机上进行任务。
Example:

---
- name: This is simple playbook with two plays
  hosts: web.example.com
  tasks:
    - name: first task
      yum:
        name: httpd
        status: present

    - name: second task
      service:
        name: httpd
        enabled: true

- name: second play
  hosts: db.example.com
  tasks:
    - name: first task
      service:
        name: mariadb
        status: started
        enabled: true

...

Play 中定义远程用户与权限提升

Plays 可以使用不同的远程用户或特权升级,这有别于默认的配置文件,它们可以在 hoststasks 这一级别定义。

属性
remote_user 远程用户
become 是否进行特权提升:true or false
become_method 特权提升方式:sudo or su
become_user 权限提升至哪个用户

Playbook 语法差异

YAML 语法存在一些变体,可以在 Playbook 中使用的另一种方法。
YAML 注释使用的是(#)号,可以注释一行内容或者右侧内容。
YAML 字符串不需要使用引号括起,但是也可以使用单或双引号。
书写多行内容时可以使用(|)或者(>)符号。
YAML 有些情况可以将多行内容书写成一行,但是一般不建议这样做,如:

name: web
service: httpd
state: started
可以写成:{name:web,service:httpd,state:started}

hosts:
  - servera
  - serverb
  - serverc
可以写成:hosts:[servera,serverb,serverc]

tasks:
  - name: start httpd
    service: name=httpd enabled=true state=started
最后修改:2019 年 11 月 12 日 06 : 05 PM
如果觉得我的文章对你有用,请随意赞赏