Π£Π²ΠΎΠ΄ Ρƒ Π»ΡƒΡ‚ΠΊΡƒ

ΠŸΡƒΠΏΠΏΠ΅Ρ‚ јС систСм Π·Π° ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈ сС Π·Π° Π΄ΠΎΠ²ΠΎΡ’Π΅ΡšΠ΅ Π΄ΠΎΠΌΠ°Ρ›ΠΈΠ½Π° Ρƒ ΠΆΠ΅Ρ™Π΅Π½ΠΎ ΡΡ‚Π°ΡšΠ΅ ΠΈ ΠΎΠ΄Ρ€ΠΆΠ°Π²Π°ΡšΠ΅ ΠΎΠ²ΠΎΠ³ ΡΡ‚Π°ΡšΠ°.

Π‘Π° ΠŸΡƒΠΏΠΏΠ΅Ρ‚-ΠΎΠΌ Ρ€Π°Π΄ΠΈΠΌ вишС ΠΎΠ΄ ΠΏΠ΅Ρ‚ Π³ΠΎΠ΄ΠΈΠ½Π°. Овај тСкст јС Ρƒ ΡΡƒΡˆΡ‚ΠΈΠ½ΠΈ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½Π° ΠΈ ΠΏΡ€Π΅ΡƒΡ€Π΅Ρ’Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° ΠΊΡ™ΡƒΡ‡Π½ΠΈΡ… Ρ‚Π°Ρ‡Π°ΠΊΠ° ΠΈΠ· Π·Π²Π°Π½ΠΈΡ‡Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅, која Ρ›Π΅ ΠΏΠΎΡ‡Π΅Ρ‚Π½ΠΈΡ†ΠΈΠΌΠ° ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΡ‚ΠΈ Π΄Π° Π±Ρ€Π·ΠΎ схватС ΡΡƒΡˆΡ‚ΠΈΠ½Ρƒ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Π°.

Π£Π²ΠΎΠ΄ Ρƒ Π»ΡƒΡ‚ΠΊΡƒ

ОсновнС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈ систСм ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Π° јС ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚-сСрвСр, ΠΈΠ°ΠΊΠΎ Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π° Ρ€Π°Π΄ Π±Π΅Π· сСрвСра са ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΎΡˆΡ›Ρƒ.

ΠšΠΎΡ€ΠΈΡΡ‚ΠΈ сС ΠΌΠΎΠ΄Π΅Π» Ρ€Π°Π΄Π° ΠΏΠΎΠ²Π»Π°Ρ‡Π΅ΡšΠ°: ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎ, јСдном Π½Π° сваких ΠΏΠΎΠ»Π° сата, ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Ρ˜Ρƒ сСрвСр Ρ€Π°Π΄ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅ΡšΡƒΡ˜Ρƒ јС. Ако стС Ρ€Π°Π΄ΠΈΠ»ΠΈ са АнсиблС-ΠΎΠΌ, ΠΎΠ½Π΄Π° ΠΎΠ½ΠΈ користС Π΄Ρ€ΡƒΠ³Π°Ρ‡ΠΈΡ˜ΠΈ пусх ΠΌΠΎΠ΄Π΅Π»: администратор ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ процСс ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅, сами ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ΠΈ Π½Π΅Ρ›Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΠΈ Π½ΠΈΡˆΡ‚Π°.

Π’ΠΎΠΊΠΎΠΌ ΠΌΡ€Π΅ΠΆΠ½Π΅ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅ користи сС двосмСрна Π’Π›Π‘ Π΅Π½ΠΊΡ€ΠΈΠΏΡ†ΠΈΡ˜Π°: сСрвСр ΠΈ ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ ΠΈΠΌΠ°Ρ˜Ρƒ својС ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Π΅ ΠΊΡ™ΡƒΡ‡Π΅Π²Π΅ ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›Π΅ сСртификатС. ΠžΠ±ΠΈΡ‡Π½ΠΎ сСрвСр издајС сСртификатС Π·Π° ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚Π΅, Π°Π»ΠΈ Ρƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ јС ΠΌΠΎΠ³ΡƒΡ›Π΅ користити СкстСрни ЦА.

УпознавањС са манифСстима

Π£ Π»ΡƒΡ‚ΠΊΠ°Ρ€ΡΠΊΠΎΡ˜ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ˜ΠΈ Π½Π° сСрвСр Π·Π° Π»ΡƒΡ‚ΠΊΠ΅ ΠΏΠΎΠ²Π΅Π·Π°Ρ‚ΠΈ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ (Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ). Написана јС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π·Π° Ρ‡Π²ΠΎΡ€ΠΎΠ²Π΅ Ρƒ манифСстима Ρƒ посСбном програмском Ρ˜Π΅Π·ΠΈΠΊΡƒ – ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Π”Π‘Π›.

ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Π”Π‘Π› јС Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΈ јСзик. ΠžΠΏΠΈΡΡƒΡ˜Π΅ ΠΆΠ΅Ρ™Π΅Π½ΠΎ ΡΡ‚Π°ΡšΠ΅ Ρ‡Π²ΠΎΡ€Π° Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π° ΠΏΠΎΡ˜Π΅Π΄ΠΈΠ½Π°Ρ‡Π½ΠΈΡ… рСсурса, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΈ ΠΈΠΌΠ° спСцифичан ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜.
  • ΠŸΠ°ΠΊΠ΅Ρ‚ јС инсталиран.
  • Π‘Π»ΡƒΠΆΠ±Π° јС ΠΏΠΎΡ‡Π΅Π»Π°.

РСсурси ΠΌΠΎΠ³Ρƒ Π±ΠΈΡ‚ΠΈ мСђусобно ΠΏΠΎΠ²Π΅Π·Π°Π½ΠΈ:

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

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

ΠŸΡƒΠΏΠΏΠ΅Ρ‚ јС написан Ρƒ Π ΡƒΠ±ΠΈ-Ρƒ, Ρ‚Π°ΠΊΠΎ Π΄Π° су ΠΌΠ½ΠΎΠ³ΠΈ конструкти ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚ΠΈ ΠΎΠ΄Π°Ρ‚Π»Π΅. Π ΡƒΠ±ΠΈ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° ΠΏΡ€ΠΎΡˆΠΈΡ€ΠΈΡ‚Π΅ ΠŸΡƒΠΏΠΏΠ΅Ρ‚ - Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ слоТСну Π»ΠΎΠ³ΠΈΠΊΡƒ, Π½ΠΎΠ²Π΅ врстС рСсурса, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅.

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

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

Π•Π²ΠΎ Π΄Π΅Π»ΠΎΠ²Π° Π·Π²Π°Π½ΠΈΡ‡Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ који Ρ›Π΅ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ›ΠΈ Π΄Π° Ρ€Π°Π·ΡƒΠΌΠ΅Ρ‚Π΅ синтаксу Π°ΠΊΠΎ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ нису Π΄ΠΎΠ²ΠΎΡ™Π½ΠΈ:

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

# ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³Π΄Π΅, послС Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΠΈ.
#
# ОписаниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠ΄Ρ‹ начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова node,
# Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт сСлСктор Π½ΠΎΠ΄Ρ‹ β€” хостнСйм (с Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π·)
# ΠΈΠ»ΠΈ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для хостнСймов, ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово default.
#
# ПослС этого Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках описываСтся собствСнно конфигурация Π½ΠΎΠ΄Ρ‹.
#
# Одна ΠΈ Ρ‚Π° ΠΆΠ΅ Π½ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΏΠΎΠ΄ нСсколько сСлСкторов. ΠŸΡ€ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚
# сСлСкторов написано Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΎ синтаксис описания Π½ΠΎΠ΄.
node 'hostname', 'f.q.d.n', /regexp/ {
  # ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΠΎ сути являСтся пСрСчислСниСм рСсурсов ΠΈ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².
  #
  # Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ рСсурса Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
  #
  # Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… рСсурсов ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ названиями!
  #
  # ОписаниС рСсурса начинаСтся с Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’ΠΈΠΏ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС.
  # ΠŸΡ€ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов написано Π½ΠΈΠΆΠ΅.
  #
  # ПослС Ρ‚ΠΈΠΏΠ° Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ рСсурса, ΠΏΠΎΡ‚ΠΎΠΌ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅,
  # дальшС ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ пСрСчислСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² рСсурса ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
  # ЗначСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Ρ‚.Π½. hash rocket (=>).
  resource { 'title':
    param1 => value1,
    param2 => value2,
    param3 => value3,
  }
}

Π£Π²Π»Π°Ρ‡Π΅ΡšΠ΅ ΠΈ ΠΏΡ€Π΅Π»ΠΎΠΌΠΈ линија нису ΠΎΠ±Π°Π²Π΅Π·Π½ΠΈ Π΄Π΅ΠΎ манифСста, Π°Π»ΠΈ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡƒΠΊΠ° стилС Π³ΡƒΠΈΠ΄Π΅. Ρ€Π΅Π·ΠΈΠΌΠ΅:

  • Π£Π²Π»Π°Ρ‡Π΅ΡšΠ° са Π΄Π²Π° Ρ€Π°Π·ΠΌΠ°ΠΊΠ°, Ρ‚Π°Π±ΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ сС Π½Π΅ користС.
  • ΠšΠΎΠ²Ρ€ΡŸΠ°Π²Π΅ Π·Π°Π³Ρ€Π°Π΄Π΅ су Ρ€Π°Π·Π΄Π²ΠΎΡ˜Π΅Π½Π΅ Ρ€Π°Π·ΠΌΠ°ΠΊΠΎΠΌ;
  • Π—Π°Ρ€Π΅Π·ΠΈ ΠΈΠ·Π° сваког ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜ΡƒΡ›ΠΈ ΠΈ послСдњи. Π‘Π²Π°ΠΊΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ јС Ρƒ посСбном Ρ€Π΅Π΄Ρƒ. Π˜Π·ΡƒΠ·Π΅Ρ‚Π°ΠΊ јС Π½Π°ΠΏΡ€Π°Π²Ρ™Π΅Π½ Π·Π° ΡΠ»ΡƒΡ‡Π°Ρ˜ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° ΠΈ јСдног ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ писати Ρƒ јСдном Ρ€Π΅Π΄Ρƒ ΠΈ Π±Π΅Π· Π·Π°Ρ€Π΅Π·Π° (Ρ‚Ρ˜. resource { 'title': } ΠΈ resource { 'title': param => value }).
  • Π‘Ρ‚Ρ€Π΅Π»ΠΈΡ†Π΅ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠΌΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΡƒΠ΄Ρƒ Π½Π° истом Π½ΠΈΠ²ΠΎΡƒ.
  • Π˜ΡΠΏΡ€Π΅Π΄ ΡšΠΈΡ… су исписанС стрСлицС односа рСсурса.

Π›ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π½Π° паппСтсСрвСру

Π—Π° Π΄Π°Ρ™Π΅ објашњСњС, прСдставићу ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ β€žΠΊΠΎΡ€Π΅Π½ΡΠΊΠΎΠ³ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ°β€œ. Основни Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ јС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ који садрТи ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π»ΡƒΡ‚ΠΊΠ΅ Π·Π° ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈ Ρ‡Π²ΠΎΡ€.

Основни Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ Π²Π°Ρ€ΠΈΡ€Π° Ρƒ зависности ΠΎΠ΄ Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Π° ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° којС сС користи. ΠžΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅ су нСзависни скупови ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° који сС Ρ‡ΡƒΠ²Π°Ρ˜Ρƒ Ρƒ засСбним Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠΈΠΌΠ°. ΠžΠ±ΠΈΡ‡Π½ΠΎ сС користи Ρƒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜ΠΈ са Π³ΠΈΡ‚-ΠΎΠΌ, Ρƒ ΠΊΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ сС ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ˜Ρƒ ΠΈΠ· Π³ΠΈΡ‚ Π³Ρ€Π°Π½Π°. Π‘Ρ…ΠΎΠ΄Π½ΠΎ Ρ‚ΠΎΠΌΠ΅, сваки Ρ‡Π²ΠΎΡ€ сС Π½Π°Π»Π°Π·ΠΈ Ρƒ јСдном ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΡƒ. Ово сС ΠΌΠΎΠΆΠ΅ конфигурисати Π½Π° самом Ρ‡Π²ΠΎΡ€Ρƒ ΠΈΠ»ΠΈ Ρƒ ЕНЦ-Ρƒ, ΠΎ Ρ‡Π΅ΠΌΡƒ Ρ›Ρƒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈ Ρƒ слСдСћСм Ρ‡Π»Π°Π½ΠΊΡƒ.

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

ΠœΠΎΡ€Π° ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ Ρƒ основном Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ manifests, који садрТи јСдан ΠΈΠ»ΠΈ вишС манифСста који ΠΎΠΏΠΈΡΡƒΡ˜Ρƒ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π΅. ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ modules, који садрТи ΠΌΠΎΠ΄ΡƒΠ»Π΅. Π Π΅Ρ›ΠΈ Ρ›Ρƒ Π²Π°ΠΌ који су ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΌΠ°Π»ΠΎ каснијС. ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, стари ΠŸΡƒΠΏΠΏΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅ ΠΈΠΌΠ°Ρ‚ΠΈ ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ files, који садрТи Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ којС ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠΎ Ρƒ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π΅. Π£ Π½ΠΎΠ²ΠΎΠΌ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Ρƒ, свС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ су ΡΠΌΠ΅ΡˆΡ‚Π΅Π½Π΅ Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅.

Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ манифСста ΠΈΠΌΠ°Ρ˜Ρƒ Π΅ΠΊΡΡ‚Π΅Π½Π·ΠΈΡ˜Ρƒ .pp.

ΠŸΠ°Ρ€ Π±ΠΎΡ€Π±Π΅Π½ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°

Опис Ρ‡Π²ΠΎΡ€Π° ΠΈ рСсурса Π½Π° ΡšΠ΅ΠΌΡƒ

На Ρ‡Π²ΠΎΡ€Ρƒ server1.testdomain Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π° /etc/issue са ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜Π΅ΠΌ Debian GNU/Linux n l. Π”Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ Π²Π»Π°ΡΠ½ΠΈΡˆΡ‚Π²ΠΎ корисника ΠΈ Π³Ρ€ΡƒΠΏΠ΅ root, ΠΏΡ€Π°Π²Π° приступа ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π±ΠΈΡ‚ΠΈ 644.

ПишСмо манифСст:

node 'server1.testdomain' {   # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, относящийся ΠΊ Π½ΠΎΠ΄Π΅ server1.testdomain
    file { '/etc/issue':   # описываСм Ρ„Π°ΠΉΠ» /etc/issue
        ensure  => present,   # этот Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ
        content => 'Debian GNU/Linux n l',   # Ρƒ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ содСрТимоС
        owner   => root,   # ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ†
        group   => root,   # Π³Ρ€ΡƒΠΏΠΏΠ°-Π²Π»Π°Π΄Π΅Π»Π΅Ρ†
        mode    => '0644',   # ΠΏΡ€Π°Π²Π° Π½Π° Ρ„Π°ΠΉΠ». Они Π·Π°Π΄Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ строки (Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ число с 0 Π² Π½Π°Ρ‡Π°Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ воспринято ΠΊΠ°ΠΊ записанноС Π² Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ систСмС, ΠΈ всё ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ
    }
}

Односи ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ рСсурса Π½Π° Ρ‡Π²ΠΎΡ€Ρƒ

На Ρ‡Π²ΠΎΡ€Ρƒ server2.testdomain Π½Π³ΠΈΠ½ΠΊ ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ ΠΈ Ρ€Π°Π΄ΠΈΡ‚ΠΈ са ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠΏΡ€Π΅ΠΌΡ™Π΅Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ.

Π₯ајдС Π΄Π° Ρ€Π°Π·Π»ΠΎΠΆΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ:

  • ΠŸΠ°ΠΊΠ΅Ρ‚ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС инсталира nginx.
  • НСопходно јС Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠΎΠΏΠΈΡ€Π°Ρ˜Ρƒ са сСрвСра.
  • Услуга Ρ‚Ρ€Π΅Π±Π° Π΄Π° Ρ€Π°Π΄ΠΈ nginx.
  • Ако сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°, сСрвис сС ΠΌΠΎΡ€Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ.

ПишСмо манифСст:

node 'server2.testdomain' {   # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, относящийся ΠΊ Π½ΠΎΠ΄Π΅ server2.testdomain
    package { 'nginx':   # описываСм ΠΏΠ°ΠΊΠ΅Ρ‚ nginx
        ensure => installed,   # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн
    }
  # ΠŸΡ€ΡΠΌΠ°Ρ стрСлка (->) Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ рСсурс Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
  # ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ послС рСсурса, описанного Π²Ρ‹ΡˆΠ΅.
  # Π’Π°ΠΊΠΈΠ΅ зависимости Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹.
    -> file { '/etc/nginx':   # описываСм Ρ„Π°ΠΉΠ» /etc/nginx
        ensure  => directory,   # это Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ дирСктория
        source  => 'puppet:///modules/example/nginx-conf',   # Π΅Ρ‘ содСрТимоС Π½ΡƒΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ с ΠΏΠ°ΠΏΠΏΠ΅Ρ‚-сСрвСра ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ адрСсу
        recurse => true,   # ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ рСкурсивно
        purge   => true,   # Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ лишниС Ρ„Π°ΠΉΠ»Ρ‹ (Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² источникС)
        force   => true,   # ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ лишниС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
    }
  # Волнистая стрСлка (~>) Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ рСсурс Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
  # ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° измСнСния рСсурса, описанного Π²Ρ‹ΡˆΠ΅.
  # Волнистая стрСлка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΡ€ΡΠΌΡƒΡŽ (->).
    ~> service { 'nginx':   # описываСм сСрвис nginx
        ensure => running,   # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½
        enable => true,   # Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ автоматичСски ΠΏΡ€ΠΈ стартС систСмы
    }
  # Когда рСсурс Ρ‚ΠΈΠΏΠ° service ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅,
  # ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ сСрвис пСрСзапускаСтся.
}

Π”Π° Π±ΠΈ ΠΎΠ²ΠΎ функционисало, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π²Π°ΠΌ јС ΠΎΡ‚ΠΏΡ€ΠΈΠ»ΠΈΠΊΠ΅ слСдСћа Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π½Π° сСрвСру Π»ΡƒΡ‚ΠΊΠ΅:

/etc/puppetlabs/code/environments/production/ # (это для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠŸΠ°ΠΏΠΏΠ΅Ρ‚Π°, для старого ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ /etc/puppet)
β”œβ”€β”€ manifests/
β”‚   └── site.pp
└── modules/
    └── example/
        └── files/
            └── nginx-conf/
                β”œβ”€β”€ nginx.conf
                β”œβ”€β”€ mime.types
                └── conf.d/
                    └── some.conf

Π’ΠΈΠΏΠΎΠ²ΠΈ рСсурса

ΠšΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Ρƒ листу ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π½ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²Π° рСсурса ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ ΠΎΠ²Π΄Π΅ Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜ΠΈ, ΠΎΠ²Π΄Π΅ Ρ›Ρƒ описати ΠΏΠ΅Ρ‚ основних Ρ‚ΠΈΠΏΠΎΠ²Π°, који су Ρƒ мојој пракси Π΄ΠΎΠ²ΠΎΡ™Π½ΠΈ Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ Π²Π΅Ρ›ΠΈΠ½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

Ρ„Π°Ρ˜Π»

Π£ΠΏΡ€Π°Π²Ρ™Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°ΠΌΠ°, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠΈΠΌΠ°, симболичким Π²Π΅Π·Π°ΠΌΠ°, ΡšΠΈΡ…ΠΎΠ²ΠΈΠΌ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜Π΅ΠΌ ΠΈ ΠΏΡ€Π°Π²ΠΈΠΌΠ° приступа.

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

  • Π½Π°Π·ΠΈΠ² рСсурса β€” ΠΏΡƒΡ‚Π°ΡšΠ° Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ (ΠΎΠΏΡ†ΠΈΠΎΠ½ΠΎ)
  • ΠΏΡƒΡ‚ β€” ΠΏΡƒΡ‚Π°ΡšΠ° Π΄ΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ (Π°ΠΊΠΎ нијС Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρƒ Π½Π°Π·ΠΈΠ²Ρƒ)
  • ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡ‚ΠΈ - Ρ‚ΠΈΠΏ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅:
    • absent - ΠΈΠ·Π±Ρ€ΠΈΡˆΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ
    • present β€” ΠΌΠΎΡ€Π° ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π±ΠΈΠ»ΠΎ којС врстС (Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ, Π±ΠΈΡ›Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Π½Π° ΠΎΠ±ΠΈΡ‡Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°)
    • file - ΠΎΠ±ΠΈΡ‡Π°Π½ Ρ„Π°Ρ˜Π»
    • directory - ΠΈΠΌΠ΅Π½ΠΈΠΊ
    • link - симболична Π²Π΅Π·Π°
  • садрТина β€” ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ (ΠΏΠΎΠ³ΠΎΠ΄Π°Π½ само Π·Π° ΠΎΠ±ΠΈΡ‡Π½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, Π½Π΅ ΠΌΠΎΠΆΠ΅ сС користити зајСдно са ΠΈΠ·Π²ΠΎΡ€ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚Π°)
  • ΠΈΠ·Π²ΠΎΡ€ β€” Π²Π΅Π·Ρƒ Π΄ΠΎ ΠΏΡƒΡ‚Π°ΡšΠ΅ са којС ΠΆΠ΅Π»ΠΈΡ‚Π΅ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΡΠ°Π΄Ρ€ΠΆΠ°Ρ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ (Π½Π΅ ΠΌΠΎΠΆΠ΅ сС користити зајСдно са ΡΠ°Π΄Ρ€ΠΆΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚Π°). МоТС сС навСсти ΠΊΠ°ΠΎ УРИ са шСмом puppet: (Ρ‚Π°Π΄Π° Ρ›Π΅ сС користити Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ са сСрвСра Π»ΡƒΡ‚Π°ΠΊΠ°) ΠΈ са шСмом http: (Надам сС Π΄Π° јС јасно ΡˆΡ‚Π° Ρ›Π΅ сС Π΄ΠΎΠ³ΠΎΠ΄ΠΈΡ‚ΠΈ Ρƒ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ), ΠΏΠ° Ρ‡Π°ΠΊ ΠΈ са Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌΠΎΠΌ file: ΠΈΠ»ΠΈ ΠΊΠ°ΠΎ апсолутна ΠΏΡƒΡ‚Π°ΡšΠ° Π±Π΅Π· шСмС (ΠΎΠ½Π΄Π° Ρ›Π΅ сС користити Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ· Π»ΠΎΠΊΠ°Π»Π½ΠΎΠ³ Π€Π‘-Π° Π½Π° Ρ‡Π²ΠΎΡ€Ρƒ)
  • ΠΌΠ΅Ρ‚Π° β€” Π³Π΄Π΅ симболска Π²Π΅Π·Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΠΎΠΊΠ°Π·ΡƒΡ˜Π΅ (Π½Π΅ ΠΌΠΎΠΆΠ΅ сС користити зајСдно са садрТина ΠΈΠ»ΠΈ ΠΈΠ·Π²ΠΎΡ€)
  • власник β€” корисник који Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΠΎΡΠ΅Π΄ΡƒΡ˜Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ
  • Π³Ρ€ΡƒΠΏΠ° β€” Π³Ρ€ΡƒΠΏΠ° којој Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€ΠΈΠΏΠ°Π΄Π°
  • Π½Π°Ρ‡ΠΈΠ½ β€” Π΄ΠΎΠ·Π²ΠΎΠ»Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ (ΠΊΠ°ΠΎ стринг)
  • рСцурсС - ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Ρ€Π΅ΠΊΡƒΡ€Π·ΠΈΠ²Π½Ρƒ ΠΎΠ±Ρ€Π°Π΄Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ°
  • чистка - ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π±Ρ€ΠΈΡΠ°ΡšΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° којС нису описанС Ρƒ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Ρƒ
  • силом - ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π±Ρ€ΠΈΡΠ°ΡšΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ° који нису описани Ρƒ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Ρƒ

ΠΏΠ°ΠΊΠ΅Ρ‚

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π° ΠΈ ΡƒΠΊΠ»Π°ΡšΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π΅. МоТС Π΄Π° ΠΎΠ±Ρ€Π°Ρ’ΡƒΡ˜Π΅ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° - ΠΏΠΎΠ½ΠΎΠ²ΠΎ инсталира ΠΏΠ°ΠΊΠ΅Ρ‚ Π°ΠΊΠΎ јС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π°Π²Π΅Π΄Π΅Π½ рСинсталл_ΠΎΠ½_рСфрСсх.

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

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

сСрвис

Π£ΠΏΡ€Π°Π²Ρ™Π° услугама. МоТС Π΄Π° ΠΎΠ±Ρ€Π°Ρ’ΡƒΡ˜Π΅ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° - ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ услугу.

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

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

Π΅ΠΊΠ΅Ρ†

ΠŸΠΎΠΊΡ€Π΅Ρ›Π΅ СкстСрнС ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Ако Π½Π΅ Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ствара, само Π°ΠΊΠΎ, Π°ΠΊΠΎ Π½Π΅ ΠΈΠ»ΠΈ рСфрСсхонли, ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚Π° сваки ΠΏΡƒΡ‚ ΠΊΠ°Π΄Π° сС ΠΏΠΎΠΊΡ€Π΅Π½Π΅ ΠŸΡƒΠΏΠΏΠ΅Ρ‚. МоТС Π΄Π° ΠΎΠ±Ρ€Π°Ρ’ΡƒΡ˜Π΅ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° - ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

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

  • Π½Π°Π·ΠΈΠ² рСсурса β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° која сС ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π° (ΠΎΠΏΡ†ΠΈΠΎΠ½ΠΎ)
  • ΠΊΠΎΠΌΠ°Π½Π΄Π° β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠΎΡ˜Ρƒ Ρ‚Ρ€Π΅Π±Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚ΠΈ (Π°ΠΊΠΎ нијС Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρƒ Π½Π°Π·ΠΈΠ²Ρƒ)
  • ΠΏΡƒΡ‚ β€” ΠΏΡƒΡ‚Π°ΡšΠ΅ Ρƒ којима сС Ρ‚Ρ€Π°ΠΆΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°
  • само Π°ΠΊΠΎ β€” Π°ΠΊΠΎ јС ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρƒ ΠΎΠ²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π·Π°Π²Ρ€ΡˆΠ΅Π½Π° са Π½ΡƒΠ»Ρ‚ΠΈΠΌ ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, Π³Π»Π°Π²Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½Π°
  • Π°ΠΊΠΎ Π½Π΅ β€” Π°ΠΊΠΎ јС ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρƒ ΠΎΠ²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π·Π°Π²Ρ€ΡˆΠ΅Π½Π° са ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ који нијС Π½ΡƒΠ»Π°, Π³Π»Π°Π²Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½Π°
  • ствара β€” Π°ΠΊΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° Π½Π°Π²Π΅Π΄Π΅Π½Π° Ρƒ ΠΎΠ²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ, Π³Π»Π°Π²Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ΅Π½Π°
  • рСфрСсхонли - Π°ΠΊΠΎ true, ΠΎΠ½Π΄Π° Ρ›Π΅ сС ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ само ΠΊΠ°Π΄Π° овај Π΅ΠΊΠ΅Ρ† ΠΏΡ€ΠΈΠΌΠΈ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ΅ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурса
  • Ρ†Π²Π΄ β€” Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ ΠΈΠ· којСг Ρ‚Ρ€Π΅Π±Π° ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
  • корисник β€” корисник ΠΎΠ΄ ΠΊΠΎΠ³Π° Π΄Π° сС ΠΏΠΎΠΊΡ€Π΅Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°
  • Π‘Π½Π°Π±Π΄Π΅Π²Π°Ρ‡ - ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:
    • ПОБИКБ β€” ΠΏΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈ процСс сС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°, ΠΎΠ±Π°Π²Π΅Π·Π½ΠΎ Π½Π°Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡƒΡ‚
    • Π³Ρ€Π°Π½Π°Ρ‚Π° - ΠΊΠΎΠΌΠ°Π½Π΄Π° сС ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ Ρƒ љусци /bin/sh, ΠΌΠΎΠΆΠ΄Π° нијС Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΡƒΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ користити Π³Π»ΠΎΠ±ΠΈΠ½Π³, Ρ†Π΅Π²ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³Π΅ карактСристикС љускС. ΠžΠ±ΠΈΡ‡Π½ΠΎ сС аутоматски Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΡƒΡ˜Π΅ Π°ΠΊΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ посСбни ΠΊΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈ (|, ;, &&, || ΠΈ Ρ‚Π°ΠΊΠΎ Π΄Π°Ρ™Π΅).

Ρ†Ρ€ΠΎΠ½

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡˆΠ΅ Ρ†Ρ€ΠΎΡšΠΎΠ±Ρ.

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

  • Π½Π°Π·ΠΈΠ² рСсурса - само Π½Π΅ΠΊΠ° врста ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°
  • ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡ‚ΠΈ β€” статус крунског посла:
    • present - ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ
    • absent - избрисати Π°ΠΊΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ
  • ΠΊΠΎΠΌΠ°Π½Π΄Π° - ΠΊΠΎΡ˜Ρƒ Π½Π°Ρ€Π΅Π΄Π±Ρƒ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ
  • ΠΎΠΊΠΎΠ»ΠΈΠ½Π° β€” Ρƒ ΠΊΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΡƒ Ρ‚Ρ€Π΅Π±Π° ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (листа ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²ΠΈΡ… ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ° ΠΈ ΡšΠΈΡ…ΠΎΠ²ΠΈΡ… врСдности ΠΏΡ€Π΅ΠΊΠΎ =)
  • корисник β€” ΠΎΠ΄ ΠΊΠΎΠ³ корисника Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
  • ΠΌΠΈΠ½ΡƒΡ‚, сат, Ρ€Π°Π΄Π½ΠΈΠΌ Π΄Π°Π½ΠΎΠΌ, мСсСц, мСсСц Π΄Π°Π½Π° β€” ΠΊΠ°Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ Ρ†Ρ€ΠΎΠ½. Ако Π±ΠΈΠ»ΠΎ који ΠΎΠ΄ ΠΎΠ²ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° нијС Π½Π°Π²Π΅Π΄Π΅Π½, њСгова врСдност Ρƒ Ρ†Ρ€ΠΎΠ½Ρ‚Π°Π±-Ρƒ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ *.

Π£ ΠŸΡƒΠΏΠΏΠ΅Ρ‚ 6.0 Ρ†Ρ€ΠΎΠ½ ΠΊΠ°ΠΎ Π΄Π° ΡƒΠΊΠ»ΠΎΡšΠ΅Π½ ΠΈΠ· ΠΊΡƒΡ‚ΠΈΡ˜Π΅ Ρƒ пуппСтсСрвСр, Ρ‚Π°ΠΊΠΎ Π΄Π° Π½Π΅ΠΌΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ Π½Π° ΠΎΠΏΡˆΡ‚Π΅ΠΌ ΡΠ°Ρ˜Ρ‚Ρƒ. Али јС ΠΎΠ½ јС Ρƒ ΠΊΡƒΡ‚ΠΈΡ˜ΠΈ Ρƒ ΠΏΡƒΠΏΠΏΠ΅Ρ‚-Π°Π³Π΅Π½Ρ‚-Ρƒ, Ρ‚Π°ΠΊΠΎ Π΄Π° Π½Π΅ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ Π΄Π° Π³Π° засСбно инсталиратС. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ Π·Π° Ρ‚ΠΎ Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜ΠΈ Π·Π° ΠΏΠ΅Ρ‚Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ ΠŸΡƒΠΏΠ΅Ρ‚Π°Π˜Π»ΠΈ Π½Π° Π“ΠΈΡ‚Π₯ΡƒΠ±-Ρƒ.

О рСсурсима ΡƒΠΎΠΏΡˆΡ‚Π΅

Π—Π°Ρ…Ρ‚Π΅Π²ΠΈ Π·Π° Ρ˜Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½ΠΎΡΡ‚ рСсурса

ΠΠ°Ρ˜Ρ‡Π΅ΡˆΡ›Π° Π³Ρ€Π΅ΡˆΠΊΠ° са којом сС сусрСћСмо јС Π”ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π΅. Ова Π³Ρ€Π΅ΡˆΠΊΠ° сС Ρ˜Π°Π²Ρ™Π° ΠΊΠ°Π΄Π° сС Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ ΠΏΠΎΡ˜Π°Π²Ρ™ΡƒΡ˜Ρƒ Π΄Π²Π° ΠΈΠ»ΠΈ вишС рСсурса истог Ρ‚ΠΈΠΏΠ° са истим ΠΈΠΌΠ΅Π½ΠΎΠΌ.

Π—Π°Ρ‚ΠΎ Ρ›Ρƒ ΠΏΠΎΠ½ΠΎΠ²ΠΎ писати: манифСсти Π·Π° исти Ρ‡Π²ΠΎΡ€ Π½Π΅ Π±ΠΈ Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π΄Π° садрТС рСсурсС истог Ρ‚ΠΈΠΏΠ° са истим насловом!

ПонСкад ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ са истим ΠΈΠΌΠ΅Π½ΠΎΠΌ, Π°Π»ΠΈ са Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ΠΈΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ ΠΌΠΎΡ€Π°Ρ‚Π΅ користити ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ nameΠ΄Π° бистС ΠΈΠ·Π±Π΅Π³Π»ΠΈ Π³Ρ€Π΅ΡˆΠΊΡƒ:

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

Π”Ρ€ΡƒΠ³ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ рСсурса ΠΈΠΌΠ°Ρ˜Ρƒ сличнС ΠΎΠΏΡ†ΠΈΡ˜Π΅ ΠΊΠ°ΠΊΠΎ Π±ΠΈ сС ΠΈΠ·Π±Π΅Π³Π»ΠΎ Π΄ΡƒΠΏΠ»ΠΈΡ€Π°ΡšΠ΅ βˆ’ name Ρƒ сСрвис, command Ρƒ Π΅ΠΊΠ΅Ρ†, ΠΈ Ρ‚Π°ΠΊΠΎ Π΄Π°Ρ™Π΅.

ΠœΠ΅Ρ‚Π°ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

Π‘Π²Π°ΠΊΠΈ Ρ‚ΠΈΠΏ рСсурса ΠΈΠΌΠ° Π½Π΅ΠΊΠ΅ посСбнС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅, Π±Π΅Π· ΠΎΠ±Π·ΠΈΡ€Π° Π½Π° ΡšΠ΅Π³ΠΎΠ²Ρƒ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρƒ.

ΠŸΠΎΡ‚ΠΏΡƒΠ½Π° листа ΠΌΠ΅Ρ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° Ρƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜ΠΈ Π›ΡƒΡ‚ΠΊΠ°.

ΠšΡ€Π°Ρ‚ΠΊΠ° листа:

  • Π·Π°Ρ…Ρ‚Π΅Π²Π°Ρ‚ΠΈ β€” овај ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΏΠΎΠΊΠ°Π·ΡƒΡ˜Π΅ ΠΎΠ΄ ΠΊΠΎΡ˜ΠΈΡ… рСсурса зависи овај рСсурс.
  • ΠΏΡ€Π΅ - Овај ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΎΠ΄Ρ€Π΅Ρ’ΡƒΡ˜Π΅ који рСсурси зависС ΠΎΠ΄ ΠΎΠ²ΠΎΠ³ рСсурса.
  • ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΠΈ сС β€” овај ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΎΠ΄Ρ€Π΅Ρ’ΡƒΡ˜Π΅ са ΠΊΠΎΡ˜ΠΈΡ… ΠΈΠ·Π²ΠΎΡ€Π° овај рСсурс ΠΏΡ€ΠΈΠΌΠ° ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ°.
  • Π½ΠΎΡ‚ΠΈΡ„ΠΈ β€” Овај ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ ΠΎΠ΄Ρ€Π΅Ρ’ΡƒΡ˜Π΅ који рСсурси ΠΏΡ€ΠΈΠΌΠ°Ρ˜Ρƒ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° са ΠΎΠ²ΠΎΠ³ рСсурса.

Π‘Π²ΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΌΠ΅Ρ‚Π°ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΡ…Π²Π°Ρ‚Π°Ρ˜Ρƒ ΠΈΠ»ΠΈ Ρ˜Π΅Π΄Π½Ρƒ Π²Π΅Π·Ρƒ Π΄ΠΎ рСсурса ΠΈΠ»ΠΈ Π½ΠΈΠ· Π²Π΅Π·Π° Ρƒ угластим Π·Π°Π³Ρ€Π°Π΄Π°ΠΌΠ°.

Π’Π΅Π·Π΅ ΠΊΠ° рСсурсима

Π’Π΅Π·Π° рСсурса јС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ помињањС рСсурса. Π£Π³Π»Π°Π²Π½ΠΎΠΌ сС користС Π·Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°ΡšΠ΅ зависности. Π£ΠΏΡƒΡ›ΠΈΠ²Π°ΡšΠ΅ Π½Π° Π½Π΅ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅Ρ›ΠΈ рСсурс Ρ›Π΅ ΠΈΠ·Π°Π·Π²Π°Ρ‚ΠΈ Π³Ρ€Π΅ΡˆΠΊΡƒ ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜ΠΈ.

Бинтакса Π²Π΅Π·Π΅ јС слСдСћа: Ρ‚ΠΈΠΏ рСсурса са Π²Π΅Π»ΠΈΠΊΠΈΠΌ словом (Π°ΠΊΠΎ ΠΈΠΌΠ΅ Ρ‚ΠΈΠΏΠ° садрТи Π΄ΡƒΠΏΠ»Π΅ Π΄Π²ΠΎΡ‚Π°Ρ‡ΠΊΠ΅, ΠΎΠ½Π΄Π° сС сваки Π΄Π΅ΠΎ ΠΈΠΌΠ΅Π½Π° ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Π΄Π²Π΅ Ρ‚Π°Ρ‡ΠΊΠ΅ пишС Π²Π΅Π»ΠΈΠΊΠΈΠΌ словима), Π·Π°Ρ‚ΠΈΠΌ ΠΈΠΌΠ΅ рСсурса Ρƒ угластим Π·Π°Π³Ρ€Π°Π΄Π°ΠΌΠ° (Π²Π΅Π»ΠΈΠΊΠ° ΠΈ ΠΌΠ°Π»Π° слова ΠΈΠΌΠ΅Π½Π° Π½Π΅ мСња!). НС Π±ΠΈ Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡƒΠ΄Π΅ Ρ€Π°Π·ΠΌΠ°ΠΊΠ° Ρƒ ΡƒΠ³Π»Π°Ρ‚ΠΈΠΌ Π·Π°Π³Ρ€Π°Π΄Π°ΠΌΠ° ΠΎΠ΄ΠΌΠ°Ρ… ΠΈΠ·Π° Π½Π°Π·ΠΈΠ²Π° Ρ‚ΠΈΠΏΠ°.

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

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

Зависности ΠΈ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ°

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

Као ΡˆΡ‚ΠΎ јС Ρ€Π°Π½ΠΈΡ˜Π΅ Ρ€Π΅Ρ‡Π΅Π½ΠΎ, Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π΅ зависности ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ рСсурса су Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Π΅. Π£Π·Π³Ρ€Π΅Π΄, Π±ΡƒΠ΄ΠΈΡ‚Π΅ ΠΏΠ°ΠΆΡ™ΠΈΠ²ΠΈ ΠΊΠ°Π΄Π° Π΄ΠΎΠ΄Π°Ρ˜Π΅Ρ‚Π΅ зависности - ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π½Π΅ зависности, ΡˆΡ‚ΠΎ Ρ›Π΅ ΠΈΠ·Π°Π·Π²Π°Ρ‚ΠΈ Π³Ρ€Π΅ΡˆΠΊΡƒ Ρƒ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜ΠΈ.

Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΡƒ ΠΎΠ΄ зависности, ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° нису Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Π°. Π—Π° ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° Π²Π°ΠΆΠ΅ слСдСћа ΠΏΡ€Π°Π²ΠΈΠ»Π°:

  • Ако рСсурс ΠΏΡ€ΠΈΠΌΠΈ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ΅, ΠΎΠ½ сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°. ΠΠΊΡ†ΠΈΡ˜Π΅ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° зависС ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° рСсурса βˆ’ Π΅ΠΊΠ΅Ρ† ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, сСрвис ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ услугу, ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠΎΠ½ΠΎΠ²ΠΎ инсталира ΠΏΠ°ΠΊΠ΅Ρ‚. Ако рСсурс Π½Π΅ΠΌΠ° дСфинисану Π°ΠΊΡ†ΠΈΡ˜Ρƒ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ°, ΠΎΠ½Π΄Π° сС Π½ΠΈΡˆΡ‚Π° Π½Π΅ дСшава.
  • Π’ΠΎΠΊΠΎΠΌ јСдног ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Π°, рСсурс сС Π°ΠΆΡƒΡ€ΠΈΡ€Π° највишС јСдном. Ово јС ΠΌΠΎΠ³ΡƒΡ›Π΅ Ρ˜Π΅Ρ€ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜Ρƒ зависности, Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ зависности Π½Π΅ садрТи циклусС.
  • Ако ΠŸΡƒΠΏΠΏΠ΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΡΡ‚Π°ΡšΠ΅ рСсурса, рСсурс ΡˆΠ°Ρ™Π΅ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° свим рСсурсима који су ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ›Π΅Π½ΠΈ Π½Π° њСга.
  • Ако сС рСсурс Π°ΠΆΡƒΡ€ΠΈΡ€Π°, ΠΎΠ½ ΡˆΠ°Ρ™Π΅ ΠΎΠ±Π°Π²Π΅ΡˆΡ‚Π΅ΡšΠ° свим рСсурсима који су ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ›Π΅Π½ΠΈ Π½Π° њСга.

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

По ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, Π°ΠΊΠΎ Π½Π΅ΠΊΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ рСсурса Π½Π΅ΠΌΠ° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½Ρƒ врСдност ΠΈ овај ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ нијС Π½Π°Π²Π΅Π΄Π΅Π½ Ρƒ манифСсту, ΠΎΠ½Π΄Π° ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Π½Π΅Ρ›Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚ΠΈ ΠΎΠ²ΠΎ ΡΠ²ΠΎΡ˜ΡΡ‚Π²ΠΎ Π·Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›ΠΈ рСсурс Π½Π° Ρ‡Π²ΠΎΡ€Ρƒ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ јС рСсурс Ρ‚ΠΈΠΏΠ° Ρ„Π°Ρ˜Π» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ нијС Π½Π°Π²Π΅Π΄Π΅Π½ owner, Ρ‚Π°Π΄Π° ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Π½Π΅Ρ›Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚ΠΈ власника ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅.

Π£Π²ΠΎΠ΄ Ρƒ класС, Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅ ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π΅

ΠŸΡ€Π΅Ρ‚ΠΏΠΎΡΡ‚Π°Π²ΠΈΠΌΠΎ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° који ΠΈΠΌΠ°Ρ˜Ρƒ исти Π΄Π΅ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅, Π°Π»ΠΈ ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅ ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠ΅ - ΠΈΠ½Π°Ρ‡Π΅ бисмо свС Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΈ описати Ρƒ јСдном Π±Π»ΠΎΠΊΡƒ node {}. Наравно, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π΅ Π΄Π΅Π»ΠΎΠ²Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅, Π°Π»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ ΠΎΠ²ΠΎ јС лошС Ρ€Π΅ΡˆΠ΅ΡšΠ΅ - ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° растС, Π° Π°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠΏΡˆΡ‚ΠΈ Π΄Π΅ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅, ΠΌΠΎΡ€Π°Ρ›Π΅Ρ‚Π΅ Π΄Π° ΡƒΡ€Π΅Ρ’ΡƒΡ˜Π΅Ρ‚Π΅ исту ствар Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ мСста. Π£ исто Π²Ρ€Π΅ΠΌΠ΅, Π»Π°ΠΊΠΎ јС ΠΏΠΎΠ³Ρ€Π΅ΡˆΠΈΡ‚ΠΈ, Π° Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π”Π Π˜ (Π½Π΅ ΠΏΠΎΠ½Π°Π²Ρ™Π°Ρ˜ сС) јС ΠΈΠ·ΠΌΠΈΡˆΡ™Π΅Π½ с Ρ€Π°Π·Π»ΠΎΠ³ΠΎΠΌ.

Π—Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅ ΠΎΠ²ΠΎΠ³ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Ρ‚Π°ΠΊΠ°Π² дизајн ΠΊΠ°ΠΎ класа.

ΠŸΡ€Π΅Π΄Π°Π²Π°ΡšΠ°

Класа Ρ˜Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈ Π±Π»ΠΎΠΊ ΠΏΠΎΠΏΠ΅Ρ‚ ΠΊΠΎΠ΄Π°. КласС су ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅ Π·Π° ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ ΠΊΠΎΠ΄Π°.

ΠŸΡ€Π²ΠΎ Ρ‚Ρ€Π΅Π±Π° описати класу. Π‘Π°ΠΌ опис Π½ΠΈΠ³Π΄Π΅ Π½Π΅ додајС Π½ΠΈΠΊΠ°ΠΊΠ²Π΅ рСсурсС. Класа јС описана Ρƒ манифСстима:

# ОписаниС класса начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class ΠΈ Π΅Π³ΠΎ названия.
# Π”Π°Π»ΡŒΡˆΠ΅ ΠΈΠ΄Ρ‘Ρ‚ Ρ‚Π΅Π»ΠΎ класса Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках.
class example_class {
    ...
}

Након ΠΎΠ²ΠΎΠ³Π°, класа сС ΠΌΠΎΠΆΠ΅ користити:

# ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования β€” Π² стилС рСсурса с Ρ‚ΠΈΠΏΠΎΠΌ class
class { 'example_class': }
# Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ include
include example_class
# ΠΏΡ€ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ этих Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ рассказано дальшС

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠ³ Π·Π°Π΄Π°Ρ‚ΠΊΠ° - прСмСстимо ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Ρƒ ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π½Π³ΠΈΠ½ΠΊ-Π° Ρƒ класу:

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
}

ΠŸΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅

Класа ΠΈΠ· ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠ³ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡƒΠΎΠΏΡˆΡ‚Π΅ нијС флСксибилна Ρ˜Π΅Ρ€ ΡƒΠ²Π΅ΠΊ доноси исту Π½Π³ΠΈΠ½ΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ. Π₯ајдС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠΎ ΠΏΡƒΡ‚Π°ΡšΡƒ Π΄ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅, ΠΎΠ½Π΄Π° сС ΠΎΠ²Π° класа ΠΌΠΎΠΆΠ΅ користити Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π³ΠΈΠ½ΠΊ-Π° са Π±ΠΈΠ»ΠΎ којом ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ.

Π’ΠΎ сС ΠΌΠΎΠΆΠ΅ ΡƒΡ‡ΠΈΠ½ΠΈΡ‚ΠΈ користСћи ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅.

ПаТња: ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ Ρƒ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Ρƒ су Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅!

ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²ΠΎΡ˜ сС ΠΌΠΎΠΆΠ΅ приступити Ρ‚Π΅ΠΊ Π½Π°ΠΊΠΎΠ½ ΡˆΡ‚ΠΎ јС дСкларисана, ΠΈΠ½Π°Ρ‡Π΅ Ρ›Π΅ врСдност ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ Π±ΠΈΡ‚ΠΈ 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_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-light, nginx-full).

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

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

Π£ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Ρƒ сС ΠΊΡƒΡ†Π°Ρ˜Ρƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅. ЈСди ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠΎΠ²Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°. Π’ΠΈΠΏΠΎΠ²ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° сС ΠΎΠ±ΠΈΡ‡Π½ΠΎ користС Π·Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Ρƒ врСдности ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° прослСђСних класама ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°ΠΌΠ°. Ако сС прослСђСни ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ Π½Π΅ ΠΏΠΎΠ΄ΡƒΠ΄Π°Ρ€Π° са Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, ΠΏΠΎΡ˜Π°Π²ΠΈΡ›Π΅ сС Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜ΠΈ.

Π’ΠΈΠΏ сС пишС нСпосрСдно испрСд ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

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

КласС: ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜Ρƒ Π½Π°Π·ΠΈΠ² класС Ρƒ односу Π½Π° цласс{'цласснамС':}

Π‘Π²Π°ΠΊΠ° класа јС рСсурс Ρ‚ΠΈΠΏΠ° класа. Као ΠΈ ΠΊΠΎΠ΄ Π±ΠΈΠ»ΠΎ којС Π΄Ρ€ΡƒΠ³Π΅ врстС рСсурса, Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ΠΈ Π΄Π²Π΅ инстанцС истС класС Π½Π° истом Ρ‡Π²ΠΎΡ€Ρƒ.

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

ΠœΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, Π°ΠΊΠΎ користитС include, ΠΎΠ½Π΄Π° сС класа ΠΌΠΎΠΆΠ΅ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ ΠΊΠΎΠ»ΠΈΠΊΠΎ Π³ΠΎΠ΄ ΠΏΡƒΡ‚Π° ΠΆΠ΅Π»ΠΈΡ‚Π΅. Π§ΠΈΡšΠ΅Π½ΠΈΡ†Π° јС Π΄Π° include Ρ˜Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° која ΠΏΡ€ΠΎΠ²Π΅Ρ€Π°Π²Π° Π΄Π° Π»ΠΈ јС класа Π΄ΠΎΠ΄Π°Ρ‚Π° Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ. Ако класа нијС Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ, додајС јС, Π° Π°ΠΊΠΎ Π²Π΅Ρ› ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ, Π½Π΅ Ρ€Π°Π΄ΠΈ Π½ΠΈΡˆΡ‚Π°. Али Ρƒ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ include НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ подСсити ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ класС Ρ‚ΠΎΠΊΠΎΠΌ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π΅ класС - сви ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π±ΠΈΡ‚ΠΈ постављСни Ρƒ СкстСрном ΠΈΠ·Π²ΠΎΡ€Ρƒ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° - Π₯ΠΈΠ΅Ρ€Π° ΠΈΠ»ΠΈ ЕНЦ. О њима Ρ›Π΅ΠΌΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈ Ρƒ слСдСћСм Ρ‡Π»Π°Π½ΠΊΡƒ.

Π”Π΅Ρ„ΠΈΠ½ΠΈΡˆΠ΅

Као ΡˆΡ‚ΠΎ јС Ρ€Π΅Ρ‡Π΅Π½ΠΎ Ρƒ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΡƒ, иста класа Π½Π΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡ‚ΠΈ присутна Π½Π° Ρ‡Π²ΠΎΡ€Ρƒ вишС ΠΎΠ΄ јСдном. ΠœΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, Ρƒ Π½Π΅ΠΊΠΈΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²ΠΈΠΌΠ° ΠΌΠΎΡ€Π°Ρ‚Π΅ Π±ΠΈΡ‚ΠΈ Ρƒ могућности Π΄Π° користитС исти Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° са Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠΌΠ° Π½Π° истом Ρ‡Π²ΠΎΡ€Ρƒ. Π”Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π΅Ρ‡ΠΈΠΌΠ°, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π·Π° сопствСним Ρ‚ΠΈΠΏΠΎΠΌ рСсурса.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° бисмо инсталирали ПΠ₯П ΠΌΠΎΠ΄ΡƒΠ», Ρƒ Авито-Ρƒ Ρ€Π°Π΄ΠΈΠΌΠΎ слСдСћС:

  1. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ са ΠΎΠ²ΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΠΎΠΌ.
  2. Π₯ајдС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ Π·Π° овај ΠΌΠΎΠ΄ΡƒΠ».
  3. ΠšΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ симболичку Π²Π΅Π·Ρƒ Π΄ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Π·Π° ΠΏΡ…ΠΏ-Ρ„ΠΏΠΌ.
  4. ΠšΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ симболичку Π²Π΅Π·Ρƒ Π΄ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Π·Π° ΠΏΡ…ΠΏ Ρ†Π»ΠΈ.

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

ΠŸΠΎΡ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Ρ™Π΅Π½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ са ΠΌΠΎΠ΄ΡƒΠ»ΠΎΠΌ Π·Π° ПΠ₯П:

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 }

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

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

ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΠ½ΠΎΠ²Π½Π΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ ΠΊΠΎΠ΄Π° – ΠΊΠ°Π΄Π° јС сав ΠΊΠΎΠ΄ Ρƒ јСдном манифСсту, Ρ‚Π΅ΡˆΠΊΠΎ јС ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΠΈ овај ΠΊΠΎΠ΄ са Π΄Ρ€ΡƒΠ³ΠΈΠΌΠ°. Π”Π° Π±ΠΈ Ρ€Π΅ΡˆΠΈΠΎ ΠΎΠ²Π° Π΄Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠŸΡƒΠΏΠΏΠ΅Ρ‚ ΠΈΠΌΠ° Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚ који сС Π·ΠΎΠ²Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ - ΠΎΠ²ΠΎ су скупови класа, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… луткарских Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚Π° ΡΠΌΠ΅ΡˆΡ‚Π΅Π½ΠΈΡ… Ρƒ посСбан Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π΅Ρ‡ΠΈΠΌΠ°, ΠΌΠΎΠ΄ΡƒΠ» јС нСзависан Π΄Π΅ΠΎ луткарскС Π»ΠΎΠ³ΠΈΠΊΠ΅. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ» Π·Π° Ρ€Π°Π΄ са Π½Π³ΠΈΠ½ΠΊ-ΠΎΠΌ, ΠΈ ΠΎΠ½ Ρ›Π΅ садрТати ΠΎΠ½ΠΎ ΠΈ само ΠΎΠ½ΠΎ ΡˆΡ‚ΠΎ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π·Π° Ρ€Π°Π΄ са Π½Π³ΠΈΠ½ΠΊ-ΠΎΠΌ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ΠΈ ΠΌΠΎΠ΄ΡƒΠ» Π·Π° Ρ€Π°Π΄ са ПΠ₯П-ΠΎΠΌ ΠΈ Ρ‚Π°ΠΊΠΎ Π΄Π°Ρ™Π΅.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ су вСрзионисани, Π° Ρ‚Π°ΠΊΠΎΡ’Π΅ су ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π½Π΅ зависности ΠΌΠΎΠ΄ΡƒΠ»Π° јСдан ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΎΠ³. ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΎ ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π° - ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Π€ΠΎΡ€Π³Π΅.

На луткарском сСрвСру, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ сС Π½Π°Π»Π°Π·Π΅ Ρƒ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ основног Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ°. Π£Π½ΡƒΡ‚Π°Ρ€ сваког ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ стандардна шСма Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΠ° - манифСсти, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, шаблони, Π»ΠΈΠ± ΠΈΡ‚Π΄.

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

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

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

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

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

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

РСсурси (класС, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π΅) Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Ρƒ сС Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΠΈ ΠΊΠ°ΠΊΠΎ Π³ΠΎΠ΄ ΠΆΠ΅Π»ΠΈΡ‚Π΅. ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π° ΠΊΠΎΡ€Π΅ΡΠΏΠΎΠ½Π΄Π΅Π½Ρ†ΠΈΡ˜Π° ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ ΠΈΠΌΠ΅Π½Π° рСсурса ΠΈ ΠΈΠΌΠ΅Π½Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Ρƒ којој Ρ›Π΅ ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Ρ‚Ρ€Π°ΠΆΠΈΡ‚ΠΈ опис Ρ‚ΠΎΠ³ рСсурса. Ако ΠΏΡ€Π΅ΠΊΡ€ΡˆΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° имСновања, ΠΎΠ½Π΄Π° ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ Π½Π΅Ρ›Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ›ΠΈ опис рСсурса ΠΈ Π΄ΠΎΠ±ΠΈΡ›Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΡƒ Ρƒ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜ΠΈ.

ΠŸΡ€Π°Π²ΠΈΠ»Π° су Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π°:

  • Π‘Π²ΠΈ рСсурси Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Ρƒ ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π±ΠΈΡ‚ΠΈ Ρƒ имСнском простору ΠΌΠΎΠ΄ΡƒΠ»Π°. Ако сС ΠΌΠΎΠ΄ΡƒΠ» ΠΏΠΎΠ·ΠΎΠ²Π΅ foo, ΠΎΠ½Π΄Π° Π±ΠΈ сви рСсурси Ρƒ ΡšΠ΅ΠΌΡƒ Ρ‚Ρ€Π΅Π±Π°Π»ΠΈ Π±ΠΈΡ‚ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈ foo::<anything>, ΠΈΠ»ΠΈ само foo.
  • РСсурс са ΠΈΠΌΠ΅Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΌΠΎΡ€Π° Π±ΠΈΡ‚ΠΈ Ρƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ init.pp.
  • Π—Π° Π΄Ρ€ΡƒΠ³Π΅ рСсурсС, шСма имСновања Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° јС слСдСћа:
    • прСфикс са ΠΈΠΌΠ΅Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π° сС ΠΎΠ΄Π±Π°Ρ†ΡƒΡ˜Π΅
    • свС Π΄Π²ΠΎΡ‚Π°Ρ‡ΠΊΠ΅, Π°ΠΊΠΎ ΠΈΡ… ΠΈΠΌΠ°, Π·Π°ΠΌΠ΅ΡšΡƒΡ˜Ρƒ сС косим Ρ†Ρ€Ρ‚Π°ΠΌΠ°
    • Π΄ΠΎΠ΄Π°Ρ‚Π°ΠΊ јС Π΄ΠΎΠ΄Π°Ρ‚ .pp

ΠŸΠΎΠΊΠ°Π·Π°Ρ›Ρƒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. Π Π΅Ρ†ΠΈΠΌΠΎ Π΄Π° пишСм ΠΌΠΎΠ΄ΡƒΠ» nginx. Π‘Π°Π΄Ρ€ΠΆΠΈ слСдСћС рСсурсС:

  • класа nginx описано Ρƒ манифСсту init.pp;
  • класа nginx::service описано Ρƒ манифСсту service.pp;
  • дСфинисати nginx::server описано Ρƒ манифСсту server.pp;
  • дСфинисати nginx::server::location описано Ρƒ манифСсту server/location.pp.

шаблони

Π‘ΠΈΠ³ΡƒΡ€Π½ΠΎ ΠΈ сами Π·Π½Π°Ρ‚Π΅ ΡˆΡ‚Π° су шаблони, Π½Π΅Ρ›Ρƒ ΠΈΡ… ΠΎΠ²Π΄Π΅ Π΄Π΅Ρ‚Π°Ρ™Π½ΠΎ описивати. Али оставићу Ρ‚ΠΎ Π·Π° сваки ΡΠ»ΡƒΡ‡Π°Ρ˜ Π»ΠΈΠ½ΠΊ ΠΊΠ° Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ˜ΠΈ.

Како користити шаблонС: Π—Π½Π°Ρ‡Π΅ΡšΠ΅ шаблона сС ΠΌΠΎΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠΈΡ€ΠΈΡ‚ΠΈ ΠΏΠΎΠΌΠΎΡ›Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅ template, који јС прослСђСн ΠΏΡƒΡ‚Π°ΡšΠΎΠΌ Π΄ΠΎ шаблона. Π—Π° рСсурсС Ρ‚ΠΈΠΏΠ° Ρ„Π°Ρ˜Π» користи сС зајСдно са ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ content. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ²Π°ΠΊΠΎ:

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

Π’ΠΈΠ΅Π² ΠΏΠ°Ρ‚Ρ… <modulename>/<filename> ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π° Ρ„Π°Ρ˜Π» <rootdir>/modules/<modulename>/templates/<filename>.

ΠŸΠΎΡ€Π΅Π΄ Ρ‚ΠΎΠ³Π°, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° inline_template β€” ΠΏΡ€ΠΈΠΌΠ° тСкст шаблона ΠΊΠ°ΠΎ унос, Π° Π½Π΅ ΠΈΠΌΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅.

Π£ ΠΎΠΊΠ²ΠΈΡ€Ρƒ шаблона, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ користити свС Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅ ΠŸΡƒΠΏΠΏΠ΅Ρ‚ Ρƒ Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎΠΌ опсСгу.

ΠŸΡƒΠΏΠΏΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π° шаблонС Ρƒ Π•Π Π‘ ΠΈ Π•ΠŸΠŸ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ:

Π£ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎ Π•Π Π‘-Ρƒ

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π½Π΅ структурС:

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

Π˜Π·Ρ€Π°Π·ΠΈ Ρƒ Π•Π Π‘-Ρƒ су написани Ρƒ Π ΡƒΠ±ΠΈ-Ρƒ (Π•Π Π‘ јС Π·Π°ΠΏΡ€Π°Π²ΠΎ Π•ΠΌΠ±Π΅Π΄Π΄Π΅Π΄ Π ΡƒΠ±ΠΈ).

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° шаблона

Π Π΅Ρ†ΠΈΠΌΠΎ Π΄Π° пишСм ΠΌΠΎΠ΄ΡƒΠ» Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρƒ Π—ΠΎΠΎΠšΠ΅Π΅ΠΏΠ΅Ρ€-Π°. Класа ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π½Π° Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΡ‚ΠΏΡ€ΠΈΠ»ΠΈΠΊΠ΅ ΠΎΠ²Π°ΠΊΠΎ:

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

И ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›ΠΈ шаблон zoo.cfg.erb - Π’Π°ΠΊΠΎ:

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

dataDir=<%= @datadir %>

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

Π§ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ ΠΈ ΡƒΠ³Ρ€Π°Ρ’Π΅Π½Π΅ Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅

ЧСсто ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈ Π΄Π΅ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ зависи ΠΎΠ΄ Ρ‚ΠΎΠ³Π° ΡˆΡ‚Π° сС Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎ дСшава Π½Π° Ρ‡Π²ΠΎΡ€Ρƒ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ зависности ΠΎΠ΄ Ρ‚ΠΎΠ³Π° ΡˆΡ‚Π° јС Π”Π΅Π±ΠΈΠ°Π½ издањС, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ јС Π΄Π° инсталиратС Ρ˜Π΅Π΄Π½Ρƒ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π‘Π²Π΅ ΠΎΠ²ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π΄Π³Π»Π΅Π΄Π°Ρ‚ΠΈ Ρ€ΡƒΡ‡Π½ΠΎ, ΠΏΡ€Π΅ΠΏΠΈΡΠΈΠ²Π°ΡšΠ΅ΠΌ манифСста Π°ΠΊΠΎ сС Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅. Али ΠΎΠ²ΠΎ нијС ΠΎΠ·Π±ΠΈΡ™Π°Π½ приступ, Π°ΡƒΡ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° јС ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΡ™Π°.

Π”Π° Π±ΠΈ Π΄ΠΎΠ±ΠΈΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΎ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°, ΠŸΡƒΠΏΠΏΠ΅Ρ‚ ΠΈΠΌΠ° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ који сС Π·ΠΎΠ²Π΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅. Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ - ΠΎΠ²ΠΎ јС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° ΠΎ Ρ‡Π²ΠΎΡ€Ρƒ, доступна Ρƒ манифСстима Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ ΠΎΠ±ΠΈΡ‡Π½ΠΈΡ… ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²ΠΈΡ… Ρƒ Π³Π»ΠΎΠ±Π°Π»Π½ΠΎΠΌ простору ΠΈΠΌΠ΅Π½Π°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ΅ хоста, Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ систСма, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° процСсора, листа корисника, листа ΠΌΡ€Π΅ΠΆΠ½ΠΈΡ… ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜ΡΠ° ΠΈ ΡšΠΈΡ…ΠΎΠ²ΠΈΡ… адрСса ΠΈ још ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ³Π°. Π§ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ су доступнС Ρƒ манифСстима ΠΈ шаблонима ΠΊΠ°ΠΎ Ρ€Π΅Π³ΡƒΠ»Π°Ρ€Π½Π΅ Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π΄Π° са Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π°ΠΌΠ°:

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

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

Π’ΠΎΠΊΠΎΠΌ Ρ€Π°Π΄Π°, марионСтски Π°Π³Π΅Π½Ρ‚ ΠΏΡ€Π²ΠΎ ΠΊΠΎΠΏΠΈΡ€Π° свС доступнС сакупљачС Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π° са сСрвСра ΠΏΠ°ΠΏΠ΅Ρ‚Π° Ρƒ Ρ‡Π²ΠΎΡ€, Π½Π°ΠΊΠΎΠ½ Ρ‡Π΅Π³Π° ΠΈΡ… ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ ΠΈ ΡˆΠ°Ρ™Π΅ ΠΏΡ€ΠΈΠΊΡƒΠΏΡ™Π΅Π½Π΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ сСрвСру; Након Ρ‚ΠΎΠ³Π°, сСрвСр ΠΏΠΎΡ‡ΠΈΡšΠ΅ са ΡΠ°ΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

Π§ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ Ρƒ ΠΎΠ±Π»ΠΈΠΊΡƒ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈΡ… Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°

Π’Π°ΠΊΠ²Π΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ су ΡΠΌΠ΅ΡˆΡ‚Π΅Π½Π΅ Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Ρƒ ΠΈΠΌΠ΅Π½ΠΈΠΊΡƒ facts.d. Наравно, Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π±ΠΈΡ‚ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ½Π΅. Када сС ΠΏΠΎΠΊΡ€Π΅Ρ›Ρƒ, ΠΌΠΎΡ€Π°Ρ˜Ρƒ Π΄Π° ΠΈΠ·Π»Π°Π·Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ Ρƒ стандардни ΠΈΠ·Π»Π°Π· Ρƒ Π˜ΠΠœΠ› ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ ΠΊΡ™ΡƒΡ‡=врСдност.

НС Π·Π°Π±ΠΎΡ€Π°Π²ΠΈΡ‚Π΅ Π΄Π° сС Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ односС Π½Π° свС Ρ‡Π²ΠΎΡ€ΠΎΠ²Π΅ којС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡˆΠ΅ ΠΏΠΎΠΏΠ΅Ρ‚ сСрвСр Π½Π° који јС ваш ΠΌΠΎΠ΄ΡƒΠ» распорСђСн. Π‘Ρ‚ΠΎΠ³Π°, Ρƒ скрипти, Π²ΠΎΠ΄ΠΈΡ‚Π΅ Ρ€Π°Ρ‡ΡƒΠ½Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π° Π»ΠΈ систСм ΠΈΠΌΠ° свС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½Π΅ Π΄Π° ваша Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡˆΠ΅.

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

Π ΡƒΠ±ΠΈ фацтс

Π’Π°ΠΊΠ²Π΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ су ΡΠΌΠ΅ΡˆΡ‚Π΅Π½Π΅ Ρƒ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Ρƒ ΠΈΠΌΠ΅Π½ΠΈΠΊΡƒ lib/facter.

# всё начинаСтся с Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Facter.add с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΊΡ‚Π° ΠΈ Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°
Facter.add('ladvd') do
# Π² Π±Π»ΠΎΠΊΠ°Ρ… confine ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ условия примСнимости Ρ„Π°ΠΊΡ‚Π° β€” ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ true, ΠΈΠ½Π°Ρ‡Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚Π° Π½Π΅ вычисляСтся ΠΈ Π½Π΅ возвращаСтся
  confine do
    Facter::Core::Execution.which('ladvdc') # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² PATH Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ исполняСмый Ρ„Π°ΠΉΠ»
  end
  confine do
    File.socket?('/var/run/ladvd.sock') # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ UNIX-domain socket
  end
# Π² Π±Π»ΠΎΠΊΠ΅ setcode происходит собствСнно вычислСниС значСния Ρ„Π°ΠΊΡ‚Π°
  setcode do
    hash = {}
    if (out = Facter::Core::Execution.execute('ladvdc -b'))
      out.split.each do |l|
        line = l.split('=')
        next if line.length != 2
        name, value = line
        hash[name.strip.downcase.tr(' ', '_')] = value.strip.chomp(''').reverse.chomp(''').reverse
      end
    end
    hash  # Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послСднСго выраТСния Π² Π±Π»ΠΎΠΊΠ΅ setcode являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΊΡ‚Π°
  end
end

ВСкст Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅

Π’Π°ΠΊΠ²Π΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ сС ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°Ρ˜Ρƒ Π½Π° Ρ‡Π²ΠΎΡ€ΠΎΠ²Π΅ Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡ˜ΡƒΠΌΡƒ /etc/facter/facts.d Ρƒ старом Π›ΡƒΡ‚ΠΊΠ°Ρ€Ρƒ ΠΈΠ»ΠΈ /etc/puppetlabs/facts.d Ρƒ Π½ΠΎΠ²ΠΎΠΌ Π›ΡƒΡ‚ΠΊΡƒ.

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

Π”ΠΎΠ»Π°Π·Π°ΠΊ Π΄ΠΎ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π°

ΠŸΠΎΡΡ‚ΠΎΡ˜Π΅ Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π° Π΄Π° сС приступи Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π°ΠΌΠ°:

  • ΠΊΡ€ΠΎΠ· Ρ€Π΅Ρ‡Π½ΠΈΠΊ $facts: $facts['fqdn'];
  • користСћи ΠΈΠΌΠ΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ ΠΊΠ°ΠΎ ΠΈΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅: $fqdn.

ΠΠ°Ρ˜Π±ΠΎΡ™Π΅ јС користити Ρ€Π΅Ρ‡Π½ΠΈΠΊ $facts, ΠΈΠ»ΠΈ још Π±ΠΎΡ™Π΅, Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚Π΅ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ простор ΠΈΠΌΠ΅Π½Π° ($::facts).

Π•Π²ΠΎ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΎΠ³ ΠΎΠ΄Π΅Ρ™ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅.

Π£Π³Ρ€Π°Ρ’Π΅Π½Π΅ Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅

Осим Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π°, ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΈ Π½Π΅ΠΊΠ΅ Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅, доступно Ρƒ Π³Π»ΠΎΠ±Π°Π»Π½ΠΎΠΌ имСнском простору.

  • ΠΏΠΎΡƒΠ·Π΄Π°Π½Π΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ којС су ΠΏΡ€Π΅ΡƒΠ·Π΅Ρ‚Π΅ ΠΈΠ· ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ΠΎΠ²ΠΎΠ³ сСртификата (ΠΏΠΎΡˆΡ‚ΠΎ сС сСртификат ΠΎΠ±ΠΈΡ‡Π½ΠΎ издајС Π½Π° сСрвСру Π·Π° ΠΏΠΎΠΏΠ΅Ρ‚, Π°Π³Π΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ само Π΄Π° ΡƒΠ·ΠΌΠ΅ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ свој сСртификат, ΠΏΠ° су ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ β€žΠΏΠΎΠ²Π΅Ρ€Ρ™ΠΈΠ²Π΅β€œ): Π½Π°Π·ΠΈΠ² сСртификата, Π½Π°Π·ΠΈΠ² сСртификата хост ΠΈ Π΄ΠΎΠΌΠ΅Π½, Π΅ΠΊΡΡ‚Π΅Π½Π·ΠΈΡ˜Π΅ ΠΈΠ· сСртификата.
  • Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ ΠΎ сСрвСру β€”ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ којС сС односС Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΎ ΡΠ΅Ρ€Π²Π΅Ρ€Ρƒβ€”Π²Π΅Ρ€Π·ΠΈΡ˜Π°, ΠΈΠΌΠ΅, ИП адрСса сСрвСра, ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅.
  • агСнтскС Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ којС додајС Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π°Π³Π΅Π½Ρ‚-ΠΏΡƒΠΏΠΏΠ΅Ρ‚, Π° Π½Π΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ β€” Π½Π°Π·ΠΈΠ² сСртификата, Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π°Π³Π΅Π½Ρ‚Π°, Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π»ΡƒΡ‚ΠΊΠ΅.
  • мастСр ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ - ΠŸΠ°ΠΏΠΏΠ΅Ρ‚ΠΌΠ°ΡΡ‚Π΅Ρ€ Π²Π°Ρ€ΠΈΡ˜Π°Π±Π»Π΅ (сиц!). Π’ΠΎ јС ΠΎΡ‚ΠΏΡ€ΠΈΠ»ΠΈΠΊΠ΅ исто ΠΊΠ°ΠΎ Ρƒ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ ΠΎ сСрвСру, плус врСдности ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° су доступнС.
  • ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€Π° β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€Π° којС сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΡ˜Ρƒ Ρƒ сваком опсСгу: Π½Π°Π·ΠΈΠ² Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎΠ³ ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΈ Π½Π°Π·ΠΈΠ² ΠΌΠΎΠ΄ΡƒΠ»Π° Ρƒ ΠΊΠΎΠΌΠ΅ сС приступило Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎΠΌ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚Ρƒ. ΠœΠΎΠ³Ρƒ сС користити, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€Ρƒ Π΄Π° сС ваши ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΈ часови Π½Π΅ користС Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π°.

Π”ΠΎΠ΄Π°Ρ‚Π°ΠΊ 1: ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΠΈ свС ΠΎΠ²ΠΎ?

Π§Π»Π°Π½Π°ΠΊ јС садрТао ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° луткарског ΠΊΠΎΠ΄Π°, Π°Π»ΠΈ Π½Π°ΠΌ ΡƒΠΎΠΏΡˆΡ‚Π΅ нијС Ρ€Π΅ΠΊΠ°ΠΎ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ овај ΠΊΠΎΠ΄. Па, исправљам сС.

Π—Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Π° Π΄ΠΎΠ²ΠΎΡ™Π°Π½ јС Π°Π³Π΅Π½Ρ‚, Π°Π»ΠΈ Ρƒ Π²Π΅Ρ›ΠΈΠ½ΠΈ ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²Π° Ρ›Π΅ Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±Π°Ρ‚ΠΈ ΠΈ сСрвСр.

АгСнтС

Π‘Π°Ρ€Π΅ΠΌ ΠΎΠ΄ Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ 5, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΏΡƒΠΏΠΏΠ΅Ρ‚-Π°Π³Π΅Π½Ρ‚ ΠΈΠ· Π·Π²Π°Π½ΠΈΡ‡Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ ΠŸΡƒΠΏΠΏΠ΅Ρ‚Π»Π°Π±Ρ-Π° садрТС свС зависности (Ρ€ΡƒΠ±ΠΈΠ½ ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›Π΅ Π΄Ρ€Π°Π³ΡƒΡ™Π΅), Ρ‚Π°ΠΊΠΎ Π΄Π° Π½Π΅ΠΌΠ° ΠΏΠΎΡ‚Π΅ΡˆΠΊΠΎΡ›Π° са ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜ΠΎΠΌ (Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°ΠΌΠ° заснованим Π½Π° Π”Π΅Π±ΠΈΠ°Π½-Ρƒ - Π½Π΅ користимо Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π΅ заснованС Π½Π° РПМ-Ρƒ).

Π£ Π½Π°Ρ˜Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ˜Π΅ΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ, Π΄Π° бистС користили ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π»ΡƒΡ‚ΠΊΠ΅, Π΄ΠΎΠ²ΠΎΡ™Π½ΠΎ јС ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ Π°Π³Π΅Π½Ρ‚Π° Ρƒ Ρ€Π΅ΠΆΠΈΠΌΡƒ Π±Π΅Π· сСрвСра: ΠΏΠΎΠ΄ условом Π΄Π° јС ΠΊΠΎΠ΄ Π»ΡƒΡ‚ΠΊΠ΅ ΠΊΠΎΠΏΠΈΡ€Π°Π½ Ρƒ Ρ‡Π²ΠΎΡ€, ΠΏΠΎΠΊΡ€Π΅Π½ΠΈΡ‚Π΅ 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.

Π‘Π΅Ρ€Π²Π΅Ρ€

Π£ ΠΎΠ²ΠΎΠΌ Ρ‡Π»Π°Π½ΠΊΡƒ Π½Π΅Ρ›Ρƒ Ρ€Π°Π·ΠΌΠ°Ρ‚Ρ€Π°Ρ‚ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Ρƒ поставку паппСтсСрвСра ΠΈ ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ ΠΊΠΎΠ΄Π° Π½Π° њСга, само Ρ›Ρƒ Ρ€Π΅Ρ›ΠΈ Π΄Π° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° сСрвСра која Π½Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π° Π΄ΠΎΠ΄Π°Ρ‚Π½Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π·Π° Ρ€Π°Π΄ са ΠΌΠ°Π»ΠΈΠΌ Π±Ρ€ΠΎΡ˜Π΅ΠΌ; Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ (Ρ€Π΅Ρ†ΠΈΠΌΠΎ, Π΄ΠΎ сто). Π’Π΅Ρ›ΠΈ Π±Ρ€ΠΎΡ˜ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° Ρ›Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π°Ρ‚ΠΈ подСшавањС - ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΎΡ˜ врСдности, пуппСтсСрвСр ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ Π½Π΅ вишС ΠΎΠ΄ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ€Π°Π΄Π½ΠΈΠΊΠ°, Π·Π° Π²Π΅Ρ›Π΅ пСрформансС ΠΌΠΎΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ›Π°Ρ‚ΠΈ ΡšΠΈΡ…ΠΎΠ² Π±Ρ€ΠΎΡ˜ ΠΈ Π½Π΅ Π·Π°Π±ΠΎΡ€Π°Π²ΠΈΡ‚Π΅ Π΄Π° ΠΏΠΎΠ²Π΅Ρ›Π°Ρ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅ΡšΠ° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π΅, ΠΈΠ½Π°Ρ‡Π΅ Ρ›Π΅ сСрвСр Π²Π΅Ρ›ΠΈΠ½Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π° сакупљати смСћС.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠ΄Π° - Π°ΠΊΠΎ Π²Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π±Ρ€Π·ΠΎ ΠΈ Π»Π°ΠΊΠΎ, ΠΏΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ (Π½Π° Ρ€10ΠΊ)[https://github.com/puppetlabs/r10k], Π·Π° ΠΌΠ°Π»Π΅ ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π΅ Π±ΠΈ Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡƒΠ΄Π΅ сасвим Π΄ΠΎΠ²ΠΎΡ™Π½ΠΎ.

Π”ΠΎΠ΄Π°Ρ‚Π°ΠΊ 2: Π‘ΠΌΠ΅Ρ€Π½ΠΈΡ†Π΅ Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°ΡšΠ΅

  1. ΠŸΠΎΡΡ‚Π°Π²ΠΈΡ‚Π΅ сву Π»ΠΎΠ³ΠΈΠΊΡƒ Ρƒ класС ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π΅.
  2. Π”Ρ€ΠΆΠΈΡ‚Π΅ класС ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π΅ Ρƒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΠΌΠ°, Π° Π½Π΅ Ρƒ манифСстима који ΠΎΠΏΠΈΡΡƒΡ˜Ρƒ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π΅.
  3. ΠšΠΎΡ€ΠΈΡΡ‚ΠΈΡ‚Π΅ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅.
  4. НС ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΈΡ„-ΠΎΠ²Π΅ Π½Π° основу ΠΈΠΌΠ΅Π½Π° хостова.
  5. Π‘Π»ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π·Π° класС ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π΅ – ΠΎΠ²ΠΎ јС Π±ΠΎΡ™Π΅ ΠΎΠ΄ ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½Π΅ Π»ΠΎΠ³ΠΈΠΊΠ΅ скривСнС Ρƒ Ρ‚Π΅Π»Ρƒ класС/Π΄Π΅Ρ„ΠΈΠ½Π΅.

ΠžΠ±Ρ˜Π°ΡΠ½ΠΈΡ›Ρƒ Π·Π°ΡˆΡ‚ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡƒΡ‡ΡƒΡ˜Π΅ΠΌ Π΄Π° Ρ‚ΠΎ ΡƒΡ€Π°Π΄ΠΈΡ‚Π΅ Ρƒ слСдСћСм Ρ‡Π»Π°Π½ΠΊΡƒ.

Π—Π°ΠΊΡ™ΡƒΡ‡Π°ΠΊ

Π—Π°Π²Ρ€ΡˆΠΈΠΌΠΎ са ΡƒΠ²ΠΎΠ΄ΠΎΠΌ. Π£ слСдСћСм Ρ‡Π»Π°Π½ΠΊΡƒ Ρ›Ρƒ Π²Π°ΠΌ Ρ€Π΅Ρ›ΠΈ ΠΎ Π₯ΠΈΠ΅Ρ€ΠΈ, ЕНЦ-Ρƒ ΠΈ ΠŸΡƒΠΏΠΏΠ΅Ρ‚Π”Π‘-Ρƒ.

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

Π—Π°ΠΏΡ€Π°Π²ΠΎ, ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΡ˜Π°Π»Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ вишС – ΠΌΠΎΠ³Ρƒ Π΄Π° пишСм Ρ‡Π»Π°Π½ΠΊΠ΅ ΠΎ слСдСћим Ρ‚Π΅ΠΌΠ°ΠΌΠ°, гласам ΠΎ ΠΎΠ½ΠΎΠΌΠ΅ ΠΎ Ρ‡Π΅ΠΌΡƒ Π±ΠΈ вас Π·Π°Π½ΠΈΠΌΠ°Π»ΠΎ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅:

  • 100%НапрСднС луткарскС ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π΅ – Π½Π΅ΠΊΠΎ ΡΡ€Π°ΡšΠ΅ слСдСћСг Π½ΠΈΠ²ΠΎΠ°: ΠΏΠ΅Ρ‚Ρ™Π΅, ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·Ρ€Π°Π·ΠΈ, сакупљачи рСсурса, ΠΈΠ·Π²Π΅Π·Π΅Π½ΠΈ рСсурси ΠΈ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΌΠ΅Ρ’Ρƒ хостовима ΠΏΡ€Π΅ΠΊΠΎ ΠŸΡƒΠΏΠΏΠ΅Ρ‚-Π°, ΠΎΠ·Π½Π°ΠΊΠ°, Π΄ΠΎΠ±Π°Π²Ρ™Π°Ρ‡Π°, апстрактних Ρ‚ΠΈΠΏΠΎΠ²Π° ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°.13
  • 100%β€žΠˆΠ° сам ΠΌΠ°ΠΌΠΈΠ½ Π°Π΄ΠΌΠΈΠ½β€œ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎ смо сС ΠΌΠΈ Ρƒ Авито-Ρƒ ΡΠΏΡ€ΠΈΡ˜Π°Ρ‚Π΅Ρ™ΠΈΠ»ΠΈ са Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ сСрвСра Π·Π° ΠΏΡƒΠΏΠΊΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΈ, Ρƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ, Π΄Π΅ΠΎ ΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€ΠΈΡ€Π°ΡšΡƒ ΠΏΠΎΠΏΠ΅Ρ‚ сСрвСра.7
  • 100%Како пишСмо луткарски ΠΊΠΎΠ΄: ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°, Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅, ЦИ/Π¦Π”.18

22 корисника јС гласало. 9 корисника јС Π±ΠΈΠ»ΠΎ ΡƒΠ·Π΄Ρ€ΠΆΠ°Π½ΠΎ.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ