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

рдХрдардкреБрддрд▓реА рдПрдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рд╣реЛред рдпреЛ рдЗрдЪреНрдЫрд┐рдд рд░рд╛рдЬреНрдпрдорд╛ рд╣реЛрд╕реНрдЯрд╣рд░реВ рд▓реНрдпрд╛рдЙрди рд░ рдпреЛ рд░рд╛рдЬреНрдп рдХрд╛рдпрдо рд░рд╛рдЦреНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

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

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

рдЖрдзрд╛рд░рднреВрдд рдЬрд╛рдирдХрд╛рд░реА

рдкрдкреЗрдЯрдХреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдо рдХреНрд▓рд╛рдЗрдиреНрдЯ-рд╕рд░реНрднрд░ рд╣реЛ, рдпрджреНрдпрдкрд┐ рдпрд╕рд▓реЗ рд╕реАрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдХреЛ рд╕рд╛рде рд╕рд░реНрднрд░рд▓реЗрд╕ рд╕рдЮреНрдЪрд╛рд▓рдирд▓рд╛рдИ рдкрдирд┐ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред

рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдкреБрд▓ рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ: рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдкреНрд░рддреНрдпреЗрдХ рдЖрдзрд╛ рдШрдгреНрдЯрд╛рдорд╛, рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓реЗ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░реНрднрд░рд▓рд╛рдИ рд╕рдореНрдкрд░реНрдХ рдЧрд░реНрдЫрдиреН рд░ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрдЫрдиреНред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ Ansible рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫ рднрдиреЗ, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдлрд░рдХ рдкреБрд╢ рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреН: рдкреНрд░рд╢рд╛рд╕рдХрд▓реЗ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реБ рдЧрд░реНрджрдЫ, рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓реЗ рдЖрдлреИрдВрд▓реЗ рдХреЗрд╣рд┐ рдкрдирд┐ рд▓рд╛рдЧреВ рдЧрд░реНрджреИрдирдиреНред

рд╕рдЮреНрдЬрд╛рд▓ рд╕рдЮреНрдЪрд╛рд░рдХреЛ рд╕рдордпрдорд╛, рджреБрдИ-рддрд░реНрдлреА TLS рдЗрдиреНрдХреНрд░рд┐рдкреНрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ: рд╕рд░реНрднрд░ рд░ рдЧреНрд░рд╛рд╣рдХрдХреЛ рдЖрдлреНрдиреИ рдирд┐рдЬреА рдХреБрдЮреНрдЬреАрд╣рд░реВ рд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдЫрдиреНред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╕рд░реНрднрд░рд▓реЗ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╣рд░реВ рдЬрд╛рд░реА рдЧрд░реНрджрдЫ, рддрд░ рд╕рд┐рджреНрдзрд╛рдиреНрддрдорд╛ рдмрд╛рд╣реНрдп CA рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред

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

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

рдХрдардкреБрддрд▓реА DSL рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рднрд╛рд╖рд╛ рд╣реЛред рдпрд╕рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдШреЛрд╖рдгрд╛рдХреЛ рд░реВрдкрдорд╛ рдиреЛрдбрдХреЛ рдЗрдЪреНрдЫрд┐рдд рдЕрд╡рд╕реНрдерд╛ рд╡рд░реНрдгрди рдЧрд░реНрджрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐:

  • рдлрд╛рдЗрд▓ рдЕрд╡рд╕реНрдерд┐рдд рдЫ рд░ рдпрд╕рдорд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдЫред
  • рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫред
  • рд╕реЗрд╡рд╛ рд╕реБрд░реБ рднрдПрдХреЛ рдЫ ред

рд╕реНрд░реЛрддрд╣рд░реВ рдЖрдкрд╕рдорд╛ рдЬреЛрдбреНрди рд╕рдХрд┐рдиреНрдЫ:

  • рддреНрдпрд╣рд╛рдБ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╕реНрд░реЛрддрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдХреНрд░рдордорд╛ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫрдиреНред
    рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, "рдкрд╣рд┐рд▓реЗ рдкреНрдпрд╛рдХреЗрдЬ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рддреНрдпрд╕рдкрдЫрд┐ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреБрд╣реЛрд╕реН, рддреНрдпрд╕рдкрдЫрд┐ рд╕реЗрд╡рд╛ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реНред"
  • рддреНрдпрд╣рд╛рдБ рдЕрдзрд┐рд╕реВрдЪрдирд╛рд╣рд░реВ рдЫрдиреН - рдпрджрд┐ рдПрдХ рд╕реНрд░реЛрдд рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫ рднрдиреЗ, рдпрд╕рд▓реЗ рдпрд╕рдХреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдПрдХрд╛ рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ рд╕реВрдЪрдирд╛рд╣рд░реВ рдкрдард╛рдЙрдБрдЫред
    рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрджрд┐ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рднрдпреЛ рднрдиреЗ, рддрдкрд╛рдЗрдБ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕реЗрд╡рд╛ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдердк рд░реВрдкрдорд╛, рдХрдардкреБрддрд▓реА DSL рд╕рдБрдЧ рдХрд╛рд░реНрдпрд╣рд░реВ рд░ рдЪрд░рд╣рд░реВ, рд╕рд╛рдереИ рд╕рд╢рд░реНрдд рдХрдердирд╣рд░реВ рд░ рдЪрдпрдирдХрд░реНрддрд╛рд╣рд░реВ рдЫрдиреНред рд╡рд┐рднрд┐рдиреНрди рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рд╕рдВрдпрдиреНрддреНрд░рд╣рд░реВ рдкрдирд┐ рд╕рдорд░реНрдерд┐рдд рдЫрдиреН - EPP рд░ ERBред

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

рдкрдкреЗрдЯ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдмреЗрд▓рд╛, рд╕рд░реНрднрд░рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЛрдбрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХрдЯрд╣рд░реВ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рд╣реБрдиреНрдЫрдиреНред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ, рдЪрд░рд╣рд░реВ рд░ рд╕рд╢рд░реНрдд рдХрдердирд╣рд░реВрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рдХреЛ рдореВрд▓реНрдп рдЧрдгрдирд╛ рдЧрд░реЗрдкрдЫрд┐ рд╕реНрд░реЛрддрд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕рдореНрдмрдиреНрдзрд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╣реЛред

рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рд░ рдХреЛрдбрд╕реНрдЯрд╛рдЗрд▓

рдпрд╣рд╛рдБ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХрд╛рдЧрдЬрд╛рддрдХрд╛ рдЦрдгреНрдбрд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рдмреБрдЭреНрди рдорджреНрджрдд рдЧрд░реНрджрдЫ рдпрджрд┐ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдкрд░реНрдпрд╛рдкреНрдд рдЫреИрдирдиреН рднрдиреЗ:

рдореНрдпрд╛рдирд┐рдлреЗрд╕реНрдЯ рдХрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдБ рдЫ:

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

рдЗрдиреНрдбреЗрдиреНрдЯреЗрд╕рди рд░ рд▓рд╛рдЗрди рдмреНрд░реЗрдХрд╣рд░реВ manifest рдХреЛ рдЖрд╡рд╢реНрдпрдХ рднрд╛рдЧ рд╣реЛрдЗрди, рддрд░ рддреНрдпрд╣рд╛рдБ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫ рд╢реИрд▓реА рдЧрд╛рдЗрдбред рд╕рд╛рд░рд╛рдВрд╢:

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

рдкреНрдпрд╛рдкреЗрдЯрд╕рд░реНрднрд░рдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реНрдерд╛рди

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

рдореВрд▓ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдкрдкреЗрдЯрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рд╡рд╛рддрд╛рд╡рд░рдгрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕реНрд╡рддрдиреНрддреНрд░ рд╕реЗрдЯрд╣рд░реВ рд╣реБрдиреН рдЬреБрди рдЫреБрдЯреНрдЯреИ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ git рд╕рдБрдЧ рд╕рдВрдпреЛрдЬрдирдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рдорд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╣рд░реВ git рд╢рд╛рдЦрд╛рд╣рд░реВрдмрд╛рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдПрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╡рд╛ рдЕрд░реНрдХреЛ рдорд╛ рд╕реНрдерд┐рдд рдЫред рдпреЛ рдиреЛрдбрдорд╛ рд╡рд╛ ENC рдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬреБрди рдо рдЕрд░реНрдХреЛ рд▓реЗрдЦрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреБред

  • рддреЗрд╕реНрд░реЛ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ ("рдкреБрд░рд╛рдиреЛ рдХрдардкреБрддрд▓реА") рдЖрдзрд╛рд░ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдерд┐рдпреЛ /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 - symlink
  • рд╕рд╛рдордЧреНрд░реА - рдлрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ (рдирд┐рдпрдорд┐рдд рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдЙрдкрдпреБрдХреНрдд, рд╕рдБрдЧрд╕рдБрдЧреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди рд╕реНрд░реЛрдд рд╡рд╛ рд▓рдХреНрд╖реНрдп)
  • рд╕реНрд░реЛрдд тАФ рдмрд╛рдЯреЛрдХреЛ рд▓рд┐рдЩреНрдХ рдЬрд╣рд╛рдБрдмрд╛рдЯ рддрдкрд╛рдИрдБрд▓реЗ рдлрд╛рдЗрд▓рдХрд╛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ (рд╕рдБрдЧреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди рд╕рд╛рдордЧреНрд░реА рд╡рд╛ рд▓рдХреНрд╖реНрдп)ред рдпреЛрдЬрдирд╛рдХреЛ рд╕рд╛рде URI рдХреЛ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ puppet: (рддреНрдпрд╕рдкрдЫрд┐ рдХрдардкреБрддрд▓реА рд╕рд░реНрднрд░рдмрд╛рдЯ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ), рд░ рдпреЛрдЬрдирд╛рдХреЛ рд╕рд╛рде http: (рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдпреЛ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдХреЗ рд╣реБрдиреЗрдЫ), рд░ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рд╕рдВрдЧ рдкрдирд┐ file: рд╡рд╛ рд╕реНрдХреАрдорд╛ рдмрд┐рдирд╛ рдирд┐рд░рдкреЗрдХреНрд╖ рдорд╛рд░реНрдЧрдХреЛ рд░реВрдкрдорд╛ (рддреНрдпрд╕рдкрдЫрд┐ рдиреЛрдбрдорд╛ рд╕реНрдерд╛рдиреАрдп FS рдмрд╛рдЯ рдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ)
  • рд▓рдХреНрд╖реНрдп тАФ рдЬрд╣рд╛рдБ рд╕рд┐рдорд▓рд┐рдЩреНрдХрд▓реЗ рдкреЛрдЗрдиреНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ (рд╕рдБрдЧреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди рд╕рд╛рдордЧреНрд░реА рд╡рд╛ рд╕реНрд░реЛрдд)
  • рдорд╛рд▓рд┐рдХ - рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╕рд▓реЗ рдлрд╛рдЗрд▓рдХреЛ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд▓рд┐рдиреБрдкрд░реНрдЫ
  • рд╕рдореВрд╣ - рдлрд╛рдЗрд▓ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣реБрдиреБ рдкрд░реНрдиреЗ рд╕рдореВрд╣
  • рдореЛрдб - рдлрд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рд╣рд░реВ (рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рд░реВрдкрдорд╛)
  • рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ - рдкреБрдирд░рд╛рд╡рд░реНрддреА рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдкреНрд░рд╢реЛрдзрди рд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫ
  • рд╢реБрджреНрдз - Puppet рдорд╛ рд╡рд░реНрдгрди рдирдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдореЗрдЯрд╛рдЙрди рд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫ
  • рд╢рдХреНрддрд┐ - рдкрдкреЗрдЯрдорд╛ рд╡рд░реНрдгрди рдирдЧрд░рд┐рдПрдХрд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВ рдореЗрдЯрд╛рдЙрди рд╕рдХреНрд╖рдо рдЧрд░реНрджрдЫ

рдкреНрдпрд╛рдХреЗрдЬ

рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рд░ рд╣рдЯрд╛рдЙрдБрдЫред рд╕реВрдЪрдирд╛рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕рдХреНрд╖рдо - рдпрджрд┐ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ рдкреНрдпрд╛рдХреЗрдЬ рдкреБрди: рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрджрдЫ reinstall_on_refresh.

╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л:

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

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

рд╕реЗрд╡рд╛рд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрджрдЫред рд╕реВрдЪрдирд╛рд╣рд░реВ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрди рд╕рдХреНрд╖рдо - рд╕реЗрд╡рд╛ рдкреБрди: рд╕реБрд░реБ рд╣реБрдиреНрдЫред

╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л:

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

exec

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

╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л:

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

cron

рдХреНрд░реЛрдирдЬрдмрд╣рд░реВ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрджрдЫред

╨Я╨░╤А╨░╨╝╨╡╤В╤А╤Л:

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

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

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

рд╕реНрд░реЛрддрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ

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

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

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

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

рдЕрдиреНрдп рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд░рд╣рд░реВрд╕рдБрдЧ рдирдХреНрдХрд▓рдмрд╛рдЯ рдмрдЪреНрди рдорджреНрджрдд рдЧрд░реНрди рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫрдиреН - name ╤Г рд╕реЗрд╡рд╛, command ╤Г exec, рд░ рдпрд╕реНрддреИред

рдореЗрдЯрд╛рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ

рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд░рдХреЛ рдХреЗрд╣реА рд╡рд┐рд╢реЗрд╖ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЫрдиреН, рдпрд╕рдХреЛ рдкреНрд░рдХреГрддрд┐рдХреЛ рдкрд░реНрд╡рд╛рд╣ рдирдЧрд░реАред

рдореЗрдЯрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдкреВрд░реНрдг рд╕реВрдЪреА рдХрдардкреБрддрд▓реА рдХрд╛рдЧрдЬрд╛рддрдорд╛.

рдЫреЛрдЯреЛ рд╕реВрдЪреА:

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

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

рд╕реНрд░реЛрддрд╣рд░реВрдорд╛ рд▓рд┐рдЩреНрдХрд╣рд░реВ

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

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

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

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

рдирд┐рд░реНрднрд░рддрд╛ рд░ рд╕реВрдЪрдирд╛рд╣рд░реВ

рдпрд╣рд╛рдБ рдХрд╛рдЧрдЬрд╛рддред

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

рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВрдХреЛ рд╡рд┐рдкрд░реАрдд, рд╕реВрдЪрдирд╛рд╣рд░реВ рдЯреНрд░рд╛рдиреНрдЬрд┐рдЯрд┐рдн рдЫреИрдирдиреНред рд╕реВрдЪрдирд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдореНрди рдирд┐рдпрдорд╣рд░реВ рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫрдиреН:

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

рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрджреИ

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

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

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

рдпреЛ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдпрд╕реНрддреЛ рдбрд┐рдЬрд╛рдЗрди рдЫ рд╡рд░реНрдЧ.

рдХрдХреНрд╖рд╛

╨Ъ╨╗╨░╤Б╤Б рдкрдкреЗрдЯ рдХреЛрдбрдХреЛ рдирд╛рдо рдЧрд░рд┐рдПрдХреЛ рдмреНрд▓рдХ рд╣реЛред рдХреЛрдб рдкреБрди: рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдХрдХреНрд╖рд╛рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдЫрдиреНред

рдкрд╣рд┐рд▓реЗ рдХрдХреНрд╖рд╛рдХреЛ рд╡рд░реНрдгрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╡рд░реНрдгрди рдЖрдлреИрд▓реЗ рдХрд╣рд┐рдБ рдкрдирд┐ рдХреБрдиреИ рд╕реНрд░реЛрддрд╣рд░реВ рдердкреНрджреИрдиред рд╡рд░реНрдЧ manifests рдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ:

# ╨Ю╨┐╨╕╤Б╨░╨╜╨╕╨╡ ╨║╨╗╨░╤Б╤Б╨░ ╨╜╨░╤З╨╕╨╜╨░╨╡╤В╤Б╤П ╤Б ╨║╨╗╤О╤З╨╡╨▓╨╛╨│╨╛ ╤Б╨╗╨╛╨▓╨░ 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}"

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

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

  • рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА - рдХрдХреНрд╖рд╛ рд╡рд╛ рдиреЛрдб рд╡рд┐рд╡рд░рдг рдмрд╛рд╣рд┐рд░ рдЪрд░рд╣рд░реВ рддреНрдпрд╣рд╛рдБ рдЬрд╛рдиреНрдЫрдиреН;
  • рдиреЛрдб рд╡рд┐рд╡рд░рдгрдорд╛ рдиреЛрдб рдиреЗрдорд╕реНрдкреЗрд╕;
  • рдХрдХреНрд╖рд╛рдХреЛ рд╡рд┐рд╡рд░рдгрдорд╛ class namespaceред

рдЪрд░ рдкрд╣реБрдБрдЪ рдЧрд░реНрджрд╛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдмрд╛рдЯ рдмрдЪреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЪрд░ рдирд╛рдордорд╛ рдиреЗрдорд╕реНрдкреЗрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

# ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П ╨▒╨╡╨╖ ╨┐╤А╨╛╤Б╤В╤А╨░╨╜╤Б╤В╨▓╨░ ╨╕╨╝╤С╨╜
$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',   # ╨╖╨░╨┤╨░╤С╨╝ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╤Л ╨║╨╗╨░╤Б╤Б╨░ ╤В╨╛╤З╨╜╨╛ ╤В╨░╨║ ╨╢╨╡, ╨║╨░╨║ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╤Л ╨┤╨╗╤П ╨┤╤А╤Г╨│╨╕╤Е ╤А╨╡╤Б╤Г╤А╤Б╨╛╨▓
  }
}

Puppet рдорд╛, рдЪрд░рд╣рд░реВ рдЯрд╛рдЗрдк рдЧрд░рд┐рдиреНрдЫред рдЦрд╛рдиреБрд╣реЛрд╕реН рдзреЗрд░реИ рдбрд╛рдЯрд╛ рдкреНрд░рдХрд╛рд░ред рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╡рд░реНрдЧ рд░ рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдорд╛рдирд╣рд░реВ рдорд╛рдиреНрдп рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрджрд┐ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдБрджреИрди рднрдиреЗ, рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рджреЗрдЦрд╛ рдкрд░реНрдиреЗрдЫред

рдкреНрд░рдХрд╛рд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд╛рдо рдЕрдШрд┐ рддреБрд░реБрдиреНрддреИ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ:

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

рдХрдХреНрд╖рд╛рд╣рд░реВ: рдХреНрд▓рд╛рд╕рдирд╛рдо рдмрдирд╛рдо рдХрдХреНрд╖рд╛{'classname':} рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕реНрд░реЛрдд рд╣реЛ рд╡рд░реНрдЧред рдХреБрдиреИ рдкрдирд┐ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░рдХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛, рдПрдЙрдЯреИ рдиреЛрдбрдорд╛ рдПрдЙрдЯреИ рдХрдХреНрд╖рд╛рдХреЛ рджреБрдИрд╡рдЯрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реБрди рд╕рдХреНрджреИрдиред

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

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

рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫ

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

рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, 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 {
  ...
}

рдирднрдПрд╕рдореНрдо

рдЬрдмрд╕рдореНрдо рдПрдХ if рдЙрд▓реНрдЯреЛ рдЫ: рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЧрд▓рдд рдЫ рднрдиреЗ рдХреЛрдбрдХреЛ рдмреНрд▓рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреЗрдЫред

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

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

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

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

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

рдЪрдпрдирдХрд░реНрддрд╛ рдПрдХ рд╕рдорд╛рди рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛ case, рддрд░ рдХреЛрдбрдХреЛ рдмреНрд▓рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рдпрд╕рд▓реЗ рдорд╛рди рдлрд░реНрдХрд╛рдЙрдБрдЫред

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

рдореЛрдбреНрдпреБрд▓рд╣рд░реВ

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

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

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

рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рд╕рдВрд╕реНрдХрд░рдг рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН, рд░ рдПрдХрдЕрд░реНрдХрд╛рдорд╛ рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рдкрдирд┐ рд╕рдорд░реНрдерд┐рдд рдЫрдиреНред рддреНрдпрд╣рд╛рдБ рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рдЦреБрд▓рд╛ рднрдгреНрдбрд╛рд░ рдЫ - рдХрдардкреБрддрд▓реА рдлреЛрд░реНрдЬ.

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

рдореЛрдбреНрдпреБрд▓рдорд╛ рдлрд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛

рдореЛрдбреНрдпреБрд▓рдХреЛ рд░реВрдЯрд▓реЗ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдирд╛рдорд╣рд░реВ рд╕рд╣рд┐рдд рдирд┐рдореНрди рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди рд╕рдХреНрдЫ:

  • 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.

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

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рддрдкрд╛рдИ рдЖрдлреИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рдХреЗ рд╣реБрдиреН; рдо рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддрд╛рд░рдорд╛ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗ рдЫреИрдиред рддрд░ рдо рдпрд╕рд▓рд╛рдИ рдорд╛рддреНрд░ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЫреЛрдбреНрдЫреБ Wikipedia рдХреЛ рд▓рд┐рдЩреНрдХ.

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

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

рдмрд╛рдЯреЛ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН <modulename>/<filename> рдлрд╛рдЗрд▓ рдмреБрдЭрд╛рдЙрдБрдЫ <rootdir>/modules/<modulename>/templates/<filename>.

рдпрд╕рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рддреНрдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рдЫ inline_template - рдпрд╕рд▓реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд╛рда рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рдлрд╛рдЗрд▓ рдирд╛рдо рд╣реЛрдЗрдиред

рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВ рднрд┐рддреНрд░, рддрдкрд╛рдЗрдБ рд╣рд╛рд▓рдХреЛ рджрд╛рдпрд░рд╛рдорд╛ рд╕рдмреИ рдкрдкреЗрдЯ рдЪрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдкрдкреЗрдЯрд▓реЗ ERB рд░ EPP рдврд╛рдБрдЪрд╛рдорд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ:

ERB рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЫреЛрдЯрдХрд░реАрдорд╛

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

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

ERB рдорд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рд░реБрдмреАрдорд╛ рд▓реЗрдЦрд┐рдПрдХрд╛ рдЫрдиреН (ERB рд╡рд╛рд╕реНрддрд╡рдорд╛ рдПрдореНрдмреЗрдбреЗрдб рд░реБрдмреА рд╣реЛ)ред

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

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

рдорд╛рдиреМрдВ рдо ZooKeeper рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рдореЛрдбреНрдпреБрд▓ рд▓реЗрдЦреНрджреИ рдЫреБред рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╡рд░реНрдЧ рдпреЛ рдЬрд╕реНрддреИ рджреЗрдЦрд┐рдиреНрдЫ:

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 -%>

рддрдереНрдп рд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдЪрд░рд╣рд░реВ

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

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

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

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).

рдпрд╣рд╛рдБ рдХрд╛рдЧрдЬрд╛рдд рдХреЛ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЦрдгреНрдб рдЫред

рдмрд┐рд▓реНрдЯ-рдЗрди рдЪрд░рд╣рд░реВ

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

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

рдердк рез: рдпреЛ рд╕рдмреИ рдХрд╕рд░реА рдЪрд▓рд╛рдЙрдиреЗ рд░ рдбрд┐рдмрдЧ рдЧрд░реНрдиреЗ?

рд▓реЗрдЦрдорд╛ рдХрдардкреБрддрд▓реА рдХреЛрдбрдХрд╛ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреН, рддрд░ рдпреЛ рдХреЛрдб рдХрд╕рд░реА рдЪрд▓рд╛рдЙрдиреЗ рднрдиреЗрд░ рд╣рд╛рдореАрд▓рд╛рдИ рдмрддрд╛рдЗрдПрдиред рдЦреИрд░, рдо рдЖрдлреИрд▓рд╛рдИ рд╕рдЪреНрдпрд╛рдЗрд░рд╣реЗрдХреЛ рдЫреБред

рдкрдкреЗрдЯ рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдЬреЗрдиреНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рдЫ, рддрд░ рдзреЗрд░реИ рдЬрд╕реЛ рдХреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрд▓рд╛рдИ рд╕рд░реНрднрд░ рдкрдирд┐ рдЪрд╛рд╣рд┐рдиреНрдЫред

рдПрдЬреЗрдиреНрдЯ

рдХрдореНрддрд┐рдорд╛ рд╕рдВрд╕реНрдХрд░рдг XNUMX рджреЗрдЦрд┐, рдХрдардкреБрддрд▓реА-рдПрдЬреЗрдиреНрдЯ рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВрдмрд╛рдЯ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Puppetlabs рднрдгреНрдбрд╛рд░ рд╕рдмреИ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ (рд░реБрдмреА рд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рд░рддреНрдирд╣рд░реВ), рддреНрдпрд╕реИрд▓реЗ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рд╕реНрдерд╛рдкрдирд╛ рдХрдард┐рдирд╛рдЗрд╣рд░реВ рдЫреИрдирдиреН (рдо рдбреЗрдмрд┐рдпрди-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рддрд░рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрджреИрдЫреБ - рд╣рд╛рдореА 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], рд╕рд╛рдирд╛ рд╕реНрдерд╛рдкрдирд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реБрдиреБрдкрд░реНрдЫред

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

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

рдо рдЕрд░реНрдХреЛ рд▓реЗрдЦрдорд╛ рдХрд┐рди рдпреЛ рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдЫреБ рднрдиреЗрд░ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреБред

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

рдкрд░рд┐рдЪрдпрдХреЛ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдЧрд░реМрдВред рдЕрд░реНрдХреЛ рд▓реЗрдЦрдорд╛ рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ Hiera, ENC рд░ PuppetDB рдмрд╛рд░реЗ рдмрддрд╛рдЙрдиреЗрдЫреБред

рджрд░реНрддрд╛ рднрдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдорд╛рддреНрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрдорд╛ рднрд╛рдЧ рд▓рд┐рди рд╕рдХреНрдЫрдиреНред рд╕рд╛рдЗрди рдЗрди рдЧрд░реНрдиреБрд╣реЛрд╕реНрдХреГрдкрдпрд╛

рд╡рд╛рд╕реНрддрд╡рдорд╛, рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдЫрдиреН - рдо рдирд┐рдореНрди рд╢реАрд░реНрд╖рдХрд╣рд░реВрдорд╛ рд▓реЗрдЦрд╣рд░реВ рд▓реЗрдЦреНрди рд╕рдХреНрдЫреБ, рддрдкрд╛рдИрд▓рд╛рдИ рдХреЗ рдкрдвреНрди рд░реБрдЪрд┐ рдЫ рднрдиреЗрд░ рдорддрджрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН:

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

22 рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдорддрджрд╛рди рдЧрд░реЗред 9 рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд░реЛрдХрд┐рдПред

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