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 作者:李延召