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, Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π² с настройками. НапримСр, ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΉ для GNOME тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Gedit Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌΠ° 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     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, прСдваряСтС это Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΎΠΉ 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": "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 послС Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²Π°, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π°ΠΉΡ‚ΠΈ Π½Π° yaml.org ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ спСцификации (спСки). Если Ρƒ вас трудности с YAML, Π½ΠΎ Π΄ΠΎ спСцификации Ρ€ΡƒΠΊΠΈ Ρ‚Π°ΠΊ ΠΈ Π½Π΅ дошли, Ρ‚ΠΎ ΠΏΠΎΡ€Π° эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Π‘ΠΏΠ΅ΠΊΠΈ Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Π»Π΅Π³ΠΊΠΎ написаны, Π° трСбования ΠΊ синтаксису ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ большим количСством ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² Π“Π»Π°Π²Π΅ 6.

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

ΠŸΡ€ΠΈ написании ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ всСгда ΠΏΠΎΠ»Π΅Π·Π½ΠΎ спСрва Π½Π°Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ»Π°Π½, хотя Π±Ρ‹ Π² Π²ΠΈΠ΄Π΅ оглавлСния. Π’Π°ΠΊ ΠΆΠ΅ ΠΈ с YAML. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ прСдставляСтС, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ» YAML, Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΈΡ… Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Π°ΡΡ‚ΡŒ YAML, нарисуйтС псСвдоконфиг.

ΠŸΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° псСвдокод, Π³Π΄Π΅ Π½Π΅ Π½Π°Π΄ΠΎ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ структурС ΠΈΠ»ΠΈ отступах, ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… Β«Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ-ΠΏΠΎΡ‚ΠΎΠΌΠΎΠΊΒ», наслСдовании ΠΈ влоТСнности. Π’Π°ΠΊ ΠΈ здСсь: Π²Ρ‹ рисуСтС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρƒ вас Π² Π³ΠΎΠ»ΠΎΠ²Π΅.

10 шагов ΠΊ YAML-Π΄Π·Π΅Π½Ρƒ

ΠŸΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ с пСрСчислСниСм программистов (Martin ΠΈ Tabitha) ΠΈ ΠΈΡ… Π½Π°Π²Ρ‹ΠΊΠΎΠ² (языков программирования: Python, Perl, Pascal ΠΈ Lisp, Fortran, Erlang, соотвСтствСнно).

Нарисовав псСвдоконфиг Π½Π° листС Π±ΡƒΠΌΠ°Π³ΠΈ, Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ ΠΈ, Ссли всС Π² порядкС, ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ Π² Π²ΠΈΠ΄Π΅ Π²Π°Π»ΠΈΠ΄Π½ΠΎΠ³ΠΎ YAML-Ρ„Π°ΠΉΠ»Π°.

6. Π”ΠΈΠ»Π΅ΠΌΠΌΠ° «табуляция ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹Β»

Π’Π°ΠΌ придСтся Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄ΠΈΠ»Π΅ΠΌΠΌΡƒ «табуляция ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹?Β». НС Π² глобальном смыслС, Π° лишь Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΠ»ΠΈ хотя Π±Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. НСваТно, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΏΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ пост-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° скриптом sed, настройка тСкстовых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… программистов ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠ³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ΅ взятиС расписок ΠΎ строгом соблюдСнии ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΉ Π»ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠΏΠΎΠ΄ ΡƒΠ³Ρ€ΠΎΠ·ΠΎΠΉ ΡƒΠ²ΠΎΠ»ΡŒΠ½Π΅Π½ΠΈΡ, Π½ΠΎ всС Ρ‡Π»Π΅Π½Ρ‹ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠ°ΡΠ°ΡŽΡ‚ΡΡ YAML, Π² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ порядкС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ (ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ спСцификация YAML).

Π’ любом Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠ·Π°ΠΌΠ΅Π½Ρƒ табуляции Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², поэтому Π±ΡƒΠ½Ρ‚Π° ΠΏΡ€ΠΈΠ²Π΅Ρ€ΠΆΠ΅Π½Ρ†Π΅Π² клавиши Tab ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ.

Как Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстно ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ нСнавистнику 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 Ρ€Π°Π· ΠΈ навсСгда!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com