Puppet ืืื ืืขืจืืช ืื ืืืื ืชืฆืืจื. ืืื ืืฉืืฉ ืืื ืืืืื ืืืจืืื ืืืฆื ืืจืฆืื ืืืฉืืืจ ืขื ืืฆื ืื.
ืื ื ืขืืื ืขื Puppet ืืืจ ืืืชืจ ืืืืฉ ืฉื ืื. ืืงืกื ืื ืืื ืืขืฆื ืืืกืฃ ืืชืืจืื ืืืกืืืจ ืืืืฉ ืฉื ื ืงืืืืช ืืคืชื ืืืชืืขืื ืืจืฉืื, ืฉืืืคืฉืจ ืืืชืืืืื ืืืืื ืืืืืจืืช ืืช ืืืืืช ืฉื Puppet.
ืืืืข ืืกืืกื
ืืขืจืืช ืืืคืขืื ืฉื Puppet ืืื ืฉืจืช-ืืงืื, ืื ืื ืืื ืชืืืืช ืื ืืคืขืืื ืืื ืฉืจืช ืขื ืคืื ืงืฆืืื ืืืืช ืืืืืืช.
ื ืขืฉื ืฉืืืืฉ ืืืืื ืืฉืืื ืฉื ืคืขืืื: ืืืจืืจืช ืืืื, ืืืช ืืืฆื ืฉืขื, ืืงืืืืช ืืืฆืจืื ืงืฉืจ ืขื ืืฉืจืช ืืงืืืช ืชืฆืืจื ืืืืืฉืืื ืืืชื. ืื ืขืืืช ืขื Ansible, ืื ืื ืืฉืชืืฉืื ืืืืื ืืืืคื ืืืจ: ืืื ืื ืืชืืื ืืช ืชืืืื ืืืืช ืืชืฆืืจื, ืืืงืืืืช ืขืฆืื ืื ืืืืื ืืืื.
ืืืืื ืชืงืฉืืจืช ืจืฉืช, ื ืขืฉื ืฉืืืืฉ ืืืฆืคื ืช TLS ืื-ืืืืื ืืช: ืืฉืจืช ืืืืงืื ืืฉ ืืคืชืืืช ืคืจืืืื ืืชืขืืืืช ืืชืืืืืช ืืฉืืื. ืืืจื ืืื ืืฉืจืช ืื ืคืืง ืืืฉืืจืื ืขืืืจ ืืงืืืืช, ืื ืืืืคื ืขืงืจืื ื ื ืืชื ืืืฉืชืืฉ ื-CA ืืืฆืื ื.
ืืืื ืืื ืืคืกืืื
ืืืจืืื ืืืืืื ืฉื ืืืืืช ืืฉืจืช ืืืืืืช ืืืืืจืื ืฆืืชืื (ืฆืืชืื). ืืชืฆืืจื ืฉื ืืฆืืชืื ืืชืืื ืืื ืืคืกืืื ืืฉืคืช ืชืื ืืช ืืืืืืช - Puppet DSL.
Puppet DSL ืืื ืฉืคื ืืฆืืจืชืืช. ืืื ืืชืืจ ืืช ืืืฆื ืืจืฆืื ืฉื ืืฆืืืช ืืฆืืจื ืฉื ืืฆืืจืืช ืขื ืืฉืืืื ืืืืืื, ืืืฉื:
- ืืงืืืฅ ืงืืื ืืืฉ ืื ืชืืื ืกืคืฆืืคื.
- ืืืืืื ืืืชืงื ืช.
- ืืฉืืจืืช ืืชืืื.
ื ืืชื ืืงืฉืจ ืืื ืืฉืืืื:
- ืืฉ ืชืืืช, ืื ืืฉืคืืขืืช ืขื ืกืืจ ืืฉืืืืฉ ืืืฉืืืื.
ืืืืืื, "ืชืืืื ืืชืงื ืืช ืืืืืื, ืืืืจ ืืื ืขืจืื ืืช ืงืืืฅ ืืชืฆืืจื, ืืืืืจ ืืื ืืคืขื ืืช ืืฉืืจืืช." - ืืฉ ืืืืขืืช - ืื ืืฉืื ืืฉืชื ื, ืืื ืฉืืื ืืืืขืืช ืืืฉืืืื ืืจืฉืืืื ืขืืื.
ืืืืืื, ืื ืงืืืฅ ืืชืฆืืจื ืืฉืชื ื, ืชืืื ืืืคืขืื ืืืืฉ ืืช ืืฉืืจืืช ืืืืคื ืืืืืืื.
ืื ืืกืฃ, ื-Puppet DSL ืืฉ ืคืื ืงืฆืืืช ืืืฉืชื ืื, ืืื ืื ืืฆืืจืืช ืืืืจืจืื ืืืชื ืื. ืื ืื ืื ืื ื ืชืื ืืืช ืฉืื ืื ื ืชืืืื - EPP ื-ERB.
Puppet ืืชืื ืืจืืื, ืื ืฉืจืืื ืืืืื ืื ืืืืื ืืื ืืงืืืื ืืฉื. 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, ืฉืขืืื ืืืืจ ืืืืืจ ืืื.
- ืืืจืกื ืืฉืืืฉืืช ("ืืืื ืืืฉื ื") ืกืคืจืืืช ืืืกืืก ืืืืชื
/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 ืืืงืืื ืืฆืืืช) - ืืขื - ืืืื ืฆืจืื ืืืฆืืืข ื-Symlink (ืื ื ืืชื ืืืฉืชืืฉ ืืื ืขื ืชืืื ืื ืึธืงืึนืจ)
- ืืขืืื - ืืืฉืชืืฉ ืฉืืืืจ ืืืืืช ืืืขืืื ืฉื ืืงืืืฅ
- ืงืืืฆื - ืืงืืืฆื ืฉืืืื ืืงืืืฅ ืืืืจ ืืืฉืชืืื
- ืืฆื - ืืจืฉืืืช ืงืืืฅ (ืืืืจืืืช)
- ืืืืืืจ - ืืืคืฉืจ ืขืืืื ืกืคืจืืืช ืจืงืืจืกืืื
- ืืืืจ - ืืืคืฉืจ ืืืืงืช ืงืืฆืื ืฉืืื ื ืืชืืืจืื ื-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
.
Exec
ืืคืขืื ืคืงืืืืช ืืืฆืื ืืืช. ืื ืื ืชืฆืืื ืคืจืืืจืื ืืืฆืจ, ืจืง ืื, ืืื ืื ืื ืื ืืืืคื ืจืขื ืื, ืืคืงืืื ืชืืคืขื ืืื ืคืขื ืฉ-Puppet ืืืคืขื. ืืกืืื ืืขืื ืืชืจืืืช - ืืคืขืื ืคืงืืื.
ืคืจืืืจืื:
- ืฉื ืืืฉืื - ืคืงืืื ืืืืฆืืข (ืืืคืฆืืื ืื)
- ืืคืงืืื - ืืคืงืืื ืฉืืฉ ืืืฆืข (ืื ืืื ืื ืฆืืื ื ืืฉื)
- ื ืชืื - ื ืชืืืื ืฉืืื ื ืืชื ืืืคืฉ ืืช ืงืืืฅ ืืืคืขืื
- ืจืง ืื - ืื ืืคืงืืื ืืืฆืืื ืช ืืคืจืืืจ ืื ืืืฉืืื ืขื ืงืื ืืืืจื ืืคืก, ืืคืงืืื ืืจืืฉืืช ืชืชืืฆืข
- ืืื ืื ืื - ืื ืืคืงืืื ืืืฆืืื ืช ืืคืจืืืจ ืื ืืืฉืืื ืขื ืงืื ืืืืจื ืฉืืื ื ืืคืก, ืืคืงืืื ืืจืืฉืืช ืชืชืืฆืข
- ืืืฆืจ - ืื ืืงืืืฅ ืฉืฆืืื ืืคืจืืืจ ืื ืืื ื ืงืืื, ืืคืงืืื ืืจืืฉืืช ืชืชืืฆืข
- ืืืืคื ืจืขื ืื - ืื
true
, ืื ืืคืงืืื ืชืืคืขื ืจืง ืืืฉืจ ืืื ืื ืืื ืืงืื ืืืืขื ืืืฉืืืื ืืืจืื - cwd - ืกืคืจืืื ืฉืืื ื ืชืคืขืื ืืช ืืคืงืืื
- ืืืฉืชืืฉ - ืืืฉืชืืฉ ืฉืืื ื ืืืคืขืื ืืช ืืคืงืืื
- ืกืคืง - ืืืฆื ืืืคืขืื ืืช ืืคืงืืื:
- ืคืืกืืงืก - ืชืืืื ืืื ืคืฉืื ื ืืฆืจ, ืืงืคื ืืฆืืื ื ืชืื
- ืคึผึธืึธื - ืืคืงืืื ืืืคืขืืช ืืืขืืคืช
/bin/sh
, ืื ื ืืชื ืืฆืืื ื ืชืื, ืืชื ืืืื ืืืฉืชืืฉ ืืืืืืื ื, ืฆืื ืืจืืช ืืชืืื ืืช ืคืื ืืืจืืช. ืืืจื ืืื ืืืืื ืืืืืืืืช ืื ืืฉ ืชืืืื ืืืืืืื (|
,;
,&&
,||
ืืื).
cron
ืฉืืื ื-cronjobs.
ืคืจืืืจืื:
- ืฉื ืืืฉืื - ืจืง ืกืื ืฉื ืืืื
- ืึฐืึทืืึดืืึท - ืืฆื ืืชืจ:
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}"
ืืืื ืืฉ ืืจืืื ืฉืืืช, ืืืืฉืชื ืื, ืืืชืื, ืืฉ ืืืืจ ืืจืืืช: ื ืืชื ืืืืืืจ ืืฉืชื ื ืืขื ืืืชื ืฉื ืืืจืืื ืฉืืืช ืฉืื ืื. ืืฉืคืืชืจืื ืืช ืืขืจื ืฉื ืืฉืชื ื, ืืืคืฉืื ืืช ืืืฉืชื ื ืืืจืื ืืฉืืืช ืื ืืืื, ืืืืจ ืืื ืืืจืื ืืฉืืืช ืืืงืืฃ, ืืื ืืืื.
ืืืืืืืช ืืืจืื ืฉืืืช:
- ืืืืืื - ืืฉืชื ืื ืืืืฅ ืืชืืืืจ ืืืืืงื ืื ืืฆืืืช ืืืืืื ืืฉื;
- ืืจืื ืืฉืืืช ืฉื ืืฆืืืช ืืชืืืืจ ืืฆืืืช;
- ืืจืื ืืฉืืืช ืฉื ืืืืืงื ืืชืืืืจ ืืืืืงื.
ืืื ืืื ืืข ืื ืืืืจืืช ืืขืช ืืืฉื ืืืฉืชื ื, ืืชื ืืืื ืืฆืืื ืืช ืืจืื ืืฉืืืช ืืฉื ืืืฉืชื ื:
# ะฟะตัะตะผะตะฝะฝะฐั ะฑะตะท ะฟัะพัััะฐะฝััะฒะฐ ะธะผัะฝ
$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 (ืืืืืื, ืืืฉื, ืืฉ ืืืืืืช 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,
) {
...
}
ืืืืงืืช: ืืืื ืฉื ืืืืงื ืืขืืืช ืืืืงื{'ืฉื ืืืืงื':}
ืื ืืืืงื ืืื ืืฉืื ืืกืื ืืืืชื. ืืื ืืื ืกืื ืืืจ ืฉื ืืฉืื, ืื ืืืืืื ืืืืืช ืฉื ื ืืืคืขืื ืฉื ืืืชื ืืืืงื ืืืืชื ืฆืืืช.
ืื ืชื ืกื ืืืืกืืฃ ืืืืงื ืืืืชื ืฆืืืช ืคืขืืืื ืืืืฆืขืืช class { 'classname':}
(ืืื ืืืื, ืขื ืคืจืืืจืื ืฉืื ืื ืื ืืืื), ืชืืื ืฉืืืืช ืงืืืคืืืฆืื. ืืื ืื ืืชื ืืฉืชืืฉ ืืืืืงื ืืกืื ืื ืืืฉืื, ืืชื ืืืื ืืื ืืืืืืจ ืืืคืืจืฉ ืืช ืื ืืคืจืืืจืื ืฉืื ืืื ืืคืกื.
ืขื ืืืช, ืื ืืชื ืืฉืชืืฉ include
, ืื ื ืืชื ืืืืกืืฃ ืืช ืืืืืงื ืืื ืคืขืืื ืฉืชืจืฆื. ืืขืืืื ืืื include
ืืื ืคืื ืงืฆืื ืืืืคืืื ืืืช ืืืืืงืช ืื ืืืืงื ื ืืกืคื ืืกืคืจืืื. ืื ืืืืืงื ืื ื ืืฆืืช ืืกืคืจืืื, ืืื ืืืกืืคื ืืืชื, ืืื ืืื ืืืจ ืงืืืืช, ืืื ืื ืขืืฉื ืืืื. ืืื ืืืงืจื ืฉื ืฉืืืืฉ include
ืื ื ืืชื ืืืืืืจ ืคืจืืืจืื ืฉื ืืืืงื ืืืืื ืืฆืืจืช ืืืืงื - ืืฉ ืืืืืืจ ืืช ืื ืืคืจืืืจืื ืื ืืจืฉืื ืืืงืืจ ื ืชืื ืื ืืืฆืื ื - Hiera ืื ENC. ื ืืืจ ืขืืืื ืืืืืจ ืืื.
ืืืืืจ
ืืคื ืฉื ืืืจ ืืืืืง ืืงืืื, ืืืชื ืืืืงื ืื ืืืืื ืืืืืช ื ืืืืช ืืฆืืืช ืืืชืจ ืืคืขื ืืืช. ืขื ืืืช, ืืืงืจืื ืืกืืืืื ืืชื ืฆืจืื ืืืืืช ืืกืืื ืืืฉืชืืฉ ืืืืชื ืืืฉ ืงืื ืขื ืคืจืืืจืื ืฉืื ืื ืืืืชื ืฆืืืช. ืืืืืื ืืืจืืช, ืืฉ ืฆืืจื ืืกืื ืืฉืื ืืฉืื.
ืืืืืื, ืขื ืื ืช ืืืชืงืื ืืช ืืืืื ื-PHP, ืื ื ืขืืฉืื ืืช ืืคืขืืืืช ืืืืืช ื-Avito:
- ืืชืงื ืืช ืืืืืื ืขื ืืืืื ืื.
- ืืืื ื ืืฆืืจ ืงืืืฅ ืชืฆืืจื ืขืืืจ ืืืืื ืื.
- ืื ื ืืืฆืจืื ืงืืฉืืจ ืกืืืื ืืชืฆืืจื ืขืืืจ php-fpm.
- ืื ื ืืืฆืจืื ืงืืฉืืจ ืกืืืื ื-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' }
}
ืืืจื ืืงืื ืืืืชืจ ืืชืคืืก ืืช ืฉืืืืช ืืืฆืืจื ืืคืืื ืืื ื-Define. ืื ืงืืจื ืื ืืืืืจื ืืฉ ืืฉืื ืขื ืฉื ืงืืืข, ืืืฉ ืฉื ื ืืืคืขืื ืื ืืืชืจ ืฉื ืืืืจื ืื ืืฆืืืช ืืืฉืื.
ืงื ืืืื ืขื ืขืฆืื ืืคื ื ืื: ืืื ืืืฉืืืื ืืชืื ืืืืืจื ืฆืจืื ืืืืืช ืฉื ืืืชืื $title
. ืืืืคื ืืื ืืืกืคืช ืืฉืืืื ืืืืคืืื ืืืช; ืืืงืจื ืืคืฉืื ืืืืชืจ, ืืกืคืืง ืืืขืืืจ ืืช ืืืฉืืืื ืืืฉืืชืคืื ืืื ืืืคืขื ืืืืืจื ืืืืืงื ื ืคืจืืช ืืืืืื ืืช ืืืืืงื ืืื ืืืืืจื - function include
ืืืืคืืื ืื.
ืืฉื ื ืืจืืื ืืืจืืช ืืืฉืื ืื-ืคืืื ืฆืื ืืขืช ืืืกืคืช ืืฉืืืื, ืืืืืจ ืฉืืืืฉ ืืคืื ืงืฆืืืช defined
ะธ ensure_resources
, ืืื ืื ื ืืกืคืจ ืื ืขื ืื ืืคืจืง ืืื.
ืชืืืช ืืืืืขืืช ืืฉืืขืืจืื ืืืืืจืืช
ืืืืงืืช ืืืืืจืืช ืืืกืืคืื ืืช ืืืืืื ืืืืื ืืืืคืื ืืชืืืช ืืืืืืขืืช:
- ืชืืืช ื-class/define ืืืกืืคื ืชืืืช ืืื ืืืฉืืืื ืฉื ื-class/define;
- ืชืืืช class/define ืืืกืืคื ืชืืืช ืืื ืืฉืืื class/define;
- ืืืืขื class/define ืืืืืขื ืืื ืืืฉืืืื ืฉื class/define;
- ืื ืื class/define ื ืจืฉื ืืื ืืืฉืืืื ืฉื class/define.
ืืฆืืจืืช ืืืืจืจืื ืืืชื ืื
if
ืืื ืคืฉืื ืืื:
if ะะซะ ะะะะะะ1 {
...
} elsif ะะซะ ะะะะะะ2 {
...
} else {
...
}
ืืื ืื ืื
ืืื ืื ืืื ืืคืื: ืืืฉ ืืงืื ืืืืฆืข ืื ืืืืืื ืืื false.
unless ะะซะ ะะะะะะ {
...
}
ืืงืจื
ืื ืืื ืืื ืฉืื ืืืจ ืืกืืื. ืืชื ืืืื ืืืฉืชืืฉ ืืขืจืืื ืจืืืืื (ืืืจืืืืช, ืืกืคืจืื ืืื'), ืืืืืืื ืจืืืืจืืื ืืกืืื ื ืชืื ืื ืืขืจืืื.
case ะะซะ ะะะะะะ {
ะะะะงะะะะ1: { ... }
ะะะะงะะะะ2, ะะะะงะะะะ3: { ... }
default: { ... }
}
ืืืจืจืื
ืืืจืจ ืืื ืืื ื ืฉืคื ืืืื ืืื case
, ืืื ืืืงืื ืืืฆืข ืืืืง ืงืื, ืืื ืืืืืจ ืขืจื.
$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }
ืืืืืืื
ืืืฉืจ ืืชืฆืืจื ืงืื ื, ื ืืชื ืืฉืืืจ ืืืชื ืืงืืืช ืืื ืืคืกื ืืื. ืืื ืืื ืฉื ืชืืจ ืืืชืจ ืชืฆืืจืืช, ืื ืืฉ ืืืชืจ ืืืืงืืช ืืฆืืชืื ืืื ืืคืกื, ืืื ืืื, ืืืื ืืืคื ืืืืืช ืื ื ืื ืืขืืืื.
ืื ืืกืฃ, ืืฉื ื ืืขืื ืฉื ืฉืืืืฉ ืืืืจ ืืงืื โ ืืืฉืจ ืื ืืงืื ื ืืฆื ืืื ืืคืกื ืืื, ืงืฉื ืืืืืง ืืช ืืงืื ืืื ืขื ืืืจืื. ืืื ืืคืชืืจ ืืช ืฉืชื ืืืขืืืช ืืืื, ื-Puppet ืืฉ ืืฉืืช ืฉื ืงืจืืช ืืืืืืื.
ืืืืืืื - ืืื ืื ืงืืืฆืืช ืฉื ืืืืงืืช, ืืืืจืืช ืืืฉืืืืช Puppet ืืืจืืช ืืืืืงืืืช ืืกืคืจืืื ื ืคืจืืช. ืืืืืื ืืืจืืช, ืืืืื ืืื ืืืง ืขืฆืืื ืฉื ืืืืืื Puppet. ืืืืืื, ืืืื ืืืืืช ืืืืื ืืขืืืื ืขื nginx, ืืืื ืืืื ืืช ืื ืืจืง ืืช ืื ืฉืฆืจืื ืืขืืื ืขื nginx, ืื ืฉืืืื ืืืืืช ืืืืื ืืขืืืื ืขื PHP, ืืื ืืืื.
ืืืืืืื ืื ืืขืื ืืจืกืืืช, ืืื ืชืืืช ืฉื ืืืืืืื ืื ืืื ื ืชืืืช. ืืฉ ืืืืจ ืคืชืื ืฉื ืืืืืืื -
ืืฉืจืช ืืืืืืช, ืืืืืืืื ืืืืงืืื ืืกืคืจืืืช ืืืฉื ื ืฉื ืืืืืืืื ืฉื ืกืคืจืืืช ืืืกืืก. ืืชืื ืื ืืืืื ืืฉ ืกืืืืช ืกืคืจืืืช ืกืื ืืจืืืช - ืื ืืคืกืืื, ืงืืฆืื, ืชืื ืืืช, lib ืืื'.
ืืื ื ืงืืืฅ ืืืืืื
ืืฉืืจืฉ ืฉื ืืืืืื ืขืฉืื ืืืืื ืืช ืืกืคืจืืืช ืืืืืช ืขื ืฉืืืช ืชืืืืจืืื:
manifests
- ืืื ืืืื ืื ืืคืกืืืfiles
- ืืื ืืืื ืงืืฆืืtemplates
- ืืื ืืืื ืชืื ืืืชlib
- ืืื ืืืื ืงืื ืจืืื
ืื ืื ืจืฉืืื ืืืื ืฉื ืกืคืจืืืช ืืงืืฆืื, ืืื ืื ืืกืคืืง ืขืืืจ ืืืืืจ ืืื ืืขืช ืขืชื.
ืฉืืืช ืืฉืืืื ืืฉืืืช ืงืืฆืื ืืืืืื
ืื ื ืืชื ืืงืจืื ืืืฉืืืื (ืฉืืขืืจืื, ืืืืจืืช) ืืืืืื ืืื ืฉืืชื ืจืืฆื. ืื ืืกืฃ, ืืฉื ื ืืชืืื ืืฉืืจื ืืื ืฉื ืืืฉืื ืืฉื ืืงืืืฅ ืื Puppet ืชืืคืฉ ืชืืืืจ ืฉื ืืืชื ืืฉืื. ืื ืืชื ืืคืจ ืืช ืืืื ืืฉืืืช, Puppet ืคืฉืื ืื ืืืฆื ืืช ืชืืืืจ ืืืฉืื, ืืชืงืื ืฉืืืืช ืงืืืคืืืฆืื.
ืืืืืื ืคืฉืืืื:
- ืื ืืืฉืืืื ืืืืืื ืืืืืื ืืืืืช ืืืจืื ืืฉืืืช ืฉื ืืืืืื. ืื ืืืืืื ื ืงืจื
foo
, ืื ืืฉ ืืชืช ืฉื ืืื ืืืฉืืืื ืฉืืfoo::<anything>
, ืื ืจืงfoo
. - ืืืฉืื ืขื ืฉื ืืืืืื ืืืื ืืืืืช ืืงืืืฅ
init.pp
. - ืขืืืจ ืืฉืืืื ืืืจืื, ืขืจืืช ืฉืืืช ืืงืืฆืื ืืื ืืืืงืื:
- ืืงืืืืืช ืขื ืฉื ืืืืืื ื ืืืงืช
- ืื ืืืขืืื ืืืคืืืื, ืื ืืฉ, ืืืืืคืื ืืืืืกืื ืื
- ืืจืืื ืืชืืืกืคืช
.pp
ืื ื ืืืืื ืืขืืจืช ืืืืื. ื ื ืื ืฉืื ื ืืืชื ืืืืื nginx
. ืืื ืืืื ืืช ืืืฉืืืื ืืืืื:
- ืืืชื
nginx
ืืืชืืืจ ืืื ืืคืกืinit.pp
; - ืืืชื
nginx::service
ืืืชืืืจ ืืื ืืคืกืservice.pp
; - ืึฐืึทืืึดืืจ
nginx::server
ืืืชืืืจ ืืื ืืคืกืserver.pp
; - ืึฐืึทืืึดืืจ
nginx::server::location
ืืืชืืืจ ืืื ืืคืกืserver/location.pp
.
ืชืื ืืืช
ืืืืืื ืืชื ืืขืฆืื ืืืืข ืืื ืชืื ืืืช; ืื ื ืื ืืชืืจ ืืืชื ืืคืืจืื ืืื. ืืื ืื ื ืืฉืืืจ ืืช ืื ืืืงืจื
ืืืฆื ืืืฉืชืืฉ ืืชืื ืืืช: ื ืืชื ืืืจืืื ืืช ืืืฉืืขืืช ืฉื ืชืื ืืช ืืืืฆืขืืช ืคืื ืงืฆืื template
, ืืฉืจ ืืืขืืจ ืื ืชืื ืืชืื ืืช. ืืืฉืืืื ืืกืื ืคืืื ืืฉืืฉ ืืื ืขื ืืคืจืืืจ content
. ืืืืืื, ืื:
file { '/tmp/example': content => template('modulename/templatename.erb')
ืฆืคื ืื ืชืื <modulename>/<filename>
ืืจืื ืขื ืงืืืฅ <rootdir>/modules/<modulename>/templates/<filename>
.
ืื ืืกืฃ, ืืฉ ืคืื ืงืฆืื inline_template
- ืืื ืืงืื ืืช ืืงืกื ืืชืื ืืช ืืงืื, ืื ืืช ืฉื ืืงืืืฅ.
ืืชืื ืชืื ืืืช, ืืชื ืืืื ืืืฉืชืืฉ ืืื ืืฉืชื ื Puppet ืืืืงืฃ ืื ืืืื.
Puppet ืชืืื ืืชืื ืืืช ืืคืืจืื ERB ื-EPP:
ืืงืฆืจื ืขื ERB
ืืื ื ืืงืจื:
<%= ะะซะ ะะะะะะ %>
- ืืื ืก ืืช ืืขืจื ืฉื ืืืืืื<% ะะซะ ะะะะะะ %>
- ืืืฉื ืืช ืืขืจื ืฉื ืืืืื (ืืืื ืืืื ืืก ืืืชื). ืืฆืืจืืช ืืืชื ืืช (ืื) ืืืืืืืช (ืื ืืืช) ืืืจื ืืื ื ืื ืกืืช ืืืื.<%# ะะะะะะะขะะ ะะ %>
ืืืืืืื ื-ERB ื ืืชืืื ืืจืืื (ERB ืืื ืืืขืฉื Embedded Ruby).
ืืื ืืืฉืช ืืืฉืชื ืื ืืืื ืืคืกื, ืขืืื ืืืืกืืฃ @
ืืฉื ืืืฉืชื ื. ืืื ืืืกืืจ ืืขืืจ ืฉืืจื ืฉืืืคืืข ืืืืจ ืืื ื ืคืงื, ืขืืื ืืืฉืชืืฉ ืืชื ืกืืืจื -%>
.
ืืืืื ืืฉืืืืฉ ืืชืื ืืช
ื ื ืื ืฉืื ื ืืืชื ืืืืื ืืฉืืืื ื-ZooKeeper. ืืืืืงื ืืืืจืืืช ืืืฆืืจืช ืืชืฆืืจื ื ืจืืืช ืืขืจื ืื:
class zookeeper::configure (
Array[String] $nodes,
Integer $port_client,
Integer $port_quorum,
Integer $port_leader,
Hash[String, Any] $properties,
String $datadir,
) {
file { '/etc/zookeeper/conf/zoo.cfg':
ensure => present,
content => template('zookeeper/zoo.cfg.erb'),
}
}
ืืืชืื ืืช ืืืชืืืื zoo.cfg.erb
- ืื:
<% if @nodes.length > 0 -%>
<% @nodes.each do |node, id| -%>
server.<%= id %>=<%= node %>:<%= @port_leader %>:<%= @port_quorum %>;<%= @port_client %>
<% end -%>
<% end -%>
dataDir=<%= @datadir %>
<% @properties.each do |k, v| -%>
<%= k %>=<%= v %>
<% end -%>
ืขืืืืืช ืืืฉืชื ืื ืืืื ืื
ืืขืชืื ืงืจืืืืช ืืืืง ืืกืคืฆืืคื ืฉื ืืชืฆืืจื ืชืืื ืืื ืฉืงืืจื ืืขืช ืืฆืืืช. ืืืืืื, ืชืืื ืืื ืืืืืจืช Debian, ืขืืื ืืืชืงืื ืืจืกื ืืื ืื ืืืจืช ืฉื ืืืืืื. ืืชื ืืืื ืืคืงื ืขื ืื ืื ืืืืคื ืืื ื, ืืฉืืชื ืื ืืคืกืืื ืื ืฆืืชืื ืืฉืชื ืื. ืืื ืื ืื ืืืฉื ืจืฆืื ืืช; ืืืืืืืฆืื ืืจืื ืืืชืจ ืืืื.
ืืื ืืงืื ืืืืข ืขื ืฆืืชืื, ื-Puppet ืืฉ ืื ืื ืื ืฉื ืงืจื ืขืืืืืช. ืขืืืืืช - ืืื ืืืืข ืขื ืืฆืืืช, ืืืื ืืื ืืคืกืืื ืืฆืืจื ืฉื ืืฉืชื ืื ืจืืืืื ืืืจืื ืืฉืืืช ืืืืืืื. ืืืืืื, ืฉื ืืืจื, ืืจืกืช ืืขืจืืช ืืคืขืื, ืืจืืืืงืืืจืช ืืขืื, ืจืฉืืืช ืืฉืชืืฉืื, ืจืฉืืืช ืืืฉืงื ืจืฉืช ืืืชืืืืชืืื ืืขืื ืืจืื, ืืจืื ืืืชืจ. ืขืืืืืช ืืืื ืืช ืืื ืืคืกืืื ืืืชืื ืืืช ืืืฉืชื ืื ืจืืืืื.
ืืืืื ืืขืืืื ืขื ืขืืืืืช:
notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ัะตัััั ัะธะฟะฐ notify ะฟัะพััะพ ะฒัะฒะพะดะธั ัะพะพะฑัะตะฝะธะต ะฒ ะปะพะณ
ืืืืื ื ืคืืจืืืืช, ืืขืืืื ืืฉ โโืฉื (ืืืจืืืช) ืืขืจื (ืืืื ืื ืกืืืื ืฉืื ืื: ืืืจืืืืช, ืืขืจืืื, ืืืืื ืื). ืืืืื
ืืืืื ืืคืขืืื, ืกืืื ืืืืืืช ืืขืชืืง ืชืืืื ืืช ืื ืืืกืคื ืืขืืืืืช ืืืืื ืื ืืฉืจืช ืืคืคืืื ืืฆืืืช, ืืืืืจ ืืื ืืื ืืฉืืง ืืืชื ืืฉืืื ืืช ืืขืืืืืช ืฉื ืืกืคื ืืฉืจืช; ืืืืจ ืืื, ืืฉืจืช ืืชืืื ืืืจืืื ืืช ืืงืืืื.
ืขืืืืืช ืืฆืืจื ืฉื ืงืืฆื ืืคืขืื
ืขืืืืืช ืืืื ืืืืงืืืช ืืืืืืืื ืืกืคืจืืื facts.d
. ืืืืื ืฉืืงืืฆืื ืืืืืื ืืืืืช ื ืืชื ืื ืืืคืขืื. ืืขืช ืืคืขืื, ืขืืืื ืืืคืืง ืืืืข ืืคืื ืกืื ืืจืื ืืคืืจืื YAML ืื key=value.
ืื ืชืฉืื ืฉืืขืืืืืช ืืืืช ืขื ืื ืืฆืืชืื ืฉื ืฉืืืื ืขื ืืื ืฉืจืช ื-popet ืฉืืืื ืคืจืืก ืืืืืื ืฉืื. ืืื, ืืกืงืจืืคื, ืืืื ืืืืืง ืฉืืืขืจืืช ืืฉ ืืช ืื ืืชืืื ืืช ืืืงืืฆืื ืืืจืืฉืื ืืขืืืื ืฉืืื.
#!/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
ืขืืืฃ, ืืืืื, ืืืืืืจ ืืช ืืฉืจืช ืืืืคืขืื ืกืืื ืื ืขื ืืฆืืชืื ืืืฆื ืืืื - ืืื ืืืช ืืืฆื ืฉืขื ืื ืืืืื ืืช ืืชืฆืืจื ืฉืืืจืื ืืืฉืจืช.
ืืชื ืืืื ืืืงืืช ืืช ืืืื ืืืืืคื ืฉื ืืขืืืื - ืขืืืจ ืืฆืืืช ืฉืืชื ืืขืื ืืื ืื ืืืชืื sudo puppet agent -t
. ืึทืคึฐืชึตืึท -t
(--test
) ืืืขืฉื ืืืื ืืกืคืจ ืืคืฉืจืืืืช ืฉื ืืชื ืืืคืขืื ืื ืคืจื. ืืคืฉืจืืืืช ืืื ืืืืืืช ืืช ืืืืจืื ืืืืื:
- ืื ืชืคืขืื ืืืฆื ืืืื (ืืืจืืจืช ืืืื ืืกืืื ืืชืืื ืืืฆื ืืืื);
- ืืืืื ืืืืจ ืืืืช ืืงืืืื (ืืืจืืจืช ืืืื, ืืกืืื ืืืฉืื ืืขืืื ืืืืื ืืช ืืชืฆืืจื ืืืช ืืืฆื ืฉืขื);
- ืืืชืื ืืืื ืขืืืื ืืคืืจื;
- ืืืฆืื ืฉืื ืืืื ืืงืืฆืื.
ืืกืืื ืืฉ ืืฆื ืคืขืืื ืืื ืฉืื ืืืื - ื ืืชื ืืืฉืชืืฉ ืื ืืืฉืจ ืืื ืื ืืืืืื ืฉืืชืืชื ืืช ืืชืฆืืจื ืื ืืื ื ืืจืืฆืื ืืืืืง ืื ืืืืืง ืืกืืื ืืฉื ื ืืืืื ืืคืขืืื. ืืฆื ืื ืืืคืขื ืขื ืืื ืืคืจืืืจ --noop
ืืฉืืจืช ืืคืงืืื: sudo puppet agent -t --noop
.
ืื ืืกืฃ, ืืชื ืืืื ืืืคืขืื ืืช ืืืื ื ืืคืื ืืืืืื ืฉื ืืขืืืื - ืื, โโืืืื ืืืชืืช ืขื ืื ืืคืขืืืืช ืฉืืื ืืืฆืขืช: ืขื ืืืฉืื ืฉืืื ืืขืืืช ืืขืช, ืขื ืืคืจืืืจืื ืฉื ืืฉืื ืื, ืขื ืืืื ืชืืื ืืืช ืืื ืืคืขืืื. ืืืืื ืฉืื ืคืจืืืจ --debug
.
ืฉืจืช
ืื ืืฉืงืื ืืช ืืืืืจื ืืืืื ืฉื ื-pappetserver ืืืช ืคืจืืกืช ืืงืื ืืืื ืืืืืจ ืื; ืื ื ืจืง ืืืื ืฉืืืืฅ ืืงืืคืกื ืืฉ ืืจืกื ืคืื ืงืฆืืื ืืืช ืืืื ืฉื ืืฉืจืช ืฉืืื ื ืืืจืฉืช ืชืฆืืจื ื ืืกืคืช ืืื ืืขืืื ืขื ืืกืคืจ ืงืื ืฉื ืฆืืชืื (ื ื ืื, ืขื ืืื). ืืกืคืจ ืืืื ืืืชืจ ืฉื ืฆืืชืื ืืืจืืฉ ืืืื ืื - ืืืจืืจืช ืืืื, Puppetserver ืืฉืืง ืื ืืืชืจ ืืืจืืขื ืขืืืืื, ืืืืฆืืขืื ืืืืื ืืืชืจ ืืชื ืฆืจืื ืืืืืื ืืช ืืกืคืจื ืืื ืชืฉืื ืืืืืื ืืช ืืืืืืช ืืืืืจืื, ืืืจืช ืืฉืจืช ืืืกืืฃ ืืฉืคื ืจืื ืืืื.
ืคืจืืกืช ืงืื - ืื ืืชื ืฆืจืื ืืช ืื ืืืืืจืืช ืืืงืืืช, ืื ืชืกืชืื (ื-r10k)[
ืชืืกืคืช 2: ืื ืืืืช ืงืืืื
- ืฉืื ืืช ืื ืืืืืืื ืืืืืงืืช ืืืืืืจืืช.
- ืฉืืืจ ืืืืงืืช ืืืืืจืืช ืืืืืืืื, ืื ืืื ืืคืกืืื ืืืชืืจืื ืฆืืชืื.
- ืืฉืชืืฉ ืืขืืืืืช.
- ืื ืชืขืฉื ืื ืขื ืกืื ืฉืืืช ืืืจืืื.
- ืืชื ืืืืื ืื ืืืืกืืฃ ืคืจืืืจืื ืืืืืงืืช ืืืืืจืืช - ืื ืขืืืฃ ืขื ืืืืืงื ืืจืืืืช ืืืืืื ืืืืฃ ืืืืืงื/ืืืืจื.
ืื ื ืืกืืืจ ืืืืข ืื ื ืืืืืฅ ืืขืฉืืช ืืืช ืืืืืจ ืืื.
ืืกืงื ื
ื ืกืืื ืขื ืืืงืืื. ืืืืืจ ืืื ืืกืคืจ ืืื ืขื Hiera, ENC ื-PuppetDB.
ืจืง ืืฉืชืืฉืื ืจืฉืืืื ืืืืืื ืืืฉืชืชืฃ ืืกืงืจ.
ืืืขืฉื, ืืฉ ืืจืื ืืืชืจ ืืืืจ - ืื ื ืืืื ืืืชืื ืืืืจืื ืื ืืฉืืื ืืืืื, ืืืฆืืืข ืขื ืื ืฉืชืืื ืืขืื ืืื ืืงืจืื ืขืืื:
- 59,1%ืื ืืืช ืืืืืช ืืชืงืืืช - ืงืฆืช ืืจื ืืจืื ืืืื: ืืืืืืช, ืืืคืื ืืืืืืื ืืืืื ืืืจืื, ืืืกืคื ืืฉืืืื, ืืฉืืืื ืืืืฆืืื ืืชืงืฉืืจืช ืืื ืืืจืืื ืืืืฆืขืืช Puppet, ืชืืื, ืกืคืงืื, ืกืืื ื ืชืื ืื ืืืคืฉืืื.13
- 31,8%"ืื ื ืืื ืืืช ืฉื ืืื ืฉืื" ืื ืืื ืืืืืื ืืชืืืืื ื ืขื ืืื ืฉืจืชื ืคืืคืืื ืืืจืกืืืช ืฉืื ืืช, ืืืืืคื ืขืงืจืื ื, ืืืืง ืฉื ื ืืืื ืฉืจืช ืืคืืคื.7
- 81,8%ืืื ืื ืื ื ืืืชืืื ืงืื ืืืืืช: ืืืฉืืจ, ืชืืขืื, ืืืืงืืช, CI/CD.18
22 ืืฉืชืืฉืื ืืฆืืืขื. 9 ืืฉืชืืฉืื ื ืื ืขื.
ืืงืืจ: www.habr.com