Playbook(剧本)
Playbook的功能比Ad-hoc更加强大,可以反复执行。Playbook类似于shell脚本,将多个模块组合起来实现一组的操作。Playbook还是会用到ad-hoc模式中的模块及参数,只不过Playbook与ad-hoc的写法不一样。
Playbook的组成
由多个Play组成
#每一个play都由一个短横杠"-"开始,基本是yaml中字典的格式
play:
name: #play的名称
hosts: #资产选择器,例如前几篇文章中自己定义的localhost
tasks: #具体的任务
become: #提权
become_user: #提权的用户
remote_user: #连接用户,默认以执行ansible playbook的用户作为连接用户
1.yaml语法风格(以"—“开始,”…"结束)
字符串
---
this is a str #双引号,单引号,或者不加都正确
#有长字符串时可以拆行写
loong_line: |
str1
str2
str3
...
列表
---
- red
- blue
- yellow
...
字典(key:value)
---
name: myname
password: 666
...
2.yaml语法检测
安装Python中的yaml检测工具
安装pip3工具包
yum install -y python3-pip
安装pyyaml语法语法检测库(模块)
pip3 install -y pyyaml
检测方式
vim myyaml.yaml
---
color:
- red
- blue
- yellow
...
python -c 'import yaml,sys; print yaml.safe_load (sys.stdin)' < myyaml.yaml
#如果yaml输入正确则会返回yaml文件内容
{'color': ['red', 'blue', 'yellow']}
3.写一个playbook
vim myplaybook.yaml
#写法不唯一
---
- name: playbook-test
hosts: localhost
remote_user: root
tasks:
- name: 安装nginx
yum:
name: nginx
state: present
...
#例如:你还可以这样写,选择你喜欢的风格即可
---
- name: playbook-test
hosts: localhost
remote_user: root
tasks:
- name: 安装nginx
yum: name=nginx state=present
...
#例如:你还可以这样写,选择你喜欢的风格即可
---
- name: playbook-test
hosts: localhost
remote_user: root
tasks:
- name: 安装nginx
yum: name=nginx
state=present
...
playbook格式检测
注意:只校验playbook是否正确,不包含语法的正确性检查,仍然可以采用python中的语法检测模块来验证语法的正确性
[root@docker ~]# ansible-playbook-2.7 myplaybook.yaml --syntax-check
playbook: myplaybook.yaml
yaml语法检测
python -c 'import yaml,sys; print yaml.safe_load (sys.stdin)' < myplaybook.yaml
#输出结果
[{'tasks': [{'yum': {'state': 'present', 'name': 'nginx'}, 'name': u'\u5b89\u88c5nginx'}], 'hosts': 'localhost', 'remote_user': 'root', 'name': 'playbook-test'}]
运行playbook
ansible-playbook -i /etc/ansible/hosts myplaybook.yaml
单步执行,调试
ansible-playbook -i /etc/ansible/hosts myplaybook.yaml --step
运行测试(不会实际执行相应操作)
ansible-playbook -i /etc/ansible/hosts myplaybook.yaml -C