saltstack(二)- YAML

saltstack(二)- YAML语法

一、YAML简介

在学习saltstack过程中,第一要点就是States编写技巧,简称SLS文件。这个文件遵循YAML语法。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。saltstack,k8s,ansible都用的yaml格式配置文件。
YAML 的配置文件后缀为 .yml,如:test.yml

语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时禁止tab键,只能空格
  • 缩进的空格数不重要,相同层级的元素左侧对其即可
  • 表示注释行

yaml支持的数据结构

  • 对象: 键值对,也称作映射 mapping 哈希hashes 字典 dict 冒号表示key: value key冒号后必须有
  • 数组: 一组按次序排列的值,又称为序列sequence 列表list 短横线 - list1
  • 纯量: 单个不可再分的值

二、YAML数据结构——对象

YAML数据结构——对象有点像Python中的字典是简单的键值对,对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。

key在YAML中表现形式是一个冒号结果的字符串
my_key: my_value
转化到python语法中,上述命令为
{'my_key':'my_value'}
也可以使用 key:{key1: value1, key2: value2, ...}

value还可以通过缩进和key关联,四个空格!!

my_key:
    my_value 

转化为python语法同样的

{'my_key':'my_value'}

YAML语法中字典是可以嵌套的

one_dict_key:
    two_dict_key:value_dict

转化为python语法

{
  'one_dict_key':{
    'two_dict_key':'value_dict'
  }
}

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:

?  
    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2

三、YAML数据结构——数组

YAML语法表示数组,使用一个横杠加一个空格
多个项使用同样的缩进级别作为同一个数组的部分

- list_value_one
- list_value_two
- list_value_three

列表可以作为一个键值对的value,例如一次性要安装多个软件:

my_dict:
  - l1
  - l2
  - l3

转化为python代码理解就是

{
  'my_dict':['l1','l2',;l3]
}

数组和对象可以构成复合结构,例:

languages:
  - Ruby
  - Perl
  - Python 
websites:
  YAML: yaml.org 
  Ruby: ruby-lang.org 
  Python: python.org 
  Perl: use.perl.org

意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。
数组也可以使用流式(flow)的方式表示:

{ 
  languages: [ 'Ruby', 'Perl', 'Python'],
  websites: {
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org',
    Perl: 'use.perl.org' 
  } 
}

三、YAML数据结构——纯量

纯量是最基本的,不可再分的值,包括:

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

使用一个例子来快速了解纯量的基本使用:

boolean: 
   - TRUE  #true,True都可以
   - FALSE  #false,False都可以
float:
   - 3.14
   - 6.8523015e+5  #可以使用科学计数法
int:
   - 123
   - 0b1010_0111_0100_1010_1110    #二进制表示
null:
   nodeName: 'node'
   parent: ~  #使用~表示null
string:
   - 哈哈
   - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
   - newline
     newline2    #字符串可以拆成多行,每一行会被转化成一个空格
date:
   - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
   -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

你可能感兴趣的:(saltstack)