α’αΆαααααΊααΆαααααααααααααααααααΆαααααααα ααΆααααααααα ααΆβααααΌαβααΆαβααααΎβααΎααααΈβααΆαβααβαααΆαααΈαβαα βααααβαααβα ααβααΆαβαα·αβαααααΆβααααβαααβα
αααα»αααΆαααααΎααΆαααΆαα½α Puppet α’ααααααααααΆαααααΆαααααΆαααα αΎαα α’αααααααααα·αααΆααΆααααααα αα·ααααα αα αααααα‘αΎααα·αααΌαα ααα»α ααααΆαααααΈα―αααΆαααααΌαααΆα αααααΉαα’αα»ααααΆαα±ααα’αααα αΆααααααΎααααααααααααΆαααΆαααα ααα’αααΈααααΉαααΆαααα’αΆαααα
ααααααΆαααΌαααααΆα
ααααααααααααα·ααααα·ααΆααααα Puppet ααΊααΆαααΆαααΈαααααα-αααΆαααΈααα αααααΈααΆααΆααααΆααααααααα·ααααα·ααΆαααααΆααααΆαααΈααα ααΆαα½αααΉααα»αααΆαααΆαααααααααααα
αααΌαααααΆαααααααα·ααααα·ααΆαααααΌαααΆαααααΎα ααΆαααααΆαααΎα αααααΆααααααααααααααα α’αα·αα·ααααΆαααααααΆαααΈααααααααΆααααΆαααααααα ααΆαααααααα α αΎαα’αα»ααααααΆα ααααα·αααΎα’αααααΆαααααΎααΆαααΆαα½α Ansible αααααΆαααααα½αααααααΎααααΌαααα»ααααααα α’ααααααααααααα αΆααααααΎαααααΎαααΆαα’αα»ααααααΆαααααα α’αα·αα·αααααα½αα―αααΉααα·αα’αα»ααααα’αααΈααΆααα’ααα
αααα»αα’αα‘α»ααααααααΆαααααααααααΆα ααΆαα’αα·αααααΈα TLS ααΈαααααΌαααααΌαααΆαααααΎα αααΆαααΈααα αα·ααααΆαααΈααααααααΆαααα―αααααααΆαααααα½α αα·ααα·ααααΆαααααααααααααΌαααααΆα ααΆααααααΆαααΆαααΈαααα αααα·ααααΆαααααααααααΆααα’αα·αα·αα ααα»ααααααΆαααααΆαααααΆα’αΆα ααααΎ CA ααΆααααα ααΆαα
ααΆαααααΆαα’αααΈααΆααααα αΆα
αα αααα»ααα ααΆαα»ααααα’αΆααα αα αααΆαααΈαααα’αΆααα ααααΆαα ααααΆαα (ααααΆαα) α ααΆαααααααα ααΆαααααααααααααΆααααααΆααααααΌαααΆαααααα αα αααα»α manifestos αα αααα»αααΆααΆααααααααααα·ααΈαα·ααα - α’αΆααα DSL α
α’αΆααα DSL ααΊααΆααΆααΆαααααΆαα ααΆαα·αααααΆα’αααΈααααΆαααΆααααα ααααΆαααααααααΆαααααα»αααααααααααΆααααααΆαααααααΆααα»αααα α§ααΆα αααα
- α―αααΆαααΆα α αΎαααΆααΆαααααΉαααΆαααΆααααΆααα
- αααα ααααααΌαααΆαααα‘αΎαα
- ααααΆααααααΆαα αΆααααααΎαα αΎαα
ααααΆαα’αΆα ααΆααααααααΆαα αα·ααα ααα
- ααΆαααΆαα’αΆααααααα½ααααααααΆαααααααααΆαααααααααΆαααααΌαααΆαααααΎααααΆααα
α§ααΆα ααα "ααα‘αΎααααα ααααααΌα αααααΆααααααααααα½αα―αααΆαααααααα ααΆαααααααα αααααΆααααα αΆααααααΎαααααΆααααα" - ααΆαααΆαααΌαααααΉα - ααααα·αααΎααααΆαααΆαααααΆααααααΌα ααΆααααΎααΆαααΌαααααΉααα
ααΆααααααΆααααααΆαααΆαααΆα
α§ααΆα ααα ααααα·αααΎα―αααΆαααααααα ααΆααααααααααααΆααααααΌα α’αααα’αΆα α αΆααααααΎαααααΆααααα‘αΎααα·ααααααααααααααααα·α
ααΎαααΈαααααα Puppet DSL ααΆααα»αααΆα αα·αα’ααα ααααΌα ααΆααα ααααΈαααααααΆαααααΆααααααααα αα·αα§αααααααααΎαααΎαα ααααααΆαααααΌααααααααααααΌαααΆαααΆααααααααα - EPP αα·α ERB α
α’αΆαααβααααΌαβααΆαβαααααβααΆ Ruby ααΌα ααααβααΆαβααΆαααα αα·αβααΆαααβααΆβα αααΎαβααααΌαβααΆαβααβα ααβααΈβααΈαααα Ruby α’αα»ααααΆαα±ααα’ααααααααΈαα’αΆααα - αααααααααααα·ααααΆαααα»αααααΆα ααααααααααΆαααααΈ αα»αααΆαα
ααααααααα Puppet αααα»αααααΎαααΆα ααΆααααα αΆααααααΆααααααΆααααΆααααΆααααΈαα½αααα ααΎαααΆαααΈαααααααΌαααΆαα ααααααα αααα»ααααα½αα αα ααΊααΆαααααΈααααααΆα αα·αααααΆαααααααααααα½ααααααααΆααααΈααααΆααααααααα»αααΆα α’ααα αα·αααΆααααααΈαααααα ααααΈαααααααΆαααααΆαααααααααα
ααΆααααααααααα αα·ααα ααΆαααααααΌα
αααααΊααΆαααααααα―αααΆαααααΌαααΆααααααΉααα½αα’αααα±αααααααΈααΆααααααααααα ααααα·αααΎα§ααΆα ααααααααΆαααααααα·ααααααααααΆααα
ααΆααααααααααααααα ααΆααααααααααΆααΆααααααα ααΆαααααααααααααααΆαα ααΆααααααααααααααααΆααααΆααα·αααααΆααααΆααα
αααααΊααΆα§ααΆα αααααα’αααΈααα manifest ααΎααα ααΌα α
# ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΈΡΡΡΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³Π΄Π΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΡΠΊΠΈ.
#
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½ΠΎΠ΄Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° node,
# Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π½ΠΎΠ΄Ρ β Ρ
ΠΎΡΡΠ½Π΅ΠΉΠΌ (Ρ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π·)
# ΠΈΠ»ΠΈ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Ρ
ΠΎΡΡΠ½Π΅ΠΉΠΌΠΎΠ², ΠΈΠ»ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ default.
#
# ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π² ΡΠΈΠ³ΡΡΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½ΠΎΠ΄Ρ.
#
# ΠΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ Π½ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΠ°ΡΡΡ ΠΏΠΎΠ΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠ². ΠΡΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ
# ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½ΠΎΠ΄.
node 'hostname', 'f.q.d.n', /regexp/ {
# ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
#
# Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° Π΅ΡΡΡ ΡΠΈΠΏ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
#
# ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π²ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ!
#
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π΅Π³ΠΎ ΡΠΈΠΏΠ°. Π’ΠΈΠΏ ΠΏΠΈΡΠ΅ΡΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅.
# ΠΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½ΠΈΠΆΠ΅.
#
# ΠΠΎΡΠ»Π΅ ΡΠΈΠΏΠ° Π² ΡΠΈΠ³ΡΡΠ½ΡΡ
ΡΠΊΠΎΠ±ΠΊΠ°Ρ
ΠΏΠΈΡΠ΅ΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°, ΠΏΠΎΡΠΎΠΌ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅,
# Π΄Π°Π»ΡΡΠ΅ ΠΈΠ΄ΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΡΡΡΠ° ΠΈ ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
# ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· Ρ.Π½. hash rocket (=>).
resource { 'title':
param1 => value1,
param2 => value2,
param3 => value3,
}
}
ααΆαα
αΌααααααΆαα αα·αααΆαααααααααααΆαααα·ααααααΆααααααααααααΌαααΆααα manifest ααααα ααα»ααααααΆααααΌαααΆαααααΆα
- ααΆαβα αΌαβαααααΆααβα αααααβααΈα ααααΆααβαα·αβααααΌαβααΆαβααααΎβααα
- αααααααααααααΌαααΆαααααααααα ααααααα½α;
- αααααΆααααααααααΆααααΈαααΆαααΆααααααααΈαα½αα αα½αααΆαααααα
α»ααααααα αααΆαααΆααααααααΈαα½αααααα·ααα
ααΎαααααΆααααΆα
ααααα‘ααα ααααΈααΎαααααα½αααααΌαααΆααααααΎαα‘αΎααααααΆααααααΈαααααααΆααααΆαααΆαααααα αα·ααααΆαααΆαααααααα½αα α’αααα’αΆα
αααααααΎαααααΆαααα½α αα·ααααααααΆααααααΆααααα (α§α
resource { 'title': }
ΠΈresource { 'title': param => value }
). - αααα½ααα ααΎαααΆαααΆαααααααα½ααααα ααααα·αααΌα ααααΆα
- αααα½αααααΆααααααααααΆαααααΌαααΆαααααααα ααΈαα»ααα½αααα
ααΈααΆααααα―αααΆααα ααΎ pappetserver
αααααΆααααΆααααααααααααα αααα»αααΉαααααΆαααΈααααααα·ααα "ααα―αααΆα"α ααα«αααΊααΆαααααααΆαααΆαααααααα ααΆααααααααα’αΆααααααααΆααααααΆααααΆααααΆαααα½αα
αα root αααααααα½αα’αΆαααααααΎαααααααα Puppet αα·αααα·ααααΆααααααΆαααααΎα ααα·ααααΆαααΊααΆαααα»αα―αααΆαααααααΆαααααααα ααΆαααααααααααααααΌαααΆααααααΆαα»ααααα»αααααΆα ααααα‘ααα ααΆααααααΆααααΎαααα»αααΆααα½ααααα αΌαααααΆααΆαα½α git αα αααα»αααααΈαααααα·ααααΆαααααΌαααΆααααααΎαα‘αΎαααΈααΆααΆ git α ααΌα ααααα αΎαααααΆααααΈαα½ααααΆαααΈααΆαααα αααα»αααα·ααΆααΆααα½αα¬ααααααααα ααΆα’αΆα ααααΌαααΆαααααααα ααΆαααααααααα ααΎααααΆαααααα½αααΆ α¬αα αααα»α ENC ααααααα»αααΉααα·ααΆαα’αααΈαα αααα»αα’ααααααααααΆααα
- αα
αααα»αααααααΈααΈ ("α’αΆαααα
αΆαα") ααααΌαααααΆαααΊ
/etc/puppet
. ααΆαααααΎααααΆααααα·ααααΆαααΊααααα α α·ααα - α§ααΆα ααα ααΎααα·αααααΎαα½αααΆααΆαα½αα’αΆαααα αΆααααα ααααα·αααΎααα·ααααΆαααααΌαααΆαααααΎααααΆαα ααΆααααααΆαα½αααΆααααΌαααΆααααααΆαα»ααα αααα»α/etc/puppet/environments
αα root ααΉαααΆααααα·ααααΆαα ααααα·αααΎααα·ααααΆααα·αααααΌαααΆαααααΎ ααα«αααΉαααΆααααΌαααααΆαα - α
αΆααααααΎαααΈααααααΈαα½α ("α’αΆαααααααΈ") ααΆαααααΎααααΆααααα·ααααΆαααΆαααααΆαααΆααΆαααααα·α
αα
α αΎααααααΈααΌαααααΆαααααΌαααΆαααααΆααααααΌααα
/etc/puppetlabs/code
. ααΌα ααααα αΎαααα·ααααΆαααααΌαααΆααααααΆαα»ααα αααα»α/etc/puppetlabs/code/environments
, αα root ααΊααΆααααα·ααααΆαα
ααααΌαααααΆααααααα
αααα»ααα root manifests
αααααΆαααΆααααα αΆααα½α α¬α
αααΎαααααα·αααααΆα’αααΈααααΆααα ααΎαααΈαααααααα½αααααΆααααα modules
αααααΆααααΌαα»αα αααα»αααΉαααααΆααα’αααααΈαααΌαα»αααΆαα½ααα
ααααααααα ααΎαααΈααα α’αΆαααα
αΆααααα’αΆα
ααΆααααααααααα files
αααααΆαα―αααΆαααΆα
αααΎααααααΎαα
αααααα
ααααΆααα αα
αααα»αα’αΆαααααααΈ α―αααΆαααΆααα’ααααααΌαααΆαααΆαααααα»ααααΌαα»αα
α―αααΆα Manifest ααΆαααααααααααα .pp
.
α§ααΆα αααααααΆαααααα»αααααΈαααΈ
ααΆααα·αααααΆα’αααΈααααΆαα αα·αααααΆααα ααΎααΆα
αα
ααΎααααΆαα server1.testdomain
α―αααΆαααααΌααααααααΎα /etc/issue
ααΆαα½αααΉαααΆαα·ααΆ Debian GNU/Linux n l
. α―αααΆαααααΌαααααΆαααααα·αααα·ααααα’αααααααΎ αα·ααααα»α root
αα·αααα·α
αΌαααααΎααααΌαααααΆα 644
.
ααΎαααααα manifestoα
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
. - ααααα·αααΎααΆαααααααα ααΆααααααααααααΌαααΆαααααΎαα αα α»ααααααααΆα ααααΆααααααααΌαααα αΆααααααΎαα‘αΎααα·αα
ααΎαααααα manifestoα
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
)
- α αΆααααααΎαα‘αΎααα·α - ααΆααααααααΆααΎααααΈα αΆααααααΎαααααΆααααα‘αΎααα·α
- ααααΆαααΆα - ααΆααααααααΆααΎααααΈαα·αα·αααααΎαααααΆαααΆαααααΆαααα
- α
αΆααααααΎαα‘αΎααα·α β α
ααα’α»ααααα αΆαααΆααΎααααΆαααα initscript ααΆααααααΆαα
αΆααααααΎαα‘αΎααα·αα ααααα·αααΎ
false
α αΎααααΆαααΆααααααααααΌαααΆααααααΆαα α αΆααααααΎαα‘αΎααα·α - ααααααααααΆαααΆαααααααααααααΌαααΆαααααΎα ααααα·αααΎfalse
αα·ααααΆαααΆαααααα α αΆααααααΎαα‘αΎααα·α αα·αααΆααααααΆαα - ααααΆααααααααΌαααΆααααααα α αΎαα αΆααααααΎαα αΆααααααΎαα‘αΎααα·α (ααα»αααα systemd ααααΎααΆααααααααΆsystemctl restart
). - hasstatus β α
ααα’α»ααααα αΆαααΆααΎααααΆαααα initscript ααΆααααααΆααααααααΆ
status
α ααΎfalse
αααααΆααααααααααααΆαααΆααααααααααΌαααΆαααααΎ ααααΆαααΆα. ααααΆαααΎαtrue
.
ααααα·ααααα·
ααααΎαααΆαααΆααααααααΆααΆααααα α ααααα·αααΎα’ααααα·ααααααΆαααααΆαααΆαααααα αααααΎα, ααααα»ααααα, αα»αααααΆαα α¬ αααααααααΆαααΆααααααααΆααΉαααααΌαααΆαααααΎαααΆαααΆαααααααα Puppet ααααΌαααΆαααααΎαααΆαα α’αΆα ααααΎαααΆαααΆαααΌαααααΉα - ααααΎαααΆαααΆααααααααΆα
αααΆαααΆααααααα
- αααααααααΆα - ααΆααααααααΆαααααααΌαααααα·ααααα· (ααΆαααααΎα)
- ααΆααααααααΆ - ααΆααααααααΆαααααααΌαααααα·ααααα· (ααααα·αααΎααΆαα·αααααΌαααΆααααααΆαααα αααα»αααααα)
- ααααΌα - ααααΌααααααααΌαααααΎαα―αααΆααααα’αΆα ααααα·ααααα·ααΆαα
- ααααα»ααααα β ααααα·αααΎααΆααααααααΆαααααΆααααααΆαααα αααα»ααααΆαααΆαααααααααααΆααααα ααααΆαα½αααΉααααααΌααα αααααΆααααααααΆα ααααααΉαααααΌαααΆαααααα·ααααα·
- αα»αααααΆαα - ααααα·αααΎααΆααααααααΆαααααΆααααααΆαααα αααα»ααααΆαααΆαααααααααααΆααααα ααααΆαα½αααΉααααααΌααααα‘ααααααα·ααααααΆααΌααααααααΆααααααααΆα ααααααΉαααααΌαααΆαααααα·ααααα·
- αααααΎα β ααααα·αααΎα―αααΆααααααΆααααααΆαααααα»ααααΆαααΆααααααααααα·αααΆααα ααΆααααααααΆα ααααααΉαααααΌαααΆαααααα·ααααα·
- αααααααααΆα - ααααα·αααΎ
true
αααααΆααααααΆααααααααΆααΉαααααΌαααΆαααααΎαααΆααααα ααααααααααα·ααααα·αααααααα½αααΆαααΆαααΌαααααΉαααΈααααΆαααααααααα - cwd - αααααααααΌαααααΎαααΆαααΆααααααααΆ
- α’αααβααααΎ - α’αααααααΎααααΆααααΈα’αααααΆαααααααΌαααααΎαααΆαααΆααααααααΆ
- ααααΌααα½α - ααααααααΎαααΆαααΆααααααααΆα
- posix - ααααΎαααΆααα»ααΆαααααΌαααΆααααααΎαα‘αΎααααΆαααΆαααα ααααΌαααααΆααααΆαααααΆαα ααααΌα
- ααα - ααΆααααααααΆααααΌαααΆαααΆααα±ααααααΎαααΆααα
αααα»αααα
/bin/sh
, α’αΆα αα·αααααΌαααΆααααααΆαα ααααΌαα’αααα’αΆα ααααΎ globbing, ααααα αα·ααααααααα·ααααααααααααααα ααΆααααααΆααααΌαααΆαααααΎααααααααααααααααα· ααααα·αααΎααΆααα½α’αααααα·αααααΆαα½α (|
,;
,&&
,||
αβα)α
cron
ααααααααα cronjobs α
αααΆαααΆααααααα
- αααααααααΆα - ααααΆααααααΆααααααααα’ααααααααΆααα½αα ααα½α
- ααΆααΆα±ααααΆαααΌα - ααααΆαααΆαααΆαααΆαα
present
- αααααΎαααααα·αααΎαα·αααΆαabsent
- αα»αααααα·αααΎααΆα
- ααΆααααααααΆ - ααΎααΆααααααααΆα’αααΈαααααααΌαααααΎαααΆα
- ααα·ααααΆα β αααα»αααα·ααααΆαααΆαααααααΌαααααΎαααΆαααΆααααααααΆ (αααααΈα’αααααα·ααααΆα αα·ααααααααααααΆααΆαααα
=
) - α’αααβααααΎ - ααΈα’αααααααΎααααΆααααΆαααααααΌαααααΎαααΆαααΆααααααααΆ
- ααΆααΈ, αααα, ααααααααΎααΆα, αα, αααααα - αααααΆααααΌαααααΎαααΆα cron α ααααα·αααΎαα»αααααααααΆαααααααΆαα½ααα·αααααΌαααΆααααααΆαα αααααααααααΆαα
αααα»α crontab ααΉαααΆα
*
.
αα
αααα»αα’αΆααα 6.0 cron ααΌα
ααΆααααα·αααΎ
α’αααΈααααΆαααΆααΌαα
αααααΌαααΆααααααΆααααΆααααααααααααΆα
ααα α»αααΌαα αααα»ααααααΎααα½ααααααααΊ ααα ααααΈαααααΆααααα½α. ααα α»ααααααΎαα‘αΎααα ααααααααααΆαααΈαα¬α αααΎαααααααααααΌα ααααΆαααααΆααααααααΌα ααααΆααα α‘αΎααααα»αααα
ααΌα αααααααα»αααΉαααααααααααααα manifests αααααΆααααααΆααααΌα ααααΆαα·ααα½αααΆαααααΆαααααααααααΌα ααααΆαααααΆαα αααααΎαααΌα ααααΆ!
αα½αααΆαααΆαααααΌαααΆααααα»αααΆαααα‘αΎααααα
αααααααΆααααααααΌα
ααααΆ ααα»ααααααΆαα½αααΉααααααα·ααΈααααααααααααα
ααααααααααααΆα αααα»αααααΈαααα’αααααααΌαααααΎαααΆαααΆαααααα name
ααΎααααΈαααααΆαααα α»αα
package { 'ruby-mysql':
ensure => installed,
name => 'mysql',
provider => 'gem',
}
package { 'python-mysql':
ensure => installed,
name => 'mysql',
provider => 'pip',
}
ααααααααααΆαααααααααααΆααααααΎαααααααααααΆααΎααααΈαα½ααααααΆαααΆαα
αααα β name
Ρ ααααΆαααα, command
Ρ ααααα·ααααα·, αβαα
αααΆαααΆααααααααααΆ
ααααααααααΆαααΈαα½ααααΆααααΆαααΆαααααααα·ααααα½αα ααα½α ααααα·ααα·αααΈααααααααααααΆα
αααααΈαααααααααααΆαααΆααααααααααΆ
αααααΈααααΈα
- αααααΌαα±ααααΆα - αααΆαααΆααααααααααααα αΆαααΈααααΆααααααααΆααααα’αΆαααααααΎα
- αα»α - αααΆαααΆααααααααααααααΆααααΆααΎααααΆααα½αααΆα’αΆαααααααΎααααΆααααα
- ααΆαααΆαααα αΆα - αααΆαααΆααααααααααααααΆααααΆααΎααααΆαααΆαααααααΆααααααα½αααΆαααΆαααΌαααααΉαα
- ααΌαααααΉαα - αααΆαααΆααααααααααααααααΆααααΆαααΆαααααα½αααΆαααΆαααΌαααααΉαααΈααααΆααααα
αααΆαααΆααααααααααΆαααααΆαααΆααααααΈααΆααα’ααααα½αααααΆαααααααααΆααααααΆααααα½α α¬α’αΆαααααααααααΆαααααα»αααααααααΆαααα
αααααααΆαααα ααααΆα
αααααααΆααααααΆαααΊααααΆααααααΆααΆαααΎαα‘αΎαα’αααΈααααΆαα αα½αααΆααααΌαααΆαααααΎααΆα ααααααΎααααΈαααα αΆαααΈααΆαα’αΆαααααα ααΆααααααααΆαααααα·αααΆαααΉαααααα±ααααΆαααα α»ααααα»αααΆαα αααααα
ααΆααααααααααααααααααααΆααααΆαααΌα ααΆααααααα ααααααααααΆααααααΆαα’αααααα (ααααα·αααΎαααααααααααααΆααααααΆααΈα ααααααααααΈαα½ααααααααααααΆααααααΆααΆααααΈαααααΌαααΆααααααααΆα’αααααα) αααααΆαααααααααααααΆααααα»αααααααααΆααα (ααααΈααααααα αα·αααααΆααααααΌα!) αα·ααα½αααΆαα ααααα; ααααααααΆαααααααΌαααΆααααααααααΆαααααααΆααααΈαααααααααααα
α§ααΆα ααα:
file { '/file1': ensure => present }
file { '/file2':
ensure => directory,
before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']
ααΆαα’αΆααααα αα·αααΆαααΌαααααΉα
ααΌα αααααΆααααααΆααααΈαα»α ααΆαα’αΆαααααααΆαααααααΆαααααΆαααΊααΆα’ααααααΆαα ααααα·ααΈααα ααΌααααααααααα αααααααααααΆαα’αΆααααα - α’αααα’αΆα αααααΎαααΆαα’αΆααααααααα αααααΉααααααΆαα±ααααΆαααα α»ααααα»αααΆαα αααααα
αα·αααΌα ααΆαα’αΆααααα ααΆαααΌαααααΉααα·ααααααΆα’ααααααΆαααα α αααΆααααΆααααααα’αα»αααααααααΆααααΆαααΌαααααΉαα
- ααααα·αααΎααααΆαααα½αααΆαααΆαααΌαααααΉα ααΆααααΌαααΆαααααΎαα αα α»ααααααααΆαα αααααααΆαα’αΆαααααα’αΆαααααααΎααααααααααΆα β ααααα·ααααα· ααααΎαααΆαααΆααααααααΆ, ααααΆαααα α αΆααααααΎαααααΆααααα‘αΎααα·α, ααΈαα½αα ααα‘αΎααααα ααα‘αΎααα·αα ααααα·αααΎααααΆααα·αααΆααααααααΆαα’αΆααααααααααΆαααααα αααααααΆαα’αααΈααΎαα‘αΎαααα
- αααα»αα’αα‘α»ααααααααΎαααΆαααα’αΆααα ααααΆαααααΌαααΆαααααΎαα αα α»ααααααααΆααα·αααΎαααΈααααααα ααΆα’αΆα αα αα½α αααααΆαααΆαααΌαααααΉααα½ααααα αΌαααΆαα’αΆααααα α αΎαααααΆα ααααΆαα’αΆααααααα·αααΆαααααα
- ααααα·αααΎ Puppet ααααΆααααααΌαααααΆαααΆαααααααΆα ααααΆαααΉαααααΎααΆαααΌαααααΉααα ααΆααααααΆαααΆααα’αααααααΆαααΆαααΆα
- ααααα·αααΎααααΆαααααΌαααΆαααααΎαα αα α»ααααααααΆα ααΆααααΎααΆαααΌαααααΉααα ααΆααααααΆαααΆααα’αααααααΆαααΆαααΆα
αααααααΆααααΆαααΆααααααααααα·αααΆααααααΆαα
ααΆααααα½α ααααα·αααΎαααΆαααΆααααααααααΆααα½αα
ααα½ααα·αααΆααααααααααΆαααΎα α αΎααααΆαααΆααααααααααα·αααααΌαααΆααααααΆαααα
αααα»α manifest ααα Puppet ααΉααα·αααααΆααααααΌααααααααααααααα·ααααααααΆααααααΆααααααααΌαααααΆαα
ααΎααααΆαααααααα α§ααΆα αααααααα·αααΎααααΆααααααααα α―αααΆα αααΆαααΆαααααααα·αααΆααααααΆαα owner
αααααΆαααα Puppet ααΉααα·αααααΆααααααΌαααα
αΆααα―αααΆααααααααΌαααααΆαααααα
ααΆαααααΆαα’αααΈααααΆαα α’ααα αα·ααα·ααααα
α§αααΆααΆααΎαααΆαααααΆααααΆα
αααΎααααααΆααααααααΌα
ααααΆααααΆαααααααα
ααΆαααααααα ααα»ααααααααΆαααΆααα»αααααΆααααα - ααΎαα·αααΌα
ααααααααΎαα’αΆα
αααααΆααΆααΆααα’αααααα»ααα½ααααα»αα node {}
. ααΆααΆααα·αααΆαα α’αααα’αΆα
α
αααααααααααΌα
ααααΆααααα·αααααΆαααααααα
ααΆαααααααα ααα»ααααααΆααΌαα
αααααΊααΆαααααααααΆααα·αααα’ - ααΆαααααααα
ααΆααααααααααΈαα
ααααΎα α αΎαααααα·αααΎα’αααααααΆααααααΌααααααααΌαα
ααααΆαααααα α’αααααΉαααααΌαααααααα½αααΏαααΌα
ααααΆαα
ααααααααΆα
αααΎαα αααα»ααααααΆαα½αααααΆααα ααΆααΆααααα½ααααα»αααΆαααααΎαα»α α αΎαααΆααΌαα
αααααΆααα DRY (αα»αααααΎαααααααααααααα½αα―α) ααααΌαααΆααααααΎαα‘αΎααααααΆααα ααα»αααα½αα
ααΎααααΈαααααααΆααααα αΆαααααΆαααΆααα ααΆααΌα ααΆ ΠΊΠ»Π°ΡΡ.
ααααΆαα
ααααΌαααααΆααααααΌααα·αααααΆα ααΆααα·αααααΆαααα½αααΆαα·αααααααααααΆααα ααααααααΆαα½αααα ααααΆααααααΌαααΆααα·αααααΆαα αααα»α manifests:
# ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° 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 ααΆαα½αααΉαααΆαααααααα ααΆααααααααααΆαα½αα
ααΆα’αΆα
ααααΎαα
ααΆα
ααα α·ααααα»αααΆααα α’ααααα αααα»αα’αΆαααααΊαα·αα’αΆα ααααΆααααααΌαααΆα!
ααΎαααΈααα α’αααα’αΆα
α
αΌαααααΎααΆααα»αααααΆααααΆααααΌαααΆααααααΆα ααΎαα·αααΌα
αααααα αααααααα’αααααΉαααααΌαααΆα undef
.
α§ααΆα αααααααΆαααααΎααΆαααΆαα½αα’αααα
# ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
$var5 = $var6
file { '/tmp/text': content => $variable }
# ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
β ΡΠ°ΡΠΊΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π² ΡΡΡΠΎΠΊΠ°Ρ
. Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² Π΄Π²ΠΎΠΉΠ½ΡΡ
ΠΊΠ°Π²ΡΡΠΊΠ°Ρ
!
$var6 = "Variable with name variable has value ${variable}"
α’αΆαααααΆα α αααααααααα, αα·αα’ααα, ααααα ααΆα, ααΆα αααααααααΆαααΎαααΎαα α’αααβαααβααΆαβαααααβααΌα ααααΆβα’αΆα βααααΌαβααΆαβαααααβαααα»αβα αααααβαααααβαααααβααααΆα αα αααβαααααααΆαβαααααβααβα’ααα α’αααβααααΌαβααΆαβαααααααβαααα»αβααα αβαααααβαα αα α»αααααα αααααΆααβααβαααα»αβα αααααβαααααβαααβααΆαβαα·αβααααΆαα α αΎαβααΌα ααααβαα ααΎα
α§ααΆα αααααααα ααααααα
- ααα - α’ααααα ααΆααααα ααααΆααα¬ααΆααα·αααααΆααααΆαααα ααΈααα;
- node namespace αα αααα»αααΆααα·αααααΆααααΆαα;
- class namespace αα αααα»αααΆααα·αααααΆααααΆααα
ααΎααααΈαααααΆαααΆααα·αα αααΆααααΆαααα αααα αΌαααααΎα’ααα α’αααα’αΆα αααααΆαα namespace αααα»ααααααα’αααα
# ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±Π΅Π· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½
$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
}
αααααΆαααΆαααΆαααααα§ααΆα ααααααααΆααααααα±ααααΊαα·αααα’ααααΈαααααααΆα "α ααααααΉααααααΆαα" ααααα ααααααααΆαα½ααα αααα»αααααΆααα’ααααααααΆαααααααααααααα·ααααααααααααααααΌαααΆαααααΎα ααΆααΆααααααααΉαααααΌααααα»αααΆαααααΎα±ααα ααααααΉααααααΆαααααααααΌαα - ααααΆααα’αΆα ααΆααααΆαααΆααααααα
αααΆαααΆααααααααααΆαα ααΊβααΆβα’αααβαααα»αβααα αβαααααβααααΆαα αα½αβααΆβααααΌαβααΆαβαααααΆααβαααα»αβααααααΆβααααΆαα α αΎαβα’αΆα βααααΌαβααΆαβααααΎβααΌα βααΆβα’αααβααααααΆβαααα»αβαα½βααααΆααα ααααααααΆαααΆααααααααααΌαααΆααααααΆαααα αααααααΎααααΆαααααα»α manifest α
αααΆαααΆααααααα’αΆα ααααΌαααΆαααααααα ααΆαααααααααΆαααΎαα ααααα·αααΎαααΆαααΆαααααααα·αααΆααααααααααΆαααΎα α αΎαααααααα·αααααΌαααΆαααααααα αααααααΎ ααΆααΉααααααΆαα±ααααΆαααα α»ααααα»αααΆαα αααααα
α
αΌαααΎαααααααααΆαααΆααααααααααΆααααΈα§ααΆα αααααΆαααΎ α αΎααααααααααΆαααΆααααααααΈαα ααΈαα½α ααΆαααΆα ααΊααΆααααΌααα
ααΆααααΆαααααα α αΎαααΈααΈα ααααα
α
α·ααα ααΊααΆααααααααα
ααααΆαα½α 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', # Π·Π°Π΄Π°ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ° ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠ΅ΡΡΡΡΠΎΠ²
}
}
αα
αααα»αα’αΆααα α’αααααααΌαααΆαααΆααααα
αΌαα ααα·ααα
ααααααααααΌαααΆααααααααααΆαααα»αααααααααΆαααΆααααααα
class example (
String $param1,
Integer $param2,
Array $param3,
Hash $param4,
Hash[String, String] $param5,
) {
...
}
ααααΆααα αα½ααααα αΌααααααααααΆαα αα·αααααΆαα{'αααααααααΆαα':}
ααααΆααααΈαα½ααααΊααΆααααΆααααααααα ααααΆαα. ααΌα ααΉαααααααααααΆαααααααααααα αα·αα’αΆα ααΆαα§ααΆα αααααΈαααααααΆααααΌα ααααΆαα ααΎααααΆααααΌα ααααΆα
ααααα·αααΎα’αααααααΆααΆαααααααααααΆαααα½ααα
ααααΆααααΌα
ααααΆααΈααααααααααΎ class { 'classname':}
(αα·αααΆαααΆααα»ααααααααααΆ ααΆαα½αααΉααααΆαααΆαααααααααααααααΆ α¬ααΌα
ααααΆααααα·α) ααΆααΉαααΆαααα α»ααααα»αααΆαα
αααααα ααα»ααααααααα·αααΎα’αααααααΎ class αααα»ααα
ααΆαααααααααΆα α’αααα’αΆα
ααααααααΆαααΆααααααααααααΆααΆααα’αααααΆαα
αααΆααααΆααααααΆαααα
αααα»α manifest α
ααααααΆαααΆαααααααααα·αααΎα’αααααααΎ include
αααααΆαααα ααααΆααα’αΆα
ααααΌαααΆαααααααα
αααΎαααααΆαααΆαα
ααααΆαα ααΆααα·αααΊααΆ include
ααΊααΆαα»αααΆα ideempotent ααααα·αα·αααααΎαααΆααΎ class ααααΌαααΆααααααααα
directory αααα¬ααα ααααα·αααΎααααΆαααα·αααΆααα
αααα»ααα ααΆααααααααΆ α αΎαααααα·αααΎααΆααΆααα½α
α αΎα ααΆαα·αααααΎα’αααΈααΆααα’ααα ααα»αααααααα»αααααΈααααΎ include
α’ααααα·αα’αΆα
ααααααααΆαααΆααααααααααΆααααα‘α»αααααααααΆαααααΆααααΆααα - αααΆαααΆαααααααααααααΌαααΆαααΆααα’ααααααΌαααααααααα
αααα»αααααααα·ααααααααΆααααα
- Hiera α¬ ENC α ααΎαααΉααα·ααΆαα’αααΈαα½ααααα
αααα»αα’ααααααααααΆααα
ααααα
ααΌα αααααΆααα·ααΆααα αααα»ααααα»ααα»α ααααΆααααΌα ααααΆαα·αα’αΆα ααΆαααααααΆααα ααΎ node α αααΎαααΆαααααααα ααααααΆαααΆααααα αααα»αααααΈαααα α’αααααααΌαααΆαααΎααααΈα’αΆα ααααΎαααα»αααΌα ααααΆααααΌααααααΆααααΆαααΆαααααααααααααααΆαα ααΎααααΆααααΌα ααααΆα αααααΆαααα ααααΌαααΆαααααααααααΆαααααΆαααααα½αα
α§ααΆα ααα ααΎααααΈααα‘αΎααααΌαα»α PHP ααΎαααααΎααΌα ααΆαααααααα αααα»α Avito:
- ααα‘αΎααααα ααααΆαα½ααααΌαα»ααααα
- ααααααααΎαα―αααΆαααααααα ααΆαααααααααααααΆαααααΌαα»ααααα
- ααΎααααααΎα symlink αα config αααααΆαα php-fpm α
- ααΎααααααΎα symlink αα config αααααΆαα 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
ααα»αααααααα»αααΉαααααΆααα’αααα’αααΈααΆαα
αααααααααΆααα
ααΆαα’αΆααααα αα·αααΆαααΌαααααΉααααααΆααααααΆαα αα·ααα·ααααα
ααααΆαα αα·ααα·αααααααααααα αααΆααααΆααααααααΎααααΈαααααααΆαααΆαα’αΆααααα αα·αααΆαααΌαααααΉαα
- ααΆαα’αΆααααααα ααΎ class/define ααααααααΆαα’αΆααααααα ααΎααααΆαααΆααα’αααα class/define;
- ααααΆαα/αααααααΆαα’αΆααααα ααααααααΆαα’αΆααααααα αααααααααΆαα/αααααααααΆαα
- class/define notification ααΌαααααΉαα’αααΈααααΆαααΆααα’αααα class/define;
- class/define subscription ααΆαααααΆαααΆααα’αααα class/defineα
ααα ααααΈαααααααΆαααααΆααααααααα αα·ααααααΎα
if
ααΆααΆαααααα ααΈαααα
if ΠΠ«Π ΠΠΠΠΠΠ1 {
...
} elsif ΠΠ«Π ΠΠΠΠΠΠ2 {
...
} else {
...
}
αα»αααααΆαα
αα»αααααΆααααΆ if αααα αααΆαα αααα»αααααΌαααΉαααααΌαααΆαααααα·ααααα·ααααα·αααΎαααααααα·ααα·αα
unless ΠΠ«Π ΠΠΠΠΠΠ {
...
}
ααααΈ
αα·αααΆαα’αααΈαααα»αααααΆααα ααΈαααααα α’αααα’αΆα ααααΎαααααααααααΆ (ααααα’αααα αααααα) ααααααααααααΆ αα·ααααααααα·ααααααααΆαααααα
case ΠΠ«Π ΠΠΠΠΠΠ {
ΠΠΠΠ§ΠΠΠΠ1: { ... }
ΠΠΠΠ§ΠΠΠΠ2, ΠΠΠΠ§ΠΠΠΠ3: { ... }
default: { ... }
}
α’αααααααΎαααΎα
α§αααααααααΎαααΎαααΊααΆααΆααΆαααααααααααΉα case
ααα»αααααααα½αα±ααααΆαααααα·ααααα·αααα»αααααΌα ααΆαααα‘ααααααααα½αα
$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }
αααΌαα»α
αα ααααααααΆαααααααα ααΆααααααααααΌα ααΆα’αΆα ααααΌαααΆααααααΆαα»ααααΆαααΆααααα½ααα αααα»αααΆααααα αΆααα½αα ααα»ααααααΆαααααααα ααΆααααααααααΆααααα αααΎααααααΎααααααΆ ααααΆαα αα·αααααΆααααΆαααΆααααα αααΎααα αααα»αααΆααααα αΆα ααΆααΉαααΎαα‘αΎα α αΎαααΆααααΆαααΆααΆααα’αΆαααα’α½ααααα»αααΆαααααΎααΆαααΆαα½αα
ααΎαααΈαααααα ααΆααααα αΆααααΆαααααΎααααΆααααΌαα‘αΎααα·α - αα ααααααααΌαααΆααα’αααααα·ααα αααα»αααΆααααα αΆααααα½α ααΆαα·ααΆααααα»αααΆαα αααααααααΌααααααΆαα½αα’ααααααα ααΎααααΈαααααααΆααααα αΆααΆααααΈαααα Puppet ααΆαα’αααααΆααα½αα α ααΆ αααΌαα»αα
αααΌαα»α - ααΆαααααααΊααΆαααα»αααααααΆαα αα·ααααα αα·αα’αααααΆαα’αΆααααααααααααααααΆαααααα»αααααΆα ααααα‘αααα½αα αααααΆααα·αααα αααΌαα»αααΊααΆαααααα―αααΆααααααααααα·ααααΆα’αΆαααα α§ααΆα ααα ααΆα’αΆα ααΆααααΌαα»ααααααΆααααααΎααΆαααΆαα½α nginx α αΎαααΆααΉαααΆαα’αααΈαααααααΌαααΆααααααΆααααααΎααΆαααΆαα½α nginx α¬α’αΆα ααΆααααΌαα»ααααααΆααααααΎααΆαααΆαα½α PHP α αΎαααΌα αααααα ααΎα
αααΌαα»αααααΌαααΆααααα α αΎαααΆαα’αΆααααααααααΌαα»ααα
ααΎααααΆαα
αα·ααα
ααααααααΌαααΆαααΆαααααααααα ααΆαααααΆααααΎαα
αα αααααΌαα»α -
αα ααΎαααΆαααΈααα α’αΆααα αααΌαα»αααΆαααΈααΆαααα αααα»ααααααααΌαα»αααααα«αα αα ααΆααααα»ααααΌαα»αααΈαα½ααααΆααααααααΆααααααααααααΆα - ααΆααααα αΆαα―αααΆα ααααΌ lib αα·αα’αααΈαααααααααα
αα ααΆααααααααα―αααΆααα αααα»ααααΌαα»α
α«ααααααΌαα»αα’αΆα ααΆαααααΆαααααααααααΆαααααααα·αααααΆα
manifests
- ααΆααΆα manifestosfiles
- ααΆααΆαα―αααΆαtemplates
- ααΆααΆαααααΌlib
- ααΆααΆααααααΌα Ruby
ααααα·ααααααΆαααααΈαααααααααα αα·αα―αααΆαααααα ααα»ααααααΆαααααααααΆαααααααΆααα’αααααααααααααΆααααααααα
αααααααααΆα αα·ααααααα―αααΆααααα»ααααΌαα»α
ααααΆα (ααααΆαα αα·ααααα) αααα»ααααΌαα»ααα·αα’αΆα ααΆαααααααα’αααΈαααα’αααα αΌαα α·αααααΆαααα ααΎαααΈααα ααΆαααΆαααααΎααααααααααααΆαααααΆααααααααααααΆα αα·ααααααααα―αααΆαααα Puppet ααΉααααααααααΆααα·αααααΆα’αααΈααααΆααααα ααααα·αααΎα’αααααααΆαα αααΆααααΆααααααα ααα Puppet ααΉααα·ααααααααααΆααα·αααααΆααααΆααα α αΎαα’αααααΉαααα½αααΆαααα α»ααααα»αααΆαα αααααα
α αααΆααααΊααΆααααα
- ααααΆαααΆααα’αααα
αααα»ααααΌαα»αααααΌααααααα·ααα
αααα»αα
αααααααααααααΌαα»αα ααααα·αααΎαααΌαα»αααααΌαααΆαα α
foo
αααααΆααααααααΆαααΆααα’αααα αααα»αααΆααααΌαααααΆααααααfoo::<anything>
α¬ααααΆααααfoo
. - ααααΆααααααΆαααααααααααααΌαα»αααααΌαααααΆααα
αααα»αα―αααΆα
init.pp
. - αααααΆααααααΆααααααααα αααααααΆαααααΆαααααααα―αααΆαααΆαααΌα
ααΆααααααα
- αα»ααααααααααΆαααααααααΌαα»αααααΌαααΆααα»αα αα
- ααααααααααααααΆααα’αα ααΎααΆα ααααΌαααΆααααα½αααααααααΆα α»α
- αααααααααααααααΌαααΆααααααα
.pp
αααα»αααΉααααα αΆαααΆαα½αα§ααΆα ααααα½αα α§αααΆααΆαααα»ααααα»αααααααααΌαα»α nginx
. ααΆααΆαααααΆαααΌα
ααΆααααααα
- ΠΊΠ»Π°ΡΡ
nginx
ααΆααα·αααααΆαα αααα»αααΆααααα αΆαinit.pp
; - ΠΊΠ»Π°ΡΡ
nginx::service
ααΆααα·αααααΆαα αααα»αααΆααααα αΆαservice.pp
; - ααααα
nginx::server
ααΆααα·αααααΆαα αααα»αααΆααααα αΆαserver.pp
; - ααααα
nginx::server::location
ααΆααα·αααααΆαα αααα»αααΆααααα αΆαserver/location.pp
.
αα»ααα
ααααΆααβααΆααβα’αααβαααα½αβα―αβααΉαβααΆβα’αααΈβααΆβααααΌ αααα»αβααΉαβαα·αβαααααΆααβαααα’α·αβαα
βααΈαααβααα ααα»αααααααα»αααΉααα»αααΆα
αααααα»αααααΈ
ααααααααΎαα»αααα α’ααααααααααααΌα’αΆα
ααααΌαααΆααααααΈααααααααΎαα»αααΆααα½αα template
αααααααΌαααΆαααααααΆααααααΌααα
ααΆααααααΌα αααααΆααααααΆααααααααα α―αααΆα ααααΎαα½αααααΆααΆαα½ααααΆαααΆαααααα content
. α§ααΆα αααααΌα
αααα
file { '/tmp/example': content => template('modulename/templatename.erb')
ααΎαααααΌα <modulename>/<filename>
αααααααααα―αααΆα <rootdir>/modules/<modulename>/templates/<filename>
.
ααΎαααΈααααααααΆααα»αααΆααα½αα inline_template
- ααΆααα½αα’αααααααααΌααΆααΆααααα
αΌα αα·αααααααααα―αααΆαααα
αα αααα»αααααΌ α’αααα’αΆα ααααΎα’ααα Puppet ααΆααα’αααααα»ααα·ααΆαααΆααα αα α»ααααααα
α’αΆαααααΆααααααααΌαααα»ααααααα ERB αα·α EPPα
αααααααααα’αααΈ ERB
αα ααΆαααααααααααα½ααα·αα·αααα
<%= ΠΠ«Π ΠΠΠΠΠΠ %>
- αααα αΌαααααααααααααα<% ΠΠ«Π ΠΠΠΠΠΠ %>
- ααααΆααααααααααααα (ααααα·ααααα αΌαααΆ)α ααα ααααΈαααααααΆαααααΆααααααααα (ααααα·αααΎ) αα·αααααα·ααα»α (ααΈαα½αα) ααΆααααααΆαα ααΈαααα<%# ΠΠΠΠΠΠΠ’ΠΠ ΠΠ %>
αααααααα αααα»α ERB ααααΌαααΆααααααααΆ Ruby (ERB ααΊαα·αααΆαααααα Ruby)α
ααΎααααΈα
αΌαααααΎα’αααααΈ manifest α’αααααααΌααααααα @
αα
αααααα’αααα ααΎααααΈαα»αααΆαααααααααααΆαααααααα
α‘αΎααααααΆααααΈααΆαααΆααααααααα»αααααΆ α’αααααααΌαααααΎααααΆααα·α -%>
.
α§ααΆα αααααααΆαααααΎααααΆααααααΌ
α§αααΆααΆαααα»ααααα»αααααααααΌαα»αααΎααααΈααααααααα ZooKeeper α ααααΆαααααααα½ααα»αααααΌααααα»αααΆααααααΎα config ααΎααα ααΌα αααα
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 ααΆαααααααΆαα α ααΆααΆααα·αα α’αααα ααα» - αααααΊααΆααααααΆαα’αααΈααααΆαααααααΆααα αααα»α manifests αααα»αααααααααΆα’αααααααααΆαα αααα»α namespace αααα α§ααΆα ααα ααααααααΆαααΈα ααααααααααααααααα·ααααα·ααΆα ααααΆααααααααααααΎαααΆα αααααΈα’αααααααΎααααΆαα αααααΈα ααα»α αααααΆαααααααΆα αα·αα’αΆααααααΆααααααα½ααα αα·αα αααΎααααα ααΆααα·αααΆααα αααα»α manifests αα·α templates ααΆα’αααααααααΆα
α§ααΆα αααααααΆαααααΎααΆαααΆαα½αααΆααα·αα
notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ΡΠ΅ΡΡΡΡ ΡΠΈΠΏΠ° notify ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ³
αα·ααΆαααΆααααΌαααΆα ααΆααα·ααα½αααΆαααααα (ααααα’αααα) αα·αααααααα½α (ααααααααααααααΆαα ααααα’αααα α’αΆαα αα
ααΆαα»αααα)α ααα·ααα
αααα»αα’αα‘α»ααααααααα·ααααα·ααΆα ααααΆααααΆαα’αΆαααααααΌαα ααααα’ααααααααΌαααΆααα·ααααααΆαααΆααα’ααααΈ pappetserver αα ααΆααααααΆαα αααααΆααααααΆααΎαααααΎαααΆααα½αααΆ α αΎαααααΎααΆααα·αααααααααΌαααΆααα αααΆαααΈαααα αααααΆααααΈααα αααΆαααΈαααα αΆααααααΎαα αααααααΆααΆα‘α»αα
ααΆααα·ααα αααα»αααααααααα―αααΆααααα’αΆα ααααα·ααααα·ααΆαα
ααΆααα·αααααααααααΌαααΆαααΆαααα
αααα»ααααΌαα»ααα
αααα»ααα facts.d
. ααΆααΆααα·αααΆαα α―αααΆαααααΌαααα’αΆα
ααααα·ααααα·ααΆαα αα
αααααααΎαααΆα αα½αααααααΌααααααα
ααααααααΆααα
ααΆαααααααααααααΆαααΆαααααα YAML α¬ key=value formatα
αα»αααααα ααΆααΆααα·αα’αα»ααααα ααααααααΆααααΆααα’αααααααααΌαααΆααααααααααααααααΆαααΈααα poppet ααααααΌαα»αααααα’αααααααΌαααΆαααΆαααααααΆαα ααΌα αααααα αααα»αααααααΈα ααΌαααα α·ααααα»αααΆαααα·αα·αααααΎαααΆααααααααααΆααααααα·ααΈ αα·αα―αααΆαααΆααα’αααααα αΆαααΆα ααααααΆααααΆααα·αααααα’αααααΎααααΈααααΎαααΆαα
#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'
ααΆααα·α Ruby
ααΆααα·αααααααααααΌαααΆαααΆαααα
αααα»ααααΌαα»ααα
αααα»ααα lib/facter
.
# Π²ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Facter.add Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΊΡΠ° ΠΈ Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°
Facter.add('ladvd') do
# Π² Π±Π»ΠΎΠΊΠ°Ρ
confine ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΠΊΡΠ° β ΠΊΠΎΠ΄ Π²Π½ΡΡΡΠΈ Π±Π»ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ true, ΠΈΠ½Π°ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠ° Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ
confine do
Facter::Core::Execution.which('ladvdc') # ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ Π² PATH Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ»
end
confine do
File.socket?('/var/run/ladvd.sock') # ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ Π΅ΡΡΡ ΡΠ°ΠΊΠΎΠΉ UNIX-domain socket
end
# Π² Π±Π»ΠΎΠΊΠ΅ setcode ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΡΠ°
setcode do
hash = {}
if (out = Facter::Core::Execution.execute('ladvdc -b'))
out.split.each do |l|
line = l.split('=')
next if line.length != 2
name, value = line
hash[name.strip.downcase.tr(' ', '_')] = value.strip.chomp(''').reverse.chomp(''').reverse
end
end
hash # Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π±Π»ΠΎΠΊΠ΅ setcode ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΊΡΠ°
end
end
α’αααααααΆααα·α
ααΆααα·αααααααααααΌαααΆαααΆαααα
ααΎααααΆαααα
αααα»ααα /etc/facter/facts.d
αα
αααα»αα’αΆαααα
αΆααα¬ /etc/puppetlabs/facts.d
αα
αααα»αα’αΆαααααααΈα
examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue
ααΆαα αΌααα ααΆααααΆααα·α
ααΆααα·ααΈααΈααααΆαααΎααααΈαααααααααΆααα·αα
- ααΆαααααα
ααΆαα»αααα
$facts
:$facts['fqdn']
; - ααααΎααααααα·αααΆαααααα’αααα
$fqdn
.
ααΆααΆααΆαααα’αααα»ααααα»αααΆαααααΎαα
ααΆαα»αααα $facts
α¬αααααΎαααΆαααα α
ααα’α»ααααα αΆαα
ααααααααααααα ($::facts
).
α’ααααααααααΆααααααΆαα½α
αααα
ααΈααΆααα·αααααΆααααα
- α’αααα ααα»αααα’αΆα αα»αα α·αααααΆαα β α’αααβαααβααααΌαβααΆαβααβα ααβααΈβαα·ααααΆααααααβααααβα’αα·αα·αα (α αΆααααΆααααΈβαα·ααααΆααααααβααααΌαβααΆαβα ααβααΆβααααααΆβαα βααΎβαααΆαααΈαβαααααΎ poppet ααααΆααααΆαβαα·αβα’αΆα βααααΆααβααβααβαα·αβααααΆααβααααΌβαβαα·ααααΆααααααβααααβαααα½αβααΌα ααααβα’αααβααααΌαβααΆα "αα»αα α·ααα"): αααααβααβαα·ααααΆαααααα αααααβαααα αααΆαααΈα αα·αααα αααααααααααααΈαα·ααααΆααααααα
- ααΆααα·ααααααααΆαααΈααα -α’αααβααΆααααβααΉαβααααααΆαβα’αααΈβαααΆαααΈαβααβαααα ααααα α’αΆααααααΆα 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
.
αααΆαααΈααα
αααα»αααΉααα·ααα·α αΆαααΆα’αααΈααΆαααα‘αΎααααααααα pappetserver αα·αααΆαααΆαααααααΆαααΌααα ααΆαα αααα»αα’αααααααααα αααα»αααΉααα·ααΆαααΆα ααααΈαααα’ααααΆααααααα»αααΆααααααααααααΆαααΈαααααααα·αααααΌαααΆαααΆααααααααααααααΎααααΈααααΎααΆαααΆαα½αα ααα½αααΌα αα½ααα ααααΆαα (αα·ααΆααα αΌαααααα½ααα) α ααααΆαααα½αα ααα½αααααΉααααααΌαα±ααααΆαααΆααααααααΌα - ααΆαααααΆαααΎα αααΆαααΈαααα’αΆαααααΎαααααΎαααΆααα·αααΎαααΈαααααααα½αααΆαα ααΎααααΈααααΎαααΆαααΆααααα αααΎα α’αααααααΌααααααΎαα ααα½ααααααα½ααα α αΎααα»αααααα αααααΎαααααααααα’αααα αα αΆα ααΎαα·αααΌα αααααααααΆαααΈαααααΉααααααΌαααααΆαααΆαα αααΎαα
ααΆαααΆαααααααΆαααΌα - ααααα·αααΎα’αααααααΌαααΆαααΆααΏα αα·αααΆααααα½α αααααΆααααααΎα (αα
r10k)[
α§αααααααααααΈ 2α ααΆαααααΆαα’αααΈααΆααααααααΌα
- ααΆαααααααα·ααααΆααΆααα’αααα αααα»αααααΆαα αα·ααα·αααααα
- αααααΆααααΆαα αα·ααα·ααααααα αααα»ααααΌαα»α αα·αααααα αααα»α manifests ααααα·αααααΆα’αααΈααααΆααααα
- ααααΎααΆααα·αα
- αα»ααααααΎα ifs αααααα’ααααΎααααααααΆαααΈαα
- ααΆαα’αΆααααααααααΈαααα»αααΆααααααααααΆαααΆαααααααααααΆααααααΆαα αα·ααα·ααααα - ααααααααΎαααΆααααααα·ααααΆαααααΆαααα αααα»ααα½ααααααΆαα/αααααα
αααα»αααΉαααααααααΈααΌαα ααα»ααααααα»αααααΆαα’ααααααΎαααααααα αααα»αα’ααααααααααΆααα
ααα ααααΈααααα·ααααΆα
ααΌααααα ααααΆαα½αααΉαααΆαααααΆαα αα αααα»αα’ααααααααααΆαααααα»αααΉαααααΆααα’αααα’αααΈ Hiera, ENC αα·α PuppetDB α
ααΆαααα’αααααααΎααααΆαααααααΆαα
α»ααααααααα»ααααααααα’αΆα
α
αΌααα½ααααα»αααΆααααααααα·αααα
ααΆααα·αααΆααααααΆααααΆα αααΎαααα - αααα»αα’αΆα αααααα’αααααααΎαααααΆαααααΆαααααα ααααααααααΎα’αααΈαααα’αααα ααα’αΆαα’αααΈα
- 59,1%αααααα’αΆαααααααα·αααααα - ααααα·ααααααΆαααα½αα ααα½αα ααααα·ααα»α ααΆαααααΎαααααΈ αα·ααααααα lambda αααααααα α’ααααααααΌαααααΆα ααααΆααααααΆαααΆαα αα αα·αααΆαααααΆααααααα’αααααααΆαααΈαααΆααααα’αΆααα ααααΆα α’ααααααααααααΆ αααααααα·ααααααα’ααΌααΈα13
- 31,8%"αααα»αααΆα’ααααααααααααααααααααΆααααα»α" α¬αααααααααΎααα αααα»α Avito αααααΎααα·αααααΆαα½ααααΆαααΈααα poppet ααΆα αααΎαααααααααααααααααΆ α αΎαααΆαααααΆααααααααα’αααΈααΆαααααααααααααΆαααΈααα poppet.7
- 81,8%αααααααααΎααααααααΌαα’αΆαααα α§ααααα α―αααΆα ααΆαααααΎααααα CI/CD.18
α’αααααααΎααααΆαα 22 ααΆααααΆαααααααααα α’αααααααΎααααΆαα α§α¨ ααΆααααααΌαααΆαα αΆαααΆααα
ααααα: www.habr.com