设为首页 收藏本站
查看: 1103|回复: 0

[经验分享] ansible(三)playbooks初体验

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-20 11:22:39 | 显示全部楼层 |阅读模式
先说说playbooks是什么吧?

翻译成中文叫剧本,剧本是干嘛的?想必大伙都知道,剧本是咱们演电影,演电视剧的时候,大伙都要根据剧本来,然后把电影,电视剧给演好。
OK,ansible里的playbooks其实和salt-stack里面的state差不多,都是在管理端定义好的一条条的策略。
那这个策略是干啥用的呢?策略是想要让我们远端的机器达到一种什么样的状态,比如说咱们刚装好的一台机器上,啥都没有。这时候我们在策略里面定义,apache是installed的,mysql也是installed的。
咱们这样定义好了,然后执行一下playbooks。客户端就会达到我们定义的这种installed状态。
显然,如果咱们想要演好一部大戏,一个好的剧本是必不可少的。
playbooks和咱们前面玩的命令行执行的有啥区别呢? 其实playbooks里面真正干活的,还是一个个的模块,不过命令行的那个好比单兵作战,而playbooks是有组织有纪律的集团军作战。
OK,下面看看怎么玩playbooks吧。
mark个ansible一个官方例子地址
https://github.com/ansible/ansible-examples
https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml
看一下,楼主的一个简单的小例子吧
wKioL1OxFG7y6otlAAPYIQqlswI881.jpg
简单描述一下,每一行是做什么的?
第1行,起始标志,写不写无所谓,官网写了

第2行,定义这个play要作用的主机,多个主机或者多个组的话,用":"分开,也可以用咱们前面的那种正则的形式匹配主机。

第3行,定义了此play在remote端执行时,使用哪个用户执行。楼主这里用一个变量表示,待会可以在命令行输入此变量


第4到8行,可以在play里面定义变量,显然这个变量是局部的,只能在此play里使用。

第9行,task起始标志,可以在里面定义1个或多个task

第10行,为task定义一个name,这样我们执行的时候,会很直观的在终端上打印,不定义name也ok,执行的时候,ansible会默认打印一个action的提示,这样的话,不利于我们观察task执行过程。

第11行,就是真正干活的模块了,shell和command模块,后面的参数,直接写就OK,而其他模块的参数,都要遵循key=value的形式,如第17行和23行。还有就是,ansible里的模块,好像命令行和playbooks里面都是通用的,不像salt-stack里面,命令行的模块和state里面模块是完全分离,不能混用的。

第12行,表示上面的这个模块执行的结果,如果不为0,不加ignore_errors话,出现错误,playbook就不执行了。 加上ignore_errors的话,出现错误,会忽略并继续执行。  当然也可以在shell,command模块中, 使用   shell:  /bin/123 || /bin/true的形式。

第13行,register,把上一个模块执行的结果,保留在result(名字可以任意)这个变量里面,result变量常用的有result.stdout,result.err,result.rc等属性。这一特性,说明ansible能够保留前面task执行的结果,在后面的task里面可以利用这一结果。

第14行,debug,打印的意思。。。把result的stdout给打印出来。  debug后面要遵循,msg=''这种结构

18行,使用sudo,这个sudo只针对当前task有效,想要对全局有效的话,要放到hosts,remote_user等一列。

第17,19,20行,使用ansible内置的循环结构,循环变量用{{item}}表示,循环列表在with_items里面。楼主,这里用第5-8行定义的变量,来表示循环列表。

第21行,设置标签,当playbooks执行的时候,将只执行tags所对应的task

28行,使用模板,传送jinja2文件,也可以用copy模块传送普通文件

29,30行和33-35行是配套使用的,handler相当于触发器的,当我们在28行notify之后,待整个tasks全部执行完毕,notify里面的东西也就是"restart apache2",就会去32行handlers里面,去匹配同一名字的handler,并执行匹配到的task。 handler主要用在服务的重启,或者关机


看一下,这个playbooks的执行结果吧。
在命令行使用变量。使用-e参数,就OK了,'uservar=lixc'就是楼主在web.yml里面定义的romote_user

wKiom1OxJNjQCzHJAAIsExj2YS0831.jpg

执行21行init这个标签对应的task




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-31684-1-1.html 上篇帖子: ansible(二)基础篇 下篇帖子: ansible(四)roles
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表