playbook

文章目录

  • playbook
  • 1. 实施playbook
    • 1.1 Ansible Playbook与临时命令
    • 1.2 格式化Ansible Playbook
    • 1.3 运行playbook
    • 1.4 提高输出的详细程度
    • 1.5 语法验证
    • 1.6 执行空运行
  • 2. 实施多个play
    • 2.1 缩写多个play
    • 2.2 play中的远程用户和特权升级
      • 2.2.1 用户属性
      • 2.2.2 特权升级属性
    • 2.3 查找用于任务的模块
      • 2.3.1 模块文档
      • 2.3.2 Playbook语法变化
      • 2.3.3 过时的“键=值” playbook简写

playbook

1. 实施playbook

1.1 Ansible Playbook与临时命令

临时命令可以作为一次性命令对一组目标主机运行一项简单的任务。不过,若要真正发挥Ansible的力量,需要了解如何使用playbook以便轻松重复的方式对一组目标主机执行多项复杂的任务。

play是针对清单中选定的主机运行的一组有序任务。playbook是一个文本文件,其中包含由一个或多个按特定顺序运行的play组成的列表。

Play可以将一系列冗长而复杂的手动管理任务转变为可轻松重复的例程,并且具有可预测的成功成果。在playbook中,可以将play内的任务序列保存为人类可读并可立即运行的形式。根据任务的编写方式,任务本身记录了部署应用或基础架构所需的步骤。

1.2 格式化Ansible Playbook

以一条命令做为案例来讲解下其在playbook中是如何编写的。

ansible 192.168.91.129 -m user -a 'name=runtime uid=4000 state=present'

这个任务可以将其编写为一个单任务的play并保存在playbook中。生成的playbook如下方所示:

---   起分隔作用
 - name: Configure important user consistently   描述
  hosts: 192.168.91.129      哪台主机进行运行
  task:     任务
    - name: runtime exists with UID 4000
      user:
        name: runtime
        uid: 4000
        state: present
/ / 进入ansible配置文件目录下
[root@master ~]# cd /opt/project/
[root@master project]# ls
ansible.cfg  hehe  inventories

/ / 创建playbook目录
[root@master project]# mkdir playbook
[root@master project]# ls
ansible.cfg  hehe  inventories  playbook
[root@master project]# cd playbook/

/ / 在playbook目录里面创建空文件user.yml
[root@master playbook]# touch user.yml

/ / 用格式化playbook编辑user.yml
[root@master playbook]# vum user.yml 

[root@master playbook]# cat user.yml 
---
- name: test
  hosts: 192.168.91.129
  tasks:
    - name: create user for tom
      user:
        name: tom
        uid: 5000
        state: present

[root@master playbook]# cd ..

/ / 用Ansible playbook 运行
[root@master project]# ansible-playbook playbook/user.yml 

PLAY [test] ********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [192.168.91.129]

TASK [create user for tom] *****************************************************
changed: [192.168.91.129]

PLAY RECAP *********************************************************************
192.168.91.129             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0    / / 运行成功

/ / 查看结果
[root@node1 ~]# id tom
uid=5000(tom) gid=5000(tom) groups=5000(tom)

Playbook是以YAML格式编写的文本文件,通常使用扩展名yml保存。Playbook使用空格字符缩进来表示其数据结构。YAML对用于缩进的空格数量没有严格的要求,但有两个基本的规则:

  • 处于层次结构中同一级别的数据元素(例如同一列表中的项目)必须具有相同的缩进量
  • 如果项目属于其他项目的子项,其缩进量必须大于父项

只有空格字符可用于缩进,不允许使用tab键。约定俗成的缩进量一般是一级2个空格。
Playbook开头的一行由三个破折号(—)组成,这是文档开始标记。其末尾可能使用三个圆点(…)作为文档结束标记,尽管在实践中这通常会省略。

在这两个标记之间,会以一个play列表的形式来定义playbook。YAML列表中的项目以一个破折号加空格开头。例如,YAML列表可能显示如下:

- red
- blue
- black

Play本身是一个键值对集合。同一play中的键应当使用相同的缩进量。以下示例显示了具有三个键的YAML代码片段。前两个键具有简单的值。第三个将含有三个项目的列表作为值。

- name: just an example
  hosts: webservers
  tasks:
    - first
    - second
    - third

作为play中的一部分,tasks属性按顺序实际列出要在受管主机上运行的任务。列表中各项任务本身是一个键值对集合。

还以上面创建用户的play为例,play中唯一任务有两个键:

  • name是记录任务用途的可选标签。最好命名所有的任务,从而帮助记录自动流程中的每一步用途。
  • user是要为这个任务运行的模块。其参数作为一组键值对传递,它们是模块的子项(name、uid和state)。

下面再来看一个含有多项任务的tasks属性案例:

tasks:
  - name: web server is enabled
    service:
      name: httpd
      enabled: true
      
  - name: NTP server is enabled
    service:

你可能感兴趣的:(Linux,Ansible自动化,linux,运维)