Ansible的Playbook介绍以及技巧
playbook的格式是YAML.以下是一个playbook的范例:
1 | --- |
通过上面的范例可以总结出playbook的基础语法和注意点:
- playbook的最顶部以—3个横杠开头
- 相同元素以-减号排列,在缩进中空格的数量不重要,但是相同阶层的元素要左对齐(不能使用tab字符)
- 可以不使用双引号来括住字符串
- name是任务的描述,不是必需.但是为了playbook的易读性,建议name要有.一个name只能包含一个task.
playbook的使用技巧
sudo用户
remote_user表示playbook允许时以哪个用户运行,如果加上sudo:yes.表示以sudo方式运行:
1
2
3- hosts: webservers
remote_user: yourname
sudo: yes如果是仅仅在一个task中使用sudo.而不是在整个playbook中使用:
1
2
3
4
5
6---
- hosts: webservers
remote_user: yourname
tasks:
- service: name=nginx state=started
sudo: yes
模块和命令换行
k/v键值对(模块和命令)可以在写在一行,用:冒号隔开,也可以用> 符号换行:
1
2
3- name: test
command: >
ls /home/如果命令行太长,可以用空格或者缩进换行
1
2
3
4tasks:
- name: Copy ansible inventory file to client
copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
owner=root group=root mode=0644
调用变量
命令可以用变量,变量的引用方式为
1
2
3tasks:
- name: create a virtual host file for {{ vhost }}
template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}
忽略错误,继续执行后续的task
忽略错误,继续执行下一个task..默认情况下playbook如果执行命令失败就会终止整个Playbook的执行.使用ignore_erros参数可以在执行某个task失败时,自动忽略继续执行下一个task:
1
2
3
4tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True或者采用下列方式.如果somecommand失败,则执行某个一定为true的命令:
1
2
3tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand || /bin/true
limit限定执行的主机范围
limit参数 限定执行的主机范围.例如下面的例子限定在centos7这台主机上执行.当然也可以限定在一个组内的主机上执行
1
[root@ansible ansible]$ansible-playbook test.yaml --limit centos7
–list-hosts参数查看一个Playbook影响的所有主机.例如下列命令可以看到Playbook将在哪些主机上执行:
1
2
3
4
5
6
7
8
9
10[root@ansible ansible]$ansible-playbook test.yaml --list-hosts
playbook: test.yaml
play #1 (all): all TAGS: []
pattern: ['all']
hosts (3):
centos6
centos7
web
检测执行过程
– check 检测模式,playbook定义的任务将在每台远程主机上进行检测,但是并不真正执行:
1
[root@ansible ansible]$ansible-playbook test.yaml --check
list–tasks有相似的作用,它列出了playbook的task任务安排:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 > [root@localhost playbook]$ansible-playbook --list-tasks nginx.yaml
> [WARNING]: Could not match supplied host pattern, ignoring: 10.0.4.240
>
>
> playbook: nginx.yaml
>
> play #1 (10.0.4.240): 10.0.4.240 TAGS: []
> tasks:
> check if there is nginx repo on server TAGS: []
> install nginx yum repo,if there is no nginx repo TAGS: []
> install nginx TAGS: []
> create nginx document dir TAGS: []
> create nginx log dir TAGS: []
> copy nginx configure file TAGS: []
> copy nginx web file TAGS: []
> start nginx TAGS: []
>
>
执行并发数
- –forks=数字.指定并发执行的任务数.默认是5.调高这个值可以加快ansible执行效率
debug显示执行结果
- 显示命令的执行返回结果.Asible默认并不会显示命令的执行结果,通过debug模块可以输出命令的执行结果.例如:
1 |
|
执行结果:
1 | [root@ansible ansible]$ansible-playbook test.yaml --limit centos7 |
或者使用下面的语句.结果是一样的
1 | --- |
执行结果:
1 | [root@ansible ansible]$ansible-playbook test.yaml --limit centos7 |