YAML рдЬрд╝реЗрди рдХреЗ рд▓рд┐рдП 10 рдХрджрдо

рд╣рдо рд╕рднреА рдХреЛ Ansible рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди Ansible YAML рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ: рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА, рдкреИрд░рд╛рдореАрдЯрд░-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ, INI рдлрд╝рд╛рдЗрд▓реЗрдВ, YAML, JSON, XML рдФрд░ рдХрдИ рдЕрдиреНрдпред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЙрди рд╕рднреА рдореЗрдВ рд╕реЗ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, YAML рдХреЛ рдЕрдХреНрд╕рд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрдард┐рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рддрд╛рдЬрд╝рд╛ рдЕрддрд┐рд╕реВрдХреНрд╖реНрдорд╡рд╛рдж рдФрд░ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, YAML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд╛рдпрдерди-рдЬреИрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

YAML рдЬрд╝реЗрди рдХреЗ рд▓рд┐рдП 10 рдХрджрдо

рдпрджрд┐ YAML рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВтАФрдФрд░ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рднреА рдЪрд╛рд╣рд┐рдП! - рдЕрдкрдиреА рдирд┐рд░рд╛рд╢рд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рддрдХ рдХрдо рдХрд░рдиреЗ рдФрд░ YAML рдХреЗ рд╕рд╛рде рдкреНрдпрд╛рд░ рдореЗрдВ рдкрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 10 рдХрджрдо рдЙрдард╛рдПрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╣реИ, рд╣рдорд╛рд░реА рджрд╕ рдпреБрдХреНрддрд┐рдпрд╛рдБ рд╢реБрд░реВ рд╕реЗ рд╣реА рдХреНрд░рдорд╛рдВрдХрд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреА, рд╣рдо рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдзреНрдпрд╛рди рдФрд░ рдЖрдзреНрдпрд╛рддреНрдорд┐рдХ рдЕрднреНрдпрд╛рд╕ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ ЁЯШЙ

0. рдЕрдкрдиреЗ рд╕рдВрдкрд╛рджрдХ рдХреЛ рдХрд╛рдо рдкрд░ рд▓рдЧрд╛рдпреЗрдВ

рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреМрди рд╕рд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рд╣реИ, рд╕рдВрднрд╡рддрдГ YAML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рддреБрд░рдВрдд рдвреВрдВрдвреЗрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред рдЦреЛрдЬ рдФрд░ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ YAML рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдмрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реЛрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрд╛рджрдХ рдкрд░рдорд╛рдгреБ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ YAML рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди GNU Emacs рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, yaml-рдореЛрдб.

YAML рдЬрд╝реЗрди рдХреЗ рд▓рд┐рдП 10 рдХрджрдо

YAML рдореЛрдб рдореЗрдВ Emacs рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдкрд╛рд╕ YAML рдореЛрдб рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдХреЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ GNOME рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ Gedit рдореЗрдВ YAML рдореЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ YAML рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

YAML рдЬрд╝реЗрди рдХреЗ рд▓рд┐рдП 10 рдХрджрдо

Gedit рдореЗрдВ рдЗрдВрдбреЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ред

рдПрдХ рдкреНрд▓рдЧрдЗрди рдбреНрд░реЙрд╕реНрдкреЗрд╕ рдЬреАрдПрдбрд┐рдЯ рдХреЗ рд▓рд┐рдП, рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдореЗрдВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░реЗрдВред рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рд╡рд╣ рдпрд╛ рдЙрд╕рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╕рдореБрджрд╛рдп YAML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдкрдЫрддрд╛рд╡рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

1. рд▓рд┐рдВрдЯрд░ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдФрд░ рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛рдПрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдХрдВрдкреНрдпреВрдЯрд░ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдпрддрд╛ рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд▓рд┐рдиреНрдЯреЗрд░рд╛. рдпрджрд┐ рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ 40 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдпрд╣ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реЗ рдЧреБрдЬрд░ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдЖрдк рдЕрднреА рднреА YAML рд▓рд┐рдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ yamllint рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП yamlint рдЖрдк рдорд╛рдирдХ рд▓рд┐рдирдХреНрд╕ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдВ Red Hat Enterprise Linux 8 рдпрд╛ рдлреЗрдбреЛрд░рд╛ рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

$ 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. рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦреЗрдВ, YAML рдореЗрдВ рдирд╣реАрдВ

рдпрджрд┐ YAML рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рди рд▓рд┐рдЦреЗрдВред рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ YAML рд╣реА рдПрдХрдорд╛рддреНрд░ рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬрд┐рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдордЭрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА, YAML рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдЬреЛ рдкрд╕рдВрдж рд╣реИ рдЙрд╕ рдкрд░ рд▓рд┐рдЦреЗрдВ рдФрд░ рдлрд┐рд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Python рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░реАрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ pyyaml рдФрд░ рджреЛ рд░реВрдкрд╛рдВрддрд░рдг рд╡рд┐рдзрд┐рдпрд╛рдБ: рд╕реНрд╡-рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдгред

рдЖрддреНрдо рд░реВрдкрд╛рдВрддрд░рдг

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓ рднреА рдПрдХ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ YAML рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЖрдк рдмрд╕ JSON рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рдпрдерди рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рдЖрдпрд╛рдд рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

#!/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 рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ.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 рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛ рдХрд┐ рдпрд╣ - рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЦреИрд░, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ JSON рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ 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 рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рджреЛрдиреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЛрдб рдХрд░рддреА рд╣реИ, рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рддреА рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ.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 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ 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.org рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ (рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ) рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝реЗрдВред рдпрджрд┐ рдЖрдкрдХреЛ YAML рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рдкрд╛рдП рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЕрдзреНрдпрд╛рдп 6.

5. рдЫрджреНрдо рд╡рд┐рдиреНрдпрд╛рд╕

рдХреЛрдИ рдХрд┐рддрд╛рдм рдпрд╛ рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВред YAML рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рд╣реИ. рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд╣реИ рдХрд┐ YAML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕ рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдЗрд╕рд▓рд┐рдП, YAML рдХреЛ рддрд░рд╛рд╢рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЫрджреНрдо рд╡рд┐рдиреНрдпрд╛рд╕ рдмрдирд╛рдПрдВред

рд╕реНрдпреВрдбреЛ-рдХреЙрдиреНрдлрд┐рдЧ рд╕реНрдпреВрдбреЛ-рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди, рдорд╛рддрд╛-рдкрд┐рддрд╛-рдмрдЪреНрдЪреЗ рдХреЗ рд░рд┐рд╢реНрддреЗ, рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рднреА рд╡реИрд╕рд╛ рд╣реА рд╣реИ: рдЬреИрд╕реЗ рд╣реА рдбреЗрдЯрд╛ рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЙрдарддрд╛ рд╣реИ, рдЖрдк рдЙрд╕рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рдмрдирд╛рддреЗ рд╣реИрдВред

YAML рдЬрд╝реЗрди рдХреЗ рд▓рд┐рдП 10 рдХрджрдо

рдЫрджреНрдо-рдХреЙрдиреНрдлрд┐рдЧ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ (рдорд╛рд░реНрдЯрд┐рди рдФрд░ рдЯреИрдмреАрдерд╛) рдФрд░ рдЙрдирдХреЗ рдХреМрд╢рд▓ (рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдБ: рдХреНрд░рдорд╢рдГ рдкрд╛рдпрдерди, рдкрд░реНрд▓, рдкрд╛рд╕реНрдХрд▓ рдФрд░ рд▓рд┐рд╕реНрдк, рдлреЛрд░рдЯреНрд░рд╛рди, рдПрд░рд▓рд╛рдВрдЧ)ред

рдХрд╛рдЧрдЬ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдкрд░ рдПрдХ рдЫрджреНрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдФрд░, рдпрджрд┐ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рд╡реИрдз YAML рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВред

6. рдЯреИрдмреНрд╕ рдмрдирд╛рдо рд╕реНрдкреЗрд╕реЗрд╕ рджреБрд╡рд┐рдзрд╛

рдЖрдкрдХреЛ рджреБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ "рдЯреИрдм рдпрд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди?". рд╡реИрд╢реНрд╡рд┐рдХ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд╕рдВрдЧрдарди рдХреЗ рд╕реНрддрд░ рдкрд░, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕реНрддрд░ рдкрд░ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рд╕реЗрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдорд╢реАрдиреЛрдВ рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░реНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, рдпрд╛ рдмрд░реНрдЦрд╛рд╕реНрддрдЧреА рдХреА рдзрдордХреА рдХреЗ рддрд╣рдд рд▓рд┐рдВрдЯрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдЦреНрдд рдЕрдиреБрдкрд╛рд▓рди рдХреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░рд╕реАрдж рд▓реЗрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреА рдЯреАрдо рдХреЗ рд╕рднреА рд╕рджрд╕реНрдп рдЬреЛ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ YAML рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ YAML рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред

рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ, рдЖрдк рдСрдЯреЛ-рд╕рд╣реА рдЯреИрдм рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдВрдЬреА рдЕрдиреБрдпрд╛рдпрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рджреНрд░реЛрд╣ рдЯреИрдм рдЖрдкрдХреЛ рдбрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ.

рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ YAML рд╕реЗ рдирдлрд░рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ, рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдЯреИрдм рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЬрдм рдХреБрдЫ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЖрдЦрд┐рд░реА рдЪреАрдЬ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдпрд╛рдж рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдм рд╡реЗ рдЕрдиреНрдп рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд╛рдВрдЪ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддреЗ рд╣реИрдВред рд╕рд╛рд░рдгреАрдХрд░рдг рд╡рдХреНрд░ рдпрд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмреНрд▓реЙрдХ рдХреА рдЦреЛрдЬ рдореЗрдВ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рдШрдВрдЯрд╛ рдмрд╕ рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рддрддреНрдХрд╛рд▓ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреАрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдмрд▓рд┐рдд рдХрдВрдХреНрд░реАрдЯ рдЬрд╛рдВрдЪ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд▓рд┐рдВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд┐рдЯ рд╣реБрдХ)ред

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 рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдордп рдХреЗ рд╕рд╛рде, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕реНрд╡рдпрдВ рдмрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд▓реБрдЖ рдпрд╛ рдкрд╛рдпрдерди рдореЗрдВ рд╕рд░рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред

YAML рдПрдХ рдмреЗрд╣рддрд░реАрди рдЪреАрдЬрд╝ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдЕрддрд┐рд╕реВрдХреНрд╖реНрдорд╡рд╛рдж рдФрд░ рд╕рд░рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдЙрдкрдХрд░рдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХрднреА-рдХрднреА рдЖрдк рдЗрд╕реЗ рдордирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. YAML рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЖрд╕рд╛рди рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рд╡рд┐рдлрд▓рддрд╛ рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рджрд░реНрдж рд░рд╣рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдмрдЪ рдЬрд╛рдПрдВрдЧреЗред

рдпрджрд┐ рдЖрдк YAML рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рддреЛ рдЗрди 10 рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдирд╛рдПрдВ рдФрд░ YAML рдХреЗ рдкреНрд░рддрд┐ рдЕрдкрдиреА рдирд╛рдкрд╕рдВрджрдЧреА рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рджреВрд░ рдХрд░ рд▓реЗрдВ!

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ