Ansible之Playbook

1.简介

Playbook 也通常被⼤家翻译成剧本。
可以认为它是Ansible ⾃定义的⼀⻔语⾔(可以将 Playbook ⽐作Linux 中的 shell,⽽ Ansible 中的 Module 可以⽐作为 Linux 中的各种命令。)

2.Play的定义

PlayBook遵循YAML 的语法格式。
由于Playbook 是由⼀个或者多个Play组成,那么如果我们熟悉Play的写法,就⾃然掌握了我们这章的PlayBook。
那如何定义⼀个Play呢 ?

  1. 每⼀个Play 都是以短横杠开始的
  2. 每⼀个Play 都是⼀个YAML 字典格式

根据规则,我们可以先构建出一个假想的Play:

---
- key1: value1
  key2: value2
  key3: value3
...

由于⼀个Playbook 是由⼀个或者多个Play构成, 那么⼀个含有多个Play的Playbook 结构上应该是如下的样⼦

---
# ⼀个含有3个Play 的伪PlayBook构成
- key1: value1
  key2: value2
  key3: value3
- key4: value1
  key5: value2
  key6: value3
- key1: value1
  key2: value2
  key3: value3
...

3.Play属性

以上⼀⼩节中的Play为基础, Play中的每⼀个key,⽐如 key1, key2 等;这些key在PlayBook中被定义为Play的属性。
这些属性都具有特殊的意义,我们不能随意的⾃定义Play 的属性。
接下来就来看看 Ansible 本身都⽀持哪些Play属性。
常⽤属性 :

  • name 属性, 每个play的名字
  • hosts 属性, 每个play 涉及的被管理服务器,同ad-hoc 中的资产选择器
  • tasks 属性, 每个play 中具体要完成的任务,以列表的形式表达
  • become 属性,如果需要提权,则加上become 相关属性
  • become_user 属性, 若提权的话,提权到哪个⽤户上
  • remote_user属性,指定连接到远程节点的⽤户,就是在远程服务器上执⾏具体操作的⽤户。若不指定,则默认使⽤当前执⾏ ansible Playbook 的⽤户

4.一个完整剧本

根据上⼀⼩节中介绍的真实的属性,⼀个含有⼀个Play 的Playbook 应该是如下的样⼦

---
- name: the first play example
  hosts: webservers
  remote_user: root
  tasks:
    - name: install nginx package
      yum: name=nginx state=present
    - name: copy nginx.conf to remote server
      copy: src=nginx.conf dest=/etc/nginx/nginx.conf
    - name: start nginx server
      service:
        name: nginx
        enabled: true
        state: started

5.tasks属性中任务的多种写法

# 以启动 nginx 服务,并增加开机启动为例
# ⼀⾏的形式:
service: name=nginx enabled=true state=started

# 多⾏的形式:
service: name=nginx
         enabled=true
         state=started

# 多⾏写成字典的形式:
service:
  name: nginx
  enabled: true
  state: started

6.具有多个Play的Playbook

---
- name: manage web servers
  hosts: webservers
  remote_user: root
  tasks:
  - name: install nginx package
    yum: name=nginx state=present
  - name: copy nginx.conf to remote server
    copy: src=nginx.conf dest=/etc/nginx/nginx.conf
  - name: start nginx server
    service:
      name: nginx
      enabled: true
      state: started
- name: manager db servers
  hosts: db_servers
  tasks:
   - name: update database confg
     copy: src=my.cnf dest=/etc/my.cnf

7.如何对Playbook进行语法校验

下⾯校验的⽅法,只能校验PlayBook是否正确,⽽不能校验YAML⽂件是否语法正确。

ansible-playbook -i hosts myplaybook.yml --syntax -check

因为PlayBook 属于YAML 格式, 我们同样可以使⽤检查YAML的语法格式的⽅法进⾏检查PlayBook的语法正确性。

python -c 'import yaml,sys; 
print yaml.safe_load(sys.stdin)' < myplaybook.yml

8.如何运行Playbook

ansible-playbook -i hosts myplaybook.yml

9.如何单步跟从调试PlayBook

#执⾏Task中的任务,需要⼿动确认是否往下执⾏。
ansible-playbook -i hosts myplaybook.yml --step

10.如何测试运行PlayBook

测试运⾏就是会执⾏完整个PlayBook ,但是所有Task中的⾏为都不会在远程服务器上执⾏,所有执⾏都是模拟⾏为。

ansible-playbook -i hosts myplaybook.yml -C
#-C 为⼤写的字⺟ C

你可能感兴趣的:(Ansible,ansible,服务器,nginx)