10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Π΄Π·Π΅Π½

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

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Π΄Π·Π΅Π½

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

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

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

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

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Π΄Π·Π΅Π½

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

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

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Π΄Π·Π΅Π½

Настройка Π½Π° ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈΡ‚Π΅ Π² Gedit.

А ΠΏΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ drawspaces Π·Π° Gedit ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈΡ‚Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°ΠΉΠΊΠΈ нСяснотитС с Π½ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΡ‚ΡΡ‚ΡŠΠΏ.

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

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

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

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΉΡ‚Π΅ yamllint ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° стандартния ΠΏΠ°ΠΊΠ΅Ρ‚Π΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ Π½Π° Linux. НапримСр, Π² Red Hat Enterprise Linux 8 ΠΈΠ»ΠΈ Fedora Ρ‚ΠΎΠ²Π° сС ΠΏΡ€Π°Π²ΠΈ Ρ‚Π°ΠΊΠ°:

$ sudo dnf install yamllint

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° просто стартиратС yamllint, ΠΊΠ°Ρ‚ΠΎ ΠΌΡƒ ΠΏΡ€Π΅Π΄Π°Π΄Π΅Ρ‚Π΅ YAML Ρ„Π°ΠΉΠ» Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄Π°Π΄Π΅Ρ‚Π΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€Π° Ρ„Π°ΠΉΠ» с Π³Ρ€Π΅ΡˆΠΊΠ°:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     Π³Ρ€Π΅ΡˆΠΊΠ°    синтактична Π³Ρ€Π΅ΡˆΠΊΠ°: ΠΌΠ°ΠΏΠΈΠ½Π³ стойности Π½Π΅ Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Ρ‚ΡƒΠΊ
23:11     Π³Ρ€Π΅ΡˆΠΊΠ°    Π·Π°Π΄Π½ΠΈ пространства  (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 ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π°Π½ΠΎ ΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° 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. МоТС Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ json.org:

{
	"glossary": {
	  "title": "ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ глосар",
	  "GlossDiv": {
		"title": "S",
		"GlossList": {
		  "GlossEntry": {
			"ID": "SGML",
			"SortAs": "SGML",
			"GlossTerm": "Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π΅Π½ Π³Π΅Π½Π΅Ρ€Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π·Π½Π°ΠΊ Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅",
			"Acronym": "SGML",
			"Abbrev": "ISO 8879:1986",
			"GlossDef": {
			  "para": "ΠœΠ΅Ρ‚Π°Π·Π½Π°ΠΊΠΎΠ²Π° Π΅Π·ΠΈΠΊ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π·Π° създаванС Π½Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ ΠΊΠ°Ρ‚ΠΎ DocBook.",
			  "GlossSeeAlso": ["GML", "XML"]
			  },
			"GlossSee": "ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅"
			}
		  }
		}
	  }
	}

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ създадСм прост конвСрторски скрипт ΠΈ Ρ‰Π΅ Π³ΠΎ Π·Π°ΠΏΠ°Π·ΠΈΠΌ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Ρ‚ΠΎ 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': 'Π”ΠΎΠ±Ρ€Π° статия. МоТС Π΄Π° бъдС ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π°.'}

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΏΠΎ Ρ‚Π°Π·ΠΈ Ρ‚Π΅ΠΌΠ°. ОсвСн Ρ‚ΠΎΠ²Π°, ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€ΠΈ ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ парсСри. НС сС ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡ‚Π΅ Π΄Π° ΠΏΡ€Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ Π² тях само нСразбория.

4. Π§Π΅Ρ‚Π΅Ρ‚Π΅ спСкитС

Π’Ρ€ΡŠΡ‰Π°ΠΉΠΊΠΈ сС към YAML слСд дълга ΠΏΠ°ΡƒΠ·Π°, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΅ Π΄Π° посСтитС yaml.org ΠΈ Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°Ρ‚Π΅ спСцификациитС. Ако ΠΈΠΌΠ°Ρ‚Π΅ трудности с YAML, Π½ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ стС сС Π·Π°ΠΏΠΎΠ·Π½Π°Π»ΠΈ със спСцификациитС, Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°. Π‘ΠΏΠ΅ΠΊΠΈΡ‚Π΅ са ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄ΠΎΠ±Ρ€Π΅ написани, Π° изискванията Π·Π° синтаксис са ΠΈΠ»ΡŽΡΡ‚Ρ€ΠΈΡ€Π°Π½ΠΈ с мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π² Π“Π»Π°Π²Π° 6.

5. ΠŸΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³urations

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

ΠŸΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡŠΡ‚ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° псСвдокод, ΠΏΡ€ΠΈ ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС притСсняватС Π·Π° структурата ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΈΡ‚Π΅, Π²Π·Π°ΠΈΠΌΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ‚Π° "Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»-ΠΏΠΎΡ‚ΠΎΠΌΡŠΠΊ", наслСдството ΠΈ влоТСността. Π’Π°ΠΊΠ° Ρ‡Π΅ ΠΈ Ρ‚ΡƒΠΊ: рисуватС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ във Π²Π°ΡˆΠ΅Ρ‚ΠΎ съзнаниС.

10 ΡΡ‚ΡŠΠΏΠΊΠΈ към YAML Π΄Π·Π΅Π½

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

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

6. Π”ΠΈΠ»Π΅ΠΌΠ°Ρ‚Π° "табуляция ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ"

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

Π’ΡŠΠ² всСки Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° настроитС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ замСстванС Π½Π° табулацията с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π±Ρ€ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС страхуватС ΠΎΡ‚ Π±ΡƒΠ½Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ²ΡŠΡ€ΠΆΠ΅Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° клавиша Tab .

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

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 Ρ„Π°ΠΉΠ»Π° постоянно повтарятС Π΅Π΄Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΈΠΌΠ° смисъл Π΄Π° поставитС Π² Π½Π΅Π³ΠΎ шаблон-шаблон ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€. Π’ΠΎΠ³Π°Π²Π° слСдващия ΠΏΡŠΡ‚ просто ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ шаблон ΠΈ Π΄Π° Π²ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Ρ€Π΅Π°Π»Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

---
# - <ΠΎΠ±Ρ‰ΠΎ ΠΈΠΌΠ΅>:
#   name: ПсСвдоним
#   job: Π ΠΠ‘ΠžΠ’Π
#   skills:
#   - Π•Π—Π˜Πš
- 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster