YAML

  • Yet Another Markup Language

  • 2001

  • Natural and Meaningful (Human Readable)

  • DataTypes - Scalars, Lists, Arrays

  • Data Structures - Indentation, dahses, colons

  • Common uses - Config files - Storing data

YAML only supports spaces Supports Unicode

Two styles:

  • Block styles Better for humans Less Compact
host: phl-42
datacenter:
location: Phil
cab: 14
roles:
- web
- some toher
  • Flow styles Compact, extension of json, folding, tags and anchors
host: "phl-42"
datacenter: {location: Phil, cab: 14} # need to be on same line and commas between values
roles: [web,some toher]

Mappings, Sequences

host: phl-42 # space between key: value is important
datacenter:
location: phil #2 space indentations
cab: 13
roles:
- webserver
- wp_database # sequences cannot be wihtout mapping or blank

Scalars

String, number, or boolean

String: '' or "", double string allows for escape sequence Multiline: | or > Lots of multiline string

Structures

You can add multiple directives/documents in one files

add --- to the top of file when building multidocument file

e.g.

---
host: phl2
---
host: someother

Comments

# octothorpe space and the comment to add a comment in YAML

Tags

  • Setting a cstom URI
  • Setting local tags
  • Setting a data type
host: phl-42
datacenter:
location: phil
cab: !!str 13 # !!str changes the datatype to str more !!int !!float
roles:
- webserver
- wp_database

Anchors

Anchors allow to store and reuse data

host: phl-42
datacenter:
location: &PHL phil # now can referrence this anywhere with *PHL
cab: !!str 13 # !!str changes the datatype to str more !!int !!float
roles:
- webserver
- wp_database

Wrote a simple YAML file for ansible to install MariaDB

---
- hosts: localhost
remote_user: ansible
become: yes
become_method: sudo
connection: ssh
gather_facts: yes
tasks:
- name: Installing MariaDB
yum:
name: mariadb-server
state: latest
notify:
- startservice
handlers:
- name: startservice
service:
name: mariadb
state: restarted