Difference between revisions of "YAML Syntax"
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
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
- C0/C1 blocks
- 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)
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