Difference between revisions of "YAML Syntax"

From Ever changing code
Jump to navigation Jump to search
Line 82: Line 82:
<source lang=yaml>
<source lang=yaml>
roles: [ web, dns, "" ]
roles: [ web, dns, "" ]
</source>
= Scalars =
Scalar is a string, number of boolean with whitespace permitted.
<source lang=yaml>
host: host-1   
datacenter:
  location: "Poland\n" #double-quotes allow escape sequences, "\n" - will be read as new-line
  cabinet: '11'        #change a number into string single or double-quotes
roles:         
  - web
  - dns
  - ""  #blank lines are not allowed, thus double-quotes are required
comments: | #pipe (multiline scalar) it preserves newlines
  Comment 1 note of the required indent
  Comment 2
comments_other: > #right chevron (folded scalar) does not preserve new lines, but helps with code readibility
                  #converts newlines /spacing into single space.
  Other_comment is that indent is still needed
  Another comment.
<tab><tab> item-1 this preserves new lines to create a list
<tab><tab> item-2
</source>
= Structures =
YAML allows for multiple directive/documents in one file. The document/directive starts with <code>---</code> but it's often optional for single directive files. Ansible requires it but not Salt. The delimiters are reuired for multi-directive files.
<source lang=bash>
---
host: host-1
datacenter:
  location: Poland
---
host: host-2
datacenter:
  Location: Spain
... #(optinal) mark end of directive/collection without cloasing the data stream
</source>
</source>

Revision as of 09:42, 6 August 2019

Styles

YAML syntax styles
Block style Flow style
Human frendly, less compact An extension of JSON, foldinf long lines, tags and anchors
host: host-1
datacenter:        #mapping
  location: Poland #key-value mapping indentention
  cabinet: 11
roles:             #list
  - web
  - dns
host: "host-1"
datacentrer: { location:
  Poland , cabinet: 11 }
roles: [ web , dns ] 
# {} kv mapping
# [] list (array)

Characters

  • Printable Unicode
  • Unsupported symbols
    • C0/C1 blocks
      • Exceptions: Tab, Line Feed, Carrage Return, Delete, Next line
    • Surrogates
  • Encoding: UTF-8, 16, 32
  • To be JSON compatibile must be UTF-32

Mappings

Mappings are also known as:

  • assosiative arrays
  • hash tables
  • kv pairs
  • collection (YAML specific term, that groups things indented at the same level)
Mappings, the colon-space combination that marks it as a mapping
Block style Flow style
host: host-1
datacenter:
  location: Poland
  cabinet: 11
# cabinet: 12   #the same keys are not allowed
host: host-1
datacentre: { location: Poland, cabinet: 11 }

Sequences

Also known as:

  • Lists, arrays or collections
  • Denoted with a dash - and space
  • Can be combined with mappings:
    • mapping of sequences
    • sequence of mapping
    • list of maps
host: host-1     # sequence/list of mappings
  - datacenter:
    location: Poland
    cabinet: 11
roles:           # sequence
  - web
  - dns
  - ""  #blank lines are not allowed, thus double-quotes are required

#Flow style
<source lang=yaml>
roles: [ web, dns, "" ]

Scalars

Scalar is a string, number of boolean with whitespace permitted.

host: host-1    
datacenter:
  location: "Poland\n" #double-quotes allow escape sequences, "\n" - will be read as new-line
  cabinet: '11'        #change a number into string single or double-quotes
roles:          
  - web
  - dns
  - ""  #blank lines are not allowed, thus double-quotes are required
comments: | #pipe (multiline scalar) it preserves newlines
  Comment 1 note of the required indent
  Comment 2
comments_other: > #right chevron (folded scalar) does not preserve new lines, but helps with code readibility
                  #converts newlines /spacing into single space.
  Other_comment is that indent is still needed
  Another comment.
<tab><tab> item-1 this preserves new lines to create a list
<tab><tab> item-2

Structures

YAML allows for multiple directive/documents in one file. The document/directive starts with --- but it's often optional for single directive files. Ansible requires it but not Salt. The delimiters are reuired for multi-directive files.

---
host: host-1
datacenter:
  location: Poland
---
host: host-2
datacenter:
  Location: Spain
... #(optinal) mark end of directive/collection without cloasing the data stream