您的位置:首页 > 其它

3.1 playbook语法实践

2015-07-21 22:57 411 查看
ansible playbook

Playbook是使用yaml语言定制的,YAML是一个可读性高的用来表达资料序列的格式

Yml语法:
1
2
3
4
5
6
- host: websrvs #定义执行的主机
remote_user: root #定义执行的用户
tasks: #定义任务
- task1 #定义第一个任务名称
module_name: module_args #定义使用的模块,和模块参数
- task 2 #定义第二个任务名称
简单示例1:
定义一个yml: 对webserver组中的主机,调用group和user模块创建组和用户;对dbserver组中的主机调用copy模块复制文件



执行yml



执行第二遍,返回的所有结果为ok不是表示执行ok而是所有条件都满足



简单示例2:搭建一个apache环境



准备需要复制到被管理主机的httpd.conf配置文件,修改监听端口为8080


1
2
3
4
[root@node1 ~]# mkdir conf
[root@node1 ~]# cp /etc/httpd/conf /httpd.conf conf/
[root@node1 ~]# vim conf/httpd.conf
Listen 8080

应用之前先停止webserver组中的httpd服务,并卸载


1
2
[root@node1 ~]# ansible webserver -a 'service httpd stop'
[root@node1 ~]# ansible websrvs -m yum -a 'name=httpd state=absent'


执行:



验证:httpd软件包已经安装,服务开机自动启动,而且也监听8080端口


1
2
3
4
5
6
[root@node2 ~]# rpm -qa httpd
httpd-2.2.15-39.el6.centos.x86_64
[root@node2 ~]# chkconfig --list httpd
httpd 0:off1:off2:on3:on4:on5:on6:off
[root@node2 ~]# netstat -lntp | grep 8080
tcp 0 0 :::8080 :::* LISTEN 40826/httpd



YAML中的变量:
1、自定义变量



2、facts收集被管理主机的信息时,会返回很多变量,这里就是调用了返回的ipv4地址变量

示例:将客户端返回的ip地址,创建webserver组中主机的/tmp/test.ans文件。



执行结果如下:



验证:使用的变量名一样,但是生成的内容却是被管理主机的ip地址


1
2
3
4
[root@node2 ~]# cat /tmp/test.ans
[u'172.16.4.101']
[root@node3 ~]# cat /tmp/test.ans
[u'172.16.4.102']


3、主机变量
示例:对webserver组中的主机,定义testvar变量,值为ip地址后两位


1
2
3
4
5
6
[root@node1 ~]# vim /etc/ansible/hosts
[webserver]
172.16.4.101 testvar="4.101"
172.16.4.102 testvar="4.102"
[dbserver]
172.16.4.103


设置yml文件,和使用其他变量一样的方法调用变量:



执行yml



验证:相同变量,不同主机得到了不同的值


1
2
3
4
[root@node2 ~]# cat /tmp/test.ans
[u'172.16.4.101'],4.101
[root@node3 ~]# cat /tmp/test.ans
[u'172.16.4.102'],4.102


4、配置文件中引用变量(模版)
示例:使用变量指定httpd.conf配置文件中一些参数的值


1
2
3
4
5
6
7
8
9
10
11
[root@node1 ~]# vim temolastes/httpd.conf.j2
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients {{ maxClients }}
MaxRequestsPerChild 4000
</IfModule>
Listen {{ http_port }}
ServerName {{ ansible_fqdn }}

修改Ansible的hosts文件定义主机变量


1
2
3
4
5
6
[root@node1 ~]# vim /etc/ansible/hosts
[webserver]
172.16.4.101 http_port=80 maxClients=100
172.16.4.102 http_port=8080 maxClients=200
[dbserver]
172.16.4.103


定义yml:定义的过程中使用变量,根据不同主机定义的值不同,生成的配置文件参数也不同



执行过程



验证:相同的playbook由于对hosts指定的变量不同,所以生成不同的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
node2:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 100
MaxRequestsPerChild 4000
</IfModule>
Listen 80
ServerName node2
node3:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>
Listen 8080
ServerName node3
条件测试When语句
示例:添加用户,但是只对主机名为node2的主机添加。



执行结果如下:



迭代
当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句来指明迭代的元素列表即可。
例如:



上面语句的功能等同于下面的语句:


1
2
3
4
- name: create user
user: name=testuser1
- name: create user
user: name=testuser2


事实上,with_items中可以使用元素还可为hashes,例如:



ansible的循环机制还有更多的高级功能,具体请参见官方文档(http://docs.ansible.com/playbooks_loops.html

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: