Π‘ΠΈΡΠ΅ Π³ΠΎ ΡΠ°ΠΊΠ°ΠΌΠ΅ 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. ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π»ΠΈΠ½ΡΠ΅Ρ
ΠΠ΄Π΅Π°Π»Π½ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈΡΠ΅ ΡΠ°Π·ΠΈΡΠΈ ΠΈ ΡΠ°Π·ΠΈΡΠΈΡΠ΅ Π·Π° ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π»ΠΈΠ²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠ°. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΠ±ΡΠΈ Π²ΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡΠ°, ΠΏΠΎΡΠ°Π΄ΠΈ ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΎΡ Π½Π°
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ
$ 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 Π½Π΅ Π½Π°ΠΎΡΠ° Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°, Π½ΠΈΡΡΠΎ Π½Π΅ ΡΠ΅ ΠΏΠ΅ΡΠ°ΡΠΈ Π½Π° Π΅ΠΊΡΠ°Π½ΠΎΡ. ΠΠΊΠΎ ΡΠ°ΠΊΠ²Π°ΡΠ° ΡΠΈΡΠΈΠ½Π° Π²Π΅ ΠΏΠ»Π°ΡΠΈ ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠΎΠ³Π°Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π»ΠΈΠ½ΡΠ΅ΡΠΎΡ ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΡΡΠ»ΠΎΠ²Π½ΠΎ Π΅Ρ ΠΎ ΠΏΡΠ΅ΠΊΡ Π΄Π²ΠΎΠ΅Π½ Π°ΠΌΠΏΠ΅ΡΡΠ°Π½Π΄ (&&), Π²Π°ΠΊΠ°:
$ yamllint perfect.yaml && echo "OK"
OK
ΠΠΎ POSIX, Π΄Π²ΠΎΠ΅Π½ Π°ΠΌΠΏΠ΅ΡΡΠ΅Π½Π΄ ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π°ΠΊΠΎ ΠΈ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ°ΡΠΈ 0. Π yamllint ΡΠ°ΠΌΠΎ Π³ΠΎ Π²ΡΠ°ΡΠ° Π±ΡΠΎΡΠΎΡ Π½Π° ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅Π½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΡΠ°Π΄ΠΈ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΡΠ΅Π»Π°ΡΠ° ΠΎΠ²Π°Π° ΡΡΠ»ΠΎΠ²Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠ°.
2. ΠΠΈΡΡΠ²Π°ΡΡΠ΅ Π²ΠΎ Python, Π° Π½Π΅ YAML
ΠΠΊΠΎ YAML Π½Π°Π²ΠΈΡΡΠΈΠ½Π° Π²Π΅ Π½Π°Π»ΡΡΠΈ, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ ΠΏΠΈΡΡΠ²Π°ΡΡΠ΅ Π²ΠΎ Π½Π΅Π³ΠΎ, Π±ΡΠΊΠ²Π°Π»Π½ΠΎ. Π‘Π΅ ΡΠ»ΡΡΡΠ²Π° YAML Π΄Π° Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΠΎΡ ΡΠΎΡΠΌΠ°Ρ ΡΡΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ° Π³ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°. ΠΠΎ, Π΄ΡΡΠΈ ΠΈ Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π½Π΅ Π΅ Π½Π΅ΠΎΠΏΡ
ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° YAML. ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° ΠΎΠ½Π° ΡΡΠΎ Π²ΠΈ ΡΠ΅ Π΄ΠΎΠΏΠ°ΡΠ° ΠΈ ΠΏΠΎΡΠΎΠ° ΠΏΡΠ΅ΡΠ²ΠΎΡΠ΅ΡΠ΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΈ ΠΎΠ΄Π»ΠΈΡΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° Python
Π‘Π°ΠΌΠΎΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΡΠ΅
ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠΎ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π΅ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Python ΡΠΊΡΠΈΠΏΡΠ° ΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° YAML. ΠΠ²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΡΠ΄ΠΎΠ±ΡΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π·Π° ΠΌΠ°Π»ΠΈ Π·Π±ΠΈΡΠΊΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ. ΠΠ΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π³ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΎΠ΄ JSON Π²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° Python, ΠΌΡ ΡΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠ΅Π΄Π³ΠΎΠ²ΠΎΡ ΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° Π·Π° ΡΠ²ΠΎΠ· ΠΈ Π½Π° ΠΊΡΠ°ΡΠΎΡ ΠΎΠ΄ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ ΡΡΠΈ Π»ΠΈΠ½ΠΈΠΈ Π·Π° Π΄Π° Π³ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ ΠΈΠ·Π»Π΅Π·ΠΎΡ.
#!/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()
ΠΠ°ΡΡΠ²Π°ΡΡΠ΅ ΡΠ° ΠΎΠ²Π°Π° ΡΠΊΡΠΈΠΏΡΠ° Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠ°ΡΠ° ΠΏΠ°ΡΠ΅ΠΊΠ° ΠΈ ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅ ΡΠ° ΠΏΠΎ ΠΏΠΎΡΡΠ΅Π±Π°:
$ ~/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, Π½Π°ΡΡΡΠ°ΡΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎ-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°.
ΠΡΠ΅Π²Π΄ΠΎ-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΡΠ»ΠΈΡΠ½Π° Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎ-ΠΊΠΎΠ΄ΠΎΡ, ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ Π³ΡΠΈΠΆΠΈΡΠ΅ Π·Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° ΠΈΠ»ΠΈ Π²ΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ΡΠΎ, ΠΎΠ΄Π½ΠΎΡΠΈΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»-Π΄Π΅ΡΠ΅, Π½Π°ΡΠ»Π΅Π΄ΡΡΠ²ΠΎΡΠΎ ΠΈ Π²Π³Π½Π΅Π·Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ. ΠΡΡΠΎΡΠΎ Π΅ ΠΈ ΠΎΠ²Π΄Π΅: ΡΡΡΠ°ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π°Π°Ρ Π²ΠΎ Π²Π°ΡΠ°ΡΠ° Π³Π»Π°Π²Π°.
ΠΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ ΡΠΎ Π»ΠΈΡΡΠ° Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎ-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (ΠΠ°ΡΡΠΈΠ½ ΠΈ Π’Π°Π±ΠΈΡΠ°) ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠ½ΠΈ (ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΡΠΈ: Python, Perl, Pascal ΠΈ Lisp, Fortran, Erlang, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ).
ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π½Π°ΡΡΡΠ°ΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎ-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΏΠ°ΡΡΠ΅ Ρ Π°ΡΡΠΈΡΠ°, Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΡΠ΅ ΡΠ° ΠΈ, Π°ΠΊΠΎ ΡΓ¨ Π΅ Π²ΠΎ ΡΠ΅Π΄, ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°ΡΡΠ΅ ΡΠ° Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° Π²Π°Π»ΠΈΠ΄Π½Π° YAML-Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°.
6. ΠΠΈΠ»Π΅ΠΌΠ°ΡΠ° Π½Π° ΡΠ°Π·ΠΈΡΠΈΡΠ° ΠΏΡΠΎΡΠΈΠ² ΠΏΡΠΎΡΡΠΎΡΠΈ
ΠΠ΅ ΠΌΠΎΡΠ° Π΄Π° ΡΠ° ΡΠ΅ΡΠΈΡΠ΅ Π΄ΠΈΠ»Π΅ΠΌΠ°ΡΠ°
ΠΠΎ ΡΠ΅ΠΊΠΎΡ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΡΡΠ΅Π΄ΡΠ²Π°Ρ Π½Π° ΡΠ΅ΠΊΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΠ²ΠΈΡΠ΅ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠ° ΠΊΠΎΡΠ΅ΠΊΡΠΈΡΠ° Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ Π±ΡΠΎΡ ΠΏΡΠ°Π·Π½ΠΈ ΠΌΠ΅ΡΡΠ°, ΡΠ°ΠΊΠ° ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π±ΡΠ½Ρ Π½Π° ΠΊΠ»ΡΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ΠΈΡΠΈ Π’Π°Π±ΠΎΡ Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΠ»Π°ΡΠΈΡΠ΅.
ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΠΊΠΎΡ ΠΌΡΠ°Π·ΠΈΡΠ΅Π» Π½Π° 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 Π΅Π΄Π½Π°Ρ Π·Π°ΡΠ΅ΠΊΠΎΠ³Π°Ρ!
ΠΠ·Π²ΠΎΡ: www.habr.com