playbook基于YAML语法来编写,基本语法规则如下:

1.大小写敏感

2.使用缩进表示层级关系

3.缩进时不允许使用Tab键,只允许使用空格

4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

5. # 表示注释,从这个字符一直到行尾,都会被解析器忽略。

6. 用---表示开头

YAML 支持三种数据结构:

对象:键值对的集合,用冒号:作为键值分隔

数组:一组按次序排列的值,用减号-作为标识

纯量:单个的、不可再分的值,如字符串,数值,日期等

例子:

---

- hosts: web

remote_user: root

tasks:

- name: ping test

ping: null

这个playbook表示去标识为web机的远程主机上,用root用户去执行名为ping test的任务,它使用ping模块。其中ping test为自己定义的任务名,会在稍后的执行输出中展示出来。

其对应的json结构为:

[

{

"hosts": "web",

"remote_user": "root",

"tasks": [

{

"name": "ping test",

"ping": null

}

]

}

]

运行:

root@localhost playbook]# ansible-playbook ping.yml

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************

ok: [192.168.40.72]

ok: [192.168.40.73]

TASK [ping test] **************************************************************************

ok: [192.168.40.73]

ok: [192.168.40.72]

PLAY RECAP ********************************************************************************

192.168.40.72              : ok=2    changed=0    unreachable=0    failed=0

192.168.40.73              : ok=2    changed=0    unreachable=0    failed=0

来写一个更实用的playbook:

[root@localhost playbook]# cat add_user.yml

---

- hosts: web

remote_user: root

gather_facts: true

tasks:

- name: Add users

user: name={{ item }} state=present groups=wheel

with_items:

- testuser1

- testuser2

它表示标识为web的远程主机执行名为:Add users的任务,它使用user模块,这里面还用到了变量的用法,{{ item }},它最后会被值testuser1 和 testuser2 替换,总共添加两个用户。这个对应json结构如下:

[

{

"hosts": "web",

"remote_user": "root",

"gather_facts": true,

"tasks": [

{

"name": "Add users",

"user": "name={{ item }} state=present groups=wheel",

"with_items": [

"testuser1",

"testuser2"

]

}

]

}

]

[root@localhost playbook]# ansible-playbook add_user.yml

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************

ok: [192.168.40.73]

ok: [192.168.40.72]

TASK [Add users] **************************************************************************

changed: [192.168.40.73] => (item=testuser1)

changed: [192.168.40.72] => (item=testuser1)

changed: [192.168.40.72] => (item=testuser2)

changed: [192.168.40.73] => (item=testuser2)

PLAY RECAP ********************************************************************************

192.168.40.72              : ok=2    changed=1    unreachable=0    failed=0

192.168.40.73              : ok=2    changed=1    unreachable=0    failed=0

再执行一遍,观察其输出与第一遍的差别:

[root@localhost playbook]# ansible-playbook add_user.yml

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************

ok: [192.168.40.73]

ok: [192.168.40.72]

TASK [Add users] **************************************************************************

ok: [192.168.40.73] => (item=testuser1)

ok: [192.168.40.72] => (item=testuser1)

ok: [192.168.40.73] => (item=testuser2)

ok: [192.168.40.72] => (item=testuser2)

PLAY RECAP ********************************************************************************

192.168.40.72              : ok=2    changed=0    unreachable=0    failed=0

192.168.40.73              : ok=2    changed=0    unreachable=0    failed=0

其中第二次的changed=0。

ansible是很多模块的执行是具有幂等性的,即ansible检测到远程主机已经满足了最终执行完的条件就不再执行命令。

ansible playbook实践(三)-yaml文件写法的更多相关文章

  1. ansible playbook实践(四)-如何调试写好的playbook文件

    有时,我们写了一个长长,功能很强悍的yaml文件,但是,我们有可能会担心,写的yaml文件是否正确,是否有漏洞危机,毕竟是要修改线上的机器,那么,有可能我们可以从以下几个检查维度来进行,确保在大规模应 ...

  2. ansible playbook实践(二)-基础相关命令

    ansible相关的命令: ansible  用来执行ansible管理命令 ansible-doc 用来获取模块的帮助文档 ansible-playbook 当有众多任务时,可编写成playbook ...

  3. .net core i上 K8S(三)Yaml文件运行.netcore程序

    上一章我们通过kubectl run简单运行了一个.netcore网站,但实际的开发中,我们都是通过yaml来实现的. 1.编写yaml文件 关于yaml文件的格式在此就不多描述了,不熟悉的可以去网上 ...

  4. ansible playbook实践(一)-基础环境安装

    1 介绍 Ansible 是一个系统自动化工具,用来做系统配管理,批量对远程主机执行操作指令. 2 实验环境 ip 角色 192.168.40.71 ansible管控端 192.168.40.72 ...

  5. Ansible Playbook 简介

    我们去远程执行命令时要使用 command 模块,拷贝文件时要使用 copy 模块,如果我们要操作的东西很多,那就要执行很多条不同模块的命令Playbook 是一个 yaml 配置文件,我们可以把不同 ...

  6. 自动化运维工具——ansible剧本playbook(三)

    一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...

  7. (三)ansible playbook

    一,YAML语法 YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标量等数据结构.(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) YAML文件扩展名通常为.yaml ...

  8. ansible实践2-拷贝文件或目录

      ansible testhost -m copy -a "src=/etc/ansible  dest=/tmp/ansibletest owner=root group=root mo ...

  9. Ansible playbook循环实践总结<一>

    1.标准Loops 标准loops可以直接减少task的次数,如下: [root@zero01 playbook]# vi loops.yaml --- - hosts: all gather_fac ...

随机推荐

  1. 将TinyXml快速入门的接口面向对象化(转载)

    作者:朱金灿 来源:http://www.cnblogs.com/clever101 在TinyXml快速入门的系列文章中(详情见本博客),我只是将tinyxml类库解析xml文件的类封装为API接口 ...

  2. 应用中Token的作用

    Token 的作用 Token,就是令牌,最大的特点就是随机性,不可预测.一般黑客或软件无法猜测出来. 那么,Token有什么作用?又是什么原理呢? Token一般用在两个地方: 1)防止表单重复提交 ...

  3. HDU 1562 Oil Deposits

    题目: The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. G ...

  4. URL编码的方法

    Global 对象的encodeURI()和encodeURIComponent()方法可以对URI(Uniform ResourceIdentifiers,通用资源标识符)进行编码,以便发送给浏览器 ...

  5. MLlib--FPGrowth算法

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/c9f211ee76528cffc4b6d741a55ac243.html FPGrowth算法_挖掘商品之间的 ...

  6. 本地phpstudy开发中apache可以用,nginx不可用,

    倒腾半天,在控制面板中,windows防火墙中关闭防火墙即可, http://blog.csdn.net/vic0228/article/details/70756450

  7. thinkPHP中_initialize方法实例分析

    子类的_initialize方法自动调用父类的_initialize方法. 而php的构造函数construct,如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct ...

  8. WOW.js – 让页面滚动更有趣

    演示1 演示2-仿oppo首页 下载 简介 有的页面在向下滚动的时候,有些元素会产生细小的动画效果.虽然动画比较小,但却能吸引你的注意.比如刚刚发布的 iPhone 6 的页面(查看).如果你希望你的 ...

  9. Struts2 04--- 值栈 ognl(S标签)

           OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整 ...

  10. css3图片动画旋转

    body{ background-color:#021E36; text-align: center; } .container{margin:500px auto;} .round{position ...