10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Zen

Всички ΠΎΠ±ΠΈΡ‡Π°ΠΌΠ΅ Ansible, Π½ΠΎ Ansible Π΅ YAML. Има ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅: ΡΠΏΠΈΡΡŠΡ†ΠΈ със стойности, Π΄Π²ΠΎΠΉΠΊΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€-стойност, INI Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, YAML, JSON, XML ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΏΠΎΡ€Π°Π΄ΠΈ няколко ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, YAML чСсто сС смята Π·Π° особСно Ρ‚Ρ€ΡƒΠ΄Π΅Π½. По-спСциално, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ своя освСТаващ минимализъм ΠΈ впСчатляващи Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΉΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π½ΠΈ стойности, ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Π½Π° YAML ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС досадСн с ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Python ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ към ΠΎΡ‚ΡΡ‚ΡŠΠΏΠ°.

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Zen

Ако YAML Π²ΠΈ ядосва, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ - ΠΈ трябва! - Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ слСдващитС 10 ΡΡ‚ΡŠΠΏΠΊΠΈ, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Ρ€Π°Π·Π΄Ρ€Π°Π·Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ си Π΄ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π΄Π° ΠΎΠ±ΠΈΡ‡Π°Ρ‚Π΅ YAML. ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π°Π²Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ списък, Π½Π°ΡˆΠΈΡ‚Π΅ дСсСт ΡΡŠΠ²Π΅Ρ‚Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°, добавямС мСдитация ΠΈ Π΄ΡƒΡ…ΠΎΠ²Π½ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ πŸ˜‰

0. НакарайтС вашия Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ

Няма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ какъв тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠΌΠ°Ρ‚Π΅, вСроятно ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ YAML плъгин Π·Π° Π½Π΅Π³ΠΎ. Ако няматС, Π½Π°ΠΌΠ΅Ρ€Π΅Ρ‚Π΅ ΠΈ инсталирайтС Π²Π΅Π΄Π½Π°Π³Π°. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅ΠΊΠ°Ρ€Π²Π°Ρ‚Π΅ Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ ΠΈ настройванС, Ρ‰Π΅ сС ΠΈΠ·ΠΏΠ»Π°Ρ‚ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ YAML.

НапримСр Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Атом ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° YAML ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π½ΠΎ Π·Π° GNU Emacs Ρ‰Π΅ трябва Π΄Π° инсталиратС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, yaml-Ρ€Π΅ΠΆΠΈΠΌ.

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Zen

Emacs Π² Ρ€Π΅ΠΆΠΈΠΌ YAML ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ.

Ако Π²Π°ΡˆΠΈΡΡ‚ любим Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ няма Ρ€Π΅ΠΆΠΈΠΌ YAML, Ρ‚ΠΎΠ³Π°Π²Π° някои ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈ Ρ‡Ρ€Π΅Π· Ρ€Π°Π±ΠΎΡ‚Π° с настройкитС. НапримСр тСкстовият Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° GNOME, Gedit, няма Ρ€Π΅ΠΆΠΈΠΌ YAML, Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Ρ‚ΠΎΠΉ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π° YAML синтаксиса ΠΈ Π²ΠΈ позволява Π΄Π° пСрсонализиратС ΠΎΡ‚ΡΡ‚ΡŠΠΏΠ°:

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Zen

Π—Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈ Π² Gedit.

Плъгин Ρ‡Π΅Ρ€Ρ‚Π΅ΠΆΠ½ΠΈ пространства Π·Π° Gedit, Ρ‚ΠΎΠΉ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈΡ‚Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°ΠΉΠΊΠΈ нСяснотитС с Π½ΠΈΠ²Π° Π½Π° ΠΎΡ‚ΡΡ‚ΡŠΠΏ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΎΡ‚Π΄Π΅Π»Π΅Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ любимия си Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° общност Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с YAML ΠΈ сС Π²ΡŠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ няма Π΄Π° ΡΡŠΠΆΠ°Π»ΡΠ²Π°Ρ‚Π΅.

1. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€

Π’ идСалния случай Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΈ Π΅Π·ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠΌ синтаксис. ΠšΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈΡ‚Π΅ са Π΄ΠΎΠ±Ρ€ΠΈ Π² прСдвидимостта, ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π΅Π· 1978 Π³. възниква концСпцията Π»ΠΈΠ½Ρ‚Π΅Ρ€. Ако Π·Π° 40 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΎΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ си Ρ‚ΠΎΠΉ Π²ΠΈ Π΅ ΠΏΠΎΠ΄ΠΌΠΈΠ½Π°Π» ΠΈ всС ΠΎΡ‰Π΅ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ YAML linter, Ρ‚ΠΎΠ³Π°Π²Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ yamllint.

установят ямлинт ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ собствСния Linux ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. НапримСр Π² Red Hat Enterprise Linux 8 Π³. ΠΈΠ»ΠΈ Fedora ΠΏΡ€Π°Π²ΠΈ сС Ρ‚Π°ΠΊΠ°:

$ 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 pyyaml ΠΈ Ρ†Π΅Π»ΠΈ Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅: самоконвСртиранС ΠΈ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Ρ‡Ρ€Π΅Π· скриптовС.

Π‘Π°ΠΌΠΎΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Ρ‰ сС

Π’ Ρ‚ΠΎΠ·ΠΈ случай Ρ„Π°ΠΉΠ»ΡŠΡ‚ с Π΄Π°Π½Π½ΠΈ ΡΡŠΡ‰ΠΎ Π΅ скрипт Π½Π° 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, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ json.org:

{
	"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 слСд дълга ΠΏΠ°ΡƒΠ·Π°, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ yaml.org ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ спСцификациитС (спСцификациитС). Ако ΠΈΠΌΠ°Ρ‚Π΅ затруднСния с YAML, Π½ΠΎ Ρ€ΡŠΡ†Π΅Ρ‚Π΅ Π²ΠΈ Π½Π΅ са достигнали спСцификацията, Ρ‚ΠΎΠ³Π°Π²Π° Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π°Π·ΠΈ ситуация. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ са ΠΈΠ·Π½Π΅Π½Π°Π΄Π²Π°Ρ‰ΠΎ лСсни Π·Π° писанС, Π° изискванията Π·Π° синтаксис са ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π°Π½ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π² Π“Π»Π°Π²Π° 6.

5. ΠŸΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠ½ΠΈΠ³Π° ΠΈΠ»ΠΈ статия, Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π΄ΠΎΠ±Ρ€Π° идСя ΠΏΡŠΡ€Π²ΠΎ Π΄Π° ΠΎΡ‡Π΅Ρ€Ρ‚Π°Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΠ»Π°Π½, ΠΏΠΎΠ½Π΅ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅. Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ с YAML. Най-вСроятно ΠΈΠΌΠ°Ρ‚Π΅ прСдстава ΠΊΠ°ΠΊΠ²ΠΈ Π΄Π°Π½Π½ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ записани Π² YAML Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ наистина Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ Π΅Π΄ΠΈΠ½ с Π΄Ρ€ΡƒΠ³. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° скулптуриратС YAML, нарисувайтС псСвдо-конфигурация.

Pseudoconfig Π΅ ΠΊΠ°Ρ‚ΠΎ псСвдокод, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС притСсняватС Π·Π° структура ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡ‚ΡŠΠΏ, Π²Ρ€ΡŠΠ·ΠΊΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»-Π΄Π΅Ρ‚Π΅, наслСдяванС ΠΈ Π²Π»Π°Π³Π°Π½Π΅. Π’Π°ΠΊΠ° Π΅ ΠΈ Ρ‚ΡƒΠΊ: рисуватС повторСния Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΡ‚ΠΎ сС появяват Π² Π³Π»Π°Π²Π°Ρ‚Π° Π²ΠΈ.

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Zen

Pseudoconfig изброява програмисти (ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠΈ Π’Π°Π±ΠΈΡ‚Π°) ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ умСния (Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅: ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ Python, Perl, Pascal ΠΈ Lisp, Fortran, Erlang).

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ нарисуватС псСвдоконфигурация Π½Π° лист хартия, Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ я Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈ, Π°ΠΊΠΎ всичко Π΅ Π½Π°Ρ€Π΅Π΄, я Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΊΠ°Ρ‚ΠΎ Π²Π°Π»ΠΈΠ΄Π΅Π½ YAML Ρ„Π°ΠΉΠ».

6. Π”ΠΈΠ»Π΅ΠΌΠ°Ρ‚Π° Π·Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ

Врябва Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΅Π΄Π½Π° Π΄ΠΈΠ»Π΅ΠΌΠ° "Ρ‚Π°Π±ΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ?". НС Π² Π³Π»ΠΎΠ±Π°Π»Π΅Π½ смисъл, Π° само Π½Π° Π½ΠΈΠ²ΠΎ организация ΠΈΠ»ΠΈ ΠΏΠΎΠ½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Няма Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π»ΠΈ Ρ‚ΠΎΠ²Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π° послСдваща ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° със скрипт sed, настройка Π½Π° тСкстови Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΈ Π½Π° машини Π½Π° програмисти ΠΈΠ»ΠΈ пълно ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° разписки Π·Π° стриктно спазванС Π½Π° инструкциитС Π½Π° linter ΠΏΠΎΠ΄ Π·Π°ΠΏΠ»Π°Ρ…Π° ΠΎΡ‚ ΡƒΠ²ΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ всички Ρ‡Π»Π΅Π½ΠΎΠ²Π΅ Π½Π° вашия Π΅ΠΊΠΈΠΏ, ΠΊΠΎΠΈΡ‚ΠΎ Π² ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с YAML, трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ само ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ (ΠΊΠ°ΠΊΡ‚ΠΎ сС изисква ΠΎΡ‚ спСцификацията Π½Π° YAML).

Π’ΡŠΠ² всСки Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° настроитС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° замяна Π½Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π±ΡƒΠ½Ρ‚ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΈΠ²ΡŠΡ€ΠΆΠ΅Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΡŽΡ‡Π° Π•Ρ‚ΠΈΠΊΠ΅Ρ‚ Π½Π΅ моТСш Π΄Π° сС ΡΡ‚Ρ€Π°Ρ…ΡƒΠ²Π°Ρˆ.

ΠšΠ°ΠΊΡ‚ΠΎ всСки Ρ…Π΅ΠΉΡ‚ΡŠΡ€ Π½Π° YAML Π΄ΠΎΠ±Ρ€Π΅ Π·Π½Π°Π΅, няма Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π΄Π΅Π»ΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ Π½Π° Π΅ΠΊΡ€Π°Π½Π°. И ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅Ρ‰ΠΎ Π½Π΅ сС Π²ΠΈΠΆΠ΄Π°, Ρ‚ΠΎ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ сС запомня послСдно, слСд ΠΊΠ°Ρ‚ΠΎ Π΅ ΠΏΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ ΠΈ отстранСни всички Π΄Ρ€ΡƒΠ³ΠΈ възмоТни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π•Π΄ΠΈΠ½ час Π²Ρ€Π΅ΠΌΠ΅, Π·Π°Π³ΡƒΠ±Π΅Π½ΠΎ Π² Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Ρ€Π°Π·Π΄Π΅Π» ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ, просто Π²ΠΈΠΊΠ°, Ρ‡Π΅ спСшно трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΅Π΄Π½ΠΎΡ‚ΠΎ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅ стоманобСтонна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ ΠΌΡƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡Ρ€Π΅Π· Git ΠΊΡƒΠΊΠ° Π·Π° ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ ΠΏΡ€Π΅Π· Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°).

7. По-ΠΌΠ°Π»ΠΊΠΎ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ (ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ)

Някои Ρ…ΠΎΡ€Π° ΠΎΠ±ΠΈΡ‡Π°Ρ‚ Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ Π½Π° YAML, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π° структурата. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ‚Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈ Π·Π° ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ²Π° Π΅ Π²ΠΈΠ΄ ΠΈΠ·ΠΌΠ°ΠΌΠ° Π΄Π° сС ΠΈΠΌΠΈΡ‚ΠΈΡ€Π°Ρ‚ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ.

Π•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π°ΠΊΠ°Π²Π° структура ΠΎΡ‚ Ansible докумСнтация:

# 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€