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

[经验分享] ansible--playbooks

[复制链接]

尚未签到

发表于 2018-7-29 11:50:15 | 显示全部楼层 |阅读模式
  playbooks翻译成中文叫剧本,和saltstack里面的state差不多,都是在管理端定义好的一条条的策略。
  playbooks和前面玩的命令行执行的有啥区别呢? 其实playbooks里面真正干活的,还是一个个的模块,不过命令行的那个好比单兵作战,而playbooks是有组织有纪律的集团军作战。
  mark个ansible一个官方例子地址
  https://github.com/ansible/ansible-examples
  https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml
  下面看一个简单的例子:
  1 ---
  2 - hosts: 192.168.137.130
  3   remote_user: '`uservar`'
  4   vars:
  5     software:
  6       - httpd
  7       - ntpdate
  8   tasks:
  9     - name: run this command and ignore the result
  10       shell: hostname
  11       ignore_errors: True
  12       register: result
  13     - debug: msg='`result`.`stdout`'
  14
  15     - name: install ntpdate and  httpd
  16       yum: name=`item` state=installed
  18       with_items:
  19        - '`software`'
  20       tags: init
  21
  22     - name: guarantee and httpd are running
  23       service: name=httpd state=started
  25
  26     - name: transfer httpd configure file to remote
  27       template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
  28       notify:
  29         - restart httpd
  30       when: result.stdout == 'lvs02'
  31
  32   handlers:
  33     - name: restart httpd
  34       service: name=httpd state=restarted
  简单描述一下,每一行是做什么的?
  第1行,起始标志,写不写无所谓,官网写了
  第2行,定义这个play要作用的主机,多个主机或者多个组的话,用":"分开,也可以用咱们前面的那种正则的形式匹配主机。
  第3行,定义了此play在remote端执行时,使用哪个用户执行。楼主这里用一个变量表示,待会可以在命令行输入此变量
  第4到7行,可以在play里面定义变量,显然这个变量是局部的,只能在此play里使用。
  第8行,task起始标志,可以在里面定义1个或多个task
  第9行,为task定义一个name,这样我们执行的时候,会很直观的在终端上打印,不定义name也ok,执行的时候,ansible会默认打印一个action的提示,这样的话,不利于我们观察task执行过程。
  第10行,就是真正干活的模块了,shell和command模块,后面的参数,直接写就OK,而其他模块的参数,都要遵循key=value的形式,如第16行和23行。还有就是,ansible里的模块,好像命令行和playbooks里面都是通用的,不像salt-stack里面,命令行的模块和state里面模块是完全分离,不能混用的。
  第11行,表示上面的这个模块执行的结果,如果不为0,不加ignore_errors话,出现错误,playbook就不执行了。 加上ignore_errors的话,出现错误,会忽略并继续执行。  当然也可以在shell,command模块中, 使用   shell:  /bin/123 || /bin/true的形式。
  第12行,register,把上一个模块执行的结果,保留在result(名字可以任意)这个变量里面,result变量常用的有result.stdout,result.err,result.rc等属性。这一特性,说明ansible能够保留前面task执行的结果,在后面的task里面可以利用这一结果。
  第13行,debug,打印的意思。。。把result的stdout给打印出来。  debug后面要遵循,msg=''这种结构
  17行,使用sudo,这个sudo只针对当前task有效,想要对全局有效的话,要放到hosts,remote_user等一列。
  第18,19,20行,使用ansible内置的循环结构,循环变量用`item`表示,循环列表在with_items里面。楼主,这里用第5-7行定义的变量,来表示循环列表。
  第20行,设置标签,当playbooks执行的时候,将只执行tags所对应的task
  27行,使用模板,传送httpd.conf文件,也可以用copy模块传送普通文件
  28,29行和32-34行是配套使用的,handler相当于触发器的,当我们在28行notify之后,待整个tasks全部执行完毕,notify里面的东西也就是"restart httpd",就会去32行handlers里面,去匹配同一名字的handler,并执行匹配到的task。 handler主要用在服务的重启,或者关机
  看一下,这个playbooks的执行结果。
  在命令行使用变量。使用-e参数,就OK了,'uservar=lixc'就是在web.yml里面定义的romote_user
  ansible]# ansible-playbook web.yml -e 'uservar=root'
DSC0000.png

  执行20行init这个标签对应的task
  ansible]# ansible-playbook web.yml -e 'uservar=root' --tags init
DSC0001.png

运维网声明 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-542993-1-1.html 上篇帖子: ansible--基础 下篇帖子: Ansible-playbook批量添加zabbix监控项目、同步配置信息(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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