เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒ Puppet

Puppet เปเบกเปˆเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ. เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ™เปเบฒเป€เบˆเบปเป‰เบฒเบžเบฒเบšเป„เบ›เบชเบนเปˆเบฅเบฑเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเบฎเบฑเบเบชเบฒเบฅเบฑเบ”เบ™เบตเป‰.

เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Puppet เบซเบผเบฒเบเบเบงเปˆเบฒเบซเป‰เบฒเบ›เบตเปเบฅเป‰เบง. เบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบ›เปเบฅเบฐเบˆเบฑเบ”เบฅเปเบฒเบ”เบฑเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เบˆเบฒเบเป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบœเบนเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡ Puppet เป„เบ”เป‰เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.

เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒ Puppet

เบ‚เปเป‰เบกเบนเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™

เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบญเบ‡ Puppet เปเบกเปˆเบ™ server-server, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบเบฑเบ‡เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ serverless เบ—เบตเปˆเบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเบˆเปเบฒเบเบฑเบ”.

เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ”เบถเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰: เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ—เบธเบเป†เป€เบ„เบดเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡, เบฅเบนเบเบ„เป‰เบฒเบ•เบดเบ”เบ•เปเปˆเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš Ansible, เบžเบงเบเป€เบ‚เบปเบฒเปƒเบŠเป‰เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบŠเบธเบเบเบนเป‰เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™: เบœเบนเป‰เบšเปเบฅเบดเบซเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบฅเบนเบเบ„เป‰เบฒเป€เบญเบ‡เบˆเบฐเบšเปเปˆเบ™เปเบฒเปƒเบŠเป‰เบซเบเบฑเบ‡.

เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบทเปˆโ€‹เบชเบฒเบ™โ€‹เป€เบ„เบทเบญโ€‹เบ‚เปˆเบฒเบโ€‹, เบเบฒเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบฅเบฐโ€‹เบซเบฑเบ” TLS เบชเบญเบ‡โ€‹เบ—เบฒเบ‡โ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹: เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹เปเบฅเบฐโ€‹เบฅเบนเบโ€‹เบ„เป‰เบฒโ€‹เบกเบตโ€‹เบเบฐโ€‹เปเบˆโ€‹เบชเปˆเบงเบ™โ€‹เบ•เบปเบงโ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป€เบญเบ‡โ€‹เปเบฅเบฐโ€‹เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบญเบ”โ€‹เบ„เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเป€เบŠเบตเบšเป€เบงเบตเบญเบญเบเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เปƒเบซเป‰เบฅเบนเบเบ„เป‰เบฒ, เปเบ•เปˆเปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ CA เบžเบฒเบเบ™เบญเบ.

เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบš manifestos

เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบžเบฒเบชเบฒ Puppet เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ‚เบญเบ‡ puppet เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ nodes (เบ‚เปเป‰). เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเปเบฒเบฅเบฑเบš nodes เปเบกเปˆเบ™เบ‚เบฝเบ™ เปƒเบ™ manifestos เปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบžเบดเป€เบชเบ” - Puppet DSL.

Puppet DSL เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ›เบฐเบเบฒเบ”. เบกเบฑเบ™เบญเบฐเบ—เบดเบšเบฒเบเบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡ node เปƒเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ›เบฐเบเบฒเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡:

  • เป„เบŸเบฅเปŒเบกเบตเบขเบนเปˆเปเบฅเบฐเบกเบฑเบ™เบกเบตเป€เบ™เบทเป‰เบญเบซเบฒเบชเบฐเป€เบžเบฒเบฐ.
  • เบŠเบธเบ”เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡.
  • เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเป‰เบง.

เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบ™เป„เบ”เป‰:

  • เบกเบตเบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช, เบžเบงเบเบกเบฑเบ™เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ•เปเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰.
    เบ•เบปเบงเบขเปˆเบฒเบ‡, "เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ”เบ—เปเบฒเบญเบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบเป‰เป„เบ‚เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™."
  • เบกเบตเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™ - เบ–เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เป„เบ›เบซเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบˆเบญเบ‡เบเบฑเบšเบกเบฑเบ™.
    เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ›เปˆเบฝเบ™เปเบ›เบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เบšเปเบฅเบดเบเบฒเบ™เปƒเบซเบกเปˆเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, Puppet DSL เบกเบตเบซเบ™เป‰เบฒเบ—เบตเปˆเปเบฅเบฐเบ•เบปเบงเปเบ›, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบฅเบฐเบ•เบปเบงเป€เบฅเบทเบญเบ. เบเบปเบ™เป„เบเบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ•เปˆเบฒเบ‡เป†เบเบฑเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ - EPP เปเบฅเบฐ ERB.

Puppet เปเบกเปˆเบ™เบฅเบฒเบเบฅเบฑเบเบญเบฑเบเบชเบญเบ™เปƒเบ™ Ruby, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปเบฅเบฐเบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เปเบกเปˆเบ™เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™. Ruby เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฐเบซเบเบฒเบ Puppet - เป€เบžเบตเปˆเบกเป€เบซเบ”เบœเบปเบ™เบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™, เบ›เบฐเป€เบžเบ”เปƒเบซเบกเปˆเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบซเบ™เป‰เบฒเบ—เบตเปˆ.

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ Puppet เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ, manifests เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ node เบชเบฐเป€เบžเบฒเบฐเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป„เบ”เป‰เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. เบฅเบฐโ€‹เบšเบปเบš เปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐเบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ, เบ•เบปเบงเปเบ›เปเบฅเบฐเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚.

syntax เปเบฅเบฐ codestyle

เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆ syntax เบ–เป‰เบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบšเปเปˆเบžเบฝเบ‡เบžเป:

เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆ manifest เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ:

# ะšะพะผะผะตะฝั‚ะฐั€ะธะธ ะฟะธัˆัƒั‚ัั, ะบะฐะบ ะธ ะผะฝะพะณะพ ะณะดะต, ะฟะพัะปะต ั€ะตัˆั‘ั‚ะบะธ.
#
# ะžะฟะธัะฐะฝะธะต ะบะพะฝั„ะธะณัƒั€ะฐั†ะธะธ ะฝะพะดั‹ ะฝะฐั‡ะธะฝะฐะตั‚ัั ั ะบะปัŽั‡ะตะฒะพะณะพ ัะปะพะฒะฐ node,
# ะทะฐ ะบะพั‚ะพั€ั‹ะผ ัะปะตะดัƒะตั‚ ัะตะปะตะบั‚ะพั€ ะฝะพะดั‹ โ€” ั…ะพัั‚ะฝะตะนะผ (ั ะดะพะผะตะฝะพะผ ะธะปะธ ะฑะตะท)
# ะธะปะธ ั€ะตะณัƒะปัั€ะฝะพะต ะฒั‹ั€ะฐะถะตะฝะธะต ะดะปั ั…ะพัั‚ะฝะตะนะผะพะฒ, ะธะปะธ ะบะปัŽั‡ะตะฒะพะต ัะปะพะฒะพ default.
#
# ะŸะพัะปะต ัั‚ะพะณะพ ะฒ ั„ะธะณัƒั€ะฝั‹ั… ัะบะพะฑะบะฐั… ะพะฟะธัั‹ะฒะฐะตั‚ัั ัะพะฑัั‚ะฒะตะฝะฝะพ ะบะพะฝั„ะธะณัƒั€ะฐั†ะธั ะฝะพะดั‹.
#
# ะžะดะฝะฐ ะธ ั‚ะฐ ะถะต ะฝะพะดะฐ ะผะพะถะตั‚ ะฟะพะฟะฐัั‚ัŒ ะฟะพะด ะฝะตัะบะพะปัŒะบะพ ัะตะปะตะบั‚ะพั€ะพะฒ. ะŸั€ะพ ะฟั€ะธะพั€ะธั‚ะตั‚
# ัะตะปะตะบั‚ะพั€ะพะฒ ะฝะฐะฟะธัะฐะฝะพ ะฒ ัั‚ะฐั‚ัŒะต ะฟั€ะพ ัะธะฝั‚ะฐะบัะธั ะพะฟะธัะฐะฝะธั ะฝะพะด.
node 'hostname', 'f.q.d.n', /regexp/ {
  # ะšะพะฝั„ะธะณัƒั€ะฐั†ะธั ะฟะพ ััƒั‚ะธ ัะฒะปัะตั‚ัั ะฟะตั€ะตั‡ะธัะปะตะฝะธะตะผ ั€ะตััƒั€ัะพะฒ ะธ ะธั… ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ.
  #
  # ะฃ ะบะฐะถะดะพะณะพ ั€ะตััƒั€ัะฐ ะตัั‚ัŒ ั‚ะธะฟ ะธ ะฝะฐะทะฒะฐะฝะธะต.
  #
  # ะ’ะฝะธะผะฐะฝะธะต: ะฝะต ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ะดะฒัƒั… ั€ะตััƒั€ัะพะฒ ะพะดะฝะพะณะพ ั‚ะธะฟะฐ ั ะพะดะธะฝะฐะบะพะฒั‹ะผะธ ะฝะฐะทะฒะฐะฝะธัะผะธ!
  #
  # ะžะฟะธัะฐะฝะธะต ั€ะตััƒั€ัะฐ ะฝะฐั‡ะธะฝะฐะตั‚ัั ั ะตะณะพ ั‚ะธะฟะฐ. ะขะธะฟ ะฟะธัˆะตั‚ัั ะฒ ะฝะธะถะฝะตะผ ั€ะตะณะธัั‚ั€ะต.
  # ะŸั€ะพ ั€ะฐะทะฝั‹ะต ั‚ะธะฟั‹ ั€ะตััƒั€ัะพะฒ ะฝะฐะฟะธัะฐะฝะพ ะฝะธะถะต.
  #
  # ะŸะพัะปะต ั‚ะธะฟะฐ ะฒ ั„ะธะณัƒั€ะฝั‹ั… ัะบะพะฑะบะฐั… ะฟะธัˆะตั‚ัั ะฝะฐะทะฒะฐะฝะธะต ั€ะตััƒั€ัะฐ, ะฟะพั‚ะพะผ ะดะฒะพะตั‚ะพั‡ะธะต,
  # ะดะฐะปัŒัˆะต ะธะดั‘ั‚ ะพะฟั†ะธะพะฝะฐะปัŒะฝะพะต ะฟะตั€ะตั‡ะธัะปะตะฝะธะต ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ ั€ะตััƒั€ัะฐ ะธ ะธั… ะทะฝะฐั‡ะตะฝะธะน.
  # ะ—ะฝะฐั‡ะตะฝะธั ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ ัƒะบะฐะทั‹ะฒะฐัŽั‚ัั ั‡ะตั€ะตะท ั‚.ะฝ. hash rocket (=>).
  resource { 'title':
    param1 => value1,
    param2 => value2,
    param3 => value3,
  }
}

เบเบฒเบ™เบซเบเปเป‰เปœเป‰เบฒ เปเบฅเบฐ เบเบฒเบ™เปเบšเปˆเบ‡เปเบ–เบงเบšเปเปˆเปเบกเปˆเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡ manifest, เปเบ•เปˆเบกเบตเบ„เบณเปเบ™เบฐเบ™เบณ เบ„เบนเปˆเบกเบทเปเบšเบš. เบชเบฐเบซเบผเบธเบš:

  • เบซเบเปเป‰เปœเป‰เบฒเบชเบญเบ‡เบเบฐเบซเบงเปˆเบฒเบ‡, เปเบ–เบšเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰.
  • เบงเบปเบ‡เป€เบฅเบฑเบš curly เบ–เบทเบเปเบเบเบญเบญเบเป‚เบ”เบเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡;
  • เป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเบธเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเปเบ•เปˆเบฅเบฐเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต, เบฅเบงเบกเบ—เบฑเบ‡เบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ. เปเบ•เปˆเบฅเบฐเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบšเปเปˆเบกเบตเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต: เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เปƒเบ™เบซเบ™เบถเปˆเบ‡เปเบ–เบงเปเบฅเบฐเบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเบˆเบธเบ” (i.e. resource { 'title': } ะธ resource { 'title': param => value }).
  • เบฅเบนเบเบชเบญเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ„เบงเบ™เบˆเบฐเบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ”เบฝเบงเบเบฑเบ™.
  • เบฅเบนเบเบชเบญเบ™เบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ–เบทเบเบ‚เบฝเบ™เบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปƒเบ™ pappetserver

เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเปเบ™เบฐเบ™เปเบฒเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡ "เบฅเบฐเบšเบปเบšเบฎเบฒเบ". เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบเปเบกเปˆเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Puppet เบชเปเบฒเบฅเบฑเบš node เบชเบฐเป€เบžเบฒเบฐ.

เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป„เบ›เบ•เบฒเบกเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ Puppet เปเบฅเบฐเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปƒเบŠเป‰. เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™เบŠเบธเบ”เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบญเบเบฐเบฅเบฒเบ”เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปƒเบŠเป‰เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบเบฑเบš git, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบˆเบฒเบเบชเบฒเบ‚เบฒ git. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปเบ•เปˆเบฅเบฐ node เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบญเบทเปˆเบ™. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ™ node เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เบซเบผเบทเปƒเบ™ ENC, เป€เบŠเบดเปˆเบ‡เบ‚เป‰เบญเบเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›.

  • เปƒเบ™เบชเบฐเบšเบฑเบšเบ—เบตเบชเบฒเบก ("Puppet เป€เบเบปเปˆเบฒ") เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™ /etc/puppet. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ - เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เบเบฑเบš Puppet เป€เบเบปเปˆเบฒ. เบ–เป‰เบฒเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เบžเบงเบเบกเบฑเบ™เบกเบฑเบเบˆเบฐเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ /etc/puppet/environments, เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบเบˆเบฐเป€เบ›เบฑเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก. เบ–เป‰เบฒเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบเบˆเบฐเป€เบ›เบฑเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบžเบทเป‰เบ™เบ–เบฒเบ™.
  • เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบเบชเบฐเบšเบฑเบšเบ—เบตเบชเบตเปˆ ("Puppet เปƒเบซเบกเปˆ"), เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบšเบฑเบ‡เบ„เบฑเบš, เปเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบžเบทเป‰เบ™เบ–เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบเป‰เบฒเบเป„เบ›. /etc/puppetlabs/code. เบ•เบฒเบกโ€‹เบ™เบฑเป‰เบ™โ€‹เปเบฅเป‰เบง, เบชเบดเปˆเบ‡โ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เบ–เบทเบโ€‹เป€เบเบฑเบšโ€‹เป„เบงเป‰ /etc/puppetlabs/code/environments, root directory เปเบกเปˆเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก.

เบ•เป‰เบญเบ‡เบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบ manifests, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบ manifests เบญเบฐเบ—เบดเบšเบฒเบ nodes. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ„เบงเบ™เบกเบตเบšเบฑเบ™เบŠเบตเบเปˆเบญเบ modules, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเป‚เบกเบ”เบนเบ™. เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเบงเปˆเบฒเบกเบตเป‚เบกเบ”เบนเบ™เปƒเบ”เปเบ”เปˆเบ•เปเปˆเบกเบฒ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, Puppet เป€เบเบปเปˆเบฒเบเบฑเบ‡เบญเบฒเบ”เบˆเบฐเบกเบต subdirectory files, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเป„เบŸเบฅเปŒเบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ„เบฑเบ”เบฅเบญเบเป„เบ›เบ—เบตเปˆ nodes. เปƒเบ™ Puppet เปƒเบซเบกเปˆ, เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เป‚เบกเบ”เบนเบ™.

เป„เบŸเบฅเปŒ Manifest เบกเบตเบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบ .pp.

เบชเบญเบ‡เบชเบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ•เปเปˆเบชเบนเป‰

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡ node เปเบฅเบฐเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™

เปƒเบ™ node เป„เบ”เป‰ 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 ะฒ ะฝะฐั‡ะฐะปะต ะฑัƒะดะตั‚ ะฒะพัะฟั€ะธะฝัั‚ะพ ะบะฐะบ ะทะฐะฟะธัะฐะฝะฝะพะต ะฒ ะฒะพััŒะผะตั€ะธั‡ะฝะพะน ัะธัั‚ะตะผะต, ะธ ะฒัั‘ ะฟะพะนะดั‘ั‚ ะฝะต ั‚ะฐะบ, ะบะฐะบ ะทะฐะดัƒะผะฐะฝะพ
    }
}

เบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™ node

เปƒเบ™ node เป„เบ”เป‰ server2.testdomain nginx เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบฅเปˆเบ™, เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบเบฝเบกเป„เบงเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰.

เปƒเบซเป‰ decompose เบšเบฑเบ™เบซเบฒ:

  • เบŠเบธเบ”เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ 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 ะฟะพะปัƒั‡ะฐะตั‚ ัƒะฒะตะดะพะผะปะตะฝะธะต,
  # ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒัŽั‰ะธะน ัะตั€ะฒะธั ะฟะตั€ะตะทะฐะฟัƒัะบะฐะตั‚ัั.
}

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเบกเบฒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป„เบŸเบฅเปŒเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ puppet:

/etc/puppetlabs/code/environments/production/ # (ัั‚ะพ ะดะปั ะฝะพะฒะพะณะพ ะŸะฐะฟะฟะตั‚ะฐ, ะดะปั ัั‚ะฐั€ะพะณะพ ะบะพั€ะฝะตะฒะพะน ะดะธั€ะตะบั‚ะพั€ะธะตะน ะฑัƒะดะตั‚ /etc/puppet)
โ”œโ”€โ”€ manifests/
โ”‚   โ””โ”€โ”€ site.pp
โ””โ”€โ”€ modules/
    โ””โ”€โ”€ example/
        โ””โ”€โ”€ files/
            โ””โ”€โ”€ nginx-conf/
                โ”œโ”€โ”€ nginx.conf
                โ”œโ”€โ”€ mime.types
                โ””โ”€โ”€ conf.d/
                    โ””โ”€โ”€ some.conf

เบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบ—เบตเปˆเบ™เบตเป‰ เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™, เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบซเป‰เบฒเบ›เบฐเป€เบžเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™, เป€เบŠเบดเปˆเบ‡เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆ.

เป€เบญเบเบฐเบชเบฒเบ™

เบˆเบฑเบ”เบเบฒเบ™เป„เบŸเบฅเปŒ, เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, symlinks, เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบกเบฑเบ™, เปเบฅเบฐเบชเบดเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡.

เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต:

  • เบŠเบทเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ - เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เป„เบ›โ€‹เบซเบฒโ€‹เป„เบŸเบฅโ€‹เปŒ (เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบญเบทเปˆเบ™โ€‹)
  • เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ - เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เป„เบ›โ€‹เบซเบฒโ€‹เป„เบŸเบฅโ€‹เปŒ (เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เบŠเบทเปˆโ€‹)
  • เบฎเบฑเบšเบ›เบฐเบเบฑเบ™ - เบ›เบฐโ€‹เป€เบžเบ”โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹:
    • absent - เบฅเบถเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹
    • present โ€” เบ•เป‰เบญเบ‡โ€‹เบกเบตโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ‚เบญเบ‡โ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡ (เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹, เป„เบŸเบฅโ€‹เปŒโ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹)
    • file - เป„เบŸเบฅโ€‹เปŒโ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹
    • directory - เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต
    • link - เบฅเบดเป‰เบ‡เบ„เปŒ
  • เป€เบ™เบทเป‰เบญเปƒเบ™ โ€” เป€เบ™เบทเป‰เบญโ€‹เปƒเบ™โ€‹เบ‚เบญเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒ (เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹, เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบฎเปˆเบงเบกโ€‹เบเบฑเบšโ€‹ เปเบซเบผเปˆเบ‡ เบซเบผเบท เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ)
  • เปเบซเบผเปˆเบ‡ โ€” เบเบฒเบ™โ€‹เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบเบฑเบšโ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเปเบฒโ€‹เป€เบ™เบปเบฒโ€‹เป€เบ™เบทเป‰เบญโ€‹เปƒเบ™โ€‹เบ‚เบญเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒ (เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบฎเปˆเบงเบกโ€‹เบเบฑเบšโ€‹ เป€เบ™เบทเป‰เบญเปƒเบ™ เบซเบผเบท เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ). เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ URI เบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบเบฒเบ™ puppet: (เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป„เบŸเบฅเปŒเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ puppet เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰), เปเบฅเบฐเบกเบตเป‚เบ„เบ‡เบเบฒเบ™ http: (เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบซเบงเบฑเบ‡โ€‹เบงเปˆเบฒโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เปเบˆเป‰เบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ™เบตเป‰), เปเบฅเบฐโ€‹เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เปเบœเบ™โ€‹เบงเบฒเบ” file: เบซเบผเบทเป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบต schema (เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป„เบŸเบฅเปŒเบˆเบฒเบ FS เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เปƒเบ™ node เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰)
  • เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ โ€” เบšเปˆเบญเบ™เบ—เบตเปˆ symlink เบ„เบงเบ™เบŠเบตเป‰ (เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เบเบฑเบš เป€เบ™เบทเป‰เบญเปƒเบ™ เบซเบผเบท เปเบซเบผเปˆเบ‡)
  • เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡ โ€” เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เบ—เบตเปˆโ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ‚เบญเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹
  • เบเบธเปˆเบก โ€” เบเบธเปˆเบกโ€‹เบ—เบตเปˆโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹
  • เบฎเบนเบšเปเบšเบšเบเบฒเบ™ - เบเบฒเบ™โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เป„เบŸเบฅโ€‹เปŒ (เป€เบ›เบฑเบ™ stringโ€‹)
  • เบžเบฐเบเบฒเบšเบฒเบ™ - เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต recursive
  • purge - เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบฒเบ™เบฅเบถเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ Puppet
  • เบœเบปเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ - เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบฒเบกเบฒเบ”เบฅเบถเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ Puppet

เบŠเบธเบ”

เบ•เบดเบ”เบ•เบฑเป‰เบ‡ เปเบฅเบฐเป€เบญเบปเบฒเปเบžเบฑเบเป€เบเบ”เบญเบญเบ. เบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™ - เบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบžเบฑเบเป€เบเบฑเบ”เปƒเบซเบกเปˆเบ–เป‰เบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ–เบทเบเบฅเบฐเบšเบธ reinstall_on_refresh.

เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต:

  • เบŠเบทเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ - เบŠเบทเปˆโ€‹เบŠเบธเบ” (เป€เบฅเบทเบญเบโ€‹เป„เบ”เป‰โ€‹)
  • เบŠเบทเปˆ - เบŠเบทเปˆโ€‹เบŠเบธเบ” (เบ–เป‰เบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เบŠเบทเปˆโ€‹)
  • เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบด - เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ”เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰
  • เบฎเบฑเบšเบ›เบฐเบเบฑเบ™ - เบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบŠเบธเบ”:
    • present, installed - เบชเบฐโ€‹เบšเบฑเบšโ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹
    • latest - เบชเบฐโ€‹เบšเบฑเบšโ€‹เบซเบฅเป‰เบฒโ€‹เบชเบธเบ”โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹
    • absent - เบฅเบถเบšโ€‹เปเบฅเป‰เบง (apt-get remove)
    • purged โ€” เบฅเบถเบšโ€‹เป„เบ›โ€‹เบžเป‰เบญเบกโ€‹เบเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒ (apt-get purge)
    • held - เบชเบฐโ€‹เบšเบฑเบšโ€‹เบซเบธเป‰เบกโ€‹เบซเปเปˆโ€‹เบ–เบทเบโ€‹เบฅเบฑเบญเบ (apt-mark hold)
    • ะปัŽะฑะฐั ะดั€ัƒะณะฐั ัั‚ั€ะพะบะฐ โ€” เบชเบฐโ€‹เบšเบฑเบšโ€‹เบ—เบตเปˆโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป„เบงเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹
  • reinstall_on_refresh - เบ–เป‰เบฒ true, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™, เบŠเบธเบ”เบˆเบฐเบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปƒเบซเบกเปˆ. เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเปเบซเบผเปˆเบ‡, เบšเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆ rebuilding เบญเบฒเบ”เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ false.

เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™

เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™. เบชเบฒเบกเบฒเบ”เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™ - เป€เบ›เบตเบ”เบšเปเบฅเบดเบเบฒเบ™เบ„เบทเบ™เปƒเปเปˆ.

เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต:

  • เบŠเบทเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ - เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡ (เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบญเบทเปˆเบ™โ€‹)
  • เบŠเบทเปˆ - เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ„เบธเป‰เบกโ€‹เบ„เบญเบ‡ (เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เบŠเบทเปˆโ€‹)
  • เบฎเบฑเบšเบ›เบฐเบเบฑเบ™ - เบฅเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹:
    • running - เป€เบ›เบตเบ”เบ•เบปเบง
    • stopped - เบขเบธเบ”
  • เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบฒเบกเบฒเบ” - เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹:
    • true - เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เป€เบ›เบตเบ”โ€‹เปƒเบŠเป‰โ€‹เบ‡เบฒเบ™ (systemctl enable)
    • mask - เบ›เบญเบกโ€‹เบ•เบปเบง (systemctl mask)
    • false - เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบžเบดโ€‹เบเบฒเบ™ (systemctl disable)
  • เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เปƒเบซเบกเปˆ - เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เป€เบžเบทเปˆเบญ restart เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹
  • เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš - เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เป€เบžเบทเปˆเบญโ€‹เบเบงเบ”โ€‹เบเบฒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบšเปโ€‹เบฅเบดโ€‹เบเบฒเบ™โ€‹
  • เป€เบฅเบตเปˆเบกเปƒเปเปˆเปเบฅเป‰เบง โ€” เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ initscript เบฎเบญเบ‡เบฎเบฑเบšเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเปเปˆเบซเบผเบทเบšเปเปˆ. เบ–เป‰เบฒ false เปเบฅเบฐเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เปเบกเปˆเบ™เบฅเบฐเบšเบธเป„เบงเป‰ เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เปƒเบซเบกเปˆ - เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบ–เป‰เบฒ false เปเบฅเบฐเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เปƒเบซเบกเปˆ เบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธ - เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบขเบธเบ”เปเบฅเบฐเป€เบฅเบตเปˆเบก restart (เปเบ•เปˆ systemd เปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ systemctl restart).
  • hasstatus โ€” เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบšเปเบฅเบดเบเบฒเบ™ initscript เบฎเบญเบ‡เบฎเบฑเบšเบ„เบณเบชเบฑเปˆเบ‡เบซเบผเบทเบšเปเปˆ status. เบ–เป‰เบฒ false, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰ เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš. เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ true.

exec

เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบฒเบเบ™เบญเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบฅเบฐเบšเบธเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ เบชเป‰เบฒเบ‡, เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒ เบซเบผเบท เบชเบปเบ”เบŠเบทเปˆเบ™, เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฐเบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆ Puppet เบ–เบทเบเปเบฅเปˆเบ™. เบชเบฒเบกเบฒเบ”เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™ - เปเบฅเปˆเบ™เบ„เบณเบชเบฑเปˆเบ‡.

เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต:

  • เบŠเบทเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ - เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” (เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบญเบทเปˆเบ™โ€‹)
  • เบ„เปเบฒเบชเบฑเปˆเบ‡ - เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” (เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เบŠเบทเปˆโ€‹)
  • เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ โ€” เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบŠเบญเบโ€‹เบซเบฒโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เป„เบ”เป‰โ€‹
  • เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ โ€” เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เบžเบฒโ€‹เบฅเบฒโ€‹เบกเบดโ€‹เป€เบ•เบตโ€‹เบ™เบตเป‰โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบ”เป‰เบงเบโ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบเบฑเบšโ€‹เบชเบนเบ™โ€‹, เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹
  • เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒ โ€” เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เบžเบฒโ€‹เบฅเบฒโ€‹เบกเบดโ€‹เป€เบ•เบตโ€‹เบ™เบตเป‰โ€‹เบชเปเบฒโ€‹เป€เบฅเบฑเบ”โ€‹เบ”เป‰เบงเบโ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบชเบนเบ™โ€‹, เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ•เบปเป‰เบ™โ€‹เบ•เปโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”
  • เบชเป‰เบฒเบ‡ โ€” เบ–เป‰เบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบšเปเปˆเบกเบต, เบ„เปเบฒเบชเบฑเปˆเบ‡เบซเบผเบฑเบเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”
  • เบชเบปเบ”เบŠเบทเปˆเบ™ - เบ–เป‰เบฒ true, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฐเบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบกเบทเปˆเบญ exec เบ™เบตเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบˆเบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบทเปˆเบ™เป†
  • cwd - เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡
  • เบœเบนเป‰เปƒเบŠเป‰ - เบœเบนเป‰เปƒเบŠเป‰เบˆเบฒเบเปƒเบœเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡
  • เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบด - เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹:
    • เบšเบงเบ โ€” เบ‚เบฐโ€‹เบšเบงเบ™โ€‹เบเบฒเบ™โ€‹เป€เบ”เบฑเบโ€‹เบ™เป‰เบญเบโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹เบขเปˆเบฒเบ‡โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹, เปƒเบซเป‰โ€‹เปเบ™เปˆโ€‹เปƒเบˆเบงเปˆโ€‹เบฒโ€‹เบเบฒเบ™โ€‹เบฅเบฐโ€‹เบšเบธโ€‹ เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡
    • เบซเบญเบ - เบ„เปเบฒเบชเบฑเปˆเบ‡เบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เปเบเบฐ /bin/sh, เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ–เบทเบเบเปเบฒเบ™เบปเบ” เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ globbing, เบ—เปเปˆเปเบฅเบฐเบฅเบฑเบเบชเบฐเบ™เบฐ shell เบญเบทเปˆเบ™เป†. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบˆเบฐเบเบงเบ”เบžเบปเบšเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ–เป‰เบฒเบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ” (|, ;, &&, || เปเบฅเบฐเบญเบทเปˆเบ™เป†).

cron

เบ„เบงเบšเบ„เบธเบก cronjobs.

เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต:

  • เบŠเบทเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ - เบžเบฝเบ‡เปเบ•เปˆเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ•เบปเบงเบฅเบฐเบšเบธ
  • เบฎเบฑเบšเบ›เบฐเบเบฑเบ™ - เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹เบฅเป‰เบฝเบ‡โ€‹เบ”เบนโ€‹:
    • present - เบชเป‰เบฒเบ‡โ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹
    • absent - เบฅเบถเบšโ€‹เบ–เป‰เบฒโ€‹เบกเบตโ€‹
  • เบ„เปเบฒเบชเบฑเปˆเบ‡ - เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹
  • เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก โ€” เปƒเบ™โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡ (เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบงโ€‹เปเบ›โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เปเบฅเบฐโ€‹เบ„เบธเบ™โ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป‚เบ”เบโ€‹เบœเปˆเบฒเบ™โ€‹เบเบฒเบ™โ€‹ =)
  • เบœเบนเป‰เปƒเบŠเป‰ โ€” เบˆเบฒเบโ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹
  • เบ™เบฒเบ—เบต, เบŠเบปเปˆเบงเป‚เบกเบ‡, เบงเบฑเบ™เบญเบฒเบ—เบดเบ”, เป€เบ”เบทเบญเบ™, เบงเบฑเบ™เป€เบ”เบทเบญเบ™ - เป€เบกเบทเปˆเบญเปƒเบ”เบ—เบตเปˆเบˆเบฐเปเบฅเปˆเบ™ cron. เบ–เป‰เบฒเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธ, เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™ crontab เบˆเบฐเป€เบ›เบฑเบ™ *.

เปƒเบ™ Puppet 6.0 cron เบ„เบทเบงเปˆเบฒ เป€เบญเบปเบฒเบญเบญเบเบˆเบฒเบเบเปˆเบญเบ‡ เปƒเบ™ puppetserver, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบปเปˆเบงเป„เบ›. เปเบ•เปˆเบฅเบฒเบง เบขเบนเปˆเปƒเบ™เบเปˆเบญเบ‡ เปƒเบ™ puppet-agent, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบกเบฑเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™ เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบชเบฐเบšเบฑเบšเบ—เบตเบซเป‰เบฒเบ‚เบญเบ‡ Puppet, เบซเบผเบท เปƒเบ™ GitHub.

เบเปˆเบฝเบงเบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›

เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™

เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเปเบกเปˆเบ™ เปƒเบšเบ›เบฐเบเบฒเบ”เบŠเป‰เบณเบเบฑเบ™. เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบกเบทเปˆเบญเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบชเบญเบ‡เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™เบ›เบฒเบเบปเบ”เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.

เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบ‚เบฝเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡: manifests เบชเปเบฒเบฅเบฑเบš node เบ”เบฝเบงเบเบฑเบ™เบšเปเปˆเบ„เบงเบ™เบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบกเบตเบซเบปเบงเบ‚เปเป‰เบ”เบฝเบงเบเบฑเบ™!

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบกเบตเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™, เปเบ•เปˆเบกเบตเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต nameเป€เบžเบทเปˆเบญโ€‹เบซเบผเบตเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹:

package { 'ruby-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'gem',
}
package { 'python-mysql':
  ensure   => installed,
  name     => 'mysql',
  provider => 'pip',
}

เบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบทเปˆเบ™เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบŠเปเป‰เบฒเบŠเป‰เบญเบ™ โˆ’ name ัƒ เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™, command ัƒ exec, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

Metaparameters

เปเบ•เปˆเบฅเบฐเบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบกเบตเบšเบฒเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบžเบดเป€เบชเบ”, เป‚เบ”เบเบšเปเปˆเบ„เปเบฒเบ™เบถเบ‡เป€เบ–เบดเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เบกเบฑเบ™.

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ meta เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™ Puppet.

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบฑเป‰เบ™:

  • เบ•เป‰เบญเบ‡เบเบฒเบ™ โ€” เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰เบ‚เบถเป‰เบ™เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ”.
  • เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ - เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ”เบ‚เบถเป‰เบ™เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰.
  • เบˆเบญเบ‡ โ€” เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบฅเบฐเบšเบธเบงเปˆเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบˆเบฒเบเปเบซเบผเปˆเบ‡เปƒเบ”.
  • เปเบˆเป‰เบ‡ โ€” เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบˆเบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰.

metaparameters เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบเบญเบกเบฎเบฑเบšเบ—เบฑเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ”เบฝเบงเบซเบผเบท array เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบชเบตเปˆเบซเบฅเปˆเบฝเบก.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบเปˆเบฒเบงเป€เบ–เบดเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™. เบžเบงเบเบกเบฑเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบŠเบตเป‰เบšเบญเบเป€เบ–เบดเบ‡เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช. เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

syntax เบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบกเบตเบ”เบฑเปˆเบ‡เบ™เบตเป‰: เบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ (เบ–เป‰เบฒเบŠเบทเปˆเบ›เบฐเป€เบžเบ”เบกเบตเบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบ•เปˆเบฅเบฐเบชเปˆเบงเบ™เบ‚เบญเบ‡เบŠเบทเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”เปเบกเปˆเบ™เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŠเบทเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™เบงเบปเบ‡เป€เบฅเบฑเบšเบชเบตเปˆเบซเบผเปˆเบฝเบก (เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบŠเบทเปˆ. เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡!). เบšเปเปˆเบ„เบงเบ™เบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡;

เบ•เบปเบงเบขเปˆเบฒเบ‡:

file { '/file1': ensure => present }
file { '/file2':
  ensure => directory,
  before => File['/file1'],
}
file { '/file3': ensure => absent }
File['/file1'] -> File['/file3']

เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช เปเบฅเบฐเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™

เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบเบฅเบฐเบซเบงเปˆเบฒเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบกเปˆเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เบˆเบปเปˆเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เปƒเบ™เป€เบงเบฅเบฒเป€เบžเบตเปˆเบกเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบเบฒเบ™เบ‚เบทเป‰เบ™เบเบฑเบšเบงเบปเบ‡เบˆเบญเบ™, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช, เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ•เปเปˆ. เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เปเบˆเป‰เบ‡โ€‹เบเบฒเบ™โ€‹:

  • เบ–เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™, เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡. เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ โˆ’ exec เปเบฅเปˆเบ™โ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹, เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™ เป€เบ›เบตเบ”เบšเปเบฅเบดเบเบฒเบ™เบ„เบทเบ™เปƒเปเปˆ, เบŠเบธเบ” เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ”เปƒเปเปˆ. เบ–เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™.
  • เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป„เบฅเบเบฐเบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ Puppet, เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบšเปเปˆเป€เบเบตเบ™เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡. เบญเบฑเบ™เบ™เบตเป‰เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบฅเบงเบกเบกเบตเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช เปเบฅเบฐเบเบฃเบฒเบšเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบšเปเปˆเบกเบตเบฎเบญเบšเบงเบฝเบ™.
  • เบ–เป‰เบฒ Puppet เบ›เปˆเบฝเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เป„เบ›เบซเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบˆเบญเบ‡เบเบฑเบšเบกเบฑเบ™.
  • เบ–เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡, เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เป„เบ›เบซเบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบˆเบญเบ‡เบเบฑเบšเบกเบฑเบ™.

เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธ

เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบ–เป‰เบฒเบšเบฒเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบšเปเปˆเบกเบตเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ manifest, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Puppet เบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปƒเบ™ node. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” เป€เบญเบเบฐเบชเบฒเบ™ เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธ owner, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Puppet เบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™.

เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบซเป‰เบญเบ‡เบฎเบฝเบ™, เบ•เบปเบงเปเบ›เปเบฅเบฐเบ„เปเบฒเบ™เบดเบเบฒเบก

เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบซเบผเบฒเบ nodes เบ—เบตเปˆเบกเบตเบชเปˆเบงเบ™เบ”เบฝเบงเบเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบ•เปˆเบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡ - เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบญเบฐเบ—เบดเบšเบฒเบเบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบซเบ™เบถเปˆเบ‡เบ•เบฑเบ™. node {}. เปเบ™เปˆเบ™เบญเบ™, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบ„เบฑเบ”เบฅเบญเบเบชเปˆเบงเบ™เบ—เบตเปˆเบ„เบทเบเบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบ•เปˆเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบงเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบšเปเปˆเบ”เบต - เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบˆเบฐเป€เบฅเบตเบ™เป€เบ•เบตเบšเป‚เบ•, เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ›เปˆเบฝเบ™เบชเปˆเบงเบ™เบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เปเบเป‰เป„เบ‚เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เบซเบผเบฒเบเป†เบšเปˆเบญเบ™. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบœเบดเบ”เบžเบฒเบ”, เปเบฅเบฐเป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบซเบผเบฑเบเบเบฒเบ™ DRY (เบขเปˆเบฒเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡) เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ”เบดเบ”เบ‚เบทเป‰เบ™เบ”เป‰เบงเบเป€เบซเบ”เบœเบปเบ™.

เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบกเบตเบเบฒเบ™เบญเบญเบเปเบšเบšเป€เบŠเบฑเปˆเบ™: เบซเป‰เบญเบ‡โ€‹เบฎเบฝเบ™.

เบซเป‰เบญเบ‡เบฎเบฝเบ™

ะšะปะฐัั เป€เบ›เบฑเบ™เบšเบฅเบฑเบญเบเบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” poppet. เบซเป‰เบญเบ‡เบฎเบฝเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ„เบทเบ™เปƒเบซเบกเปˆ.

เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเบฐเบ—เบดเบšเบฒเบ. เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเป„เบ”เป‰เป€เบžเบตเปˆเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ”เป†เบขเบนเปˆเบ—เบธเบเบšเปˆเบญเบ™. เบซเป‰เบญเบ‡เบฎเบฝเบ™เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ 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 เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ”เป†.

เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ›.

เป€เบญเบปเบฒโ€‹เปƒเบˆโ€‹เปƒเบชเปˆโ€‹: เบ•เบปเบงโ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เปƒเบ™ Puppet เปเบกเปˆเบ™ immutableโ€‹!

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ•เบปเบงเปเบ›เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบกเบฑเบ™เบ–เบทเบเบ›เบฐเบเบฒเบ”, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบˆเบฐเป€เบ›เบฑเบ™. 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 เบกเบต namespaces, เปเบฅเบฐเบ•เบปเบงเปเบ›, เบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก, เบกเบต เบžเบทเป‰เบ™เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™: เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฝเบงเบเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™ namespaces เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป€เบกเบทเปˆเบญเปเบเป‰เป„เบ‚เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›, เบ•เบปเบงเปเบ›เบ–เบทเบเบ„เบปเป‰เบ™เบซเบฒเบขเบนเปˆเปƒเบ™ namespace เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™ namespace เบ—เบตเปˆเบ–เบทเบเบซเบธเป‰เบก, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบ•เบปเบงเบขเปˆเบฒเบ‡ Namespace:

  • global - เบ•เบปเบงเปเบ›เบ™เบญเบเบซเป‰เบญเบ‡เบฎเบฝเบ™เบซเบผเบทเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡ node เป„เบ›เบ—เบตเปˆเบ™เบฑเป‰เบ™;
  • node namespace เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡ node;
  • 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
}

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบเปˆเบฒเบงเบกเบฒเปเบกเปˆเบ™เบšเปเปˆเบ”เบตเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบตเบšเบฒเบ‡ "เบ„เบงเบฒเบกเบฎเบนเป‰เบฅเบฑเบš" เบ—เบตเปˆเบšเบฒเบ‡เบšเปˆเบญเบ™เบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบฅเบฐเบŠเบทเปˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบกเบฑเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เบ™เบตเป‰เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ› - เบซเป‰เบญเบ‡เบฎเบฝเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™.

เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™ เปเบกเปˆเบ™เบ•เบปเบงเปเบ›เปƒเบ™ namespace เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™, เบžเบงเบเบกเบฑเบ™เบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบชเปˆเบงเบ™เบซเบปเบงเบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบฎเบฝเบ™เปเบฅเบฐเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบ„เบทเบเบฑเบšเบ•เบปเบงเปเบ›เบ›เบปเบเบเบฐเบ•เบดเปƒเบ™เบ•เบปเบงเบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบฎเบฝเบ™. เบ„เปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ–เบทเบเบฅเบฐเบšเบธเป€เบกเบทเปˆเบญเปƒเบŠเป‰ class เปƒเบ™ manifest.

เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบตเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบ–เป‰เบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบšเปเปˆเบกเบตเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบ„เปˆเบฒเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบกเบทเปˆเบญเปƒเบŠเป‰, เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

เปƒเบซเป‰ parameterize class เบˆเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบฅเบฐเป€เบžเบตเปˆเบกเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™: เบ—เปเบฒเบญเบดเบ”, เบ•เป‰เบญเบ‡เบเบฒเบ™, เปเบกเปˆเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบชเบนเปˆเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบฅเบฐเบ—เบตเบชเบญเบ‡, เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เปเบกเปˆเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบŠเบธเบ”เบ—เบตเปˆเบกเบต 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':}

เปเบ•เปˆเบฅเบฐเบŠเบฑเป‰เบ™เบฎเบฝเบ™เปเบกเปˆเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ” เบฅเบฐเบ”เบฑเบš. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบทเปˆเบ™เป†, เบšเปเปˆเบชเบฒเบกเบฒเบ”เบกเบตเบชเบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบ”เบฝเบงเบเบฑเบ™เบขเบนเปˆเปƒเบ™ node เบ”เบฝเบงเบเบฑเบ™.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเป€เบžเบตเปˆเบกเบซเป‰เบญเบ‡เบฎเบฝเบ™เปƒเบชเปˆเป‚เบซเบ™เบ”เบ”เบฝเบงเบเบฑเบ™เบชเบญเบ‡เบ„เบฑเป‰เบ‡เป‚เบ”เบเปƒเบŠเป‰ class { 'classname':} (เบšเปเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบกเบตเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบทเบ„เบทเบเบฑเบ™), เบˆเบฐเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก. เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบซเป‰เบญเบ‡เบฎเบฝเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™ manifest.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ include, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเป„เบ”เป‰เบซเบผเบฒเบเบ„เบฑเป‰เบ‡เบ•เบฒเบกเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™. เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒ include เป€เบ›เบฑเบ™เบŸเบฑเบ‡เบŠเบฑเบ™ ideempotent เบ—เบตเปˆเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบซเป‰เบญเบ‡เบฎเบฝเบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. เบ–เป‰เบฒเบŠเบฑเป‰เบ™เบฎเบฝเบ™เบšเปเปˆเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เบกเบฑเบ™เบˆเบฐเป€เบžเบตเปˆเบกเบกเบฑเบ™, เปเบฅเบฐเบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบกเบฑเบ™เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบซเบเบฑเบ‡. เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ include เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบŠเบฑเป‰เบ™เบฎเบฝเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบเบฒเบ”เบŠเบฑเป‰เบ™เบฎเบฝเบ™ - เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เป‰เบญเบ‡เบ–เบทเบเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบ - Hiera เบซเบผเบท ENC. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบžเบงเบเบกเบฑเบ™เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›.

เบเปเบฒเบ™เบปเบ”

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเป„เบงเป‰เปƒเบ™เบšเบฅเบฑเบญเบเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบŠเบฑเป‰เบ™เบ”เบฝเบงเบเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบขเบนเปˆเปƒเบ™ node เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบต, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบšเบฅเบฑเบญเบเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™ node เบ”เบฝเบงเบเบฑเบ™. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ•เป‰เบญเบ‡เบกเบตเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป‚เบกเบ”เบนเบ™ PHP, เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ Avito:

  1. เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ”เบเบฑเบšเป‚เบกเบ”เบนเบ™เบ™เบตเป‰.
  2. เบกเบฒเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเบณเบฅเบฑเบšเป‚เบกเบ”เบนเบ™เบ™เบตเป‰.
  3. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ symlink เบเบฑเบš config เบชเปเบฒเบฅเบฑเบš php-fpm.
  4. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ symlink เบเบฑเบš config เบชเปเบฒเบฅเบฑเบš php cli.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบเบฒเบ™เบญเบญเบเปเบšเบšเป€เบŠเบฑเปˆเบ™: เบเปเบฒเบ™เบปเบ” (เบเปเบฒเบ™เบปเบ”, เบเปเบฒเบ™เบปเบ”เบ›เบฐเป€เบžเบ”, เบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”). A Define เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบซเป‰เบญเบ‡เบฎเบฝเบ™, เปเบ•เปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡: เบ—เปเบฒเบญเบดเบ”, เปเบ•เปˆเบฅเบฐ Define เปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบšเปเปˆเปเบกเปˆเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™; เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบ™เบดเบเบฒเบกเบกเบตเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ implicit $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. เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบทเป‰เบ™เบ–เป‰เบฒเบ„เปเบฒเบ™เบดเบเบฒเบกเบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ„เบปเบ‡เบ—เบตเปˆ, เปเบฅเบฐเบกเบตเบชเบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ„เปเบฒเบ™เบดเบเบฒเบกเบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบšเบฒเบ‡ node.

เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเบ›เบปเบเบ›เป‰เบญเบ‡เบ•เบปเบงเบ—เปˆเบฒเบ™เป€เบญเบ‡เบˆเบฒเบเบ™เบตเป‰: เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบ„เปเบฒเบ™เบดเบเบฒเบกเบ•เป‰เบญเบ‡เบกเบตเบŠเบทเปˆเบ‚เบถเป‰เบ™เบเบฑเบš $title. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบกเปˆเบ™ idempotent เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‡เปˆเบฒเบเบ”เบฒเบ, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบปเปˆเบงเป„เบ›เบเบฑเบšเบ—เบธเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ„เปเบฒเบ™เบดเบเบฒเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบฅเบฐเบฅเบงเบกเป€เบญเบปเบฒเบŠเบฑเป‰เบ™เบ™เบตเป‰เปƒเบ™เบ„เปเบฒเบ™เบดเบเบฒเบก - เบซเบ™เป‰เบฒเบ—เบตเปˆ; include เบญเปˆเบญเบ™เป€เบžเบ.

เบกเบตเบงเบดเบ—เบตเบญเบทเปˆเบ™เป€เบžเบทเปˆเบญเบšเบฑเบ™เบฅเบธ idempotency เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบžเบตเปˆเบกเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบ„เบทเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเบ™เป‰เบฒเบ—เบตเปˆ defined ะธ ensure_resources, เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™เปƒเบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›.

เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช เปเบฅเบฐเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบชเบณเบฅเบฑเบšเบŠเบฑเป‰เบ™เบฎเบฝเบ™ เปเบฅเบฐเบ„เบณเบ™เบดเบเบฒเบก

เบŠเบฑเป‰เบ™เบฎเบฝเบ™ เปเบฅเบฐเบ„เปเบฒเบ™เบดเบเบฒเบกเป€เบžเบตเปˆเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบš เปเบฅเบฐเบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™:

  • เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเปƒเบชเปƒเบ™เบŠเบฑเป‰เบ™เบฎเบฝเบ™/เบ™เบดเบเบฒเบก เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ‚เบถเป‰เบ™เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบฎเบฝเบ™/เบเบณเบ™เบปเบ”;
  • a class/define dependency เป€เบžเบตเป‰เบก dependencies เบเบฑเบš class/define เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เปเบปเบ”;
  • class/define notification เปเบˆเป‰เบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡ class/define;
  • class/define subscription subscribes to all resources of class/define.

เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เบ•เบฒเบกเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ เปเบฅเบฐเบ•เบปเบงเป€เบฅเบทเบญเบ

เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

if

เบกเบฑเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰:

if ะ’ะซะ ะะ–ะ•ะะ˜ะ•1 {
  ...
} elsif ะ’ะซะ ะะ–ะ•ะะ˜ะ•2 {
  ...
} else {
  ...
}

เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒ

เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเป€เบ›เบฑเบ™ if in reverse: เบšเบฅเบฑเบญเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเปเบกเปˆเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

unless ะ’ะซะ ะะ–ะ•ะะ˜ะ• {
  ...
}

เบเปเบฅเบฐเบ™เบต

เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบฑเบšเบชเบปเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เปˆเบฒเบ›เบปเบเบเบฐเบ•เบด (strings, เบ•เบปเบงเป€เบฅเบ, เปเบฅเบฐเบญเบทเปˆเบ™เป†), เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบด, เปเบฅเบฐเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เป€เบ›เบฑเบ™เบ„เปˆเบฒ.

case ะ’ะซะ ะะ–ะ•ะะ˜ะ• {
  ะ—ะะะงะ•ะะ˜ะ•1: { ... }
  ะ—ะะะงะ•ะะ˜ะ•2, ะ—ะะะงะ•ะะ˜ะ•3: { ... }
  default: { ... }
}

เบ•เบปเบงเป€เบฅเบทเบญเบ

เป‚เบ•เป€เบฅเบทเบญเบเป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบš case, เปเบ•เปˆเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฅเบฑเบญเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”, เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปˆเบฒ.

$var = $othervar ? { 'val1' => 1, 'val2' => 2, default => 3 }

เป‚เบกเบ”เบนเบ™

เป€เบกเบทเปˆเบญเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเปƒเบ™เบซเบ™เบถเปˆเบ‡ manifest. เปเบ•เปˆเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบซเบผเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบญเบฐเบ—เบดเบšเบฒเบ, เบซเป‰เบญเบ‡เบฎเบฝเบ™เปเบฅเบฐเบ‚เปเป‰เบซเบผเบฒเบเบกเบตเบขเบนเปˆเปƒเบ™ manifest, เบกเบฑเบ™เป€เบ•เบตเบšเปƒเบซเบเปˆ, เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเบชเบฐเบ”เบงเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบตเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ„เบทเบ™เปƒเบซเบกเปˆ - เป€เบกเบทเปˆเบญเบฅเบฐเบซเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบขเบนเปˆเปƒเบ™ manifest เบ”เบฝเบง, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเปเบšเปˆเบ‡เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบเบฑเบšเบ„เบปเบ™เบญเบทเปˆเบ™. เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบขเปˆเบฒเบ‡เบ™เบตเป‰, Puppet เบกเบตเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเป‚เบกเบ”เบนเบ™.

เป‚เบกเบ”เบนเบ™ - เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™, เบ„เปเบฒเบ™เบดเบเบฒเบกเปเบฅเบฐเบซเบ™เปˆเบงเบเบ‡เบฒเบ™ Puppet เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบงเบฒเบ‡เป„เบงเป‰เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เป‚เบกเบ”เบนเบ™เป€เบ›เบฑเบ™เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เป€เบซเบ”เบœเบปเบ™ Puppet. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบญเบฒเบ”เบˆเบฐเบกเบตเป‚เบกเบ”เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš nginx, เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš nginx, เบซเบผเบทเบญเบฒเบ”เบˆเบฐเบกเบตเป‚เบกเบ”เบนเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš PHP, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เป‚เบกเบ”เบนเบ™เปเบกเปˆเบ™เบชเบฐเบšเบฑเบš, เปเบฅเบฐเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เปƒเบ™เปเบ•เปˆเบฅเบฐเบญเบทเปˆเบ™เป†เปเบกเปˆเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™. เบกเบต repository เป€เบ›เบตเบ”เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™ - Puppet Forge.

เปƒเบ™เป€เบŠเบตเบšเป€เบงเบต puppet, เป‚เบกเบ”เบนเบ™เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบ. เบžเบฒเบเปƒเบ™เปเบ•เปˆเบฅเบฐเป‚เบกเบ”เบนเบ™เบกเบตเบฅเบฐเบšเบปเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ - manifests, files, templates, lib, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเปƒเบ™เป‚เบกเบ”เบนเบ™

เบฎเบฒเบเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบญเบฒเบ”เบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบญเบฐเบ—เบดเบšเบฒเบ:

  • manifests - เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบ manifestosโ€‹
  • files - เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹
  • templates - เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เปเบกเปˆโ€‹เปเบšเบšโ€‹
  • lib โ€” เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบโ€‹เบฅเบฐโ€‹เบซเบฑเบ” Rubyโ€‹

เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ„เบปเบšเบ–เป‰เบงเบ™เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบฅเบฐเป„เบŸเบฅเปŒ, เปเบ•เปˆเบกเบฑเบ™เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™.

เบŠเบทเปˆเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปƒเบ™เป‚เบกเบ”เบนเบ™

เป€เบญเบเบฐเบชเบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ (เบŠเบฑเป‰เบ™เบฎเบฝเบ™, เบ„เปเบฒเบ™เบดเบเบฒเบก) เปƒเบ™เป‚เบกเบ”เบนเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบญเบฑเบ™เปƒเบ”เบเปเป„เบ”เป‰เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆเป‚เบ”เบเบเบปเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบŠเบทเปˆเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆ Puppet เบˆเบฐเบŠเบญเบเบซเบฒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบฑเป‰เบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฅเบฐเป€เบกเบตเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบŠเบทเปˆ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Puppet เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบšเปเปˆเบŠเบญเบเบซเบฒเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เปเบฅเบฐเบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก.

เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เปเบกเปˆเบ™โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹:

  • เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เป‚เบกเบ”เบนเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบขเบนเปˆเปƒเบ™ namespace เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™. เบ–เป‰เบฒเป‚เบกเบ”เบนเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™ foo, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบกเบตเบŠเบทเปˆ foo::<anything>, เบซเบผเบทเบžเบฝเบ‡เปเบ•เปˆ foo.
  • เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบ•เป‰เบญเบ‡เบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ init.pp.
  • เบชเปเบฒเบฅเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบญเบทเปˆเบ™เป†, เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบŠเบทเปˆเป„เบŸเบฅเปŒเบกเบตเบ”เบฑเปˆเบ‡เบ™เบตเป‰:
    • เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบŠเบทเปˆเป‚เบกเบ”เบนเบ™เบ–เบทเบเบเบปเบเป€เบฅเบตเบ
    • เบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”เบ—เบฑเบ‡เปเบปเบ”, เบ–เป‰เบฒเบกเบต, เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบ slashes
    • เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเปเบกเปˆเบ™เป€เบžเบตเปˆเบก .pp

เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡. เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เบ‚เบฝเบ™เป‚เบกเบ”เบนเบ™ nginx. เบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบซเป‰เบญเบ‡โ€‹เบฎเบฝเบ™ nginx เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ manifest init.pp;
  • เบซเป‰เบญเบ‡โ€‹เบฎเบฝเบ™ nginx::service เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ manifest service.pp;
  • เบเปเบฒเบ™เบปเบ” nginx::server เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ manifest server.pp;
  • เบเปเบฒเบ™เบปเบ” nginx::server::location เบญเบฐเบ—เบดเบšเบฒเบเป„เบงเป‰เปƒเบ™ manifest 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

เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹:

  • <%= ะ’ะซะ ะะ–ะ•ะะ˜ะ• %> โ€” เปƒเบชเปˆโ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบโ€‹
  • <% ะ’ะซะ ะะ–ะ•ะะ˜ะ• %> โ€” เบ„เบดเบ”โ€‹เป„เบฅเปˆโ€‹เบ„เปˆเบฒโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบ (เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เปƒเบชเปˆโ€‹เบกเบฑเบ™โ€‹)โ€‹. เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ (เบ–เป‰เบฒ) เปเบฅเบฐ loops (เปเบ•เปˆเบฅเบฐ) เบกเบฑเบเบˆเบฐเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.
  • <%# ะšะžะœะœะ•ะะขะะ ะ˜ะ™ %>

เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเปƒเบ™ ERB เปเบกเปˆเบ™เบ‚เบฝเบ™เปƒเบ™ Ruby (ERB เปเบกเปˆเบ™เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง Embedded 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 -%>

เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เปเบฅเบฐเบ•เบปเบงเปเบ›เปƒเบ™เบ•เบปเบง

เบชเปˆเบงเบ™เบซเบผเบฒเบเบกเบฑเบ, เบžเบฒเบเบชเปˆเบงเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™ node. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบ Debian เปเบกเปˆเบ™เบซเบเบฑเบ‡, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบŠเบธเบ”เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบชเบฐเบšเบฑเบšเบญเบทเปˆเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบดเบ”เบ•เบฒเบกเบเบงเบ”เบเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, rewriting manifests เบ–เป‰เบฒ nodes เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบฎเบธเบ™เปเบฎเบ‡;

เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰, Puppet เบกเบตเบเบปเบ™เป„เบเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡. เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡ - เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบš node, เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ manifests เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ—เปเบฒเบกเบฐเบ”เบฒเปƒเบ™ namespace เบ—เบปเปˆเบงเป‚เบฅเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เบŠเบทเปˆเป€เบˆเบปเป‰เบฒเบžเบฒเบš, เบฎเบธเปˆเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™, เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเป‚เบ›เป€เบŠเบ”เป€เบŠเบต, เบฅเบฒเบเบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰, เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบฅเบฐเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเบซเบผเบฒเบ, เบกเบตเบซเบผเบฒเบเบซเบผเบฒเบ. เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบกเปˆเบ™เบกเบตเบขเบนเปˆเปƒเบ™ manifests เปเบฅเบฐเปเบกเปˆเปเบšเบšเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบ›เบปเบเบเบฐเบ•เบด.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡:

notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# ั€ะตััƒั€ั ั‚ะธะฟะฐ notify ะฟั€ะพัั‚ะพ ะฒั‹ะฒะพะดะธั‚ ัะพะพะฑั‰ะตะฝะธะต ะฒ ะปะพะณ

เป€เบงเบปเป‰เบฒเบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบ„เบงเบฒเบกเบˆเบดเบ‡เบกเบตเบŠเบทเปˆ (เบชเบฐเบ•เบฃเบดเบ‡) เปเบฅเบฐเบ„เปˆเบฒ (เบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบกเบตเบขเบนเปˆ: เบชเบฐเบ•เบดเบ‡, เบญเบฒเป€เบฃ, เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก). เบเบดเบ™ เบŠเบธเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡. เบœเบนเป‰เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เป„เบ”เป‰เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบ เบ„เบทเบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™ Ruby, เบซเบผเบทเป€เบ›เบฑเบ™ เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰. เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบ™เบฎเบนเบšเปเบšเบš เป„เบŸเบฅเปŒเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™ เบขเบนเปˆเปƒเบ™เบ‚เปเป‰.

เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™, เบ•เบปเบงเปเบ—เบ™ puppet เบ—เปเบฒเบญเบดเบ”เบ„เบฑเบ”เบฅเบญเบเบ•เบปเบงเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบ pappetserver เป„เบ›เบซเบฒ node, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบžเบงเบเป€เบ‚เบปเบฒเปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ; เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบฅเบงเบšเบฅเบงเบกเบฅเบฒเบเบเบฒเบ™.

เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰

เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เป‚เบกเบ”เบนเบ™เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต facts.d. เปเบ™เปˆเบ™เบญเบ™, เป„เบŸเบฅเปŒเบ•เป‰เบญเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เป€เบกเบทเปˆเบญเปเบฅเปˆเบ™, เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบญเบญเบเป€เบ›เบฑเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ™เบฎเบนเบšเปเบšเบš YAML เบซเบผเบท key=value.

เบขเปˆเบฒเบฅเบทเบกเบงเปˆเบฒเบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เปƒเบŠเป‰เบเบฑเบšเบ—เบธเบ nodes เบ—เบตเปˆเบ–เบทเบเบ„เบงเบšเบ„เบธเบกเป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ 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

เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก

เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™ nodes เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต /etc/facter/facts.d เปƒเบ™ Puppet เป€เบเบปเปˆเบฒเบซเบผเบท /etc/puppetlabs/facts.d เปƒเบ™ Puppet เปƒเบซเบกเปˆ.

examplefact=examplevalue
---
examplefact2: examplevalue2
anotherfact: anothervalue

เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบซเบฒเบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡

เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเบซเบฒเบ„เบงเบฒเบกเบˆเบดเบ‡:

  • เบœเปˆเบฒเบ™เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก $facts: $facts['fqdn'];
  • เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบทเปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เป€เบ›เบฑเบ™เบŠเบทเปˆเบ•เบปเบงเปเบ›: $fqdn.

เบกเบฑเบ™เบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบงเบฑเบ”เบˆเบฐเบ™เบฒเบ™เบธเบเบปเบก $facts, เบซเบผเบทเบ”เบตเบเบงเปˆเบฒ, เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™ namespace เบ—เบปเปˆเบงเป‚เบฅเบ ($::facts).

เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™.

เบ•เบปเบงเปเบ›เปƒเบ™เบ•เบปเบง

เบ™เบญเบโ€‹เบˆเบฒเบโ€‹เบ‚เปเป‰โ€‹เป€เบ—เบฑเบ”โ€‹เบˆเบดเบ‡โ€‹, เบเบฑเบ‡โ€‹เบกเบตโ€‹ เบšเบฒเบ‡เบ•เบปเบงเปเบ›, เบกเบตเบขเบนเปˆเปƒเบ™ namespace เบ—เบปเปˆเบงเป‚เบฅเบ.

  • เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰ โ€” เบ•เบปเบงเปเบ›เบ—เบตเปˆเป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒ (เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบ–เบทเบเบญเบญเบเป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ poppet, เบ•เบปเบงเปเบ—เบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบžเบฝเบ‡เปเบ•เปˆเป€เบญเบปเบฒเปเบฅเบฐเบ›เปˆเบฝเบ™เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบ‚เบญเบ‡เบกเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ•เบปเบงเปเบ›เปเบกเปˆเบ™ "เป„เบงเป‰เบงเบฒเบ‡เปƒเบˆ"): เบŠเบทเปˆเบ‚เบญเบ‡เปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™, เบŠเบทเปˆเบ‚เบญเบ‡. เป‚เบฎเบ”เปเบฅเบฐเป‚เบ”เป€เบกเบ™, เบชเปˆเบงเบ™เบ‚เบฐเบซเบเบฒเบเบˆเบฒเบเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™.
  • เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ โ€” เบ•เบปเบงโ€‹เปเบ›โ€‹เบ—เบตเปˆโ€‹เบเปˆเบฝเบงโ€‹เบ‚เป‰เบญเบ‡โ€‹เบเบฑเบšโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบ โ€” เบชเบฐโ€‹เบšเบฑเบšโ€‹, เบŠเบทเปˆโ€‹, เบ—เบตเปˆโ€‹เบขเบนเปˆ IP เบ‚เบญเบ‡โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹, เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹.
  • เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ‚เบญเบ‡เบ•เบปเบงเปเบ—เบ™ โ€” เบ•เบปเบงโ€‹เปเบ›โ€‹เป€เบžเบตเปˆเบกโ€‹เบ‚เบถเป‰เบ™โ€‹เป‚เบ”เบโ€‹เบเบปเบ‡โ€‹เป‚เบ”เบโ€‹เบ•เบปเบงโ€‹เปเบ—เบ™ puppetโ€‹, เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เป‚เบ”เบโ€‹เบ•เบปเบงโ€‹เบˆเบดเบ‡ โ€” เบŠเบทเปˆโ€‹เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™โ€‹, เบชเบฐโ€‹เบšเบฑเบšโ€‹เบ•เบปเบงโ€‹เปเบ—เบ™โ€‹, เบชเบฐโ€‹เบšเบฑเบš puppetโ€‹.
  • เบ•เบปเบงเปเบ›เบซเบผเบฑเบ - เบ•เบปเบงเปเบ› Pappetmaster (sic!). เบกเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบ„เบทเบเบฑเบ™เบเบฑเบšเปƒเบ™ เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบšเบงเบเบ„เปˆเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบกเปˆเบ™เบกเบตเบขเบนเปˆ.
  • เบ•เบปเบงเปเบ› compiler โ€” เบ•เบปเบงเปเบ› compiler เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เปเบ•เปˆเบฅเบฐเบ‚เบญเบšเป€เบ‚เบ”: เบŠเบทเปˆเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเบŠเบทเปˆเบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบงเบฑเบ”เบ–เบธเบ›เบฐเบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡. เบžเบงเบเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบซเป‰เบญเบ‡เบฎเบฝเบ™เบชเปˆเบงเบ™เบ•เบปเบงเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบเป‚เบกเบ”เบนเบ™เบญเบทเปˆเบ™.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ 1: เบงเบดเบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบฅเบฐ debug เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰?

เบšเบปเบ”เบ„เบงเบฒเบกเบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” puppet, เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰. เบ”เบต, เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เปเบเป‰เป„เบ‚เบ•เบปเบงเป€เบญเบ‡.

เบ•เบปเบงเปเบ—เบ™เปเบกเปˆเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ Puppet, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบชเปˆเบงเบ™เปƒเบซเบเปˆ, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เบ•เบปเบงเปเบ—เบ™

เบขเปˆเบฒเบ‡ เบซเบ™เป‰เบญเบ เบ™เบฑเบš เบ•เบฑเป‰เบ‡ เปเบ•เปˆ เบชเบฐ เบšเบฑเบš 5, เบเบฒเบ™ เบซเบธเป‰เบก เบซเปเปˆ puppet เบ•เบปเบง เปเบ—เบ™ เบˆเบฒเบ เบ„เบฑเบ‡ Puppetlabs เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™ เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบฑเบ‡เบซเบกเบปเบ” (ruby เปเบฅเบฐเปเบเป‰เบงเบ›เบฐเป€เบชเบตเบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™), เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ (เบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ Debian - เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเปƒเบŠเป‰เบเบฒเบ™เปเบˆเบเบขเบฒเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ RPM).

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ puppet, เบกเบฑเบ™เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเบ•เบปเบงเปเบ—เบ™เปƒเบ™เบฎเบนเบšเปเบšเบš serverless: เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” puppet เป„เบ”เป‰เบ–เบทเบเบ„เบฑเบ”เบฅเบญเบเป„เบ›เบ—เบตเปˆ node, เป€เบ›เบตเบ”เบ•เบปเบง. 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

เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒ, เปเบ™เปˆเบ™เบญเบ™, เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ•เบปเบงเปเบ—เบ™เบขเบนเปˆเปƒเบ™เป‚เบซเบ™เบ”เปƒเบ™เป‚เบซเบกเบ” daemon - เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบธเบเป†เป€เบ„เบดเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบฅเบ”เบกเบฒเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฎเบฝเบ™เปเบšเบšเบฎเบนเบšเปเบšเบšเบเบฒเบ™เบŠเบธเบเบเบนเป‰เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ - เป„เบ›เบซเบฒ node เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆเปเบฅเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ sudo puppet agent -t. เบเบฐเปเบˆ -t (--test) เบ•เบปเบงโ€‹เบˆเบดเบ‡โ€‹เปเบฅเป‰เบงโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบกเบตโ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบ›เบตเบ”โ€‹เปƒเบŠเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบชเปˆเบงเบ™โ€‹เบšเบธเบโ€‹เบ„เบปเบ™โ€‹. เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

  • เบšเปเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ” daemon (เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ•เบปเบงเปเบ—เบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เป‚เบซเบกเบ” daemon);
  • เบ›เบดเบ”เบฅเบปเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เปเบฒเปƒเบŠเป‰เบฅเบฒเบเบเบฒเบ™ (เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ•เบปเบงเปเบ—เบ™เบˆเบฐเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ—เบธเบเป†เป€เบ„เบดเปˆเบ‡เบŠเบปเปˆเบงเป‚เบกเบ‡);
  • เบ‚เบฝเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบฅเบฐเบญเบฝเบ”;
  • เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป„เบŸเบฅเปŒ.

เบ•เบปเบงเปเบ—เบ™เบกเบตเป‚เบซเบกเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ - เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบšเปเปˆเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ‚เบฝเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ•เบปเบงเปเบ—เบ™เบˆเบฐเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปเบ™เบงเปƒเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™. เป‚เบซเบกเบ”เบ™เบตเป‰เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต --noop เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹: sudo puppet agent -t --noop.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เปƒเบŠเป‰เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ”เบตเบšเบฑเบเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ - เปƒเบ™เบกเบฑเบ™, puppet เบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบฑเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”: เบเปˆเบฝเบงเบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™, เบเปˆเบฝเบงเบเบฑเบšเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ™เบตเป‰, เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เป€เบ›เบตเบ”เบ•เบปเบง. เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ --debug.

Server

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบ•เบฑเบกเบ‚เบญเบ‡ pappetserver เปเบฅเบฐ deploying code เบเบฑเบšเบกเบฑเบ™เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒเบญเบญเบเบˆเบฒเบเบเปˆเบญเบ‡เบกเบตเบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡. nodes (เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, เป€เบ–เบดเบ‡เบฎเป‰เบญเบ). เบˆเปเบฒเบ™เบงเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡ nodes เบˆเบฐเบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ›เบฑเบš - เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, puppetserver เป€เบ›เบตเบ”เบ•เบปเบงเบšเปเปˆเป€เบเบตเบ™เบชเบตเปˆเบ„เบปเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒ, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบฅเบฐเบšเปเปˆเบฅเบทเบกเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ‚เบตเบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฐเป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”.

เบเบฒเบ™เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ” - เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เป„เบงเปเบฅเบฐเบ‡เปˆเบฒเบเบ”เบฒเบ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบšเบดเปˆเบ‡ (เบขเบนเปˆเบ—เบตเปˆ r10k)[https://github.com/puppetlabs/r10k], เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบžเบฝเบ‡เบžเป.

เป€เบญเบเบฐเบชเบฒเบ™เบŠเป‰เบญเบ™เบ—เป‰เบฒเบ 2: เบ‚เปเป‰เปเบ™เบฐเบ™เบณเบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”

  1. เบงเบฒเบ‡เป€เบซเบ”เบœเบปเบ™เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™ เปเบฅเบฐเบ„เบณเบ™เบดเบเบฒเบก.
  2. เบฎเบฑเบเบชเบฒเบŠเบฑเป‰เบ™เบฎเบฝเบ™เปเบฅเบฐเบ„เปเบฒเบ™เบดเบเบฒเบกเปƒเบ™เป‚เบกเบ”เบนเบ™, เบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ manifests เบญเบฐเบ—เบดเบšเบฒเบ nodes.
  3. เปƒเบŠเป‰เบ‚เปเป‰เป€เบ—เบฑเบ”เบˆเบดเบ‡.
  4. เบขเปˆเบฒเบชเป‰เบฒเบ‡ ifs เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบŠเบทเปˆเป€เบˆเบปเป‰เบฒเบžเบฒเบš.
  5. เบฎเบนเป‰เบชเบถเบเบšเปเปˆเป€เบชเบเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบชเปเบฒเบฅเบฑเบšเบซเป‰เบญเบ‡เบฎเบฝเบ™เปเบฅเบฐเบ„เปเบฒเบ™เบดเบเบฒเบก - เบ™เบตเป‰เปเบกเปˆเบ™เบ”เบตเบเปˆเบงเบฒเป€เบซเบ”เบœเบปเบ™ implicit เป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰เบขเบนเปˆเปƒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™ / เบเปเบฒเบ™เบปเบ”.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›.

เบชเบฐเบซเบฅเบธเบš

เบ‚เปเปƒเบซเป‰เบชเปเบฒเป€เบฅเบฑเบ”เบ”เป‰เบงเบเบเบฒเบ™เปเบ™เบฐเบ™เปเบฒ. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš Hiera, ENC เปเบฅเบฐ PuppetDB.

เบžเบฝเบ‡เปเบ•เปˆเบœเบนเป‰เปƒเบŠเป‰เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเปƒเบ™เบเบฒเบ™เบชเปเบฒเบซเบผเบงเบ”. เป€เบ‚เบปเป‰เบฒโ€‹เบชเบนเปˆโ€‹เบฅเบฐโ€‹เบšเบปเบšเบเบฐเบฅเบธเบ™เบฒ.

เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบกเบตเบซเบผเบฒเบเป€เบญเบเบฐเบชเบฒเบ™เบซเบผเบฒเบ - เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเปƒเบ™เบซเบปเบงเบ‚เปเป‰เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบปเบ™เปƒเบˆเปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™:

  • 59,1%เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ puppet เบ‚เบฑเป‰เบ™เบชเบนเบ‡ - เบšเบฒเบ‡ shit เบฅเบฐเบ”เบฑเบšเบ•เปเปˆเป„เบ›: loops, เปเบœเบ™เบ—เบตเปˆเปเบฅเบฐเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ‚เบญเบ‡ lambda เบญเบทเปˆเบ™เป†, เบœเบนเป‰เป€เบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบญเบญเบเปเบฅเบฐเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบœเปˆเบฒเบ™ Puppet, tags, เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™, abstract data types.13
  • 31,8%"เบ‚เป‰เบญเบเป€เบ›เบฑเบ™เบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เปเบกเปˆเบ‚เบญเบ‡เบ‚เป‰เบญเบ" เบซเบผเบทเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™ Avito เบชเป‰เบฒเบ‡เป€เบžเบทเปˆเบญเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ poppet เบซเบผเบฒเบเบฎเบธเปˆเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบฅเบฐ, เปƒเบ™เบซเบผเบฑเบเบเบฒเบ™, เบžเบฒเบเบชเปˆเบงเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ poppet.7.
  • 81,8%เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ” puppet: เป€เบ„เบทเปˆเบญเบ‡เบกเบท, เป€เบญเบเบฐเบชเบฒเบ™, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, CI/CD.18

เบœเบนเป‰เปƒเบŠเป‰ 22 เบ„เบปเบ™เบฅเบปเบ‡เบ„เบฐเปเบ™เบ™เบชเบฝเบ‡. 9 เบœเบนเป‰เปƒเบŠเป‰เบ‡เบปเบ”.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com