ΠΡΠΈΡΠΊΠΈ ΠΎΠ±ΠΈΡΠ°ΠΌΠ΅ Ansible, Π½ΠΎ Ansible Π΅ YAML. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅: ΡΠΏΠΈΡΡΡΠΈ Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π΄Π²ΠΎΠΉΠΊΠΈ βΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡβ, INI ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, YAML, JSON, XML ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ. ΠΠ±Π°ΡΠ΅, ΠΏΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΈ, ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΡΡΡ YAML ΡΠ΅ΡΡΠΎ ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΡΡΠ΄Π΅Π½. Π ΡΠ°ΡΡΠ½ΠΎΡΡ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΠΎΡΠ²Π΅ΠΆΠ°Π²Π°ΡΠΈΡ ΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΡΠΌ ΠΈ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ Π½Π° YAML ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π΄ΠΎΡΠ°Π΄Π΅Π½ Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΡΠΈ, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΡΠ²Π°Ρ Python, ΠΊΡΠΌ ΠΎΡΡΡΡΠΏΠΈΡΠ΅.

ΠΠΊΠΎ YAML Π²ΠΈ Π΄ΡΠ°Π·Π½ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ β ΠΈ ΡΡΡΠ±Π²Π°! β Π΄Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ΅ΡΠ΅ 10 ΡΡΡΠΏΠΊΠΈ, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡΠ΅ ΡΠ°Π·Π΄ΡΠ°Π·Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠΈ Π΄ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π΄Π° Π·Π°ΠΎΠ±ΠΈΡΠ°ΡΠ΅ YAML. ΠΠ°ΠΊΡΠΎ Π΅ ΠΏΡΠΈ Π²ΡΠ΅ΠΊΠΈ ΠΈΡΡΠΈΠ½ΡΠΊΠΈ ΡΠΏΠΈΡΡΠΊ, Π½Π°ΡΠ°ΡΠ° Π΄Π΅ΡΠ΅ΡΠΊΠ° ΡΡΠ²Π΅ΡΠΈ ΡΠ΅ Π±ΡΠ΄Π΅ Π½ΠΎΠΌΠ΅ΡΠΈΡΠ°Π½Π° ΠΎΡ Π½ΡΠ»Π°, ΠΌΠ΅Π΄ΠΈΡΠ°ΡΠΈΡΡΠ° ΠΈ Π΄ΡΡ
ΠΎΠ²Π½ΠΈΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ π
0. ΠΠ°ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΡΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΊΠ°ΠΊΡΠ² ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈΠΌΠ°ΡΠ΅ β ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΏΠ»ΡΠ³ΠΈΠ½ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ YAML. ΠΠΊΠΎ Π½ΡΠΌΠ°ΡΠ΅ ΡΠ°ΠΊΡΠ², Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅ΡΠ΅ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅. ΠΡΠ΅ΠΌΠ΅ΡΠΎ, ΠΏΡΠ΅ΠΊΠ°ΡΠ°Π½ΠΎ Π² ΡΡΡΡΠ΅Π½Π΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅, ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠ»Π°ΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΡΠ΅ YAML.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° YAML ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π½ΠΎ Π·Π° GNU Emacs Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, .

Emacs Π² ΡΠ΅ΠΆΠΈΠΌ YAML Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΡΡΡΡΠΏΠΈΡΠ΅.
ΠΠΊΠΎ Π² Π»ΡΠ±ΠΈΠΌΠΈΡ Π²ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π½ΡΠΌΠ° YAML ΡΠ΅ΠΆΠΈΠΌ, ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΡΡΠ΅Π· Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΡ ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Gedit Π·Π° GNOME Π½ΡΠΌΠ° YAML ΡΠ΅ΠΆΠΈΠΌ, Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π½Π° YAML ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠ²Π°Ρ ΠΎΡΡΡΡΠΏΠΈΡΠ΅:

ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΎΡΡΡΡΠΏΠΈΡΠ΅ Π² Gedit.
ΠΠ»ΡΠ³ΠΈΠ½ΡΡ Π·Π° Gedit ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΡΡΡΡΠΏΠΈΡΠ΅ ΠΊΠ°ΡΠΎ ΡΠΎΡΠΊΠΈ, ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°ΠΉΠΊΠΈ Π½Π΅ΡΡΠ½ΠΎΡΠΈΡΠ΅ Ρ Π½ΠΈΠ²Π°ΡΠ° Π½Π° ΠΎΡΡΡΡΠΏΠ°.
Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, ΠΎΡΠ΄Π΅Π»Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ Ρ Π»ΡΠ±ΠΈΠΌΠΈΡ ΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ. Π Π°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΎΠΉ ΡΠ°ΠΌΠΈΡΡ ΠΈΠ»ΠΈ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠ° ΠΎΠ±ΡΠ½ΠΎΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ YAML, ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ΅Π·ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π½ΡΠΌΠ° Π΄Π° ΡΡΠΆΠ°Π»ΡΠ²Π°ΡΠ΅.
1. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π»ΠΈΠ½ΡΠ΅Ρ (linter)
Π ΠΈΠ΄Π΅Π°Π»Π½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ Π΅Π·ΠΈΡΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ Π΅Π·ΠΈΡΠΈΡΠ΅ Π·Π° ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΠΎΠΌΠΏΡΡΡΠΈΡΠ΅ ΡΠ΅ ΡΠΏΡΠ°Π²ΡΡ Π΄ΠΎΠ±ΡΠ΅ Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΡΡΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΎΡΠ΅ ΠΏΡΠ΅Π· 1978 Π³. ΠΠΊΠΎ ΠΏΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 40 Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π΅ ΠΌΠΈΠ½Π°Π»Π° ΠΏΠΎΠΊΡΠ°ΠΉ Π²Π°Ρ ΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ YAML Π»ΠΈΠ½ΡΠ΅Ρ, ΡΠΎ Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΠ±Π²Π°ΡΠ΅ yamllint.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΌΠΎΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π½Π° Linux. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² 8 ΠΈΠ»ΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΡΠ°ΠΊΠ°:
$ 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 ΠΈΠΌΠ° ΠΎΡΠ»ΠΈΡΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈ ΡΠ΅Π»ΠΈ Π΄Π²Π° Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅: ΡΠ°ΠΌΠΎΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅.
Π‘Π°ΠΌΠΎΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ°ΠΉΠ»ΡΡ Ρ Π΄Π°Π½Π½ΠΈ Π΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ 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: ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ Π³Π»ΠΎΡΠ°Ρ
Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΊΠΎΡΠ΅ΠΊΡΠ΅Π½ YAML, Π½ΠΎ yamllint ΡΠ΅ ΠΈΠ·Π΄Π°Π΄Π΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠ΅ Π½Π΅ Π·Π°ΠΏΠΎΡΠ²Π° Ρ β. Π, ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²ΠΈ ΡΡΡΠ½ΠΎ ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΊΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΡΠ°Π±ΠΎΡΠΈ Python-ΡΠΊΡΠΈΠΏΡΡΡ.
ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΡΠ²ΠΎ ΠΏΠΈΡΠ΅ΠΌ Π² JSON, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡΠ° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ Python ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π° Π΄Π°Π²Π° YAML. Π ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ, ΡΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΎ ΠΎΡ Π΄Π°Π½Π½ΠΈΡΠ΅.
ΠΠ° Π½Π°ΡΠ°Π»ΠΎ, Π½Π΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ JSON ΡΠ°ΠΉΠ» example.json; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΎΡ :
{
"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': 'Π‘Π΅Ρ', 'family': 'ΠΠ΅Π½Π»ΠΎΠ½', 'address': {'street': '51b Mornington Roadn', 'city': 'ΠΡΡΠΊΠ»ΠΈΠ½', 'state': 'Π£Π΅Π»ΠΈΠ½Π³ΡΡΠ½', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'ΠΠΎΠ±ΡΡ Π°ΡΡΠΈΠΊΡΠ». ΠΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΡ.'}
ΠΠΎ ΡΠ΅ΠΌΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡΠΈ ΠΈ ΠΌΠ΅ΡΡΠ½ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠΈ. Π’Π°ΠΊΠ° ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΊΠΎΠ»Π΅Π±Π°ΠΉΡΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ Π² ΡΡΡ ΡΠ°ΠΌΠΎ Π½Π΅ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌΠ° ΠΌΠΈΠ·Π΅ΡΠΈΡ.
4. Π§Π΅ΡΠ΅ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅
ΠΡΡΡΠ°ΠΉΠΊΠΈ ΡΠ΅ ΠΊΡΠΌ YAML ΡΠ»Π΅Π΄ Π΄ΡΠ»Π³Π° ΠΏΠ°ΡΠ·Π°, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΅ Π΄Π° ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ ΠΈ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ (ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠΈ). ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ Ρ YAML, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΠ΅ ΠΏΡΠΎΡΠ΅Π»ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ°, Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡΠ΅ ΡΠ° ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»Π½ΠΎ Π»Π΅ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ° ΠΈΠ»ΡΡΡΡΠΈΡΠ°Π½ΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π² .
5. ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
ΠΠΎΠ³Π°ΡΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠ½ΠΈΠ³Π° ΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΡ, Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡΡΠ²ΠΎ Π΄Π° ΡΡΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π΅Π½ ΠΏΠ»Π°Π½, ΠΏΠΎΠ½Π΅ Π² ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ Π΅ ΠΈ Ρ YAML. ΠΠ°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π° ΠΊΠ°ΠΊΠ²ΠΈ Π΄Π°Π½Π½ΠΈ Π΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π² YAML ΡΠ°ΠΉΠ»Π°, Π½ΠΎ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΈ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌ. ΠΠ°ΡΠΎΠ²Π°, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Ρ YAML, Π½Π°ΡΠΈΡΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³.
ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³ΡΡ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄, ΠΊΡΠ΄Π΅ΡΠΎ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ Π·Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΎΡΡΡΡΠΏΠΈΡΠ΅, ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡΠ° 'ΡΠΎΠ΄ΠΈΡΠ΅Π»-Π΄Π΅ΡΠ΅', Π½Π°ΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ΡΠΎ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½ΠΎΡΡΡΠ°. Π’ΡΠΊ ΡΡΡΠΎ: ΡΠΈΡΡΠ²Π°ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ΄Π²Π°Ρ Π² Π³Π»Π°Π²Π°ΡΠ° Π²ΠΈ.

ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³ Ρ ΠΈΠ·Π±ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈΡΠ΅ (ΠΠ°ΡΡΠΈΠ½ ΠΈ Π’Π°Π±ΠΈΡΠ°) ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΠΌΠ΅Π½ΠΈΡ (Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅: Python, Perl, Pascal ΠΈ Lisp, Fortran, Erlang, ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ).
Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ Π½Π°ΡΠΈΡΡΠ²Π°ΡΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ½ΡΠΈΠ³Π° Π½Π° Π±ΡΠΌΠ°, Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ ΠΈ, Π°ΠΊΠΎ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄, ΠΎΡΠΎΡΠΌΠ΅ΡΠ΅ Π³ΠΎ Π² Π²Π°Π»ΠΈΠ΄Π΅Π½ YAML ΡΠ°ΠΉΠ».
6. ΠΠΈΠ»Π΅ΠΌΠ°ΡΠ° 'ΡΠ°Π±ΡΠ»Π°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ'
Π©Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΠΈΡΠ΅ Π΄ΠΈΠ»Π΅ΠΌΠ°ΡΠ° . ΠΠ΅ Π² Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΡΠΌΠΈΡΡΠ», Π° ΡΠ°ΠΌΠΎ Π½Π° Π½ΠΈΠ²ΠΎ Π²Π°ΡΠ°ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ΅ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π°Π»ΠΈ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡ ΡΠΊΡΠΈΠΏΡ sed, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π·Π° ΡΡΡΠΎΠ³ΠΎ ΡΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠΊΠ°Π·Π°Π½ΠΈΡΡΠ° Π½Π° Π»ΠΈΠ½ΡΠ΅ΡΠ° ΠΏΠΎΠ΄ Π·Π°ΠΏΠ»Π°Ρ Π° ΠΎΡ ΡΠ²ΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° Π²Π°ΡΠΈΡ Π΅ΠΊΠΈΠΏ, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ Π½Π΅ΡΠΎ ΠΎΠ±ΡΠΎ Ρ YAML, Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°ΠΌΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ (ΠΊΠ°ΠΊΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° YAML).
ΠΡΠ² Π²ΡΠ΅ΠΊΠΈ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΡΠ»Π°ΡΠΈΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π±ΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π±ΡΠ½ΡΡΡ Π½Π° ΠΏΡΠΈΠ²ΡΡΠΆΠ΅Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΠ»Π°Π²ΠΈΡΠ° Tab Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈ ΠΏΠ»Π°ΡΠΈ.
ΠΠ°ΠΊΡΠΎ Π΅ Π΄ΠΎΠ±ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ Π½Π΅Π½Π°Π²ΠΈΡΡΠ½ΠΈΠΊ Π½Π° YAML, Π½Π° Π΅ΠΊΡΠ°Π½Π° Π½Π΅ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΡΠ»Π°ΡΠΈΠΈ ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ. Π ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ΡΠΎ Π½Π΅ Π΅ Π²ΠΈΠ΄ΠΈΠΌΠΎ, Π·Π° Π½Π΅Π³ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΡΠ΅ΡΠ°Ρ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ° ΠΏΡΠ΅Π³Π»Π΅Π΄Π°Π»ΠΈ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠ»ΠΈ ΠΈ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°Π»ΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π§Π°Ρ, ΠΏΡΠ΅ΠΊΠ°ΡΠ°Π½ Π² ΡΡΡΡΠ΅Π½Π΅ Π½Π° Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ½Π° ΡΠ°Π±ΡΠ»Π°ΡΠΈΡ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ, ΠΏΡΠΎΡΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠΎΠ»ΠΈΠ΄Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΡΠΏΠ°Π·Π²Π°Π½Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π· Git hook Π·Π° ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ ΠΏΡΠ΅Π· Π»ΠΈΠ½ΡΠ΅Ρ).
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 Π²Π΅Π΄Π½ΡΠΆ Π·Π°Π²ΠΈΠ½Π°Π³ΠΈ!
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
