ansible的YAML语法基础

YAML语法介绍
1、YAML支持的三种数据结构:
(1).对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dict)
(2).数组:一组按次序排列的值,又称为序列/列表
(3).纯量:单个的,不可再分的值

2、对象
对象为一组键值对,使用冒号表示
key: value  #值value与冒号之间必须要有空格
另一种写法,将所有键值对写成一个行内对象:
hash:{key1:value1 , key2:value2}

3、数组
一组连词线开头的行,构成一个数组【连词线指 -】
- cat
- dog
- pig
在python中写法为['cat','dog','pig']

数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:
-
  - cat
  - dog
  - pig
  
数组也可以采用行内表示法:
 [ cat , dog ]

4、复合结构
对象和数组可以结合使用,形成复合结构
languages:
  - ruby
  - python
  - shell

即在python中写法为{'languages':['rugy','python','shell']}

5、纯量
纯量是最基本的、不可再分的值。以下数据类型都属于JavaScript的纯量
字符串
布尔值
整数
浮点数
Null
时间
日期

number: 12.50
isSet: true
num: ~
iso8601: 2001-12-14t21:59:43.10-05:00
date: 2018-11-11

YAML允许使用两个感叹号,强制转换数据类型:
e: !!str 123 [数值123转换为字符串]
f: !!str true  [布尔值true转为字符串]
转为JavaScript如下:
{e: '123' , f: 'true'} 

6、字符串
字符串是最常见,也是最复杂的一种数据类型。字符串默认不使用引号表示。
(1)、str: 这是一行字符串
转为JavaScript如下:
{ste: '这是一行字符串'}

(2)、如果字符串之中包含空格或特殊字符,需要放在引号之中
str: 'AB:  CDE'
转为JavaScript如下:
{str: 'AB:  CDE'}

(3)、单引号和双引号都可以使用,但双引号不会对特殊字符转义
s1: '内容\n字符串'
s2: "内容\n字符串"
转为JavaScript如下:
{s1: '内容\\n字符串'}    {s2: '内容\n字符串'}

(4)、单引号之中如果还有单引号,必须连续使用两个单引号转义
str: 'labor''s day'
转为JavaScript如下:
{str: 'labor's day'}

(5)、字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格
str: 这是一段
  多行
  字符串
转为JavaScript如下:
{str: '这是一段  多行  字符串'}

(7)、多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行
this: |
  Foo
  Bar
that: >
  Foo
  Bar
转为JavaScript如下:
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

(8)、+表示保留文字块末尾的换行,-表示删除字符串末尾的换行
s1: |
  Foo
 
s2: |+
  Foo
 
s3: |-
  Foo
转为JavaScript如下:
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

(9)、字符串之中可以插入 HTML 标记
message: |
  <p style="color: red">
    段落
  </p>
转为JavaScript如下:
{ message: '\n<p style="color: red">\n  段落\n</p>\n' }

7、引用
锚点 & 和别名 *,可以用来引用
defaults: &defaults
  adapter:  postgres
  host:     localhost
 
development:
  database: myapp_development
  <<: *defaults
 
test:
  database: myapp_test
  <<: *defaults
  
等同于下面的代码:
defaults:
  adapter:  postgres
  host:     localhost
 
development:
  database: myapp_development
  adapter:  postgres
  host:     localhost
 
test:
  database: myapp_test
  adapter:  postgres
  host:     localhost
解释:&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点

8、函数和正则表达式的转换
这是 JS-YAML 库特有的功能,可以把函数和正则表达式转为字符串
# example.yml
fn: function () { return 1 }
reg: /test/

解析上面的 yml 文件的代码如下:
var yaml = require('js-yaml');
var fs   = require('fs');
 
try {
  var doc = yaml.load(
    fs.readFileSync('./example.yml', 'utf8')
  );
  console.log(doc);
} catch (e) {
  console.log(e);
}

从 JavaScript 对象还原到 yaml 文件的代码如下:
var yaml = require('js-yaml');
var fs   = require('fs');
 
var obj = {
  fn: function () { return 1 },
  reg: /test/
};
 
try {
  fs.writeFileSync(
    './example.yml',
    yaml.dump(obj),
    'utf8'
  );
} catch (e) {
  console.log(e);
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容