YAML
YAML vs. Property-File
Das YAML-Format hat durch die hierarchische Struktur insbes. bei komplexen Beschreibungen (z. Ansible-Playbooks oder Spring-Boot-Konfigurationen) deutliche Vorteile hinsichtlich Übersichtlichkeit und Verständlichkeit gegenüber Property-Files.
Property-File:
mail.sender.host=localhost
... beliebig viele weitere ANDERE properties ...
mail.sender.port=4711
YAML-Format:
mail:
sender:
host: localhost
port: 4711
Start YAML-Dokument
Ein YAML-Dokument startet mit
---
Property
Ein einfaches Property wird als Key: Value
geschrieben:
employee: Pierre
oder komplexe (hier ein sog. Dictionary)
lineinfile:
dest: /tmp/playbook.run.log
create: yes
state: present
line: pierre
, die aber auch in einer Zeile geschrieben werden können (dann aber =
statt :
):
lineinfile: dest=/tmp/playbook.run.log, create=yes, state=present, line='pierre'
Mir gefällt die Mehrzeilenversion besser.
Liste
Ein Property kann eine Liste abbilden, wobei alle Elemente einer Liste haben ein -
davor:
kids:
- Robin
- Jonas
- Nora
Eine alternative Schreibweise:
kids: [ 'Robin', 'Jonas', 'Nora' ]
oder auch
kids: { 'Robin', 'Jonas', 'Nora' }
Dictionary
Ein Dictionary ist eine Liste von Properties - es ähnelt einem Record in bestimmten Programmiersprachen. pierre
ist in folgendem Beispiel ein Dictionary:
pierre:
name: Pierre Feld
job: developer
Statt dieser hierarchischen Darstellung kann auch folgende verwendet werden:
pierre: { name: Pierre Feld, job: developer }
Komplexeres Beispiel
In diesem Beispiel sind ... enthalten
- einfache Properties:
name
- Listen von Dictionaries:
pierre
+robin
- Listen:
skills
- pierre:
name: Pierre Feld
job: developer
skills:
- java
- databases
- git
- robin
name: Robin Feld
job: schoolboy
skills:
- soccer
- statistics
- Clash of Clans
MISC
Zeilenumbrüche
Mit einem |
oder >
kann eine lange Zeile umgebrochen werden.
Verwendung von Metazeichen
Die Zeichen :
, -
... sind Sonderzeichen der YAML-Syntax und müssen dementsprechend gequoted werden. Das kann beispielsweise über äußere "
erfolgen
foo: "this is a colon : for you"
, weil folgendes zu einem Syntaxfehler führt:
foo: this is a colon : for you