Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Puppet

Puppet Π΅ систСма Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° конфигурацията. Използва сС Π·Π° ΠΏΡ€ΠΈΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° хостовС Π² ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° Ρ‚ΠΎΠ²Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅.

Работя с Puppet ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΏΠ΅Ρ‚ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Π’ΠΎΠ·ΠΈ тСкст Π΅ ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½Π° ΠΈ ΠΏΡ€Π΅Π½Π°Ρ€Π΅Π΄Π΅Π½Π° компилация ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° докумСнтация, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈΡ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ ΡΡŠΡ‰Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° Puppet.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Puppet

Основна информация

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

Използва сС ΠΌΠΎΠ΄Π΅Π» Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с изтСглянС: ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, вСднъТ Π½Π° всСки ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ час, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚ със ΡΡŠΡ€Π²ΡŠΡ€Π° Π·Π° конфигурация ΠΈ я ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚. Ако стС Ρ€Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈ с Ansible, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ push ΠΌΠΎΠ΄Π΅Π»: Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° процСса Π½Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° конфигурацията, самитС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ няма Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ Π½ΠΈΡ‰ΠΎ.

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π° комуникация сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° двупосочно TLS ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅: ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΈΠΌΠ°Ρ‚ свои собствСни частни ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ сСртификати. ОбикновСно ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ ΠΈΠ·Π΄Π°Π²Π° сСртификати Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, Π½ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° външСн CA.

Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² манифСститС

Π’ куклСнската тСрминология към марионСтния ΡΡŠΡ€Π²ΡŠΡ€ ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ сС възли (възли). ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡΡ‚Π° Π·Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π΅ написана Π² манифСсти Π½Π° спСциалСн Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ – Puppet DSL.

Puppet DSL Π΅ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ Π΅Π·ΠΈΠΊ. Π’ΠΎΠΉ описва ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° възСла ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ рСсурси, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π€Π°ΠΉΠ»ΡŠΡ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΈ ΠΈΠΌΠ° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅.
  • ΠŸΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ Π΅ инсталиран.
  • Услугата Π·Π°ΠΏΠΎΡ‡Π½Π°.

РСсурситС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρƒ си:

  • Има зависимости, Ρ‚Π΅ влияят Π½Π° Ρ€Π΅Π΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ рСсурситС.
    НапримСр, β€žΠΏΡŠΡ€Π²ΠΎ инсталирайтС ΠΏΠ°ΠΊΠ΅Ρ‚Π°, слСд Ρ‚ΠΎΠ²Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ конфигурационния Ρ„Π°ΠΉΠ», слСд Ρ‚ΠΎΠ²Π° стартирайтС услугата.β€œ
  • Има извСстия - Π°ΠΊΠΎ Π΄Π°Π΄Π΅Π½ рСсурс Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½, Ρ‚ΠΎΠΉ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° извСстия Π΄ΠΎ рСсурситС, ΠΊΠΎΠΈΡ‚ΠΎ са Π°Π±ΠΎΠ½ΠΈΡ€Π°Π½ΠΈ Π·Π° Π½Π΅Π³ΠΎ.
    НапримСр, Π°ΠΊΠΎ конфигурационният Ρ„Π°ΠΉΠ» сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π° рСстартиратС услугата.

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

Puppet Π΅ написан Π½Π° Ruby, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ конструкциитС ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ‚Π΅ са Π²Π·Π΅Ρ‚ΠΈ ΠΎΡ‚ Ρ‚Π°ΠΌ. Ruby Π²ΠΈ позволява Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ‚Π΅ 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

Π—Π° ΠΏΠΎ-Π½Π°Ρ‚Π°Ρ‚ΡŠΡˆΠ½ΠΎ обяснСниС Ρ‰Π΅ прСдставя понятиСто β€žΠΎΡΠ½ΠΎΠ²Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡβ€œ. ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° дирСктория Π΅ дирСкторията, която ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° конфигурацията Π½Π° Puppet Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ възСл.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° дирСктория Π²Π°Ρ€ΠΈΡ€Π° Π² зависимост ΠΎΡ‚ вСрсията Π½Π° Puppet ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ срСди. Π‘Ρ€Π΅Π΄ΠΈΡ‚Π΅ са нСзависими Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ конфигурация, ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. ОбикновСно сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² комбинация с git, ΠΊΠ°Ρ‚ΠΎ Π² Ρ‚ΠΎΠ·ΠΈ случай срСди сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ ΠΎΡ‚ git ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ всСки възСл сС Π½Π°ΠΌΠΈΡ€Π° Π² Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π° срСда. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΎ Π² самия възСл ΠΈΠ»ΠΈ Π² ENC, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ говоря Π² слСдващата статия.

  • Π’ Ρ‚Ρ€Π΅Ρ‚Π°Ρ‚Π° вСрсия (β€žΡΡ‚Π°Ρ€Π°Ρ‚Π° Puppetβ€œ) основната дирСктория бСшС /etc/puppet. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° срСди Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ със стария Puppet. Ако сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ срСди, Ρ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² /etc/puppet/environments, основната дирСктория Ρ‰Π΅ бъдС дирСкторията Π½Π° срСдата. Ако срСди Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, основната дирСктория Ρ‰Π΅ бъдС основната дирСктория.
  • Π—Π°ΠΏΠΎΡ‡Π²Π°ΠΉΠΊΠΈ ΠΎΡ‚ Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚Π°Ρ‚Π° вСрсия (β€žΠ½ΠΎΠ²Π° ΠΌΠ°Ρ€ΠΈΠΎΠ½Π΅Ρ‚ΠΊΠ°β€œ), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° срСди става Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π±Π°Π·ΠΎΠ²Π°Ρ‚Π° дирСктория Π΅ прСмСстСна Π² /etc/puppetlabs/code. Π‘ΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ срСдитС сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² /etc/puppetlabs/code/environments, основната дирСктория Π΅ дирСкторията Π½Π° срСдата.

Врябва Π΄Π° ΠΈΠΌΠ° поддирСктория Π² основната дирСктория manifests, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ манифСсти, описващи Π²ΡŠΠ·Π»ΠΈΡ‚Π΅. ОсвСн Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΈΠΌΠ° поддирСктория modules, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅. Π©Π΅ Π²ΠΈ ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊΠ²ΠΈ са ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-късно. Π’ допълнСниС, старата Puppet ΠΌΠΎΠΆΠ΅ ΡΡŠΡ‰ΠΎ Π΄Π° ΠΈΠΌΠ° поддирСктория 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 β€” посочва Π΄Π°Π»ΠΈ началният скрипт Π½Π° услугата ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° рСстартиранС. Ако false ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ Π΅ посочСн рСстартиранС β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС стойността Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€. Ако false ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ рСстартиранС Π½Π΅ Π΅ посочСно - услугата Π΅ спряна ΠΈ стартирана Π·Π° рСстартиранС (Π½ΠΎ systemd ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° systemctl restart).
  • hasstatus β€” посочва Π΄Π°Π»ΠΈ initscript Π½Π° услугата ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° status, Π°ΠΊΠΎ false, Ρ‚ΠΎΠ³Π°Π²Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стойността Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° статус. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ true.

EXEC

Изпълнява външни ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Ако Π½Π΅ посочитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ създава, само Π°ΠΊΠΎ, освСн Π°ΠΊΠΎ ΠΈΠ»ΠΈ освСТСно, ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Ρ‰Π΅ сС изпълнява всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС стартира Puppet. МоТС Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° извСстия - изпълнява ΠΊΠΎΠΌΠ°Π½Π΄Π°.

ΠžΠΏΡ†ΠΈΠΈ:

  • ΠΈΠΌΠ΅ Π½Π° рСсурс β€” ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° изпълнСниС (ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ€)
  • ΠΊΠΎΠΌΠ°Π½Π΄Π° β€” ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, която трябва Π΄Π° бъдС изпълнСна (Π°ΠΊΠΎ Π½Π΅ Π΅ посочСна Π² ΠΈΠΌΠ΅Ρ‚ΠΎ)
  • ΠΏΡŠΡ‚ β€” ΠΏΡŠΡ‚ΠΈΡ‰Π°, Π² ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ изпълнимия Ρ„Π°ΠΉΠ»
  • само Π°ΠΊΠΎ β€” Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, посочСна Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, Π·Π°Π²ΡŠΡ€ΡˆΠΈ с Π½ΡƒΠ»Π΅Π² ΠΊΠΎΠ΄ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅, основната ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ бъдС изпълнСна
  • освСн Π°ΠΊΠΎ β€” Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, посочСна Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€, Π·Π°Π²ΡŠΡ€ΡˆΠΈ с Π½Π΅Π½ΡƒΠ»Π΅Π² ΠΊΠΎΠ΄ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅, основната ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ бъдС изпълнСна
  • създава β€” Π°ΠΊΠΎ посочСният Π² Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Ρ„Π°ΠΉΠ» Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°, основната ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ бъдС изпълнСна
  • освСТСно - Π°ΠΊΠΎ true, Ρ‚ΠΎΠ³Π°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Ρ‰Π΅ бъдС изпълнСна само ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ exec ΠΏΠΎΠ»ΡƒΡ‡ΠΈ извСстиС ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ рСсурси
  • cwd β€” дирСктория, ΠΎΡ‚ която Π΄Π° сС изпълни ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°
  • ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» β€” потрСбитСлят, ΠΎΡ‚ ΠΊΠΎΠ³ΠΎΡ‚ΠΎ Π΄Π° сС изпълни ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°
  • доставчик - ΠΊΠ°ΠΊ Π΄Π° стартиратС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°:
    • POSIX β€” просто сС създава Π΄ΡŠΡ‰Π΅Ρ€Π΅Π½ процСс, Π½Π΅ забравяйтС Π΄Π° посочитС ΠΏΡŠΡ‚
    • Ρ‡Π΅Ρ€ΡƒΠΏΠΊΠ° - ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° сС стартира Π² shell-Π° /bin/sh, ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ посочСно ΠΏΡŠΡ‚, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ globbing, Ρ‚Ρ€ΡŠΠ±ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π°. ОбикновСно сС ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ° спСциални Π·Π½Π°Ρ†ΠΈ (|, ;, &&, || ΠΈ Ρ‚.Π½.).

Cron

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

ΠžΠΏΡ†ΠΈΠΈ:

  • ΠΈΠΌΠ΅ Π½Π° рСсурс - просто някакъв Π²ΠΈΠ΄ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€
  • Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, β€” ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π½Π° crownjob:
    • present - ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅, Π°ΠΊΠΎ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°
    • absent - ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅, Π°ΠΊΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°
  • ΠΊΠΎΠΌΠ°Π½Π΄Π° - ΠΊΠ°ΠΊΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π° стартиратС
  • заобикаляща срСда β€” Π² коя срСда Π΄Π° сС изпълни ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° (списък с ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ стойности Ρ‡Ρ€Π΅Π· =)
  • ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» β€” ΠΎΡ‚ ΠΊΠΎΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π΄Π° сС изпълни ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°
  • ΠΌΠΈΠ½ΡƒΡ‚Π°, час, Π΄Π΅Π»Π½ΠΈΡ‡Π΅Π½, мСсСц, мСсСчСн Π΄Π΅Π½ β€” ΠΊΠΎΠ³Π° Π΄Π° стартиратС cron. Ако някой ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π΅ Π΅ посочСн, стойността ΠΌΡƒ Π² crontab Ρ‰Π΅ бъдС *.

Π’ Puppet 6.0 Cron всС Π΅Π΄Π½ΠΎ ΠΈΠ·Π²Π°Π΄Π΅Π½ ΠΎΡ‚ кутията Π² puppetserver, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма докумСнтация Π½Π° общия сайт. Но Ρ‚ΠΎΠΉ Π΅ Π² кутията Π² puppet-agent, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π½ΡƒΠΆΠ΄Π° Π΄Π° Π³ΠΎ инсталиратС ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ докумСнтацията Π·Π° Π½Π΅Π³ΠΎ Π² докумСнтацията Π·Π° ΠΏΠ΅Ρ‚Π°Ρ‚Π° вСрсия Π½Π° PuppetИли Π½Π° GitHub.

Π—Π° рСсурситС ΠΊΠ°Ρ‚ΠΎ цяло

Изисквания Π·Π° уникалност Π½Π° рСсурса

Най-чСстата Π³Ρ€Π΅ΡˆΠΊΠ°, която срСщамС Π΅ Π”ΡƒΠ±Π»ΠΈΡ€Π°Π½Π° дСкларация. Π’Π°Π·ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° възниква, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ рСсурса ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ Ρ‚ΠΈΠΏ с Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ΅ сС появяват Π² дирСкторията.

Π—Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ напиша ΠΎΡ‚Π½ΠΎΠ²ΠΎ: манифСститС Π·Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ възСл Π½Π΅ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ рСсурси ΠΎΡ‚ ΡΡŠΡ‰ΠΈΡ Ρ‚ΠΈΠΏ с Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅!

Понякога ΠΈΠΌΠ° Π½ΡƒΠΆΠ΄Π° Π΄Π° сС инсталират ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅, Π½ΠΎ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. Π’ Ρ‚ΠΎΠ·ΠΈ случай трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° nameΠ·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°:

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

Π”Ρ€ΡƒΠ³ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ рСсурси ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° избягванС Π½Π° Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½Π΅ - name Ρƒ обслуТванС, command Ρƒ EXEC, ΠΈ Ρ‚Π°ΠΊΠ° Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ.

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

ВсСки Ρ‚ΠΈΠΏ рСсурс ΠΈΠΌΠ° някои спСциални ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, нСзависимо ΠΎΡ‚ СстСството си.

ПълСн списък с ΠΌΠ΅Ρ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² докумСнтацията Π½Π° Puppet.

ΠšΡ€Π°Ρ‚ΡŠΠΊ списък:

  • изисква β€” Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΡ‚ ΠΊΠΎΠΈ рСсурси зависи Ρ‚ΠΎΠ·ΠΈ рСсурс.
  • ΠΏΡ€Π΅Π΄ΠΈ - Π’ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΡƒΠΊΠ°Π·Π²Π° ΠΊΠΎΠΈ рСсурси зависят ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ рСсурс.
  • Абонирай сС β€” Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΡƒΠΊΠ°Π·Π²Π° ΠΎΡ‚ ΠΊΠΎΠΈ рСсурси Ρ‚ΠΎΠ·ΠΈ рСсурс ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° извСстия.
  • увСдомява β€” Π’ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΡƒΠΊΠ°Π·Π²Π° ΠΊΠΎΠΈ рСсурси ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ извСстия ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ рСсурс.

Всички ΠΈΠ·Π±Ρ€ΠΎΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚Π°ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ ΠΈΠ»ΠΈ Π΅Π΄Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° към рСсурс, ΠΈΠ»ΠΈ масив ΠΎΡ‚ Π²Ρ€ΡŠΠ·ΠΊΠΈ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΈ скоби.

Π’Ρ€ΡŠΠ·ΠΊΠΈ към рСсурси

Π’Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° към рСсурс Π΅ просто спомСнаванС Π½Π° рСсурса. Π’Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π³Π»Π°Π²Π½ΠΎ Π·Π° ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Π½Π΅ Π½Π° зависимости. ΠŸΠΎΠ·ΠΎΠ²Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π΅ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ рСсурс Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅.

Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π΅ слСдният: Ρ‚ΠΈΠΏ рСсурс с Π³Π»Π°Π²Π½Π° Π±ΡƒΠΊΠ²Π° (Π°ΠΊΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠ° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π΄Π²ΠΎΠΉΠ½ΠΈ двоСточия, Ρ‚ΠΎΠ³Π°Π²Π° всяка част ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ двоСточията Π΅ Π³Π»Π°Π²Π½Π°), слСд Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° рСсурса Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΈ скоби (случаят Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π΅ сС промСня!). НС трябва Π΄Π° ΠΈΠΌΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΈ, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΈΡ‚Π΅ скоби сС изписват нСпосрСдствСно слСд ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠ°.

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

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 {}. Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ части ΠΎΡ‚ конфигурацията, Π½ΠΎ ΠΊΠ°Ρ‚ΠΎ цяло Ρ‚ΠΎΠ²Π° Π΅ лошо Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - конфигурацията растС ΠΈ Π°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ‰Π°Ρ‚Π° част ΠΎΡ‚ конфигурацията, Ρ‰Π΅ трябва Π΄Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚Π΅ Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ Π½Π΅Ρ‰ΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ мСста. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΅ лСсно Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈ ΠΊΠ°Ρ‚ΠΎ цяло ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ DRY (Π½Π΅ сС повтаряйтС) Π΅ измислСн с ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°.

Π—Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΠΌΠ° Ρ‚Π°ΠΊΡŠΠ² Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΊΠ°Ρ‚ΠΎ клас.

класовС

Клас Π΅ Π½Π°ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ Π±Π»ΠΎΠΊ ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π° poppet. НСобходими са класовС Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄.

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° сС опишС ΠΊΠ»Π°ΡΡŠΡ‚. Π‘Π°ΠΌΠΎΡ‚ΠΎ описаниС никъдС Π½Π΅ добавя рСсурси. ΠšΠ»Π°ΡΡŠΡ‚ Π΅ описан Π² манифСсти:

# ОписаниС класса начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова 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}"

Puppet ΠΈΠΌΠ° пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°, ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅, ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎ, ΠΈΠΌΠ°Ρ‚ Π·ΠΎΠ½Π° Π½Π° видимост: ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° стойността Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° сС Ρ‚ΡŠΡ€ΡΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°, слСд Ρ‚ΠΎΠ²Π° Π² ΠΎΠ±Ρ…Π²Π°Ρ‰Π°Ρ‰ΠΎΡ‚ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΈ Ρ‚.Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° пространство Π½Π° ΠΈΠΌΠ΅Π½Π°:

  • Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ - ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ извън описаниСто Π½Π° класа ΠΈΠ»ΠΈ възСла ΠΎΡ‚ΠΈΠ²Π°Ρ‚ Ρ‚Π°ΠΌ;
  • пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° Π½Π° възли Π² описаниСто Π½Π° възли;
  • пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° Π½Π° клас Π² описаниСто Π½Π° класа.

Π—Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ нСяснота ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° посочитС пространството ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° Π² ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π°:

# пСрСмСнная Π±Π΅Π· пространства ΠΈΠΌΡ‘Π½
$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':}

ВсСки клас Π΅ рСсурс ΠΎΡ‚ Ρ‚ΠΈΠΏ клас. ΠšΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ всСки Π΄Ρ€ΡƒΠ³ Ρ‚ΠΈΠΏ рСсурс, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄Π²Π° СкзСмпляра ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ клас Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ възСл.

Ако сС ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ клас към Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ възСл Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ class { 'classname':} (Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΠΊΠ°, с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ), Ρ‰Π΅ ΠΈΠΌΠ° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅. Но Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ клас Π² рСсурсния стил, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Π΄Π½Π°Π³Π° ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ всички Π½Π΅Π³ΠΎΠ²ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² манифСста.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ include, Ρ‚ΠΎΠ³Π°Π²Π° ΠΊΠ»Π°ΡΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС добавя Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΡŠΡ‚ΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΆΠ΅Π»Π°Π΅Ρ‚Π΅. Π€Π°ΠΊΡ‚ Π΅, Ρ‡Π΅ include Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½Π° функция, която провСрява Π΄Π°Π»ΠΈ Π΄Π°Π΄Π΅Π½ клас Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ към дирСкторията. Ако ΠΊΠ»Π°ΡΡŠΡ‚ Π½Π΅ Π΅ Π² дирСкторията, Ρ‚ΠΎΠΉ Π³ΠΎ добавя, Π° Π°ΠΊΠΎ Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°, Π½Π΅ ΠΏΡ€Π°Π²ΠΈ Π½ΠΈΡ‰ΠΎ. Но Π² случай Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ include НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° класа ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° дСкларацията Π½Π° клас - всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ във външСн ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ - Hiera ΠΈΠ»ΠΈ ENC. Π©Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° тях Π² слСдващата статия.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Ρ

ΠšΠ°ΠΊΡ‚ΠΎ бСшС ΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ Π±Π»ΠΎΠΊ, Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ клас Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° Π½Π° възСл ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ вСднъТ. Π’ някои случаи ΠΎΠ±Π°Ρ‡Π΅ трябва Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄ с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ΠΈ възСл. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΈΠΌΠ° Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ собствСн Π²ΠΈΠ΄ рСсурс.

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

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

Π’ Ρ‚Π°ΠΊΠΈΠ²Π° случаи Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΠΌ (Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ Ρ‚ΠΈΠΏ, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ Ρ‚ΠΈΠΏ рСсурс). Define Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° клас, Π½ΠΎ ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΠΊΠΈ: ΠΏΡŠΡ€Π²ΠΎ, всСки 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' }
}

Най-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Ρ…Π²Π°Π½Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΏΡ€ΠΈ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ Π΅ Π² Define. Π’ΠΎΠ²Π° сС случва, Π°ΠΊΠΎ дСфиниция ΠΈΠΌΠ° рСсурс с постоянно ΠΈΠΌΠ΅ ΠΈ ΠΈΠΌΠ° Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ СкзСмпляра Π½Π° Ρ‚Π°Π·ΠΈ дСфиниция Π½Π° Π΄Π°Π΄Π΅Π½ възСл.

ЛСсно Π΅ Π΄Π° сС ΠΏΡ€Π΅Π΄ΠΏΠ°Π·ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°: всички рСсурси Π² дСфиницията трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ ΠΈΠΌΠ΅ Π² зависимост ΠΎΡ‚ $title. АлтСрнатива Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎ добавянС Π½Π° рСсурси; Π² Π½Π°ΠΉ-простия случай Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° прСмСститС рСсурситС, ΠΎΠ±Ρ‰ΠΈ Π·Π° всички СкзСмпляри Π½Π° дСфиницията, Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ клас ΠΈ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ клас Π² дСфиницията - функция include ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π΅Π½.

Има ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° постиганС Π½Π° идСмпотСнтност ΠΏΡ€ΠΈ добавянС Π½Π° рСсурси, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‡Ρ€Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ defined ΠΈ ensure_resources, Π½ΠΎ Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° Π·Π° Ρ‚ΠΎΠ²Π° Π² слСдващия Π΅ΠΏΠΈΠ·ΠΎΠ΄.

Зависимости ΠΈ извСстия Π·Π° класовС ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ

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

  • зависимост ΠΎΡ‚ клас/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ добавя зависимости към всички рСсурси Π½Π° класа/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅;
  • зависимост клас/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ добавя зависимости към всички рСсурси клас/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅;
  • увСдомяванСто Π·Π° клас/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ увСдомява всички рСсурси Π½Π° класа/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ;
  • class/define subscription сС Π°Π±ΠΎΠ½ΠΈΡ€Π° Π·Π° всички рСсурси Π½Π° class/define.

Условни ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ сСлСктори

ДокумСнтация Ρ‚ΡƒΠΊ.

if

Π’ΡƒΠΊ Π΅ просто:

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

освСн ако

освСн Π°ΠΊΠΎ Π½Π΅ Π΅ if Π² ΠΎΠ±Ρ€Π°Ρ‚Π½Π° посока: Π±Π»ΠΎΠΊΡŠΡ‚ ΠΎΡ‚ ΠΊΠΎΠ΄ Ρ‰Π΅ бъдС изпълнСн, Π°ΠΊΠΎ ΠΈΠ·Ρ€Π°Π·ΡŠΡ‚ Π΅ false.

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

случай

Π’ΡƒΠΊ ΡΡŠΡ‰ΠΎ няма Π½ΠΈΡ‰ΠΎ слоТно. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ рСгулярни стойности (Π½ΠΈΠ·ΠΎΠ²Π΅, числа ΠΈ Ρ‚.Π½.), рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ стойности.

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

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

Π‘Π΅Π»Π΅ΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π΅ Π΅Π·ΠΈΠΊΠΎΠ²Π° конструкция, ΠΏΠΎΠ΄ΠΎΠ±Π½Π° Π½Π° case, Π½ΠΎ вмСсто Π΄Π° изпълни Π±Π»ΠΎΠΊ ΠΎΡ‚ ΠΊΠΎΠ΄, Ρ‚ΠΎΠΉ Π²Ρ€ΡŠΡ‰Π° стойност.

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

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

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

ОсвСн Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ с ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° - ΠΊΠΎΠ³Π°Ρ‚ΠΎ цСлият ΠΊΠΎΠ΄ Π΅ Π² Π΅Π΄ΠΈΠ½ манифСст, Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ Π΄Π° сС сподСли с Π΄Ρ€ΡƒΠ³ΠΈ. Π—Π° Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈ Ρ‚Π΅Π·ΠΈ Π΄Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Puppet ΠΈΠΌΠ° ΠΎΠ±Π΅ΠΊΡ‚, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

ΠœΠΎΠ΄ΡƒΠ»ΠΈ - Ρ‚ΠΎΠ²Π° са Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ класовС, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Puppet ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, поставСни Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° дирСктория. Π‘ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΡƒΠΌΠΈ, ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π΅ нСзависима част ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Puppet. НапримСр ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡƒΠ» Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с nginx ΠΈ Ρ‚ΠΎΠΉ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ‚ΠΎΠ²Π° ΠΈ само Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с nginx ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡƒΠ» Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с PHP ΠΈ Ρ‚.Π½.

ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ са с вСрсии ΠΈ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ зависимости Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³. Има ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ - ΠšΠΎΠ²Π°Ρ‡Π½ΠΈΡ†Π° Π·Π° ΠΊΡƒΠΊΠ»ΠΈ.

На марионСтния ΡΡŠΡ€Π²ΡŠΡ€ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² поддирСкторията modules Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° дирСктория. Π’ΡŠΠ² всСки ΠΌΠΎΠ΄ΡƒΠ» ΠΈΠΌΠ° стандартна схСма Π½Π° дирСктория - манифСсти, Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, шаблони, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ‚.Π½.

Π€Π°ΠΉΠ»ΠΎΠ²Π° структура Π² ΠΌΠΎΠ΄ΡƒΠ»

ΠšΠΎΡ€Π΅Π½ΡŠΡ‚ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° слСднитС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с описатСлни ΠΈΠΌΠ΅Π½Π°:

  • manifests - ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° манифСсти
  • files - ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅
  • templates - ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° шаблони
  • lib β€” ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Ruby ΠΊΠΎΠ΄

Π’ΠΎΠ²Π° Π½Π΅ Π΅ пълСн списък с Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π½ΠΎ засСга Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½ Π·Π° Ρ‚Π°Π·ΠΈ статия.

ИмСна Π½Π° рСсурси ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² ΠΌΠΎΠ΄ΡƒΠ»Π°

ДокумСнтация Ρ‚ΡƒΠΊ.

РСсурситС (класовС, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ) Π² ΠΌΠΎΠ΄ΡƒΠ» Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ искатС. ОсвСн Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° пряко ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° рСсурс ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ 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.

Templates

Бъс сигурност Π²ΠΈΠ΅ сами Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅, няма Π΄Π° Π³ΠΈ описвам ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ‚ΡƒΠΊ. Но Ρ‰Π΅ Π³ΠΎ оставя Π·Π° всСки случай Π²Ρ€ΡŠΠ·ΠΊΠ° към Wikipedia.

Как Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ шаблони: Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° шаблон ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° функция template, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΏΡ€Π΅Π΄Π°Π²Π° ΠΏΡŠΡ‚Ρ към шаблона. Π—Π° рСсурси ΠΎΡ‚ Ρ‚ΠΈΠΏ досиС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС Π·Π°Π΅Π΄Π½ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° content. НапримСр Ρ‚Π°ΠΊΠ°:

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

ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΏΡŠΡ‚Ρ <modulename>/<filename> ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π° Ρ„Π°ΠΉΠ» <rootdir>/modules/<modulename>/templates/<filename>.

ОсвСн Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° функция inline_template β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° тСкста Π½Π° шаблона ΠΊΠ°Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄, Π° Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π°.

Π’ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ всички ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° Puppet Π² тСкущия ΠΎΠ±Ρ…Π²Π°Ρ‚.

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

Накратко Π·Π° ERB

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

  • <%= Π’Π«Π ΠΠ–Π•ΠΠ˜Π• %> β€” Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ стойността Π½Π° ΠΈΠ·Ρ€Π°Π·Π°
  • <% Π’Π«Π ΠΠ–Π•ΠΠ˜Π• %> β€” изчислСтС стойността Π½Π° ΠΈΠ·Ρ€Π°Π· (Π±Π΅Π· Π΄Π° Π³ΠΎ Π²ΠΌΡŠΠΊΠ²Π°Ρ‚Π΅). УсловнитС ΠΈΠ·Ρ€Π°Π·ΠΈ (if) ΠΈ Ρ†ΠΈΠΊΠ»ΠΈΡ‚Π΅ (each) ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΡ‚ΠΈΠ²Π°Ρ‚ Ρ‚ΡƒΠΊ.
  • <%# ΠšΠžΠœΠœΠ•ΠΠ’ΠΠ Π˜Π™ %>

Π˜Π·Ρ€Π°Π·ΠΈΡ‚Π΅ Π² 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 просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС Π² Π»ΠΎΠ³

Π€ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, Ρ„Π°ΠΊΡ‚ΡŠΡ‚ ΠΈΠΌΠ° ΠΈΠΌΠ΅ (Π½ΠΈΠ·) ΠΈ стойност (Π½Π°Π»ΠΈΡ‡Π½ΠΈ са Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅: Π½ΠΈΠ·ΠΎΠ²Π΅, масиви, Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ). Π―ΠΆΡ‚Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ Ρ„Π°ΠΊΡ‚ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ своя собствСна. Описани са ΡΡŠΠ±ΠΈΡ€Π°Ρ‡ΠΈ Π½Π° Ρ„Π°ΠΊΡ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² RubyΠΈΠ»ΠΈ ΠΊΠ°Ρ‚ΠΎ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Π’ΡŠΠ² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС прСдставят ΠΈ Ρ„Π°ΠΊΡ‚ΠΈ тСкстови Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с Π΄Π°Π½Π½ΠΈ Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅.

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° марионСтният Π°Π³Π΅Π½Ρ‚ ΠΏΡŠΡ€Π²ΠΎ ΠΊΠΎΠΏΠΈΡ€Π° всички Π½Π°Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ΠΈ Π½Π° Ρ„Π°ΠΊΡ‚ΠΈ ΠΎΡ‚ pappetserver Π² възСла, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΠΈ стартира ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΊΡ‚ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°; Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Π·Π°ΠΏΠΎΡ‡Π²Π° Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°.

Π€Π°ΠΊΡ‚ΠΈ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅

Π’Π°ΠΊΠΈΠ²Π° Ρ„Π°ΠΊΡ‚ΠΈ сС поставят Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² дирСкторията facts.d. Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ трябва Π΄Π° са изпълними. ΠšΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚, Ρ‚Π΅ трябва Π΄Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ‚ информация Π² стандартСн ΠΈΠ·Ρ…ΠΎΠ΄ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ YAML ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡=стойност.

НС забравяйтС, Ρ‡Π΅ Ρ„Π°ΠΊΡ‚ΠΈΡ‚Π΅ сС отнасят Π·Π° всички възли, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ 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 Π² стария Puppet ΠΈΠ»ΠΈ /etc/puppetlabs/facts.d Π² новия Puppet.

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

Π‘Ρ‚ΠΈΠ³Π°Π½Π΅ Π΄ΠΎ Ρ„Π°ΠΊΡ‚ΠΈΡ‚Π΅

Има Π΄Π²Π° Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ към Ρ„Π°ΠΊΡ‚ΠΈΡ‚Π΅:

  • Ρ‡Ρ€Π΅Π· Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ° $facts: $facts['fqdn'];
  • ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΊΡ‚Π° ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°: $fqdn.

Най-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ€Π΅Ρ‡Π½ΠΈΠΊ $facts, ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅, посочСтС Π³Π»ΠΎΠ±Π°Π»Π½ΠΎΡ‚ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ($::facts).

Π•Ρ‚ΠΎ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ Ρ€Π°Π·Π΄Π΅Π» ΠΎΡ‚ докумСнтацията.

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

ОсвСн Ρ„Π°ΠΊΡ‚ΠΈΡ‚Π΅, ΠΈΠΌΠ° ΠΈ някои ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π½Π°Π»ΠΈΡ‡Π΅Π½ Π² Π³Π»ΠΎΠ±Π°Π»Π½ΠΎΡ‚ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°.

  • достовСрни Ρ„Π°ΠΊΡ‚ΠΈ β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π²Π·Π΅Ρ‚ΠΈ ΠΎΡ‚ сСртификата Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡΠ΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΡŠΡ‚ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·Π΄Π°Π²Π° Π½Π° poppet ΡΡŠΡ€Π²ΡŠΡ€, Π°Π³Π΅Π½Ρ‚ΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ просто Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ своя сСртификат, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅ са β€žΠ΄ΠΎΠ²Π΅Ρ€Π΅Π½ΠΈβ€œ): ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° сСртификата, ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° хост ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½, Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΎΡ‚ сСртификата.
  • Ρ„Π°ΠΊΡ‚ΠΈ Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π° β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с информация Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π° β€” вСрсия, ΠΈΠΌΠ΅, IP адрСс Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, срСда.
  • агСнтски Ρ„Π°ΠΊΡ‚ΠΈ β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ ΠΌΠ°Ρ€ΠΈΠΎΠ½Π΅Ρ‚Π΅Π½ Π°Π³Π΅Π½Ρ‚, Π° Π½Π΅ ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ΠΎΡ€ β€” ΠΈΠΌΠ΅ Π½Π° сСртификат, вСрсия Π½Π° Π°Π³Π΅Π½Ρ‚, вСрсия Π½Π° ΠΌΠ°Ρ€ΠΈΠΎΠ½Π΅Ρ‚ΠΊΠ°.
  • Π³Π»Π°Π²Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ - ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° Pappetmaster (sic!). Π’ΠΎΠ²Π° Π΅ Π³ΠΎΡ€Π΅-Π΄ΠΎΠ»Ρƒ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ Π² Ρ„Π°ΠΊΡ‚ΠΈ Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, плюс стойноститС Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ са Π½Π°Π»ΠΈΡ‡Π½ΠΈ.
  • ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° β€” ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚ във всСки ΠΎΠ±Ρ…Π²Π°Ρ‚: ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° тСкущия ΠΌΠΎΠ΄ΡƒΠ» ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ тСкущия ΠΎΠ±Π΅ΠΊΡ‚. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ Π²Π°ΡˆΠΈΡ‚Π΅ частни класовС Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π”ΠΎΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ 1: ΠΊΠ°ΠΊ Π΄Π° стартиратС ΠΈ Π΄Π΅Π±ΡŠΠ³Π²Π°Ρ‚Π΅ всичко Ρ‚ΠΎΠ²Π°?

Бтатията ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°ΡˆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° ΠΌΠ°Ρ€ΠΈΠΎΠ½Π΅Ρ‚Π΅Π½ ΠΊΠΎΠ΄, Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ Π½ΠΈ ΠΊΠ°Π·Π° ΠΊΠ°ΠΊ Π΄Π° стартирамС Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄. Π•, поправям сС.

АгСнт Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½, Π·Π° Π΄Π° стартиратС Puppet, Π½ΠΎ Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ случаи Ρ‰Π΅ Π²ΠΈ трябва ΠΈ ΡΡŠΡ€Π²ΡŠΡ€.

Π°Π³Π΅Π½Ρ‚

ПонС ΠΎΡ‚ вСрсия XNUMX, ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° ΠΊΡƒΠΊΠ»Π΅Π½ Π°Π³Π΅Π½Ρ‚ ΠΎΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Puppetlabs ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ всички зависимости (ruby ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ ΡΠΊΡŠΠΏΠΎΡ†Π΅Π½Π½ΠΈ камъни), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма затруднСния ΠΏΡ€ΠΈ инсталиранСто (говоря Π·Π° Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° 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

По-Π΄ΠΎΠ±Ρ€Π΅ Π΅, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π΄Π° настроитС ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ Π΄Π° стартиратС Π°Π³Π΅Π½Ρ‚ΠΈ Π½Π° Π²ΡŠΠ·Π»ΠΈΡ‚Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π΄Π΅ΠΌΠΎΠ½ - Ρ‚ΠΎΠ³Π°Π²Π° вСднъТ Π½Π° всСки ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ час Ρ‚Π΅ Ρ‰Π΅ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ конфигурацията, ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½Π° ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π°.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠΌΠΈΡ‚ΠΈΡ€Π°Ρ‚Π΅ push ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° - ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ възСла, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ интСрСсува ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ sudo puppet agent -t. ΠšΠ»ΡŽΡ‡ -t (--test) Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π²Π° няколко ΠΎΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΎ. Π’Π΅Π·ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ слСдното:

  • Π½Π΅ стартирайтС Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π΄Π΅ΠΌΠΎΠ½ (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π°Π³Π΅Π½Ρ‚ΡŠΡ‚ стартира Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Π΄Π΅ΠΌΠΎΠ½);
  • ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ слСд ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π°Π³Π΅Π½Ρ‚ΡŠΡ‚ Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Ρ‰Π΅ ΠΏΡ€ΠΈΠ»Π°Π³Π° конфигурацията вСднъТ Π½Π° всСки ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ час);
  • Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π΄Π½Π΅Π²Π½ΠΈΠΊ;
  • ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ във Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅.

ΠΠ³Π΅Π½Ρ‚ΡŠΡ‚ ΠΈΠΌΠ° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ - ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½Π΅ стС сигурни, Ρ‡Π΅ стС написали ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° конфигурация ΠΈ искатС Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π°Π³Π΅Π½Ρ‚ΡŠΡ‚ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. Π’ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ сС Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π° ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° --noop Π½Π° командния Ρ€Π΅Π΄: sudo puppet agent -t --noop.

ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠ° Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° - Π² Π½Π΅Π³ΠΎ ΠΌΠ°Ρ€ΠΈΠΎΠ½Π΅Ρ‚ΠΊΠ°Ρ‚Π° пишС Π·Π° всички дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°: Π·Π° рСсурса, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ рСсурс, Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ стартира. Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ --debug.

ΡΡŠΡ€Π²ΡŠΡ€

Няма Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌ ΠΏΡŠΠ»Π½Π°Ρ‚Π° настройка Π½Π° pappetserver ΠΈ внСдряванСто Π½Π° ΠΊΠΎΠ΄ към Π½Π΅Π³ΠΎ Π² Ρ‚Π°Π·ΠΈ статия; Ρ‰Π΅ ΠΊΠ°ΠΆΠ° само, Ρ‡Π΅ ΠΈΠΌΠ° напълно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π½Π° вСрсия Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, която Π½Π΅ изисква Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° конфигурация Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с малък Π±Ρ€ΠΎΠΉ възли (Π΄Π° Ρ€Π΅Ρ‡Π΅ΠΌ, Π΄ΠΎ сто). По-голям Π±Ρ€ΠΎΠΉ възли Ρ‰Π΅ изискват настройка - ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ puppetserver стартира Π½Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ†ΠΈ, Π·Π° ΠΏΠΎ-голяма производитСлност трябва Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚Π΅ броя ΠΈΠΌ ΠΈ Π½Π΅ забравяйтС Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚Π΅ ограничСнията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Ρ‰Π΅ ΡΡŠΠ±ΠΈΡ€Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ° ΠΏΡ€Π΅Π· ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅.

ВнСдряванС Π½Π° ΠΊΠΎΠ΄ - Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π½Π΅Π³ΠΎ Π±ΡŠΡ€Π·ΠΎ ΠΈ лСсно, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ (Π² r10k)[https://github.com/puppetlabs/r10k], Π·Π° ΠΌΠ°Π»ΠΊΠΈ инсталации Π±ΠΈ трябвало Π΄Π° Π΅ напълно Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ.

Π”ΠΎΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅ 2: Насоки Π·Π° ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅

  1. ΠŸΠΎΡΡ‚Π°Π²Π΅Ρ‚Π΅ цялата Π»ΠΎΠ³ΠΈΠΊΠ° Π² класовС ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ.
  2. Π‘ΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΉΡ‚Π΅ класовС ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π° Π½Π΅ Π² манифСсти, описващи възли.
  3. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΊΡ‚ΠΈΡ‚Π΅.
  4. НС ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ ifs въз основа Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° хостовС.
  5. ЧувствайтС сС свободни Π΄Π° добавятС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° класовС ΠΈ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ†ΠΈΠΈ - Ρ‚ΠΎΠ²Π° Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ ΠΎΡ‚ ΠΈΠΌΠΏΠ»ΠΈΡ†ΠΈΡ‚Π½Π°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ°, скрита Π² тялото Π½Π° класа/Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ.

Π©Π΅ обясня Π·Π°Ρ‰ΠΎ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° Π² слСдващата статия.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π”Π° ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈΠΌ с Π²ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ слСдващата статия Ρ‰Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° Π·Π° Hiera, ENC ΠΈ PuppetDB.

Π’ Π°Π½ΠΊΠ΅Ρ‚Π°Ρ‚Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° участват само рСгистрирани ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ. Π’ΠΏΠΈΡˆΠΈ сС, Моля Ρ‚Π΅.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈ - ΠΌΠΎΠ³Π° Π΄Π° пиша статии ΠΏΠΎ слСднитС Ρ‚Π΅ΠΌΠΈ, Π΄Π° гласуватС Π·Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π±ΠΈ Π²ΠΈ Π±ΠΈΠ»ΠΎ интСрСсно Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅:

  • 59,1%Π£ΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½ΠΈ ΠΌΠ°Ρ€ΠΈΠΎΠ½Π΅Ρ‚Π½ΠΈ конструкции - някои глупости ΠΎΡ‚ слСдващо Π½ΠΈΠ²ΠΎ: Ρ†ΠΈΠΊΠ»ΠΈ, ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·Ρ€Π°Π·ΠΈ, ΠΊΠΎΠ»Π΅ΠΊΡ‚ΠΎΡ€ΠΈ Π½Π° рСсурси, Скспортирани рСсурси ΠΈ комуникация ΠΌΠ΅ΠΆΠ΄Ρƒ хостовС Ρ‡Ρ€Π΅Π· Puppet, Ρ‚Π°Π³ΠΎΠ²Π΅, доставчици, абстрактни Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ.13
  • 31,8%β€žΠΠ· съм Π°Π΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° ΠΌΠ°ΠΉΠΊΠ° ΠΌΠΈβ€œ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π½ΠΈΠ΅ Π² Avito сС сприятСлихмС с няколко poppet ΡΡŠΡ€Π²ΡŠΡ€Π° с Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии ΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ частта Π·Π° администриранСто Π½Π° poppet ΡΡŠΡ€Π²ΡŠΡ€Π°.7
  • 81,8%Как пишСм ΠΌΠ°Ρ€ΠΈΠΎΠ½Π΅Ρ‚Π΅Π½ ΠΊΠΎΠ΄: инструмСнти, докумСнтация, тСстванС, CI/CD.18

22 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ гласуваха. 9 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ сС Π²ΡŠΠ·Π΄ΡŠΡ€ΠΆΠ°Ρ…Π°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com