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

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

рдореА рдЖрддрд╛ рдкрд╛рдЪ рд╡рд░реНрд╖рд╛рдВрдкрд╛рд╕реВрди рдкрдкреЗрдЯрд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдд рдЖрд╣реЗ. рд╣рд╛ рдордЬрдХреВрд░ рдореВрд▓рдд: рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рддреАрд▓ рдореБрдЦреНрдп рдореБрджреНрджреНрдпрд╛рдВрдЪреЗ рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдЖрдгрд┐ рдкреБрдирд░реНрдХреНрд░рдорд┐рдд рд╕рдВрдХрд▓рди рдЖрд╣реЗ, рдЬреЗ рдирд╡рд╢рд┐рдХреНрдпрд╛рдВрдирд╛ рдкрдкреЗрдЯрдЪреЗ рд╕рд╛рд░ рддреНрд╡рд░реАрдд рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрдИрд▓.

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

рдореБрд▓рднреВрдд рдорд╛рд╣рд┐рддреА

рдкрдкреЗрдЯрдЪреА рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯреАрдо рдХреНрд▓рд╛рдпрдВрдЯ-рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╣реЗ, рдЬрд░реА рддреА рдорд░реНрдпрд╛рджрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╣ рд╕рд░реНрд╡реНрд╣рд░рд▓реЗрд╕ рдСрдкрд░реЗрд╢рдирд▓рд╛ рджреЗрдЦреАрд▓ рд╕рдорд░реНрдерди рджреЗрддреЗ.

рдСрдкрд░реЗрд╢рдирдЪреЗ рдкреБрд▓ рдореЙрдбреЗрд▓ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ: рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рджрд░ рдЕрд░реНрдзреНрдпрд╛ рддрд╛рд╕рд╛рдиреЗ рдПрдХрджрд╛, рдХреНрд▓рд╛рдпрдВрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╛рдареА рд╕рд░реНрд╡реНрд╣рд░рд╢реА рд╕рдВрдкрд░реНрдХ рд╕рд╛рдзрддрд╛рдд рдЖрдгрд┐ рддреЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛рдд. рдЬрд░ рддреБрдореНрд╣реА Ansible рд╕рд╣ рдХрд╛рдо рдХреЗрд▓реЗ рдЕрд╕реЗрд▓, рддрд░ рддреЗ рд╡реЗрдЧрд│реЗ рдкреБрд╢ рдореЙрдбреЗрд▓ рд╡рд╛рдкрд░рддрд╛рдд: рдкреНрд░рд╢рд╛рд╕рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░рддреЛ, рдХреНрд▓рд╛рдпрдВрдЯ рд╕реНрд╡рддрдГ рдХрд╛рд╣реАрд╣реА рд▓рд╛рдЧреВ рдХрд░рдгрд╛рд░ рдирд╛рд╣реАрдд.

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

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

рдХрдардкреБрддрд│реАрдЪреНрдпрд╛ рдкрд░рд┐рднрд╛рд╖реЗрдд рдХрдардкреБрддрд│реА рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рд╛ рдиреЛрдбрд╕реН (рдиреЛрдбреНрд╕). рдиреЛрдбреНрд╕рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ рдЬрд╛рд╣реАрд░рдирд╛рдореНрдпрд╛рдд рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖реЗрдд - рдкрдкреЗрдЯ рдбреАрдПрд╕рдПрд▓.

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

  • рдлрд╛рдЗрд▓ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдЖрд╣реЗ.
  • рдкреЕрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ.
  • рд╕реЗрд╡рд╛ рд╕реБрд░реВ рдЭрд╛рд▓реА рдЖрд╣реЗ.

рд╕рдВрд╕рд╛рдзрдиреЗ рдПрдХрдореЗрдХрд╛рдВрд╢реА рдЬреЛрдбрд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд:

  • рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЖрд╣реЗрдд, рддреЗ рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рдХреНрд░рдорд╛рд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рддрд╛рдд.
    рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, "рдкреНрд░рдердо рдкреЕрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛, рдирдВрддрд░ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рд╛, рдирдВрддрд░ рд╕реЗрд╡рд╛ рд╕реБрд░реВ рдХрд░рд╛."
  • рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЖрд╣реЗрдд - рдЬрд░ рдПрдЦрд╛рджрд╛ рд╕рдВрд╕рд╛рдзрди рдмрджрд▓рд▓рд╛ рдЕрд╕реЗрд▓, рддрд░ рддреЗ рддреНрдпрд╛рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдирд╛ рд╕реВрдЪрдирд╛ рдкрд╛рдард╡рддреЗ.
    рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рдмрджрд▓рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рдЖрдкреЛрдЖрдк рд╕реЗрд╡рд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реВ рд╢рдХрддрд╛.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкрдкреЗрдЯ рдбреАрдПрд╕рдПрд▓рдордзреНрдпреЗ рдлрдВрдХреНрд╢рдиреНрд╕ рдЖрдгрд┐ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рддрд╕реЗрдЪ рдХрдВрдбрд┐рд╢рдирд▓ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯреНрд╕ рдЖрдгрд┐ рд╕рд┐рд▓реЗрдХреНрдЯрд░реНрд╕ рдЖрд╣реЗрдд. рд╡рд┐рд╡рд┐рдз рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдпрдВрддреНрд░рдгрд╛ рджреЗрдЦреАрд▓ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд - EPP рдЖрдгрд┐ ERB.

рдкрдкреЗрдЯ рд░реБрдмреАрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЕрдиреЗрдХ рд░рдЪрдирд╛ рдЖрдгрд┐ рд╕рдВрдЬреНрдЮрд╛ рддрд┐рдереВрди рдШреЗрддрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рд░реБрдмреА рддреБрдореНрд╣рд╛рд▓рд╛ рдкрдкреЗрдЯрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ - рдЬрдЯрд┐рд▓ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░, рдирд╡реАрди рдкреНрд░рдХрд╛рд░рдЪреЗ рд╕рдВрд╕рд╛рдзрдиреЗ, рдХрд╛рд░реНрдпреЗ рдЬреЛрдбрд╛.

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

рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдЖрдгрд┐ рдХреЛрдбрд╢реИрд▓реА

рдпреЗрдереЗ рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдЪреЗ рд╡рд┐рднрд╛рдЧ рдЖрд╣реЗрдд рдЬреЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реА рдЙрджрд╛рд╣рд░рдгреЗ рдкреБрд░реЗрд╢реА рдирд╕рд▓реНрдпрд╛рд╕ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░рддреАрд▓:

рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдХрд╕рд╛ рджрд┐рд╕рддреЛ рдпрд╛рдЪреЗ рдпреЗрдереЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ:

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

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

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

рдкреЕрдкреЗрдЯрд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рдлрд╛рдЗрд▓реНрд╕рдЪреЗ рд╕реНрдерд╛рди

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

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

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

рдкреЕрдХреЗрдЬ

рдкреЕрдХреЗрдЬреЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдЖрдгрд┐ рдХрд╛рдвреВрди рдЯрд╛рдХрддреЗ. рд╕реВрдЪрдирд╛ рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо - рдкреЕрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕ рдкреЕрдХреЗрдЬ рдкреБрдиреНрд╣рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ 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 - рдСрдЯреЛрд░рди рд╕рдХреНрд╖рдо рдЖрд╣реЗ (systemctl enable)
    • mask - рд╡реЗрд╖рд╛рдд (systemctl mask)
    • false - рдСрдЯреЛрд░рди рдЕрдХреНрд╖рдо рдЖрд╣реЗ (systemctl disable)
  • рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рд╛ - рд╕реЗрд╡рд╛ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрдорд╛рдВрдб
  • рд╕реНрдерд┐рддреА - рд╕реЗрд╡рд╛ рд╕реНрдерд┐рддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЖрджреЗрд╢
  • рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рд╛ тАФ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЗрдирд┐рдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреНрдпрд╛рд╕ рд╕рдорд░реНрдерди рджреЗрддреЗ рдХреА рдирд╛рд╣реА рддреЗ рд╕реВрдЪрд┐рдд рдХрд░рд╛. рддрд░ false рдЖрдгрд┐ рдкреЕрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рд╛ тАФ рдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░рдЪреЗ рдореВрд▓реНрдп рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рддрд░ false рдЖрдгрд┐ рдкреЕрд░рд╛рдореАрдЯрд░ рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рд╣реА - рд╕реЗрд╡рд╛ рдерд╛рдВрдмрд╡рд┐рд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреЗ рд╕реБрд░реВ рдХреЗрд▓реЗ рдЖрд╣реЗ (рдкрд░рдВрддреБ systemd рдХрдорд╛рдВрдб рд╡рд╛рдкрд░рддреЗ systemctl restart).
  • рд╕реНрдЯреЗрдЯрд╕ тАФ рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдЗрдирд┐рдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрджреЗрд╢рд╛рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ рдХреА рдирд╛рд╣реА рддреЗ рд╕реВрдЪрд┐рдд рдХрд░рд╛ status. рдЬрд░ false, рдирдВрддрд░ рдкреЕрд░рд╛рдореАрдЯрд░ рдореВрд▓реНрдп рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ рд╕реНрдерд┐рддреА. рдбреАрдлреЙрд▓реНрдЯ true.

exec

рдмрд╛рд╣реНрдп рдЖрджреЗрд╢ рдЪрд╛рд▓рд╡рддреЗ. рдЖрдкрдг рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХреЗрд▓реНрдпрд╛рд╕ рдирд┐рд░реНрдорд╛рдг, рдлрдХреНрдд рдЬрд░, рдЬреЛрдкрд░реНрдпрдВрдд рддреЛ рдХрд┐рдВрд╡рд╛ рддрд╛рдЬреЗрддрд╡рд╛рдиреЗ, рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдкрдкреЗрдЯ рдЪрд╛рд▓рд╡рддрд╛рдирд╛ рдХрдорд╛рдВрдб рд░рди рд╣реЛрдИрд▓. рд╕реВрдЪрдирд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо - рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рддреЗ.

рдорд╛рдкрджрдВрдб:

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

рдХреНрд░реЛрди

рдХреНрд░реЛрдирдЬреЙрдмреНрд╕ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ.

рдорд╛рдкрджрдВрдб:

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

рдкрдкреЗрдЯ 6.0 рдордзреНрдпреЗ рдХреНрд░реЛрди рдЬрд╕реЗ рдХреА рдмреЙрдХреНрд╕рдордзреВрди рдХрд╛рдврд▓реЗ puppetserver рдордзреНрдпреЗ, рддреНрдпрд╛рдореБрд│реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╛рдЗрдЯрд╡рд░ рдХреЛрдгрддреЗрд╣реА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдирд╛рд╣реА. рдкрдг рддреЛ рдмреЙрдХреНрд╕рдордзреНрдпреЗ рдЖрд╣реЗ рдХрдардкреБрддрд│реА-рдПрдЬрдВрдЯрдордзреНрдпреЗ, рдореНрд╣рдгреВрди рддреЗ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рддреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдХрд╛рдЧрджрдкрддреНрд░реЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдкрдкреЗрдЯрдЪреНрдпрд╛ рдкрд╛рдЪрд╡реНрдпрд╛ рдЖрд╡реГрддреНрддреАрдЪреНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдд, рдХрд┐рдВрд╡рд╛ GitHub рд╡рд░.

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдмрджреНрджрд▓

рд╕рдВрд╕рд╛рдзрдирд╛рдЪреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯрддреЗрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХрддрд╛

рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрдврд│рдгрд╛рд░реА рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдЪреВрдХ рдЖрд╣реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдШреЛрд╖рдгрд╛. рдЬреЗрд╡реНрд╣рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдПрдХрд╛рдЪ рдирд╛рд╡рд╛рдЪреЗ рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЗ рджрд┐рд╕рддрд╛рдд рддреЗрд╡реНрд╣рд╛ рд╣реА рддреНрд░реБрдЯреА рдЙрджреНрднрд╡рддреЗ.

рдореНрд╣рдгреВрди, рдореА рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣реАрди: рд╕рдорд╛рди рдиреЛрдбрд╕рд╛рдареА рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ рд╕рдорд╛рди рд╢реАрд░реНрд╖рдХрд╛рд╕рд╣ рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░рдЪреА рд╕рдВрд╕рд╛рдзрдиреЗ рдирд╕рд╛рд╡реАрдд!

рдХрд╛рд╣реАрд╡реЗрд│рд╛ рд╕рдорд╛рди рдирд╛рд╡рд╛рдЪреА рдкреЕрдХреЗрдЬреЗрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ, рдкрд░рдВрддреБ рднрд┐рдиреНрди рдкреЕрдХреЗрдЬ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рдВрд╕рд╣. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ 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 рдХрдорд╛рдВрдб рдЪрд╛рд▓рд╡рддреЗ, рд╕реЗрд╡рд╛ рд╕реЗрд╡рд╛ рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рддреЗ, рдкреЕрдХреЗрдЬ рдкреЕрдХреЗрдЬ рдкреБрдиреНрд╣рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ. рдЬрд░ рд╕рдВрд╕рд╛рдзрдирд╛рдордзреНрдпреЗ рдЕрджреНрдпрддрди рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реА рдирд╕реЗрд▓, рддрд░ рдХрд╛рд╣реАрд╣реА рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА.
  • рдкрдкреЗрдЯрдЪреНрдпрд╛ рдПрдХрд╛ рд░рди рджрд░рдореНрдпрд╛рди, рд╕рдВрд╕рд╛рдзрди рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│рд╛ рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдд рдирд╛рд╣реА. рд╣реЗ рд╢рдХреНрдп рдЖрд╣реЗ рдХрд╛рд░рдг рдЕрдзрд┐рд╕реВрдЪрдирд╛рдВрдордзреНрдпреЗ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡рд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддреЛ рдЖрдгрд┐ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЖрд▓реЗрдЦрд╛рдордзреНрдпреЗ рдЪрдХреНрд░ рдирд╕рддрд╛рдд.
  • рдЬрд░ рдХрдардкреБрддрд│реАрдиреЗ рд╕рдВрд╕рд╛рдзрдирд╛рдЪреА рд╕реНрдерд┐рддреА рдмрджрд▓рд▓реА рддрд░, рд╕рдВрд╕рд╛рдзрди рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдирд╛ рд╕реВрдЪрдирд╛ рдкрд╛рдард╡рддреЗ.
  • рдПрдЦрд╛рджреЗ рд╕рдВрд╕рд╛рдзрди рдЕрджреНрдпрддрдирд┐рдд рдХреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рд╕рджрд╕реНрдпрддреНрд╡ рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдирд╛ рд╕реВрдЪрдирд╛ рдкрд╛рдард╡рддреЗ.

рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╣рд╛рддрд╛рд│рдгреЗ

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

рд╡рд░реНрдЧ, рдЪрд▓ рдЖрдгрд┐ рд╡реНрдпрд╛рдЦреНрдпрд╛рдВрдЪрд╛ рдкрд░рд┐рдЪрдп

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

рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╢реА рд░рдЪрдирд╛ рдЖрд╣реЗ рд╡рд░реНрдЧ.

рд╡рд░реНрдЧ

рдХреНрд▓реЛрд╕реНрд╕ рдкреЙрдкреЗрдЯ рдХреЛрдбрдЪрд╛ рдПрдХ рдирд╛рдорд╛рдВрдХрд┐рдд рдмреНрд▓реЙрдХ рдЖрд╣реЗ. рдХреЛрдб рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд░реНрдЧ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд.

рдкреНрд░рдердо рд╡рд░реНрдЧрд╛рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╡рд░реНрдгрди рд╕реНрд╡рддрдГ рдХреБрдареЗрд╣реА рд╕рдВрд╕рд╛рдзрдиреЗ рдЬреЛрдбрдд рдирд╛рд╣реА. рд╡рд░реНрдЧрд╛рдЪреЗ рд╡рд░реНрдгрди рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ рдХреЗрд▓реЗ рдЖрд╣реЗ:

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

рдпрд╛рдирдВрддрд░ рд╡рд░реНрдЧ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:

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

рдорд╛рдЧреАрд▓ рдХрд╛рд░реНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг - рдЪрд▓рд╛ nginx рдЪреА рд╕реНрдерд╛рдкрдирд╛ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡рд░реНрдЧрд╛рдд рд╣рд▓рд╡реВ:

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

node 'server2.testdomain' {
    include nginx_example
}

рдЪрд▓

рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рддреАрд▓ рд╡рд░реНрдЧ рдЕрдЬрд┐рдмрд╛рдд рд▓рд╡рдЪрд┐рдХ рдирд╛рд╣реА рдХрд╛рд░рдг рддреЗ рдиреЗрд╣рдореА рд╕рдорд╛рди nginx рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрдгрддреЗ. рдЪрд▓рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪрд╛ рдорд╛рд░реНрдЧ рдмрдирд╡реВрдпрд╛, рдирдВрддрд░ рд╣рд╛ рд╡рд░реНрдЧ рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ nginx рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

рд╣реЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рдкрд░рдгреЗ.

рд▓рдХреНрд╖ рджреНрдпрд╛: рдкрдкреЗрдЯрдордзреАрд▓ рдЪрд▓ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЖрд╣реЗрдд!

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдШреЛрд╖рд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░рдЪ рдкреНрд░рд╡реЗрд╢ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдЕрдиреНрдпрдерд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреЗ рдореВрд▓реНрдп рдЕрд╕реЗрд▓ undef.

рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг:

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

рдХрдардкреБрддрд│реА рдЖрд╣реЗ рдиреЗрдорд╕реНрдкреЗрд╕, рдЖрдгрд┐ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕, рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдЖрд╣реЗрдд рджреГрд╢реНрдпрдорд╛рдирддреЗрдЪреЗ рдХреНрд╖реЗрддреНрд░: рд╕рдорд╛рди рдирд╛рд╡рд╛рдЪреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕реЗрд╕рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреНрдпрд╛ рд╡реНрд╣реЕрд▓реНрдпреВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рддрд╛рдирд╛, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рд╢реЛрдзрд▓реЗ рдЬрд╛рддреЗ, рдирдВрддрд░ рд╕рдВрд▓рдЧреНрди рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдЖрдгрд┐ рдЕрд╕реЗрдЪ рдмрд░реЗрдЪ рдХрд╛рд╣реА.

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

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

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

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

рдЪрд▓рд╛ рдорд╛рдиреНрдп рдХрд░реВрдпрд╛ рдХреА nginx рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪрд╛ рдорд╛рд░реНрдЧ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рдЖрд╣реЗ $nginx_conf_source. рдордЧ рд╡рд░реНрдЧ рдЕрд╕реЗ рджрд┐рд╕реЗрд▓:

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

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

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

рд╡рд░реНрдЧ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдХреНрд▓рд╛рд╕ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЖрд╣реЗрдд, рддреЗ рдХреНрд▓рд╛рд╕ рд╣реЗрдбрд░рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рдХреНрд▓рд╛рд╕ рдмреЙрдбреАрдордзреНрдпреЗ рдирд┐рдпрдорд┐рдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдкреНрд░рдорд╛рдгреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ рд╡рд░реНрдЧ рд╡рд╛рдкрд░рддрд╛рдирд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдореВрд▓реНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд.

рдкреЕрд░рд╛рдореАрдЯрд░ рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдпрд╛рд╡рд░ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдкреЕрд░рд╛рдореАрдЯрд░рдордзреНрдпреЗ рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдп рдирд╕рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ рд╡рд╛рдкрд░рддрд╛рдирд╛ рдореВрд▓реНрдп рд╕реЗрдЯ рдХреЗрд▓реЗ рдирд╕рд▓реНрдпрд╛рд╕, рдпрд╛рдореБрд│реЗ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯреА рдирд┐рд░реНрдорд╛рдг рд╣реЛрдИрд▓.

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

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

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

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

рдкреНрд░рдХрд╛рд░ рдкреЕрд░рд╛рдореАрдЯрд░рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдкреВрд░реНрд╡реА рд▓рдЧреЗрдЪ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ:

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

рд╡рд░реНрдЧ: рд╡рд░реНрдЧрдирд╛рдо рд╡рд┐ рд╡рд░реНрдЧ{'classname':} рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛

рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдПрдХ рдкреНрд░рдХрд╛рд░рдЪрд╛ рд╕реНрддреНрд░реЛрдд рдЖрд╣реЗ рд╡рд░реНрдЧ. рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдкреНрд░рдорд╛рдгреЗ, рдПрдХрд╛рдЪ рдиреЛрдбрд╡рд░ рдПрдХрд╛рдЪ рд╡рд░реНрдЧрд╛рдЪреА рджреЛрди рдЙрджрд╛рд╣рд░рдгреЗ рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реАрдд.

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

рддрдерд╛рдкрд┐, рдЖрдкрдг рд╡рд╛рдкрд░рд▓реНрдпрд╛рд╕ include, рдирдВрддрд░ рд╡рд░реНрдЧ рдкрд╛рд╣рд┐рдЬреЗ рддрд┐рддрдХреНрдпрд╛ рд╡реЗрд│рд╛ рдЬреЛрдбрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рд╡рд╕реНрддреБрд╕реНрдерд┐рддреА рдЕрд╢реА рдЖрд╣реЗ include рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдХреНрд▓рд╛рд╕ рдЬреЛрдбрд▓рд╛ рдЧреЗрд▓рд╛ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕рдгрд╛рд░реЗ рдПрдХ рдЗрдбрдореНрдкреЛрдЯреЗрдВрдЯ рдлрдВрдХреНрд╢рди рдЖрд╣реЗ. рдЬрд░ рд╡рд░реНрдЧ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдирд╕реЗрд▓, рддрд░ рддреЛ рдЬреЛрдбрддреЛ рдЖрдгрд┐ рдЬрд░ рддреЛ рдЖрдзреАрдкрд╛рд╕реВрди рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕реЗрд▓ рддрд░ рддреЗ рдХрд╛рд╣реАрд╣реА рдХрд░рдд рдирд╛рд╣реА. рдкрдг рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд 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 рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЙрдбреНрдпреВрд▓ рдЕрд╕реВ рд╢рдХрддреЗ, рдЗрддреНрдпрд╛рджреА.

рдореЙрдбреНрдпреБрд▓реНрд╕рдЪреА рдЖрд╡реГрддреНрддреА рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рдореЙрдбреНрдпреВрд▓реНрд╕рдЪреА рдПрдХрдореЗрдХрд╛рдВрд╡рд░реАрд▓ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рджреЗрдЦреАрд▓ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗрдд. рдореЙрдбреНрдпреВрд▓реНрд╕рдЪреЗ рдЦреБрд▓реЗ рднрд╛рдВрдбрд╛рд░ рдЖрд╣реЗ - рдХрдардкреБрддрд│реА рдлреЛрд░реНрдЬ.

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

рдирдореБрдиреЗ

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

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рд╡реЗ: рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдЯреЗрдореНрдкрд▓реЗрдЯрдЪрд╛ рдЕрд░реНрде рд╡рд╛рдврд╡рддрд╛ рдпреЗрддреЛ template, рдЬреНрдпрд╛рдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯрдЪрд╛ рдорд╛рд░реНрдЧ рдкрд╛рд╕ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╕рд╛рдареА рдлрд╛рдЗрд▓ рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ рдПрдХрддреНрд░ рд╡рд╛рдкрд░рд▓реЗ content. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпрд╛рд╕рд╛рд░рдЦреЗ:

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

рдорд╛рд░реНрдЧ рдкрд╣рд╛ <modulename>/<filename> рдлрд╛рдЗрд▓ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ <rootdir>/modules/<modulename>/templates/<filename>.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рдХрд╛рд░реНрдп рдЖрд╣реЗ inline_template тАФ рддреЗ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдордЬрдХреВрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ, рдлрд╛рдЗрд▓рдЪреЗ рдирд╛рд╡ рдирд╛рд╣реА.

рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕рдордзреНрдпреЗ, рддреБрдореНрд╣реА рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрдХреЛрдкрдордзреАрд▓ рд╕рд░реНрд╡ рдкрдкреЗрдЯ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.

рдкрдкреЗрдЯ рдИрдЖрд░рдмреА рдЖрдгрд┐ рдИрдкреАрдкреА рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ:

рдереЛрдбрдХреНрдпрд╛рдд ERB рдмрджреНрджрд▓

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

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

ERB рдордзреАрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддреА рд░реБрдмреАрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реА рдЖрд╣реЗрдд (ERB рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдПрдореНрдмреЗрдбреЗрдб рд░реБрдмреА рдЖрд╣реЗ).

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

рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг

рд╕рдордЬрд╛ рдореА 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 -%>

рддрдереНрдпреЗ рдЖрдгрд┐ рдЕрдВрдЧрднреВрдд рдЪрд▓

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

рдиреЛрдбреНрд╕рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА, рдкрдкреЗрдЯрдордзреНрдпреЗ рддрдереНрдп рдирд╛рд╡рд╛рдЪреА рдпрдВрддреНрд░рдгрд╛ рдЕрд╕рддреЗ. рддрдереНрдпреЗ - рд╣реА рдиреЛрдбрд╡рд┐рд╖рдпреА рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ, рдЬреА рдЬрд╛рдЧрддрд┐рдХ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╣реЛрд╕реНрдЯрдЪреЗ рдирд╛рд╡, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЖрд╡реГрддреНрддреА, рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреА рдпрд╛рджреА, рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдкрддреНрддреЗ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА. рддрдереНрдпреЗ рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдЖрдгрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕рдордзреНрдпреЗ рдирд┐рдпрдорд┐рдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореНрд╣рдгреВрди рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд.

рддрдереНрдпрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг:

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

рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рдЪрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд╛рдЧ рдпреЗрдереЗ рдЖрд╣реЗ.

рдЕрдВрдЧрднреВрдд рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕

рддрдереНрдпрд╛рдВрд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрд╣реЗ рдХрд╛рд╣реА рдЪрд▓, рдЬрд╛рдЧрддрд┐рдХ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.

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

рдЬреЛрдб 1: рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рдЖрдгрд┐ рдбреАрдмрдЧ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ?

рд▓реЗрдЦрд╛рдд рдХрдардкреБрддрд│реА рдХреЛрдбрдЪреА рдЕрдиреЗрдХ рдЙрджрд╛рд╣рд░рдгреЗ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рд╣рд╛ рдХреЛрдб рдХрд╕рд╛ рдЪрд╛рд▓рд╡рд╛рдпрдЪрд╛ рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдЬрд┐рдмрд╛рдд рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдирд╛рд╣реА. рдмрд░рдВ, рдореА рд╕реНрд╡рддрдГрд▓рд╛ рд╕реБрдзрд╛рд░рдд рдЖрд╣реЗ.

рдкрдкреЗрдЯ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЬрдВрдЯ рдкреБрд░реЗрд╕рд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдмрд░реНрдпрд╛рдЪ рдмрд╛рдмрддреАрдд рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪреА рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓.

рдПрдЬрдВрдЯ

рдХрд┐рдорд╛рди рдЖрд╡реГрддреНрддреА 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], рд▓рд╣рд╛рди рд╕реНрдерд╛рдкрдиреЗрд╕рд╛рдареА рддреЗ рдкреБрд░реЗрд╕реЗ рдЕрд╕рд╛рд╡реЗ.

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

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

рдореА рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдд рд╣реЗ рдХрд░рдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд╛ рдХрд░рддреЛ рддреЗ рдореА рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрди.

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

рдкрд░рд┐рдЪрдп рджреЗрдКрди рд╕рдВрдкрд╡реВ. рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдд рдореА рддреБрдореНрд╣рд╛рд▓рд╛ Hiera, ENC рдЖрдгрд┐ PuppetDB рдмрджреНрджрд▓ рд╕рд╛рдВрдЧреЗрди.

рдХреЗрд╡рд│ рдиреЛрдВрджрдгреАрдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреЗрдЪ рд╕рд░реНрд╡реЗрдХреНрд╖рдгрд╛рдд рднрд╛рдЧ рдШреЗрдК рд╢рдХрддрд╛рдд. рд╕рд╛рдЗрди рдЗрди рдХрд░рд╛, рдЖрдкрд▓реЗ рд╕реНрд╡рд╛рдЧрдд рдЖрд╣реЗ.

рдЦрд░рдВ рддрд░, рдЖрдгрдЦреА рдмрд░реЗрдЪ рд╕рд╛рд╣рд┐рддреНрдп рдЖрд╣реЗ - рдореА рдЦрд╛рд▓реАрд▓ рд╡рд┐рд╖рдпрд╛рдВрд╡рд░ рд▓реЗрдЦ рд▓рд┐рд╣реВ рд╢рдХрддреЛ, рддреБрдореНрд╣рд╛рд▓рд╛ рдЬреНрдпрд╛рдмрджреНрджрд▓ рд╡рд╛рдЪрдгреНрдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕реЗрд▓ рддреНрдпрд╛рд╡рд░ рдордд рджреНрдпрд╛:

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

22 рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдиреА рдорддрджрд╛рди рдХреЗрд▓реЗ. 9 рд╡рд╛рдкрд░рдХрд░реНрддреЗ рджреВрд░ рд░рд╛рд╣рд┐рд▓реЗ.

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