YAML: Difference between revisions

From Omnia
Jump to navigation Jump to search
 
(9 intermediate revisions by the same user not shown)
Line 22: Line 22:
...
...


</pre>
== Multiple Documents ==
You can combine multiple documents by seperating them with "---":
<pre>
document: this is document 1
---
document: this is document 2
</pre>
</pre>


== List ==
== List ==
Python Note: This is equivalent to Pythons List: fruits = ['Apple', 'Orange', etc].


All members of a list are lines beginning at the same indentation level starting with a "- " (a dash and a space):
All members of a list are lines beginning at the same indentation level starting with a "- " (a dash and a space):


List:
YAML List:
<pre>
<pre>
---
# A list of tasty fruits
# A list of tasty fruits
fruits:
fruits:
  - Apple
    - Apple
  - Orange
    - Orange
  - Strawberry
    - Strawberry
  - Mango
    - Mango
</pre>


...
Compact YAML List:
<pre>
fruits: [Apple, Orange, Strawberry, Mango]
</pre>
</pre>
---
JSON for comparision:
<pre>
{
  "fruits": [
    "Apple",
    "Orange",
    "Strawberry",
    "Mango"
  ]
}
</pre>
Python list for comparision:
fruits = ['Apple', 'Orange', etc]


== Dictionary ==
== Dictionary ==


Python note: This is equivalent to Python Dictionary: martin = {'name': 'Martin', 'job': 'Dev': 'skill': 'Elite'}
YAML Dictionary:
 
Dictionary:
<pre>
<pre>
# An employee record
# An employee record
martin:
martin:
  name: Martin D'vloper
    name: Martin D'vloper
  job: Developer
    job: Developer
  skill: Elite
    skill: Elite
</pre>
</pre>


Compact Abbreviated list / dictonary:
Compact YAML Dictonary:
<pre>
<pre>
martin: {name: Martin D'vloper, job: Developer, skill: Elite}
martin: {name: Martin D'vloper, job: Developer, skill: Elite}
fruits: ['Apple', 'Orange', 'Strawberry', 'Mango']
</pre>
 
---
 
JSON for Comparision:
<pre>
{
  "martin": {
    "name": "Martin D'vloper",
    "job": "Developer",
    "skill": "Elite"
  }
}
</pre>
 
Python Dictionary for Comparision:
<pre>
martin = {
    "name": "Martin D'vloper",
    "job": "Developer",
    "skill": "Elite"
}
</pre>
 
== List of Dictionaries ==
 
"Collection" is a list of dictionaries, with a nested list of dictionaries of "people", intermixed with a nested list of "skills", just to make it interseting.
<pre>
collection:
    - people:
          - name: ken
            job: grunt
          - name: mike
            job: manager
    - skills:
          - computers
          - science
</pre>
 
JSON for comparison:
<pre>
{
  "collection": [
    {
      "people": [
        {
          "name": "ken",
          "job": "grunt"
        },
        {
          "name": "mike",
          "job": "manager"
        }
      ]
    },
    {
      "skills": [
        "computers",
        "science"
      ]
    }
  ]
}
</pre>
</pre>


Line 74: Line 160:


== Block Text ==
== Block Text ==
=== Multi-Line ===


Literal Block Scalar: (indentation ignored)
Literal Block Scalar: (indentation ignored)
Line 116: Line 204:
Doc:
Doc:
  https://yamllint.readthedocs.io/en/stable/
  https://yamllint.readthedocs.io/en/stable/
== YAML to JSON ==
See [[yq]]
yq eval file.yaml -o json
yq e file.yaml -o j


== keywords ==
== keywords ==

Latest revision as of 16:27, 20 May 2024

YAML

YAML Syntax — Ansible Documentation - https://docs.ansible.com/ansible/2.5/reference_appendices/YAMLSyntax.html#yaml-syntax

Comment

# this is a comment

---

All YAML files (regardless of their association with Ansible or not) can optionally begin with --- and end with ... This is part of the YAML format and indicates the start and end of a document.

# file test.yaml - yamllint doesn't care if there is a comment before ---
---
test:
  name: big test
# yamllint will check for --- by default
# yamllint likes an empty new line at end of file, ??most of the time??, even after ...
# yamllint will NOT check for ... by default
...

Multiple Documents

You can combine multiple documents by seperating them with "---":

document: this is document 1
---
document: this is document 2

List

All members of a list are lines beginning at the same indentation level starting with a "- " (a dash and a space):

YAML List:

# A list of tasty fruits
fruits:
    - Apple
    - Orange
    - Strawberry
    - Mango

Compact YAML List:

fruits: [Apple, Orange, Strawberry, Mango]

---

JSON for comparision:

{
  "fruits": [
    "Apple",
    "Orange",
    "Strawberry",
    "Mango"
  ]
}

Python list for comparision:

fruits = ['Apple', 'Orange', etc]

Dictionary

YAML Dictionary:

# An employee record
martin:
    name: Martin D'vloper
    job: Developer
    skill: Elite

Compact YAML Dictonary:

martin: {name: Martin D'vloper, job: Developer, skill: Elite}

---

JSON for Comparision:

{
  "martin": {
    "name": "Martin D'vloper",
    "job": "Developer",
    "skill": "Elite"
  }
}

Python Dictionary for Comparision:

martin = {
    "name": "Martin D'vloper",
    "job": "Developer",
    "skill": "Elite"
}

List of Dictionaries

"Collection" is a list of dictionaries, with a nested list of dictionaries of "people", intermixed with a nested list of "skills", just to make it interseting.

collection:
    - people:
          - name: ken
            job: grunt
          - name: mike
            job: manager
    - skills:
          - computers
          - science

JSON for comparison:

{
  "collection": [
    {
      "people": [
        {
          "name": "ken",
          "job": "grunt"
        },
        {
          "name": "mike",
          "job": "manager"
        }
      ]
    },
    {
      "skills": [
        "computers",
        "science"
      ]
    }
  ]
}

Boolean Values

create_key: yes
needs_agent: no
knows_oop: True
likes_emacs: TRUE
uses_cvs: false

Block Text

Multi-Line

Literal Block Scalar: (indentation ignored)

include_newlines: |
            exactly as you see
            will appear these three
            lines of poetry

Literal Block Scalar - folded to one line: (indentation ignored)

fold_newlines: >
            this is really a
            single line of text
            despite appearances

Injected Variables - NOT YAML

This is not a YAML standard, but is a common theme used by things applications like Ansible.

Injected Variables:

foo: "{{ variable }}"
foo: {{ variable }}

yamllint

See yamllint

Install:

apt install yamllint

Use:

yamllint file.yaml

Note:

  • Defaults to max lines 80 limit

Doc:

https://yamllint.readthedocs.io/en/stable/

YAML to JSON

See yq

yq eval file.yaml -o json
yq e file.yaml -o j

keywords