ansible中yaml语法应用

4、yaml语法应用

ansible的playbook编写是yaml语言编写,掌握yaml语法是编写playbook的必要条件,格式要求和Python相似,具体教程参考如下
yaml语言教程
附上一个yaml文件转js格式文件链接
在线免费yaml内容转json格式

4.1、 ansible中的yaml语法应用

ansible中yaml语法和上述教程大同小异,以下是个人简化和总结:
基本语法规则如下

以 "---" 开头
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
'#' 号表示注释,从这个字符一直到行尾,都会被解析器忽略;可以在一行的中间使用,注释 # 之后的内容。关于注释,需要注意是不是任意位置都能使用,当分行写时,不能放在分行的所在行

YAML 支持的数据结构有三种:

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list),以 "- " 开头,有空格间隔
纯量(scalars):单个的、不可再分的值(ansible中很少用到)

4.2、对象简介

ansible中yaml对象和计算机的中是"key-value"数据结构相似,只是表达的方式不同,在ansible中,对可以采用两种表达方式。切记 : (冒号)之后一定要加空格,否则报错

# 多行式
host: localhost
remote_user: root
# 行内式,也称为单行式,两边是大括号包围
{ host: localhost, remote_user: root }

注意

  • 在一行表示中,字典的值,可以嵌套其他字典,但是需要用引号包围起来代表一个整体值,返回的是整体而且不是直接嵌套字典,下面引号部分会给实际案例解释。
  • 冒号加空格加内容即": haha"这个格式代表的是字典的表达式,这个是yaml语法规定的;冒号加内容即":haha",代表的是普通的表达式,没有特殊意义,所以定义对象需要注意,但是这种普通表达式,有一些情况会用到,例如下文中引号的例子中

4.3、数组简介

在ansible中数组也称为列表,以 "- " 开头,有空格间隔,同样有两种表达方式。

# 多行式
- shell
- copy
# 单行式,内联式,两边用中括号包围
[shell, copy]

4.4、分行写

playbook中的分行写支持三种格式,分别是:

在"key"之后使用 "|", 表示保留换行
在"key"之后使用 ">" ,表示折叠换行
采用多行缩进格式,建议从缩进的第二行用 四个 空格表示缩进。需要注意注释的位置

# 以下例子表示三种不同的分行写格式,注意看区别
--- - hosts: lzcxtasks:- shell: echo 'Hello world' >> /tmp/test.txtcreates=/tmp/haha.txt            # 分行写注意缩进,同时这行的注释不能放到上一行,否则报错- shell: |                                  # 冒号之后要有空格echo '张三' >> /tmp/test.txtecho '李四'  >> /tmp/test.txtargs:creates: /tmp/haha.txt- shell: >                                  # 大于号之后要有空格echo '王五' >> /tmp/test.txtcreates: /tmp/haha.txt

运行效果图
分行写

4.5、向模块传递参数

模块的参数⼀般来说是key=value格式的,有3种传递的⽅式:

直接写在模块后,此时要求使⽤"key=value"格式。这是让ansible内部去解析字符串。因为可分⾏写,所以有多种写法
写成字典型,即"key: value"。此时要求多层缩进。这是让yaml去解析字典。shell和command模块不能使用这种格式
使⽤内置属性args,然后多层缩进定义参数列表。这是让ansible明确指定⽤yaml来解析

# 参数的多种格式
---- hosts: lzcxtasks:- shell: echo '1' > /tmp/test.txt creates=/tmp/haha.txt  # 单行格式- shell: echo '2' >> /tmp/test.txtcreates=/tmp/haha.txt           # 多行格式,注意缩进,,同时这行的注释不能放到上一行,否则报错- shell: echo '3' >> /tmp/test.txtargs: creates: /tmp/haha.txt           # 使用内置args参数- shell: >echo '4' >> /tmp/test.txtcreates=/tmp/haha.txt           # 大于号多行缩进模式- shell: |echo '5.1' >> /tmp/test.txtecho '5.2' >> /tmp/test.txtargs:creates: /tmp/haha.txt- yum:name: dos2unixstate: installed

4.6、playbook中的引号使用

引号的作用,可以将一个字典中的value值表达式当作整体返回,这个表达式里面可以嵌套字典,playbook中定义的都是些列表和字典。绝⼤多数时候,都不需要使⽤引号,但有两个特殊情况需要考虑使⽤引号

出现⼤括号"{}"
值(value)出现冒号加空格时": ",即嵌套字典时,需要将嵌套的部分用引号当作整体返回

# 附上一个综合例子,注意每个模板内容的区别
---- hosts: localhosttasks:- shell: echo {{inventory_hostname}}:haha- shell: "echo {{inventory_hostname}}:haha"- shell: 'echo {{inventory_hostname}}:haha'- shell: 'echo "{{inventory_hostname}}: haha"'- shell: echo "{{inventory_hostname}}:haha"register: hello- debug: 'msg="{{hello.stdout}}: heihei"'- shell: echo {{inventory_hostname}}:haharegister: hello1- debug: msg={{hello1.stdout}}:heihei

解释

  1. 前面三个shell模块,字典的value都是普通的表达式,有引号和无引号,结果是一样的,需要注意的是":"冒号之后没有空格,而是直接跟上内容,这种表达式不是字典,实际上可以把这个冒号当作普通的字符串看待
  2. 第四个shell模块中,因为value值嵌套了字典,而且还使用了大括号引用变量,这种表达式需要将整个表达
    式括起来,因此需要用单引号将整个表达式括起来,用整体当作一个值赋值给模块。理解这两点剩下的模块也是一样的意思
  3. 从打印的结果看,": "和":"的区别是,当字典的值嵌套了字典时,即使用": "时,打印也会按照这个格式打印,也就是冒号的下一个字符串是空格,而":"这个普通的格式则是跟上内容

4.7、playbook和play的关系

⼀个playbook中可以包含多个play。每个play都⾄少包含有tasks和hosts这两项,还可以包含其他⾮必须项,如vars,vars_f iles,remote_user等。tasks中可以通过模块调⽤定义⼀系列的action。只不过,绝⼤多数时候,⼀个playbook都只定义⼀个play,这样做的好处是便于维护。
playbook文件中基本结构为:

playbook: [play1, play2, play3]
play: [hosts, gather_facts, connection, become, remote_user, tasks, vars...]
tasks: [变量vars、循环with_xxx、判断when、命名name、module1, module2,...]

需要注意的是,当play使用了role时,看上去没有tasks和hosts选项,实际上role里面包含了,所以有没有tasks和hosts没关系,但没有使用role时,一定要有

4.8、yaml编写总结

  1. 缩进:关于缩进,空格的多少无关,注重的是层级一致性,个人习惯缩进4或2个空格区分
  2. 对象的冒号:列表编写,"-"加内容编写完之后,换行时会自动对齐到"-"列,这是错误的,需要手动对齐"- "后的内容所在列,例如:tasks后添加冒号":"时,会自动对齐"-",实际上所有的冒号添加之后换行时,编辑器默认对齐上一行的第一个字符串位置,需要自行手动对齐
  3. 注释:关于注释,经测试,不能出现在对象的值value上,否则报错。例如不能放tasks的冒号之后之后
---
- hosts: lzcxtasks:- shell: echo haha   # 注释不能出现在task的冒号之后

转载于:https://www.cnblogs.com/AutoSmart/p/10273164.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中兴a2018拆机图片_中兴天机拆机步骤详解【图文】

中兴天机上市时有两款,黑色和白色。黑色的缺点是外观过于传统,并不是很适合年轻人使用,但是其推出白色款却很好的解决了这个问题。中兴天机的整体性质与性价比完美的拼过了 小米 3等同时上线的手机产品。中兴天机价格在1799左右,小…

网络视频贴片广告全面推行第三方监测

视频网站优酷与国际调研机构尼尔森联合对外宣布:针对优酷视频贴片广告全面推行第三方监测。这是视频行业首次倡导广告投放数据透明化的一大举措。  近年来,网络视频已经成为广告主营销的一大选择。随着广告主投放额度不断加大,广告主对视频…

css3动画事件—webkitAnimationEnd

转载链接:http://www.jb51.net/css/72443.html 用css3的animation完成一个动画,当只有这个动画完成时才执行令一个事件,比如让动画保持在终止的状态或其他一些事件。我们该怎么办呢。 第一种方法: 用计时器,设定一个…

(送书和红包)快人一步,掌握前端函数式编程

大家好,我是若川。上周末送出了3本新书和若干红包,抽奖名单已公布。本周又争取到了4本《前端函数式编程》书籍包邮送给大家,抽奖规则见文末,与以往不同的是除了关键词、留言、在看抽奖外,还有最早关注奖,欢…

js split参数为无效字符_js使用split函数按照多个字符对字符串进行分割的方法

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":5,"count":5}]},"card":[{"des":"阿里云函数计算(Function Compute)是一个事件…

Windows下访问VirtualBox的mysql服务

由于好长时间没有在windows下使用mysql,现在出现好多选项,而且使用sqlyog连接总是出现1045错误,所以在虚拟机Ubuntu下安装mysql进行访问,但是想用win下面vscode进行开发,就有了Windows下访问VirtualBox的mysql服务的想…

JavaScript操作表格进行拖拽排序

<js-dodo-table- Drag and Drop JQuery plugin>以上插件可对table进行排序&#xff0c;拖动&#xff01; 例如有下面一个样子的id为table的表格&#xff1a; <table id"table"cellspacing"0"cellpadding"2"><tr id"1"…

UBUNTU 用户及用户组管理 修改用户和主机名

转载链接&#xff1a;http://blog.sina.com.cn/s/blog_66439a3e0101dm1g.html 一、用户及用户组管理 创建组&#xff1a; $sudo addgroup ccache 创建用户&#xff1a; $sudo useradd ccache -g ccache -M 创新wfz用户并创建HOME目录&#xff0c;指定用户组为ccache $sudo u…

ping -a 获取不到主机名_网络测试命令——PING

命令功能&#xff1a;Linux系统和windows系统的ping命令是常用的网络命令&#xff0c;它通常用来测试与目标主机的连通性&#xff0c;这样我们就可以根据它ping输出的信息来确定目标主机是否可访问(但这不是绝对的)。有些服务器为了防止通过ping探测到&#xff0c;通过防火墙设…

写在2021: 值得关注/学习的前端框架和工具库

前言最近在知乎看到了这么个问题&#xff1a;学完Vue还有必要学习React和Node吗&#xff1f;[1]&#xff0c; 有很奇妙的感觉&#xff0c;因为我在最开始入门前端时&#xff0c;也是以Vue入的门&#xff0c;在“学完”Vue之后&#xff0c; 我也有了这个疑问&#xff0c;但当时的…

万物互联之~RPC专栏

3.RPC引入 上篇回顾&#xff1a;万物互联之~深入篇 Code&#xff1a;https://github.com/lotapp/BaseCode/tree/master/python/6.net/6.rpc/ 其他专栏最新篇&#xff1a;协程加强之~兼容答疑篇 | 聊聊数据库~SQL环境篇 3.1.概念 RPC(Remote Procedure Call)&#xff1a;分布式系…

python判断字符大小写转换_Python 字符串大小写转换的简单实例

①所有字母都转换为大写# -*- coding:utf-8 -*-if __name__ "__main__":a hello, world!print(a.upper())输出&#xff1a;HELLO, WORLD!②所有字母都转换为小写# -*- coding:utf-8 -*-if __name__ "__main__":a HELLO, WORLD!print(a.lower())输出&am…

正则表达式如何匹配正反斜杠

转载链接&#xff1a;http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97#.E5.8F.8D.E6.96.9C.E6.9D.A0.E7.9A.84.E9.BA.BB.E7.83.A6 反斜杠的麻烦 在早期规定中&#xff0c;正则表达式用反斜杠字符 ("…

前端进阶必备Node.js,你得了解一下

作为前端开发&#xff0c;工作中肯定离不开 JavaScript &#xff0c;而 Node.js 是基于 JavaScript 语言和 V8 引擎的 Web 服务器项目&#xff0c;让你可以直接使用 JavaScript 来搭架服务器。而且在 Node 环境下&#xff0c;通过模块化的 JavaScript 代码&#xff0c;加上函数…

Google推出“Google实验室” Ad Innovations

4月1日消息&#xff0c;据国外媒体报道&#xff0c;Google近日推出了Ad Innovations功能&#xff0c;类似于“Google实验室”&#xff0c;但专门用于展示最新的广告技术、方案等&#xff0c;并征求广告主的反馈。 目前Ad Innovations已有数款新功能&#xff0c;Google将按照反馈…

JS中utf8和GBK的字符编码转换

1、PHP中的 json_encode 函数只限编码UTF-8的数据&#xff0c;当转换GBK或者GB2312等编码的数据时&#xff0c;会将汉字转为NULL。 2、JavaScript 中json 的使用&#xff1a; ① 将对象转为json字符串&#xff1a;JSON.stringify(obj)② 将json转为对象&#xff1a;dataObj ev…

tcptracerte参数_TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute【转】

1.IMCP协议介绍前面讲到了&#xff0c;IP协议并不是一个可靠的协议&#xff0c;它不保证数据被送达&#xff0c;那么&#xff0c;自然的&#xff0c;保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。当传送IP数据包发生错误&#xf…

[实践系列]Promises/A+规范

前言 [实践系列] 主要是让我们通过实践去加深对一些原理的理解。 实践系列-前端路由 实践系列-Babel原理 有兴趣的同学可以关注 实践系列 。 求star求follow~ 什么是Promise ? Promise是JS异步编程中的重要概念&#xff0c;异步抽象处理对象&#xff0c;是目前比较流行Javas…

Web Components 上手指南

现在的前端开发基本离不开 React、Vue 这两个框架的支撑&#xff0c;而这两个框架下面又衍生出了许多的自定义组件库&#xff1a;Element&#xff08;Vue&#xff09;Ant Design&#xff08;React&#xff09;这些组件库的出现&#xff0c;让我们可以直接使用已经封装好的组件&…

隐藏网页文件的后缀(IIS测试通过)!

网上很多网站会看到如这样的地址: /content?actadd&id1 /column?actedit&id2 原本是 /content.asp?actadd&id1 /column.asp?actedit&id2 这样的效果就是在iis上做了下手脚&#xff0c;使用了rewrite重写组件&#xff0c;就可以实现。 rewrite.rar转载于:ht…