3.1 playbook语法实践
2015-07-21 22:57
411 查看
ansible playbook
Playbook是使用yaml语言定制的,YAML是一个可读性高的用来表达资料序列的格式
Yml语法:
简单示例1:
定义一个yml: 对webserver组中的主机,调用group和user模块创建组和用户;对dbserver组中的主机调用copy模块复制文件
执行yml
执行第二遍,返回的所有结果为ok不是表示执行ok而是所有条件都满足
简单示例2:搭建一个apache环境
准备需要复制到被管理主机的httpd.conf配置文件,修改监听端口为8080
执行:
验证:httpd软件包已经安装,服务开机自动启动,而且也监听8080端口
YAML中的变量:
1、自定义变量
2、facts收集被管理主机的信息时,会返回很多变量,这里就是调用了返回的ipv4地址变量
示例:将客户端返回的ip地址,创建webserver组中主机的/tmp/test.ans文件。
执行结果如下:
验证:使用的变量名一样,但是生成的内容却是被管理主机的ip地址
3、主机变量
示例:对webserver组中的主机,定义testvar变量,值为ip地址后两位
设置yml文件,和使用其他变量一样的方法调用变量:
执行yml
验证:相同变量,不同主机得到了不同的值
4、配置文件中引用变量(模版)
示例:使用变量指定httpd.conf配置文件中一些参数的值
定义yml:定义的过程中使用变量,根据不同主机定义的值不同,生成的配置文件参数也不同
执行过程
验证:相同的playbook由于对hosts指定的变量不同,所以生成不同的配置文件
条件测试When语句
示例:添加用户,但是只对主机名为node2的主机添加。
执行结果如下:
迭代
当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句来指明迭代的元素列表即可。
例如:
上面语句的功能等同于下面的语句:
事实上,with_items中可以使用元素还可为hashes,例如:
ansible的循环机制还有更多的高级功能,具体请参见官方文档(http://docs.ansible.com/playbooks_loops.html)
来自为知笔记(Wiz)
Playbook是使用yaml语言定制的,YAML是一个可读性高的用来表达资料序列的格式
Yml语法:
1 2 3 4 5 6 | - host: websrvs #定义执行的主机 remote_user: root #定义执行的用户 tasks: #定义任务 - task1 #定义第一个任务名称 module_name: module_args #定义使用的模块,和模块参数 - task 2 #定义第二个任务名称 |
定义一个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 |
示例:添加用户,但是只对主机名为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)
相关文章推荐
- Openssl base64命令
- linux常用c函数 数据结构及算法篇
- EF中加载实体的方式
- 使用ajax解决ie缓存问题
- 11G新特性 -- ASM Fast Mirror Resync
- 分享智慧石代码
- Web项目中使用JSTL标签问题
- python系列------计算机运算过程
- linux常用c函数 常用数学函数篇
- 获取txt文件指定行内容
- 枚举使用
- 进程和线程知识点
- FastJson-JSONField
- 百练2815 城堡问题(DFS)
- 外部引用JavaScript文件乱码问题
- mac 制作 ios 的 usb 启动盘
- Russell's Paradox: Here's Why Maths Can't Have A Set Of Everything
- 阿里移动推荐算法比赛赛后总结--特征篇
- 汉字统计--统计给定文本文件中汉字的个数。
- 3. playbook基础组件