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