ΠΡ Π²ΡΠ΅ Π»ΡΠ±ΠΈΠΌ Ansible, Π½ΠΎ Ansible β ΡΡΠΎ YAML. ΠΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ°ΡΡΠ° ΡΠΎΡΠΌΠ°ΡΠΎΠ²: ΡΠΏΠΈΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠ°ΡΡ Β«ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β», INI-ΡΠ°ΠΉΠ»Ρ, YAML, JSON, XML ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ . ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ ΠΈΠ· Π²ΡΠ΅Ρ Π½ΠΈΡ YAML ΡΠ°ΡΡΠΎ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΡΠ΄Π½ΡΠΌ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π΅Π³ΠΎ ΠΎΡΠ²Π΅ΠΆΠ°ΡΡΠΈΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌ ΠΈ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ YAML ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°ΡΡ ΡΠ²ΠΎΠΈΠΌ Python-ΠΎΠ±ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ ΠΊ ΠΎΡΡΡΡΠΏΠ°ΠΌ.
ΠΡΠ»ΠΈ Π²Π°Ρ Π±Π΅ΡΠΈΡ YAML, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ β ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ! β ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ 10 ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠ°Π³ΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ ΡΠ²ΠΎΠ΅ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΈ ΠΏΠΎΠ»ΡΠ±ΠΈΡΡ YAML. ΠΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΡΠΏΠΈΡΠΊΡ, Π½Π°ΡΠ° Π΄Π΅ΡΡΡΠΊΠ° ΡΠΎΠ²Π΅ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π½ΡΠΌΠ΅ΡΠΎΠ²Π°ΡΡΡΡ Ρ Π½ΡΠ»Ρ, ΠΌΠ΅Π΄ΠΈΡΠ°ΡΠΈΡ ΠΈ Π΄ΡΡ
ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ π
0. ΠΠ°ΡΡΠ°Π²ΡΡΠ΅ Π²Π°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ
ΠΠ΅Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ Π²Π°Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ β Π΄Π»Ρ Π½Π΅Π³ΠΎ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ YAML. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ, Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π°ΠΉΠ΄ΠΈΡΠ΅ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅. ΠΠΎΡΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΠΏΠΎΠΈΡΠΊ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π²ΡΠ΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΎΠΊΡΠΏΠ°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ YAML.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π΄Π°ΠΊΡΠΎΡ
Emacs Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ YAML ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ².
ΠΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ Π»ΡΠ±ΠΈΠΌΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ Π½Π΅Ρ ΡΠ΅ΠΆΠΈΠΌΠ° YAML, ΡΠΎ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ, ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π² Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°ΡΠ½ΡΠΉ Π΄Π»Ρ GNOME ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Gedit Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΠΆΠΈΠΌΠ° YAML, Π½ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ YAML ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΡΡΡΡΠΏΠ°ΠΌΠΈ:
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΡΡΡΡΠΏΠΎΠ² Π² Gedit.
Π ΠΏΠ»Π°Π³ΠΈΠ½
ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠΎΡΡΠ°ΡΡΡΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ Π»ΡΠ±ΠΈΠΌΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°. ΠΡΡΡΠ½ΠΈΡΠ΅, ΡΡΠΎ ΠΎΠ½ ΡΠ°ΠΌ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ YAML, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΡ ΡΠΎΡΠ½ΠΎ ΠΎΠ± ΡΡΠΎΠΌ Π½Π΅ ΠΏΠΎΠΆΠ°Π»Π΅Π΅ΡΠ΅.
1. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π»ΠΈΠ½ΡΠ΅Ρ (linter)
Π ΠΈΠ΄Π΅Π°Π»Π΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ·ΡΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΡ Ρ
ΠΎΡΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΡΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ΅ Π² 1978 Π³ΠΎΠ΄Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ
$ sudo dnf install yamllint
ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ yamllint, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΅ΠΌΡ YAML-ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΠΎΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π»ΠΈΠ½ΡΠ΅ΡΡ ΡΠ°ΠΉΠ» Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
Π¦ΠΈΡΡΡ ΡΠ»Π΅Π²Π° β ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ΠΌΡ, Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ: Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΡΠΎΠ»Π±ΡΠ°. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π½ΠΈ ΠΎ ΡΠ΅ΠΌ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡΡ, Π·Π°ΡΠΎ Π²Ρ ΡΠΎΡΠ½ΠΎ Π·Π½Π°Π΅ΡΠ΅, Π³Π΄Π΅ ΠΎΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ. ΠΡΠΎΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ Π² ΠΊΠΎΠ΄Π΅, ΠΈ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²ΡΠ΅ ΡΡΠ°Π½Π΅Ρ ΡΡΠ½ΠΎ.
ΠΠΎΠ³Π΄Π° yamllint Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΡΠ°ΠΉΠ»Π΅, Π½Π° ΡΠΊΡΠ°Π½ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ. ΠΡΠ»ΠΈ Π²Π°Ρ ΠΏΡΠ³Π°Π΅Ρ ΡΠ°ΠΊΠ°Ρ ΡΠΈΡΠΈΠ½Π° ΠΈ Ρ ΠΎΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π»ΠΈΠ½ΡΠ΅Ρ Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ echo ΡΠ΅ΡΠ΅Π· Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π°ΠΌΠΏΠ΅ΡΡΠ°Π½Π΄ (&&), Π²ΠΎΡ ΡΠ°ΠΊ:
$ yamllint perfect.yaml && echo "OK"
OK
Π POSIX Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π°ΠΌΠΏΠ΅ΡΡΠ°Π½Π΄ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ³Π΄Π° ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0. Π yamllint ΠΊΠ°ΠΊ ΡΠ°Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΡ ΡΡΠ° ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
2. ΠΠΈΡΠΈΡΠ΅ Π½Π° Python, Π° Π½Π΅ Π½Π° YAML
ΠΡΠ»ΠΈ Π²Π°Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π±Π΅ΡΠΈΡ YAML, ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΏΠΈΡΠΈΡΠ΅ Π½Π° Π½Π΅ΠΌ, Π² Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎΠΌ ΡΠΌΡΡΠ»Π΅. ΠΡΠ²Π°Π΅Ρ, ΡΡΠΎ YAML β ΡΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΎ ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ YAML-ΡΠ°ΠΉΠ». ΠΠΈΡΠΈΡΠ΅ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠ°Π²ΠΈΡΡΡ, Π° ΠΏΠΎΡΠΎΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠΉΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Python Π΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
Π‘Π°ΠΌΠΎΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΉΠ» Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π·Π°ΠΎΠ΄Π½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈ Python-ΡΠΊΡΠΈΠΏΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ YAML. ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ . ΠΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠΈΡΠ΅ JSON-Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Python, ΠΏΡΠ΅Π΄Π²Π°ΡΡΠ΅ΡΠ΅ ΡΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²ΠΎΠΉ import, Π° Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΠ΅ ΡΡΠΈ ΡΡΡΠΎΡΠΊΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ²ΠΎΠ΄Π°.
#!/usr/bin/python3
import yaml
d={
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
f=open('output.yaml','w')
f.write(yaml.dump(d))
f.close
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΡΠΎ ΡΠ°ΠΉΠ» Π½Π° Python-Π΅ ΠΈ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΉΠ» output.yaml:
$ python3 ./example.json
$ cat output.yaml
glossary:
GlossDiv:
GlossList:
GlossEntry:
Abbrev: ISO 8879:1986
Acronym: SGML
GlossDef:
GlossSeeAlso: [GML, XML]
para: A meta-markup language, used to create markup languages such as DocBook.
GlossSee: markup
GlossTerm: Standard Generalized Markup Language
ID: SGML
SortAs: SGML
title: S
title: example glossary
ΠΡΠΎ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ YAML, Π½ΠΎ yamllint Π²ΡΠ΄Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ½ Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ —. Π§ΡΠΎ ΠΆ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ ΠΈΠ»ΠΈ ΡΠ»Π΅Π³ΠΊΠ° Π΄ΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ Python-ΡΠΊΡΠΈΠΏΡ.
ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠΊΡΠΈΠΏΡΡ
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΈΡΠ΅ΠΌ Π½Π° JSON-Π΅, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Python-ΡΠΊΡΠΈΠΏΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ Π΄Π°Π΅Ρ YAML. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± Π»ΡΡΡΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΎ Π΄Π°Π½Π½ΡΡ .
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ JSON-ΡΠ°ΠΉΠ» example.json, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π½Π°
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΊΡΠΈΠΏΡ-ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ json2yaml.py. ΠΡΠΎΡ ΡΠΊΡΠΈΠΏΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅Ρ ΠΎΠ±Π° ΠΌΠΎΠ΄ΡΠ»Ρ β YAML ΠΈ JSON Python, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ°ΠΉΠ» JSON, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΈΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°ΠΉΠ» output.yaml.
#!/usr/bin/python3
import yaml
import sys
import json
OUT=open('output.yaml','w')
IN=open(sys.argv[1], 'r')
JSON = json.load(IN)
IN.close()
yaml.dump(JSON, OUT)
OUT.close()
Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ Π² system path ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΠΉΡΠ΅ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ:
$ ~/bin/json2yaml.py example.json
3. ΠΠ°ΡΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠ°ΡΡΠΎ
ΠΠ½ΠΎΠ³Π΄Π° Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡΡΡ ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ³Π»ΠΎΠΌ. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΡΡΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² YAML, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² Π½Π΅ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ ΡΠ»ΠΎΠ²Π°ΡΠ½ΡΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Ρ JSON, ΡΠΎ YAML ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² JSON Π²ΡΠ΅Π³ΠΎ Π΄Π²ΡΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ Python. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ YAML-ΡΠ°ΠΉΠ» mydata.yaml, ΡΠΎΠ³Π΄Π° Π²ΠΎΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ:
$ python3
>>> f=open('mydata.yaml','r')
>>> yaml.load(f)
{'document': 34843, 'date': datetime.date(2019, 5, 23), 'bill-to': {'given': 'Seth', 'family': 'Kenlon', 'address': {'street': '51b Mornington Roadn', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}
ΠΠ° ΡΡΡ ΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΌΠ°ΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² Π½Π°Π»ΠΈΡΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΊΠΎΠ½Π²Π΅ΡΡΠ΅ΡΠΎΠ² ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ°ΡΡΠ΅ΡΠΎΠ². Π’Π°ΠΊ ΡΡΠΎ Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π² Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΌΠ΅ΡΠ°Π½ΠΈΠ½Ρ.
4. Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠΏΠ΅ΠΊΠΈ
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ YAML ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ²Π°, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°ΠΉΡΠΈ Π½Π°
5. ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³ΠΈ
ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠ»ΠΈ ΡΡΠ°ΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠΏΠ΅ΡΠ²Π° Π½Π°Π±ΡΠΎΡΠ°ΡΡ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ»Π°Π½, Ρ ΠΎΡΡ Π±Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΡ. Π’Π°ΠΊ ΠΆΠ΅ ΠΈ Ρ YAML. Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΡΠ°ΠΉΠ» YAML, Π½ΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠ²ΡΠ·Π°ΡΡ ΠΈΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π²Π°ΡΡΡ YAML, Π½Π°ΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³.
ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄, Π³Π΄Π΅ Π½Π΅ Π½Π°Π΄ΠΎ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΈΠ»ΠΈ ΠΎΡΡΡΡΠΏΠ°Ρ , ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ Β«ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ-ΠΏΠΎΡΠΎΠΌΠΎΠΊΒ», Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ. Π’Π°ΠΊ ΠΈ Π·Π΄Π΅ΡΡ: Π²Ρ ΡΠΈΡΡΠ΅ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Ρ Π²Π°Ρ Π² Π³ΠΎΠ»ΠΎΠ²Π΅.
ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³ Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² (Martin ΠΈ Tabitha) ΠΈ ΠΈΡ Π½Π°Π²ΡΠΊΠΎΠ² (ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: Python, Perl, Pascal ΠΈ Lisp, Fortran, Erlang, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ).
ΠΠ°ΡΠΈΡΠΎΠ²Π°Π² ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³ Π½Π° Π»ΠΈΡΡΠ΅ Π±ΡΠΌΠ°Π³ΠΈ, Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ Π΅Π³ΠΎ ΠΈ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΠΎΡΠΎΡΠΌΠΈΡΠ΅ Π² Π²ΠΈΠ΄Π΅ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠ³ΠΎ YAML-ΡΠ°ΠΉΠ»Π°.
6. ΠΠΈΠ»Π΅ΠΌΠΌΠ° Β«ΡΠ°Π±ΡΠ»ΡΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π΅Π»ΡΒ»
ΠΠ°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΅ΡΠΈΡΡ Π΄ΠΈΠ»Π΅ΠΌΠΌΡ
Π Π»ΡΠ±ΠΎΠΌ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π°Π²ΡΠΎΠ·Π°ΠΌΠ΅Π½Ρ ΡΠ°Π±ΡΠ»ΡΡΠΈΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ½ΡΠ° ΠΏΡΠΈΠ²Π΅ΡΠΆΠ΅Π½ΡΠ΅Π² ΠΊΠ»Π°Π²ΠΈΡΠΈ Tab ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π±ΠΎΡΡΡΡΡ.
ΠΠ°ΠΊ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π½Π΅Π½Π°Π²ΠΈΡΡΠ½ΠΈΠΊΡ YAML, Π½Π° ΡΠΊΡΠ°Π½Π΅ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΡΠ»ΡΡΠΈΠ΅ΠΉ ΠΈ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ. Π ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π³ΠΎ-ΡΠΎ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠ± ΡΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π²ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅Π±ΡΠ°Π»ΠΈ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ ΠΈ ΡΡΡΡΠ°Π½ΠΈΠ»ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π§Π°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ±ΠΈΡΡΠΉ Π½Π° ΠΏΠΎΠΈΡΠΊ ΠΊΡΠΈΠ²ΠΎΠΉ ΡΠ°Π±ΡΠ»ΡΡΠΈΠΈ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ° ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ², ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠΏΠΈΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π°Π΄ ΡΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΆΠ΅Π»Π΅Π·ΠΎΠ±Π΅ΡΠΎΠ½Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π΅Π΅ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· Git-Ρ ΡΠΊ Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΠΎΠ½Π° ΡΠ΅ΡΠ΅Π· Π»ΠΈΠ½ΡΠ΅Ρ).
7. ΠΡΡΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π° Π»ΡΡΡΠ΅ (ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ β ΡΡΠΎ ΠΌΠ΅Π½ΡΡΠ΅)
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΡΠ΄ΠΈ Π»ΡΠ±ΡΡ ΠΏΠΈΡΠ°ΡΡ Π½Π° YAML, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΡΡΡΡΠΏΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ΄Π΅Π»ΡΡΡ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΠΆΡΠ»ΡΠ½ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΡΠ·ΡΠΊΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ²Π½ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ ΠΈΠ·
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
ΠΠΎΠΌΡ-ΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΡΡΡΡΠΊΡΡΡΡ YAML, Π΄ΡΡΠ³ΠΈΡ ΠΎΠ½ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°Π΅Ρ ΠΌΠ°ΡΡΠΎΠΉ Π½Π΅Π½ΡΠΆΠ½ΡΡ , Π½Π° ΠΈΡ Π²Π·Π³Π»ΡΠ΄, ΠΎΡΡΡΡΠΏΠΎΠ².
ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ²Π»ΡΠ΅ΡΠ΅ΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ YAML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅ΡΠ΅ Π·Π° Π΅Π³ΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠΎ Π²Ρ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΡΡΡΠΏΡ. ΠΡΠ»ΠΈ Π²Π°Ρ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΡΡΡΡΠΏΡ, ΡΠ²Π΅Π΄ΠΈΡΠ΅ ΠΈΡ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ YAML. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ansible Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ Π±Ρ ΡΠΎ Π½ΠΈ Π±ΡΠ»ΠΎ ΠΏΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΠΈ
ΠΡΠ»ΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ°ΠΉΠ»Π° YAML Π²Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΠ΅ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π²ΡΡΠ°Π²ΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΡΠ°Π±Π»ΠΎΠ½-Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΡ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. Π’ΠΎΠ³Π΄Π° Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π· ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΡ ΠΈ Π²ΠΏΠΈΡΠ°ΡΡ ΡΡΠ΄Π° ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
---
# - <common name>:
# name: Given Surname
# job: JOB
# skills:
# - LANG
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
9. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΄Π΅ΡΠΆΠΈΡ Π²Π°Ρ ΠΌΠ΅ΡΡΠ²ΠΎΠΉ Ρ Π²Π°ΡΠΊΠΎΠΉ, ΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠΈΡ ΡΠΌΠ΅Π½ΠΈΡΡ YAML Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ. Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΡΠ°ΡΡ ΡΠ΅Π±Ρ ΠΈ ΡΠΎΠ³Π΄Π° Π»ΡΡΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΠΏΡΠΎΡΡΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ Π½Π° Lua ΠΈΠ»ΠΈ Python.
YAML β ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΡΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ±ΡΡ Π·Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌ ΠΈ ΠΏΡΠΎΡΡΠΎΡΡ, Π½ΠΎ ΡΡΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π² Π²Π°ΡΠ΅ΠΌ Π°ΡΡΠ΅Π½Π°Π»Π΅. Π’Π°ΠΊ ΡΡΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ. ΠΠ»Ρ YAML Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π°, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΠ΅ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, Π²Π°ΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠΊΠ°Π·.
ΠΡΠ»ΠΈ ΠΆΠ΅ Π±Π΅Π· YAML Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ, ΡΠΎ Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ Π½Π° Π²ΠΎΠΎΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΈ 10 ΡΠΎΠ²Π΅ΡΠΎΠ² ΠΈ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅ ΡΠ²ΠΎΡ Π½Π΅ΠΏΡΠΈΡΠ·Π½Ρ ΠΊ YAML ΡΠ°Π· ΠΈ Π½Π°Π²ΡΠ΅Π³Π΄Π°!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com