Puppet Π΅ ΡΠΈΡΡΠ΅ΠΌ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. Π‘Π΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π΄ΠΎΠ²Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΈΡΠ΅ Π²ΠΎ ΠΏΠΎΡΠ°ΠΊΡΠ²Π°Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° ΠΈ ΠΎΠ΄ΡΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΎΠ²Π°Π° ΡΠΎΡΡΠΎΡΠ±Π°.
Π Π°Π±ΠΎΡΠ°ΠΌ ΡΠΎ Puppet ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ ΠΏΠ΅Ρ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. ΠΠ²ΠΎΡ ΡΠ΅ΠΊΡΡ Π²ΠΎ ΡΡΡΡΠΈΠ½Π° Π΅ ΠΏΡΠ΅Π²Π΅Π΄Π΅Π½Π° ΠΈ ΠΏΡΠ΅ΡΡΠ΅Π΄Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ° Π½Π° ΠΊΠ»ΡΡΠ½ΠΈ ΡΠΎΡΠΊΠΈ ΠΎΠ΄ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°, ΡΡΠΎ ΡΠ΅ ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° ΠΏΠΎΡΠ΅ΡΠ½ΠΈΡΠΈΡΠ΅ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ° ΡΠ°Π·Π±Π΅ΡΠ°Ρ ΡΡΡΡΠΈΠ½Π°ΡΠ° Π½Π° ΠΡΠΊΠ»Π°ΡΠ°.
ΠΡΠ½ΠΎΠ²Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
ΠΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π° Puppet Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ, ΠΈΠ°ΠΊΠΎ ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΠΈ ΡΠ°Π±ΠΎΡΠ° Π±Π΅Π· ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ.
Π‘Π΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠΎΠ΄Π΅Π» Π½Π° Π²Π»Π΅ΡΠ΅ΡΠ΅: ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, Π΅Π΄Π½Π°Ρ Π½Π° ΡΠ΅ΠΊΠΎΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠ°Ρ, ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΠ°Π°Ρ ΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΈ Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π°Π°Ρ. ΠΠΊΠΎ ΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ΅Π»Π΅ ΡΠΎ Ansible, ΡΠΎΠ³Π°Ρ ΡΠΈΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° push: Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΡ Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΡΠ° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, ΡΠ°ΠΌΠΈΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ Π½Π΅ΠΌΠ° Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½Π°Ρ Π½ΠΈΡΡΠΎ.
ΠΠ° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠ½Π°ΡΠ° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ°, ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π΄Π²ΠΎΠ½Π°ΡΠΎΡΠ½ΠΎ TLS ΡΠΈΡΡΠΈΡΠ°ΡΠ΅: ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ ΠΈΠΌΠ°Π°Ρ ΡΠ²ΠΎΠΈ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΈ ΠΈ ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ. ΠΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈΠ·Π΄Π°Π²Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ, Π½ΠΎ Π²ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ CA.
ΠΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ
ΠΠΎ ΠΊΡΠΊΠ»Π΅Π½Π° ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° Π½Π° ΠΊΡΠΊΠ»Π΅Π½ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ²ΡΠ·Π΅ΡΠ΅ ΡΠ°Π·Π»ΠΈ (ΡΠ°Π·Π»ΠΈ). ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° ΡΠ°Π·Π»ΠΈΡΠ΅ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π΅Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ - Puppet DSL.
Puppet DSL Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π΅Π½ ΡΠ°Π·ΠΈΠΊ. ΠΠ° ΠΎΠΏΠΈΡΡΠ²Π° ΠΏΠΎΡΠ°ΠΊΡΠ²Π°Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ Π½Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΠ°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΏΠΎΡΡΠΎΠΈ ΠΈ ΠΈΠΌΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°.
- ΠΠ°ΠΊΠ΅ΡΠΎΡ Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½.
- Π£ΡΠ»ΡΠ³Π°ΡΠ° Π·Π°ΠΏΠΎΡΠ½Π°.
Π Π΅ΡΡΡΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΌΠ΅ΡΡΡΠ΅Π±Π½ΠΎ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ:
- ΠΠΎΡΡΠΎΡΠ°Ρ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ, ΡΠΈΠ΅ Π²Π»ΠΈΡΠ°Π°Ρ Π½Π° ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ΠΎΡ ΠΏΠΎ ΠΊΠΎΡ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ΅ΡΡΡΡΠΈΡΠ΅.
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, βΠΏΡΠ²ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ, ΠΏΠΎΡΠΎΠ° ΡΡΠ΅Π΄Π΅ΡΠ΅ ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, Π° ΠΏΠΎΡΠΎΠ° ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅ ΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ°β. - ΠΠΌΠ° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° - Π°ΠΊΠΎ Π½Π΅ΠΊΠΎΡ ΡΠ΅ΡΡΡΡ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Ρ, ΡΠΎΡ ΠΈΡΠΏΡΠ°ΡΠ° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° Π΄ΠΎ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎ.
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π΄Π° ΡΠ° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, Puppet DSL ΠΈΠΌΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π²ΠΈ ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ. ΠΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ ΡΠ΅ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ - EPP ΠΈ ERB.
ΠΡΠΊΠ»Π°ΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π²ΠΎ Π ΡΠ±ΠΈ, ΠΏΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΎΠ΄ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ΅ ΡΠ΅ Π·Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ΄ ΡΠ°ΠΌΡ. Π ΡΠ±ΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠΈΡΠ΅ Puppet - Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°, Π½ΠΎΠ²ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΠ΄Π΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠΈ Puppet, ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ΅ΠΊΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΡΠ°Π·ΠΎΠ» Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ°Π°Ρ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ. ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π΅ Π»ΠΈΡΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ ΠΎΠ΄Π½ΠΎΡΠΈ ΠΏΠΎ ΠΏΡΠ΅ΡΠΌΠ΅ΡΡΠ²Π°ΡΠ΅ Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΈ ΠΏΡΠΎΡΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΡΠ»ΠΎΠ²Π½ΠΈΡΠ΅ ΠΈΡΠΊΠ°Π·ΠΈ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠ° ΠΈ ΡΡΠΈΠ» Π½Π° ΠΊΠΎΠ΄
ΠΠ²Π΅ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΡΠΎ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π΄Π° ΡΠ° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠ°ΡΠ° Π°ΠΊΠΎ Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π½Π΅ ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ:
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°Π·ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠ° Π·Π° ΠΎΠΏΠΈΡΡΠ²Π°ΡΠ΅ ΡΠ°Π·Π»ΠΈ.
ΠΠ²Π΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡ:
# ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΈΡΡΡΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³Π΄Π΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΡΠΊΠΈ.
#
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½ΠΎΠ΄Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° node,
# Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π½ΠΎΠ΄Ρ β Ρ
ΠΎΡΡΠ½Π΅ΠΉΠΌ (Ρ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π·)
# ΠΈΠ»ΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Ρ
ΠΎΡΡΠ½Π΅ΠΉΠΌΠΎΠ², ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ default.
#
# ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² ΡΠΈΠ³ΡΡΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½ΠΎΠ΄Ρ.
#
# ΠΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ Π½ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΠ°ΡΡΡ ΠΏΠΎΠ΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠ². ΠΡΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ
# ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½ΠΎΠ΄.
node 'hostname', 'f.q.d.n', /regexp/ {
# ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
#
# Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° Π΅ΡΡΡ ΡΠΈΠΏ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
#
# ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π²ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ!
#
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π΅Π³ΠΎ ΡΠΈΠΏΠ°. Π’ΠΈΠΏ ΠΏΠΈΡΠ΅ΡΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅.
# ΠΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½ΠΈΠΆΠ΅.
#
# ΠΠΎΡΠ»Π΅ ΡΠΈΠΏΠ° Π² ΡΠΈΠ³ΡΡΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
ΠΏΠΈΡΠ΅ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°, ΠΏΠΎΡΠΎΠΌ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅,
# Π΄Π°Π»ΡΡΠ΅ ΠΈΠ΄ΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΡΡΡΠ° ΠΈ ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
# ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· Ρ.Π½. hash rocket (=>).
resource { 'title':
param1 => value1,
param2 => value2,
param3 => value3,
}
}
ΠΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ΅ΡΠΎ ΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½ΠΈΡΠ΅ Π½Π° Π»ΠΈΠ½ΠΈΠΈΡΠ΅ Π½Π΅ ΡΠ΅ Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½ Π΄Π΅Π» ΠΎΠ΄ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡ, Π½ΠΎ ΠΏΠΎΡΡΠΎΠΈ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΠ°Π½
- ΠΠΎΠ²Π»Π΅ΠΊΡΠ²Π°ΡΠ° ΡΠΎ Π΄Π²Π΅ ΠΏΡΠ°Π·Π½ΠΈ ΠΌΠ΅ΡΡΠ°, ΡΠ°Π·ΠΈΡΠΈΡΠ° Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ.
- ΠΠ°Π΄ΡΠ°Π²ΠΈΡΠ΅ Π·Π°Π³ΡΠ°Π΄ΠΈ ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΎ ΠΏΡΠ°Π·Π½ΠΎ ΠΌΠ΅ΡΡΠΎ.
- ΠΠ°ΠΏΠΈΡΠΊΠΈ ΠΏΠΎ ΡΠ΅ΠΊΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ, Π²ΠΊΠ»ΡΡΡΠ²Π°ΡΡΠΈ Π³ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ. Π‘Π΅ΠΊΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π΅ Π½Π° ΠΏΠΎΡΠ΅Π±Π½Π° Π»ΠΈΠ½ΠΈΡΠ°. ΠΡΠΊΠ»ΡΡΠΎΠΊ Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ Π·Π° ΡΠ»ΡΡΠ°ΡΠΎΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΈ Π΅Π΄Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ Π½Π° Π΅Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ° ΠΈ Π±Π΅Π· Π·Π°ΠΏΠΈΡΠΊΠ° (Ρ.Π΅.
resource { 'title': }
ΠΈresource { 'title': param => value }
). - Π‘ΡΡΠ΅Π»ΠΊΠΈΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π°Ρ Π½Π° ΠΈΡΡΠΎ Π½ΠΈΠ²ΠΎ.
- ΠΡΠ΅Π΄ Π½ΠΈΠ² ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ ΡΡΡΠ΅Π»ΠΊΠΈΡΠ΅ Π·Π° ΠΎΠ΄Π½ΠΎΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅.
ΠΠΎΠΊΠ°ΡΠΈΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π½Π° pappetserver
ΠΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π°ΡΠ΅, ΡΠ΅ Π³ΠΎ Π²ΠΎΠ²Π΅Π΄Π°ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΎΡ Π½Π° βroot Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌβ. ΠΠΎΡΠ΅Π½ΡΠΊΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ ΡΡΠΎ ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Puppet Π·Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΡΠ°Π·ΠΎΠ».
ΠΠΎΡΠ΅Π½ΡΠΊΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π²Π°ΡΠΈΡΠ° Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π½Π° Puppet ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈΠ½ΠΈ. ΠΠΊΠΎΠ»ΠΈΠ½ΠΈΡΠ΅ ΡΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΈ Π³ΡΡΠΏΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ. ΠΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° ΡΠΎ git, Π²ΠΎ ΡΠΎΡ ΡΠ»ΡΡΠ°Ρ ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈΡΠ΅ ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Π°Ρ ΠΎΠ΄ git Π³ΡΠ°Π½ΠΊΠΈ. Π‘ΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ Π½Π° ΡΠΎΠ°, ΡΠ΅ΠΊΠΎΡ ΡΠ°Π·ΠΎΠ» ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄ΡΡΠ³Π° ΡΡΠ΅Π΄ΠΈΠ½Π°. ΠΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° Π½Π° ΡΠ°ΠΌΠΈΠΎΡ ΡΠ°Π·ΠΎΠ» ΠΈΠ»ΠΈ Π²ΠΎ ENC, Π·Π° ΡΡΠΎ ΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°ΠΌ Π²ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ°.
- ΠΠΎ ΡΡΠ΅ΡΠ°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° (βΡΡΠ°ΡΠ°ΡΠ° ΠΊΡΠΊΠ»Π°β) ΠΎΡΠ½ΠΎΠ²Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π±Π΅ΡΠ΅
/etc/puppet
. Π£ΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ Π΅ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½Π° - Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠ΅ ΡΠΎ ΡΡΠ°ΡΠ°ΡΠ° ΠΡΠΊΠ»Π°. ΠΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ, ΡΠΈΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π°Ρ Π²ΠΎ/etc/puppet/environments
, root Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ Π½Π° ΠΆΠΈΠ²ΠΎΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄ΠΈΠ½Π°. ΠΠΊΠΎ ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈΡΠ΅ Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ, root Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ. - ΠΠΎΡΠ½ΡΠ²Π°ΡΡΠΈ ΠΎΠ΄ ΡΠ΅ΡΠ²ΡΡΠ°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° (βΠ½ΠΎΠ²Π° ΠΊΡΠΊΠ»Π°β), ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈ ΡΡΠ°Π½Π° Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π½Π°, Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅Π½ Π²ΠΎ
/etc/puppetlabs/code
. Π‘ΠΏΠΎΡΠ΅Π΄ ΡΠΎΠ°, ΠΎΠΊΠΎΠ»ΠΈΠ½ΠΈΡΠ΅ ΡΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΠ°Π°Ρ Π²ΠΎ/etc/puppetlabs/code/environments
, root Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ Π½Π° ΠΆΠΈΠ²ΠΎΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄ΠΈΠ½Π°.
ΠΠΎΡΠ° Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ Π²ΠΎ root Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ manifests
, ΠΊΠΎΡ ΡΠΎΠ΄ΡΠΆΠΈ Π΅Π΄Π΅Π½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ Π³ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ΅. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ modules
, ΠΊΠΎΡ Π³ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅. ΠΠΎΠΈ ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ΄ΠΎΡΠ½Π°. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΡΡΠ°ΡΠ°ΡΠ° ΠΡΠΊΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΈ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ files
, ΠΊΠΎΡ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΡΠΎ Π³ΠΈ ΠΊΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ΅. ΠΠΎ Π½ΠΎΠ²ΠΈΠΎΡ Puppet, ΡΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠΌΠ΅ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΠ°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π½Π° ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ ΠΈΠΌΠ°Π°Ρ Π½Π°ΡΡΠ°Π²ΠΊΠ° .pp
.
ΠΠ΅ΠΊΠΎΠ»ΠΊΡ Π±ΠΎΡΠ±Π΅Π½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ
ΠΠΏΠΈΡ Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ ΠΈ ΡΠ΅ΡΡΡΡΠΎΡ Π½Π° Π½Π΅Π³ΠΎ
ΠΠ° ΡΠ°Π·ΠΎΠ»ΠΎΡ server1.testdomain
ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° /etc/issue
ΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° Debian GNU/Linux n l
. ΠΠ°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ Π²ΠΎ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΎΡΡ Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ ΠΈ Π³ΡΡΠΏΠ° root
, ΠΏΡΠ°Π²Π°ΡΠ° Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ 644
.
ΠΠΈΠ΅ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ:
node 'server1.testdomain' { # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ Π½ΠΎΠ΄Π΅ server1.testdomain
file { '/etc/issue': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» /etc/issue
ensure => present, # ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ
content => 'Debian GNU/Linux n l', # Ρ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅
owner => root, # ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ
group => root, # Π³ΡΡΠΏΠΏΠ°-Π²Π»Π°Π΄Π΅Π»Π΅Ρ
mode => '0644', # ΠΏΡΠ°Π²Π° Π½Π° ΡΠ°ΠΉΠ». ΠΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ (Π² ΠΊΠ°Π²ΡΡΠΊΠ°Ρ
), ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½Π°ΡΠ΅ ΡΠΈΡΠ»ΠΎ Ρ 0 Π² Π½Π°ΡΠ°Π»Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΠΏΡΠΈΠ½ΡΡΠΎ ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΈ Π²ΡΡ ΠΏΠΎΠΉΠ΄ΡΡ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡΠΌΠ°Π½ΠΎ
}
}
ΠΡΡΠΊΠΈ ΠΏΠΎΠΌΠ΅ΡΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΎΠ»
ΠΠ° ΡΠ°Π·ΠΎΠ»ΠΎΡ server2.testdomain
nginx ΠΌΠΎΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ, Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠΎ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°.
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΎ ΡΠ°Π·Π»ΠΎΠΆΠΈΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΡ:
- ΠΠ°ΠΊΠ΅ΡΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°
nginx
. - ΠΠΎΡΡΠ΅Π±Π½ΠΎ Π΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ°Π°Ρ ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ.
- Π£ΡΠ»ΡΠ³Π°ΡΠ° ΡΡΠ΅Π±Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ
nginx
. - ΠΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ Π°ΠΆΡΡΠΈΡΠ°Π½Π°, ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°.
ΠΠΈΠ΅ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ:
node 'server2.testdomain' { # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ Π½ΠΎΠ΄Π΅ server2.testdomain
package { 'nginx': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠ°ΠΊΠ΅Ρ nginx
ensure => installed, # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½
}
# ΠΡΡΠΌΠ°Ρ ΡΡΡΠ΅Π»ΠΊΠ° (->) Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΡΡΡ Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
# ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΡΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅.
# Π’Π°ΠΊΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½Ρ.
-> file { '/etc/nginx': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠ» /etc/nginx
ensure => directory, # ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
source => 'puppet:///modules/example/nginx-conf', # Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ°ΡΡ Ρ ΠΏΠ°ΠΏΠΏΠ΅Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ
recurse => true, # ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ
purge => true, # Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΡΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ (ΡΠ΅, ΠΊΠΎΡΠΎΡΡΡ
Π½Π΅Ρ Π² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ΅)
force => true, # ΡΠ΄Π°Π»ΡΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
}
# ΠΠΎΠ»Π½ΠΈΡΡΠ°Ρ ΡΡΡΠ΅Π»ΠΊΠ° (~>) Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΡΡΡ Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
# ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅.
# ΠΠΎΠ»Π½ΠΈΡΡΠ°Ρ ΡΡΡΠ΅Π»ΠΊΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΏΡΡΠΌΡΡ (->).
~> service { 'nginx': # ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠ²ΠΈΡ nginx
ensure => running, # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½
enable => true, # Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ
}
# ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡΡΡ ΡΠΈΠΏΠ° service ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅,
# ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
}
ΠΠ° Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°, ΠΏΠΎΡΡΠ΅Π±Π½Π° Π²ΠΈ Π΅ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π»ΠΎΠΊΠ°ΡΠΈΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π½Π° ΠΊΡΠΊΠ»Π΅Π½ ΡΠ΅ΡΠ²Π΅Ρ:
/etc/puppetlabs/code/environments/production/ # (ΡΡΠΎ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΠ°ΠΏΠΏΠ΅ΡΠ°, Π΄Π»Ρ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ /etc/puppet)
βββ manifests/
β βββ site.pp
βββ modules/
βββ example/
βββ files/
βββ nginx-conf/
βββ nginx.conf
βββ mime.types
βββ conf.d/
βββ some.conf
ΠΠΈΠ΄ΠΎΠ²ΠΈ ΡΠ΅ΡΡΡΡΠΈ
ΠΠΎΠΌΠΏΠ»Π΅ΡΠ½Π° Π»ΠΈΡΡΠ° Π½Π° ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ ΠΎΠ²Π΄Π΅
Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°
Π£ΠΏΡΠ°Π²ΡΠ²Π° ΡΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ, ΡΠΈΠΌΠ²ΠΎΠ»ΡΠΊΠΈ Π²ΡΡΠΊΠΈ, Π½ΠΈΠ²Π½Π°ΡΠ° ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° ΠΈ ΠΏΡΠ°Π²Π°ΡΠ° Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
- ΠΈΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΡΡ β ΠΏΠ°ΡΠ΅ΠΊΠ° Π΄ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΎ)
- ΠΏΠ°Ρ β ΠΏΠ°ΡΠ΅ΠΊΠ° Π΄ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° (Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ)
- ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ - ΡΠΈΠΏ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°:
absent
- ΠΈΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°present
β ΠΌΠΎΡΠ° Π΄Π° ΠΈΠΌΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΎΠ΄ ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΡΠΈΠΏ (Π°ΠΊΠΎ Π½Π΅ΠΌΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΡΠ΅ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° ΠΎΠ±ΠΈΡΠ½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°)file
- ΡΠ΅Π΄ΠΎΠ²Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°directory
- Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌlink
- ΡΠΈΠΌΠ±ΠΎΠ»ΠΈΡΠ½Π° Π²ΡΡΠΊΠ°
- ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° β ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° (ΠΏΠΎΠ³ΠΎΠ΄Π½Π° ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠ±ΠΈΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΠΈΠ·Π²ΠΎΡ ΠΈΠ»ΠΈ ΡΠ΅Π»Π½ΠΈ)
- ΠΈΠ·Π²ΠΎΡ β Π²ΡΡΠΊΠ° Π΄ΠΎ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° ΠΎΠ΄ ΠΊΠΎΡΠ° ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΡΠΎΠ΄ΡΠΆΠΈΠ½Π°ΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° (Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° ΠΈΠ»ΠΈ ΡΠ΅Π»Π½ΠΈ). ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π²Π΅Π΄Π΅ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎ URI ΡΠΎ ΡΠ΅ΠΌΠ°
puppet:
(ΡΠΎΠ³Π°Ρ ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΎΠ΄ ΠΊΡΠΊΠ»Π΅Π½ ΡΠ΅ΡΠ²Π΅Ρ), ΠΈ ΡΠΎ ΡΠ΅ΠΌΠ°ΡΠ°http:
(Π‘Π΅ Π½Π°Π΄Π΅Π²Π°ΠΌ Π΄Π΅ΠΊΠ° Π΅ ΡΠ°ΡΠ½ΠΎ ΡΡΠΎ ΡΠ΅ ΡΠ΅ ΡΠ»ΡΡΠΈ Π²ΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ), ΠΏΠ° Π΄ΡΡΠΈ ΠΈ ΡΠΎ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌΠΎΡfile:
ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎ Π°ΠΏΡΠΎΠ»ΡΡΠ½Π° ΠΏΠ°ΡΠ΅ΠΊΠ° Π±Π΅Π· ΡΠ΅ΠΌΠ° (ΡΠΎΠ³Π°Ρ ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° ΠΎΠ΄ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ FS Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ) - ΡΠ΅Π»Π½ΠΈ β ΠΊΠ°Π΄Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΡΠΈΠΌΠ²ΠΎΠ»Π½Π°ΡΠ° Π²ΡΡΠΊΠ° (Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΡΠΎΠ΄ΡΠΆΠΈΠ½Π° ΠΈΠ»ΠΈ ΠΈΠ·Π²ΠΎΡ)
- ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΠΊΠΎΡ β ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΠΊΠΎΡ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ° ΠΏΠΎΡΠ΅Π΄ΡΠ²Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°
- Π³ΡΡΠΏΠ° β Π³ΡΡΠΏΠ°ΡΠ° Π½Π° ΠΊΠΎΡΠ° ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΈΠΏΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°
- Π½Π° Π²Π»Π°Π΄Π°ΡΠ° β Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ Π·Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ (ΠΊΠ°ΠΊΠΎ Π½ΠΈΠ·Π°)
- ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°ΡΠ΅ - ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° ΡΠ΅ΠΊΡΡΠ·ΠΈΠ²Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ
- ΡΠΈΡΡΠΊΠ° - ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π±ΡΠΈΡΠ΅ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΡΠΎ Π½Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π²ΠΎ Puppet
- ΡΠΈΠ»Π° - ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π±ΡΠΈΡΠ΅ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ ΠΊΠΎΠΈ Π½Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π²ΠΎ Puppet
ΠΏΠ°ΠΊΠ΅Ρ
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ°ΠΊΡΠ²Π° ΡΠΎ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° - ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π°ΠΊΠΎ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ reinstall_on_refresh.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
- ΠΈΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΡΡ β ΠΈΠΌΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ (ΠΈΠ·Π±ΠΎΡΠ½ΠΎ)
- ΠΈΠΌΠ΅ΡΠΎ β ΠΈΠΌΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ (Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ)
- ΡΡΠ»ΡΠ³ΠΈ β ΠΌΠ΅Π½Π°ΡΠ΅Ρ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅
- ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ - ΡΠ°ΠΊΠ°Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΠΏΠ°ΠΊΡΠ²Π°ΡΠ΅ΡΠΎ:
present
,installed
- ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ°latest
- ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° Π΅ Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ°absent
- ΠΈΠ·Π±ΡΠΈΡΠ°Π½ΠΎ (apt-get remove
)purged
β ΠΈΠ·Π±ΡΠΈΡΠ°Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠΈΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ (apt-get purge
)held
- Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ Π΅ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π° (apt-mark hold
)Π»ΡΠ±Π°Ρ Π΄ΡΡΠ³Π°Ρ ΡΡΡΠΎΠΊΠ°
β Π½Π°Π²Π΅Π΄Π΅Π½Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π°
- reinstall_on_refresh - Π°ΠΊΠΎ
true
, ΠΏΠΎΡΠΎΠ° ΠΏΠΎ ΠΏΡΠΈΠ΅ΠΌΠΎΡ Π½Π° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°. ΠΠΎΡΠΈΡΠ½ΠΎ Π·Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΠΈΠ·Π²ΠΎΡ, ΠΊΠ°Π΄Π΅ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎfalse
.
Π‘Π΅ΡΠ²ΠΈΡ
Π£ΠΏΡΠ°Π²ΡΠ²Π° ΡΠΎ ΡΡΠ»ΡΠ³ΠΈ. ΠΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° - ΡΠ° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
- ΠΈΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΡΡ β ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΡΠ²Π° (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΎ)
- ΠΈΠΌΠ΅ΡΠΎ β ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΡΠ²Π° (Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ)
- ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ β ΠΏΠΎΡΠ°ΠΊΡΠ²Π°Π½Π°ΡΠ° ΡΠΎΡΡΠΎΡΠ±Π° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°:
running
- Π»Π°Π½ΡΠΈΡΠ°Π½stopped
- Π·Π°ΡΡΠ°Π½Π°
- ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ β ΡΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° ΠΌΠΎΠΆΠ½ΠΎΡΡΠ° Π·Π° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°:
true
β ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ (systemctl enable
)mask
- ΠΌΠ°ΡΠΊΠΈΡΠ°Π½ (systemctl mask
)false
β Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎΡΠΎ ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π΅ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ (systemctl disable
)
- ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΡΠ΅ - ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°
- ΡΡΠ°ΡΡΡ β ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΠ°ΡΡΡΠΎΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°
- hasrestart β ΠΎΠ·Π½Π°ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ° initscript ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅. ΠΠΊΠΎ
false
Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΡΠ΅ β ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ. ΠΠΊΠΎfalse
ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΡΠ΅ Π½Π΅ Π΅ ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΎ - ΡΡΠ»ΡΠ³Π°ΡΠ° Π΅ Π·Π°ΠΏΡΠ΅Π½Π° ΠΈ ΠΏΠΎΡΠ½Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° (Π½ΠΎ systemd ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°systemctl restart
). - ΠΈΠΌΠ° ΡΡΠ°ΡΡΡ β ΠΎΠ·Π½Π°ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ° initscript ΡΠ° ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
status
. ΠΠΊΠΎfalse
, ΡΠΎΠ³Π°Ρ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ ΡΡΠ°ΡΡΡ. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎtrue
.
exec
ΠΠ·Π²ΡΡΡΠ²Π° Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. ΠΠΊΠΎ Π½Π΅ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠΎΠ·Π΄Π°Π²Π°, ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ, ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ ΠΈΠ»ΠΈ ΠΎΡΠ²Π΅ΠΆΡΠ²Π°ΡΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ Puppet. ΠΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° - ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
- ΠΈΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΡΡ β ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΎ)
- ΠΊΠΎΠΌΠ°Π½Π΄Π° β ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ (Π°ΠΊΠΎ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ)
- ΠΏΠ°Ρ β ΠΏΠ°ΡΠ΅ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠΈ ΡΠ΅ Π±Π°ΡΠ° ΠΈΠ·Π²ΡΡΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°
- ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ β Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π΅ Π·Π°Π²ΡΡΠ΅Π½Π° ΡΠΎ Π½ΡΠ»Π° ΠΏΠΎΠ²ΡΠ°ΡΠ΅Π½ ΠΊΠΎΠ΄, Π³Π»Π°Π²Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ
- ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ β Π°ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π΅ Π·Π°Π²ΡΡΠ΅Π½Π° ΡΠΎ ΠΏΠΎΠ²ΡΠ°ΡΠ΅Π½ ΠΊΠΎΠ΄ ΠΊΠΎΡ Π½Π΅ Π΅ Π½ΡΠ»Π°, Π³Π»Π°Π²Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ
- ΡΠΎΠ·Π΄Π°Π²Π° β Π°ΠΊΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π΅ ΠΏΠΎΡΡΠΎΠΈ, Π³Π»Π°Π²Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ
- ΠΎΡΠ²Π΅ΠΆΡΠ²Π°ΡΠ΅ - Π°ΠΊΠΎ
true
, ΡΠΎΠ³Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π° ΠΎΠ²Π°Π° exec ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ΅ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈ ΡΠ΅ΡΡΡΡΠΈ - cwd β Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ ΠΎΠ΄ ΠΊΠΎΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
- ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ β ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ ΠΎΠ΄ ΠΊΠΎΠ³ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
- ΡΡΠ»ΡΠ³ΠΈ - ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°:
- ΠΏΠΎΠΊΡΠΈΠΊ β Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° Π΄Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅Ρ, Π·Π°Π΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΏΠ°Ρ
- ΡΠΊΠΎΠ»ΠΊΠ° - ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π΅ Π»Π°Π½ΡΠΈΡΠ°Π½Π° Π²ΠΎ ΡΠΊΠΎΠ»ΠΊΠ°
/bin/sh
, ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΠ°Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π³Π»ΠΎΠ±ΠΈΡΠ°ΡΠ΅, ΡΠ΅Π²ΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΡΠΊΠΎΠ»ΠΊΠ°. ΠΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ ΠΎΡΠΊΡΠΈΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π°ΠΊΠΎ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½ΠΈ Π·Π½Π°ΡΠΈ (|
,;
,&&
,||
ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΠΌΡ).
cron
ΠΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° cronjobs.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ:
- ΠΈΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΡΡ - ΡΠ°ΠΌΠΎ Π½Π΅ΠΊΠ°ΠΊΠΎΠ² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
- ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ - ΠΊΡΡΠ½ΡΠΊΠ° Π΄ΡΠΆΠ°Π²Π°:
present
- ΠΊΡΠ΅ΠΈΡΠ°Ρ Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΡΡΠΎΠΈabsent
- ΠΈΠ·Π±ΡΠΈΡΠ΅ΡΠ΅ Π°ΠΊΠΎ ΠΏΠΎΡΡΠΎΠΈ
- ΠΊΠΎΠΌΠ°Π½Π΄Π° - ΠΊΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅
- ΠΆΠΈΠ²ΠΎΡΠ½Π°ΡΠ° ΡΡΠ΅Π΄ΠΈΠ½Π° β Π²ΠΎ ΠΊΠΎΡΠ° ΡΡΠ΅Π΄ΠΈΠ½Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° (ΡΠΏΠΈΡΠΎΠΊ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°ΡΠ° ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΡΠ΅ΠΊΡ
=
) - ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠΎΡ β ΠΎΠ΄ ΠΊΠΎΡ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°
- ΠΌΠΈΠ½ΡΡΠ°, ΡΠ°Ρ, Π΄Π΅Π»Π½ΠΈΡΠ΅Π½ Π΄Π΅Π½, ΠΌΠ΅ΡΠ΅Ρ, ΠΌΠ΅ΡΠ΅ΡΠ΅Π½ Π΄Π΅Π½ β ΠΊΠΎΠ³Π° Π΄Π° ΡΠ΅ ΠΊΠ°Π½Π΄ΠΈΠ΄ΠΈΡΠ° cron. ΠΠΊΠΎ Π½Π΅ΠΊΠΎΡ ΠΎΠ΄ ΠΎΠ²ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΈ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½, Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ Π²ΠΎ ΠΊΡΠΎΠ½ΡΠ°Π±ΠΎΡ ΡΠ΅ Π±ΠΈΠ΄Π΅
*
.
ΠΠΎ ΠΊΡΠΊΠ»Π° 6.0 cron ΠΊΠ°ΠΊΠΎ Π΄Π°
ΠΠ° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π²ΠΎΠΎΠΏΡΡΠΎ
ΠΠ°ΡΠ°ΡΠ° Π·Π° ΡΠ½ΠΈΠΊΠ°ΡΠ½ΠΎΡΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅
ΠΠ°ΡΡΠ΅ΡΡΠ° Π³ΡΠ΅ΡΠΊΠ° ΡΠΎ ΠΊΠΎΡΠ° ΡΠ΅ ΡΡΠ΅ΡΠ°Π²Π°ΠΌΠ΅ Π΅ ΠΡΠΏΠ»ΠΈΠΊΠ°Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠ°. ΠΠ²Π°Π° Π³ΡΠ΅ΡΠΊΠ° ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π° ΠΊΠΎΠ³Π° Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΠΎΠ΄ ΠΈΡΡ ΡΠΈΠΏ ΡΠΎ ΠΈΡΡΠΎ ΠΈΠΌΠ΅ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π°Π°Ρ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ.
ΠΠ°ΡΠΎΠ° ΠΏΠ°ΠΊ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΠΌ: ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΠΈΡΡΠΈΠΎΡ ΡΠ°Π·ΠΎΠ» Π½Π΅ ΡΡΠ΅Π±Π° Π΄Π° ΡΠΎΠ΄ΡΠΆΠ°Ρ ΡΠ΅ΡΡΡΡΠΈ ΠΎΠ΄ ΠΈΡΡ ΡΠΈΠΏ ΡΠΎ ΠΈΡΡ Π½Π°ΡΠ»ΠΎΠ²!
ΠΠΎΠ½Π΅ΠΊΠΎΠ³Π°Ρ ΠΈΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠΎ ΠΈΡΡΠΎ ΠΈΠΌΠ΅, Π½ΠΎ ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅Π½Π°ΡΠ΅ΡΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ name
Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ Π³ΡΠ΅ΡΠΊΠ°ΡΠ°:
package { 'ruby-mysql':
ensure => installed,
name => 'mysql',
provider => 'gem',
}
package { 'python-mysql':
ensure => installed,
name => 'mysql',
provider => 'pip',
}
ΠΡΡΠ³ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈΠΌΠ°Π°Ρ ΡΠ»ΠΈΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ Π΄ΡΠΏΠ»ΠΈΡΠ°ΡΠ΅ - name
Ρ Π‘Π΅ΡΠ²ΠΈΡ, command
Ρ exec, ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΠΌΡ.
ΠΠ΅ΡΠ°ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ
Π‘Π΅ΠΊΠΎΡ ΡΠΈΠΏ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠΈ ΠΏΠΎΡΠ΅Π±Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, Π±Π΅Π· ΠΎΠ³Π»Π΅Π΄ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΏΡΠΈΡΠΎΠ΄Π°.
Π¦Π΅Π»ΠΎΡΠ½Π° Π»ΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ
ΠΡΠ°ΡΠΊΠ° Π»ΠΈΡΡΠ°:
- Π±Π°ΡΠ°Π°Ρ β ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ²ΠΎΡ ΡΠ΅ΡΡΡΡ.
- ΠΏΡΠ΅Π΄ - ΠΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° ΠΊΠΎΠΈ ΡΠ΅ΡΡΡΡΠΈ Π·Π°Π²ΠΈΡΠ°Ρ ΠΎΠ΄ ΠΎΠ²ΠΎΡ ΡΠ΅ΡΡΡΡ.
- ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠΈΡΠ΅ β ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° ΠΎΠ΄ ΠΊΠΎΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΎΠ²ΠΎΡ ΡΠ΅ΡΡΡΡ Π΄ΠΎΠ±ΠΈΠ²Π° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ°.
- ΠΈΠ·Π²Π΅ΡΡΠΈ β ΠΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π° ΠΊΠΎΠΈ ΡΠ΅ΡΡΡΡΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° ΠΎΠ΄ ΠΎΠ²ΠΎΡ ΡΠ΅ΡΡΡΡ.
Π‘ΠΈΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΌΠ΅ΡΠ°ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΏΡΠΈΡΠ°ΡΠ°Π°Ρ ΠΈΠ»ΠΈ Π΅Π΄Π½Π° Π²ΡΡΠΊΠ° ΡΠΎ ΡΠ΅ΡΡΡΡΠΈ ΠΈΠ»ΠΈ Π½ΠΈΠ·Π° Π²ΡΡΠΊΠΈ Π²ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΈ Π·Π°Π³ΡΠ°Π΄ΠΈ.
ΠΡΡΠΊΠΈ Π΄ΠΎ ΡΠ΅ΡΡΡΡΠΈ
ΠΡΡΠΊΠ°ΡΠ° ΡΠΎ ΡΠ΅ΡΡΡΡΠΈ Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΡΠΏΠΎΠΌΠ½ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΎΡ. Π’ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π·Π° ΡΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π½Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ. Π Π΅ΡΠ΅ΡΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° Π½Π΅ΠΏΠΎΡΡΠΎΠ΅ΡΠΊΠΈ ΡΠ΅ΡΡΡΡ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°ΡΠ°.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠ°ΡΠ° Π½Π° Π²ΡΡΠΊΠ°ΡΠ° Π΅ ΡΠ»Π΅Π΄Π½Π°: ΡΠΈΠΏ Π½Π° ΡΠ΅ΡΡΡΡ ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° Π±ΡΠΊΠ²Π° (Π°ΠΊΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠΈΠΏΠΎΡ ΡΠΎΠ΄ΡΠΆΠΈ Π΄Π²ΠΎΡΠ½ΠΈ Π·Π°ΠΏΠΈΡΠΊΠΈ, ΡΠΎΠ³Π°Ρ ΡΠ΅ΠΊΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΈΠΌΠ΅ΡΠΎ ΠΏΠΎΠΌΠ΅ΡΡ Π·Π°ΠΏΠΈΡΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΠΈΡΡΠ²Π° ΡΠΎ Π³ΠΎΠ»Π΅ΠΌΠ° Π±ΡΠΊΠ²Π°), ΠΏΠΎΡΠΎΠ° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΎΡ Π²ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΈ Π·Π°Π³ΡΠ°Π΄ΠΈ (ΡΠ»ΡΡΠ°ΡΠΎΡ Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π΅ ΡΠ΅ ΠΌΠ΅Π½ΡΠ²Π°!). ΠΠ΅ ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠΌΠ° ΠΏΡΠ°Π·Π½ΠΈ ΠΌΠ΅ΡΡΠ° Π²Π΅Π΄Π½Π°Ρ ΠΏΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠΈΠΏΠΎΡ.
ΠΡΠΈΠΌΠ΅Ρ:
file { '/file1': ensure => present }
file { '/file2':
ensure => directory,
before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']
ΠΠ°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ°
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ ΠΊΠ°ΠΆΠ°Π½ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ, Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΌΠ΅ΡΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΡΠ΅ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΠΈ. ΠΠ°ΡΠ΅ΠΌ, Π±ΠΈΠ΄Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΈ ΠΊΠΎΠ³Π° Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ - ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°ΡΠ°.
ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΡΠ΅, ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ°ΡΠ° Π½Π΅ ΡΠ΅ ΠΏΡΠ΅ΠΎΠ΄Π½ΠΈ. Π‘Π»Π΅Π΄Π½ΠΈΠ²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²Π°ΠΆΠ°Ρ Π·Π° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ°:
- ΠΠΊΠΎ ΡΠ΅ΡΡΡΡΠΎΡ Π΄ΠΎΠ±ΠΈΠ΅ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ΅, ΡΠΎΡ ΡΠ΅ Π°ΠΆΡΡΠΈΡΠ°. ΠΠ΅ΡΡΡΠ²Π°ΡΠ° Π·Π° Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ Π·Π°Π²ΠΈΡΠ°Ρ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ Π½Π° ΡΠ΅ΡΡΡΡΠΎΡ β exec ΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ°, Π‘Π΅ΡΠ²ΠΈΡ ΡΠ° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΏΠ°ΠΊΠ΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ. ΠΠΊΠΎ ΡΠ΅ΡΡΡΡΠΎΡ Π½Π΅ΠΌΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ Π΄Π΅ΡΡΡΠ²ΠΎ Π·Π° Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅, ΡΠΎΠ³Π°Ρ Π½ΠΈΡΡΠΎ Π½Π΅ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π°.
- ΠΠ° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΅Π΄Π½Π° ΡΠ΅ΡΠΈΡΠ° Π½Π° Puppet, ΡΠ΅ΡΡΡΡΠΎΡ ΡΠ΅ Π°ΠΆΡΡΠΈΡΠ° Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ Π΅Π΄Π½Π°Ρ. ΠΠ²Π° Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ°ΡΠ° Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΎΡ Π½Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ Π½Π΅ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠΈΠΊΠ»ΡΡΠΈ.
- ΠΠΊΠΎ Puppet ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠΎΡΡΠΎΡΠ±Π°ΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΎΡ, ΡΠ΅ΡΡΡΡΠΎΡ ΠΈΡΠΏΡΠ°ΡΠ° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° Π΄ΠΎ ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎ.
- ΠΠΊΠΎ Π½Π΅ΠΊΠΎΡ ΡΠ΅ΡΡΡΡ Π΅ Π°ΠΆΡΡΠΈΡΠ°Π½, ΡΠΎΡ ΠΈΡΠΏΡΠ°ΡΠ° ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° Π΄ΠΎ ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ΅Π½ΠΈ Π½Π° Π½Π΅Π³ΠΎ.
Π Π°ΠΊΡΠ²Π°ΡΠ΅ ΡΠΎ Π½Π΅ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ
ΠΠ°ΠΊΠΎ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π°ΠΊΠΎ Π½Π΅ΠΊΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π° ΡΠ΅ΡΡΡΡΠΎΡ Π½Π΅ΠΌΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΈ ΠΎΠ²ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡ, ΡΠΎΠ³Π°Ρ Puppet Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΠ²Π° ΡΠ²ΠΎΡΡΡΠ²ΠΎ Π·Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΠΎΡ ΡΠ΅ΡΡΡΡ Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΡΠ΅ΡΡΡΡ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ Π½Π΅ Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ owner
, ΡΠΎΠ³Π°Ρ Puppet Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠΎΠΏΡΡΠ²Π΅Π½ΠΈΠΊΠΎΡ Π½Π° ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½Π°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°.
ΠΠΎΠ²Π΅Π΄ Π²ΠΎ ΠΊΠ»Π°ΡΠΈ, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ
ΠΠ° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ°Π·Π»ΠΈ ΠΊΠΎΠΈ ΠΈΠΌΠ°Π°Ρ ΠΈΡΡ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, Π½ΠΎ ΠΈΠΌΠ° ΠΈ ΡΠ°Π·Π»ΠΈΠΊΠΈ - ΠΈΠ½Π°ΠΊΡ Π±ΠΈ ΠΌΠΎΠΆΠ΅Π»Π΅ ΡΠ΅ΡΠΎ ΡΠΎΠ° Π΄Π° Π³ΠΎ ΠΎΠΏΠΈΡΠ΅ΠΌΠ΅ Π²ΠΎ Π΅Π΄Π΅Π½ Π±Π»ΠΎΠΊ node {}
. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π΄Π° ΠΊΠΎΠΏΠΈΡΠ°ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ Π΄Π΅Π»ΠΎΠ²ΠΈ ΠΎΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, Π½ΠΎ Π³Π΅Π½Π΅ΡΠ°Π»Π½ΠΎ ΠΎΠ²Π° Π΅ Π»ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ - ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΡΠ°ΡΡΠ΅, ΠΈ Π°ΠΊΠΎ Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΎΠΏΡΡΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, ΡΠ΅ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ ΡΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ ΠΈΡΡΠΎΡΠΎ Π½Π° ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ΅ΡΡΠ°. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π³ΡΠ΅ΡΠΊΠ°, ΠΈ Π²ΠΎΠΎΠΏΡΡΠΎ, ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΡ Π‘Π£ΠΠ (Π½Π΅ ΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ²Π°Ρ) Π΅ ΠΈΠ·ΠΌΠΈΡΠ»Π΅Π½ ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π°.
ΠΠ° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΡΡΠΎΠΈ ΡΠ°ΠΊΠΎΠ² Π΄ΠΈΠ·Π°ΡΠ½ ΠΊΠ°ΠΊΠΎ ΠΊΠ»Π°ΡΠ°.
ΠΠ»Π°ΡΠΈ
ΠΡΠ²ΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ ΠΊΠ»Π°ΡΠ°ΡΠ°. Π‘Π°ΠΌΠΈΠΎΡ ΠΎΠΏΠΈΡ Π½ΠΈΠΊΠ°Π΄Π΅ Π½Π΅ Π΄ΠΎΠ΄Π°Π²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΠ΅ΡΡΡΡΠΈ. ΠΠ»Π°ΡΠ°ΡΠ° Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ:
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° class ΠΈ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ.
# ΠΠ°Π»ΡΡΠ΅ ΠΈΠ΄ΡΡ ΡΠ΅Π»ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΡΠΈΠ³ΡΡΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
.
class example_class {
...
}
ΠΠΎΡΠ»Π΅ ΠΎΠ²Π°, ΠΊΠ»Π°ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ:
# ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β Π² ΡΡΠΈΠ»Π΅ ΡΠ΅ΡΡΡΡΠ° Ρ ΡΠΈΠΏΠΎΠΌ class
class { 'example_class': }
# Π²ΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ include
include example_class
# ΠΏΡΠΎ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΡΠΈΡ
Π΄Π²ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»ΡΡΠ΅
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠ΄ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° - Π΄Π° ΡΠ° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌΠ΅ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°ΡΠ° ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° nginx Π²ΠΎ ΠΊΠ»Π°ΡΠ°:
class nginx_example {
package { 'nginx':
ensure => installed,
}
-> file { '/etc/nginx':
ensure => directory,
source => 'puppet:///modules/example/nginx-conf',
recure => true,
purge => true,
force => true,
}
~> service { 'nginx':
ensure => running,
enable => true,
}
}
node 'server2.testdomain' {
include nginx_example
}
ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
ΠΠ»Π°ΡΠ°ΡΠ° ΠΎΠ΄ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΎΠΎΠΏΡΡΠΎ Π½Π΅ Π΅ ΡΠ»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½Π° Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΡΠ° Π½ΠΎΡΠΈ ΠΈΡΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π½Π° nginx. ΠΡΠ΄Π΅ Π΄Π° ΡΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°, ΡΠΎΠ³Π°Ρ ΠΎΠ²Π°Π° ΠΊΠ»Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ nginx ΡΠΎ ΠΊΠΎΡΠ° Π±ΠΈΠ»ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°.
ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π²ΠΎ Puppet ΡΠ΅ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ!
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, Π΄ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ ΡΠ°ΠΌΠΎ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ Π±ΠΈΠ΄Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π°, ΠΈΠ½Π°ΠΊΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΡΠ΅ Π±ΠΈΠ΄Π΅ undef
.
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ:
# ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$var5 = $var6
file { '/tmp/text': content => $variable }
# ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
β ΡΠ°ΡΠΊΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΡΡΡΠΎΠΊΠ°Ρ
. Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² Π΄Π²ΠΎΠΉΠ½ΡΡ
ΠΊΠ°Π²ΡΡΠΊΠ°Ρ
!
$var6 = "Variable with name variable has value ${variable}"
ΠΡΠΊΠ»Π° ΠΈΠΌΠ° ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡΠΈ, ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅, ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΎ, ΠΈΠΌΠ°Π°Ρ ΠΎΠ±Π»Π°ΡΡ Π½Π° Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡ: ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΡΠΎ ΠΈΡΡΠΎ ΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡΠΈ. ΠΡΠΈ ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΡΠ΅ ΠΏΡΠ΅Π±Π°ΡΡΠ²Π° Π²ΠΎ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ, ΠΏΠΎΡΠΎΠ° Π²ΠΎ ΠΎΠ³ΡΠ°Π΄Π΅Π½ΠΈΠΎΡ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ ΠΈ ΡΠ°ΠΊΠ° Π½Π°ΡΠ°ΠΌΡ.
ΠΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ:
- Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ - ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΎΠΏΠΈΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ° ΠΈΠ»ΠΈ ΡΠ°Π·ΠΎΠ»ΠΎΡ ΠΎΠ΄Π°Ρ ΡΠ°ΠΌΡ;
- ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ Π²ΠΎ ΠΎΠΏΠΈΡΠΎΡ Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ;
- ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ° Π²ΠΎ ΠΎΠΏΠΈΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ°.
ΠΠ° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π΄Π²ΠΎΡΠΌΠΈΡΠ»Π΅Π½ΠΎΡΡ ΠΊΠΎΠ³Π° ΠΏΡΠΈΡΡΠ°ΠΏΡΠ²Π°ΡΠ΅ Π΄ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π²ΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°:
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±Π΅Π· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
$var
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½
$::var
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ ΠΊΠ»Π°ΡΡΠ°
$classname::var
$::classname::var
ΠΡΠ΄Π΅ Π΄Π° ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠ°ΡΠΎΡ Π΄ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° nginx Π»Π΅ΠΆΠΈ Π²ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° $nginx_conf_source
. Π’ΠΎΠ³Π°Ρ ΠΊΠ»Π°ΡΠ°ΡΠ° ΡΠ΅ ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
class nginx_example {
package { 'nginx':
ensure => installed,
}
-> file { '/etc/nginx':
ensure => directory,
source => $nginx_conf_source, # Π·Π΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
recure => true,
purge => true,
force => true,
}
~> service { 'nginx':
ensure => running,
enable => true,
}
}
node 'server2.testdomain' {
$nginx_conf_source = 'puppet:///modules/example/nginx-conf'
include nginx_example
}
ΠΠ΅ΡΡΡΠΎΠ°, Π΄Π°Π΄Π΅Π½ΠΈΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ Π»ΠΎΡ Π·Π°ΡΠΎΠ° ΡΡΠΎ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ΅ βΡΠ°ΡΠ½ΠΎ Π·Π½Π°Π΅ΡΠ΅β Π΄Π΅ΠΊΠ° Π½Π΅ΠΊΠ°Π΄Π΅ Π²ΠΎ ΠΊΠ»Π°ΡΠ°ΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΡΠΎ ΡΠ°ΠΊΠ²ΠΎ ΠΈ ΡΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ΅. ΠΠ½ΠΎΠ³Ρ Π΅ ΠΏΠΎΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΠ²Π° Π·Π½Π°Π΅ΡΠ΅ ΠΎΠΏΡΡΠΎ - ΠΊΠ»Π°ΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΠΈΠΌΠ°Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ°, ΡΠΈΠ΅ ΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ Π²ΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΊΠ°ΠΊΠΎ ΠΎΠ±ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΠΎ ΡΠ΅Π»ΠΎΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ°. ΠΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈ ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠ»Π°ΡΠ°ΡΠ° Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ. ΠΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ΠΌΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π΅ Π΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½Π° ΠΊΠΎΠ³Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ, ΡΠΎΠ° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°ΡΠ°.
ΠΡΠ΄Π΅ Π΄Π° ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΊΠ»Π°ΡΠ°ΡΠ° ΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ ΠΏΠΎΠ³ΠΎΡΠ΅ ΠΈ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΠΌΠ΅ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ: ΠΏΡΠ²ΠΈΠΎΡ, ΠΏΠΎΡΡΠ΅Π±Π΅Π½, Π΅ ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ°, Π° Π²ΡΠΎΡΠΈΠΎΡ, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π΅Π½, Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΡΠΎ nginx (Π²ΠΎ Debian, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ° ΠΏΠ°ΠΊΠ΅ΡΠΈ nginx
, nginx-light
, nginx-full
).
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° Π² ΠΊΡΡΠ³Π»ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
class nginx_example (
$conf_source,
$package_name = 'nginx-light', # ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
) {
package { $package_name:
ensure => installed,
}
-> file { '/etc/nginx':
ensure => directory,
source => $conf_source,
recurse => true,
purge => true,
force => true,
}
~> service { 'nginx':
ensure => running,
enable => true,
}
}
node 'server2.testdomain' {
# Π΅ΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ°, ΡΡΠ½ΠΊΡΠΈΡ include Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ* β Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ resource-style declaration
# *Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ, Π½ΠΎ ΠΏΡΠΎ ΡΡΠΎ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ΅ΡΠΈΠΈ. ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ "Hiera".
class { 'nginx_example':
conf_source => 'puppet:///modules/example/nginx-conf', # Π·Π°Π΄Π°ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ° ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠ΅ΡΡΡΡΠΎΠ²
}
}
ΠΠΎ Puppet, ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΡΠ΅ ΠΏΠΈΡΡΠ²Π°Π°Ρ. ΠΠ°Π΄Π΅ΡΠ΅
Π’ΠΈΠΏΠΎΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π²Π΅Π΄Π½Π°Ρ ΠΏΡΠ΅Π΄ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ:
class example (
String $param1,
Integer $param2,
Array $param3,
Hash $param4,
Hash[String, String] $param5,
) {
...
}
ΠΠ»Π°ΡΠΈ: Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ classname vs class{'classname':}
Π‘Π΅ΠΊΠΎΡΠ° ΠΊΠ»Π°ΡΠ° Π΅ ΡΠ΅ΡΡΡΡ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ ΠΊΠ»Π°ΡΠ°. ΠΠ°ΠΊΠΎ ΠΈ ΡΠΎ ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³ ΡΠΈΠΏ Π½Π° ΡΠ΅ΡΡΡΡ, Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π΄Π²Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΎΠ΄ ΠΈΡΡΠ° ΠΊΠ»Π°ΡΠ° Π½Π° ΠΈΡΡΠΈΠΎΡ ΡΠ°Π·ΠΎΠ».
ΠΠΊΠΎ ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ ΠΊΠ»Π°ΡΠ° Π½Π° ΠΈΡΡΠΈΠΎΡ ΡΠ°Π·ΠΎΠ» Π΄Π²Π°ΠΏΠ°ΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ class { 'classname':}
(Π±Π΅Π· ΡΠ°Π·Π»ΠΈΠΊΠ°, ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ), ΡΠ΅ ΠΈΠΌΠ° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°ΡΠ°. ΠΠΎ, Π°ΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠ»Π°ΡΠ° Π²ΠΎ ΡΡΠΈΠ»ΠΎΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅Π΄Π½Π°Ρ Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠΈΡΠ΅ Π½Π΅ΡΠ·ΠΈΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡ.
ΠΠ΅ΡΡΡΠΎΠ°, Π΄ΠΎΠΊΠΎΠ»ΠΊΡ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ include
, ΡΠΎΠ³Π°Ρ ΠΊΠ»Π°ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΎΠ½ΠΎΠ»ΠΊΡ ΠΏΠ°ΡΠΈ ΠΊΠΎΠ»ΠΊΡ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅. Π€Π°ΠΊΡ Π΅ Π΄Π΅ΠΊΠ° include
Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π΄Π°Π»ΠΈ Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° ΠΊΠ»Π°ΡΠ° Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ. ΠΠΊΠΎ ΠΊΠ»Π°ΡΠ°ΡΠ° Π½Π΅ Π΅ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ, ΡΠ° Π΄ΠΎΠ΄Π°Π²Π°, Π° Π°ΠΊΠΎ Π²Π΅ΡΠ΅ ΠΏΠΎΡΡΠΎΠΈ, Π½Π΅ ΠΏΡΠ°Π²ΠΈ Π½ΠΈΡΡΠΎ. ΠΠΎ, Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° include
ΠΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ° Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ° - ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π²ΠΎ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΠΈΠ·Π²ΠΎΡ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ - Hiera ΠΈΠ»ΠΈ ENC. ΠΠ° Π½ΠΈΠ² ΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π²ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ°.
ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°
ΠΠ°ΠΊΠΎ ΡΡΠΎ Π±Π΅ΡΠ΅ ΠΊΠ°ΠΆΠ°Π½ΠΎ Π²ΠΎ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΈΠΎΡ Π±Π»ΠΎΠΊ, ΠΈΡΡΠ°ΡΠ° ΠΊΠ»Π°ΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΠΏΡΠΈΡΡΡΠ½Π° Π½Π° ΡΠ°Π·ΠΎΠ» ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ Π΅Π΄Π½Π°Ρ. ΠΠ΅ΡΡΡΠΎΠ°, Π²ΠΎ Π½Π΅ΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΈΡΡ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄ ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΈΡΡΠΈΠΎΡ ΡΠ°Π·ΠΎΠ». Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, ΠΏΠΎΡΡΠΎΠΈ ΠΏΠΎΡΡΠ΅Π±Π° ΠΎΠ΄ ΡΠΎΠΏΡΡΠ²Π΅Π½ ΡΠΈΠΏ Π½Π° ΡΠ΅ΡΡΡΡΠΈ.
ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ PHP, Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ Π²ΠΎ Avito:
- ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΡ ΡΠΎ ΠΎΠ²ΠΎΡ ΠΌΠΎΠ΄ΡΠ».
- ΠΡΠ΄Π΅ Π΄Π° ΡΠΎΠ·Π΄Π°Π΄Π΅ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΊΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π·Π° ΠΎΠ²ΠΎΡ ΠΌΠΎΠ΄ΡΠ».
- ΠΡΠ΅ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΠΊ Π΄ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π·Π° 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' }
}
ΠΠ°ΡΠ»Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΡΠ°ΡΠΈ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π·Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡΠ° Π½Π° Π΄ΡΠΏΠ»ΠΈΠΊΠ°Ρ Π΅ Π²ΠΎ ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅. ΠΠ²Π° ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π°ΠΊΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° ΡΠ΅ΡΡΡΡ ΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎ ΠΈΠΌΠ΅ ΠΈ ΠΈΠΌΠ° Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΠΎΠ²Π°Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ° Π½Π° Π½Π΅ΠΊΠΎΡ ΡΠ°Π·ΠΎΠ».
ΠΠ΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π·Π°ΡΡΠΈΡΠΈΡΠ΅ ΠΎΠ΄ ΠΎΠ²Π°: ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π²ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠ° ΠΌΠΎΡΠ° Π΄Π° ΠΈΠΌΠ°Π°Ρ ΠΈΠΌΠ΅ Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ $title
. ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° Π΅ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π²ΠΎ Π½Π°ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π΅Π½ ΡΠ»ΡΡΠ°Ρ, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ°Ρ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π·Π°Π΅Π΄Π½ΠΈΡΠΊΠΈ Π·Π° ΡΠΈΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈ Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠ° Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π½Π° ΠΊΠ»Π°ΡΠ° ΠΈ Π΄Π° ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈ ΠΎΠ²Π°Π° ΠΊΠ»Π°ΡΠ° Π²ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠ° - ΡΡΠ½ΠΊΡΠΈΡΠ°; include
ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ΅Π½.
ΠΠΎΡΡΠΎΡΠ°Ρ ΠΈ Π΄ΡΡΠ³ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π΅ ΠΈΠ΄Π΅ΠΌΠΎΡΠ΅Π½ΡΠΈΡΠ° ΠΏΡΠΈ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ, ΠΈΠΌΠ΅Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ defined
ΠΈ ensure_resources
, Π½ΠΎ ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ Π·Π° ΡΠΎΠ° Π²ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π΅ΠΏΠΈΠ·ΠΎΠ΄Π°.
ΠΠ°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° Π·Π° ΠΊΠ»Π°ΡΠΈ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ
ΠΠ»Π°ΡΠΈΡΠ΅ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈΡΠ΅ Π³ΠΈ Π΄ΠΎΠ΄Π°Π²Π°Π°Ρ ΡΠ»Π΅Π΄Π½ΠΈΠ²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ°:
- Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠ° ΠΎΠ΄ ΠΊΠ»Π°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π΄ΠΎΠ΄Π°Π²Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°;
- ΠΊΠ»Π°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Ρ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ Π΄ΠΎΠ΄Π°Π²Π° Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ Π½Π° ΡΠΈΡΠ΅ ΠΊΠ»Π°ΡΠΈ/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ;
- ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ Π·Π° ΠΊΠ»Π°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° Π³ΠΈ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π° ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°;
- ΠΊΠ»Π°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠ° ΡΠ΅ ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠΈ Π½Π° ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°.
Π£ΡΠ»ΠΎΠ²Π½ΠΈ ΠΈΠ·ΡΠ°Π²ΠΈ ΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΈ
if
ΠΠ²Π΄Π΅ Π΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ:
if ΠΠ«Π ΠΠΠΠΠΠ1 {
...
} elsif ΠΠ«Π ΠΠΠΠΠΠ2 {
...
} else {
...
}
ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ
ΠΎΡΠ²Π΅Π½ Π°ΠΊΠΎ Π΅ Π°ΠΊΠΎ Π΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ: Π±Π»ΠΎΠΊΠΎΡ ΠΊΠΎΠ΄ ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ Π°ΠΊΠΎ ΠΈΠ·ΡΠ°Π·ΠΎΡ Π΅ Π½Π΅ΡΠΎΡΠ΅Π½.
unless ΠΠ«Π ΠΠΠΠΠΠ {
...
}
ΡΠ»ΡΡΠ°Ρ
Π ΡΡΠΊΠ° Π½Π΅ΠΌΠ° Π½ΠΈΡΡΠΎ ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π½ΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π½ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ (Π½ΠΈΠ·ΠΈ, Π±ΡΠΎΠ΅Π²ΠΈ, ΠΈΡΠ½.), ΡΠ΅Π³ΡΠ»Π°ΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΊΠ°ΠΊΠΎ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ.
case ΠΠ«Π ΠΠΠΠΠΠ {
ΠΠΠΠ§ΠΠΠΠ1: { ... }
ΠΠΠΠ§ΠΠΠΠ2, ΠΠΠΠ§ΠΠΠΠ3: { ... }
default: { ... }
}
Π‘Π΅Π»Π΅ΠΊΡΠΎΡΠΈ
Π‘Π΅Π»Π΅ΠΊΡΠΎΡΠΎΡ Π΅ ΡΠ°Π·ΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠ° ΡΠ»ΠΈΡΠ½Π° Π½Π° case
, Π½ΠΎ Π½Π°ΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΠΈ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄, ΡΠΎΡ Π²ΡΠ°ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡ.
$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }
ΠΠΎΠ΄ΡΠ»ΠΈ
ΠΠΎΠ³Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΌΠ°Π»Π°, ΡΠ°Π° Π»Π΅ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ²Π° Π²ΠΎ Π΅Π΄Π΅Π½ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ. ΠΠΎ, ΠΊΠΎΠ»ΠΊΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΠΌΠ΅, ΡΠΎΠ»ΠΊΡ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΊΠ»Π°ΡΠΈ ΠΈ ΡΠ°Π·Π»ΠΈ ΠΈΠΌΠ° Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡ, ΡΠΎΡ ΡΠ°ΡΡΠ΅ ΠΈ ΡΡΠ°Π½ΡΠ²Π° Π½Π΅Π·Π³ΠΎΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ.
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΏΠΎΡΡΠΎΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ - ΠΊΠΎΠ³Π° ΡΠ΅Π»ΠΈΠΎΡ ΠΊΠΎΠ΄ Π΅ Π²ΠΎ Π΅Π΄Π΅Π½ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ, ΡΠ΅ΡΠΊΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΠΏΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ²ΠΎΡ ΠΊΠΎΠ΄ ΡΠΎ Π΄ΡΡΠ³ΠΈ. ΠΠ° Π΄Π° Π³ΠΈ ΡΠ΅ΡΠΈ ΠΎΠ²ΠΈΠ΅ Π΄Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Puppet ΠΈΠΌΠ° Π΅Π½ΡΠΈΡΠ΅Ρ Π½Π°ΡΠ΅ΡΠ΅Π½ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΠΎΠ΄ΡΠ»ΠΈ - ΠΎΠ²Π° ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΎΠ΄ ΠΊΠ»Π°ΡΠΈ, Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΡΠΊΠ»Π΅Π½ΠΈ Π΅Π½ΡΠΈΡΠ΅ΡΠΈ ΡΠΌΠ΅ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΏΠΎΡΠ΅Π±Π΅Π½ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌ. Π‘ΠΎ Π΄ΡΡΠ³ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ, ΠΌΠΎΠ΄ΡΠ»ΠΎΡ Π΅ Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΎ ΠΏΠ°ΡΡΠ΅ ΠΎΠ΄ ΠΊΡΠΊΠ»Π΅Π½Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡΠ» Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ nginx ΠΈ ΡΠΎΡ ΡΠ΅ ΡΠΎΠ΄ΡΠΆΠΈ ΡΡΠΎ ΠΈ ΡΠ°ΠΌΠΎ ΠΎΠ½Π° ΡΡΠΎ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ nginx, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠΎΠ΄ΡΠ» Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ PHP ΠΈΡΠ½.
ΠΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΡΠ΅ Π²Π΅ΡΠ·ΠΈΠΈ, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π΅Π΄Π΅Π½ ΠΎΠ΄ Π΄ΡΡΠ³. ΠΠΎΡΡΠΎΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ -
ΠΠ° ΠΊΡΠΊΠ»Π΅Π½ ΡΠ΅ΡΠ²Π΅Ρ, ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΡΠ΅ Π½Π°ΠΎΡΠ°Π°Ρ Π²ΠΎ ΠΏΠΎΠ΄Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° root Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ. ΠΠ½Π°ΡΡΠ΅ Π²ΠΎ ΡΠ΅ΠΊΠΎΡ ΠΌΠΎΠ΄ΡΠ» ΠΈΠΌΠ° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° ΡΠ΅ΠΌΠ° Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ - ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΡΠΈΠΈ, Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, ΡΠ°Π±Π»ΠΎΠ½ΠΈ, lib ΠΈΡΠ½.
Π‘ΡΡΡΠΊΡΡΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»
ΠΠΎΡΠ΅Π½ΠΎΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ ΡΠΎ ΠΎΠΏΠΈΡΠ½ΠΈ ΠΈΠΌΠΈΡΠ°:
manifests
- ΡΠΎΠ΄ΡΠΆΠΈ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈfiles
- ΡΠΎΠ΄ΡΠΆΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈtemplates
- ΡΠΎΠ΄ΡΠΆΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈlib
- ΡΠΎΠ΄ΡΠΆΠΈ Π ΡΠ±ΠΈ ΠΊΠΎΠ΄
ΠΠ²Π° Π½Π΅ Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½Π° Π»ΠΈΡΡΠ° Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΈ ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ, Π½ΠΎ Π·Π° ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ Π·Π°ΡΠ΅Π³Π° Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ.
ΠΠΌΠΈΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΠΈΠΌΠΈΡΠ° Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ
Π Π΅ΡΡΡΡΠΈΡΠ΅ (ΠΊΠ»Π°ΡΠΈ, Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ) Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ°ΠΊΠ°ΡΠ΅. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½Π° ΠΊΠΎΡΠ΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠΈΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΎΡ ΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π²ΠΎ ΠΊΠΎΡΠ° Puppet ΡΠ΅ Π±Π°ΡΠ° ΠΎΠΏΠΈΡ Π½Π° ΡΠΎΡ ΡΠ΅ΡΡΡΡ. ΠΠΊΠΎ Π³ΠΈ ΠΏΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅, ΡΠΎΠ³Π°Ρ Puppet Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ Π½Π°ΡΠ΄Π΅ ΠΎΠΏΠΈΡΠΎΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΈ ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ°ΡΠ°.
ΠΡΠ°Π²ΠΈΠ»Π°ΡΠ° ΡΠ΅ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈ:
- Π‘ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΎΡ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ Π²ΠΎ ΠΈΠΌΠ΅Π½ΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ. ΠΠΊΠΎ ΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ
foo
, ΡΠΎΠ³Π°Ρ ΡΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π²ΠΎ Π½Π΅Π³ΠΎ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈfoo::<anything>
, ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎfoo
. - Π Π΅ΡΡΡΡΠΎΡ ΡΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°
init.pp
. - ΠΠ° Π΄ΡΡΠ³ΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ Π΅ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ²Π°:
- ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΡ ΡΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ Π΅ ΠΎΡΡΡΠ»Π΅Π½
- ΡΠΈΡΠ΅ Π΄Π²ΠΎΡΠ½ΠΈ Π΄Π²Π΅ ΡΠΎΡΠΊΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π³ΠΈ ΠΈΠΌΠ°, ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΠ²Π°Π°Ρ ΡΠΎ ΠΊΠΎΡΠ° ΡΡΡΠΈ
- ΡΠ΅ Π΄ΠΎΠ΄Π°Π²Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π°ΡΠ΅
.pp
ΠΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ°ΠΌ ΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΈΡΡΠ²Π°ΠΌ ΠΌΠΎΠ΄ΡΠ» nginx
. ΠΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ:
- ΠΊΠ»Π°ΡΠ°
nginx
ΠΎΠΏΠΈΡΠ°Π½ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡinit.pp
; - ΠΊΠ»Π°ΡΠ°
nginx::service
ΠΎΠΏΠΈΡΠ°Π½ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡservice.pp
; - ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°Ρ
nginx::server
ΠΎΠΏΠΈΡΠ°Π½ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡserver.pp
; - ΠΠ΅ΡΠΈΠ½ΠΈΡΠ°Ρ
nginx::server::location
ΠΎΠΏΠΈΡΠ°Π½ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡserver/location.pp
.
ΡΠ°Π±Π»ΠΎΠ½ΠΈ
Π‘ΠΈΠ³ΡΡΠ½ΠΎ ΠΈ ΡΠ°ΠΌΠΈΡΠ΅ Π·Π½Π°Π΅ΡΠ΅ ΡΡΠΎ ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈ, Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΈ ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π΅ΡΠ°Π»Π½ΠΎ ΠΎΠ²Π΄Π΅. ΠΠΎ, ΡΠ΅ Π³ΠΎ ΠΎΡΡΠ°Π²Π°ΠΌ Π·Π° ΡΠ΅ΠΊΠΎΡ ΡΠ»ΡΡΠ°Ρ
ΠΠ°ΠΊΠΎ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΈ: ΠΠ½Π°ΡΠ΅ΡΠ΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠΈ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° template
, ΠΊΠΎΡ Π΅ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ Π½Π° ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° Π΄ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ. ΠΠ° ΡΠ΅ΡΡΡΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ content
. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π°ΠΊΠ°:
file { '/tmp/example': content => template('modulename/templatename.erb')
ΠΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΡΠ° ΠΏΠ°ΡΠ΅ΠΊΠ°ΡΠ° <modulename>/<filename>
ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° <rootdir>/modules/<modulename>/templates/<filename>
.
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΏΠΎΡΡΠΎΠΈ ΡΡΠ½ΠΊΡΠΈΡΠ° inline_template
β Π³ΠΎ ΠΏΡΠΈΠΌΠ° ΡΠ΅ΠΊΡΡΠΎΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ ΠΊΠ°ΠΊΠΎ Π²Π»Π΅Π·, Π° Π½Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΡΠ°.
ΠΠΎ ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° Puppet Π²ΠΎ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ ΠΎΠΏΡΠ΅Π³.
Puppet ΠΏΠΎΠ΄Π΄ΡΠΆΡΠ²Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ ERB ΠΈ EPP:
ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ Π·Π° ΠΠ Π
ΠΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ:
<%= ΠΠ«Π ΠΠΠΠΠΠ %>
β Π²Π½Π΅ΡΠ΅ΡΠ΅ ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΈΠ·ΡΠ°Π·ΠΎΡ<% ΠΠ«Π ΠΠΠΠΠΠ %>
β ΠΏΡΠ΅ΡΠΌΠ΅ΡΠ°ΡΡΠ΅ ΡΠ° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠ° Π½Π° ΠΈΠ·ΡΠ°Π·ΠΎΡ (Π±Π΅Π· Π΄Π° Π³ΠΎ Π²ΠΌΠ΅ΡΠ½Π΅ΡΠ΅). Π£ΡΠ»ΠΎΠ²Π½ΠΈΡΠ΅ ΠΈΠ·ΡΠ°Π²ΠΈ (Π°ΠΊΠΎ) ΠΈ ΡΠΈΠΊΠ»ΡΡΠΈΡΠ΅ (ΡΠ΅ΠΊΠΎΡΠ°) ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΎΠ΄Π°Ρ ΠΎΠ²Π΄Π΅.<%# ΠΠΠΠΠΠΠ’ΠΠ ΠΠ %>
ΠΠ·ΡΠ°Π·ΠΈΡΠ΅ Π²ΠΎ ERB ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π²ΠΎ Ruby (ERB Π΅ Π²ΡΡΡΠ½ΠΎΡΡ Embedded Ruby).
ΠΠ° Π΄Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΈΡΠ΅ Π΄ΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΎΠ΄ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΎΡ, ΡΡΠ΅Π±Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ΡΠ΅ @
Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°. ΠΠ° Π΄Π° ΠΎΡΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠ΅ΠΊΠΈΠ½ Π½Π° Π»ΠΈΠ½ΠΈΡΠ°ΡΠ° ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π° ΠΏΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π°, ΡΡΠ΅Π±Π° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠ° Π·Π° Π·Π°ΡΠ²ΠΎΡΠ°ΡΠ΅ -%>
.
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ
ΠΠ° ΡΠ΅ΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΠΈΡΡΠ²Π°ΠΌ ΠΌΠΎΠ΄ΡΠ» Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ZooKeeper. ΠΠ»Π°ΡΠ°ΡΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½Π° Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:
class zookeeper::configure (
Array[String] $nodes,
Integer $port_client,
Integer $port_quorum,
Integer $port_leader,
Hash[String, Any] $properties,
String $datadir,
) {
file { '/etc/zookeeper/conf/zoo.cfg':
ensure => present,
content => template('zookeeper/zoo.cfg.erb'),
}
}
Π ΡΠΎΠΎΠ΄Π²Π΅ΡΠ½ΠΈΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ zoo.cfg.erb
- ΠΠ½Π°ΡΠΈ:
<% if @nodes.length > 0 -%>
<% @nodes.each do |node, id| -%>
server.<%= id %>=<%= node %>:<%= @port_leader %>:<%= @port_quorum %>;<%= @port_client %>
<% end -%>
<% end -%>
dataDir=<%= @datadir %>
<% @properties.each do |k, v| -%>
<%= k %>=<%= v %>
<% end -%>
Π€Π°ΠΊΡΠΈ ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
Π§Π΅ΡΡΠΎ, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠΎΠ° ΡΡΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π° Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡ ΠΎΠ΄ ΡΠΎΠ° ΡΡΠΎ Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° Debian, ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π΅Π΄Π½Π° ΠΈΠ»ΠΈ Π΄ΡΡΠ³Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΡ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΡΠ»Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΡΠΎ ΠΎΠ²Π° ΡΠ°ΡΠ½ΠΎ, ΠΏΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΠ΅ΡΠΎ ΡΠ΅ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈΡΠ° Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ΅. ΠΠΎ, ΠΎΠ²Π° Π½Π΅ Π΅ ΡΠ΅ΡΠΈΠΎΠ·Π΅Π½ ΠΏΡΠΈΡΡΠ°ΠΏ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°.
ΠΠ° Π΄Π° ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ΅, Puppet ΠΈΠΌΠ° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ Π½Π°ΡΠ΅ΡΠ΅Π½ ΡΠ°ΠΊΡΠΈ. ΡΠ°ΠΊΡΠΈ - ΠΎΠ²Π° ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ, Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΡΠΈΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° ΠΎΠ±ΠΈΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π²ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΠΎΡ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ΅ Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½, Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ, Π»ΠΈΡΡΠ° Π½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ, Π»ΠΈΡΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΈ ΠΈ Π½ΠΈΠ²Π½ΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈ ΠΈ ΠΌΠ½ΠΎΠ³Ρ, ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ²Π΅ΡΠ΅. Π€Π°ΠΊΡΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ ΠΊΠ°ΠΊΠΎ ΡΠ΅Π΄ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
ΠΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠ°ΠΊΡΠΈ:
notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ΡΠ΅ΡΡΡΡ ΡΠΈΠΏΠ° notify ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ³
Π€ΠΎΡΠΌΠ°Π»Π½ΠΎ ΠΊΠ°ΠΆΠ°Π½ΠΎ, ΡΠ°ΠΊΡ ΠΈΠΌΠ° ΠΈΠΌΠ΅ (Π½ΠΈΠ·Π°) ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡ (Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΈ: Π½ΠΈΠ·ΠΈ, Π½ΠΈΠ·ΠΈ, ΡΠ΅ΡΠ½ΠΈΡΠΈ). ΠΠ°Π΄Π΅ΡΠ΅
ΠΠ° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°, ΠΊΡΠΊΠ»Π΅Π½ΠΈΠΎΡ Π°Π³Π΅Π½Ρ ΠΏΡΠ²ΠΎ Π³ΠΈ ΠΊΠΎΠΏΠΈΡΠ° ΡΠΈΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΠΈ Π½Π° ΡΠ°ΠΊΡΠΈ ΠΎΠ΄ ΠΏΠ°ΠΏΠ΅ΡΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π΄ΠΎ ΡΠ°Π·ΠΎΠ»ΠΎΡ, ΠΏΠΎ ΡΡΠΎ Π³ΠΈ Π»Π°Π½ΡΠΈΡΠ° ΠΈ Π³ΠΈ ΠΈΡΠΏΡΠ°ΡΠ° ΡΠΎΠ±ΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΊΡΠΈ Π΄ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ; ΠΠΎ ΠΎΠ²Π°, ΡΠ΅ΡΠ²Π΅ΡΠΎΡ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π° ΡΠΎ ΡΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΡ.
Π€Π°ΠΊΡΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° ΠΈΠ·Π²ΡΡΠ½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ
Π’Π°ΠΊΠ²ΠΈΡΠ΅ ΡΠ°ΠΊΡΠΈ ΡΠ΅ ΡΠΌΠ΅ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ facts.d
. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π°Ρ ΠΈΠ·Π²ΡΡΠ½ΠΈ. ΠΠΎΠ³Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ, ΡΠΈΠ΅ ΠΌΠΎΡΠ° Π΄Π° ΠΈΠ·Π»Π΅Π·Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π΅Π½ ΠΈΠ·Π»Π΅Π· ΠΈΠ»ΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ YAML ΠΈΠ»ΠΈ key=value.
ΠΠ΅ Π·Π°Π±ΠΎΡΠ°Π²Π°ΡΡΠ΅ Π΄Π΅ΠΊΠ° ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π°Π°Ρ Π½Π° ΡΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ poppet Π½Π° ΠΊΠΎΡ Π΅ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄Π΅Π½ Π²Π°ΡΠΈΠΎΡ ΠΌΠΎΠ΄ΡΠ». ΠΠ°ΡΠΎΠ°, Π²ΠΎ ΡΠΊΡΠΈΠΏΡΠ°ΡΠ°, Π²Π½ΠΈΠΌΠ°Π²Π°ΡΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π°Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΎΡ Π³ΠΈ ΠΈΠΌΠ° ΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° Π²Π°ΡΠΈΠΎΡ ΡΠ°ΠΊΡ.
#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'
Π ΡΠ±ΠΈ ΡΠ°ΠΊΡΠΈ
Π’Π°ΠΊΠ²ΠΈΡΠ΅ ΡΠ°ΠΊΡΠΈ ΡΠ΅ ΡΠΌΠ΅ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ lib/facter
.
# Π²ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Facter.add Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΊΡΠ° ΠΈ Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°
Facter.add('ladvd') do
# Π² Π±Π»ΠΎΠΊΠ°Ρ
confine ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΡΠ° β ΠΊΠΎΠ΄ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ true, ΠΈΠ½Π°ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠ° Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ
confine do
Facter::Core::Execution.which('ladvdc') # ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ Π² PATH Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
end
confine do
File.socket?('/var/run/ladvd.sock') # ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ UNIX-domain socket
end
# Π² Π±Π»ΠΎΠΊΠ΅ setcode ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΡΠ°
setcode do
hash = {}
if (out = Facter::Core::Execution.execute('ladvdc -b'))
out.split.each do |l|
line = l.split('=')
next if line.length != 2
name, value = line
hash[name.strip.downcase.tr(' ', '_')] = value.strip.chomp(''').reverse.chomp(''').reverse
end
end
hash # Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π±Π»ΠΎΠΊΠ΅ setcode ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΊΡΠ°
end
end
Π’Π΅ΠΊΡΡ ΡΠ°ΠΊΡΠΈ
Π’Π°ΠΊΠ²ΠΈΡΠ΅ ΡΠ°ΠΊΡΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π½Π° ΡΠ°Π·Π»ΠΈ Π²ΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ /etc/facter/facts.d
Π²ΠΎ ΡΡΠ°ΡΠ° ΠΊΡΠΊΠ»Π° ΠΈΠ»ΠΈ /etc/puppetlabs/facts.d
Π²ΠΎ Π½ΠΎΠ²Π°ΡΠ° ΠΊΡΠΊΠ»Π°.
examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue
ΠΠΎΠ°ΡΠ°ΡΠ΅ Π΄ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅
ΠΠΎΡΡΠΎΡΠ°Ρ Π΄Π²Π° Π½Π°ΡΠΈΠ½ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ ΠΊΠΎΠ½ ΡΠ°ΠΊΡΠΈΡΠ΅:
- ΠΏΡΠ΅ΠΊΡ ΡΠ΅ΡΠ½ΠΈΠΊΠΎΡ
$facts
:$facts['fqdn']
; - ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΊΡΠΎΡ ΠΊΠ°ΠΊΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ°:
$fqdn
.
ΠΠ°ΡΠ΄ΠΎΠ±ΡΠΎ Π΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ΡΠ½ΠΈΠΊ $facts
, ΠΈΠ»ΠΈ ΡΡΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ, ΠΎΠ·Π½Π°ΡΠ΅ΡΠ΅ Π³ΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΠΎΡ ΠΈΠΌΠ΅Π½ΡΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ ($::facts
).
ΠΠ³ΡΠ°Π΄Π΅Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ
ΠΠΎΠΊΡΠ°Ρ ΡΠ°ΠΊΡΠΈΡΠ΅, ΠΏΠΎΡΡΠΎΠΈ ΠΈ
- Π΄ΠΎΠ²Π΅ΡΠ»ΠΈΠ²ΠΈ ΡΠ°ΠΊΡΠΈ β ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΊΠΎΠΈ ΡΠ΅ Π·Π΅ΠΌΠ΅Π½ΠΈ ΠΎΠ΄ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ (Π±ΠΈΠ΄Π΅ΡΡΠΈ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ ΠΈΠ·Π΄Π°Π²Π° Π½Π° ΠΏΠΎΠΏΠ΅Ρ ΡΠ΅ΡΠ²Π΅Ρ, Π°Π³Π΅Π½ΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° Π³ΠΎ Π·Π΅ΠΌΠ΅ ΠΈ Π΄Π° Π³ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ²ΠΎΡΠΎΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, ΡΠ°ΠΊΠ° ΡΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΡΠ΅ βΠ΄ΠΎΠ²Π΅ΡΠ»ΠΈΠ²ΠΈβ): ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΈΠΌΠ΅ΡΠΎ Π½Π° Ρ ΠΎΡΡ ΠΈ Π΄ΠΎΠΌΠ΅Π½, Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΠΈ ΠΎΠ΄ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ.
- ΡΠ°ΠΊΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ β ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΈ ΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ β Π²Π΅ΡΠ·ΠΈΡΠ°, ΠΈΠΌΠ΅, IP Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ, ΠΎΠΊΠΎΠ»ΠΈΠ½Π°.
- ΡΠ°ΠΊΡΠΈ Π·Π° Π°Π³Π΅Π½ΡΠΎΡ β ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π΄ΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ΄ ΠΊΡΠΊΠ»Π°-Π°Π³Π΅Π½Ρ, Π° Π½Π΅ ΠΏΠΎ ΡΠ°ΠΊΡΠΎΡ β ΠΈΠΌΠ΅ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ, Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° Π°Π³Π΅Π½Ρ, Π²Π΅ΡΠ·ΠΈΡΠ° ΠΊΡΠΊΠ»Π΅Π½Π°.
- Π³ΠΎΡΠΏΠΎΠ΄Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ - Pappetmaster ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ (sic!). Π’ΠΎΠ° Π΅ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ½ΠΎ ΠΈΡΡΠΎ ΠΊΠ°ΠΊΠΎ Π²ΠΎ ΡΠ°ΠΊΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ, ΠΏΠ»ΡΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ.
- ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ β ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΠΎΡ ΠΊΠΎΠΈ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠ΅ΠΊΠΎΡ ΠΎΠΏΡΠ΅Π³: ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ ΠΌΠΎΠ΄ΡΠ» ΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ Π²ΠΎ ΠΊΠΎΡ Π±ΠΈΠ» ΠΏΡΠΈΡΡΠ°ΠΏΠ΅Π½ ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ. Π’ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ Π΄Π°Π»ΠΈ Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΈ ΡΠ°ΡΠΎΠ²ΠΈ Π½Π΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ΄ Π΄ΡΡΠ³ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΠΎΠ΄Π°ΡΠΎΠΊ 1: ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ ΠΈ Π΄Π΅Π±Π°Π³ΠΈΡΠ° ΡΠ΅ΡΠΎ ΠΎΠ²Π°?
ΠΠ°ΠΏΠΈΡΠΎΡ ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π½Π° ΠΊΡΠΊΠ»Π΅Π½ ΠΊΠΎΠ΄, Π½ΠΎ Π²ΠΎΠΎΠΏΡΡΠΎ Π½Π΅ Π½ΠΈ ΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΎ ΠΈΠ·Π²ΡΡΠΈΠΌΠ΅ ΠΎΠ²ΠΎΡ ΠΊΠΎΠ΄. ΠΠ°, ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²Π°ΠΌ.
ΠΠ³Π΅Π½ΡΠΎΡ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½ Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Puppet, Π½ΠΎ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ ΡΠ΅ Π²ΠΈ ΡΡΠ΅Π±Π° ΠΈ ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠ³Π΅Π½Ρ
ΠΠ°ΡΠ΅ΠΌ ΠΎΠ΄ Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° 5, ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠΎ ΠΊΡΠΊΠ»ΠΈ-Π°Π³Π΅Π½ΡΠΈ ΠΎΠ΄
ΠΠΎ Π½Π°ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΠΎΡ ΡΠ»ΡΡΠ°Ρ, Π·Π° Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΡΠΊΠ»Π°ΡΠ°, Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅ Π΄Π° Π³ΠΎ ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π°Π³Π΅Π½ΡΠΎΡ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π±Π΅Π· ΡΠ΅ΡΠ²Π΅Ρ: ΠΏΠΎΠ΄ ΡΡΠ»ΠΎΠ² ΠΊΡΠΊΠ»Π΅Π½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π΄Π° ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ° Π²ΠΎ ΡΠ°Π·ΠΎΠ»ΠΎΡ, ΡΡΠ°ΡΡΡΠ²Π°ΡΡΠ΅ puppet apply <ΠΏΡΡΡ ΠΊ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΡ>
:
atikhonov@atikhonov ~/puppet-test $ cat helloworld.pp
node default {
notify { 'Hello world!': }
}
atikhonov@atikhonov ~/puppet-test $ puppet apply helloworld.pp
Notice: Compiled catalog for atikhonov.localdomain in environment production in 0.01 seconds
Notice: Hello world!
Notice: /Stage[main]/Main/Node[default]/Notify[Hello world!]/message: defined 'message' as 'Hello world!'
Notice: Applied catalog in 0.01 seconds
ΠΠΎΠ΄ΠΎΠ±ΡΠΎ Π΅, ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°, Π΄Π° Π³ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈ Π΄Π° ΡΡΠ°ΡΡΡΠ²Π°ΡΠ΅ Π°Π³Π΅Π½ΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π΄Π΅ΠΌΠΎΠ½ - ΠΏΠΎΡΠΎΠ° Π΅Π΄Π½Π°Ρ Π½Π° ΡΠ΅ΠΊΠΎΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠ°Ρ ΡΠΈΠ΅ ΡΠ΅ ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΏΡΠ΅Π·Π΅ΠΌΠ΅Π½Π° ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠΌΠΈΡΠΈΡΠ°ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΡΡΠΊΠ°ΡΠ΅ - ΠΎΠ΄Π΅ΡΠ΅ Π΄ΠΎ ΡΠ°Π·ΠΎΠ»ΠΎΡ Π·Π° ΠΊΠΎΡ ΡΡΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΈ Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ sudo puppet agent -t
. ΠΠ»ΡΡ -t
(--test
) Π²ΡΡΡΠ½ΠΎΡΡ Π²ΠΊΠ»ΡΡΡΠ²Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΎΠΏΡΠΈΠΈ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ°Ρ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΎ. ΠΠ²ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ Π³ΠΎ Π²ΠΊΠ»ΡΡΡΠ²Π°Π°Ρ ΡΠ»Π΅Π΄Π½ΠΎΠ²ΠΎ:
- Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π΄Π΅ΠΌΠΎΠ½ (ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ Π°Π³Π΅Π½ΡΠΎΡ Π·Π°ΠΏΠΎΡΠ½ΡΠ²Π° Π²ΠΎ ΡΠ΅ΠΆΠΈΠΌ Π½Π° Π΄Π΅ΠΌΠΎΠ½);
- ΠΈΡΠΊΠ»ΡΡΠ΅ΡΠ΅ Π³ΠΎ ΠΏΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΡ (ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, Π°Π³Π΅Π½ΡΠΎΡ ΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΈ ΡΠ΅ ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π΅Π΄Π½Π°Ρ Π½Π° ΡΠ΅ΠΊΠΎΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠ°Ρ);
- Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π΄Π΅ΡΠ°Π»Π΅Π½ Π΄Π½Π΅Π²Π½ΠΈΠΊ Π·Π° ΡΠ°Π±ΠΎΡΠ°;
- ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π°Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈΡΠ΅.
ΠΠ³Π΅Π½ΡΠΎΡ ΠΈΠΌΠ° ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π±Π΅Π· ΠΏΡΠΎΠΌΠ΅Π½ΠΈ - ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΊΠΎΠ³Π° Π½Π΅ ΡΡΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π΅ΠΊΠ° ΡΡΠ΅ ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π»Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΡΡΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π°Π³Π΅Π½ΡΠΎΡ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ°. ΠΠ²ΠΎΡ ΡΠ΅ΠΆΠΈΠΌ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΎΠ΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°ΡΠΎΡ --noop
Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°: sudo puppet agent -t --noop
.
ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ Π΄Π½Π΅Π²Π½ΠΈΠΊΠΎΡ Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅ Π½Π° Π΄Π΅Π»ΠΎΡΠΎ - Π²ΠΎ Π½Π΅Π³ΠΎ ΠΊΡΠΊΠ»Π°ΡΠ° ΠΏΠΈΡΡΠ²Π° Π·Π° ΡΠΈΡΠ΅ Π΄Π΅ΡΡΡΠ²Π° ΡΡΠΎ Π³ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°: Π·Π° ΡΠ΅ΡΡΡΡΠΎΡ ΡΡΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°, Π·Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΠΎΠ²ΠΎΡ ΡΠ΅ΡΡΡΡ, Π·Π° ΡΠΎΠ° ΠΊΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π³ΠΈ ΡΡΠ°ΡΡΡΠ²Π°. Π‘Π΅ ΡΠ°Π·Π±ΠΈΡΠ°, ΠΎΠ²Π° Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ --debug
.
Π‘Π΅ΡΠ²Π΅Ρ
ΠΠΎ ΠΎΠ²ΠΎΡ Π½Π°ΠΏΠΈΡ Π½Π΅ΠΌΠ° Π΄Π° Π³ΠΎ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌ ΡΠ΅Π»ΠΎΡΠ½ΠΎΡΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΈ ΡΠ°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ΡΠΎ ΠΊΠΎΠ΄ Π½Π° Π½Π΅Π³ΠΎ, ΡΠ΅ ΠΊΠ°ΠΆΠ°ΠΌ ΡΠ°ΠΌΠΎ Π΄Π΅ΠΊΠ° Π½Π°Π΄Π²ΠΎΡ ΠΎΠ΄ ΠΊΡΡΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΡΡΠΎ Π½Π΅ Π±Π°ΡΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΌΠ°Π» Π±ΡΠΎΡ Π½Π°; ΡΠ°Π·Π»ΠΈ (Π΄Π° ΡΠ΅ΡΠ΅ΠΌΠ΅, Π΄ΠΎ ΡΡΠΎ). ΠΠΎΠ³ΠΎΠ»Π΅ΠΌ Π±ΡΠΎΡ ΡΠ°Π·Π»ΠΈ ΡΠ΅ Π±Π°ΡΠ°Π°Ρ ΠΏΠΎΠ΄Π΅ΡΡΠ²Π°ΡΠ΅ - ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, ΠΊΡΠΊΠ»Π΅Π½ΠΈΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ ΡΡΠ°ΡΡΡΠ²Π° Π½Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ ΡΠ΅ΡΠΈΡΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠΈ, Π·Π° ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π·Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ Π½ΠΈΠ²Π½ΠΈΠΎΡ Π±ΡΠΎΡ ΠΈ Π½Π΅ Π·Π°Π±ΠΎΡΠ°Π²Π°ΡΡΠ΅ Π΄Π° Π³ΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ°ΡΠ°, ΠΈΠ½Π°ΠΊΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΡΠ΅ Π³ΠΎ ΡΠΎΠ±ΠΈΡΠ° ΡΡΠ±ΡΠ΅ΡΠΎ ΠΏΠΎΠ³ΠΎΠ»Π΅ΠΌΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ.
Π Π°ΡΠΏΠΎΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ - Π°ΠΊΠΎ Π²ΠΈ ΡΡΠ΅Π±Π° Π±ΡΠ·ΠΎ ΠΈ Π»Π΅ΡΠ½ΠΎ, ΡΠΎΠ³Π°Ρ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ (Π½Π° r10k)[
ΠΠΎΠ΄Π°ΡΠΎΠΊ 2: Π£ΠΏΠ°ΡΡΡΠ²Π° Π·Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅
- Π‘ΡΠ°Π²Π΅ΡΠ΅ ΡΠ° ΡΠ΅Π»Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π²ΠΎ ΠΊΠ»Π°ΡΠΈ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ.
- Π§ΡΠ²Π°ΡΡΠ΅ Π³ΠΈ ΠΊΠ»Π°ΡΠΈΡΠ΅ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈΡΠ΅ Π²ΠΎ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π° Π½Π΅ Π²ΠΎ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ Π³ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ΅.
- ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π³ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅.
- ΠΠ΅ ΠΏΡΠ°Π²Π΅ΡΠ΅ Π°ΠΊΠΎ ΡΠ΅ Π±Π°Π·ΠΈΡΠ°Π°Ρ Π½Π° ΠΈΠΌΠΈΡΠ° Π½Π° Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΈ.
- Π‘Π»ΠΎΠ±ΠΎΠ΄Π½ΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π·Π° ΠΊΠ»Π°ΡΠΈ ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ - ΠΎΠ²Π° Π΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ ΠΎΠ΄ ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ½Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠΊΡΠΈΠ΅Π½Π° Π²ΠΎ ΡΠ΅Π»ΠΎΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°ΡΠ°/Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°.
ΠΠ΅ ΠΎΠ±ΡΠ°ΡΠ½Π°ΠΌ Π·ΠΎΡΡΠΎ ΠΏΡΠ΅ΠΏΠΎΡΠ°ΡΡΠ²Π°ΠΌ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΎΠ²Π° Π²ΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ°.
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
ΠΠ° Π·Π°Π²ΡΡΠΈΠΌΠ΅ ΡΠΎ Π²ΠΎΠ²Π΅Π΄ΠΎΡ. ΠΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ Π·Π° Hiera, ENC ΠΈ PuppetDB.
Π‘Π°ΠΌΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΠΌΠΎΠΆΠ°Ρ Π΄Π° ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π°Ρ Π²ΠΎ Π°Π½ΠΊΠ΅ΡΠ°ΡΠ°.
ΠΡΡΡΠ½ΠΎΡΡ, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π»ΠΈ - ΠΌΠΎΠΆΠ°ΠΌ Π΄Π° ΠΏΠΈΡΡΠ²Π°ΠΌ ΡΡΠ°ΡΠΈΠΈ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΠ²Π΅ ΡΠ΅ΠΌΠΈ, Π΄Π° Π³Π»Π°ΡΠ°ΠΌ Π·Π° ΡΡΠΎ Π±ΠΈ Π²Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π»ΠΎ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΠ΅:
- 59,1%ΠΠ°ΠΏΡΠ΅Π΄Π½ΠΈ ΠΊΡΠΊΠ»Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ - Π½Π΅ΠΊΠΎΠΈ ΡΡΠ°ΡΠ° ΠΎΠ΄ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π½ΠΈΠ²ΠΎ: ΡΠ°ΠΌΠΊΠΈ, ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈ Π»Π°ΠΌΠ±Π΄Π° ΠΈΠ·ΡΠ°Π·ΠΈ, ΡΠΎΠ±ΠΈΡΠ°ΡΠΈ Π½Π° ΡΠ΅ΡΡΡΡΠΈ, ΠΈΠ·Π²Π΅Π·Π΅Π½ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΌΠ΅ΡΡ Π΄ΠΎΠΌΠ°ΡΠΈΠ½ΠΈΡΠ΅ ΠΏΡΠ΅ΠΊΡ Puppet, ΠΎΠ·Π½Π°ΠΊΠΈ, Π΄ΠΎΠ±Π°Π²ΡΠ²Π°ΡΠΈ, Π°ΠΏΡΡΡΠ°ΠΊΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ.13
- 31,8%βΠΠ°Ρ ΡΡΠΌ Π°Π΄ΠΌΠΈΠ½ Π½Π° ΠΌΠ°ΡΠΊΠ° ΠΌΠΈβ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎ Π½ΠΈΠ΅ Π²ΠΎ ΠΠ²ΠΈΡΠΎ ΡΠ΅ Π΄ΡΡΠΆΠ΅Π²ΠΌΠ΅ ΡΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΏΠΎΠΏΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠΈ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²Π΅ΡΠ·ΠΈΠΈ ΠΈ, Π²ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π΄Π΅Π»ΠΎΡ Π·Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΠΎΠΏΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ.7
- 81,8%ΠΠ°ΠΊΠΎ ΠΏΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΊΡΠΊΠ»Π΅Π½ ΠΊΠΎΠ΄: ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°, ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅, CI/CD.18
ΠΠ»Π°ΡΠ°Π»Π΅ 22 ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ. 9 ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ Π±Π΅Π° Π²ΠΎΠ·Π΄ΡΠΆΠ°Π½ΠΈ.
ΠΠ·Π²ΠΎΡ: www.habr.com