一. 介绍

ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写。playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。

二. PlayBook的构成

playbook是由一个或多个"play"组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中即可以让它们联同起来按事先编排的机制同唱一台大戏。其主要有以下四部分构成:

playbook组成:

target section:   定义将要执行playbook的远程主机组

varible section:  定义playbook执行时需要使用的变量

task section:     定义将要在远程主机上执行的任务列表

handler section:定义task执行完成以后需要调用的任务

对应的目录层,如下:

一般所使用的目录层有:(可以视情况变化)

vars        变量层
tasks      任务层
handlers 触发条件
files        文件
template 模板

2.1 hosts和users

playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务

hosts: 用于指定要执行任务的主机,其可以是一个或多个由冒号分隔主机组

remote_user: 用于指定远程主机上的指定任务的用户,不过remote_user也可以适用于各task中,也可以指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务。此外甚至可以在sudo时,使用sudo_user指定sudo时切换的用户

user:  与remote_user相同

sudo: 如果设置为yes,执行该任务组的用户在执行任务的时候,获取root权限

sudo_user: 如果设置user为yuhaohao,sudo为yes,sudo_user为yuhuai时,则yuhaohao用户在执行任务时会获得yuhuai用户的权限

connection: 通过什么方式连接到远程主机,默认为ssh

gather_facts:  除非明确说明不需要在远程主机上执行setup模块,否则默认自动执行,如果确实不需要setup模块传递过来的变量,则可以将该选项设置为False

2.2  任务列表和action

play的主体部分是任务列表

任务列表中的各任务按次序逐个在hosts中指定的所有主机上执行即在所有主机上完成第一个任务后再开始第二个。在自上而下运行某playbook时如果中途发生错误,所有已执行任务都将回滚因此在更正playbook后重新执行一次即可。

task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致。每个task都应该有其name用于            playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供name则action的结果将用于输出。

定义task的可以使用"action: module options"或"module: options"的格式,推荐使用后者以实现向后兼容。如果action一行的内容过多也可使用在行首使用几个空白字符进行换行。
tasks:
 - name: make sure apache is running
   service: name=httpd state=running
#在众多模块中只有command和shell模块仅需要给定一个列表而无需使用“key=value”格式例如
tasks:
 - name: disable selinux
   command: /sbin/setenforce 0  

#如果命令或脚本的退出码不为零可以使用如下方式替代
tasks:
 - name: run this command and ignore the result
   shell: /usr/bin/somecommand || /bin/true
#使用ignore_errors来忽略错误信息
tasks:
 - name: run this command and ignore the result
   shell: /usr/bin/somecommand
   ignore_errors: True  

2.3 handlers

用于当关注的资源发生变化时采取一定的操作。"notify"这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler也即notify中调用handler中定义的操作。 注意:在notify中定义内容一定要和tasks中定义的 - name 内容一样,这样才能达到触发的效果,否则会不生效

- name: template configuration file
 template: src=template.j2 dest=/etc/foo.conf
 notify:
 - restart memcached
 - restart apache
#handler是task列表这些task与前述的task并没有本质上的不同。
handlers:
 - name: restart memcached
   service: name=memcached state=restarted
 - name: restart apache
   service: name=apache state=restarted

2.4 tags

tags用于让用户选择运行或略过playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时如果确信其没有变化就可以通过tags跳过这些代码片断。

最新文章

  1. python网络编程-TCP协议中的三次握手和四次挥手(图解)
  2. 关于python的10个建议,比较适合新手吧.
  3. Zookeeper实战之单机模式
  4. 各大互联网公司2014前端笔试面试题–JavaScript篇
  5. Static Classes and Static Class Members
  6. FFT与多项式、生成函数题目泛做
  7. 在现代渲染API下,封装跨平台渲染框架的尝试 - 资源管理
  8. Mac/ios 模拟器 测试模拟慢网速
  9. Linux下安装php开发框架yaf
  10. Intellij idea插入表数据【在UI界面插入出错】
  11. vcenter新建虚拟机centos7作为虚拟机模板
  12. gulp简介
  13. 认识与防御XSS攻击
  14. JAVA基础语法 我的学习记录
  15. ASP.NET MVC中的Session设置
  16. jmeter参数化、添加变量、生成随机数和导入csv文件数据
  17. Oracle EBS AR 冲销收款
  18. ubuntu iptables设置【转】
  19. 【其他】msb-lsb-intel-motorola大小端问题
  20. Spring 中Bean的装配方式

热门文章

  1. zookeeper在搭建的时候,解决后台启动为standalone模式问题
  2. LeetCode--014--最长公共前缀
  3. 关于java和c语言中,变量重名问题
  4. hbase知识
  5. 解决validaform先验证后 ajax提交
  6. oracle中给表和列起别名
  7. PostgreSQL CPU占用100%性能分析及慢sql优化
  8. openssl修改版本号
  9. Weblogic项目部署教程
  10. linux basic test