10 Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π΄ΠΎ YAML Π—Π΅Π½

Π‘ΠΈΡ‚Π΅ Π³ΠΎ сакамС Ansible, Π½ΠΎ Ansible Π΅ YAML. ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ Π·Π° конфигурациски Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ: списоци Π½Π° врСдности, ΠΏΠ°Ρ€ΠΎΠ²ΠΈ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€-врСдност, INI Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, YAML, JSON, XML ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ Π΄Ρ€ΡƒΠ³ΠΈ. Π‘Π΅ΠΏΠ°ΠΊ, ΠΏΠΎΡ€Π°Π΄ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ ΠΎΠ΄ ситС Π½ΠΈΠ², YAML чСсто сС смСта Π·Π° особСно Ρ‚Π΅ΠΆΠΎΠΊ. ОсобСно, ΠΈ ΠΏΠΎΠΊΡ€Π°Ρ˜ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ освСТувачки ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·Π°ΠΌ ΠΈ импрСсивни способности Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со хиСрархиски врСдности, синтаксата YAML ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ досадна со Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΠΎΡ‚ пристап сличСн Π½Π° Python Π·Π° Π²ΠΎΠ²Π»Π΅ΠΊΡƒΠ²Π°ΡšΠ΅.

10 Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π΄ΠΎ YAML Π—Π΅Π½

Ако YAML Π²Π΅ Π½Π°Π»ΡƒΡ‚ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ - ΠΈ Ρ‚Ρ€Π΅Π±Π°! – ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ Π³ΠΈ слСднитС 10 Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π·Π° Π΄Π° ја Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ Π²Π°ΡˆΠ°Ρ‚Π° Ρ„Ρ€ΡƒΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΈΡ„Π°Ρ‚Π»ΠΈΠ²ΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π΄Π° сС Π·Π°Ρ™ΡƒΠ±ΠΈΡ‚Π΅ Π²ΠΎ YAML. Како ΡˆΡ‚ΠΎ Π΄ΠΎΠ»ΠΈΠΊΡƒΠ²Π° Π½Π° ΠΎΠ²Π°Π° листа, Π½Π°ΡˆΠΈΡ‚Π΅ дСсСт совСти ќС Π±ΠΈΠ΄Π°Ρ‚ Π½ΡƒΠΌΠ΅Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΎΠ΄ Π½ΡƒΠ»Π°, ќС Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ ΠΌΠ΅Π΄ΠΈΡ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ Π΄ΡƒΡ…ΠΎΠ²Π½ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΏΠΎ ΠΆΠ΅Π»Π±Π° πŸ˜‰

0. НаправСтС Π²Π°ΡˆΠΈΠΎΡ‚ ΡƒΡ€Π΅Π΄Π½ΠΈΠΊ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ

НС Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ² ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‡ Π½Π° тСкст ΠΈΠΌΠ°Ρ‚Π΅, Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ постои Π±Π°Ρ€Π΅ΠΌ Π΅Π΄Π΅Π½ Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со YAML. Ако Π½Π΅ΠΌΠ°Ρ‚Π΅, вСднаш ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π³ΠΎ ΠΈ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΠΎ Π²ΠΎ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ ќС сС исплати ΠΌΠ½ΠΎΠ³ΡƒΠΊΡ€Π°Ρ‚Π½ΠΎ сСкој ΠΏΠ°Ρ‚ ΠΊΠΎΠ³Π° ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‚Π΅ YAML.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΡ€Π΅Π΄Π½ΠΈΠΊ Атом стандардно ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° YAML, Π½ΠΎ Π·Π° GNU Emacs ќС ΠΌΠΎΡ€Π° Π΄Π° инсталиратС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, yaml-Ρ€Π΅ΠΆΠΈΠΌ.

10 Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π΄ΠΎ YAML Π—Π΅Π½

Emacs Π²ΠΎ Ρ€Π΅ΠΆΠΈΠΌ YAML ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π°Π·Π½ΠΈ мСста.

Ако Π²Π°ΡˆΠΈΠΎΡ‚ ΠΎΠΌΠΈΠ»Π΅Π½ ΡƒΡ€Π΅Π΄Π½ΠΈΠΊ Π½Π΅ΠΌΠ° Ρ€Π΅ΠΆΠΈΠΌ YAML, Ρ‚ΠΎΠ³Π°Ρˆ Π½Π΅ΠΊΠΎΠΈ ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠ°Ρ‚ со Ρ€Π°Π±ΠΎΡ‚Π° со поставкитС. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, стандардниот ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‡ Π½Π° тСкст GNOME Gedit Π½Π΅ΠΌΠ° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° YAML, Π½ΠΎ стандардно ја нагласува синтаксата Π½Π° YAML ΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ја ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° со Π²Π΄Π»Π°Π±Π½Π°Ρ‚ΠΈΠ½ΠΈ:

10 Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π΄ΠΎ YAML Π—Π΅Π½

ΠŸΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π²ΠΎΠ²Π»Π΅ΠΊΡƒΠ²Π°ΡšΠ° Π²ΠΎ Gedit.

ΠŸΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ простори Π·Π° Ρ†Ρ€Ρ‚Π°ΡšΠ΅ Π·Π° Gedit, Π³ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π° ΠΏΡ€Π°Π·Π½ΠΈΠ½ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°Ρ˜ΡœΠΈ Π³ΠΈ Π½Π΅Ρ˜Π°ΡΠ½ΠΎΡ‚ΠΈΡ˜Π°Ρ‚Π° со Π½ΠΈΠ²ΠΎΠ°Ρ‚Π° Π½Π° Π²ΠΎΠ²Π»Π΅ΠΊΡƒΠ²Π°ΡšΠ΅.

Π‘ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ, ΠΏΠΎΠΌΠΈΠ½Π΅Ρ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° ΡƒΡ‡Π΅ΡšΠ΅ Π·Π° Π²Π°ΡˆΠΈΠΎΡ‚ ΠΎΠΌΠΈΠ»Π΅Π½ ΡƒΡ€Π΅Π΄Π½ΠΈΠΊ. Π”ΠΎΠ·Π½Π°Ρ˜Ρ‚Π΅ ΡˆΡ‚ΠΎ Ρ‚ΠΎΡ˜ ΠΈΠ»ΠΈ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Ρ€Π°Π·Π²ΠΎΡ˜Π½Π° Π·Π°Π΅Π΄Π½ΠΈΡ†Π° ΠΈΠΌΠ° Π΄Π° ΠΏΠΎΠ½ΡƒΠ΄ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со YAML ΠΈ искористСтС Π³ΠΈ Ρ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Π΅Ρ„ΠΈΠ½ΠΈΡ‚ΠΈΠ²Π½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° Π·Π°ΠΆΠ°Π»ΠΈΡ‚Π΅.

1. ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ‚Π΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€

ИдСално, програмскитС Ρ˜Π°Π·ΠΈΡ†ΠΈ ΠΈ Ρ˜Π°Π·ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° ΠΎΠ·Π½Π°Ρ‡ΡƒΠ²Π°ΡšΠ΅ користат ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π»ΠΈΠ²Π° синтакса. ΠšΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ΠΈΡ‚Π΅ сС Π΄ΠΎΠ±Ρ€ΠΈ Π²ΠΎ прСдвидливоста, ΠΏΠΎΡ€Π°Π΄ΠΈ ΡˆΡ‚ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΡ‚ Π½Π° Π»ΠΈΠ½Ρ‚Π΅Ρ€Π°. Ако Π²ΠΎ 40-Ρ‚Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΎΠ΄ своСто ΠΏΠΎΡΡ‚ΠΎΠ΅ΡšΠ΅ ΠΏΠΎΠΌΠΈΠ½Π° ΠΏΠΎΠΊΡ€Π°Ρ˜ вас ΠΈ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ користитС YAML Π»ΠΈΠ½Ρ‚Π΅Ρ€, Ρ‚ΠΎΠ³Π°Ρˆ Π²Ρ€Π΅ΠΌΠ΅ Π΅ Π΄Π° ΠΏΡ€ΠΎΠ±Π°Ρ‚Π΅ Ρ˜Π°ΠΌΠ»ΠΈΠ½Ρ‚.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜ Ρ˜Π°ΠΌΠ»ΠΈΠ½Ρ‚ ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ користитС стандардниот ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π½Π° Linux. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ Π›ΠΈΠ½ΠΊ Linux Π½Π° Red Hat Enterprise 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 Π½Π΅ Π½Π°ΠΎΡ“Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π²ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°, Π½ΠΈΡˆΡ‚ΠΎ Π½Π΅ сС ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π½Π° Π΅ΠΊΡ€Π°Π½ΠΎΡ‚. Ако Ρ‚Π°ΠΊΠ²Π°Ρ‚Π° Ρ‚ΠΈΡˆΠΈΠ½Π° Π²Π΅ плаши ΠΈ сакатС ΠΌΠ°Π»ΠΊΡƒ повСќС ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΡ‚ со ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° условно Π΅Ρ…ΠΎ ΠΏΡ€Π΅ΠΊΡƒ Π΄Π²ΠΎΠ΅Π½ ампСрсанд (&&), Π²Π°ΠΊΠ°:

$ 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, Π½Π°Ρ†Ρ€Ρ‚Π°Ρ˜Ρ‚Π΅ псСвдо-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°.

ПсСвдо-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ слична Π½Π° псСвдо-ΠΊΠΎΠ΄ΠΎΡ‚, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π³Ρ€ΠΈΠΆΠΈΡ‚Π΅ Π·Π° структурата ΠΈΠ»ΠΈ Π²ΠΎΠ²Π»Π΅ΠΊΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ, односитС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»-Π΄Π΅Ρ‚Π΅, наслСдството ΠΈ Π²Π³Π½Π΅Π·Π΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ. Π˜ΡΡ‚ΠΎΡ‚ΠΎ Π΅ ΠΈ ΠΎΠ²Π΄Π΅: Ρ†Ρ€Ρ‚Π°Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΡšΠ° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΏΠΎΡ˜Π°Π²ΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° Π³Π»Π°Π²Π°.

10 Ρ‡Π΅ΠΊΠΎΡ€ΠΈ Π΄ΠΎ YAML Π—Π΅Π½

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈ со листа Π½Π° псСвдо-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (ΠœΠ°Ρ€Ρ‚ΠΈΠ½ ΠΈ Π’Π°Π±ΠΈΡ‚Π°) ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ Π²Π΅ΡˆΡ‚ΠΈΠ½ΠΈ (програмски Ρ˜Π°Π·ΠΈΡ†ΠΈ: Python, Perl, Pascal ΠΈ Lisp, Fortran, Erlang, соодвСтно).

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС Π½Π°Ρ†Ρ€Ρ‚Π°Ρ‚Π΅ псСвдо-ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠ°Ρ€Ρ‡Π΅ Ρ…Π°Ρ€Ρ‚ΠΈΡ˜Π°, Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ја ΠΈ, Π°ΠΊΠΎ сè Π΅ Π²ΠΎ Ρ€Π΅Π΄, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ја Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° Π²Π°Π»ΠΈΠ΄Π½Π° YAML-Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

6. Π”ΠΈΠ»Π΅ΠΌΠ°Ρ‚Π° Π½Π° Ρ˜Π°Π·ΠΈΡ‡ΠΈΡšΠ° ΠΏΡ€ΠΎΡ‚ΠΈΠ² простори

ЌС ΠΌΠΎΡ€Π° Π΄Π° ја Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π΄ΠΈΠ»Π΅ΠΌΠ°Ρ‚Π° β€žΡ˜Π°Π·ΠΈΡ‡ΠΈΡšΠ° ΠΈΠ»ΠΈ ΠΏΡ€Π°Π·Π½ΠΈ мСста?β€œ. НС Π²ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½Π° смисла, Ρ‚ΡƒΠΊΡƒ само Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°, ΠΈΠ»ΠΈ Π±Π°Ρ€Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. НС Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π°Π»ΠΈ ΠΎΠ²Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ пост-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° со sed скрипта, ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‡ΠΈ Π½Π° тСкст Π½Π° ΠΌΠ°ΡˆΠΈΠ½ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€Π·Π°Π»Π½ΠΎ зСмањС смСтки Π·Π° строго ΡƒΡΠΎΠ³Π»Π°ΡΡƒΠ²Π°ΡšΠ΅ со упатствата Π½Π° linter ΠΏΠΎΠ΄ Π·Π°ΠΊΠ°Π½Π° Π·Π° ΠΎΡ‚ΠΏΡƒΡˆΡ‚Π°ΡšΠ΅, Ρ‚ΡƒΠΊΡƒ ситС Ρ‡Π»Π΅Π½ΠΎΠ²ΠΈ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ Ρ‚ΠΈΠΌ ΠΊΠΎΠΈ Π²ΠΎ Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со YAML ΠΌΠΎΡ€Π° Π΄Π° користи само ΠΏΡ€Π°Π·Π½ΠΈ мСста (ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Π±Π°Ρ€Π° со ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° YAML).

Π’ΠΎ сСкој Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½ ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‡ Π½Π° тСкст, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Ρ‚Π°Π±ΠΎΠ²ΠΈΡ‚Π΅ Π·Π° автоматска ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΡ˜Π° Π½Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ Π±Ρ€ΠΎΡ˜ ΠΏΡ€Π°Π·Π½ΠΈ мСста, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ ќС ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π±ΡƒΠ½Ρ‚ Π½Π° ΠΊΠ»ΡƒΡ‡Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Ρ€Π·Π°Π½ΠΈΡ†ΠΈ Π’Π°Π±ΠΎΡ‚ Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΏΠ»Π°ΡˆΠΈΡ‚Π΅.

Како ΡˆΡ‚ΠΎ сСкој ΠΌΡ€Π°Π·ΠΈΡ‚Π΅Π» Π½Π° 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

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€