playbook是由一个多个模块组成的,使用对个不同的模块,完成一件事情。
playbook通过yaml语法识别描述的状态文件。扩展名是yaml

1 yaml三板斧

缩进
    yaml使用一个固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tabs(默认,因为一个tab=4个空格)
    解决方法:
    [root@linux-node1 ~]# cat .vimrc 
    set tabstop=2

冒号
    以冒号结尾的除外,其他所有冒号后面必须有空格。

短横线
    表示列表项,使用一个短横杠加一个空格。
    多个项使用同样的缩进级别作为同一列表。
who
    谁
what
    事情
how
    动作

2 playbook的核心元素
hosts:主机清单
tasks:任务
vars:变量
handlers:特定条件触发的任务
template:包含了配置模板语法的文本文件

3 案例: 编写apahce剧本
1)准备apache的配置文件

[root@linux-node1 ansible]# mkdir /etc/ansible/ansible_playbook
[root@linux-node1 ansible]# mkdir /etc/ansible/ansible_playbook/{file,conf,scripts} -p
[root@linux-node1 conf]# scp -P 52113 root@192.168.6.243:/etc/httpd/conf/httpd.conf /etc/ansible/ansible_playbook/conf
[root@linux-node1 conf]# sed -i 's#Listen 80#Listen 8080#g' /etc/ansible/ansible_playbook/conf/httpd.conf 

2)写yaml剧本文件

[root@linux-node1 ansible_playbook]# cat apache.yaml 
- hosts: web
  tasks:

    - name: Install Httpd
      yum: name=httpd state=installed

    - name: Configure Httpd.conf
      copy: src=./conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify: Restart Http Service

    - name: Start Http Service
      service: name=httpd state=started enabled=yes

  handlers:
    - name: Restart Http Service
      service: name=httpd state=reloaded

注意:notfity监控httpd.conf变化,若变化则调用handlers里面的名字与notify名字相同的方法。

命令格式:
ansible-playbook [option] filename

常用选项:

-C,--check            模拟运行
--list-hosts        列出剧本主机清单
--list-tags            列出剧本标记
--list-tasks        列出剧本任务
--syntax-check        检测语法

模拟运行

[root@linux-node1 ansible_playbook]# ansible-playbook -C apache.yaml

列出主机

[root@linux-node1 ansible_playbook]# ansible-playbook --list-hosts apache.yaml 
playbook: apache.yaml
  play #1 (web): web    TAGS: []
    pattern: [u'web']
    hosts (1):
      192.168.6.243

列出任务

[root@linux-node1 ansible_playbook]# ansible-playbook --list-tasks apache.yaml 
playbook: apache.yaml
  play #1 (web): web    TAGS: []
    tasks:
      Install Httpd    TAGS: []
      Start Http Service    TAGS: []

检测语法

[root@linux-node1 ansible_playbook]# ansible-playbook --syntax-check apache.yaml 
playbook: apache.yaml

执行剧本

[root@linux-node1 ansible_playbook]# ansible-playbook apache.yaml
文档更新时间: 2019-07-23 10:19   作者:李延召