Puppet β ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ Ρ ΠΎΡΡΠΎΠ² ΠΊ Π½ΡΠΆΠ½ΠΎΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
Π― ΡΠ°Π±ΠΎΡΠ°Ρ Ρ Puppet ΡΠΆΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΡΠΈ Π»Π΅Ρ. ΠΡΠΎΡ ΡΠ΅ΠΊΡΡ β ΠΏΠΎ ΡΡΡΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄ΡΠ½Π½Π°Ρ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½ΠΎΠ²ΠΈΡΠΊΠ°ΠΌ Π±ΡΡΡΡΠΎ Π²Π½ΠΈΠΊΠ½ΡΡΡ Π² ΡΡΡΡ Puppet.
ΠΠ°Π·ΠΎΠ²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
Π‘Ρ Π΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ Puppet β ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ, Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· ΡΠ΅ΡΠ²Π΅ΡΠ° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ pull-ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠ°Π±ΠΎΡΡ: ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π· Π² ΠΏΠΎΠ»ΡΠ°ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Ρ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ Ansible, ΡΠΎ ΡΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΡΠ³Π°Ρ, push-ΠΌΠΎΠ΄Π΅Π»Ρ: Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ.
ΠΡΠΈ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½Π΅Π΅ TLS-ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅: Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π°ΠΊΡΡΡΡΠ΅ ΠΊΠ»ΡΡΠΈ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π½ΠΎ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ CA.
ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΠΌΠΈ
Π ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Puppet ΠΊ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π½ΠΎΠ΄Ρ (nodes). ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ Π½ΠΎΠ΄ ΠΏΠΈΡΠ΅ΡΡΡ Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°Ρ Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ β 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 }
). - Π‘ΡΡΠ΅Π»ΠΊΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅.
- Π‘ΡΡΠ΅Π»ΠΊΠΈ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠΈΡΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΈΠΌΠΈ.
Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΠΏΠ°ΠΏΠΏΠ΅ΡΡΠ΅ΡΠ²Π΅ΡΠ΅
ΠΠ»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠΉ Ρ Π²Π²Π΅Π΄Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Β«ΠΊΠΎΡΠ½Π΅Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΒ». ΠΠΎΡΠ½Π΅Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ β ΡΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Puppet-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π½ΠΎΠ΄Ρ.
ΠΠΎΡΠ½Π΅Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ°Π΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π΅ΡΡΠΈΠΈ Puppet ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ. ΠΠΊΡΡΠΆΠ΅Π½ΠΈΡ β ΡΡΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ Π½Π°Π±ΠΎΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡ . ΠΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π³ΠΈΡΠΎΠΌ, Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΈΠ· Π²Π΅ΡΠΎΠΊ Π³ΠΈΡΠ°. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠ°ΠΆΠ΄Π°Ρ Π½ΠΎΠ΄Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ°ΠΌΠΎΠΉ Π½ΠΎΠ΄Π΅, Π»ΠΈΠ±ΠΎ Π² ENC, ΠΏΡΠΎ ΡΡΠΎ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅.
- Π ΡΡΠ΅ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ (Β«ΡΡΠ°ΡΡΠΉ ΠΠ°ΠΏΠΏΠ΅ΡΒ») Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ Π±ΡΠ»Π°
/etc/puppet
. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ β ΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΎ ΡΡΠ°ΡΡΠΌ ΠΠ°ΠΏΠΏΠ΅ΡΠΎΠΌ. ΠΡΠ»ΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΡΠΎ ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΡΠ°Π½ΡΡΡΡ Π²/etc/puppet/environments
, ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ Π±Π°Π·ΠΎΠ²Π°Ρ. - ΠΠ°ΡΠΈΠ½Π°Ρ Ρ ΡΠ΅ΡΠ²ΡΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ (Β«Π½ΠΎΠ²ΡΠΉ ΠΠ°ΠΏΠΏΠ΅ΡΒ») ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΉ ΡΡΠ°Π»ΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ, Π° Π±Π°Π·ΠΎΠ²ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ»ΠΈ Π²
/etc/puppetlabs/code
. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ°Π½ΡΡΡΡ Π²/etc/puppetlabs/code/environments
, ΠΊΠΎΡΠ½Π΅Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
Π ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ manifests
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π»Π΅ΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΠ² Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ΄. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ°ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ modules
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π»Π΅ΠΆΠ°Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΡΡΠ°ΡΠΎΠΌ ΠΠ°ΠΏΠΏΠ΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ files
, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π»Π΅ΠΆΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π½Π° Π½ΠΎΠ΄Ρ. Π Π½ΠΎΠ²ΠΎΠΌ ΠΠ°ΠΏΠΏΠ΅ΡΠ΅ ΠΆΠ΅ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π²ΡΠ½Π΅ΡΠ΅Π½Ρ Π² ΠΌΠΎΠ΄ΡΠ»ΠΈ.
Π€Π°ΠΉΠ»Ρ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΠ² ΠΈΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ .pp
.
ΠΠ°ΡΠ° Π±ΠΎΠ΅Π²ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½ΠΎΠ΄Ρ ΠΈ ΡΠ΅ΡΡΡΡΠ° Π½Π° Π½Π΅ΠΉ
ΠΠ° Π½ΠΎΠ΄Π΅ server1.testdomain
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΡΠ°ΠΉΠ» /etc/issue
Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ Debian GNU/Linux n l
. Π€Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³ΡΡΠΏΠΏΠ΅ root
, ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ 644
.
ΠΠΈΡΠ΅ΠΌ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ:
node 'server1.testdomain' { # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ Π½ΠΎΠ΄Π΅ server1.testdomain
file { '/etc/issue': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» /etc/issue
ensure => present, # ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ
content => 'Debian GNU/Linux n l', # Ρ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅
owner => root, # ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ
group => root, # Π³ΡΡΠΏΠΏΠ°-Π²Π»Π°Π΄Π΅Π»Π΅Ρ
mode => '0644', # ΠΏΡΠ°Π²Π° Π½Π° ΡΠ°ΠΉΠ». ΠΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ (Π² ΠΊΠ°Π²ΡΡΠΊΠ°Ρ
), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½Π°ΡΠ΅ ΡΠΈΡΠ»ΠΎ Ρ 0 Π² Π½Π°ΡΠ°Π»Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΠΏΡΠΈΠ½ΡΡΠΎ ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΈ Π²ΡΡ ΠΏΠΎΠΉΠ΄ΡΡ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡΠΌΠ°Π½ΠΎ
}
}
ΠΠ·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π° Π½ΠΎΠ΄Π΅
ΠΠ° Π½ΠΎΠ΄Π΅ server2.testdomain
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½ nginx, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ.
ΠΠ΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ:
- ΠΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ
nginx
. - ΠΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΠ»Π° ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°.
- ΠΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π±ΡΠ» Π·Π°ΠΏΡΡΠ΅Π½ ΡΠ΅ΡΠ²ΠΈΡ
nginx
. - Π ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ.
ΠΠΈΡΠ΅ΠΌ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ:
node 'server2.testdomain' { # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ Π½ΠΎΠ΄Π΅ server2.testdomain
package { 'nginx': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ nginx
ensure => installed, # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
}
# ΠΡΡΠΌΠ°Ρ ΡΡΡΠ΅Π»ΠΊΠ° (->) Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΡΡΡ Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
# ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΡΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅.
# Π’Π°ΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½Ρ.
-> file { '/etc/nginx': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» /etc/nginx
ensure => directory, # ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
source => 'puppet:///modules/example/nginx-conf', # Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ°ΡΡ Ρ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ
recurse => true, # ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ
purge => true, # Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ (ΡΠ΅, ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅Ρ Π² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ΅)
force => true, # ΡΠ΄Π°Π»ΡΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
}
# ΠΠΎΠ»Π½ΠΈΡΡΠ°Ρ ΡΡΡΠ΅Π»ΠΊΠ° (~>) Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΡΡΡ Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
# ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅.
# ΠΠΎΠ»Π½ΠΈΡΡΠ°Ρ ΡΡΡΠ΅Π»ΠΊΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΏΡΡΠΌΡΡ (->).
~> service { 'nginx': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡ nginx
ensure => running, # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½
enable => true, # Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ
}
# ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡΡΡ ΡΠΈΠΏΠ° service ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅,
# ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
}
Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ΅:
/etc/puppetlabs/code/environments/production/ # (ΡΡΠΎ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΠ°ΠΏΠΏΠ΅ΡΠ°, Π΄Π»Ρ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ /etc/puppet)
βββ manifests/
β βββ site.pp
βββ modules/
βββ example/
βββ files/
βββ nginx-conf/
βββ nginx.conf
βββ mime.types
βββ conf.d/
βββ some.conf
Π’ΠΈΠΏΡ ΡΠ΅ΡΡΡΡΠΎΠ²
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠΈΠΏΠΎΠ² ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ
file
Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ, ΡΠΈΠΌΠ»ΠΈΠ½ΠΊΠ°ΠΌΠΈ, ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ, ΠΏΡΠ°Π²Π°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° β ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
- path β ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π·Π°Π΄Π°Π½ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ)
- ensure β ΡΠΈΠΏ ΡΠ°ΠΉΠ»Π°:
absent
β ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»present
β Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΉΠ» Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ»Π° Π½Π΅Ρ β Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»)file
β ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»directory
β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡlink
β ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ
- content β ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° (ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ source ΠΈΠ»ΠΈ target)
- source β ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΏΡΡΡ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° (Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ content ΠΈΠ»ΠΈ target). ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½Π° ΠΊΠ°ΠΊ Π² Π²ΠΈΠ΄Π΅ URI ΡΠΎ ΡΡ
Π΅ΠΌΠΎΠΉ
puppet:
(ΡΠΎΠ³Π΄Π° Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΠ°ΠΉΠ»Ρ Ρ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ°), ΡΠ°ΠΊ ΠΈ ΡΠΎ ΡΡ Π΅ΠΌΠΎΠΉhttp:
(Π½Π°Π΄Π΅ΡΡΡ, ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅), ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎ ΡΡ Π΅ΠΌΠΎΠΉfile:
ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ Π±Π΅Π· ΡΡ Π΅ΠΌΡ (ΡΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΠ°ΠΉΠ» Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π€Π‘ Π½Π° Π½ΠΎΠ΄Π΅) - target β ΠΊΡΠ΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ (Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ content ΠΈΠ»ΠΈ source)
- owner β ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΡΠ°ΠΉΠ»
- group β Π³ΡΡΠΏΠΏΠ°, ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΡΠ°ΠΉΠ»
- mode β ΠΏΡΠ°Π²Π° Π½Π° ΡΠ°ΠΉΠ» (Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ)
- recurse β Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ
- purge β Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Puppet
- force β Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Puppet
package
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΈ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΡ. Π£ΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ β ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΠΊΠ΅Ρ, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ reinstall_on_refresh.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
- name β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° (Π΅ΡΠ»ΠΈ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ)
- provider β ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
- ensure β ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ°:
present
,installed
β ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π»ΡΠ±Π°Ρ Π²Π΅ΡΡΠΈΡlatest
β ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡabsent
β ΡΠ΄Π°Π»ΡΠ½ (apt-get remove
)purged
β ΡΠ΄Π°Π»ΡΠ½ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ (apt-get purge
)held
β Π²Π΅ΡΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Π° (apt-mark hold
)Π»ΡΠ±Π°Ρ Π΄ΡΡΠ³Π°Ρ ΡΡΡΠΎΠΊΠ°
β ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ
- reinstall_on_refresh β Π΅ΡΠ»ΠΈ
true
, ΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½. ΠΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ source-based Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ², Π³Π΄Π΅ ΠΏΠ΅ΡΠ΅ΡΠ±ΠΎΡΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡfalse
.
service
Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ. Π£ΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ β ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΡΠ²ΠΈΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° β ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
- name β ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ (Π΅ΡΠ»ΠΈ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ)
- ensure β ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ°:
running
β Π·Π°ΠΏΡΡΠ΅Π½stopped
β ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
- enable β ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ°:
true
β Π²ΠΊΠ»ΡΡΠ΅Π½ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ (systemctl enable
)mask
β Π·Π°ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½ (systemctl mask
)false
β Π²ΡΠΊΠ»ΡΡΠ΅Π½ Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ (systemctl disable
)
- restart β ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ°
- status β ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠ°ΡΡΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠ°
- hasrestart β ΡΠΊΠ°Π·Π°ΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΠΈ ΠΈΠ½ΠΈΡΡΠΊΡΠΈΠΏΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ. ΠΡΠ»ΠΈ
false
ΠΈ ΡΠΊΠ°Π·Π°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ restart β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠ»ΠΈfalse
ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ restart Π½Π΅ ΡΠΊΠ°Π·Π°Π½ β ΡΠ΅ΡΠ²ΠΈΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° (Π½ΠΎ Π² systemd ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°systemctl restart
). - hasstatus β ΡΠΊΠ°Π·Π°ΡΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π»ΠΈ ΠΈΠ½ΠΈΡΡΠΊΡΠΈΠΏΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ
status
. ΠΡΠ»ΠΈfalse
, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° status. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡtrue
.
exec
ΠΠ°ΠΏΡΡΠΊΠ°Π΅Ρ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ creates, onlyif, unless ΠΈΠ»ΠΈ refreshonly, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΠΎΠ³ΠΎΠ½Π΅ ΠΠ°ΠΏΠΏΠ΅ΡΠ°. Π£ΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ β Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° β ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
- command β ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ (Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ Π·Π°Π΄Π°Π½Π° Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ)
- path β ΠΏΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΊΠ°ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
- onlyif β Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°, ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°
- unless β Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°, ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°
- creates β Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠ°ΠΉΠ» Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°
- refreshonly β Π΅ΡΠ»ΠΈ
true
, ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎΡ exec ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² - cwd β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
- user β ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
- provider β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
- posix β ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ path
- shell β ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΡΠ΅Π»Π»Π΅
/bin/sh
, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ path, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³Π»ΠΎΠ±Π±ΠΈΠ½Π³, ΠΏΠ°ΠΉΠΏΡ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΡΠΈΡΠΈ ΡΠ΅Π»Π»Π°. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π²ΡΡΠΊΠΈΠ΅ ΡΠΏΠ΅ΡΡΠΈΠΌΠ²ΠΎΠ»Ρ (|
,;
,&&
,||
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅).
cron
Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΡΠΎΠ½Π΄ΠΆΠΎΠ±Π°ΠΌΠΈ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° β ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
- ensure β ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΡΠΎΠ½Π΄ΠΆΠΎΠ±Π°:
present
β ΡΠΎΠ·Π΄Π°ΡΡ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρabsent
β ΡΠ΄Π°Π»ΠΈΡΡ, Π΅ΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
- command β ΠΊΠ°ΠΊΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ
- environment β Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ΅ΡΠ΅Π·
=
) - user β ΠΎΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
- minute, hour, weekday, month, monthday β ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΊΡΠΎΠ½. ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΈΠ· ΡΡΠΈΡ
Π°ΡΡΡΠΈΠ±ΡΡΠΎΠ² Π½Π΅ ΡΠΊΠ°Π·Π°Π½, Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΡΠΎΠ½ΡΠ°Π±Π΅ Π±ΡΠ΄Π΅Ρ
*
.
Π Puppet 6.0 cron ΠΊΠ°ΠΊ Π±Ρ
ΠΡΠΎ ΡΠ΅ΡΡΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΌ
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΡΡΡΠΎΠ²
Π‘Π°ΠΌΠ°Ρ ΡΠ°ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ Π²ΡΡΡΠ΅ΡΠ°Π΅ΠΌΡΡ β Duplicate declaration. ΠΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π΄Π²Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΡΡΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ.
ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΡ ΡΠ°Π· Π½Π°ΠΏΠΈΡΡ: Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°Ρ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ΄Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ (title)!
ΠΠ½ΠΎΠ³Π΄Π° Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ, Π½ΠΎ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΌΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°ΠΌΠΈ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ name
, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ:
package { 'ruby-mysql':
ensure => installed,
name => 'mysql',
provider => 'gem',
}
package { 'python-mysql':
ensure => installed,
name => 'mysql',
provider => 'pip',
}
Π Π΄ΡΡΠ³ΠΈΡ
ΡΠΈΠΏΠ°Ρ
ΡΠ΅ΡΡΡΡΠΎΠ² Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠ΅ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ, β name
Ρ service, command
Ρ exec, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΠ΅ΡΠ°ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΅ΡΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ΅ΡΡΡΡΠ°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π΅Π³ΠΎ ΡΡΡΠ½ΠΎΡΡΠΈ.
ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ΅ΡΠ°ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΡΠ°ΡΠΊΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ:
- require β Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΡ ΠΊΠ°ΠΊΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π·Π°Π²ΠΈΡΠΈΡ Π΄Π°Π½Π½ΡΠΉ ΡΠ΅ΡΡΡΡ.
- before β Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°.
- subscribe β Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΎΡ ΠΊΠ°ΠΊΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΉ ΡΠ΅ΡΡΡΡ.
- notify β Π² ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°.
ΠΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠ°ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ΅ΡΡΡΡ, Π»ΠΈΠ±ΠΎ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠ»ΠΎΠΊ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ .
Π‘ΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ΅ΡΡΡΡΡ
Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠ΅ΡΡΡΡ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΎΠ½ΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Π‘ΡΡΠ»ΠΊΠ° Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΡΡΡΡ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Ρ ΡΡΡΠ»ΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ: ΡΠΈΠΏ ΡΠ΅ΡΡΡΡΠ° Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π±ΡΠΊΠ²Ρ (Π΅ΡΠ»ΠΈ Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΡΠΈΠΏΠ° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π΄Π²ΠΎΠΉΠ½ΡΠ΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ, ΡΠΎ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π±ΡΠΊΠ²Ρ ΠΏΠΈΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡΠΌΠΈ), Π΄Π°Π»ΡΡΠ΅ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° (ΡΠ΅Π³ΠΈΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ!). ΠΡΠΎΠ±Π΅Π»ΠΎΠ² Π±ΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ, ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΏΠΈΡΡΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠΈΠΏΠ°.
ΠΡΠΈΠΌΠ΅Ρ:
file { '/file1': ensure => present }
file { '/file2':
ensure => directory,
before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ°Π½Π΅Π΅, ΠΏΡΠΎΡΡΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½Ρ. ΠΡΡΠ°ΡΠΈ, Π±ΡΠ΄ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½Ρ ΠΏΡΠΈ ΠΏΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ β ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π½Π΅ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½Ρ. ΠΠ»Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°:
- ΠΡΠ»ΠΈ ΡΠ΅ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, ΠΎΠ½ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ. ΠΠ΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠΈΠΏΠ° ΡΠ΅ΡΡΡΡΠ° β exec Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, service ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΡΠ²ΠΈΡ, package ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΠΊΠ΅Ρ. ΠΡΠ»ΠΈ Π΄Π»Ρ ΡΠ΅ΡΡΡΡΠ° Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, ΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
- ΠΠ° ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΠ³ΠΎΠ½ ΠΠ°ΠΏΠΏΠ΅ΡΠ° ΡΠ΅ΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π°. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π° Π³ΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΠΊΠ»ΠΎΠ².
- ΠΡΠ»ΠΈ ΠΠ°ΠΏΠΏΠ΅Ρ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°, ΡΠΎ ΡΠ΅ΡΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° Π½Π΅Π³ΠΎ ΡΠ΅ΡΡΡΡΠ°ΠΌ.
- ΠΡΠ»ΠΈ ΡΠ΅ΡΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ, ΡΠΎ ΠΎΠ½ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° Π½Π΅Π³ΠΎ ΡΠ΅ΡΡΡΡΠ°ΠΌ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π΅ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΅ΡΠ»ΠΈ Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ΅ΡΡΡΡΠ° Π½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅, ΡΠΎ ΠΠ°ΠΏΠΏΠ΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΡΡΠ° Π½Π° Π½ΠΎΠ΄Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΡΠ΅ΡΡΡΡΠ° ΡΠΈΠΏΠ° file Π½Π΅ ΡΠΊΠ°Π·Π°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ owner
, ΡΠΎ ΠΠ°ΠΏΠΏΠ΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°.
ΠΠ½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΈ Π΄Π΅ΡΠ°ΠΉΠ½Π°ΠΌΠΈ
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π½Π°Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ΄, Π½Π° ΠΊΠΎΡΠΎΡΡΡ
Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π΅ΡΡΡ ΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡ β ΠΈΠ½Π°ΡΠ΅ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΎΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ Π²ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ node {}
. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΏΠ»ΠΎΡ
ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ°Π·ΡΠ°ΡΡΠ°Π΅ΡΡΡ, ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΌΠ΅ΡΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π»Π΅Π³ΠΊΠΎ ΠΎΡΠΈΠ±ΠΈΡΡΡΡ, Π½Ρ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏ DRY (donβt repeat yourself) Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π»ΠΈ.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡ.
ΠΠ»Π°ΡΡΡ
Π‘Π½Π°ΡΠ°Π»Π° ΠΊΠ»Π°ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ. Π‘Π°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΈΠΊΡΠ΄Π° Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ. ΠΠ»Π°ΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°Ρ :
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° 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,
) {
...
}
ΠΠ»Π°ΡΡΡ: include classname vs class{‘classname’:}
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠΌ ΡΠΈΠΏΠ° class. ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π»ΡΠ±ΡΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ ΡΠ΅ΡΡΡΡΠΎΠ², Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ΄Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄Π²Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»Π°ΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π½ΠΎΠ΄Ρ Π΄Π²Π° ΡΠ°Π·Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ class { 'classname':}
(Π±Π΅Π· ΡΠ°Π·Π½ΠΈΡΡ, Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΈΠ»ΠΈ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ), Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ°ΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° Π² ΡΡΠΈΠ»Π΅ ΡΠ΅ΡΡΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ ΠΆΠ΅ Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ΅ ΡΠ²Π½ΠΎ Π·Π°Π΄Π°ΡΡ Π²ΡΠ΅ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ include
, ΡΠΎ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°Π·. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ include
β ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π»ΠΈ ΠΊΠ»Π°ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³. ΠΡΠ»ΠΈ ΠΊΠ»Π°ΡΡΠ° Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Π½Π΅Ρ β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π΅Π³ΠΎ, Π° Π΅ΡΠ»ΠΈ ΡΠΆΠ΅ Π΅ΡΡΡ, ΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ. ΠΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ include
Π½Π΅Π»ΡΠ·Ρ Π·Π°Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° β Π²ΡΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½Ρ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ΅ Π΄Π°Π½Π½ΡΡ
β Hiera ΠΈΠ»ΠΈ ENC. Π Π½ΠΈΡ
ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ΅ΡΠ°ΠΉΠ½Ρ
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ Π±Π»ΠΎΠΊΠ΅, ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π° Π½ΠΎΠ΄Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π°. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΎΠ΄Π΅. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΈΠΏΠ΅ ΡΠ΅ΡΡΡΡΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ PHP, ΠΌΡ Π² ΠΠ²ΠΈΡΠΎ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
- Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ Ρ ΡΡΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ.
- Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
- Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ Π΄Π»Ρ php-fpm.
- Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ Π΄Π»Ρ php cli.
Π ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠ°ΠΊ $title
, ΠΊΡΠ΄Π° ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΡΠ΅ΡΡΡΡΠ° ΠΏΡΠΈ Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ, Π΄Π΅ΡΠ°ΠΉΠ½ ΡΠ½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Π£ΠΏΡΠΎΡΡΠ½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ Π΄Π»Ρ PHP:
define php74::module (
$php_module_name = $title,
$php_package_name = "php7.4-${title}",
$version = 'installed',
$priority = '20',
$data = "extension=${title}.son",
$php_module_path = '/etc/php/7.4/mods-available',
) {
package { $php_package_name:
ensure => $version,
install_options => ['-o', 'DPkg::NoTriggers=true'], # ΡΡΠΈΠ³Π³Π΅ΡΡ Π΄Π΅Π±ΠΈΠ°Π½ΠΎΠ²ΡΠΊΠΈΡ
php-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΠ°ΠΌΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ php-fpm - Π½Π°ΠΌ ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊΠ°ΠΌΠΈ, ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ ΠΌΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Puppet
}
-> file { "${php_module_path}/${php_module_name}.ini":
ensure => $ensure,
content => $data,
}
file { "/etc/php/7.4/cli/conf.d/${priority}-${php_module_name}.ini":
ensure => link,
target => "${php_module_path}/${php_module_name}.ini",
}
file { "/etc/php/7.4/fpm/conf.d/${priority}-${php_module_name}.ini":
ensure => link,
target => "${php_module_path}/${php_module_name}.ini",
}
}
node server3.testdomain {
php74::module { 'sqlite3': }
php74::module { 'amqp': php_package_name => 'php-amqp' }
php74::module { 'msgpack': priority => '10' }
}
Π Π΄Π΅ΡΠ°ΠΉΠ½Π΅ ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠΉΠΌΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Duplicate declaration. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π΅ΡΠ»ΠΈ Π² Π΄Π΅ΡΠ°ΠΉΠ½Π΅ Π΅ΡΡΡ ΡΠ΅ΡΡΡΡ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π½ΠΎΠ΄Π΅ Π΄Π²Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠ°ΠΉΠ½Π°.
ΠΠ°ΡΠΈΡΠΈΡΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ: Π²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ Π΄Π΅ΡΠ°ΠΉΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π·Π°Π²ΠΈΡΡΡΠ΅Π΅ ΠΎΡ $title
. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ β ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², Π² ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠ½Π΅ΡΡΠΈ ΠΎΠ±ΡΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π΄Π΅ΡΠ°ΠΉΠ½Π° ΡΠ΅ΡΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΈ ΠΈΠ½ΠΊΠ»ΡΠ΄ΠΈΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π² Π΄Π΅ΡΠ°ΠΉΠ½Π΅ β ΡΡΠ½ΠΊΡΠΈΡ include
ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½Π°.
ΠΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΡΡΠΎΠ², Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ defined
ΠΈ ensure_resources
, Π½ΠΎ ΠΏΡΠΎ ΡΡΠΎ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ΅ΡΠΈΠΈ.
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ Π΄Π΅ΡΠ°ΠΉΠ½ΠΎΠ²
ΠΠ»Π°ΡΡΡ ΠΈ Π΄Π΅ΡΠ°ΠΉΠ½Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ:
- Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π°;
- Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ΅ΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π°;
- ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π° ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅Ρ Π²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π°;
- ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π½Π° ΠΊΠ»Π°ΡΡ/Π΄Π΅ΡΠ°ΠΉΠ½ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π° Π²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π°.
Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ
if
Π’ΡΡ Π²ΡΡ ΠΏΡΠΎΡΡΠΎ:
if ΠΠ«Π ΠΠΠΠΠΠ1 {
...
} elsif ΠΠ«Π ΠΠΠΠΠΠ2 {
...
} else {
...
}
unless
unless β ΡΡΠΎ if Π½Π°ΠΎΠ±ΠΎΡΠΎΡ: Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½, Π΅ΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ.
unless ΠΠ«Π ΠΠΠΠΠΠ {
...
}
case
Π’ΡΡ ΡΠΎΠΆΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (ΡΡΡΠΎΠΊΠΈ, ΡΠΈΡΠ»Π° ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅), ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ .
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 ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΌΠΎΠ΄ΡΠ»Π΅
Π ΠΊΠΎΡΠ½Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Ρ Π³ΠΎΠ²ΠΎΡΡΡΠΈΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ:
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
.
Π¨Π°Π±Π»ΠΎΠ½Ρ
ΠΠ°Π²Π΅ΡΠ½ΡΠΊΠ° Π²Ρ ΠΈ ΡΠ°ΠΌΠΈ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ, Π½Π΅ Π±ΡΠ΄Ρ ΡΠ°ΡΠΏΠΈΡΡΠ²Π°ΡΡ Π·Π΄Π΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ. ΠΠΎ Π½Π° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡΡΠ°Π²Π»Ρ
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ template
, ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΡΡΡ ΠΊ ΡΠ°Π±Π»ΠΎΠ½Ρ. ΠΠ»Ρ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠΈΠΏΠ° file ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ 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 ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ³
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΡΠΎ Ρ ΡΠ°ΠΊΡΠ° Π΅ΡΡΡ ΠΈΠΌΡ (ΡΡΡΠΎΠΊΠ°) ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΠΏΡ: ΡΡΡΠΎΠΊΠΈ, ΠΌΠ°ΡΡΠΈΠ²Ρ, ΡΠ»ΠΎΠ²Π°ΡΠΈ). ΠΡΡΡ
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠ°ΠΏΠΏΠ΅Ρ-Π°Π³Π΅Π½Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Ρ ΠΏΠ°ΠΏΠΏΠ΅ΡΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Π½ΠΎΠ΄Ρ Π²ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΡΠ±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΠΊΡΠΎΠ², ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΠ°ΠΊΡΡ; ΡΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
Π€Π°ΠΊΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
Π’Π°ΠΊΠΈΠ΅ ΡΠ°ΠΊΡΡ ΠΊΠ»Π°Π΄ΡΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ facts.d
. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΠ°ΠΉΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌΠΈ. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π»ΠΈΠ±ΠΎ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ YAML, Π»ΠΈΠ±ΠΎ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ «ΠΊΠ»ΡΡ=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅».
ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π½Π° Π²ΡΠ΅ Π½ΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΊΠ°ΡΡΠ²Π°Π΅ΡΡΡ Π²Π°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΡΡΠΎΠΌΡ Π² ΡΠΊΡΠΈΠΏΡΠ΅ ΠΎΠ·Π°Π±ΠΎΡΡΡΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΅ΡΡΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΊΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΠ°ΠΉΠ»Ρ.
#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'
Π€Π°ΠΊΡΡ Π½Π° Ruby
Π’Π°ΠΊΠΈΠ΅ ΡΠ°ΠΊΡΡ ΠΊΠ»Π°Π΄ΡΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ 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
).
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
ΠΡΠΎΠΌΠ΅ ΡΠ°ΠΊΡΠΎΠ², Π΅ΡΡΡ Π΅ΡΡ
- trusted facts β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π±Π΅ΡΡΡΡΡ ΠΈΠ· ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π°Π³Π΅Π½Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ Π²Π·ΡΡΡ ΠΈ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Β«Π΄ΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅Β»): Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°, ΠΈΠΌΡ Ρ ΠΎΡΡΠ° ΠΈ Π΄ΠΎΠΌΠ΅Π½Π°, ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°.
- server facts βΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ΅ β Π²Π΅ΡΡΠΈΡ, ΠΈΠΌΡ, IP-Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅.
- agent facts β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ puppet-agent’ΠΎΠΌ, Π° Π½Π΅ facter’ΠΎΠΌ β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ°, Π²Π΅ΡΡΠΈΡ Π°Π³Π΅Π½ΡΠ°, Π²Π΅ΡΡΠΈΡ ΠΏΠ°ΠΏΠΏΠ΅ΡΠ°.
- master variables β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠ°ΠΏΠΏΠ΅ΡΠΌΠ°ΡΡΠ΅ΡΠ° (sic!). Π’Π°ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ Π² server facts, ΠΏΠ»ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
- compiler variables β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ: ΠΈΠΌΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ Π²Π°ΡΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 1: ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈ Π΄Π΅Π±Π°ΠΆΠΈΡΡ?
Π ΡΡΠ°ΡΡΠ΅ Π±ΡΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² puppet-ΠΊΠΎΠ΄Π°, Π½ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ Π±ΡΠ»ΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΆΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ. Π§ΡΠΎ ΠΆ, ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΡ.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Puppet Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π°Π³Π΅Π½ΡΠ°, Π½ΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠ»ΡΡΠ°Π΅Π² Π½ΡΠΆΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠ³Π΅Π½Ρ
ΠΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Ρ ΠΏΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ puppet-agent ΠΈΠ·
Π ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ puppet-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π°Π³Π΅Π½Ρ Π² Π±Π΅cΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅: ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΡΠΎ puppet-ΠΊΠΎΠ΄ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ Π½Π° Π½ΠΎΠ΄Ρ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ 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
.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΉ Π»ΠΎΠ³ ΡΠ°Π±ΠΎΡΡ β Π² Π½ΡΠΌ puppet ΠΏΠΈΡΠ΅Ρ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ
Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ: ΠΎ ΡΠ΅ΡΡΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ, ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ
ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°, ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ --debug
.
Π‘Π΅ΡΠ²Π΅Ρ
ΠΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΠΏΠ°ΠΏΠΏΠ΅ΡΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Π½Π΅ Π±ΡΠ΄Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ, ΡΠΊΠ°ΠΆΡ Π»ΠΈΡΡ, ΡΡΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΡΡΠ°Π²ΠΈΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠ°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π½ΠΎΠ΄ (ΡΠΊΠ°ΠΆΠ΅ΠΌ, Π΄ΠΎ ΡΡΠ°). ΠΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½ΠΎΠ΄ ΡΠΆΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ½ΠΈΠ½Π³Π° β ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ puppetserver Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΡΡΡΡΡ Π²ΠΎΡΠΊΠ΅ΡΠΎΠ², Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΈΡ ΡΠΈΡΠ»ΠΎ ΠΈ Π½Π΅ Π·Π°Π±ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ Π»ΠΈΠΌΠΈΡΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈΠ½Π°ΡΠ΅ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ garbage collect’ΠΈΡΡ.
ΠΠ΅ΠΏΠ»ΠΎΠΉ ΠΊΠΎΠ΄Π° β Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ, ΡΠΎ ΡΠΌΠΎΡΡΠΈΡΠ΅ (Π½Π° r10k)[
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 2: ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π°
- ΠΡΠ½ΠΎΡΠΈΡΠ΅ Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΠΊΠ»Π°ΡΡΡ ΠΈ Π΄Π΅ΡΠ°ΠΉΠ½Ρ.
- ΠΠ΅ΡΠΆΠΈΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈ Π΄Π΅ΡΠ°ΠΉΠ½Ρ Π² ΠΌΠΎΠ΄ΡΠ»ΡΡ , Π° Π½Π΅ Π² ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°Ρ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ΄.
- ΠΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΠ°ΠΊΡΠ°ΠΌΠΈ.
- ΠΠ΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ if’ΠΎΠ² ΠΏΠΎ Ρ ΠΎΡΡΠ½Π΅ΠΉΠΌΠ°ΠΌ.
- ΠΠ΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ Π΄Π΅ΡΠ°ΠΉΠ½ΠΎΠ² β ΡΡΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π½Π΅ΡΠ²Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°, ΡΠΏΡΡΡΠ°Π½Π½Π°Ρ Π² ΡΠ΅Π»Π΅ ΠΊΠ»Π°ΡΡΠ°/Π΄Π΅ΡΠ°ΠΉΠ½Π°.
Π ΠΏΠΎΡΠ΅ΠΌΡ Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ β ΠΎΠ±ΡΡΡΠ½Ρ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ° ΡΡΠΎΠΌ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ ΡΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΏΡΠΎ Hiera, ENC ΠΈ PuppetDB.
Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠΎΡΠ΅.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ β Ρ ΠΌΠΎΠ³Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ°ΡΡΠΈ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠ³ΠΎΠ»ΠΎΡΡΠΉΡΠ΅, ΠΎ ΡΡΠΌ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΡΠΈΡΠ°ΡΡ:
- 59,1%Advanced puppet constructs β some next-level shit: ΡΠΈΠΊΠ»Ρ, ΠΌΡΠΏΠΏΠΈΠ½Π³ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΎΡΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΠ΅ΡΡΡΡΡ ΠΈ ΠΌΠ΅ΠΆΡ ΠΎΡΡΠΎΠ²ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· Puppet, ΡΠ΅Π³ΠΈ, ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ, Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ .13
- 31,8%Β«Π― Ρ ΠΌΠ°ΠΌΠΊΠΈ Π°Π΄ΠΌΠΈΠ½Β» ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΌΡ Π² ΠΠ²ΠΈΡΠΎ ΠΏΠΎΠ΄ΡΡΠΆΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ, Π½Ρ ΠΈ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΡΠ°ΡΡΡ ΠΏΡΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ°.7
- 81,8%ΠΠ°ΠΊ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΠΊΠΎΠ΄: ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΎΠ±Π²ΡΠ·ΠΊΠ°, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, CI/CD.18
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 22 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΠΈΡΡ 9 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com