рдХрдардкреБрддрд▓реА рдХрд╛ рдкрд░рд┐рдЪрдп

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

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

рдХрдардкреБрддрд▓реА рдХрд╛ рдкрд░рд┐рдЪрдп

рдореВрд▓рднреВрдд рдЬрд╛рдирдХрд╛рд░реА

рдкрдкреЗрдЯ рдХрд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реАрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдСрдкрд░реЗрд╢рди рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

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

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

рдШреЛрд╖рдгрд╛рдкрддреНрд░реЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп

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

рдкрдкреЗрдЯ рдбреАрдПрд╕рдПрд▓ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рднрд╛рд╖рд╛ рд╣реИред рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдиреЛрдб рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рд╣реИ.
  • рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ.
  • рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИ.

рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЖрдкрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

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

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

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

рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдФрд░ рдХреЛрдбрд╕реНрдЯрд╛рдЗрд▓

рдпрд╣рд╛рдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрднрд╛рдЧ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдпрджрд┐ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ:

рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

# ╨Ъ╨╛╨╝╨╝╨╡╨╜╤В╨░╤А╨╕╨╕ ╨┐╨╕╤И╤Г╤В╤Б╤П, ╨║╨░╨║ ╨╕ ╨╝╨╜╨╛╨│╨╛ ╨│╨┤╨╡, ╨┐╨╛╤Б╨╗╨╡ ╤А╨╡╤И╤С╤В╨║╨╕.
#
# ╨Ю╨┐╨╕╤Б╨░╨╜╨╕╨╡ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕ ╨╜╨╛╨┤╤Л ╨╜╨░╤З╨╕╨╜╨░╨╡╤В╤Б╤П ╤Б ╨║╨╗╤О╤З╨╡╨▓╨╛╨│╨╛ ╤Б╨╗╨╛╨▓╨░ node,
# ╨╖╨░ ╨║╨╛╤В╨╛╤А╤Л╨╝ ╤Б╨╗╨╡╨┤╤Г╨╡╤В ╤Б╨╡╨╗╨╡╨║╤В╨╛╤А ╨╜╨╛╨┤╤Л тАФ ╤Е╨╛╤Б╤В╨╜╨╡╨╣╨╝ (╤Б ╨┤╨╛╨╝╨╡╨╜╨╛╨╝ ╨╕╨╗╨╕ ╨▒╨╡╨╖)
# ╨╕╨╗╨╕ ╤А╨╡╨│╤Г╨╗╤П╤А╨╜╨╛╨╡ ╨▓╤Л╤А╨░╨╢╨╡╨╜╨╕╨╡ ╨┤╨╗╤П ╤Е╨╛╤Б╤В╨╜╨╡╨╣╨╝╨╛╨▓, ╨╕╨╗╨╕ ╨║╨╗╤О╤З╨╡╨▓╨╛╨╡ ╤Б╨╗╨╛╨▓╨╛ default.
#
# ╨Я╨╛╤Б╨╗╨╡ ╤Н╤В╨╛╨│╨╛ ╨▓ ╤Д╨╕╨│╤Г╤А╨╜╤Л╤Е ╤Б╨║╨╛╨▒╨║╨░╤Е ╨╛╨┐╨╕╤Б╤Л╨▓╨░╨╡╤В╤Б╤П ╤Б╨╛╨▒╤Б╤В╨▓╨╡╨╜╨╜╨╛ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╤П ╨╜╨╛╨┤╤Л.
#
# ╨Ю╨┤╨╜╨░ ╨╕ ╤В╨░ ╨╢╨╡ ╨╜╨╛╨┤╨░ ╨╝╨╛╨╢╨╡╤В ╨┐╨╛╨┐╨░╤Б╤В╤М ╨┐╨╛╨┤ ╨╜╨╡╤Б╨║╨╛╨╗╤М╨║╨╛ ╤Б╨╡╨╗╨╡╨║╤В╨╛╤А╨╛╨▓. ╨Я╤А╨╛ ╨┐╤А╨╕╨╛╤А╨╕╤В╨╡╤В
# ╤Б╨╡╨╗╨╡╨║╤В╨╛╤А╨╛╨▓ ╨╜╨░╨┐╨╕╤Б╨░╨╜╨╛ ╨▓ ╤Б╤В╨░╤В╤М╨╡ ╨┐╤А╨╛ ╤Б╨╕╨╜╤В╨░╨║╤Б╨╕╤Б ╨╛╨┐╨╕╤Б╨░╨╜╨╕╤П ╨╜╨╛╨┤.
node 'hostname', 'f.q.d.n', /regexp/ {
  # ╨Ъ╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╤П ╨┐╨╛ ╤Б╤Г╤В╨╕ ╤П╨▓╨╗╤П╨╡╤В╤Б╤П ╨┐╨╡╤А╨╡╤З╨╕╤Б╨╗╨╡╨╜╨╕╨╡╨╝ ╤А╨╡╤Б╤Г╤А╤Б╨╛╨▓ ╨╕ ╨╕╤Е ╨┐╨░╤А╨░╨╝╨╡╤В╤А╨╛╨▓.
  #
  # ╨г ╨║╨░╨╢╨┤╨╛╨│╨╛ ╤А╨╡╤Б╤Г╤А╤Б╨░ ╨╡╤Б╤В╤М ╤В╨╕╨┐ ╨╕ ╨╜╨░╨╖╨▓╨░╨╜╨╕╨╡.
  #
  # ╨Т╨╜╨╕╨╝╨░╨╜╨╕╨╡: ╨╜╨╡ ╨╝╨╛╨╢╨╡╤В ╨▒╤Л╤В╤М ╨┤╨▓╤Г╤Е ╤А╨╡╤Б╤Г╤А╤Б╨╛╨▓ ╨╛╨┤╨╜╨╛╨│╨╛ ╤В╨╕╨┐╨░ ╤Б ╨╛╨┤╨╕╨╜╨░╨║╨╛╨▓╤Л╨╝╨╕ ╨╜╨░╨╖╨▓╨░╨╜╨╕╤П╨╝╨╕!
  #
  # ╨Ю╨┐╨╕╤Б╨░╨╜╨╕╨╡ ╤А╨╡╤Б╤Г╤А╤Б╨░ ╨╜╨░╤З╨╕╨╜╨░╨╡╤В╤Б╤П ╤Б ╨╡╨│╨╛ ╤В╨╕╨┐╨░. ╨в╨╕╨┐ ╨┐╨╕╤И╨╡╤В╤Б╤П ╨▓ ╨╜╨╕╨╢╨╜╨╡╨╝ ╤А╨╡╨│╨╕╤Б╤В╤А╨╡.
  # ╨Я╤А╨╛ ╤А╨░╨╖╨╜╤Л╨╡ ╤В╨╕╨┐╤Л ╤А╨╡╤Б╤Г╤А╤Б╨╛╨▓ ╨╜╨░╨┐╨╕╤Б╨░╨╜╨╛ ╨╜╨╕╨╢╨╡.
  #
  # ╨Я╨╛╤Б╨╗╨╡ ╤В╨╕╨┐╨░ ╨▓ ╤Д╨╕╨│╤Г╤А╨╜╤Л╤Е ╤Б╨║╨╛╨▒╨║╨░╤Е ╨┐╨╕╤И╨╡╤В╤Б╤П ╨╜╨░╨╖╨▓╨░╨╜╨╕╨╡ ╤А╨╡╤Б╤Г╤А╤Б╨░, ╨┐╨╛╤В╨╛╨╝ ╨┤╨▓╨╛╨╡╤В╨╛╤З╨╕╨╡,
  # ╨┤╨░╨╗╤М╤И╨╡ ╨╕╨┤╤С╤В ╨╛╨┐╤Ж╨╕╨╛╨╜╨░╨╗╤М╨╜╨╛╨╡ ╨┐╨╡╤А╨╡╤З╨╕╤Б╨╗╨╡╨╜╨╕╨╡ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╨╛╨▓ ╤А╨╡╤Б╤Г╤А╤Б╨░ ╨╕ ╨╕╤Е ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╣.
  # ╨Ч╨╜╨░╤З╨╡╨╜╨╕╤П ╨┐╨░╤А╨░╨╝╨╡╤В╤А╨╛╨▓ ╤Г╨║╨░╨╖╤Л╨▓╨░╤О╤В╤Б╤П ╤З╨╡╤А╨╡╨╖ ╤В.╨╜. hash rocket (=>).
  resource { 'title':
    param1 => value1,
    param2 => value2,
    param3 => value3,
  }
}

рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдФрд░ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ рд╢реИрд▓реА рдЧрд╛рдЗрдб. рд╕рд╛рд░рд╛рдВрд╢:

  • рджреЛ-рд╕реНрдкреЗрд╕ рдЗрдВрдбреЗрдВрдЯ, рдЯреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдХреЛрд▓рди рдХреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рдж рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо, рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд┐рдо рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдкрд░ рд╣реИ. рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрд╡рд╛рдж рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЖрдк рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдФрд░ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рдмрд┐рдирд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛рдиреА) resource { 'title': } ╨╕ resource { 'title': param => value }).
  • рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рддреАрд░ рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
  • рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рд╕рдВрд╕рд╛рдзрди рд╕рдВрдмрдВрдз рддреАрд░ рд▓рд┐рдЦреЗ рд╣реБрдП рд╣реИрдВред

рдкреИрдкреЗрдЯрд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕реНрдерд╛рди

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

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

  • рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг ("рдкреБрд░рд╛рдиреА рдХрдардкреБрддрд▓реА") рдореЗрдВ рдЖрдзрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдереА /etc/puppet. рдкрд░рд┐рд╡реЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреБрд░рд╛рдиреЗ рдкрдкреЗрдЯ рдХреЗ рд╕рд╛рде рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ /etc/puppet/environments, рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдЧреАред рдпрджрд┐ рдкрд░рд┐рд╡реЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЖрдзрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реЛрдЧреАред
  • рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг ("рдирдпрд╛ рдХрдардкреБрддрд▓реА") рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЖрдзрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ /etc/puppetlabs/code. рддрджрдиреБрд╕рд╛рд░, рд╡рд╛рддрд╛рд╡рд░рдг рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ /etc/puppetlabs/code/environments, рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред

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

рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реЛрддрд╛ рд╣реИ .pp.

рдпреБрджреНрдз рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг

рдЙрд╕ рдкрд░ рдиреЛрдб рдФрд░ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рд╡рд┐рд╡рд░рдг

рдиреЛрдб рдкрд░ server1.testdomain рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреА рд╣реЛрдЧреА /etc/issue рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде Debian GNU/Linux n l. рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рд╕рдореВрд╣ рдХреЗ рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП root, рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП 644.

рд╣рдо рдПрдХ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

node 'server1.testdomain' {   # ╨▒╨╗╨╛╨║ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕, ╨╛╤В╨╜╨╛╤Б╤П╤Й╨╕╨╣╤Б╤П ╨║ ╨╜╨╛╨┤╨╡ server1.testdomain
    file { '/etc/issue':   # ╨╛╨┐╨╕╤Б╤Л╨▓╨░╨╡╨╝ ╤Д╨░╨╣╨╗ /etc/issue
        ensure  => present,   # ╤Н╤В╨╛╤В ╤Д╨░╨╣╨╗ ╨┤╨╛╨╗╨╢╨╡╨╜ ╤Б╤Г╤Й╨╡╤Б╤В╨▓╨╛╨▓╨░╤В╤М
        content => 'Debian GNU/Linux n l',   # ╤Г ╨╜╨╡╨│╨╛ ╨┤╨╛╨╗╨╢╨╜╨╛ ╨▒╤Л╤В╤М ╤В╨░╨║╨╛╨╡ ╤Б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨╡
        owner   => root,   # ╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╨╡╨╗╤М-╨▓╨╗╨░╨┤╨╡╨╗╨╡╤Ж
        group   => root,   # ╨│╤А╤Г╨┐╨┐╨░-╨▓╨╗╨░╨┤╨╡╨╗╨╡╤Ж
        mode    => '0644',   # ╨┐╤А╨░╨▓╨░ ╨╜╨░ ╤Д╨░╨╣╨╗. ╨Ю╨╜╨╕ ╨╖╨░╨┤╨░╨╜╤Л ╨▓ ╨▓╨╕╨┤╨╡ ╤Б╤В╤А╨╛╨║╨╕ (╨▓ ╨║╨░╨▓╤Л╤З╨║╨░╤Е), ╨┐╨╛╤В╨╛╨╝╤Г ╤З╤В╨╛ ╨╕╨╜╨░╤З╨╡ ╤З╨╕╤Б╨╗╨╛ ╤Б 0 ╨▓ ╨╜╨░╤З╨░╨╗╨╡ ╨▒╤Г╨┤╨╡╤В ╨▓╨╛╤Б╨┐╤А╨╕╨╜╤П╤В╨╛ ╨║╨░╨║ ╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╨╛╨╡ ╨▓ ╨▓╨╛╤Б╤М╨╝╨╡╤А╨╕╤З╨╜╨╛╨╣ ╤Б╨╕╤Б╤В╨╡╨╝╨╡, ╨╕ ╨▓╤Б╤С ╨┐╨╛╨╣╨┤╤С╤В ╨╜╨╡ ╤В╨░╨║, ╨║╨░╨║ ╨╖╨░╨┤╤Г╨╝╨░╨╜╨╛
    }
}

рдПрдХ рдиреЛрдб рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз

рдиреЛрдб рдкрд░ server2.testdomain nginx рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдЗрдП рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд░реЗрдВ:

  • рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ nginx.
  • рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПред
  • рд╕реЗрд╡рд╛ рдЪрд╛рд▓реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП nginx.
  • рдпрджрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╣рдо рдПрдХ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

node 'server2.testdomain' {   # ╨▒╨╗╨╛╨║ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕, ╨╛╤В╨╜╨╛╤Б╤П╤Й╨╕╨╣╤Б╤П ╨║ ╨╜╨╛╨┤╨╡ server2.testdomain
    package { 'nginx':   # ╨╛╨┐╨╕╤Б╤Л╨▓╨░╨╡╨╝ ╨┐╨░╨║╨╡╤В nginx
        ensure => installed,   # ╨╛╨╜ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨▒╤Л╤В╤М ╤Г╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜
    }
  # ╨Я╤А╤П╨╝╨░╤П ╤Б╤В╤А╨╡╨╗╨║╨░ (->) ╨│╨╛╨▓╨╛╤А╨╕╤В ╨╛ ╤В╨╛╨╝, ╤З╤В╨╛ ╤А╨╡╤Б╤Г╤А╤Б ╨╜╨╕╨╢╨╡ ╨┤╨╛╨╗╨╢╨╡╨╜
  # ╤Б╨╛╨╖╨┤╨░╨▓╨░╤В╤М╤Б╤П ╨┐╨╛╤Б╨╗╨╡ ╤А╨╡╤Б╤Г╤А╤Б╨░, ╨╛╨┐╨╕╤Б╨░╨╜╨╜╨╛╨│╨╛ ╨▓╤Л╤И╨╡.
  # ╨в╨░╨║╨╕╨╡ ╨╖╨░╨▓╨╕╤Б╨╕╨╝╨╛╤Б╤В╨╕ ╤В╤А╨░╨╜╨╖╨╕╤В╨╕╨▓╨╜╤Л.
    -> file { '/etc/nginx':   # ╨╛╨┐╨╕╤Б╤Л╨▓╨░╨╡╨╝ ╤Д╨░╨╣╨╗ /etc/nginx
        ensure  => directory,   # ╤Н╤В╨╛ ╨┤╨╛╨╗╨╢╨╜╨░ ╨▒╤Л╤В╤М ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╤П
        source  => 'puppet:///modules/example/nginx-conf',   # ╨╡╤С ╤Б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨╡ ╨╜╤Г╨╢╨╜╨╛ ╨▒╤А╨░╤В╤М ╤Б ╨┐╨░╨┐╨┐╨╡╤В-╤Б╨╡╤А╨▓╨╡╤А╨░ ╨┐╨╛ ╤Г╨║╨░╨╖╨░╨╜╨╜╨╛╨╝╤Г ╨░╨┤╤А╨╡╤Б╤Г
        recurse => true,   # ╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╤В╤М ╤Д╨░╨╣╨╗╤Л ╤А╨╡╨║╤Г╤А╤Б╨╕╨▓╨╜╨╛
        purge   => true,   # ╨╜╤Г╨╢╨╜╨╛ ╤Г╨┤╨░╨╗╤П╤В╤М ╨╗╨╕╤И╨╜╨╕╨╡ ╤Д╨░╨╣╨╗╤Л (╤В╨╡, ╨║╨╛╤В╨╛╤А╤Л╤Е ╨╜╨╡╤В ╨▓ ╨╕╤Б╤В╨╛╤З╨╜╨╕╨║╨╡)
        force   => true,   # ╤Г╨┤╨░╨╗╤П╤В╤М ╨╗╨╕╤И╨╜╨╕╨╡ ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╨╕
    }
  # ╨Т╨╛╨╗╨╜╨╕╤Б╤В╨░╤П ╤Б╤В╤А╨╡╨╗╨║╨░ (~>) ╨│╨╛╨▓╨╛╤А╨╕╤В ╨╛ ╤В╨╛╨╝, ╤З╤В╨╛ ╤А╨╡╤Б╤Г╤А╤Б ╨╜╨╕╨╢╨╡ ╨┤╨╛╨╗╨╢╨╡╨╜
  # ╨┐╨╛╨┤╨┐╨╕╤Б╨░╤В╤М╤Б╤П ╨╜╨░ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П ╤А╨╡╤Б╤Г╤А╤Б╨░, ╨╛╨┐╨╕╤Б╨░╨╜╨╜╨╛╨│╨╛ ╨▓╤Л╤И╨╡.
  # ╨Т╨╛╨╗╨╜╨╕╤Б╤В╨░╤П ╤Б╤В╤А╨╡╨╗╨║╨░ ╨▓╨║╨╗╤О╤З╨░╨╡╤В ╨▓ ╤Б╨╡╨▒╤П ╨┐╤А╤П╨╝╤Г╤О (->).
    ~> service { 'nginx':   # ╨╛╨┐╨╕╤Б╤Л╨▓╨░╨╡╨╝ ╤Б╨╡╤А╨▓╨╕╤Б nginx
        ensure => running,   # ╨╛╨╜ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨▒╤Л╤В╤М ╨╖╨░╨┐╤Г╤Й╨╡╨╜
        enable => true,   # ╨╡╨│╨╛ ╨╜╤Г╨╢╨╜╨╛ ╨╖╨░╨┐╤Г╤Б╨║╨░╤В╤М ╨░╨▓╤В╨╛╨╝╨░╤В╨╕╤З╨╡╤Б╨║╨╕ ╨┐╤А╨╕ ╤Б╤В╨░╤А╤В╨╡ ╤Б╨╕╤Б╤В╨╡╨╝╤Л
    }
  # ╨Ъ╨╛╨│╨┤╨░ ╤А╨╡╤Б╤Г╤А╤Б ╤В╨╕╨┐╨░ service ╨┐╨╛╨╗╤Г╤З╨░╨╡╤В ╤Г╨▓╨╡╨┤╨╛╨╝╨╗╨╡╨╜╨╕╨╡,
  # ╤Б╨╛╨╛╤В╨▓╨╡╤В╤Б╤В╨▓╤Г╤О╤Й╨╕╨╣ ╤Б╨╡╤А╨▓╨╕╤Б ╨┐╨╡╤А╨╡╨╖╨░╨┐╤Г╤Б╨║╨░╨╡╤В╤Б╤П.
}

рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдардкреБрддрд▓реА рд╕рд░реНрд╡рд░ рдкрд░ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

/etc/puppetlabs/code/environments/production/ # (╤Н╤В╨╛ ╨┤╨╗╤П ╨╜╨╛╨▓╨╛╨│╨╛ ╨Я╨░╨┐╨┐╨╡╤В╨░, ╨┤╨╗╤П ╤Б╤В╨░╤А╨╛╨│╨╛ ╨║╨╛╤А╨╜╨╡╨▓╨╛╨╣ ╨┤╨╕╤А╨╡╨║╤В╨╛╤А╨╕╨╡╨╣ ╨▒╤Г╨┤╨╡╤В /etc/puppet)
тФЬтФАтФА manifests/
тФВ   тФФтФАтФА site.pp
тФФтФАтФА modules/
    тФФтФАтФА example/
        тФФтФАтФА files/
            тФФтФАтФА nginx-conf/
                тФЬтФАтФА nginx.conf
                тФЬтФАтФА mime.types
                тФФтФАтФА conf.d/
                    тФФтФАтФА some.conf

рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░

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

рдкрдЯреНрдЯрд┐рдХрд╛

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

рд╡рд┐рдХрд▓реНрдк:

  • рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд╛рдо - рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде (рд╡реИрдХрд▓реНрдкрд┐рдХ)
  • рдкрде - рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде (рдпрджрд┐ рдпрд╣ рдирд╛рдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ)
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд - рдлрд╛рдЗрд▓ рдХрд╛ рдкреНрд░рдХрд╛рд░:
    • absent - рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣рдЯрд╛рдПрдБ
    • present - рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА)
    • file - рдирд┐рдпрдорд┐рдд рдлрд╝рд╛рдЗрд▓
    • directory - рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛
    • link - рд╕рд┐рдореНрд▓рд┐рдВрдХ
  • рд╕рд╛рдордЧреНрд░реА - рдлрд╝рд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА (рдХреЗрд╡рд▓ рдирд┐рдпрдорд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд, рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╕реНрд░реЛрдд рдпрд╛ рд▓рдХреНрд╖реНрдп)
  • рд╕реНрд░реЛрдд - рдЙрд╕ рдкрде рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рдЬрд╣рд╛рдВ рд╕реЗ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╕рд╛рде рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд╕рд╛рдордЧреНрд░реА рдпрд╛ рд▓рдХреНрд╖реНрдп). рдХрд┐рд╕реА рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдпреВрдЖрд░рдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ puppet: (рдлрд┐рд░ рдХрдардкреБрддрд▓реА рд╕рд░реНрд╡рд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛), рдФрд░ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде http: (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛), рдФрд░ рдЖрд░реЗрдЦ рдХреЗ рд╕рд╛рде рднреА file: рдпрд╛ рд╕реНрдХреАрдорд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреВрд░реНрдг рдкрде рдХреЗ рд░реВрдк рдореЗрдВ (рдлрд┐рд░ рдиреЛрдб рдкрд░ рд╕реНрдерд╛рдиреАрдп рдПрдлрдПрд╕ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)
  • рд▓рдХреНрд╖реНрдп - рдЬрд╣рд╛рдВ рд╕рд┐рдореНрд▓рд┐рдВрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рд╛рде рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд╕рд╛рдордЧреНрд░реА рдпрд╛ рд╕реНрд░реЛрдд)
  • рдорд╛рд▓рд┐рдХ - рд╡рд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
  • рд╕рдореВрд╣ - рд╡рд╣ рд╕рдореВрд╣ рдЬрд┐рд╕рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
  • рдореЛрдб - рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпрд╛рдБ (рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ)
  • рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ - рдкреБрдирд░рд╛рд╡рд░реНрддреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ
  • рд╢реБрджреНрдз рдХрд░рдирд╛ - рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рд╡рд░реНрдгрди рдкрдкреЗрдЯ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  • рдордЬрдмреВрд░ - рдЙрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рд╡рд░реНрдгрди рдкрдкреЗрдЯ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдкреИрдХреЗрдЬ

рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛рддрд╛ рд╣реИред рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо - рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рддреЛ рдкреИрдХреЗрдЬ рдХреЛ рдкреБрдирдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдкреБрдирдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ_рдкрд░_рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ.

рд╡рд┐рдХрд▓реНрдк:

  • рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд╛рдо - рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо (рд╡реИрдХрд▓реНрдкрд┐рдХ)
  • рдирд╛рдо - рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо (рдпрджрд┐ рдирд╛рдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ)
  • рдкреНрд░рджрд╛рддрд╛ - рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд - рдкреИрдХреЗрдЬ рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐:
    • present, installed - рдХреЛрдИ рднреА рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд
    • latest - рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд
    • absent -рд╣рдЯрд╛рдпрд╛ рдЧрдпрд╛ (apt-get remove)
    • purged - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ (apt-get purge)
    • held - рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдХ рд╣реИ (apt-mark hold)
    • ╨╗╤О╨▒╨░╤П ╨┤╤А╤Г╨│╨░╤П ╤Б╤В╤А╨╛╨║╨░ - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рд╣реИ
  • рдкреБрдирдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ_рдкрд░_рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ - рдЕрдЧрд░ true, рддреЛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдкреИрдХреЗрдЬ рдкреБрдирдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реНрд░реЛрдд-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА, рдЬрд╣рд╛рдВ рдмрд┐рд▓реНрдб рдкреИрд░рд╛рдореАрдЯрд░ рдмрджрд▓рддреЗ рд╕рдордп рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЧрд▓рддреА рдХрд░рдирд╛ false.

рд╕реЗрд╡рд╛

рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ. рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо - рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк:

  • рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд╛рдо - рдкреНрд░рдмрдВрдзрд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛ (рд╡реИрдХрд▓реНрдкрд┐рдХ)
  • рдирд╛рдо - рд╡рд╣ рд╕реЗрд╡рд╛ рдЬрд┐рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрджрд┐ рдирд╛рдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ)
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд - рд╕реЗрд╡рд╛ рдХреА рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдерд┐рддрд┐:
    • running - рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛
    • stopped - рд░реЛрдХрд╛ рд╣реБрдЖ
  • рд╕рдХреНрд╖рдо - рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
    • true - рдСрдЯреЛрд░рди рд╕рдХреНрд╖рдо рд╣реИ (systemctl enable)
    • mask - рдкреНрд░рдЪреНрдЫрдиреНрди (systemctl mask)
    • false - рдСрдЯреЛрд░рди рдЕрдХреНрд╖рдо рд╣реИ (systemctl disable)
  • рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн - рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢
  • рд╣реИрд╕рд┐рдпрдд - рд╕реЗрд╡рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджреЗрд╢
  • рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реЗрд╡рд╛ рдЗрдирд┐рдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рдЕрдЧрд░ false рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн - рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ false рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ - рд╕реЗрд╡рд╛ рдмрдВрдж рдХрд░ рджреА рдЧрдИ рд╣реИ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рд╕рд┐рд╕реНрдЯрдордбреА рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ systemctl restart).
  • hasstatus - рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реЗрд╡рд╛ рдЗрдирд┐рдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдорд╛рдВрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ statusред рдЕрдЧрд░ false, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╣реИрд╕рд┐рдпрдд. рдЧрд▓рддреА рдХрд░рдирд╛ true.

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

рдмрд╛рд╣реНрдп рдЖрджреЗрд╢ рдЪрд▓рд╛рддрд╛ рд╣реИ. рдпрджрд┐ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓, рдЬрдм рддрдХ рдпрд╛ рдХреЗрд╡рд▓ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ, рд╣рд░ рдмрд╛рд░ рдкрдкреЗрдЯ рдЪрд▓рд╛рдиреЗ рдкрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо - рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк:

  • рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд╛рдо - рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЖрджреЗрд╢ (рд╡реИрдХрд▓реНрдкрд┐рдХ)
  • рдЖрджреЗрд╢ - рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЖрджреЗрд╢ (рдпрджрд┐ рдпрд╣ рдирд╛рдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ)
  • рдкрде - рдкрде рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдирд╛ рд╣реИ
  • рдХреЗрд╡рд▓ - рдпрджрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рд╢реВрдиреНрдп рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • рдЬрдм рддрдХ - рдпрджрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рдЧреИрд░-рд╢реВрдиреНрдп рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • рдмрдирд╛рддрд╛ рд╣реИ - рдпрджрд┐ рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
  • рдХреЗрд╡рд▓ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ - рдЕрдЧрд░ true, рддреЛ рдХрдорд╛рдВрдб рдХреЗрд╡рд▓ рддрднреА рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдЗрд╕ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА
  • CWD - рд╡рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд┐рд╕рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╣реИ
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд┐рд╕рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╣реИ
  • рдкреНрд░рджрд╛рддрд╛ - рдХрдорд╛рдВрдб рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ:
    • POSIX - рдПрдХ рдЪрд╛рдЗрд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╕ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдкрде
    • рдЦреЛрд▓ - рдХрдорд╛рдВрдб рд╢реЗрд▓ рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ /bin/sh, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдкрде, рдЖрдк рдЧреНрд▓реЛрдмрд┐рдВрдЧ, рдкрд╛рдЗрдк рдФрд░ рдЕрдиреНрдп рд╢реЗрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рд╣реИрдВ рддреЛ рдЖрдорддреМрд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (|, ;, &&, || рдЖрджрд┐)ред

рдХреНрд░реЙрди

рдХреНрд░реЛрдирдЬреЙрдмреНрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк:

  • рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд╛рдо - рдмрд╕ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд - рдХреНрд░рд╛рдЙрдирдЬреЙрдм рд╕реНрдерд┐рддрд┐:
    • present - рдпрджрд┐ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рддреЛ рдмрдирд╛рдПрдВ
    • absent - рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ рддреЛ рд╣рдЯрд╛ рджреЗрдВ
  • рдЖрджреЗрд╢ - рдХреМрди рд╕рд╛ рдЖрджреЗрд╢ рдЪрд▓рд╛рдирд╛ рд╣реИ
  • рд╡рд╛рддрд╛рд╡рд░рдг - рдХрд┐рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╣реИ (рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рд╕реВрдЪреА рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред =)
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ - рдХрд┐рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдирд╛ рд╣реИ
  • рдорд┐рдирдЯ, рдШрдВрдЯрд╛, рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджрд┐рди, рдорд╛рд╣, рдорд╛рд╣ рдХрд╛ рджрд┐рди - рдХреНрд░реЙрди рдХрдм рдЪрд▓рд╛рдирд╛ рд╣реИред рдпрджрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрд░реЛрдВрдЯреИрдм рдореЗрдВ рдЗрд╕рдХрд╛ рдорд╛рди рд╣реЛрдЧрд╛ *.

рдХрдардкреБрддрд▓реА 6.0 рдореЗрдВ рдХреНрд░реЙрди рдорд╛рдиреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдХрдардкреБрддрд▓реА рд╕рд░реНрд╡рд░ рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рдЗрдЯ рдкрд░ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рдмреЙрдХреНрд╕ рдореЗрдВ рд╣реИ рдХрдардкреБрддрд▓реА-рдПрдЬреЗрдВрдЯ рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдкрдкреЗрдЯ рдХреЗ рдкрд╛рдВрдЪрд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВрдпрд╛ GitHub рдкрд░.

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╕рдВрд╕рд╛рдзрди рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ

рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдЖрдо рдЧрд▓рддреА рд╣реИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдШреЛрд╖рдгрд╛. рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓реЗ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛: рдПрдХ рд╣реА рдиреЛрдб рдХреЗ рд▓рд┐рдП рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдПрдХ рд╣реА рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП!

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

package { 'ruby-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'gem',
}
package { 'python-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'pip',
}

рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ - name ╤Г рд╕реЗрд╡рд╛, command ╤Г рдХрд╛рд░реНрдпрдХрд╛рд░реА, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдореЗрдЯрд╛рдкреИрд░рд╛рдореАрдЯрд░

рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рдЙрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рдХреБрдЫ рднреА рд╣реЛред

рдореЗрдЯрд╛ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХрдардкреБрддрд▓реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ.

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕реВрдЪреА:

  • рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ тАФ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
  • рд╕реЗ рдкрд╣рд▓реЗ - рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред
  • рд╕рджрд╕реНрдпрддрд╛ рдХреЗ - рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдХрд┐рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
  • рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ - рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдореЗрдЯрд╛рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рддреЛ рдПрдХ рдПрдХрд▓ рд╕рдВрд╕рд╛рдзрди рд▓рд┐рдВрдХ рдпрд╛ рд╡рд░реНрдЧрд╛рдХрд╛рд░ рдХреЛрд╖реНрдардХ рдореЗрдВ рд▓рд┐рдВрдХ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд▓рд┐рдВрдХ

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

рд▓рд┐рдВрдХ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░ (рдпрджрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдореЗрдВ рдбрдмрд▓ рдХреЛрд▓рди рд╣реИрдВ, рддреЛ рдХреЛрд▓рди рдХреЗ рдмреАрдЪ рдирд╛рдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ), рдлрд┐рд░ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд╛рдо (рдирд╛рдо рдХрд╛ рдорд╛рдорд▓рд╛) рдмрджрд▓рдирд╛ рдордд!)ред рдХреЛрдИ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╡рд░реНрдЧрд╛рдХрд╛рд░ рдХреЛрд╖реНрдардХ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

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

file { '/file1': ensure => present }
file { '/file2':
  ensure => directory,
  before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']

рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдФрд░ рд╕реВрдЪрдирд╛рдПрдВ

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╣рд╛рдБ.

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

рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реВрдЪрдирд╛рдПрдВ рд╕рдХрд░реНрдордХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЕрдзрд┐рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ:

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

рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛

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

рдХрдХреНрд╖рд╛рдУрдВ, рдЪрд░реЛрдВ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдЪрдп

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдиреЛрдб рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдПрдХ рд╣реА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рднреА рд╣реИрдВ - рдЕрдиреНрдпрдерд╛ рд╣рдо рдЗрд╕реЗ рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ node {}. рдмреЗрд╢рдХ, рдЖрдк рдмрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рдорд╛рди рднрд╛рдЧреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рдПрдХ рдЦрд░рд╛рдм рд╕рдорд╛рдзрд╛рди рд╣реИ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рднрд╛рдЧ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рде рд╣реА, рдЧрд▓рддреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, DRY (рдЦреБрдж рдХреЛ рди рджреЛрд╣рд░рд╛рдПрдВ) рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдПрдХ рдХрд╛рд░рдг рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдореМрдЬреВрдж рд╣реИ рд╡рд░реНрдЧ.

╨Ъ╨╗╨░╤Б╤Б╤Л

рд╡рд░реНрдЧ рдкреЙрдкрдкреЗрдЯ рдХреЛрдб рдХрд╛ рдПрдХ рдирд╛рдорд┐рдд рдмреНрд▓реЙрдХ рд╣реИред рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд┐рд╡рд░рдг рд╕реНрд╡рдпрдВ рдХрд╣реАрдВ рднреА рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╡рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдореЗрдирд┐рдлреЗрд╕реНрдЯреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

# ╨Ю╨┐╨╕╤Б╨░╨╜╨╕╨╡ ╨║╨╗╨░╤Б╤Б╨░ ╨╜╨░╤З╨╕╨╜╨░╨╡╤В╤Б╤П ╤Б ╨║╨╗╤О╤З╨╡╨▓╨╛╨│╨╛ ╤Б╨╗╨╛╨▓╨░ class ╨╕ ╨╡╨│╨╛ ╨╜╨░╨╖╨▓╨░╨╜╨╕╤П.
# ╨Ф╨░╨╗╤М╤И╨╡ ╨╕╨┤╤С╤В ╤В╨╡╨╗╨╛ ╨║╨╗╨░╤Б╤Б╨░ ╨▓ ╤Д╨╕╨│╤Г╤А╨╜╤Л╤Е ╤Б╨║╨╛╨▒╨║╨░╤Е.
class example_class {
    ...
}

рдЗрд╕рдХреЗ рдмрд╛рдж рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

# ╨┐╨╡╤А╨▓╤Л╨╣ ╨▓╨░╤А╨╕╨░╨╜╤В ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╜╨╕╤П тАФ ╨▓ ╤Б╤В╨╕╨╗╨╡ ╤А╨╡╤Б╤Г╤А╤Б╨░ ╤Б ╤В╨╕╨┐╨╛╨╝ class
class { 'example_class': }
# ╨▓╤В╨╛╤А╨╛╨╣ ╨▓╨░╤А╨╕╨░╨╜╤В ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╜╨╕╤П тАФ ╤Б ╨┐╨╛╨╝╨╛╤Й╤М╤О ╤Д╤Г╨╜╨║╤Ж╨╕╨╕ include
include example_class
# ╨┐╤А╨╛ ╨╛╤В╨╗╨╕╤З╨╕╨╡ ╤Н╤В╨╕╤Е ╨┤╨▓╤Г╤Е ╨▓╨░╤А╨╕╨░╨╜╤В╨╛╨▓ ╨▒╤Г╨┤╨╡╤В ╤А╨░╤Б╤Б╨║╨░╨╖╨░╨╜╨╛ ╨┤╨░╨╗╤М╤И╨╡

рдкрд┐рдЫрд▓реЗ рдХрд╛рд░реНрдп рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг - рдЖрдЗрдП nginx рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдБ:

class nginx_example {
    package { 'nginx':
        ensure => installed,
    }
    -> file { '/etc/nginx':
        ensure => directory,
        source => 'puppet:///modules/example/nginx-conf',
        recure => true,
        purge  => true,
        force  => true,
    }
    ~> service { 'nginx':
        ensure => running,
        enable => true,
    }
}

node 'server2.testdomain' {
    include nginx_example
}

рдЪрд░

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

рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛.

рдзреНрдпрд╛рди рджреЗрдВ: рдХрдардкреБрддрд▓реА рдореЗрдВ рдЪрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ!

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреЗрд╡рд▓ рдШреЛрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдорд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ undef.

рдЪрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:

# ╤Б╨╛╨╖╨┤╨░╨╜╨╕╨╡ ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╤Е
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╤Е
$var5 = $var6
file { '/tmp/text': content => $variable }
# ╨╕╨╜╤В╨╡╤А╨┐╨╛╨╗╤П╤Ж╨╕╤П ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╤Е тАФ ╤А╨░╤Б╨║╤А╤Л╤В╨╕╨╡ ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╤Е ╨▓ ╤Б╤В╤А╨╛╨║╨░╤Е. ╨а╨░╨▒╨╛╤В╨░╨╡╤В ╤В╨╛╨╗╤М╨║╨╛ ╨▓ ╨┤╨▓╨╛╨╣╨╜╤Л╤Е ╨║╨░╨▓╤Л╤З╨║╨░╤Е!
$var6 = "Variable with name variable has value ${variable}"

рдХрдардкреБрддрд▓реА рдХреЗ рдкрд╛рд╕ рд╣реИ рдирд╛рдорд╕реНрдерд╛рди, рдФрд░ рдЪрд░, рддрджрдиреБрд╕рд╛рд░, рд╣реИрдВ рджреГрд╢реНрдпрддрд╛ рдХрд╛ рдХреНрд╖реЗрддреНрд░: рдПрдХ рд╣реА рдирд╛рдо рд╡рд╛рд▓реЗ рдПрдХ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╕рдордп, рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕рдВрд▓рдЧреНрди рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдирд╛рдорд╕реНрдерд╛рди рдЙрджрд╛рд╣рд░рдг:

  • рд╡реИрд╢реНрд╡рд┐рдХ - рд╡рд░реНрдЧ рдпрд╛ рдиреЛрдб рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдЪрд░ рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ;
  • рдиреЛрдб рд╡рд┐рд╡рд░рдг рдореЗрдВ рдиреЛрдб рдирд╛рдорд╕реНрдерд╛рди;
  • рд╡рд░реНрдЧ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд░реНрдЧ рдирд╛рдорд╕реНрдерд╛рдиред

рдХрд┐рд╕реА рд╡реЗрд░рд┐рдПрдмрд▓ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╕рдордп рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡реЗрд░рд┐рдПрдмрд▓ рдирд╛рдо рдореЗрдВ рдиреЗрдорд╕реНрдкреЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

# ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П ╨▒╨╡╨╖ ╨┐╤А╨╛╤Б╤В╤А╨░╨╜╤Б╤В╨▓╨░ ╨╕╨╝╤С╨╜
$var
# ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П ╨▓ ╨│╨╗╨╛╨▒╨░╨╗╤М╨╜╨╛╨╝ ╨┐╤А╨╛╤Б╤В╤А╨░╨╜╤Б╤В╨▓╨╡ ╨╕╨╝╤С╨╜
$::var
# ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П ╨▓ ╨┐╤А╨╛╤Б╤В╤А╨░╨╜╤Б╤В╨▓╨╡ ╨╕╨╝╤С╨╜ ╨║╨╗╨░╤Б╤Б╨░
$classname::var
$::classname::var

рдЖрдЗрдП рд╕рд╣рдордд рд╣реИрдВ рдХрд┐ nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкрде рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ $nginx_conf_source. рддрдм рдХрдХреНрд╖рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧреА:

class nginx_example {
    package { 'nginx':
        ensure => installed,
    }
    -> file { '/etc/nginx':
        ensure => directory,
        source => $nginx_conf_source,   # ╨╖╨┤╨╡╤Б╤М ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╨╝ ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Г╤О ╨▓╨╝╨╡╤Б╤В╨╛ ╤Д╨╕╨║╤Б╨╕╤А╨╛╨▓╨░╨╜╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕
        recure => true,
        purge  => true,
        force  => true,
    }
    ~> service { 'nginx':
        ensure => running,
        enable => true,
    }
}

node 'server2.testdomain' {
    $nginx_conf_source = 'puppet:///modules/example/nginx-conf'
    include nginx_example
}

рд╣рд╛рд▓рд╛рдБрдХрд┐, рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЦрд╝рд░рд╛рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ "рдЧреБрдкреНрдд рдЬреНрдЮрд╛рди" рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрдореБрдХ рдирд╛рдо рд╡рд╛рд▓реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдирд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИ - рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдЖрдЗрдП рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреНрд▓рд╛рд╕ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдФрд░ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ: рдкрд╣рд▓рд╛, рдЖрд╡рд╢реНрдпрдХ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкрде рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ, nginx рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдмрд┐рдпрди рдореЗрдВ, рдкреИрдХреЗрдЬ рд╣реИрдВ nginx, nginx-light, nginx-full).

# ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╨╡ ╨╛╨┐╨╕╤Б╤Л╨▓╨░╤О╤В╤Б╤П ╤Б╤А╨░╨╖╤Г ╨┐╨╛╤Б╨╗╨╡ ╨╕╨╝╨╡╨╜╨╕ ╨║╨╗╨░╤Б╤Б╨░ ╨▓ ╨║╤А╤Г╨│╨╗╤Л╤Е ╤Б╨║╨╛╨▒╨║╨░╤Е
class nginx_example (
  $conf_source,
  $package_name = 'nginx-light', # ╨┐╨░╤А╨░╨╝╨╡╤В╤А ╤Б╨╛ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡╨╝ ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О
) {
  package { $package_name:
    ensure => installed,
  }
  -> file { '/etc/nginx':
    ensure  => directory,
    source  => $conf_source,
    recurse => true,
    purge   => true,
    force   => true,
  }
  ~> service { 'nginx':
    ensure => running,
    enable => true,
  }
}

node 'server2.testdomain' {
  # ╨╡╤Б╨╗╨╕ ╨╝╤Л ╤Е╨╛╤В╨╕╨╝ ╨╖╨░╨┤╨░╤В╤М ╨┐╨░╤А╨░╨╝╨╡╤В╤А╤Л ╨║╨╗╨░╤Б╤Б╨░, ╤Д╤Г╨╜╨║╤Ж╨╕╤П include ╨╜╨╡ ╨┐╨╛╨┤╨╛╨╣╨┤╤С╤В* тАФ ╨╜╤Г╨╢╨╜╨╛ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М resource-style declaration
  # *╨╜╨░ ╤Б╨░╨╝╨╛╨╝ ╨┤╨╡╨╗╨╡ ╨┐╨╛╨┤╨╛╨╣╨┤╤С╤В, ╨╜╨╛ ╨┐╤А╨╛ ╤Н╤В╨╛ ╤А╨░╤Б╤Б╨║╨░╨╢╤Г ╨▓ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╡╨╣ ╤Б╨╡╤А╨╕╨╕. ╨Ъ╨╗╤О╤З╨╡╨▓╨╛╨╡ ╤Б╨╗╨╛╨▓╨╛ "Hiera".
  class { 'nginx_example':
    conf_source => 'puppet:///modules/example/nginx-conf',   # ╨╖╨░╨┤╨░╤С╨╝ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╤Л ╨║╨╗╨░╤Б╤Б╨░ ╤В╨╛╤З╨╜╨╛ ╤В╨░╨║ ╨╢╨╡, ╨║╨░╨║ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╤Л ╨┤╨╗╤П ╨┤╤А╤Г╨│╨╕╤Е ╤А╨╡╤Б╤Г╤А╤Б╨╛╨▓
  }
}

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

рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:

class example (
  String $param1,
  Integer $param2,
  Array $param3,
  Hash $param4,
  Hash[String, String] $param5,
) {
  ...
}

рдХрдХреНрд╖рд╛рдПрдВ: рд╡рд░реНрдЧрдирд╛рдо рдмрдирд╛рдо рд╡рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ {'рд╡рд░реНрдЧрдирд╛рдо':}

рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрд╕рд╛рдзрди рд╣реИ рдХрдХреНрд╖рд╛. рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдХреА рддрд░рд╣, рдПрдХ рд╣реА рдиреЛрдб рдкрд░ рдПрдХ рд╣реА рд╡рд░реНрдЧ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред

рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреЛ рдПрдХ рд╣реА рдиреЛрдб рдореЗрдВ рджреЛ рдмрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ class { 'classname':} (рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ, рднрд┐рдиреНрди рдпрд╛ рд╕рдорд╛рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде), рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕рдВрд╕рд╛рдзрди рд╢реИрд▓реА рдореЗрдВ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рддреБрд░рдВрдд рдЗрд╕рдХреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PHP рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Avito рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:

  1. рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
  2. рдЖрдЗрдП рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред
  3. рд╣рдо php-fpm рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдореНрд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╣реИрдВред
  4. рд╣рдо php cli рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдореНрд▓рд┐рдВрдХ рдмрдирд╛рддреЗ рд╣реИрдВред

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдЬреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ (рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░, рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░)ред рдбрд┐рдлрд╛рдЗрди рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрдВрддрд░ рд╣реИрдВ: рдкрд╣рд▓рд╛, рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рдлрд╛рдЗрди рдПрдХ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдХрд╛рд░ рд╣реИ, рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ; рджреВрд╕рд░реЗ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддрд╛ рд╣реИ $title, рдШреЛрд╖рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдирд╛рдо рдХрд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реЗ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

PHP рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдЙрджрд╛рд╣рд░рдг:

define php74::module (
  $php_module_name = $title,
  $php_package_name = "php7.4-${title}",
  $version = 'installed',
  $priority = '20',
  $data = "extension=${title}.son",
  $php_module_path = '/etc/php/7.4/mods-available',
) {
  package { $php_package_name:
    ensure          => $version,
    install_options => ['-o', 'DPkg::NoTriggers=true'],  # ╤В╤А╨╕╨│╨│╨╡╤А╤Л ╨┤╨╡╨▒╨╕╨░╨╜╨╛╨▓╤Б╨║╨╕╤Е php-╨┐╨░╨║╨╡╤В╨╛╨▓ ╤Б╨░╨╝╨╕ ╤Б╨╛╨╖╨┤╨░╤О╤В ╤Б╨╕╨╝╨╗╨╕╨╜╨║╨╕ ╨╕ ╨┐╨╡╤А╨╡╨╖╨░╨┐╤Г╤Б╨║╨░╤О╤В ╤Б╨╡╤А╨▓╨╕╤Б php-fpm - ╨╜╨░╨╝ ╤Н╤В╨╛ ╨╜╨╡ ╨╜╤Г╨╢╨╜╨╛, ╤В╨░╨║ ╨║╨░╨║ ╨╕ ╤Б╨╕╨╝╨╗╨╕╨╜╨║╨░╨╝╨╕, ╨╕ ╤Б╨╡╤А╨▓╨╕╤Б╨╛╨╝ ╨╝╤Л ╤Г╨┐╤А╨░╨▓╨╗╤П╨╡╨╝ ╤Б ╨┐╨╛╨╝╨╛╤Й╤М╤О Puppet
  }
  -> file { "${php_module_path}/${php_module_name}.ini":
    ensure  => $ensure,
    content => $data,
  }
  file { "/etc/php/7.4/cli/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
  file { "/etc/php/7.4/fpm/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
}

node server3.testdomain {
  php74::module { 'sqlite3': }
  php74::module { 'amqp': php_package_name => 'php-amqp' }
  php74::module { 'msgpack': priority => '10' }
}

рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдШреЛрд╖рдгрд╛ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдбрд┐рдлрд╛рдЗрди рдореЗрдВ рд╣реИред рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдерд┐рд░ рдирд╛рдо рд╡рд╛рд▓рд╛ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдиреЛрдб рдкрд░ рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрддреЗ рд╣реИрдВред

рдЗрд╕рд╕реЗ рдЦреБрдж рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ: рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП $title. рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдирд┐рд░рд░реНрдердХ рдЬреЛрдбрд╝ рд╣реИ; рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рдлрд╝рдВрдХреНрд╢рди include рдирд┐рд╖реНрдХреНрд░рд┐рдп

рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ defined ╨╕ ensure_resources, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рдПрдкрд┐рд╕реЛрдб рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рд╡рд░реНрдЧреЛрдВ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдФрд░ рд╕реВрдЪрдирд╛рдПрдВ

рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдЬреЛрдбрд╝рддреА рд╣реИрдВ:

  • рдХрд┐рд╕реА рд╡рд░реНрдЧ/рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╡рд░реНрдЧ/рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЬреЛрдбрд╝рддреА рд╣реИ;
  • рдПрдХ рд╡рд░реНрдЧ/рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рд╕рднреА рд╡рд░реНрдЧ/рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреЛрдбрд╝рддреА рд╣реИ;
  • рд╡рд░реНрдЧ/рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╡рд░реНрдЧ/рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреА рд╣реИ;
  • рдХреНрд▓рд╛рд╕/рдбрд┐рдлрд╛рдЗрди рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреНрд▓рд╛рд╕/рдбрд┐рдлрд╛рдЗрди рдХреЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИред

рд╕рд╢рд░реНрдд рдмрдпрд╛рди рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╣рд╛рдБ.

if

рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:

if ╨Т╨л╨а╨Р╨Ц╨Х╨Э╨Ш╨Х1 {
  ...
} elsif ╨Т╨л╨а╨Р╨Ц╨Х╨Э╨Ш╨Х2 {
  ...
} else {
  ...
}

рдЬрдм рддрдХ

рдЬрдм рддрдХ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрд▓рдЯрд╛ рди рд╣реЛ: рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЧрд▓рдд рд╣реИ рддреЛ рдХреЛрдб рдХрд╛ рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

unless ╨Т╨л╨а╨Р╨Ц╨Х╨Э╨Ш╨Х {
  ...
}

рдорд╛рдорд▓рд╛

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

case ╨Т╨л╨а╨Р╨Ц╨Х╨Э╨Ш╨Х {
  ╨Ч╨Э╨Р╨з╨Х╨Э╨Ш╨Х1: { ... }
  ╨Ч╨Э╨Р╨з╨Х╨Э╨Ш╨Х2, ╨Ч╨Э╨Р╨з╨Х╨Э╨Ш╨Х3: { ... }
  default: { ... }
}

рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ

рдЪрдпрдирдХрд░реНрддрд╛ рдПрдХ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдорд╛рди рд╣реИ case, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред

$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }

рдореЙрдбреНрдпреВрд▓

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

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

рдореЙрдбреНрдпреВрд▓ - рдпреЗ рдПрдХ рдЕрд▓рдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦреЗ рдЧрдП рд╡рд░реНрдЧреЛрдВ, рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рдХрдардкреБрддрд▓реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕реЗрдЯ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрдардкреБрддрд▓реА рддрд░реНрдХ рдХрд╛ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдЯреБрдХрдбрд╝рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, nginx рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ nginx рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдФрд░ рдХреЗрд╡рд▓ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдпрд╛ PHP рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрддреНрдпрд╛рджрд┐ред

рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕реНрдХрд░рдгрд┐рдд рд╣реИрдВ, рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдЦреБрд▓рд╛ рднрдВрдбрд╛рд░ рд╣реИ - рдХрдардкреБрддрд▓реА рдлреЛрд░реНрдЬ.

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

рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛

рдореЙрдбреНрдпреВрд▓ рдХреА рдЬрдбрд╝ рдореЗрдВ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:

  • manifests - рдЗрд╕рдореЗрдВ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
  • files - рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ
  • templates - рдЗрд╕рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
  • lib - рдЗрд╕рдореЗрдВ рд░реВрдмреА рдХреЛрдб рд╣реИ

рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдо

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдпрд╣рд╛рдБ.

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

рдирд┐рдпрдо рд╕рд░рд▓ рд╣реИрдВ:

  • рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрди рдореЙрдбреНрдпреВрд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ foo, рддреЛ рдЗрд╕рдореЗрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП foo::<anything>рдпрд╛ рдХреЗрд╡рд▓ foo.
  • рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рд╡рд╛рд▓рд╛ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП init.pp.
  • рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдирд╛рдордХрд░рдг рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
    • рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рд╡рд╛рд▓рд╛ рдЙрдкрд╕рд░реНрдЧ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
    • рд╕рднреА рдбрдмрд▓ рдХреЛрд▓рди, рдпрджрд┐ рдХреЛрдИ рд╣реЛрдВ, рд╕реНрд▓реИрд╢ рд╕реЗ рдмрджрд▓ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
    • рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ .pp

рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛. рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореИрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ nginx. рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕рд╛рдзрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рд╡рд░реНрдЧ nginx рдкреНрд░рдХрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ init.pp;
  • рд╡рд░реНрдЧ nginx::service рдкреНрд░рдХрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ service.pp;
  • рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ nginx::server рдкреНрд░рдХрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ server.pp;
  • рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ nginx::server::location рдкреНрд░рдХрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ server/location.pp.

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рд╕реНрд╡рдпрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреНрдпрд╛ рд╣реИрдВ; рдореИрдВ рдпрд╣рд╛рдВ рдЙрдирдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╣рд╛рд▓рдд рдореЗрдВ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ.

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ: рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЕрд░реНрде рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ template, рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдкрде рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрдЯреНрдЯрд┐рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ content. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

file { '/tmp/example': content => template('modulename/templatename.erb')

рдкрде рджреЗрдЦреЗрдВ <modulename>/<filename> рдлрд╝рд╛рдЗрд▓ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ <rootdir>/modules/<modulename>/templates/<filename>.

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╣реИ inline_template тАФ рдпрд╣ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд╣реАрдВред

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

рдкрдкреЗрдЯ рдИрдЖрд░рдмреА рдФрд░ рдИрдкреАрдкреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдИрдЖрд░рдмреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛рдПрдБ:

  • <%= ╨Т╨л╨а╨Р╨Ц╨Х╨Э╨Ш╨Х %> - рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдорд╛рди рдбрд╛рд▓реЗрдВ
  • <% ╨Т╨л╨а╨Р╨Ц╨Х╨Э╨Ш╨Х %> тАФ рдХрд┐рд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ (рдЗрд╕реЗ рдбрд╛рд▓реЗ рдмрд┐рдирд╛)ред рд╕рд╢рд░реНрдд рдХрдерди (рдпрджрд┐) рдФрд░ рд▓реВрдк (рдкреНрд░рддреНрдпреЗрдХ) рдЖрдорддреМрд░ рдкрд░ рдпрд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВред
  • <%# ╨Ъ╨Ю╨Ь╨Ь╨Х╨Э╨в╨Р╨а╨Ш╨Щ %>

рдИрдЖрд░рдмреА рдореЗрдВ рднрд╛рд╡ рд░реВрдмреА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ (рдИрдЖрд░рдмреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдВрдмреЗрдбреЗрдб рд░реВрдмреА рд╣реИ)ред

рдореЗрдирд┐рдлреЗрд╕реНрдЯ рд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ @ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рдо рдХреЗ рд▓рд┐рдП. рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рдкрди рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ -%>.

рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг

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

class zookeeper::configure (
  Array[String] $nodes,
  Integer $port_client,
  Integer $port_quorum,
  Integer $port_leader,
  Hash[String, Any] $properties,
  String $datadir,
) {
  file { '/etc/zookeeper/conf/zoo.cfg':
    ensure  => present,
    content => template('zookeeper/zoo.cfg.erb'),
  }
}

рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ zoo.cfg.erb - рдЗрд╕рд▓рд┐рдП:

<% if @nodes.length > 0 -%>
<% @nodes.each do |node, id| -%>
server.<%= id %>=<%= node %>:<%= @port_leader %>:<%= @port_quorum %>;<%= @port_client %>
<% end -%>
<% end -%>

dataDir=<%= @datadir %>

<% @properties.each do |k, v| -%>
<%= k %>=<%= v %>
<% end -%>

рддрдереНрдп рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЪрд░

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

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

рддрдереНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ╤А╨╡╤Б╤Г╤А╤Б ╤В╨╕╨┐╨░ notify ╨┐╤А╨╛╤Б╤В╨╛ ╨▓╤Л╨▓╨╛╨┤╨╕╤В ╤Б╨╛╨╛╨▒╤Й╨╡╨╜╨╕╨╡ ╨▓ ╨╗╨╛╨│

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

рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдХрдардкреБрддрд▓реА рдПрдЬреЗрдВрдЯ рдкрд╣рд▓реЗ рд╕рднреА рдЙрдкрд▓рдмреНрдз рддрдереНрдп рд╕рдВрдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкреИрдкреЗрдЯрд╕рд░реНрд╡рд░ рд╕реЗ рдиреЛрдб рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдЙрдиреНрд╣реЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХрддреНрд░рд┐рдд рддрдереНрдпреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рд░реНрд╡рд░ рдХреИрдЯрд▓реЙрдЧ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред

рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддрдереНрдп

рдРрд╕реЗ рддрдереНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ facts.d. рдмреЗрд╢рдХ, рдлрд╝рд╛рдЗрд▓реЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЪрд▓рд╛рдиреЗ рдкрд░, рдЙрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ YAML рдпрд╛ key=value рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреА рд╣реЛрдЧреАред

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

#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'

рд░реВрдмреА рддрдереНрдп

рдРрд╕реЗ рддрдереНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ lib/facter.

# ╨▓╤Б╤С ╨╜╨░╤З╨╕╨╜╨░╨╡╤В╤Б╤П ╤Б ╨▓╤Л╨╖╨╛╨▓╨░ ╤Д╤Г╨╜╨║╤Ж╨╕╨╕ Facter.add ╤Б ╨╕╨╝╨╡╨╜╨╡╨╝ ╤Д╨░╨║╤В╨░ ╨╕ ╨▒╨╗╨╛╨║╨╛╨╝ ╨║╨╛╨┤╨░
Facter.add('ladvd') do
# ╨▓ ╨▒╨╗╨╛╨║╨░╤Е confine ╨╛╨┐╨╕╤Б╤Л╨▓╨░╤О╤В╤Б╤П ╤Г╤Б╨╗╨╛╨▓╨╕╤П ╨┐╤А╨╕╨╝╨╡╨╜╨╕╨╝╨╛╤Б╤В╨╕ ╤Д╨░╨║╤В╨░ тАФ ╨║╨╛╨┤ ╨▓╨╜╤Г╤В╤А╨╕ ╨▒╨╗╨╛╨║╨░ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨▓╨╡╤А╨╜╤Г╤В╤М true, ╨╕╨╜╨░╤З╨╡ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤Д╨░╨║╤В╨░ ╨╜╨╡ ╨▓╤Л╤З╨╕╤Б╨╗╤П╨╡╤В╤Б╤П ╨╕ ╨╜╨╡ ╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В╤Б╤П
  confine do
    Facter::Core::Execution.which('ladvdc') # ╨┐╤А╨╛╨▓╨╡╤А╨╕╨╝, ╤З╤В╨╛ ╨▓ PATH ╨╡╤Б╤В╤М ╤В╨░╨║╨╛╨╣ ╨╕╤Б╨┐╨╛╨╗╨╜╤П╨╡╨╝╤Л╨╣ ╤Д╨░╨╣╨╗
  end
  confine do
    File.socket?('/var/run/ladvd.sock') # ╨┐╤А╨╛╨▓╨╡╤А╨╕╨╝, ╤З╤В╨╛ ╨╡╤Б╤В╤М ╤В╨░╨║╨╛╨╣ UNIX-domain socket
  end
# ╨▓ ╨▒╨╗╨╛╨║╨╡ setcode ╨┐╤А╨╛╨╕╤Б╤Е╨╛╨┤╨╕╤В ╤Б╨╛╨▒╤Б╤В╨▓╨╡╨╜╨╜╨╛ ╨▓╤Л╤З╨╕╤Б╨╗╨╡╨╜╨╕╨╡ ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П ╤Д╨░╨║╤В╨░
  setcode do
    hash = {}
    if (out = Facter::Core::Execution.execute('ladvdc -b'))
      out.split.each do |l|
        line = l.split('=')
        next if line.length != 2
        name, value = line
        hash[name.strip.downcase.tr(' ', '_')] = value.strip.chomp(''').reverse.chomp(''').reverse
      end
    end
    hash  # ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨│╨╛ ╨▓╤Л╤А╨░╨╢╨╡╨╜╨╕╤П ╨▓ ╨▒╨╗╨╛╨║╨╡ setcode ╤П╨▓╨╗╤П╨╡╤В╤Б╤П ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡╨╝ ╤Д╨░╨║╤В╨░
  end
end

рдкрд╛рда рддрдереНрдп

рдРрд╕реЗ рддрдереНрдпреЛрдВ рдХреЛ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдиреЛрдбреНрд╕ рдкрд░ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ /etc/facter/facts.d рдкреБрд░рд╛рдиреЗ рдХрдардкреБрддрд▓реА рдореЗрдВ рдпрд╛ /etc/puppetlabs/facts.d рдирдИ рдХрдардкреБрддрд▓реА рдореЗрдВ.

examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue

рддрдереНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛

рддрдереНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:

  • рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ $facts: $facts['fqdn'];
  • рдЪрд░ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рддрдереНрдп рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: $fqdn.

рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ $facts, рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рд╡реИрд╢реНрд╡рд┐рдХ рдирд╛рдорд╕реНрдерд╛рди рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ ($::facts).

рдпрд╣рд╛рдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЕрдиреБрднрд╛рдЧ рд╣реИред

рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдЪрд░

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

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

рдЕрддрд┐рд░рд┐рдХреНрдд 1: рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рдбрд┐рдмрдЧ рдХрд░реЗрдВ?

рд▓реЗрдЦ рдореЗрдВ рдХрдардкреБрддрд▓реА рдХреЛрдб рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдереЗ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдЗрд╕ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдЦреИрд░, рдореИрдВ рдЦреБрдж рдХреЛ рд╕рд╣реА рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдкрдкреЗрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдЬреЗрдВрдЯ рд╣реА рдХрд╛рдлреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╕рд░реНрд╡рд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдПрдЬреЗрдВрдЯ

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

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдардкреБрддрд▓реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдЬреЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдореЛрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ: рдмрд╢рд░реНрддреЗ рдХрд┐ рдХрдардкреБрддрд▓реА рдХреЛрдб рдХреЛ рдиреЛрдб рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ puppet apply <╨┐╤Г╤В╤М ╨║ ╨╝╨░╨╜╨╕╤Д╨╡╤Б╤В╤Г>:

atikhonov@atikhonov ~/puppet-test $ cat helloworld.pp 
node default {
    notify { 'Hello world!': }
}
atikhonov@atikhonov ~/puppet-test $ puppet apply helloworld.pp 
Notice: Compiled catalog for atikhonov.localdomain in environment production in 0.01 seconds
Notice: Hello world!
Notice: /Stage[main]/Main/Node[default]/Notify[Hello world!]/message: defined 'message' as 'Hello world!'
Notice: Applied catalog in 0.01 seconds

рдмреЗрд╢рдХ, рд╕рд░реНрд╡рд░ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЛ рдбреЗрдореЙрди рдореЛрдб рдореЗрдВ рдиреЛрдбреНрд╕ рдкрд░ рдЪрд▓рд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рдлрд┐рд░ рд╣рд░ рдЖрдзреЗ рдШрдВрдЯреЗ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╡реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред

рдЖрдк рдХрд╛рдо рдХреЗ рдкреБрд╢ рдореЙрдбрд▓ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЬрд┐рд╕ рдиреЛрдб рдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╢реБрд░реВ рдХрд░реЗрдВ sudo puppet agent -t. рдЪрд╛рднреА -t (--test) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

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

рдПрдЬреЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдмрд┐рдирд╛ рдмрджрд▓рд╛рд╡ рдХреЗ рдПрдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рд╣реИ - рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рд╕рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдПрдЬреЗрдВрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓реЗрдЧрд╛ред рдпрд╣ рдореЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ --noop рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░: sudo puppet agent -t --noop.

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

рд╕реЗрд╡рдХ

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

рдХреЛрдб рдкрд░рд┐рдирд┐рдпреЛрдЬрди - рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╢реАрдШреНрд░рддрд╛ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рджреЗрдЦреЗрдВ (r10k рдкрд░)[https://github.com/puppetlabs/r10k], рдЫреЛрдЯреА рд╕реНрдерд╛рдкрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд░рд┐рд╢рд┐рд╖реНрдЯ 2: рдХреЛрдбрд┐рдВрдЧ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢

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

рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреНрдпреЛрдВ рдХрд░рддрд╛ рд╣реВрдВред

рдирд┐рд╖реНрдХрд░реНрд╖

рдЖрдЗрдП рдкрд░рд┐рдЪрдп рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ Hiera, ENC рдФрд░ PuppetDB рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдордЧреНрд░реА рд╣реИ - рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрдкрдХреА рд░реБрдЪрд┐ рд╣реЛрдЧреА рдЙрд╕ рдкрд░ рд╡реЛрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

  • 59,1% рддрдХ рдЙрдиреНрдирдд рдХрдардкреБрддрд▓реА рдирд┐рд░реНрдорд╛рдг - рдХреБрдЫ рдЕрдЧрд▓реЗ рд╕реНрддрд░ рдХреА рдЪреАрдЬреЗрдВ: рд▓реВрдк, рдореИрдкрд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рд▓реИрдореНрдмреНрдбрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рд╕рдВрд╕рд╛рдзрди рд╕рдВрдЧреНрд░рд╛рд╣рдХ, рдирд┐рд░реНрдпрд╛рддрд┐рдд рд╕рдВрд╕рд╛рдзрди рдФрд░ рдХрдардкреБрддрд▓реА, рдЯреИрдЧ, рдкреНрд░рджрд╛рддрд╛рдУрдВ, рдЕрдореВрд░реНрдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдВрддрд░-рд╣реЛрд╕реНрдЯ рд╕рдВрдЪрд╛рд░ред13
  • 31,8% рддрдХ "рдореИрдВ рдЕрдкрдиреА рдорд╛рдВ рдХрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╣реВрдВ" рдпрд╛ рд╣рдордиреЗ рдПрд╡рд┐рдЯреЛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдХрдИ рдкреЙрдкрдкреЗрдЯ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрддреА рдХреИрд╕реЗ рдХреА, рдФрд░, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкреЙрдкрдкреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рд╢рд╛рд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред7
  • 81,8% рддрдХ рд╣рдо рдХрдардкреБрддрд▓реА рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ: рдЙрдкрдХрд░рдг, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг, рдкрд░реАрдХреНрд╖рдг, рд╕реАрдЖрдИ/рд╕реАрдбреА.18

22 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдорддрджрд╛рди рдХрд┐рдпрд╛ред 9 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд░рд╣реЗред

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