Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΊΡƒΠΊΠ»Π°

Puppet Π΅ систСм Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π‘Π΅ користи Π·Π° Π΄ΠΎΠ²Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΈΡ‚Π΅ Π²ΠΎ посакуваната ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΎΠ²Π°Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°.

Π Π°Π±ΠΎΡ‚Π°ΠΌ со Puppet повСќС ΠΎΠ΄ ΠΏΠ΅Ρ‚ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Овој тСкст Π²ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π° Π΅ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½Π° ΠΈ ΠΏΡ€Π΅ΡƒΡ€Π΅Π΄Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΠ»ΡƒΡ‡Π½ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ΄ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π°Ρ‚Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°, ΡˆΡ‚ΠΎ ќС ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΡ†ΠΈΡ‚Π΅ Π±Ρ€Π·ΠΎ Π΄Π° ја Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ ΡΡƒΡˆΡ‚ΠΈΠ½Π°Ρ‚Π° Π½Π° ΠšΡƒΠΊΠ»Π°Ρ‚Π°.

Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΊΡƒΠΊΠ»Π°

Основни ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм Π½Π° Puppet Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр, ΠΈΠ°ΠΊΠΎ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π±Π΅Π· сСрвСр со ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° функционалност.

Π‘Π΅ користи ΠΌΠΎΠ΄Π΅Π» Π½Π° Π²Π»Π΅Ρ‡Π΅ΡšΠ΅: стандардно, Сднаш Π½Π° сСкои ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° час, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Π°Ρ‚ со сСрвСрот Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΈ Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚. Ако стС Ρ€Π°Π±ΠΎΡ‚Π΅Π»Π΅ со Ansible, Ρ‚ΠΎΠ³Π°Ρˆ Ρ‚ΠΈΠ΅ користат Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° push: администраторот Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΡ€Π° процСсот Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, самитС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ Π½Π΅ΠΌΠ° Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π°Ρ‚ Π½ΠΈΡˆΡ‚ΠΎ.

Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΌΡ€Π΅ΠΆΠ½Π°Ρ‚Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, сС користи двонасочно TLS ΡˆΠΈΡ„Ρ€ΠΈΡ€Π°ΡšΠ΅: сСрвСрот ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΠΈΠΌΠ°Π°Ρ‚ свои ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ ΠΊΠ»ΡƒΡ‡Π΅Π²ΠΈ ΠΈ соодвСтни сСртификати. ΠžΠ±ΠΈΡ‡Π½ΠΎ сСрвСрот ΠΈΠ·Π΄Π°Π²Π° сСртификати Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, Π½ΠΎ Π²ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС користи Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ΅Π½ CA.

Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ манифСсти

Π’ΠΎ ΠΊΡƒΠΊΠ»Π΅Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π° Π½Π° ΠΊΡƒΠΊΠ»Π΅Π½ сСрвСр ΠΏΠΎΠ²Ρ€Π·Π΅Ρ‚Π΅ јазли (јазли). ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ Π΅ напишана Π²ΠΎ манифСсти Π²ΠΎ посСбСн програмски јазик - Puppet DSL.

Puppet DSL Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ јазик. Ја ΠΎΠΏΠΈΡˆΡƒΠ²Π° посакуваната ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ‡Π½ΠΈ рСсурси, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° постои ΠΈ ΠΈΠΌΠ° спСцифична содрТина.
  • ΠŸΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ Π΅ инсталиран.
  • Услугата Π·Π°ΠΏΠΎΡ‡Π½Π°.

РСсурситС ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ мСѓусСбно ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ:

  • ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ зависности, Ρ‚ΠΈΠ΅ Π²Π»ΠΈΡ˜Π°Π°Ρ‚ Π½Π° рСдослСдот ΠΏΠΎ кој сС користат рСсурситС.
    На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, β€žΠΏΡ€Π²ΠΎ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚, ΠΏΠΎΡ‚ΠΎΠ° ΡƒΡ€Π΅Π΄Π΅Ρ‚Π΅ ја конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°, Π° ΠΏΠΎΡ‚ΠΎΠ° ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°Ρ˜Ρ‚Π΅ ја ΡƒΡΠ»ΡƒΠ³Π°Ρ‚Π°β€œ.
  • Има ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° - Π°ΠΊΠΎ нСкој рСсурс Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Ρ‚, Ρ‚ΠΎΡ˜ ΠΈΡΠΏΡ€Π°ΡœΠ° ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° Π΄ΠΎ рСсурситС ΡˆΡ‚ΠΎ сС ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎ.
    На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ конфигурациската Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ автоматски Π΄Π° ја рСстартиратС услугата.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, Puppet DSL ΠΈΠΌΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ условни изјави ΠΈ сСлСктори. ΠŸΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ сС ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° шаблони - EPP ΠΈ ERB.

ΠšΡƒΠΊΠ»Π°Ρ‚Π° Π΅ напишана Π²ΠΎ Π ΡƒΠ±ΠΈ, ΠΏΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΠΎΠ΄ конструкциитС ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ‚Π΅ сС Π·Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ΄ Ρ‚Π°ΠΌΡƒ. Π ΡƒΠ±ΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΡˆΠΈΡ€ΠΈΡ‚Π΅ Puppet - Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ слоТСна Π»ΠΎΠ³ΠΈΠΊΠ°, Π½ΠΎΠ²ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΈ рСсурси, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π”ΠΎΠ΄Π΅ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈ Puppet, манифСстациитС Π·Π° сСкој ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ јазол Π½Π° сСрвСрот сС ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π΅ листа Π½Π° рСсурси ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ односи ΠΏΠΎ ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° врСдноста Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅, ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° условнитС искази.

Бинтакса ΠΈ стил Π½Π° ΠΊΠΎΠ΄

Π•Π²Π΅ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π°Ρ‚Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΡˆΡ‚ΠΎ ќС Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π΄Π° ја Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ синтаксата Π°ΠΊΠΎ Π΄Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π΅ сС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ:

Π•Π²Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° манифСстот:

# ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³Π΄Π΅, послС Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΠΈ.
#
# ОписаниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠ΄Ρ‹ начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова 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 }).
  • Π‘Ρ‚Ρ€Π΅Π»ΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Π½Π° исто Π½ΠΈΠ²ΠΎ.
  • ΠŸΡ€Π΅Π΄ Π½ΠΈΠ² сС напишани стрСлкитС Π·Π° однос Π½Π° рСсурситС.

Π›ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° pappetserver

Π—Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΠ±Ρ˜Π°ΡΠ½ΡƒΠ²Π°ΡšΠ΅, ќС Π³ΠΎ Π²ΠΎΠ²Π΅Π΄Π°ΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΡ‚ Π½Π° β€žroot Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌβ€œ. ΠšΠΎΡ€Π΅Π½ΡΠΊΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΡˆΡ‚ΠΎ ја содрТи ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Puppet Π·Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ јазол.

ΠšΠΎΡ€Π΅Π½ΡΠΊΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π²Π°Ρ€ΠΈΡ€Π° Π²ΠΎ зависност ΠΎΠ΄ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° Puppet ΠΈ користСнитС срСдини. ΠžΠΊΠΎΠ»ΠΈΠ½ΠΈΡ‚Π΅ сС нСзависни Π³Ρ€ΡƒΠΏΠΈ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΈ сС складирани Π²ΠΎ посСбни Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ. ΠžΠ±ΠΈΡ‡Π½ΠΎ сС користи Π²ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜Π° со git, Π²ΠΎ Ρ‚ΠΎΡ˜ ΡΠ»ΡƒΡ‡Π°Ρ˜ ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈΡ‚Π΅ сС создаваат ΠΎΠ΄ git Π³Ρ€Π°Π½ΠΊΠΈ. Π‘ΠΎΠΎΠ΄Π²Π΅Ρ‚Π½ΠΎ Π½Π° Ρ‚ΠΎΠ°, сСкој јазол сС Π½Π°ΠΎΡ“Π° Π²ΠΎ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° срСдина. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π° Π½Π° самиот јазол ΠΈΠ»ΠΈ Π²ΠΎ ENC, Π·Π° ΡˆΡ‚ΠΎ ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌ Π²ΠΎ слСдната ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

  • Π’ΠΎ Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° (β€žΡΡ‚Π°Ρ€Π°Ρ‚Π° ΠΊΡƒΠΊΠ»Π°β€œ) основниот Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ бСшС /etc/puppet. Π£ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ Π΅ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½Π° - Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ Π³ΠΈ користимС со старата ΠšΡƒΠΊΠ»Π°. Ако сС користат ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ, Ρ‚ΠΈΠ΅ ΠΎΠ±ΠΈΡ‡Π½ΠΎ сС складираат Π²ΠΎ /etc/puppet/environments, root Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина. Ако ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈΡ‚Π΅ Π½Π΅ сС користат, root Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ основниот Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ.
  • ΠŸΠΎΡ‡Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΎΠ΄ Ρ‡Π΅Ρ‚Π²Ρ€Ρ‚Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° (β€žΠ½ΠΎΠ²Π° ΠΊΡƒΠΊΠ»Π°β€œ), ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ стана Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»Π½Π°, Π° основниот Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ бСшС прСмСстСн Π²ΠΎ /etc/puppetlabs/code. Π‘ΠΏΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ°, ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈΡ‚Π΅ сС складираат Π²ΠΎ /etc/puppetlabs/code/environments, root Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина.

ΠœΠΎΡ€Π° Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π²ΠΎ root Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ manifests, кој содрТи Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ повСќС манифСстации ΠΊΠΎΠΈ Π³ΠΈ ΠΎΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅. ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ modules, кој Π³ΠΈ содрТи ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅. Кои сС ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΠ΄ΠΎΡ†Π½Π°. ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, старата ΠšΡƒΠΊΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ files, кој содрТи Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ Π²ΠΎ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅. Π’ΠΎ Π½ΠΎΠ²ΠΈΠΎΡ‚ Puppet, ситС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ сС смСстСни Π²ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° манифСст ΠΈΠΌΠ°Π°Ρ‚ наставка .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 Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚)
  • Ρ†Π΅Π»Π½ΠΈ β€” ΠΊΠ°Π΄Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° символната врска (Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π°Π΅Π΄Π½ΠΎ со содрТина ΠΈΠ»ΠΈ ΠΈΠ·Π²ΠΎΡ€)
  • сопствСникот β€” корисникот кој Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја посСдува Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°
  • Π³Ρ€ΡƒΠΏΠ° β€” Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π° која Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€ΠΈΠΏΠ°Ρ“Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°
  • Π½Π° Π²Π»Π°Π΄Π°Ρ‚Π° β€” Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π·Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ (ΠΊΠ°ΠΊΠΎ Π½ΠΈΠ·Π°)
  • ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°ΡšΠ΅ - ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Ρ€Π΅ΠΊΡƒΡ€Π·ΠΈΠ²Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚
  • чистка - ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π±Ρ€ΠΈΡˆΠ΅ΡšΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΡˆΡ‚ΠΎ Π½Π΅ сС опишани Π²ΠΎ Puppet
  • сила - ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π±Ρ€ΠΈΡˆΠ΅ΡšΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ ΠΊΠΎΠΈ Π½Π΅ сС опишани Π²ΠΎ Puppet

ΠΏΠ°ΠΊΠ΅Ρ‚

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π° ΠΈ отстранува ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. МоТС Π΄Π° Ρ€Π°ΠΊΡƒΠ²Π° со ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° - ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π³ΠΎ инсталира ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ Π°ΠΊΠΎ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ reinstall_on_refresh.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

  • ΠΈΠΌΠ΅ Π½Π° рСсурс β€” ΠΈΠΌΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ (ΠΈΠ·Π±ΠΎΡ€Π½ΠΎ)
  • ΠΈΠΌΠ΅Ρ‚ΠΎ β€” ΠΈΠΌΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ (Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ)
  • услуги β€” ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅
  • ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ - саканата ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π½Π° ΠΏΠ°ΠΊΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ:
    • present, installed - инсталирана Π±ΠΈΠ»ΠΎ која Π²Π΅Ρ€Π·ΠΈΡ˜Π°
    • latest - инсталирана Π΅ Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°
    • absent - ΠΈΠ·Π±Ρ€ΠΈΡˆΠ°Π½ΠΎ (apt-get remove)
    • purged β€” ΠΈΠ·Π±Ρ€ΠΈΡˆΠ°Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ со конфигурацискитС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ (apt-get purge)
    • held - Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ Π΅ Π·Π°ΠΊΠ»ΡƒΡ‡Π΅Π½Π° (apt-mark hold)
    • любая другая строка β€” Π½Π°Π²Π΅Π΄Π΅Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π΅ инсталирана
  • reinstall_on_refresh - Π°ΠΊΠΎ true, ΠΏΠΎΡ‚ΠΎΠ° ΠΏΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΡ‚ Π½Π° ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ќС сС инсталира. ΠšΠΎΡ€ΠΈΡΠ½ΠΎ Π·Π° дистрибуции Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΠΈΠ·Π²ΠΎΡ€, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΊΠΎΠ³Π° сС ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ false.

БСрвис

Π£ΠΏΡ€Π°Π²ΡƒΠ²Π° со услуги. МоТС Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π° ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° - ја рСстартира услугата.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

  • ΠΈΠΌΠ΅ Π½Π° рСсурс β€” услугата ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ)
  • ΠΈΠΌΠ΅Ρ‚ΠΎ β€” услугата ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° (Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ)
  • ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ β€” посакуваната ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π½Π° услугата:
    • running - лансиран
    • stopped - застана
  • ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ β€” ја ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° моТноста Π·Π° ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° услугата:
    • true β€” ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ Π΅ автоматско Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΡšΠ΅ (systemctl enable)
    • mask - маскиран (systemctl mask)
    • false β€” автоматското ΡΡ‚Π°Ρ€Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ (systemctl disable)
  • Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ - ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° услугата
  • статус β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° статусот Π½Π° услугата
  • hasrestart β€” ΠΎΠ·Π½Π°Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ услугата initscript ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΡšΠ΅. Ако false Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ β€” сС користи врСдноста Π½Π° овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€. Ако false ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Ρ€Π΅ΡΡ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½Π΅ Π΅ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΎ - услугата Π΅ Π·Π°ΠΏΡ€Π΅Π½Π° ΠΈ ΠΏΠΎΡ‡Π½Π° Π΄Π° сС рСстартира (Π½ΠΎ systemd ја користи ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° systemctl restart).
  • ΠΈΠΌΠ° статус β€” ΠΎΠ·Π½Π°Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ услугата initscript ја ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° status. Ако false, Ρ‚ΠΎΠ³Π°Ρˆ сС користи врСдноста Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ статус. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ true.

exec

Π˜Π·Π²Ρ€ΡˆΡƒΠ²Π° Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Ако Π½Π΅ Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ создава, само Π°ΠΊΠΎ, освСн Π°ΠΊΠΎ ΠΈΠ»ΠΈ ΠΎΡΠ²Π΅ΠΆΡƒΠ²Π°ΡšΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ќС сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° сСкогаш ΠΊΠΎΠ³Π° ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Puppet. МоТС Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π° ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° - ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

  • ΠΈΠΌΠ΅ Π½Π° рСсурс β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎ)
  • ΠΊΠΎΠΌΠ°Π½Π΄Π° β€” ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ (Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ)
  • ΠΏΠ°Ρ‚ β€” ΠΏΠ°Ρ‚Π΅ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠΈ сС Π±Π°Ρ€Π° ΠΈΠ·Π²Ρ€ΡˆΠ½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°
  • само Π°ΠΊΠΎ β€” Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π΅ Π·Π°Π²Ρ€ΡˆΠ΅Π½Π° со Π½ΡƒΠ»Π° ΠΏΠΎΠ²Ρ€Π°Ρ‚Π΅Π½ ΠΊΠΎΠ΄, Π³Π»Π°Π²Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ
  • освСн Π°ΠΊΠΎ β€” Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π΅ Π·Π°Π²Ρ€ΡˆΠ΅Π½Π° со ΠΏΠΎΠ²Ρ€Π°Ρ‚Π΅Π½ ΠΊΠΎΠ΄ кој Π½Π΅ Π΅ Π½ΡƒΠ»Π°, Π³Π»Π°Π²Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ
  • создава β€” Π°ΠΊΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π΅ постои, Π³Π»Π°Π²Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ
  • ΠΎΡΠ²Π΅ΠΆΡƒΠ²Π°ΡšΠ΅ - Π°ΠΊΠΎ true, Ρ‚ΠΎΠ³Π°Ρˆ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ само ΠΊΠΎΠ³Π° ΠΎΠ²Π°Π° exec ќС Π΄ΠΎΠ±ΠΈΠ΅ ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈ рСсурси
  • cwd β€” Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΎΠ΄ кој сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°
  • корисникот β€” корисникот ΠΎΠ΄ ΠΊΠΎΠ³ΠΎ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°
  • услуги - ΠΊΠ°ΠΊΠΎ Π΄Π° ја ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:
    • поксик β€” Сдноставно сС ΠΊΡ€Π΅ΠΈΡ€Π° Π΄Π΅Ρ‚Π΅ процСс, Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ‚
    • школка - ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π΅ лансирана Π²ΠΎ школка /bin/sh, ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΠ°Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС Π³Π»ΠΎΠ±ΠΈΡ€Π°ΡšΠ΅, Ρ†Π΅Π²ΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ карактСристики Π½Π° школка. ΠžΠ±ΠΈΡ‡Π½ΠΎ сС ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π° автоматски Π°ΠΊΠΎ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΈ Π·Π½Π°Ρ†ΠΈ (|, ;, &&, || ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°ΠΌΡƒ).

cron

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° cronjobs.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

  • ΠΈΠΌΠ΅ Π½Π° рСсурс - само Π½Π΅ΠΊΠ°ΠΊΠΎΠ² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€
  • ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ - крунска Π΄Ρ€ΠΆΠ°Π²Π°:
    • present - ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜ Π°ΠΊΠΎ Π½Π΅ постои
    • absent - ΠΈΠ·Π±Ρ€ΠΈΡˆΠ΅Ρ‚Π΅ Π°ΠΊΠΎ постои
  • ΠΊΠΎΠΌΠ°Π½Π΄Π° - која ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π° ја ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅
  • ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина β€” Π²ΠΎ која срСдина Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° (список Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ врСдности ΠΏΡ€Π΅ΠΊΡƒ =)
  • корисникот β€” ΠΎΠ΄ кој корисник Π΄Π° ја ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°
  • ΠΌΠΈΠ½ΡƒΡ‚Π°, час, Π΄Π΅Π»Π½ΠΈΡ‡Π΅Π½ Π΄Π΅Π½, мСсСц, мСсСчСн Π΄Π΅Π½ β€” ΠΊΠΎΠ³Π° Π΄Π° сС ΠΊΠ°Π½Π΄ΠΈΠ΄ΠΈΡ€Π° cron. Ако нСкој ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½, Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° врСдност Π²ΠΎ ΠΊΡ€ΠΎΠ½Ρ‚Π°Π±ΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ *.

Π’ΠΎ ΠΊΡƒΠΊΠ»Π° 6.0 cron ΠΊΠ°ΠΊΠΎ Π΄Π° отстранСти ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ 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 ја ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, БСрвис ја рСстартира услугата, ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π³ΠΎ инсталира ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚. Ако рСсурсот Π½Π΅ΠΌΠ° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ Π΄Π΅Ρ˜ΡΡ‚Π²ΠΎ Π·Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅, Ρ‚ΠΎΠ³Π°Ρˆ Π½ΠΈΡˆΡ‚ΠΎ Π½Π΅ сС случува.
  • Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΅Π΄Π½Π° ΡΠ΅Ρ€ΠΈΡ˜Π° Π½Π° Puppet, рСсурсот сС Π°ΠΆΡƒΡ€ΠΈΡ€Π° Π½Π΅ повСќС ΠΎΠ΄ Сднаш. Ова Π΅ ΠΌΠΎΠΆΠ½ΠΎ бидСјќи ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ°Ρ‚Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ зависности ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΡ‚ Π½Π° зависност Π½Π΅ содрТи циклуси.
  • Ако Puppet ја ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΡΠΎΡΡ‚ΠΎΡ˜Π±Π°Ρ‚Π° Π½Π° рСсурсот, рСсурсот ΠΈΡΠΏΡ€Π°ΡœΠ° ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° Π΄ΠΎ ситС рСсурси ΡˆΡ‚ΠΎ сС ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎ.
  • Ако нСкој рСсурс Π΅ Π°ΠΆΡƒΡ€ΠΈΡ€Π°Π½, Ρ‚ΠΎΡ˜ ΠΈΡΠΏΡ€Π°ΡœΠ° ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° Π΄ΠΎ ситС рСсурси ΡˆΡ‚ΠΎ сС ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎ.

Π Π°ΠΊΡƒΠ²Π°ΡšΠ΅ со Π½Π΅ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

Како ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π°ΠΊΠΎ нСкој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π° рСсурсот Π½Π΅ΠΌΠ° стандардна врСдност ΠΈ овој ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ Π²ΠΎ манифСстот, Ρ‚ΠΎΠ³Π°Ρˆ Puppet Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΎΠ²Π° ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎ Π·Π° соодвСтниот рСсурс Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ рСсурс ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ owner, Ρ‚ΠΎΠ³Π°Ρˆ Puppet Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ сопствСникот Π½Π° соодвСтната Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°.

Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ класи, ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ

Π”Π° прСтпоставимС Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ јазли ΠΊΠΎΠΈ ΠΈΠΌΠ°Π°Ρ‚ ист Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π½ΠΎ ΠΈΠΌΠ° ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠΈ - ΠΈΠ½Π°ΠΊΡƒ Π±ΠΈ ΠΌΠΎΠΆΠ΅Π»Π΅ сСто Ρ‚ΠΎΠ° Π΄Π° Π³ΠΎ опишСмС Π²ΠΎ Π΅Π΄Π΅Π½ Π±Π»ΠΎΠΊ node {}. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Сдноставно Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π½ΠΎ Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ ΠΎΠ²Π° Π΅ лошо Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° растС, ΠΈ Π°ΠΊΠΎ Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠΏΡˆΡ‚ΠΈΠΎΡ‚ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‚Π΅ истото Π½Π° ΠΌΠ½ΠΎΠ³Ρƒ мСста. Π’ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, лСсно Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΈ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΡ‚ Π‘Π£Π’Πž (Π½Π΅ сС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π°Ρ˜) Π΅ измислСн со ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°.

Π—Π° Π΄Π° сС Ρ€Π΅ΡˆΠΈ овој ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ постои Ρ‚Π°ΠΊΠΎΠ² дизајн ΠΊΠ°ΠΊΠΎ класа.

Класи

Класа Π΅ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ Π±Π»ΠΎΠΊ ΠΎΠ΄ ΠΏΠΎΠΏΠ΅Ρ‚ ΠΊΠΎΠ΄. ΠŸΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ сС часови Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚.

ΠŸΡ€Π²ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС опишС класата. Π‘Π°ΠΌΠΈΠΎΡ‚ опис Π½ΠΈΠΊΠ°Π΄Π΅ Π½Π΅ Π΄ΠΎΠ΄Π°Π²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ рСсурси. ΠšΠ»Π°ΡΠ°Ρ‚Π° Π΅ опишана Π²ΠΎ манифСсти:

# ОписаниС класса начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова 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 со која Π±ΠΈΠ»ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°.

МоТС Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ Π²ΠΎ Puppet сС Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ!

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, Π΄ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС пристапи само ΠΎΡ‚ΠΊΠ°ΠΊΠΎ ќС Π±ΠΈΠ΄Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½Π°, ΠΈΠ½Π°ΠΊΡƒ врСдноста Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° ќС Π±ΠΈΠ΄Π΅ 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 (Π²ΠΎ Debian, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ nginx, nginx-light, nginx-full).

# ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ сразу послС ΠΈΠΌΠ΅Π½ΠΈ класса Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках
class nginx_example (
  $conf_source,
  $package_name = 'nginx-light', # ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
) {
  package { $package_name:
    ensure => installed,
  }
  -> file { '/etc/nginx':
    ensure  => directory,
    source  => $conf_source,
    recurse => true,
    purge   => true,
    force   => true,
  }
  ~> service { 'nginx':
    ensure => running,
    enable => true,
  }
}

node 'server2.testdomain' {
  # Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ класса, функция include Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚* β€” Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ resource-style declaration
  # *Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚, Π½ΠΎ ΠΏΡ€ΠΎ это расскаТу Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСрии. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово "Hiera".
  class { 'nginx_example':
    conf_source => 'puppet:///modules/example/nginx-conf',   # Π·Π°Π΄Π°Ρ‘ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ класса Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсов
  }
}

Π’ΠΎ Puppet, ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ сС ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚. ΠˆΠ°Π΄Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π’ΠΈΠΏΠΎΠ²ΠΈΡ‚Π΅ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ±ΠΈΡ‡Π½ΠΎ сС користат Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π° Π½Π° врСдноститС Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° класи ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ. Ако ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΠΈΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π΅ сС совпаѓа со Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΎΡ‚ Ρ‚ΠΈΠΏ, ќС сС појави Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

Π’ΠΈΠΏΠΎΡ‚ Π΅ напишан вСднаш ΠΏΡ€Π΅Π΄ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚:

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

Класи: Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ classname vs class{'classname':}

БСкоја класа Π΅ рСсурс ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΡ‚ класа. Како ΠΈ со кој Π±ΠΈΠ»ΠΎ Π΄Ρ€ΡƒΠ³ Ρ‚ΠΈΠΏ Π½Π° рСсурс, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΎΠ΄ иста класа Π½Π° истиот јазол.

Ако сС ΠΎΠ±ΠΈΠ΄Π΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ класа Π½Π° истиот јазол Π΄Π²Π°ΠΏΠ°Ρ‚ΠΈ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ class { 'classname':} (Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΠΊΠ°, со Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ), ќС ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°. Но, Π°ΠΊΠΎ користитС класа Π²ΠΎ стилот Π½Π° рСсурситС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вСднаш Сксплицитно Π΄Π° Π³ΠΈ поставитС ситС нСјзини ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π²ΠΎ манифСстот.

ΠœΠ΅Ρ“ΡƒΡ‚ΠΎΠ°, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ користитС include, Ρ‚ΠΎΠ³Π°Ρˆ класата ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΎΠ½ΠΎΠ»ΠΊΡƒ ΠΏΠ°Ρ‚ΠΈ ΠΊΠΎΠ»ΠΊΡƒ ΡˆΡ‚ΠΎ сакатС. Π€Π°ΠΊΡ‚ Π΅ Π΄Π΅ΠΊΠ° include Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° која ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π΄Π°Π»ΠΈ Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° класа Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚. Ако класата Π½Π΅ Π΅ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚, ја Π΄ΠΎΠ΄Π°Π²Π°, Π° Π°ΠΊΠΎ вСќС постои, Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Π½ΠΈΡˆΡ‚ΠΎ. Но, Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° include НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° класата Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° класата - ситС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ поставСни Π²ΠΎ Π½Π°Π΄Π²ΠΎΡ€Π΅ΡˆΠ΅Π½ ΠΈΠ·Π²ΠΎΡ€ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ - Hiera ΠΈΠ»ΠΈ ENC. Π—Π° Π½ΠΈΠ² ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π²ΠΎ слСдната ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°

Како ΡˆΡ‚ΠΎ бСшС ΠΊΠ°ΠΆΠ°Π½ΠΎ Π²ΠΎ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΠΎΡ‚ Π±Π»ΠΎΠΊ, истата класа Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ присутна Π½Π° јазол повСќС ΠΎΠ΄ Сднаш. ΠœΠ΅Ρ“ΡƒΡ‚ΠΎΠ°, Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ случаи Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС ист Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄ со Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° истиот јазол. Π‘ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ, постои ΠΏΠΎΡ‚Ρ€Π΅Π±Π° ΠΎΠ΄ сопствСн Ρ‚ΠΈΠΏ Π½Π° рСсурси.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Π΄Π° Π³ΠΎ инсталирамС ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ PHP, Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ слСдново Π²ΠΎ Avito:

  1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ со овој ΠΌΠΎΠ΄ΡƒΠ».
  2. АјдС Π΄Π° создадСмС конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π·Π° овој ΠΌΠΎΠ΄ΡƒΠ».
  3. ΠšΡ€Π΅ΠΈΡ€Π°ΠΌΠ΅ символик Π΄ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° php-fpm.
  4. НиС создавамС символик Π΄ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° php cli.

Π’ΠΎ Ρ‚Π°ΠΊΠ²ΠΈ случаи, дизајн ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ˜ (Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ Ρ‚ΠΈΠΏ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ Ρ‚ΠΈΠΏ Π½Π° рСсурси). Π”Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π° Π΅ слична Π½Π° класа, Π½ΠΎ ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΠΊΠΈ: ΠΏΡ€Π²ΠΎ, сСкоС Define Π΅ Ρ‚ΠΈΠΏ Π½Π° рСсурс, Π° Π½Π΅ рСсурс; Π²Ρ‚ΠΎΡ€ΠΎ, сСкоја Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π° ΠΈΠΌΠ° ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ $title, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΎΠ΄ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° рСсурсот ΠΊΠΎΠ³Π° ќС сС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°. Π˜ΡΡ‚ΠΎ ΠΊΠ°ΠΊΠΎ ΠΈ Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ΠΎΡ‚ со класитС, ΠΏΡ€Π²ΠΎ ΠΌΠΎΡ€Π° Π΄Π° сС опишС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°, ΠΏΠΎ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи.

ΠŸΠΎΠ΅Π΄Π½ΠΎΡΡ‚Π°Π²Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ со ΠΌΠΎΠ΄ΡƒΠ» Π·Π° PHP:

define php74::module (
  $php_module_name = $title,
  $php_package_name = "php7.4-${title}",
  $version = 'installed',
  $priority = '20',
  $data = "extension=${title}.son",
  $php_module_path = '/etc/php/7.4/mods-available',
) {
  package { $php_package_name:
    ensure          => $version,
    install_options => ['-o', 'DPkg::NoTriggers=true'],  # Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ дСбиановских php-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² сами ΡΠΎΠ·Π΄Π°ΡŽΡ‚ симлинки ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ сСрвис php-fpm - Π½Π°ΠΌ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈ симлинками, ΠΈ сСрвисом ΠΌΡ‹ управляСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Puppet
  }
  -> file { "${php_module_path}/${php_module_name}.ini":
    ensure  => $ensure,
    content => $data,
  }
  file { "/etc/php/7.4/cli/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
  file { "/etc/php/7.4/fpm/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
}

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

НајлСсСн Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС Ρ„Π°Ρ‚ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° Π·Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ‚ Π΅ Π²ΠΎ Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅. Ова сС случува Π°ΠΊΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΈΠΌΠ° рСсурс со константно ΠΈΠΌΠ΅ ΠΈ ΠΈΠΌΠ° Π΄Π²Π° ΠΈΠ»ΠΈ повСќС случаи Π½Π° ΠΎΠ²Π°Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π° Π½Π° нСкој јазол.

ЛСсно Π΅ Π΄Π° сС Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΎΠ²Π°: ситС рСсурси Π²ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° ΠΌΠΎΡ€Π° Π΄Π° ΠΈΠΌΠ°Π°Ρ‚ ΠΈΠΌΠ΅ Π²ΠΎ зависност ΠΎΠ΄ $title. АлтСрнатива Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎ додавањС рСсурси Π²ΠΎ Π½Π°Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π΅Π½ ΡΠ»ΡƒΡ‡Π°Ρ˜, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° сС прСмСстат рСсурситС Π·Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠΈ Π·Π° ситС инстанци Π½Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° Π²ΠΎ посСбна класа ΠΈ Π΄Π° сС Π²ΠΊΠ»ΡƒΡ‡ΠΈ ΠΎΠ²Π°Π° класа Π²ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Ρ‚Π° - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°; include ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π΅Π½.

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π΄Π° сС постигнС ΠΈΠ΄Π΅ΠΌΠΎΡ‚Π΅Π½Ρ†ΠΈΡ˜Π° ΠΏΡ€ΠΈ додавањС рСсурси, ΠΈΠΌΠ΅Π½ΠΎ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ defined ΠΈ ensure_resources, Π½ΠΎ ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ Π·Π° Ρ‚ΠΎΠ° Π²ΠΎ слСдната Π΅ΠΏΠΈΠ·ΠΎΠ΄Π°.

Зависности ΠΈ ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ° Π·Π° класи ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ

ΠšΠ»Π°ΡΠΈΡ‚Π΅ ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π³ΠΈ Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ‚ слСднивС ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΡΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со зависности ΠΈ ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ°:

  • зависноста ΠΎΠ΄ класа/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Π΄ΠΎΠ΄Π°Π²Π° зависност ΠΎΠ΄ ситС рСсурси Π½Π° класата/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°;
  • класа/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ˜ зависност Π΄ΠΎΠ΄Π°Π²Π° зависности Π½Π° ситС класи/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ рСсурси;
  • ΠΈΠ·Π²Π΅ΡΡ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π·Π° класа/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Π³ΠΈ извСстува ситС рСсурси Π½Π° класата/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°;
  • класа/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π° сС ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚ΠΈ Π½Π° ситС рСсурси Π½Π° класата/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°.

Условни изјави ΠΈ сСлСктори

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΎΠ²Π΄Π΅.

if

ОвдС Π΅ Сдноставно:

if Π’Π«Π ΠΠ–Π•ΠΠ˜Π•1 {
  ...
} elsif Π’Π«Π ΠΠ–Π•ΠΠ˜Π•2 {
  ...
} else {
  ...
}

освСн ако

освСн Π°ΠΊΠΎ Π΅ Π°ΠΊΠΎ Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ: Π±Π»ΠΎΠΊΠΎΡ‚ ΠΊΠΎΠ΄ ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Π°ΠΊΠΎ ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚ Π΅ Π½Π΅Ρ‚ΠΎΡ‡Π΅Π½.

unless Π’Π«Π ΠΠ–Π•ΠΠ˜Π• {
  ...
}

ΡΠ»ΡƒΡ‡Π°Ρ˜

И Ρ‚ΡƒΠΊΠ° Π½Π΅ΠΌΠ° Π½ΠΈΡˆΡ‚ΠΎ ΠΊΠΎΠΌΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½ΠΎ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° користитС Ρ€Π΅Π΄ΠΎΠ²Π½ΠΈ врСдности (Π½ΠΈΠ·ΠΈ, Π±Ρ€ΠΎΠ΅Π²ΠΈ, ΠΈΡ‚Π½.), Ρ€Π΅Π³ΡƒΠ»Π°Ρ€Π½ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠ°ΠΊΠΎ врСдности.

case Π’Π«Π ΠΠ–Π•ΠΠ˜Π• {
  Π—ΠΠΠ§Π•ΠΠ˜Π•1: { ... }
  Π—ΠΠΠ§Π•ΠΠ˜Π•2, Π—ΠΠΠ§Π•ΠΠ˜Π•3: { ... }
  default: { ... }
}

Π‘Π΅Π»Π΅ΠΊΡ‚ΠΎΡ€ΠΈ

Π‘Π΅Π»Π΅ΠΊΡ‚ΠΎΡ€ΠΎΡ‚ Π΅ Ρ˜Π°Π·ΠΈΡ‡Π½Π° ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° слична Π½Π° case, Π½ΠΎ намСсто Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄, Ρ‚ΠΎΡ˜ Π²Ρ€Π°ΡœΠ° врСдност.

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

ΠœΠΎΠ΄ΡƒΠ»ΠΈ

Кога ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΌΠ°Π»Π°, Ρ‚Π°Π° лСсно ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ‡ΡƒΠ²Π° Π²ΠΎ Π΅Π΄Π΅Π½ манифСст. Но, ΠΊΠΎΠ»ΠΊΡƒ повСќС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΠΏΠΈΡˆΡƒΠ²Π°ΠΌΠ΅, Ρ‚ΠΎΠ»ΠΊΡƒ повСќС класи ΠΈ јазли ΠΈΠΌΠ° Π²ΠΎ манифСстот, Ρ‚ΠΎΡ˜ растС ΠΈ станува Π½Π΅Π·Π³ΠΎΠ΄Π½ΠΎ Π΄Π° сС Ρ€Π°Π±ΠΎΡ‚ΠΈ.

ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, постои ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ со ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ - ΠΊΠΎΠ³Π° Ρ†Π΅Π»ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ Π΅ Π²ΠΎ Π΅Π΄Π΅Π½ манифСст, Ρ‚Π΅ΡˆΠΊΠΎ Π΅ Π΄Π° сС сподСли овој ΠΊΠΎΠ΄ со Π΄Ρ€ΡƒΠ³ΠΈ. Π—Π° Π΄Π° Π³ΠΈ Ρ€Π΅ΡˆΠΈ ΠΎΠ²ΠΈΠ΅ Π΄Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Puppet ΠΈΠΌΠ° Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚ Π½Π°Ρ€Π΅Ρ‡Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ - ΠΎΠ²Π° сС мноТСства ΠΎΠ΄ класи, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΡƒΠΊΠ»Π΅Π½ΠΈ Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚ΠΈ смСстСни Π²ΠΎ посСбСн Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ. Π‘ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ, ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ Π΅ нСзависно ΠΏΠ°Ρ€Ρ‡Π΅ ΠΎΠ΄ ΠΊΡƒΠΊΠ»Π΅Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡƒΠ» Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со nginx ΠΈ Ρ‚ΠΎΡ˜ ќС содрТи ΡˆΡ‚ΠΎ ΠΈ само ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со nginx, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡƒΠ» Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со PHP ΠΈΡ‚Π½.

ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ сС Π²Π΅Ρ€Π·ΠΈΠΈ, Π° исто Ρ‚Π°ΠΊΠ° сС ΠΏΠΎΠ΄Π΄Ρ€ΠΆΠ°Π½ΠΈ зависноститС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³. ΠŸΠΎΡΡ‚ΠΎΠΈ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ - ΠšΡƒΠΊΠ»Π° ΠΊΠΎΠ²Π°Π½ΠΈΡ†Π°.

На ΠΊΡƒΠΊΠ»Π΅Π½ сСрвСр, ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ сС Π½Π°ΠΎΡ“Π°Π°Ρ‚ Π²ΠΎ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π° root Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚. Π’Π½Π°Ρ‚Ρ€Π΅ Π²ΠΎ сСкој ΠΌΠΎΠ΄ΡƒΠ» ΠΈΠΌΠ° стандардна шСма Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ - манифСстации, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, шаблони, lib ΠΈΡ‚Π½.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π²ΠΎ ΠΌΠΎΠ΄ΡƒΠ»

ΠšΠΎΡ€Π΅Π½ΠΎΡ‚ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ содрТи слСднитС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ со описни имиња:

  • manifests - содрТи манифСсти
  • files - содрТи Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ
  • templates - содрТи шаблони
  • lib - содрТи Π ΡƒΠ±ΠΈ ΠΊΠΎΠ΄

Ова Π½Π΅ Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Π° листа Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Π½ΠΎ Π·Π° овој напис засСга Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ.

Имиња Π½Π° рСсурси ΠΈ имиња Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΎΠ²Π΄Π΅.

РСсурситС (класи, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ) Π²ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сакатС. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ, постои Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π° ΠΊΠΎΡ€Π΅ΡΠΏΠΎΠ½Π΄Π΅Π½Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° рСсурсот ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π²ΠΎ која Puppet ќС Π±Π°Ρ€Π° опис Π½Π° Ρ‚ΠΎΡ˜ рСсурс. Ако Π³ΠΈ ΠΏΡ€Π΅ΠΊΡ€ΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΠΈΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅, Ρ‚ΠΎΠ³Π°Ρˆ Puppet Сдноставно Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ најдС описот Π½Π° рСсурситС ΠΈ ќС Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

ΠŸΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° сС Сдноставни:

  • Π‘ΠΈΡ‚Π΅ рСсурси Π²ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ Π²ΠΎ имСнскиот простор Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚. Ако сС ΠΏΠΎΠ²ΠΈΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ 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 β€” Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ° тСкстот Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½ΠΎΡ‚ ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π·, Π° Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π°.

Π’ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ користитС ситС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° Puppet Π²ΠΎ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ опсСг.

Puppet ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° шаблони Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ERB ΠΈ EPP:

Накратко Π·Π° Π•Π Π‘

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½ΠΈ структури:

  • <%= Π’Π«Π ΠΠ–Π•ΠΠ˜Π• %> β€” внСсСтС ја врСдноста Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚
  • <% Π’Π«Π ΠΠ–Π•ΠΠ˜Π• %> β€” ΠΏΡ€Π΅ΡΠΌΠ΅Ρ‚Π°Ρ˜Ρ‚Π΅ ја врСдноста Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΎΡ‚ (Π±Π΅Π· Π΄Π° Π³ΠΎ Π²ΠΌΠ΅Ρ‚Π½Π΅Ρ‚Π΅). УсловнитС изјави (Π°ΠΊΠΎ) ΠΈ циклуситС (сСкоја) ΠΎΠ±ΠΈΡ‡Π½ΠΎ ΠΎΠ΄Π°Ρ‚ ΠΎΠ²Π΄Π΅.
  • <%# ΠšΠžΠœΠœΠ•ΠΠ’ΠΠ Π˜Π™ %>

Π˜Π·Ρ€Π°Π·ΠΈΡ‚Π΅ Π²ΠΎ ERB сС напишани Π²ΠΎ Ruby (ERB Π΅ Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ Embedded Ruby).

Π—Π° Π΄Π° пристапитС Π΄ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ ΠΎΠ΄ манифСстот, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ @ Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π°. Π—Π° Π΄Π° отстранитС ΠΏΡ€Π΅ΠΊΠΈΠ½ Π½Π° Π»ΠΈΠ½ΠΈΡ˜Π°Ρ‚Π° ΡˆΡ‚ΠΎ сС ΠΏΠΎΡ˜Π°Π²ΡƒΠ²Π° ΠΏΠΎ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π°, Ρ‚Ρ€Π΅Π±Π° Π΄Π° користитС ΠΎΠ·Π½Π°ΠΊΠ° Π·Π° Π·Π°Ρ‚Π²ΠΎΡ€Π°ΡšΠ΅ -%>.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½ΠΎΡ‚

Π”Π° Ρ€Π΅Ρ‡Π΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΈΡˆΡƒΠ²Π°ΠΌ ΠΌΠΎΠ΄ΡƒΠ» Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° 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 -%>

Π€Π°ΠΊΡ‚ΠΈ ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ

ЧСсто, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈΠΎΡ‚ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° зависи ΠΎΠ΄ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ сС случува Π½Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎ зависност ΠΎΠ΄ Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Debian, Ρ‚Ρ€Π΅Π±Π° Π΄Π° инсталиратС Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ слСдитС сСто ΠΎΠ²Π° Ρ€Π°Ρ‡Π½ΠΎ, ΠΏΡ€Π΅ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ сС манифСстира Π°ΠΊΠΎ сС ΠΏΡ€ΠΎΠΌΠ΅Π½Π°Ρ‚ Ρ˜Π°Π·Π»ΠΈΡ‚Π΅. Но, ΠΎΠ²Π° Π½Π΅ Π΅ сСриозСн пристап, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°.

Π—Π° Π΄Π° сС Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅, Puppet ΠΈΠΌΠ° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π½Π°Ρ€Π΅Ρ‡Π΅Π½ Ρ„Π°ΠΊΡ‚ΠΈ. Ρ„Π°ΠΊΡ‚ΠΈ - ΠΎΠ²Π° сС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚, достапни Π²ΠΎ манифСстации Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΎΠ±ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΠΎΡ‚ имСнски простор. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅ Π½Π° домаќин, Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ систСм, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π½Π° процСсор, листа Π½Π° корисници, листа Π½Π° ΠΌΡ€Π΅ΠΆΠ½ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ адрСси ΠΈ ΠΌΠ½ΠΎΠ³Ρƒ, ΠΌΠ½ΠΎΠ³Ρƒ повСќС. Π€Π°ΠΊΡ‚ΠΈΡ‚Π΅ сС достапни Π²ΠΎ манифСстации ΠΈ шаблони ΠΊΠ°ΠΊΠΎ Ρ€Π΅Π΄ΠΎΠ²Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° со Ρ„Π°ΠΊΡ‚ΠΈ:

notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# рСсурс Ρ‚ΠΈΠΏΠ° notify просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС Π² Π»ΠΎΠ³

Π€ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΠΊΠ°ΠΆΠ°Π½ΠΎ, Ρ„Π°ΠΊΡ‚ ΠΈΠΌΠ° ΠΈΠΌΠ΅ (Π½ΠΈΠ·Π°) ΠΈ врСдност (достапни сС Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΈ: Π½ΠΈΠ·ΠΈ, Π½ΠΈΠ·ΠΈ, Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ). ΠˆΠ°Π΄Π΅Ρ‚Π΅ Π·Π±ΠΈΡ€ Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ„Π°ΠΊΡ‚ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ° Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ своја. Опишани сС собирачитС Π½Π° Ρ„Π°ΠΊΡ‚ΠΈ ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎ Π ΡƒΠ±ΠΈ, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ. Π€Π°ΠΊΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС прСтстават ΠΈ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° тСкстуални Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅.

Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°, ΠΊΡƒΠΊΠ»Π΅Π½ΠΈΠΎΡ‚ Π°Π³Π΅Π½Ρ‚ ΠΏΡ€Π²ΠΎ Π³ΠΈ ΠΊΠΎΠΏΠΈΡ€Π° ситС достапни собирачи Π½Π° Ρ„Π°ΠΊΡ‚ΠΈ ΠΎΠ΄ папСтсСрвСрот Π΄ΠΎ Ρ˜Π°Π·ΠΎΠ»ΠΎΡ‚, ΠΏΠΎ ΡˆΡ‚ΠΎ Π³ΠΈ лансира ΠΈ Π³ΠΈ ΠΈΡΠΏΡ€Π°ΡœΠ° собранитС Ρ„Π°ΠΊΡ‚ΠΈ Π΄ΠΎ сСрвСрот; По ΠΎΠ²Π°, сСрвСрот Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π° со ΡΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΡ‚.

Π€Π°ΠΊΡ‚ΠΈ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ

Π’Π°ΠΊΠ²ΠΈΡ‚Π΅ Ρ„Π°ΠΊΡ‚ΠΈ сС смСстСни Π²ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ facts.d. Π‘Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ. Кога сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚, Ρ‚ΠΈΠ΅ ΠΌΠΎΡ€Π° Π΄Π° ΠΈΠ·Π»Π΅Π·Π°Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° стандардСн ΠΈΠ·Π»Π΅Π· ΠΈΠ»ΠΈ Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ YAML ΠΈΠ»ΠΈ key=value.

НС Π·Π°Π±ΠΎΡ€Π°Π²Π°Ρ˜Ρ‚Π΅ Π΄Π΅ΠΊΠ° Ρ„Π°ΠΊΡ‚ΠΈΡ‚Π΅ сС однСсуваат Π½Π° ситС јазли ΠΊΠΎΠΈ сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ ΠΎΠ΄ сСрвСрот poppet Π½Π° кој Π΅ распорСдСн Π²Π°ΡˆΠΈΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ». Π—Π°Ρ‚ΠΎΠ°, Π²ΠΎ скриптата, Π²Π½ΠΈΠΌΠ°Π²Π°Ρ˜Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ систСмот Π³ΠΈ ΠΈΠΌΠ° ситС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Π²Π°ΡˆΠΈΠΎΡ‚ Ρ„Π°ΠΊΡ‚.

#!/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 адрСса Π½Π° сСрвСрот, ΠΎΠΊΠΎΠ»ΠΈΠ½Π°.
  • Ρ„Π°ΠΊΡ‚ΠΈ Π·Π° Π°Π³Π΅Π½Ρ‚ΠΎΡ‚ β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ΄ ΠΊΡƒΠΊΠ»Π°-Π°Π³Π΅Π½Ρ‚, Π° Π½Π΅ ΠΏΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ β€” ΠΈΠΌΠ΅ Π½Π° сСртификат, Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Π°Π³Π΅Π½Ρ‚, Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΊΡƒΠΊΠ»Π΅Π½Π°.
  • господар ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ - Pappetmaster ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (sic!). Π’ΠΎΠ° Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ исто ΠΊΠ°ΠΊΠΎ Π²ΠΎ Ρ„Π°ΠΊΡ‚ΠΈ Π½Π° сСрвСрот, плус врСдноститС Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° сС достапни.
  • ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ ΠΊΠΎΠΈ сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ сСкој опсСг: ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ» ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ Π²ΠΎ кој Π±ΠΈΠ» пристапСн Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚. Π’ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користат, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ часови Π½Π΅ сС користат Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π”ΠΎΠ΄Π°Ρ‚ΠΎΠΊ 1: ΠΊΠ°ΠΊΠΎ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΈ Π΄Π΅Π±Π°Π³ΠΈΡ€Π° сСто ΠΎΠ²Π°?

Написот имашС ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π½Π° ΠΊΡƒΠΊΠ»Π΅Π½ ΠΊΠΎΠ΄, Π½ΠΎ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ Π½ΠΈ ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ овој ΠΊΠΎΠ΄. Па, сС ΠΏΠΎΠΏΡ€Π°Π²Π°ΠΌ.

АгСнтот Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Puppet, Π½ΠΎ Π·Π° ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ случаи ќС Π²ΠΈ Ρ‚Ρ€Π΅Π±Π° ΠΈ сСрвСр.

АгСнт

Π‘Π°Ρ€Π΅ΠΌ ΠΎΠ΄ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° 5, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ со ΠΊΡƒΠΊΠ»ΠΈ-Π°Π³Π΅Π½Ρ‚ΠΈ ΠΎΠ΄ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ Π½Π° Puppetlabs Π³ΠΈ содрТи ситС зависности (Ρ€ΡƒΠ±ΠΈΠ½ ΠΈ соодвСтнитС скапоцСни камСња), Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π½Π΅ΠΌΠ° Ρ‚Π΅ΡˆΠΊΠΎΡ‚ΠΈΠΈ ΠΏΡ€ΠΈ ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° (Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌ Π·Π° дистрибуции Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Debian - Π½Π΅ користимС дистрибуции Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° 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. НС ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π°ΠΊΠΎ сС Π±Π°Π·ΠΈΡ€Π°Π°Ρ‚ Π½Π° имиња Π½Π° домаќини.
  5. Π‘Π»ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄ΠΎΠ΄Π°Π²Π°Ρ˜Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° класи ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ - ΠΎΠ²Π° Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ ΠΎΠ΄ ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ° скриСна Π²ΠΎ Ρ‚Π΅Π»ΠΎΡ‚ΠΎ Π½Π° класата/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°.

ЌС објаснам Π·ΠΎΡˆΡ‚ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π° Π²ΠΎ слСдната ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°.

Π—Π°ΠΊΠ»ΡƒΡ‡ΠΎΠΊ

Π”Π° Π·Π°Π²Ρ€ΡˆΠΈΠΌΠ΅ со Π²ΠΎΠ²Π΅Π΄ΠΎΡ‚. Π’ΠΎ слСдната ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ Π·Π° Hiera, ENC ΠΈ PuppetDB.

Π‘Π°ΠΌΠΎ рСгистрирани корисници ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° учСствуваат Π²ΠΎ Π°Π½ΠΊΠ΅Ρ‚Π°Ρ‚Π°. Најави сС, Π²ΠΈΠ΅ стС Π΄ΠΎΠ±Ρ€Π΅Π΄ΠΎΡ˜Π΄Π΅Π½ΠΈ.

Π’ΡΡƒΡˆΠ½ΠΎΡΡ‚, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ повСќС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»ΠΈ - ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΠΏΠΈΡˆΡƒΠ²Π°ΠΌ статии Π½Π° слСднивС Ρ‚Π΅ΠΌΠΈ, Π΄Π° гласам Π·Π° ΡˆΡ‚ΠΎ Π±ΠΈ Π²Π΅ интСрСсирало Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅:

  • 59,1%НапрСдни ΠΊΡƒΠΊΠ»Π΅Π½ΠΈ конструкции - Π½Π΅ΠΊΠΎΠΈ ΡΡ€Π°ΡšΠ° ΠΎΠ΄ слСдното Π½ΠΈΠ²ΠΎ: јамки, ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·Ρ€Π°Π·ΠΈ, собирачи Π½Π° рСсурси, ΠΈΠ·Π²Π΅Π·Π΅Π½ΠΈ рСсурси ΠΈ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΌΠ΅Ρ“Ρƒ Π΄ΠΎΠΌΠ°ΡœΠΈΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΊΡƒ Puppet, ΠΎΠ·Π½Π°ΠΊΠΈ, Π΄ΠΎΠ±Π°Π²ΡƒΠ²Π°Ρ‡ΠΈ, апстрактни Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ.13
  • 31,8%β€žΠˆΠ°Ρ сум Π°Π΄ΠΌΠΈΠ½ Π½Π° мајка ΠΌΠΈβ€œ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎ Π½ΠΈΠ΅ Π²ΠΎ Авито сС Π΄Ρ€ΡƒΠΆΠ΅Π²ΠΌΠ΅ со Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΠΎΠΏΠ΅Ρ‚ сСрвСри ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ ΠΈ, Π²ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΠΎΠΏΠ΅Ρ‚ сСрвСрот.7
  • 81,8%Како ΠΏΠΈΡˆΡƒΠ²Π°ΠΌΠ΅ ΠΊΡƒΠΊΠ»Π΅Π½ ΠΊΠΎΠ΄: ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°, Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅, CI/CD.18

ГласалС 22 корисници. 9 корисници Π±Π΅Π° Π²ΠΎΠ·Π΄Ρ€ΠΆΠ°Π½ΠΈ.

Π˜Π·Π²ΠΎΡ€: www.habr.com