Ansible: рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдореЗрдВ рддреИрдирд╛рдд рд╣реЛрдиреЗ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ group_vars рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рд╕рд┐рддре░ 2014  ┬╖  71рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ansible/ansible

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░:

рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ

рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдВрд╕реНрдХрд░рдг:

ansible 1.6.1

рд╡рд╛рддрд╛рд╡рд░рдг:

рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕

рд╕рд╛рд░рд╛рдВрд╢:

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реЛрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИ:

[service1]
www.host1.com

[service2]
www.host1.com

рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпреЗ рд╕рдореВрд╣_рдХрд╛рд░ рд╣реИрдВ:

group_vars/service1:
    database_host: "www.database.com"
    database_port:  3306

group_vars/service2:
    database_host: "www.differentdatabase.com"
    database_port:  3306

рдФрд░ рд╣рдо рдпрд╣ рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ:

- hosts: service1
  remote_user: root

рдпрджрд┐ рд╣рдо рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рддреА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ group_vars / service1 рдФрд░ group_vars / service2 рд╕реЗ рдЪрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ 1 рдХреЛ рд╕реЗрд╡рд╛ 2 рд╕рдореВрд╣ рдЪрд░ рдорд┐рд▓реЗрдВрдЧреЗ рдФрд░ рдЧрд▓рдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛрд╕реНрдЯ рдФрд░ рдкреЛрд░реНрдЯ рдорд┐рд▓реЗрдВрдЧреЗред

рдЗрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ DNS рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ (рдЙрдкрдирд╛рдореЛрдВ рдХреЛ www.host1-service.com рдкрд░ рдЬреЛрдбрд╝рд╛ рд╣реИ) рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ рдореЗрдЬрдмрд╛рди рдРрд╕рд╛ рджрд┐рдЦреЗ:

[service1]
www.host1-service1.com

[service2]
www.host1-service2.com

рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИ рдФрд░ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрд▓рдЧ рддрд░реАрдХреЗ рдХреНрдпрд╛ рд╣реИрдВ? (рдпрд╛ group_vars рдХреА рдЧрд▓рддрдлрд╣рдореА)

рдореИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдмрд╣реБ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рддреИрдирд╛рддреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

inventory/stage/hosts
inventory/stage/group_vars/
inventory/stage/group_vars/service1
inventory/stage/group_vars/service2

inventory/live/hosts
inventory/live/group_vars/
inventory/live/group_vars/service1
inventory/live/group_vars/service2
рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛:

рд╕рд╛рд░рд╛рдВрд╢ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:

рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╕рдордп group_vars рдХреЛ рджреВрд╕рд░реЗ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо:

рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╕рдордп group_vars рдХреЛ рджреВрд╕рд░реЗ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рддреЛ рдмреЗрд╡рдХреВрдл рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдореБрджреНрджреЗ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП, рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреБрдЫ рдмреЗрд╡рдХреВрдл рдбрд┐рдЬрд╛рдЗрди рджрд░реНрд╢рди (рдпрд╣) рдХреЗ рдХрд╛рд░рдг рдерд╛ред рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ group_var рдлрд╛рдЗрд▓реЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 71 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗрд░ рдХреЛ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдореЗрдЬрдмрд╛рди рд╕реЗ рдкрд╛рд░реНрд╕ рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛:

рд╣реЛрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓:

[aaa]
host1
host2

[bbb]
host2
host3

[aaa:vars]
foo=aaa

[bbb:vars]
foo=bbb

рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдкрд░ рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

$ ansible -i hosts aaa -m shell -a "echo {{ foo }}"
host1 | success | rc=0 >>
aaa

host2 | success | rc=0 >>
bbb

$ ansible -i hosts bbb -m shell -a "echo {{ foo }}"
host2 | success | rc=0 >>
bbb

host3 | success | rc=0 >>
bbb

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:

рдЪрд░ foo=aaa рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП asigned рд╣реИ aaa рдФрд░ рдЬрдм рд╕рдореВрд╣ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЖрджреЗрд╢реЛрдВ рдЪрд▓ рдЙрддреНрдкрд╛рджрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП aaa

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо:

host2 рд╕рдореВрд╣ bbb рд╕реЗ рдЪрд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

./group_vars/group1:

---
name: group1

./group_vars/group2

---
name: group2-default

рдореЗрдЬрдмрд╛рди рдлрд╝рд╛рдЗрд▓:

[group1]
host1

[group2]
host1

рдЗрд╕рд▓рд┐рдП, рдЬрдм рдореИрдВ рдХреЗрд╡рд▓ рдЧреНрд░реБрдк 1 рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ:
"рдирд╛рдо" рдЪрд░ рдПрдХ рдореВрд▓реНрдп "рд╕рдореВрд╣ 2-рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ `рдПрдХ рдореВрд▓реНрдп" GROUP1 "рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ред

рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрдИ рдпреБрдХреНрддрд┐ рд╣реИ?

рдпрджрд┐ рдЖрдк рдЙрд╕ рд╕рдореВрд╣, рдЕрдВрддрд┐рдо рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддрдм рднреА рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА var рдХрд╛ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдорд░реНрдЬ рдХреА рдЬреАрдд

рдмреНрд░рд╛рдпрди рдХреЛрдХрд╛

@bcoca рдХреНрдпреЛрдВ рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ?

рдЖрдкрдХреЗ рдкрд╛рд╕ var / рд╕реЗрд╡рд╛ (1,2,3, ...) рдлрд╛рдЗрд▓реЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ

рдФрд░ рд╕реЗрд╡рд╛ = 1 рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ

рддрдм рд╣реЛрд╕реНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рдЖрдкрдХрд╛ рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рд╕реЗрд╡рд╛ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ,
рд╕рд╛рде рд╣реА рдЖрдк рдХреМрди рд╕реА vars рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рд╣рдо рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
26 рдирд╡рдВрдмрд░ 2014 рдХреЛ 3:12 PM, "arianitu" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@bcoca https://github.com/bcoca рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕
рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░, рдпрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/ansible/ansible/issues/9065#issuecomment -64718173

рдореИрдВ рдЖрдЬ 1.8.4 рдкрд░ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИред
рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрд╣ рдПрдХ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВ?
рдХрд┐рд╕реА рдХреЛ рдкреНрд░рдЧрддрд┐ рдкрддрд╛ рд╣реИ?

рд╣рдореНрдоред рдпрд╣рд╛рдВ 'Bug_report' рдЬреИрд╕реЗ рдЯреИрдЧ рдЧрд▓рдд рд╣реИрдВред рдпрд╣ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди .. рдПрдХ рд╕реБрд╡рд┐рдзрд╛ :-)
рддреЛ рд╣рд╛рдБ, рдпрд╣ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ @shnnz рдиреЗ рдХрд╣рд╛, "

рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЪрд░ рдЬрд╣рд╛рдВ рдПрдХ рд╣реА рдореЗрдЬрдмрд╛рди рд╕рджрд╕реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рддрднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рд╡реЗ рд╕рдореВрд╣ рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛-рдмрдЪреНрдЪреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреАрддрдиреЗ рд╡рд╛рд▓рд╛ рдмрдЪреНрдЪрд╛, рдФрд░ рдпрд╣ рд╡реИрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдореВрд╣ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рдЬреАрддреЗрдЧрд╛ред

рдкреНрд▓реЗрдмреБрдХ рд╕рдордп рдкрд░ рдПрдХ рд╕рдореВрд╣ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЗрдЬрдмрд╛рди рдХреМрди рд╕реЗ рд░рди рдореЗрдВ рд╣реИрдВ, рдпрд╣ рдЪрд░ рд╕реНрддрд░ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдкрд░ рдореМрдЬреВрдж рддрд░реАрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛрд╕реНрдЯ рдФрд░ рдкреЛрд░реНрдЯ рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛрдЧреАред

@bcoca @ jimi-c рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@srvg рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ред рдореИрдВ group_vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдмрдВрдж рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдореВрд╣ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рддрд┐ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рдорддрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╣реЛрд╕реНрдЯ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ

рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рд╣рдо рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рд╕реНрдЯреЗрдЯрд┐рдХ рд╡рд░реНрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг (рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдлрд╛рдЗрд▓реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╣реИрдВрдбрд▓) рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдЧреНрд░реБрдк рд░рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдорд╛рди рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред рдПрдХ рдФрд░ рд╕рдореВрд╣

рд╕рдорд╛рди рд╣реЛрд╕реНрдЯрдирд╛рдо рдпрд╛ IP рдкрддреЗ рдХреЗ рд▓рд┐рдП CNAME рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рд╣реИ
рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореИрдВрдиреЗ рдкрд╛рдпрд╛ред рд╕рдорд╕реНрдпрд╛ рддрдм рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк Ansible Tower рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ,
рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдРрд╕реЗ CNAME рдХреЗ тАЛтАЛрд╕рд╛рде рдПрдХ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдиреНрд╕рд┐рдмрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдЗрд╕ рдмрдЧ рдХреЛ "рд╕реБрд╡рд┐рдзрд╛" рдХрд╣рдХрд░ рдареАрдХ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рд╣реИ рдЬреЛ рдЕрд╡рд╢реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ред
28 ╨Р╨┐╤А 2015 ╨│. 17:16 ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤М "SkaveRat" рд╕реВрдЪрдирд╛рдПрдВ @github.com
╨╜╨░╨┐╨╕╤Б╨░╨╗:

рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

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

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/ansible/ansible/issues/9065#issuecomment -97077453

рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред https://github.com/ansible/ansible/pull/6666

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

http://docs.ansible.com/playbooks_best_practices.html

рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрдЬрдмрд╛рди (рднреВрдорд┐рдХрд╛рдУрдВ) рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдореВрд╣реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рднреВрдЧреЛрд▓ рдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдВрдЯрд░ рд╕реНрдерд╛рди (рдпрджрд┐ рд▓рд╛рдЧреВ рд╣реЛ)

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдПрдХ рд╣реА рдореЗрдЬрдмрд╛рди рдореЗрдВ рдПрдХ рд╣реА рдЪрд░ рдХреЗ рд╕рд╛рде рдХрдИ рднреВрдорд┐рдХрд╛рдПрдБ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдореВрд╣ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдмреБрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХреЛ рдХреИрд╕реЗ рдмрд╛рдВрдзреЗрдВред рдореИрдВ рдПрдХ рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рддреИрдирд╛рдд рд╣реВрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рдеред

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА http://docs.ansible.com/ansible/playbooks_best_practices.html#staging -vs- рдЙрддреНрдкрд╛рджрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдХреЗ

рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ Ansible рдХреЗ рд╕рд╛рде? рдХреНрдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Ansible рдХреЗрд╡рд▓ рдмреБрд░рд╛ рд╣реИ?

рдХреГрдкрдпрд╛ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ "рдпрд╣рд╛рдБ рддрд░реАрдХрд╛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛрд╕реНрдЯ рдФрд░ рдкреЛрд░реНрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрд╕ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛрдЧреАред" рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╣рд╛рдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрд╡рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рдХреЗ рд▓рд┐рдП authentication_db_host: 127.0.0.1 рдордВрдЪ рдХреЗ рд▓рд┐рдП, рдФрд░ authentication_db_host: 192.168.2.4 рд▓рд╛рдЗрд╡ рдХреЗ рд▓рд┐рдП рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ 2 рдЪрд░ рд╣реЛрдВ?

authentication_db_host_stage: 127.0.0.1
authentication_db_host_live: 192.168.2.4

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

рдореБрдЭреЗ рдРрд╕рд╛ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реЛ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ:

AWS рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд:

рд╕реЛрдордкреА: рдареЗрд╕

playbook someapi.yml

  • рд╣реЛрд╕реНрдЯ: tag_someapi _ {{env}}
    рдЗрдХрдЯреНрдард╛_рдлреИрдХреНрдЯреНрд╕: рд╕рдЪ рд╣реИ
    рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: ec2- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
    vars_files:

    • vars / aws _ {{env}}

    рдХрд╛рд░реНрдп:

    • рд╡рд┐рдлрд▓: рд╕рдВрджреЗрд╢ = "Env рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП"
      рдХрдм: рдПрдирд╡реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
      рднреВрдорд┐рдХрд╛рдПрдБ:
    • рд╕реЛрдордкрддреА
      ...

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрди

ansible-playbook -vv someapi.yml -e "env = prod"

рднреВрдорд┐рдХрд╛рдПрдВ / рд╕реЛрдореЗрдкреА / рдХрд╛рд░реНрдп / main.yml

  • рдирд╛рдо: рдХреЗрд╡рд▓ vareapi рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ vars рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред
    рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ_рдХрд╛рд░: рд╕реЛрдордкреЗрдИ _ {{env}}ред yml
  • рдирд╛рдо: рдЬрдЧрд╣ рд╡рд┐рдиреНрдпрд╛рд╕
    рд╕рд╛рдБрдЪрд╛: src = config.j2
    рднрд╛рдЧреНрдп = {{someapi_install_directory}} / configuration.properties
    ...

рднреВрдорд┐рдХрд╛рдПрдБ / рд╕реЛрдореНрдкреЗрдИ / рд╡рд░реНрд╕ / рд╕реЛрдореЗрдкреА_рдкреНрд░реЛрдб.рдЗрдореНрд▓

рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди_рдбрдмреНрд▓реВ_рд╣реЛрд╕реНрдЯ: 192.168.2.4

рднреВрдорд┐рдХрд╛рдПрдБ / рд╕реЛрдореНрдкреЗрдИ / рд╡рд░реНрд╕ / рд╕реЛрдореЗрдкреА_рд╕реНрдЯреИрдЧ.рдЖрдИрдПрдордПрд▓

рдкреНрд░рдорд╛рдгреАрдХрд░рдг_рдбрдмреНрд▓реВ_рд╣реЛрд╕реНрдЯ: 127.0.0.1
...

рднреВрдорд┐рдХрд╛рдПрдВ / рд╕реЛрдореЗрдкреА / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / config.j2

рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди_рдбрдмреНрд▓реВ_рд╣реЛрд╕реНрдЯ = {{рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди_db_host}}
...

HTH,

рдЗрдпрд╛рди рд░рд╛рдЗрдЯ

рдпрд╣ рдИрдореЗрд▓ рд╕рдВрджреЗрд╢ рдЧреЛрдкрдиреАрдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ
рдКрдкрд░ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реИ, рдЗрд╕рд╕реЗ рдЫреВрдЯ рджреА рдЧрдИ рд╣реИ
рд▓рд╛рдЧреВ рдХрд╛рдиреВрди рдХреЗ рддрд╣рдд рдкреНрд░рдХрдЯреАрдХрд░рдгред рдпрджрд┐ рдЖрдк рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХрд░реЗрдВ
рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рдХреЛ рднреА рд╕рдВрджреЗрд╢ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдпрд╛ рдкреНрд░рд╕рд╛рд░ рди рдХрд░реЗрдВ
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕рдВрджреЗрд╢ рдЧрд▓рддреА рд╕реЗ рдорд┐рд▓рд╛ рд╣реИ, рдпрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ
рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ (рдУрдВ), рдХреГрдкрдпрд╛ рдкреНрд░реЗрд╖рдХ рдХреЛ рддреБрд░рдВрдд рд╡рд╛рдкрд╕реА рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ, рдФрд░
рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреА рд╕рднреА рдкреНрд░рддрд┐рдпрд╛рдВ рд╣рдЯрд╛ рджреЗрдВред

рд╢реБрдХреНрд░ рдкрд░, 16 рдЕрдХреНрдЯреВрдмрд░ 2015 рдХреЛ рджреЛрдкрд╣рд░ 12:42 рдмрдЬреЗ, arianitu рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЦрд╛рд╕ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдХреИрд╕реЗ рдмрд╛рдВрдзреЗрдВ
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд▓реЗрдмреБрдХред рдореИрдВ рдПрдХ рд╣реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рде
рдореИрдВ рдЬрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рддреИрдирд╛рддреА рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди
рд╕реЗрд╡рд╛ред

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ
http://docs.ansible.com/ansible/playbooks_best_practices.html#staging -vs-production,
рд╣рдорд╛рд░реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдХреЗ

рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ Ansible рдХреЗ рд╕рд╛рде? рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░ рдХреЗрд╡рд▓ рдЦрд░рд╛рдм рд╣реИ
рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрдзрд╛рд░рд┐рдд рддреИрдирд╛рддреА

рдХреГрдкрдпрд╛ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ "рдпрд╣рд╛рдБ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛
рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реЛрд╕реНрдЯ рдФрд░ рдкреЛрд░реНрдЯ рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрд╕реЗ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред "
рдореБрдЭреЗ рдЗрд╕рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╣рд╛рдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрд╡рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг_рдбрдмреНтАНрд▓реНтАНрдпреВрд╣реЛрд╕реНтАНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
рд╕реНрдЯреЗрдЬ рдХреЗ рд▓рд┐рдП 127.0.0.1, рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг_рдбреАрдмреА_рд╣реЛрд╕реНрдЯ: рд▓рд╛рдЗрд╡ рдХреЗ рд▓рд┐рдП 192.168.2.4ред рдХрд░
рдЖрдк рдореБрдЭреЗ 2 рдЪрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдкреНрд░рдорд╛рдгреАрдХрд░рдг_db_host_stage: 127.0.0.1
рдкреНрд░рдорд╛рдгреАрдХрд░рдг_db_host_live: 192.168.2.4

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

рдореБрдЭреЗ рдРрд╕рд╛ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реЛ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
рдЙрд╕ рдЪреАрдЬ рдХреА рддрд░рд╣ рдЬрд┐рд╕реЗ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/ansible/ansible/issues/9065#issuecomment -148816278

рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЪрд░ рдЬрд╣рд╛рдВ рдПрдХ рд╣реА рдореЗрдЬрдмрд╛рди рд╕рджрд╕реНрдп рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рддрднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рд╡реЗ рд╕рдореВрд╣ рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛-рдмрдЪреНрдЪреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреАрддрдиреЗ рд╡рд╛рд▓рд╛ рдмрдЪреНрдЪрд╛, рдФрд░ рдпрд╣ рд╡реИрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдореВрд╣ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рдЬреАрддреЗрдЧрд╛ред

рдХреНрдпрд╛ рдЕрдиреНрд╕рд┐рдмрд▓ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддрд╛ рд╣реИ?

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЦреБрдж рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВ:

  1. рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реЛрд╕реНрдЯ рд╕рдореВрд╣ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдореВрд╣ рдЪрд░ рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЪрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  2. рдЬрдм рдореИрдВ рдПрдХ рд╕рдореВрд╣ рдХреЛ рдкреНрд▓реЗрдмреБрдХ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдЙрди рд╕рднреА рд╣реЛрд╕реНрдЯ рдХреЛ рд▓реЗрдирд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
  3. рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдЯрдХ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕рдореВрд╣ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдореВрд╣ рд╣реЛрд╕реНрдЯ рдФрд░ рд╕рдореВрд╣ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЙрди рд╣реЛрд╕реНрдЯ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  4. рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рд╕рдореВрд╣ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрди рд╕рдореВрд╣реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЪрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореЗрдЬрдмрд╛рди рдХреЛ рдпрд╣ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪрд░ рд╕рдореВрд╣ рдорд╛рди рдкрд░ рд╕реЗрдЯ рд╣реИ; рддрдм рдХреНрдпреЛрдВрдХрд┐ рд╣реЛрд╕реНрдЯ рджреВрд╕рд░реЗ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдПрдХ рд╣реА рдЪрд░ рднрд┐рдиреНрди рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рдорд╛рди рдХреЛ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред

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

╨▓╤Б, 17 ╨▓╨╜╨▓ 2016, 20:00, рд╡рд┐рдХреНрдЯрд░ рд╡рд░реНрд╡рд╛рд░реБрдХ рд╕реВрдЪрдирд╛рдПрдБ @github.com:

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП
рдЬреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВ:

  1. рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реЛрд╕реНрдЯ рд╕рдореВрд╣ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдореВрд╣
    рд╡реИрд░рд┐рдПрдмрд▓ рдЗрд╕ рдмрд╛рдд рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП
    рд╕рдореВрд╣ред
  2. рдЬрдм рдореИрдВ рдкреНрд▓реЗрдмреБрдХ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдореВрд╣ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ
    рд╕рднреА рдореЗрдЬрдмрд╛рди рд▓реЗрдВ рдЬреЛ рдЙрд╕ рд╕рдореВрд╣ рдХреЗ рд╣реИрдВред
  3. рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдЯрдХ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ
    рдХреМрди рд╕рд╛ рд╕рдореВрд╣ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕рдореВрд╣ рдореЗрдЬрдмрд╛рди рдФрд░ рд╕рдореВрд╣ рдХреЛ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
    vars - рдЙрди рдпрдЬрдорд╛рдиреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  4. рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдПрдХ рдореЗрдЬрдмрд╛рди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрди рд╕рдореВрд╣реЛрдВ рдХреЗ рдкрд╛рд╕ рд╣реИ
    рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЪрд░, рдореЗрдЬрдмрд╛рди рдХреЛ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣
    рдкрд╣рд▓реЗ рд╕рдореВрд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЪрд░ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИ
    рдореВрд▓реНрдп; рддрдм рдХреНрдпреЛрдВрдХрд┐ рд╣реЛрд╕реНрдЯ рджреВрд╕рд░реЗ рд╕рдореВрд╣ рдХреЗ рд╕рдорд╛рди рдЪрд░ рдХрд╛ рд╣реИ
    рдкрд┐рдЫрд▓реЗ рдорд╛рди рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрд▓рдЧ рдорд╛рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/ansible/ansible/issues/9065#issuecomment -172353019

рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдореЗрдВ рдореЗрд░рд╛ рд╡реИрдЧреНрд░реЗрдВрдЯ рдмреЙрдХреНрд╕ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдореИрдВ рдПрдХ рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдореВрд╣ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рддреЛ рдЕрдиреНрд╕рд┐рдмрд▓ рдЕрдиреНрдп рд╕рдореВрд╣реЛрдВ рд╕реЗ рдЪрд░ рдореЗрдВ рдЦреАрдВрдЪ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЙрдирдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред

28 рдЕрдкреНрд░реИрд▓ 2016 рдХреЛ 17:55 рдкрд░, рдлрд┐рд▓рд┐рдк рд╡рд┐рдЧ рдиреЗ рд╕реВрдЪрдирд╛рдПрдВ @github.com рдХреЛ рд▓рд┐рдЦрд╛:

рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИред

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЬрд┐рд╕ рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдирд╣реАрдВ рд╣реИ
рдПрдХ рд╕рд╣реАред

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдореЗрдВ рд╕рд┐рд░реНрдл рдореЗрд░рд╛ рд╡реИрдЧреНрд░реЗрдВрдЯ рдмреЙрдХреНрд╕ рд╣реИ
рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЙрджреНрджреЗрд╢реНрдпред

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдореИрдВ рдПрдХ рдкреНрд▓реЗрдмреБрдХ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдореВрд╣ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ,
рдЕрдиреНрд╕рд┐рдмрд▓ рдЕрдиреНрдп рд╕рдореВрд╣реЛрдВ рд╕реЗ рдЪрд░ рдореЗрдВ рдЦреАрдВрдЪ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЯреВрдЯ рд░рд╣рд╛ рд╣реИ
рдореЗрд░рд╛ рдкрд░реАрдХреНрд╖рдгред

рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдХреЛ рдХрд╕рдХрд░ рдордд рджреЗрдЦреЛ рдЬреИрд╕реЗ рдХрд┐ рдкреНрд▓реЗрдмреБрдХ рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рд╣реИред рдЗрдиреНрд╡реЗрдВрдЯрд░реА
рдПрдХ рдмрд╣реБрдд рдЕрд▓рдЧ рдмрд╛рдд рд╣реИ, рдЬрд╣рд╛рдВ

  • рдореЗрдЬрдмрд╛рди рдХрдИ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рджрд╕реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕рд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
    ansible (ad-hoc) рдпрд╛ ansible-playbook (playbooks) рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ
    рд╕рдореВрд╣ рдЬреЛ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рджрд╕реНрдп рд╣реИрдВред
  • рд╡реИрд░рд┐рдПрдмрд▓-рд╡рд╛рдЗрдбрд┐рдВрдЧ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдЖрдк рд▓рдХреНрд╖реНрдп рдХрд░реЗрдВ
    рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдореВрд╣, рдпрд╛ рдСрд▓рдорд╛рдЗрдЯреА рдмрд┐рд▓реНрдЯ-рдЗрди 'рд╕рднреА' рд╕рдореВрд╣, рд╡рд╣ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ
    рдЪрд░ рд╕рднреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ, рд╣рд▓ рдХрд┐рдП рдЧрдП рдФрд░ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рд╣реИрдВ
    рд╕реВрдЪреА рдореЗрдВ рдореМрдЬреВрдж рд╕рдореВрд╣ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдФрд░ рд╕рднреА рд╕рдореВрд╣ рдЪрд░ред

HTH,

рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрдкрдбрд╝рд╛

рдореИрдВ рдЗрд╕рдореЗрдВ рднреА рдЯрдХрд░рд╛ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реА рдПрдХ рднреВрдорд┐рдХрд╛ рд╣реИ рдЬреЛ vhosts рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИред рдореИрдВ рд╕рд░реНрд╡рд░ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ vhosts рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдореЗрдВ рдХрдИ vhosts рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП vhosts рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд▓рдЧрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рддрдм рдЖрддреА рд╣реИ рдЬрдм рдореЗрдЬрдмрд╛рди рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдореЗрдВ vhost рдРрд░реЗ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рд╕рдореВрд╣ рдЬреАрдд рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрдзреЗ рдореЗрд░реЗ vhosts рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдореВрд╣ рдореЗрдВ рдмрдЬрд╛рдп рдореЗрдЬрдмрд╛рди рдореЗрдВ vhosts рдбрд╛рд▓реЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдл рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЙрди рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рд╣реА рд╕рдореВрд╣ рдореЗрдВ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдпрд╛ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдкрдиреА "vhosts" рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдХрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдпрд╛ рд╕реВрдЪреА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, vhosts рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдПрдХ vhost рдЗрд╕ рдЕрд░реНрде рдореЗрдВ "рднреВрдорд┐рдХрд╛" рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕рд░реНрд╡рд░ рд╕реЗ рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ "рдЖрдк рд╣реИрдВ" a vhost ")ред рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдХрд░рдиреЗ рдпрд╛ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╡реИрд╕реЗ, @ рдПрд╕рдЖрд░рд╡реАрдЬреА , рдиреЗ рдореБрдЭреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдФрд░ рдореЗрд░реА рд╕рдордЭ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ

[рд╕реЗрд╡рд╛ рез]
host1 ansible_ssh_user = host1.com

[рд╕реЗрд╡рд╛ реи]
host2 ansible_ssh_user = host1.com

рдпрд╣ рддреЛ рдмреЗрд╡рдХреВрдл рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдореБрджреНрджреЗ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП, рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреБрдЫ рдмреЗрд╡рдХреВрдл рдбрд┐рдЬрд╛рдЗрди рджрд░реНрд╢рди (рдпрд╣) рдХреЗ рдХрд╛рд░рдг рдерд╛ред рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдХрдИ group_var рдлрд╛рдЗрд▓реЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдореБрдЭреЗ рдмрд╣реБрдд рдкрд╕рдВрдж рдЖрдпрд╛ рдХрд┐ group_vars рдХреЛ рдЕрдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ> рдбреЗрдЯрд╛рд╕реЗрдЯрд░> рдкрд░реНрдпрд╛рд╡рд░рдг (рдЗрдВрдЯрд┐рдЧ, рдбреЗрд╡реЗрд▓, рдкреНрд░реЛрдбрдХреНрдЯреНрд╕)> рдПрдкреНрд▓реАрдХреЗрд╢рди> рд╣реЛрд╕реНрдЯ

рдХрдардкреБрддрд▓реА рд╣рд┐рд░рд╛ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рджрд░реНрдж рд╣реИ, рдФрд░, рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП> 100 рдкреНрд▓реЗрдмреБрдХ / рднреВрдорд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ vars_file + group_vars рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ (vars_priority) рдореЗрдВ рдХреЛрдИ рдЯреИрдЧ рд╣реЛ рдпрд╛ рд▓реЛрдбрд┐рдВрдЧ рдСрд░реНрдбрд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЪреНрдЫрд╛ рд╣реЛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрд╛рдЪреЗ)

  • all.yml
  • 10_рдбрд╛рдЯрд╛рд╕реЗрдВрдЯрд░_рдП.рдорд▓
  • 10_рдбрд╛рдЯрд╛рд╕реЗрдВрдЯрд░_ рдмреА.рдЖрдИрдПрдордПрд▓
  • 20_env_production.yml
  • 40_app_gitlab.yml

рдЙрд╕рдХреЗ рдмрд╛рдж gitlab рд╕рдореВрд╣ рдирд╛рдо рдкреНрд░рддрд┐ рд▓реЛрдб рдХрд░реЗрдВ, рдпрд╣рд╛рдБ datacenters, env рдХреЗ рдмрд╛рдж, рдФрд░ рдРрдк рдХреЛ рд▓рд╛рд╕реНрдЯ рдХрд░реЗрдВред

рдореИрдВ рдпрд╣ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдБ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрдХрд╡рд╛рд╕ рдореЗрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБ! рд╕рдореВрд╣ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣реЛрд╕реНрдЯ рдЕрд╡рдзрд┐ рдХреЗ HIS рд╕рдореВрд╣ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреИрд╕реЗ - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕реЛрдЪрдиреЗ рдХрд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ: рдареАрдХ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдирд╛рдЯрдХрдкреБрд╕реНрддрдХ рдХреЛ "рдЙрд╕" рд╕рдореВрд╣ рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕реАрдорд┐рдд" рдХрд░рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХреЗ !!!! рдПрдХ рд╣реА рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ!

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдПрдХ рд╣реА рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдХрдИ DNS рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реВрдВред

рдмрд╕ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдШреВрдордиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдореЗрд░рд╛ рд╕рд┐рд░ рдкреАрдЯрдиреЗ рдореЗрдВ рдХрдИ рдШрдВрдЯреЗ рд▓рдЧреЗред рдЪрдЯрдХрд╛рд░реЗ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдореБрджреНрджрд╛ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрд░рд╛рди рд╣реВрдВ

рдХреНрдпреЛрдВ var_vars рдЕрдореВрд░реНрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдХрд░ vars рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИ
рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИ?

рдореИрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрд┐рд╕рдореЗрдВ var рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
(рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдЙрджрд╛рд╣рд░рдг рдзрд╛рдЧреЗ рдореЗрдВ рдКрдкрд░ рд╢рд╛рдорд┐рд▓ рд╣реИ)

рдЗрдпрд╛рди рд░рд╛рдЗрдЯ

рдпрд╣ рдИрдореЗрд▓ рд╕рдВрджреЗрд╢ рдЧреЛрдкрдиреАрдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЗрд╡рд▓ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ
рдКрдкрд░ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реИ, рдЗрд╕рд╕реЗ рдЫреВрдЯ рджреА рдЧрдИ рд╣реИ
рд▓рд╛рдЧреВ рдХрд╛рдиреВрди рдХреЗ рддрд╣рдд рдкреНрд░рдХрдЯреАрдХрд░рдгред рдпрджрд┐ рдЖрдк рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХрд░реЗрдВ
рдЗрдЪреНрдЫрд┐рдд рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рдХреЛ рднреА рд╕рдВрджреЗрд╢ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдпрд╛ рдкреНрд░рд╕рд╛рд░ рди рдХрд░реЗрдВ
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рд╕рдВрджреЗрд╢ рдЧрд▓рддреА рд╕реЗ рдорд┐рд▓рд╛ рд╣реИ, рдпрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ
рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ (рдУрдВ), рдХреГрдкрдпрд╛ рдкреНрд░реЗрд╖рдХ рдХреЛ рддреБрд░рдВрдд рд╡рд╛рдкрд╕реА рдИрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ, рдФрд░
рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреА рд╕рднреА рдкреНрд░рддрд┐рдпрд╛рдВ рд╣рдЯрд╛ рджреЗрдВред

Tue рдкрд░, 27 рд╕рд┐рддрдВрдмрд░, 2016 рдХреЛ рд╕реБрдмрд╣ 11:53 рдмрдЬреЗ, Jason Hane рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдмрд╕ рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рдФрд░ рдореЗрдЬ рдкрд░ рд╕рд┐рд░ рдкрдЯрдХрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
рдЗрд╕ рдореБрджреНрджреЗред рдЪрдЯрдХрд╛рд░реЗ рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдореБрджреНрджрд╛ рдореБрдЭреЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ
рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп Ansible (рдпрд╛ Red Hat) рдЗрд╕реЗ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд░рд╣рд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/ansible/ansible/issues/9065#issuecomment -249961581,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AATjccSt7D7FJfzdA8r86kb1GQvxLBnaks5quWY4gaJpZM4Cjj4
ред

рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдВрд╕рд┐рдмрд▓ рдкрд╛рд░реНрд╕ рдЪрд░ рдХреИрд╕реЗред рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╕реЛрдЪрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЧреНрд░рд╕реНрдд рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ) рдЬреЛ рдПрдХ рд╕рдореВрд╣ рдХреЛ рдПрдХ рдореЗрдЬрдмрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рд╕рдореВрд╣ рдХреЛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЙрд╕ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХрд╛ рд╡рд╛рд░рд┐рд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрди рд╕рднреА рд╕рдореВрд╣реЛрдВ рдХрд╛ рдирд╣реАрдВ рдЬреЛ рдореЗрдЬрдмрд╛рди рдореЗрдВ рд╣реИред

рд╕рднреА рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рдПрдХ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рддрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдзрд╛рд░рдгрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдВрдЬрд╝рд┐рдмрд▓ рдЙрди рд╕рднреА рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЪрд░ рдкрдХрдбрд╝ рд▓реЗрдЧрд╛ рдЬреЛ рд╣реЛрд╕реНрдЯ рдореЗрдВ рд╣реИрдВред ред

рдХреНрдпреЛрдВ var_vars рдЕрдореВрд░реНрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдХрд░ vars рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИ
рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИ?

рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдЕрдореВрд░реНрдд рдХреА рдмрд╛рдд рд╣реИ! рдпрджрд┐ рдЙрдкрдХрд░рдг рдореБрдЭреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЕрдореВрд░реНрдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЕрдиреБрдорд╛рди рдХреЗ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдпрд╣ рдШрдЯрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?! рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ 2 рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ: рдирд┐рдпрдо рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ рдпрд╛ рдЕрдореВрд░реНрдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ vars рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ group_vars рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕рдордЭрд╛рдПрдВ?

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рд╣реА рдореЗрдЬрдмрд╛рди рдХреЗ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ group_vars рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдорд▓рд╛ рдореЗрдЬрдмрд╛рди рдореЗрдВ рдмрд╣реБрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗрд╡рд╛ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдореМрдЬреВрдж рд╣реИрдВ (рдЙрджрд╛ред рдЕрдкрд╛рдЪреЗ)ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЬрд▓реНрдж рд╕реБрд▓рдЭ рдЬрд╛рдПрдЧреАред

рд╣рдордиреЗ рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдореВрд╣реЛрдВ рдХреЗ рдмреАрдЪ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЪрд░ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдРрдк / рдПрдирд╡реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд▓рд┐рдпрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

app_collectd.yml
collectd_host: "{{env_collectd_host}}"

env_production.yml
env_collectd_host: 1.1.1.1

рддрдм рдпрд╣ рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдРрдк рд╡реИрд░рд┐рдПрдмрд▓ рд╣реИ + рдХреНрд░рд╛рд╕ рдХреЙрд▓рд┐рдВрдЧ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реИрд░рд┐рдПрдмрд▓

рдореИрдВ рдХрдардкреБрддрд▓реА-рднреВрдорд┐ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реВрдБ рдЬрд╣рд╛рдБ рдЕрдореВрд░реНрдд рдФрд░ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╢рд╛рдпрдж рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ Group_vars рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ рд╕рднреА рдХрд╛рдиреЛрдВ рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдБрдЪрддрд╛ рд╣реВрдБред рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╣реЛрд╕реНрдЯ рдпрд╛ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХрд╛ рдПрдХ рдФрд░ рд╕реЗрдЯ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрд╕реЗ рдХрд╣рд╛рдВ рдЪрд░ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рд┐рдП рдЬреЛ рдврд╛рдВрдЪреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХрдардкреБрддрд▓реА рдореЗрдВ рд╣рд┐рд░рд╛ рдХреА рд╕реБрдВрджрд░рддрд╛ рд╣реИред

@hyojinbae

рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ

[рд╕реЗрд╡рд╛ рез]
host1 ansible_ssh_user = host1.com

[рд╕реЗрд╡рд╛ реи]
host2 ansible_ssh_user = host1.com

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

[service1]
host1 ansible_host=192.168.0.10

[service2]
host2 ansible_host=192.168.0.10

рдПрдХ рдФрд░ рд╢рд┐рдХрд╛рд░ рдпрд╣рд╛рдБред

рдХрд┐рд╕реА рдХреЛ рднреА рдирд┐рдореНрди рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдРрдк-рдП, рдРрдк-рдмреА, рдРрдк-рд╕реА) рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдФрд░ DR / рд▓реЛрдб-рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 2 DC рдореЗрдВ 4 рд╣реЛрд╕реНрдЯ рд╣реИрдВред рдореИрдВ рддреИрдирд╛рддреА рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореЗрд░реА рдкрд╣рд▓реА рд╡реГрддреНрддрд┐ рд╕рдореВрд╣ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдореИрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛, рд▓реЗрдХрд┐рди рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ?

рд╕реВрдЪреА

[dc1]
host1
host2

[dc2]
host3
host4

[cluster:children]
dc1
dc2

[app-a:children]
cluster

[app-b:children]
cluster

[app-c:children]
cluster

group_vars
рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рдПрдХ

http_port: 8081

рдРрдк-рдмреА

http_port: 8082

рдРрдк-рд╕реА

http_port: 8083

рдкреНрд▓реЗрдмреБрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ рдХрд┐ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рдХрдорд╛рдВрдбрд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП:

- host: {{app-name}}
- tasks: 
  # deploy application with given {{http_port}}....

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдЗрд╕реЗ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ

- hosts: "{{ app-name }}"

vars_files:
    - "vars/{{ app-name }}.yml"

@ рдереИрдВрдЬ рдереИрдВрдХреНрд╕ , рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рджрд┐рд╢рд╛ рдХреА рдУрд░
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдореИрдВ рдХреЛрдб рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЗрдЪреНрдЫреБрдХ рд╣реВрдВ, рдФрд░ рд╕реАрдзреЗ рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рддрд┐ рдРрдк рдореЗрдВ рдПрдХ рдкреНрд▓реЗрдмреБрдХ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рднреВрдорд┐рдХрд╛ рдХреЗ рдареАрдХ рдмрдЧрд▓ рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдкреВрд░реЗ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред

@ рд╢рд╣рдЬрд╛рдж рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╢рд╛рдирджрд╛рд░ рд╣реИред рддреБрдордиреЗ рдореБрдЭреЗ рдмрдЪрд╛рдпрд╛ред

@ рд╢рд╣рдЬ рдЬреАрдирд┐рдпрд╕!

рдореИрдВ рдмрд╣реБрдд рд╣реИрд░рд╛рди рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдореБрджреНрджрд╛ рднреА рд╣реИред рдореИрдВ рдЗрд╕рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рднреВрдорд┐рдХрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдХрдИ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ group_var рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдХреНрдпреВрдП / рдкреНрд░реЛрдбрдХреНрдЯ рдореЗрдВ, рдпрд╣ рдПрдХ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рд╕рдореВрд╣ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХреАрдХрд░рдг рд╕реНрддрд░ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд┐рдВрдЧрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рддреЛрдбрд╝рддреЗ рд╣реИрдВ (рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ)ред

Hanej рдХреА рд╕рд▓рд╛рд╣ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдиреА playbook yml рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ group_var рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛:

hosts: publish
vars_files:
  - group_vars/publish.yml

"рдпрд╣ рдмрд╣реБрдд рдмреЗрд╡рдХреВрдл рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдЪрд░ рдореБрджреНрджреЗ рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП, рдХреЗрд╡рд▓ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреБрдЫ рдмреЗрд╡рдХреВрдл рдбрд┐рдЬрд╛рдЗрди рджрд░реНрд╢рди (рдпрд╣) рдХреЗ рдХрд╛рд░рдг рдерд╛ред рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рдХрдИ group_var рдлрд╛рдЗрд▓реЗрдВ рд▓реЛрдб рд╣реЛрддреА рд╣реИрдВред рдЙрд╕реА рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдПред "

рдмрд╕ рдЗрд╕ "ISSUE" / "рд╕реАрдорд╛" рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдареАрдХ рд╣реИ, рд╣рдо рд╕рдВрдШрд░реНрд╖ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, (рдореЗрдЬрдмрд╛рди рдХреЗ рд╕рд╛рде рдпрд╛ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ)
рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ansible.cfg рдореЗрдВ рдЙрджреНрджреЗрд╢реНрдп рдЪрд░ рд╣реЛ:
"рд╕рдореВрд╣_рдХрд╛рд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ" рдпрд╛ "рд╕рдореВрд╣_рдХрд╛рд░ рд╡рд┐рд▓рдп рдХрд░реЗрдВ"

рдореИрдВ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ group_vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╕рдореВрд╣реЛрдВ (рдбреАрд╕реА, рдкрд░реНрдпрд╛рд╡рд░рдг, рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рдЖрджрд┐) рдореЗрдВ рдореЗрдЬрдмрд╛рди рд╣реИрдВ рдФрд░ рдЪрд░ рдХреИрд╕реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред рд╣рд┐рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрдардкреБрддрд▓реА рд╕реЗ рдЖрдЧреЗ рдЖрдирд╛ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдмрд╛рдд рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдВрд╕рд┐рдмрд▓ рдХреЛ "рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓" рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╣рд┐рд░реЗ рдХреА рддрд░рд╣ рдХреБрдЫ рдХреЛ рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд╣рд╛рдВ рдЖрдк рддрдереНрдпреЛрдВ рдпрд╛ рд╕рдореВрд╣реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЪрд░ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдм рдКрдкрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ "/ рд▓рд┐рдирдХреНрд╕ рд╣реЛрд╕реНрдЯреНрд╕ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЬрд╛рд╡рд╛ / рд╡реЗрдмрд╕рд╛рдЗрдЯ" рдирд╛рдордХ рднреВрдорд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╣реЛрд╕реНрдЯ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд▓рд┐рдирдХреНрд╕ рд╣реЛрд╕реНрдЯреНрд╕ рд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдЪрд░ рдЬреИрд╕реЗ sysctl, DNS, NTP, рдЖрджрд┐), рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╡реИрд╢реНрд╡рд┐рдХ) рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрддрд░ рдЪрд░), рдЬрд╛рд╡рд╛ (рдЬрд╛рд╡рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдЬреИрд╕реЗ JDK рд╕рдВрд╕реНрдХрд░рдг, JAVA_HOME, рдЖрджрд┐), рдФрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░)ред рдЖрдЧреЗ рдЖрдк рдкреЗрдбрд╝ рдореЗрдВ рдиреАрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░ рдмрди рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЪрд░ рдХреЛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

2 рд╕рд╛рд▓ рдмрд╛рдж, рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдИ-рдореЗрд▓ рдХреА рдПрдХ рд╕реНрдерд┐рд░ рдзрд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдпрд╣ рдЗрд╕ рдЧреАрдереВрдм рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред) рдХреНрдпрд╛ рдЕрднреА рднреА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдмрд╣реБрдд рд╣реИ рдЕрдЪреВрдХ?

рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреНрд░рд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдВрд╕реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдкрд╛рд╕ рднрдпрд╛рдирдХ рд╕рдордп рд╣реИред

рд╣рдордиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ Ansible рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрди, рдЕрд╡рдзрд┐ рдореЗрдВ рдмреЗрдХрд╛рд░ рд╣реИред

рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╢реБрднрдХрд╛рдордирд╛рдПрдВред

рд╣рд╛рдБ, рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рдЬрдм рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рднрд┐рдиреНрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рддреА рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред рдореИрдВ рдкреВрд░реЗ {{рдРрдк-рдирд╛рдо}} - {{env}} рдХреЛ рдЕрдкрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред @ рдорд┐рдВрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд yml рд╡рд┐рдзрд┐, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП group_vars рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБред

рд╣реИрдкреНрдкреА рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рджреАрд╡рд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдореЗрд░реЗ рд╕рд┐рд░ рдкрд░ рдХрдИ рдШрдВрдЯреЛрдВ рддрдХ рдкреАрдЯрдиреЗ рдХреЗ рдмрд╛рдж рдорд┐рд▓рд╛ ... рдФрд░ рдореИрдВ рдЗрд╕реЗ "рдлреАрдЪрд░" рдХрд╣рдХрд░ рдЗрд╕ рдмрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд░рд╡реИрдпреЗ рд╕реЗ рдмреЗрд╣рдж рд╣реИрд░рд╛рди рд╣реВрдВ, рдпрд╣ рдкрд╣рдЪрд╛рди рд╕реЗ рдкрд░реЗ рдмреЗрд╡рдХреВрдлреА рд╣реИред

рдореИрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддреИрдирд╛рддреА рдкреНрд▓реЗрдмреБрдХ / рднреВрдорд┐рдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

{
  "resource-service_ci": {
    "vars": {
      "nginxpool": "resource_pool",
      "httpport": "8800"
    },
    "hosts": ["host1.example.com", "host2.example.com"]
  },
  "example-service_ci": {
    "vars": {
      "nginxpool": "example_pool",
      "httpport": "8100"
    },
    "hosts": ["host1.example.com","host3.example.com"
    ]
  }
}

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

рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ json рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ @hanej рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

_ "рд╣реЛрд╕реНрдЯ": ["host1 ansible_host = host1.example.com", "host2 ansible_host = host2.example.com"] _

рд▓реЗрдХрд┐рди Ansible рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ host1 ansible_host = host1.example.com рдХреЛ ssh рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ

рдХрд┐рд╕реА рдФрд░ рдХреЛ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╕рдВрднрд╡ рд╣реИ рддреЛ рдПрдХ рд╕рдВрднрд╡ рд╕рдорд╛рдзрд╛рди?

рдореИрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдкреЛрд░реНрдЯ рдФрд░ рдкреВрд▓ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдмрджрд╕реВрд░рдд рд▓реБрдХрдЕрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдмрдЧ рд╕реЗ рдЯрдХрд░рд╛рдиреЗ рддрдХ Ansible рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдордп рдерд╛ред

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

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

рдХреГрдкрдпрд╛, рдЗрд╕реЗ рдареАрдХ рдХрд░рд╡рд╛ рджреЗрдВред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдШреВрдордиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдШрдВрдЯреЛрдВ рдореЗрд░реЗ рд╕рд┐рд░ рдХреЛ рдкреАрдЯрддреЗ рд░рд╣реЗред рдХреГрдкрдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВред

рдЗрд╕ "рд╕реБрд╡рд┐рдзрд╛" рдиреЗ рдореЗрд░реЗ рджрд┐рди рдХрд╛ рдмреЗрд╣рддрд░ рд╣рд┐рд╕реНрд╕рд╛ рдмрд░реНрдмрд╛рдж рдХрд░ рджрд┐рдпрд╛ред рдЦреБрд╢ рдирд╣реАрдВред

@ рд╢рд╣рдЬрд╛рджреЗ рдмрд▓реНрдХрд┐ рд╢рд╛рдирджрд╛рд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдм рд╣рдо рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдирд╛рдо рдкрд░ рдЕрдкрдиреЗ environment/group_vars/all рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ env рдЪрд░ рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╣рдорд╛рд░реА playbooks рдореЗрдВ рд╣рдо рдлрд┐рд░ рдпрд╣ рдХрд░рддреЗ рд╣реИрдВ:

- hosts: group
  vars_files:
    - "{{ env }}/group_vars/group.yml
  roles:
    - ...

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╣реЛрд╕реНрдЯ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рджреЗрдВ

рдЕрдиреНрд╕рд┐рдмрд▓ рджреЗрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рд╡реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рдЬрд╛рд░реА рдХрд░ рд╣рддрд╛рд╢рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рдереЗред рд╡реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдереВрдХрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

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

рдПрдХ рд╕рдореВрд╣ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореВрд╣ рдХреЛ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╣реЛрд╕реНрдЯ рд╡реЗрдмрд╕рд░реНрд╡рд░ рд╕рдореВрд╣ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рд╡реЗрдмрд╕рд░реНрд╡рд░ рд░реАрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдЙрддреНрддрд░-рдкреВрд░реНрд╡_рдбреЗрдЯрд╛рдХреЗрдЯрд░ рд╕рдореВрд╣ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдЧреЗрдЯрд╡реЗ, ntp рдФрд░ рдбреАрдПрдирдПрд╕ рд╕рд░реНрд╡рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА dev_group рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрд╡ рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдФрд░ рдЧреИрд░-рдЙрддреНрдкрд╛рджрди рдбреЗрдЯрд╛рдмреЗрд╕, рдЖрджрд┐, рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк рдореЗрдЬрдмрд╛рди рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдиреНрдп 'рдореЗрдЬрдмрд╛рди рдЧреБрдг' рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВ 'рдирд░' рд╕рдореВрд╣ рдореЗрдВ рдФрд░ 'рдкреНрд░реЛрдЧреНрд░рд╛рдорд░' рд╕рдореВрд╣ рдореЗрдВ рд╣реВрдБ, рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рдЪреБрдирддреЗ рд╣реИрдВ, рдореИрдВ рдкреБрд░реБрд╖ рд╣реЛрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ред

рдЕрдВрдд рдореЗрдВ рдпрд╣ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдирд┐рд░реНрдгрдп (рдмрдЧ рдирд╣реАрдВ) рд╣реИ рдХрд┐ рд╕рдореВрд╣реЛрдВ рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯреЗрдВ, рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдВрд╕рд┐рдмрд▓ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╕рдорд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЕрдиреНрдп рд╕рднреА рдЙрдкрдХрд░рдг рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХрдИ рдЕрдиреНрдп рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрдИ рдирд╣реАрдВред

рдЗрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдирд╛рдореЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХреА рд╕реАрдорд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ 'рд╡рд░реНрддрдорд╛рди рд╕рдореВрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ' рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╣рдореЗрд╢рд╛ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореЗрдЬрдмрд╛рди рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдпрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред Vars_files рдпрд╛ рд╢рд╛рдорд┐рд▓_vars рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдКрдкрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рдореВрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд▓рдЧрддрд╛ рд╣реИ, рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

Group_vars рдкрд░ do_vars рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ ... рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рдЪреЗрддрд╛рд╡рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк 'рдбрдмрд▓ рд▓реЛрдбрд┐рдВрдЧ' рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ group_vars рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЦреАрдВрдЪ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ред рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ, vars_files: vars/app1.vars.yml рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдореВрд╣ рдЕрдВрд╕рд┐рдмреНрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдХреНрдпреЛрдВ рдФрд░ 'рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдХрд░рдг' рд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИ, рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдореИрдВ рдЕрдкрдиреЗ рдбреЙрдХреНрд╕ http://docs.ansible.com/ansible/ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ

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

@bcoca рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рд╕рдореВрд╣ рдХреЗ

@bococa рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╛рдХреА рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢, рдЧреНрд░реБрдкрд┐рд╡рд░ рдкреВрд░реНрд╡рддрд╛ / рд╕рдВрдХрд▓реНрдк рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣реИ, рдЙрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдЕрдВрд╕рд┐рдмрд▓ рдЯреАрдо рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рдВрддреБрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рд╕рдореВрдЪреЗ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдХреЗ рдмрдЬрд╛рдП рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдирд╛рдЯрдХ рдХреЗ рд▓рд┐рдП рдЪреБрдиреЗ рдЧрдП рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП group_vars рдХреЛ рдХреЗрд╡рд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ / рдорд╛рдирд╛ рдЬрд╛рдП?

рдпрд╣ рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рдЧрдП рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдЕрдмред

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

рд╕рдВрднрд╡рдд: group_vars рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдХрдИ рдбреЗрдЯрд╛рд╕реЗрдиреНрдЯрд░реНрд╕ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреА рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддреА рд╣реИ:

[dc1]
host1
host2

[dc2]
host3
host4

[app1]
host1
host3

[app2]
host2
host4

рдЖрдк рдбреЗрдЯрд╛рд╕реЗрдВрдЯрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП group_vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдЙрд╕ рдбреЗрдЯрд╛рд╕реЗрдВрдЯрд░ рдореЗрдВ рд╕рднреА рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдВрдЧреЗред

group_vars/
    dc1.yml
    dc2.yml
    app1.yml
    app2.yml

dc1.yml

---
ntp_servers:
  - 10.10.10.10
  - 10.10.10.11

dc2.yml

---
ntp_servers:
  - 10.11.10.10
  - 10.11.10.11

рдЗрд╕ рддрд░рд╣ group_vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рддрдм рддрдХ рдареАрдХ рд╣реИ рдЬрдм рддрдХ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп group_var рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЪрд░ рдХреЛ рдорд░реНрдЬ рдпрд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ group_vars рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕ рдХреНрд░рдо рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ group_vars рдореЗрдВ рдЪрд░ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд▓реЗрдЖрдЙрдЯ (рдЬреИрд╕реЗ рд╣рд┐рд░рд╛) рдЬреЛ рддрдереНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣реЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдпрд╣рд╛рдБ рдзреНрдпрд╛рди рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрдЪрд╛рддрд╛ рд╣реВрдВред

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

@ рдорд┐рдВрдЬ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рдбрд┐рдЬрд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕реЗ рдЯреВрдЯ рдЧрдпрд╛?

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреАрдмрджреНрдз рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрджрд┐ рдореИрдВ ansible-playbook -i /my-inventory -v some_playbook.yml -l dc1:&app2 рдХрд┐рд╕реА рднреА some_playbook.yml рдХреЛ рдЙрд╕ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдХреЗ рдЦрд┐рд▓рд╛рдл рд▓рд┐рдЦреВрдВрдЧрд╛, рддреЛ рдЗрд╕реЗ dc1.yml рд╕реЗ рд╡реИрд░рд┐рдПрдмрд▓ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╡рдВрдЪрд┐рдд рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ред app1.yml рдХреЗрд╡рд▓ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдереЗред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рддреИрдирд╛рддреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╣реБ-рдХрд┐рд░рд╛рдПрджрд╛рд░ рддреИрдирд╛рддреАред

рдореЗрд░реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рджреЛ рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВ:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдиреЗрдорд╕реНрдкреЗрд╕рд┐рдВрдЧ рдХреА рдХрдореАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ рдореИрдВ рдПрдХ рдмрд╣реБ-рдХрд┐рд░рд╛рдП рд╡рд╛рд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдП рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдРрдк рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдорд╢реАрдиреЛрдВ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдЪрд░ рдирд╛рдо рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореЗрд░рд╛ рд╕рд╛рде рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХрд┐ рдореИрдВ рдЙрдирдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛

рджреВрд╕рд░рд╛, рдорд╛рдорд▓рд╛ рд╣рд░ рдХреЛрдИ рдпрд╣рд╛рдБ рдмрд╛рдд рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдХреЗ рд╕рд╛рде, рдореИрдВ /data/prod рд▓рд┐рдЦреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрднреА рднреА рд╡рд┐рдВрдб рдирд╣реАрдВ ansible-playbook -i inventory -v data_deploy.yml -l app1_staging , рдФрд░ рд╡рд╣ рдлрд╛рдЗрд▓реЗрдВ рдХрднреА рднреА /data/staging рдирд╣реАрдВ рд▓рд┐рдЦреА рдЬрд╛рдПрдВрдЧреА рдЬрдм рдореИрдВ ansible-playbook -i inventory -v data_deploy.yml -l app1_prod рдЪрд▓рд╛рддрд╛ рд╣реВрдВ

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

рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪреАред

[dc1]
host1
host2

[dc2]
host3
host4

[app1_staging]
host1
host2
host3
host4

[app1_prod]
host1
host2
host3
host4

app1_staging.yml:

---
  data_path: /data/staging

app1_prod.yml:

---
  data_path: /data/prod

рдкрддрд╛ рдирд╣реАрдВ рдЕрдЧрд░ рд╕рдВрдкрд╛рджрди рдиреЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рддреЛ рдореЗрд░реА рдЖрдЦрд┐рд░реА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп @ рдЬрдВрдЬ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛ рдерд╛ред

@benjamincburns рдЖрдк group_vars рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рд╣реИ рдХрд┐ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рд╡рд░реНрддрдорд╛рди рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╡рд┐рдзрд┐ рд▓реЗрдХрд┐рди рдЯреВрдЯрддрд╛ рд╣реА рддрддреНрдХрд╛рд▓ рд╕рдореВрд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛред рдореИрдВрдиреЗ рдпрд╣ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдХрд┐ рдбреЗрдЯрд╛рд╕реЗрдиреНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рдеред рдпрджрд┐ Ansible рд╕рднреА рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЪрд░ рдХреЛ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рд╕реЗрдВрдЯрд░ рд╕реНрддрд░ рдкрд░ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ ansible.cfg рдореЗрдВ рдпрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдЯреЙрдЧрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреИрд╕реЗ group_vars рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдпрд╣ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рддреЛрдбрд╝ рди рд╕рдХреЗред рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ рдмрд╣реБ-рдХрд┐рд░рд╛рдпреЗрджрд╛рд░ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИрдВ рдФрд░ рдЬрдм рддрдХ рдореИрдВ group_vars рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░ рджреЗрддрд╛, рддрдм рддрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛ред

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

http://www.craigdunn.org/2012/05/239/

рдореИрдВ рдбреЙрдХрдЯрд░ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрдЬрдмрд╛рдиреЛрдВ рдореЗрдВ рдлреИрд▓реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдпрд╣ рдереЛрдбрд╝рд╛ рдореБрдЭреЗред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП @ рдорд┐рдВрдЬ рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдореИрдВ рдпрд╣ рднреА рдЧреНрд░реБрдк рд╡рд░реНрдЬрди рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбрд┐рдЬрд╛рдЗрди рд╕реЗ рдЯреВрдЯрддрд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдХрд╛рдо рдПрдХ рдирд╛рдЯрдХ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ:

- hosts: "{{ group }}"
  vars_files:
    - "vars/{{ group }}.yml" 
  roles:
    - role1 etc

рдкреНрд▓реЗрдмреБрдХ рдбреАрдЖрдИрдЖрд░ рдореЗрдВ var1 рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЧреНрд░реБрдк 1редyml, group2.yml рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВред

рдпрд╣ рднрдпрд╛рдирдХ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдмрджрд▓ рдЧрдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ _accessed рдЕрд▓рдЧ рдереЗ_ред рдмрд╕ рдЙрд╕ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ рдЬреЛ рдЕрднрд┐рд╕рд░рдг рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдкреНрд░рдпрд╛рд╕реЛрдВ рдкрд░ рд╣реЛрдЧрд╛ред рд╕рдВрднрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧрдд рдЪрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП Ansible рдЯреАрдо рдХреЗ рд▓рд┐рдП +1ред

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

  • "рд░реИрдкрд░ рднреВрдорд┐рдХрд╛рдПрдВ" рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рднреВрдорд┐рдХрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  • рдЕрдкрдиреЗ рд░реИрдкрд░ рдХреЗ meta/main.yml allow_duplicates: true рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
  • рднреВрдорд┐рдХрд╛ рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред
  • рд╕реЗрдЯ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, group/host_vars рдореЗрдВ рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред

рддреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрдкрдХреА рдЖрд╡рд░рдг рднреВрдорд┐рдХрд╛ рдореЗрдВ meta.yml :

---
# roles/my-app/meta.yml
allow_duplicates: true
dependencies:
  - role: nginx
    nginx_servers:
      - name: server-myapp
        contents: |
          ...

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

рдЕрдиреНрд╕рд┐рдмрд▓ рдЯреАрдо: рдпрд╣ рдЖрдкрдХреА рдордВрд╢рд╛ рдереА рдХрд┐ рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореИрдВрдиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ; рд╕рдм рдХреБрдЫ рдХреЛрдб рд╕реВрдк рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рд╕рд┐рд░реНрдл 1 рдШрдВрдЯреЗ рдХреА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЖрдЬ рдкреАрдбрд╝рд┐рдд рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реБрдЖ рдФрд░ рдЗрд╕ рдкрдж рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд░рд╣рд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рд▓реЗрдЦрди рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреЛрдИ рднреА рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
http://docs.ansible.com/ansible/intro_inventory.html#group -variables
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЪрд░ рдореЗрдЬрдмрд╛рди рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдФрд░ рд╕рдореВрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдореЗрдЬрдмрд╛рди рдХреЛ рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдХреЛ рдХрдИ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЪрд░ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

+1 рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рдорд╛рд░реА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯреАрдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╣рдо рднреА рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рднрд╛рдЧ рдЧрдПред рд╕рдорд╛рди рдХрд╣рд╛рдиреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп "рдЯреЛрдореИрдЯ" рд░реЛрдПрд▓ рд╣реИ рд╣рдо рдЙрд╕ рд╕рдореВрд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреЛрд░реНрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдЬреИрд╕реЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрдИ рдЯреЙрдордХреИрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдПрдХ рд╣реА рднреМрддрд┐рдХ рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЙрди рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдореЗрдВ рдХрдИ рд╕рдореВрд╣ рдмрдирд╛рдП рдЬрд┐рдирдореЗрдВ рд╕рд░реНрд╡рд░ рдХрд╛ рдПрдХ рд╣реА рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрднреА рддрдХ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВ рдЖрд╡рд░рдг рднреВрдорд┐рдХрд╛рдПрдБ рдмрдирд╛рддрд╛ рд╣реВрдБ рдЬрд┐рдирдХреЗ рдЪрд░ рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдЪрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд╛рд╕рд╡рд░реНрдб рдУрдб рдХреЗ рд▓рд┐рдП рд╕реЛрдЪреЛред

рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╣ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рджрд░реНрдж рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛:
https://github.com/leapfrogonline/ansible-merge-vars

рдпрд╣ рдЪрд░ рдХреЗ рд╡рд┐рд▓рдп рдХреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рджреЛ dicts / рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╕рдореВрд╣ рдЬреАрдд рдФрд░ рджреВрд╕рд░реЗ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдирд╛ рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдкреНрд▓рдЧрдЗрди рдХреЗрд╡рд▓ Ansible 2+ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрд╡рдзрд╛рд░рдгрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдордЭрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛

рд╣рдо рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рднреА рдЖрдПред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

[group_a]
host1

[group_b]
host1

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ansible_user рдХреЛ var рдХреЗ рд╕рд╛рде рдареАрдХ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рди рд╣реА host_vars рдФрд░ рди рд╣реА group_vars ред рдирд╡реАрдирддрдо рдкрд░рд┐рднрд╛рд╖рд╛ рд╣рдореЗрд╢рд╛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬреАрддрддреА рд╣реИред

рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди, рдирд╛рдЯрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди ansible_user рд╕рд╛рде рдХрдИ рдирд╛рдЯрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ:

- hosts: group_a
  ansible_user: user_a
  roles:
    - my-role

- hosts: group_b
  ansible_user: user_b
  roles:
    - my-role

@hyojinbae рдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХрд╛ рд╕реБрдЭрд╛рдпрд╛:

[group_a]
user_a<strong i="8">@host1</strong> ansible_user=user_a ansible_host=host1

[group_b]
user_b<strong i="9">@host1</strong> ansible_user=user_b ansible_host=host1

рдЗрд╕рд▓рд┐рдП рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рд╣реЛрд╕реНрдЯ рдХрд╛ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдореЗрдВ рдПрдХ рдЕрдиреВрдард╛ рдирд╛рдо рд╣реИред рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдореЗрдВ рд╣реЛрд╕реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рддрдХ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред

@hyojinbae рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк hostvars рдФрд░ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдВрдХ рдпрд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

- hosts: group_a
  remote_user: user_a
  roles:
    - my-role

- hosts: group_b
  remote_user: user_b
  roles:
    - my-role

рдЬрдм рддрдХ рдЖрдк ansible_user рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рддрдм рддрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдореВрд╣ рдореЗрдЬрдмрд╛рди рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИрдВ, рди рдХрд┐ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдХрд╛рдИред

рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛ред рдореБрдЭреЗ рдЕрдм рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдВрдж / рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рдерд╛, рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдкреНрд▓рдЧрдЗрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рднреНрд░рдо рдХреЗ рдмрд┐рдВрджреБ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

+1 рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдпрд╣рд╛рдБ рдбрд┐рдЬрд╝рд╛рдЗрди рдпреЛрдЧреНрдп рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдПрдБред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╣реА рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд╣реЛрд╕реНрдЯ-рд╕реНрддрд░ рдкрд░ рд╕реНрдХреЛрдкрд┐рдВрдЧ group_vars рдмрд╕ рдЗрд╕ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдмрд╕ рдПрдХ рд╕реЛрдЪрд╛ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ:

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

рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдмрджрд▓рд╛рд╡ рд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ DevOps-y рд▓реЛрдЧ рдЦреБрд╢ рд╣реЛрдВрдЧреЗ, рдФрд░ рдХрд┐рд╕реА рдХреЛ рднреА рджреБрдЦ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ, рд╕рдВрднрд╛рд╡рд┐рдд рдПрд╡реЗрдиреНрдпреВ рдХреЗ рд▓рд┐рдП https://github.com/ansible/proposals/issues/41 рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд▓рдЧ-рдЗрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред

рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдЕрдиреНрд╕рд┐рдмрд▓ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ (рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ, рдЪреЗрддрд╛рд╡рдиреА) рдареАрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдзрд┐рдХ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рдШрдВрдЯреЗ рд▓рдЧреЗред

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рднреА рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗрд╕реНрдЯреЗрдб рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рд╕рдореВрд╣ my_app_servers рд▓реЗрдВ, рдФрд░ рдпрд╣ рдЖрдкрдХреЗ group_vars рдХреЗ рдЕрдВрджрд░ my_app_servers.yml рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдЖрдо рд╣реЛрд╕реНрдЯ рдкрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд┐рд▓реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛

рдЙрджрд╛рд╣рд░рдг: my_app_servers.yml

application_env:
  - application1
  - application2

application_environments:
  application1: 
    app_port: 8080
    app_conf_dir: "/somedirectory/conf"
    app_logs_dir: "/somedirectory/logs"
    app_install_name: app1prd

   application2: 
     app_port: 8081
     app_conf_dir: "/somedirectory/conf"
     app_logs_dir: "/somedirectory/logs"
     app_install_name: app2prd

рдЕрдкрдиреЗ main.yml рдореЗрдВ, рд▓реВрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рд╡реИрд░рд┐рдПрдмрд▓ рд▓рд┐рд╕реНрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ,

with_items: "{{application_env}}"
рд▓реВрдк_рдХрдВрдЯреНрд░реЛрд▓:
loop_var: application_env_item

рдлрд┐рд░ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдЖрдк рдиреЗрд╕реНрдЯреЗрдб рдЪрд░ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреБрдЫ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
{{Application_en рдкрд░рд┐рд╡реЗрд╢ [application_env_item] ['app_install_name']}}
(рдпрджрд┐ рдЖрдк рдЙрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╛рдХреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред) рдЙрдореНрдореАрдж рд╣реИ рдХреА рд╡реЛ рдорджрдж рдХрд░рджреЗред

рдпрд╣ рдореБрджреНрджрд╛ (# 9065) 2015 рдореЗрдВ рд╡рд╛рдкрд╕ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдорд╛рди # 6538ред рд╡рд╣реА # 6666ред рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗред
рдпрд╣рд╛рдВ рдХрдИ рдореБрджреНрджреЛрдВ рдХреЗ рдЦреБрд▓рдиреЗ рдХреЗ 4 рд╕рд╛рд▓ рдмрд╛рдж 2018 рд╣реИ, рдФрд░ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рд╢реБрд░реБрдЖрдд рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдпрд╣ рдЕрдзрд┐рдХ рдЧрд░реНрдо рд╣реИ, рдФрд░ рд╣рд░ рдХреЛрдИ рдХрд╛рдЙрдВрдЯрд░-рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдХрд╛рд░рдг рдШрдВрдЯреЛрдВ рдЦреЛ рдЧрдпрд╛ред
IMHO рдпрд╣ рдбрд┐рдЬрд╛рдЗрди рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдЕрдЧрд░ рд╣рд░ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛, рддреЛ рдпрд╣ рдХреЛрдб рдХреЛ рдмрджрд╕реВрд░рдд рдмрдирд╛ рджреЗрдЧрд╛:

IMHO рдпреЗ рд╣реИрдХреНрд╕ рдЗрд╕реЗ рдХрдо рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддреЗ рд╣реИрдВ рди рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрдж рдХреЛ " рд╕рд┐рдВрдкрд▓ рдЖрдИрдЯреА рдСрдЯреЛрдореЗрд╢рди" рдЖрджрд░реНрд╢ рд╡рд╛рдХреНрдп;

@bococa -> рдХреГрдкрдпрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░реЗрдВ рдХрд┐ (рд╕рдореБрджрд╛рдп рд╕реЗ) рдЯреНрд░рд┐рдЧрд░ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕реА рдиреЗ PR # 6666 рдпрд╛ # 17236 рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рд╣реЛ рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫ "рдмрд╕ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ group_vars рдХреЛ рдЦреБрдж рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрдкреЗрдЯ рдХреЗ рд▓рд┐рдП рд╣рд┐рдпрд░рд╛ рдиреЗ рдЗрд╕реЗ рд╕рд╣реА рдкрд╛рдпрд╛ред рдЖрдк рдпрд╣ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддрдереНрдпреЛрдВ рдпрд╛ рд╕рдореВрд╣реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓реБрдХрдЕрдк рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рджреЗрдВ рдХрд┐ group_vars рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрди рдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХреНрд░рдо рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

FYI рдХрд░реЗрдВ, рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрдВрдж рдореБрджреНрджреЛрдВ рдкрд░ рд╕реВрдЪрдирд╛рдПрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдЬрд╡рд╛рдм рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рднреА рддрд╛рд▓рд╛ рд▓рдЧрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ рдордВрдЪ рдХреЗ рд░рдЦрд╡рд╛рд▓реЛрдВ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рди рдХрд░реЗрдВред

@ рдорд┐рдиреНрдЬ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк ansible_group_priority рдФрд░ [defaults]precedence рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреА рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ ansible-inventory рдЬреЛ рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд╣рдо рдЕрднреА рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рдмреЗрд╣рддрд░ рджреЗрдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдЪрд░ рдХреЗ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рдХреЛ рдХрд╣рд╛рдВ / рдХреНрдпрд╛ рд╕реЗрдЯ рдХрд░реЗрдВ, рдпрд╣ рджреЗрдЦреЗрдВред

@ReSearchITEng рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЦреЛрд▓рддрд╛ рд╣реИ (http://github.com/ansible/proposals), рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рднрд┐рдиреНрди рдРрдк рдХреЗ рдПрдХ рдореВрд▓рднреВрдд рдлрд╝реЛрдХрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдПрдХ рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдЬреЛ рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдХреЗ рд▓рд┐рдП ansible 'рд╕рдореВрд╣реЛрдВ' рдПрдХ рдореЗрдЬрдмрд╛рди рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИрдВ, рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдерд╛ рдирд╣реАрдВ, рдЕрдиреНрдп рдЙрдкрдХрд░рдг рд╕рдореВрд╣реЛрдВ рдкрд░ 'рдореБрдЦреНрдп рд╕рдВрджрд░реНрдн' рдХреЗ рд░реВрдк рдореЗрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдХреА рд╕рдм рдЙрд╕ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдпрд╛ рддреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ 'рдЧрд▓рдд' рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдмрд╕ рдЕрд▓рдЧ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдВрд╕рд┐рдмрд▓ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рд╕рд╛рджрдЧреА рдкреНрд░рддрд┐рдорд╛рди рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛, рдП рд╣реЛрд╕реНрдЯ рдФрд░ рдП рдЯрд╛рд╕реНрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрдЧрдардирд╛рддреНрдордХ рдлреЛрдХрд╕ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рддреА рд╣реВрдВ рдЙрд╕реЗ 'рд╕реЛрдЪрдиреЗ рдХреЗ рдЖрджреА рддрд░реАрдХреЗ' рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВред

рдореЗрд░рд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд╕рдВрдЧрдарди рдФрд░ рдЖрджрддреЛрдВ рдкрд░ рдПрдХ рдзрд╛рд░рдгрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рдореЗрд░реА рд░рд╛рдп рд╣реИред рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдк рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдХрд░реНрд╖рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬреЛ рдмрджрд▓рд╛рд╡ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдмрджрд▓рд╛рд╡ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

hryamzik picture hryamzik  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arkag picture arkag  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jiwong picture jiwong  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Pallokala picture Pallokala  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tspivey picture tspivey  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ