Introduction to YAML Syntax
What is YAML?
YAML (YAML Ain't Markup Language) is a human-readable data serialization standard that can be used in conjunction with all programming languages and is often used to write configuration files. YAML emphasizes human readability and uses a minimalistic syntax which makes it easy to read and write.
Basic Syntax
YAML uses indentation to indicate nesting, and it does not allow the use of tab characters for indentation; spaces must be used. The basic data structures in YAML are:
- Scalars (strings, numbers, booleans)
- Sequences (arrays/lists)
- Mappings (hashes/dictionaries)
Scalars
Scalars are the most basic data type in YAML. They represent a single value and can be strings, numbers, or booleans.
name: John Doe age: 30 is_student: false
In the example above, name is a string, age is a number, and is_student is a boolean.
Sequences
Sequences in YAML are lists of items. Each item in a sequence is prefixed with a dash and a space.
fruits: - Apple - Banana - Orange
In this example, fruits is a sequence containing three items: "Apple", "Banana", and "Orange".
Mappings
Mappings in YAML are collections of key-value pairs. Each key-value pair is separated by a colon and a space.
person: name: John Doe age: 30 occupation: Developer
In this example, person is a mapping containing three key-value pairs: "name", "age", and "occupation".
Nested Structures
YAML allows nesting of sequences and mappings to represent more complex data structures.
employees:
- name: John Doe
age: 30
role: Developer
- name: Jane Smith
age: 25
role: Designer
In this example, employees is a sequence of mappings, each representing an employee with their respective details.
Comments
Comments in YAML are denoted by the # character. Everything on the line after the # character is considered a comment.
name: John Doe # This is a comment age: 30 # Another comment
Example: Ansible Playbook
Below is an example of an Ansible playbook written in YAML. Ansible uses YAML to define automation tasks in a human-readable format.
- name: Install and start Apache
hosts: webservers
become: yes
tasks:
- name: Install Apache
yum:
name: httpd
state: present
- name: Start Apache
service:
name: httpd
state: started
In this example, the playbook installs and starts the Apache HTTP server on all hosts in the "webservers" group.
