计算机网络——动态主机配置协议DHCP

2021-07-20 从零开始的一日CSS (正在持续完善

  返回  

ansible Playbook

2021/7/20 16:31:29 浏览:

PlayBook

文章目录

  • PlayBook
    • playbook与临时命令
    • playbook的格式
    • playbook的基本组件
    • 运行playbook
    • 一个play中运行多个任务
    • 执行多个play
    • 语法验证

首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等等,在shell脚本中是一条一条的命令,而在playbook中是一个一个的task任务构成,每个task任务可以看做shell中的一条命令;shell脚本一般只是在当前服务器上执行,而playbook则是在不止一个服务器上执行,因此playbook需要在其中指定运行该playbook的服务器名。

playbook与临时命令

前面我们学习了临时命令模块,临时命令可以作为一次性命令对一组目标主机运行一项简单的任务。但是在任务很多的情况下就显得比较繁忙,这时候就需要playbook了,playbook可以轻松的解决任务繁琐的场景。
下面我将简单示范同一个需求在playbook和临时命令会分别如何应用。
临时命令:

ansible 172.16.103.129 -m user -a 'name=lll uid=5000 state=present'

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

---
- name: user
  hosts: 192.168.101.120
  tasks:
    - name: create user for lll
      user:
        name: lll
        uid: 5000
        state: present

playbook的格式

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

  • 处于层次结构中同一级别的数据元素(例如同一列表中的项目)必须具有相同的缩进量。
  • 如果项目属于其他项目的子项,其缩进量必须大于父项。
    YAML格式具体可以去参考YAML详细语法。

playbook的基本组件

  • hosts:运行执行任务(task)的目标主机
  • remote_user:在远程主机上执行任务的用户
  • tasks:任务,由模板定义的操作列表
  • handlers:任务,与tasks不同的是只有在接受到通知(notify)时才会被触发
  • templates:模板,使用模板语言的文本文件,使用jinja2语法。
  • variables:变量,变量替换{{ variable_name }}
  • roles:角色

运行playbook

absible-playbook命令可用于运行playbook。该命令在控制节点上执行,要运行的playbook的名称则作为参数传递。

ansible-playbook xxx.yml

以下示例中显示了一个单个命令的playbook的内容,后面是运行它的结果。

[root@localhost ansible]# mkdir  playbook
[root@localhost ansible]# touch playbook/user.yml
[root@localhost ansible]# vim playbook/user.yml 
---
- name: user
  hosts: 192.168.101.120
  tasks:
    - name: create user for lll
      user:
        name: lll
        uid: 5000
        state: present
[root@localhost ansible]# ansible-playbook playbook/user.yml 

PLAY [user] *************************************************************************************

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

TASK [create user for ljt] **********************************************************************
changed: [192.168.101.120]

PLAY RECAP **************************************************************************************
192.168.101.120            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

一个play中运行多个任务

在运行playbook时,将生成输出来显示所执行的play和任务。输出中也会报告执行的每一项任务的结果。
示例:
安装httpd服务并设置开机自启

[root@localhost ansible]# touch playbook/httpd.yml
[root@localhost ansible]# vim playbook/httpd.yml 
---
- hosts: 192.168.101.120
  tasks:
    - name: httpd install
      yum:
        name: httpd
        state: latest

    - name: service httpd
      service:
        name: httpd
        enabled: yes
        state: started
[root@localhost ansible]# ansible-playbook playbook/httpd.yml 

PLAY [192.168.101.120] **************************************************************************

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

TASK [httpd install] ****************************************************************************
changed: [192.168.101.120]

TASK [service httpd] ****************************************************************************
changed: [192.168.101.120]

PLAY RECAP **************************************************************************************
192.168.101.120            : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

执行多个play

如果一个playbook中有多个play,每个play可以将其任务应用到单独的一组主机。

[root@localhost ansible]# touch playbook/test.yml
[root@localhost ansible]# vim playbook/test.yml 
- name: httpd
  hosts: apache
  tasks:
    - name: httpd install
      yum:
        name: httpd
        state: latest
    - name: service httpd
      service:
        name: httpd
        state: started
        enabled: yes
- name: mysql
  hosts: mysql
  tasks:
    - name: mariadb install
      yum:
        name: mariadb
        state: latest
      yum:
        name: mariadb-server
        state: latest
    - name: service mariadb
      service:
        name: mariadb
        state: started
        enabled: yes
[root@localhost ansible]# ansible-playbook playbook/test.yml 

PLAY [httpd] ************************************************************************************

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

TASK [httpd install] ****************************************************************************
changed: [192.168.101.120]

TASK [service httpd] ****************************************************************************
changed: [192.168.101.120]

PLAY [mysql] ************************************************************************************

TASK [Gathering Facts] **************************************************************************
ok: [192.168.101.200]
TASK [mariadb install] **************************************************************************
changed: [192.168.101.200]

TASK [service mariadb] **************************************************************************
changed: [192.168.101.200]

PLAY RECAP **************************************************************************************
192.168.101.120            : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.101.200            : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

请注意,在playbook运行时,屏幕中会显示每个play和任务的name键的值。(Gathering Facts任务是一项特别的任务,setup模块通常在play启动时自动运行这项任务。)对于含有多个play和任务的playbook,设置name属性后可以更加轻松地监控playbook执行的进展。

语法验证

在执行playbook之前,最好要进行验证,确保其内容的语法正确无误。ansible-playbook命令提供了一个–syntax-check选项,可用于验证playbook的语法。
下例演示了一个playbook成功通过语法验证:

[root@localhost ansible]# ansible-playbook --syntax-check playbook/test.yml 
playbook: playbook/test.yml

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号