• YAML简介


    YAML在配置文件中被大量引用,比如java、playbook、以及K8S等。

    在YAML中,使用冒号加缩进代表层级关系,-表示数组元素。
    #表示注释行,YAML中只有行注释。

    YAML大小写敏感,缩进只能使用空格键,不能使用TAB键,只要是左对齐就是相同层级。
    一般使用2个或者4个空格表示缩进。


    1.内建格式

    在YAML中允许三种格式:常量、对象和数组。

    (1)常量

    YAML中提供了多种常量结构,包括:整数、浮点数、字符串等。
    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连接,最后使用+代表时区

    常量的值都是固定值或者内建值。这是与属性的一大区别。


    (2)数组

    使用短横线(-)加一个空格表示一个数组项
    name:
    - kebi
    - maoxian
    也可以这样表示:
    -
    - kebi
    - maoxian
    可以简单理解为[[kebi,maoxian]]
    下面是一个稍微复杂的例子:
    team:
    -
    id: 1
    name: 4AM
    -
    id: 2
    name: OMG
    意思是:team的属性是一个数组,每一个数组元素又是由id和name两个属性构成。
    数组也可以使用流式(flow)的方式表示:
    team: [{id: 1,name: 4AM},{id: 2,name: OMG}]


    (3)对象

    使用冒号代表,格式为key: value。冒号后面要加一个空格
    url: http://www.wolfcode.cn

    可以使用缩进表示层级关系:
    name:
    4AM: 8
    OMG: 5

    依然支持流式写法:
    name: {4AM: 8,OMG: 5}

    较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的key,配合一个冒号加一个空格代表一个value。
    ?
    - complexkey1
    - complexkey2
    :
    - complexvalue1
    - complexvalue2
    意思是对象的key是一个数组[complexkey1,complexkey2],对象的值也是一个数组[complexvalue1,complexvalue2]


    下面是一个总是示例:
    - kebi
    #对象
    url: http://www.baidu.com

    #数组
    server:
    - 192.168.1.1
    - 192.168.1.2

    #常量
    date: 2018-02-13
    length: 167



    2.特殊符号


    (1)---:表示一个文档的开始
    ---
    Time: 2018-02-17T15:02:31+08:00
    User: ed
    Warning:
    This is an error message for the log file
    ---
    Time: 2018-02-17T15:05:21+08:00
    User: ed
    Warning:
    A slightly different error message

    (2)...:表示一个文档的结束,和---配合使用
    ---
    time: 20:03:20
    player: Sammy Sosa
    action: strike (miss)
    ...
    ---
    time: 20:03:47
    player: Sammy Sosa
    action: grand slam
    ...


    (3)!!:类型强行转换
    string:
    - !!str 54321
    - !!str true
    将数字和bool值转化为字符串

    (4)>:在字符串中折叠换行,|:保留换行符
    accomplishment: >
    Mark set a major league
    home run record in 1998.
    结果就是:
    accomplishment=Mark set a major league home run record in 1998.

    stats: |
    65 Home Runs
    0.278 Batting Average
    结果就是:
    stats=65 Home Runs
    0.278 Batting Average,


    (5)引用
    重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点的引用。
    hr:
    - Mark McGwire
    - &SS Sammy Sosa
    rbi:
    - *SS
    - Ken Griffey

    解释:
    定义锚点SS,然后*SS引用锚点。
    结果:
    {rbi=[Sammy Sosa, Ken Griffey], hr=[Mark McGwire, Sammy Sosa]}
    注意:不能独立的定义锚点。

    下面以一个k8s配置文件作为示例:

    apiVersion: v1
    kind: Pod  #资源对象类型
    metadata:  #pod元数据
      name: volume-pod  #pod名称
    spec:  #相关属性定义
      volumes:  #映射卷可能存在多个,因此使用数组
      - name: app-logs
        emptyDir: {}
    
      containers:  #定义了两种类型的容器
      - name: tomcat
        image: tomcat:latest
        ports:
        - containerPort: 8080  #一个容器可能有多个端口被看起
        volumeMounts:
        - name: app-logs
          mountPath: /usr/local/tomcat/logs
    
      - name: logreader
        image: busybox:latest
        command: ["sh","-c","tail -f /logs/catalina*.log"]
        volumeMounts:
        - name: app-logs
          mountPath: /logs

    YAML文件基本就包含对象和数组两种格式,然后嵌套多层。

  • 相关阅读:
    (转)树状数组
    poj 3041 Asteroids(二分图最小顶点覆盖)
    poj 2513 Colored Sticks
    (转)优先队列的用法 附:poj2442 poj1442
    poj 1094 Sorting It All Out (拓补)
    poj 3026 Borg Maze(bfs+最小生成树)
    poj 3349 Snowflake Snow Snowflakes
    poj 3020 Antenna Placement(二分图的最大匹配)
    mysql explain
    php strtotime
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12444966.html
Copyright © 2020-2023  润新知