linux学习

Ansible playbook

playbok介绍

Ansible playbook中文名称为剧本,是一个文件,存放经常需要执行的任务,这个剧本中可以包含多个任务,随时根据剧本执行相关的任务命令。

相比Ansible ad-hoc方式适合执行一些临时性的简单任务。Ansible playbook的方式更适合复杂任务的管理,以及经常要完成的周期性任务。

playbook剧本需要按照YAML格式编写。YAML(YAML Ain’t a Markup Language)是一种可读性高、用来表达数据序列的格式语言。YAML以数据为中心,重点描述数据的关系和结构,比传统的xml方式更加简洁。

YAML文件语法规范:

  • 文件扩展名为yml或者yaml
  • "#"代表注释,一般第一行为三个横杠
  • 键值对使用":"表示,数组使用"-"表示
  • 缩进由两个或以上空格组成,相同层级的缩进必须对齐,如果缩进不对,则有语法错误
  • 全文不可使用tab键,必须使用空格
  • 区分大小写
  • 跨行数据需要使用>或者|(|会保留换行符)

YAML格式的键值对数据:

  • key和value之间使用":"分隔
  • ":"后面必须有空格
  • 缩进代表层级关系

playbook语法格式

一个剧本(即playbook)由一个或多个play组成,每个play用于在指定的主机上,通过模块和参数执行相应的任务。每个play中包含:hosts(主机)、tasks(任务)、vars(变量)等元素。

使用ansible-playbook命令运行playbook。

单目标单任务Playbook

# 编写用于连通性的playbook
[root@pubserver ansible]# vim test.yml
---
- name: test network
  hosts: all
  tasks:
    - name: test via ping
      ping:
[root@pubserver ansible]# ansible-playbook test.yml

PLAY [all] ************************************************************************************************

TASK [Gathering Facts] ************************************************************************************
ok: [web1]
ok: [db1]
ok: [web2]

TASK [ping] ***********************************************************************************************
ok: [db1]
ok: [web1]
ok: [web2]

PLAY RECAP ************************************************************************************************
db1                        : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web1                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web2                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

多目标多任务Playbook

多目标多任务的playbook中,每个play的hosts由一个或多个组或主机组成,多个组或主机之间使用逗号分隔;每个play的tasks由一个或多个任务组成,多个任务按顺序执行。

在dbs组的主机和web1上创建/tmp/demo目录,权限是0755。将控制端/etc/hosts拷贝到目标主机的/tmp/demo中。

[root@pubserver ansible]# vim fileop.yml
---
- name: create dir and copy file
  hosts: dbs,web1
  tasks:
    - name: create dir
      file:
        path: /tmp/demo
        state: directory
        mode: '0755'
    - name: copy file
      copy:
        src: /etc/hosts
        dest: /tmp/demo/hosts
[root@pubserver ansible]# ansible-playbook fileop.yml

PLAY [create dir and copy file] ************************************************

TASK [Gathering Facts] *********************************************************
ok: [db1]
ok: [web1]

TASK [create dir] **************************************************************
changed: [db1]
changed: [web1]

TASK [copy file] ***************************************************************
changed: [web1]
changed: [db1]

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

多play playbook

一个playbook中可以有多个play。

在webservers组中的主机上,创建用户bob,附加组是adm;在db1主机上,创建/tmp/hi.txt,其内容为Hello World

[root@pubserver ansible]# vim cruserfile.yml
---
- name: create user
  hosts: webservers
  tasks:
    - name: create bob
      user:
        name: bob
        groups: adm
- name: create file
  hosts: db1
  tasks: 
    - name: make file
      copy: 
        dest: /tmp/hi.txt
        content: "Hello Word"
[root@pubserver ansible]# ansible-playbook cruserfile.yml 

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

TASK [Gathering Facts] *********************************************************
ok: [web2]
ok: [web1]

TASK [create bob] **************************************************************
changed: [web1]
changed: [web2]

PLAY [create file] *************************************************************

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

TASK [make file] ***************************************************************
changed: [db1]

PLAY RECAP *********************************************************************
db1                        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web1                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web2                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注