αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž’αžΆαž™αŸ‰αž„

αž’αžΆαž™αŸ‰αž„αž‚αžΊαž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž“αžΆαŸ†β€‹αž™αž€β€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž‘αŸ…β€‹αžšαžŠαŸ’αž‹β€‹αžŠαŸ‚αž›β€‹αž…αž„αŸ‹β€‹αž”αžΆαž“β€‹αž“αž·αž„β€‹αžšαž€αŸ’αžŸαžΆβ€‹αžšαžŠαŸ’αž‹β€‹αž“αŸαŸ‡β€‹αŸ”

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Puppet αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž„αž”αŸ’αžšαžΆαŸ†αž†αŸ’αž“αžΆαŸ†αž˜αž€αž αžΎαž™αŸ” αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž–αž·αžαž‡αžΆαž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚ αž“αž·αž„αžšαŸ€αž”αž…αŸ†αž…αž„αž€αŸ’αžšαž„αž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž–αžΈαž―αž€αžŸαžΆαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžš αžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸαž’αŸ†αž–αžΈαžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž’αžΆαž™αŸ‰αž„αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž’αžΆαž™αŸ‰αž„

αž–αŸαžαŸŒαž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžšαž”αžŸαŸ‹ Puppet αž‚αžΊαž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ-αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαž€αŸαž‚αžΆαŸ†αž‘αŸ’αžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αž»αžαž„αžΆαžšαž˜αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αŸαžŠαŸ„αž™αŸ”

αž˜αŸ‰αžΌαžŠαŸ‚αž›αž‘αžΆαž‰αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ– αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αžšαŸ€αž„αžšαžΆαž›αŸ‹αž€αž“αŸ’αž›αŸ‡αž˜αŸ‰αŸ„αž„αž˜αŸ’αžαž„ αž’αžαž·αžαž·αž‡αž“αž‘αžΆαž€αŸ‹αž‘αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž αžΎαž™αž’αž“αž»αžœαžαŸ’αžαžœαžΆαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αžΆαž“αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ Ansible αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αž½αž€αž‚αŸαž”αŸ’αžšαžΎαž‚αŸ†αžšαžΌαž‡αŸ†αžšαž»αž‰αž•αŸ’αžŸαŸαž„αŸ– αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ αž’αžαž·αžαž·αž‡αž“αžαŸ’αž›αž½αž“αž―αž„αž“αžΉαž„αž˜αž·αž“αž’αž“αž»αžœαžαŸ’αžαž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž”αžŽαŸ’αžαžΆαž‰ αž€αžΆαžšαž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž” TLS αž–αžΈαžšαž•αŸ’αž›αžΌαžœαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ– αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαž˜αžΆαž“αžŸαŸ„αž―αž€αž‡αž“αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“ αž“αž·αž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž…αŸαž‰αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαžœαžΆαž’αžΆαž…αž”αŸ’αžšαžΎ CA αžαžΆαž„αž€αŸ’αžšαŸ…αž”αžΆαž“αŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰

αž“αŸ…αž€αŸ’αž“αž»αž„αžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜αž’αžΆαž™αŸ‰αž„ αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž™αŸ‰αž„ αž—αŸ’αž‡αžΆαž”αŸ‹ αžαŸ’αž“αžΆαŸ†αž„ (αžαŸ’αž“αžΆαŸ†αž„) αŸ” αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαŸ†αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžš αž“αŸ…αž€αŸ’αž“αž»αž„ manifestos αž“αŸ…αž€αŸ’αž“αž»αž„αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αžŸαŸαžŸ - αž’αžΆαž™αŸ‰αž„ DSL αŸ”

αž’αžΆαž™αŸ‰αž„ DSL αž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαž”αŸ’αžšαž€αžΆαžŸαŸ” αžœαžΆαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αžšαž”αžŸαŸ‹αžαŸ’αž“αžΆαŸ†αž„αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž“αŸƒαž’αž“αž’αžΆαž“αž”αž»αž‚αŸ’αž‚αž› αž§αž‘αžΆαž αžšαžŽαŸαŸ–

  • αž―αž€αžŸαžΆαžšαž˜αžΆαž“ αž αžΎαž™αžœαžΆαž˜αžΆαž“αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αŸ”
  • αž€αž‰αŸ’αž…αž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αŸ”
  • αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž αžΎαž™αŸ”

αž’αž“αž’αžΆαž“αž’αžΆαž…αž‘αžΆαž€αŸ‹αž‘αž„αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αŸ–

  • αž˜αžΆαž“αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž–αž½αž€αž‚αŸαž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž’αž“αž’αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”
    αž§αž‘αžΆαž αžšαžŽαŸ "αžŠαŸ†αž‘αžΎαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ†αž”αžΌαž„ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ”"
  • αž˜αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„ - αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž’αžΆαž“αž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αžœαžΆαž•αŸ’αž‰αžΎαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž‘αŸ…αž€αžΆαž“αŸ‹αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž‡αžΆαžœαžœαžΆαŸ”
    αž§αž‘αžΆαž αžšαžŽαŸ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž’αŸ’αž“αž€αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αž Puppet DSL αž˜αžΆαž“αž˜αž»αžαž„αžΆαžš αž“αž·αž„αž’αžαŸαžš αž€αŸαžŠαžΌαž…αž‡αžΆαžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ” αž™αž“αŸ’αžαž€αžΆαžšαž‚αŸ†αžšαžΌαž•αŸ’αžŸαŸαž„αŸ—αž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž•αž„αžŠαŸ‚αžš - EPP αž“αž·αž„ ERB αŸ”

αž’αžΆαž™αŸ‰αž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαžšαžŸαŸαžšβ€‹αž‡αžΆ Ruby αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž€αžΆαžšβ€‹αžŸαžΆαž„αžŸαž„αŸ‹ αž“αž·αž„β€‹αž–αžΆαž€αŸ’αž™β€‹αž‡αžΆβ€‹αž…αŸ’αžšαžΎαž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž™αž€β€‹αž…αŸαž‰β€‹αž–αžΈβ€‹αž‘αžΈαž“αŸ„αŸ‡αŸ” Ruby αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž–αž„αŸ’αžšαžΈαž€αž’αžΆαž™αŸ‰αž„ - αž”αž“αŸ’αžαŸ‚αž˜αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αžαŸ’αž˜αžΈ αž˜αž»αžαž„αžΆαžšαŸ”

αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž› Puppet αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαŸ†αž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžαž˜αž½αž™αŸ” ថត αž‚αžΊαž‡αžΆαž”αž‰αŸ’αž‡αžΈαž“αŸƒαž’αž“αž’αžΆαž“ αž“αž·αž„αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‚αžŽαž“αžΆαžαž˜αŸ’αž›αŸƒαž“αŸƒαž˜αž»αžαž„αžΆαžš ធថេរ αž“αž·αž„αž€αžΆαžšαž–αž„αŸ’αžšαžΈαž€αž“αŸƒαžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαŸ”

αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž“αž·αž„αžšαž…αž“αžΆαž”αŸαž‘αŸ’αž˜αž€αžΌαžŠ

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž―αž€αžŸαžΆαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžšαžŠαŸ‚αž›αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž±αŸ’αž™αž™αž›αŸ‹αž–αžΈαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž˜αž·αž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αŸ–

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž’αŸ’αžœαžΈαžŠαŸ‚αž› manifest αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αŸ–

# ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π³Π΄Π΅, послС Ρ€Π΅ΡˆΡ‘Ρ‚ΠΊΠΈ.
#
# ОписаниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠ΄Ρ‹ начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова node,
# Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт сСлСктор Π½ΠΎΠ΄Ρ‹ β€” хостнСйм (с Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΈΠ»ΠΈ Π±Π΅Π·)
# ΠΈΠ»ΠΈ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для хостнСймов, ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово default.
#
# ПослС этого Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках описываСтся собствСнно конфигурация Π½ΠΎΠ΄Ρ‹.
#
# Одна ΠΈ Ρ‚Π° ΠΆΠ΅ Π½ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ ΠΏΠΎΠ΄ нСсколько сСлСкторов. ΠŸΡ€ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚
# сСлСкторов написано Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΎ синтаксис описания Π½ΠΎΠ΄.
node 'hostname', 'f.q.d.n', /regexp/ {
  # ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ ΠΏΠΎ сути являСтся пСрСчислСниСм рСсурсов ΠΈ ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².
  #
  # Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ рСсурса Π΅ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
  #
  # Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π²ΡƒΡ… рСсурсов ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ названиями!
  #
  # ОписаниС рСсурса начинаСтся с Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’ΠΈΠΏ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ рСгистрС.
  # ΠŸΡ€ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ рСсурсов написано Π½ΠΈΠΆΠ΅.
  #
  # ПослС Ρ‚ΠΈΠΏΠ° Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ рСсурса, ΠΏΠΎΡ‚ΠΎΠΌ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅,
  # дальшС ΠΈΠ΄Ρ‘Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ пСрСчислСниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² рСсурса ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
  # ЗначСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Ρ‚.Π½. hash rocket (=>).
  resource { 'title':
    param1 => value1,
    param2 => value2,
    param3 => value3,
  }
}

αž€αžΆαžšαž…αžΌαž›αž”αž“αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž„αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αž”αž“αŸ’αž‘αžΆαžαŸ‹αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž“αŸƒ manifest αž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ† αžšαž…αž“αžΆαž”αŸαž‘αŸ’αž˜. αžŸαž„αŸ’αžαŸαž”αŸ–

  • αž€αžΆαžšβ€‹αž…αžΌαž›β€‹αž”αž“αŸ’αž‘αžΆαžαŸ‹β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αž–αžΈαžš αž•αŸ’αž‘αžΆαŸ†αž„β€‹αž˜αž·αž“β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αž‘αŸαŸ”
  • αžŠαž„αŸ’αž€αŸ€αž”αž€αŸ„αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ‚αž€αžŠαŸ„αž™αž…αž“αŸ’αž›αŸ„αŸ‡αž˜αž½αž™;
  • αžŸαž‰αŸ’αž‰αžΆαž€αŸ’αž”αŸ€αžŸαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αžΈαž˜αž½αž™αŸ— αžšαž½αž˜αž‘αžΆαŸ†αž„αž›αŸαžαž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ” αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αžΈαž˜αž½αž™αŸ—αžŸαŸ’αžαž·αžαž“αŸ…αž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžšαžŽαžΈαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž“αž·αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž½αž™αŸ– αž’αŸ’αž“αž€αž’αžΆαž…αžŸαžšαžŸαŸαžšαž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αž˜αž½αž™ αž“αž·αž„αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αžŸαž‰αŸ’αž‰αžΆαž€αŸ’αž”αŸ€αžŸ (αž§αŸ” resource { 'title': } ΠΈ resource { 'title': param => value }).
  • αž–αŸ’αžšαž½αž‰αž“αŸ…αž›αžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž‚αž½αžšαžαŸ‚αž“αŸ…αž€αž˜αŸ’αžšαž·αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”
  • αž–αŸ’αžšαž½αž‰αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž’αž“αž’αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž–αžΈαž˜αž»αžαž–αž½αž€αž‚αŸαŸ”

αž‘αžΈαžαžΆαŸ†αž„αž“αŸƒαž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎ pappetserver

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αž“αŸ’αžαŸ‚αž˜ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžŽαŸ‚αž“αžΆαŸ†αž–αžΈαž‚αŸ„αž›αž‚αŸ†αž“αž·αžαž“αŸƒ "αžαžαž―αž€αžŸαžΆαžš"αŸ” αžαžαž«αžŸαž‚αžΊαž‡αžΆαžαžαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αžΆαž™αŸ‰αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαŸ†αž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ”

ថត root αž”αŸ’αžšαŸ‚αž”αŸ’αžšαž½αž›αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αŸ†αžŽαŸ‚αžšαž”αžŸαŸ‹ Puppet αž“αž·αž„αž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž”αŸ’αžšαžΎαŸ” αž”αžšαž·αžŸαŸ’αžαžΆαž“αž‚αžΊαž‡αžΆαžŸαŸ†αžŽαž»αŸ†αž―αž€αžšαžΆαž‡αŸ’αž™αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžαžαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ git αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž”αžšαž·αžŸαŸ’αžαžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž–αžΈαžŸαžΆαžαžΆ git αŸ” αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™αžαŸ’αž“αžΆαŸ†αž„αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžšαž·αž™αžΆαž€αžΆαžŸαž˜αž½αž™αž¬αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αžαŸ’αž›αž½αž“αžœαžΆ αž¬αž“αŸ…αž€αŸ’αž“αž»αž„ ENC αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

  • αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαŸ‚αž‘αžΈαž”αžΈ ("αž’αžΆαž™αŸ‰αž„αž…αžΆαžŸαŸ‹") αžαžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αžΊ /etc/puppet. αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αžšαž·αžŸαŸ’αžαžΆαž“αž‚αžΊαžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž - αž§αž‘αžΆαž αžšαžŽαŸ αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎαž–αž½αž€αžœαžΆαž‡αžΆαž˜αž½αž™αž’αžΆαž™αŸ‰αž„αž…αžΆαžŸαŸ‹αž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αžšαž·αžŸαŸ’αžαžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„ /etc/puppet/environmentsថត root αž“αžΉαž„αž‡αžΆαžαžαž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αžšαž·αžŸαŸ’αžαžΆαž“αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžαžαž«αžŸαž“αžΉαž„αž‡αžΆαžαžαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ”
  • αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž–αžΈαž€αŸ†αžŽαŸ‚αž‘αžΈαž”αž½αž“ ("αž’αžΆαž™αŸ‰αž„αžαŸ’αž˜αžΈ") αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αžšαž·αžŸαŸ’αžαžΆαž“αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαž€αžΆαžαž–αŸ’αžœαž€αž·αž…αŸ’αž… αž αžΎαž™αž”αž‰αŸ’αž‡αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ… /etc/puppetlabs/code. αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž αžΎαž™αž”αžšαž·αžŸαŸ’αžαžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„ /etc/puppetlabs/code/environments, ថត root αž‚αžΊαž‡αžΆαžαžαž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ”

αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžαžαžšαž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαž root manifestsαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžαŸ’αž“αžΆαŸ†αž„αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž‚αž½αžšαžαŸ‚αž˜αžΆαž“αžαžαžšαž„ modulesαžŠαŸ‚αž›αž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αžŽαžΆαž˜αž½αž™αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž’αžΆαž™αŸ‰αž„αž…αžΆαžŸαŸ‹αž€αŸαž’αžΆαž…αž˜αžΆαž“αžαžαžšαž„αž•αž„αžŠαŸ‚αžšαŸ” filesαžŠαŸ‚αž›αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž™αžΎαž„αž…αž˜αŸ’αž›αž„αž‘αŸ…αžαŸ’αž“αžΆαŸ†αž„αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαž™αŸ‰αž„αžαŸ’αž˜αžΈ αž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αŸ”

αž―αž€αžŸαžΆαžš Manifest αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜ .pp.

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαž™αž»αž‘αŸ’αž’αž–αžΈαžšαž”αžΈ

αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžαŸ’αž“αžΆαŸ†αž„ αž“αž·αž„αž’αž“αž’αžΆαž“αž“αŸ…αž›αžΎαžœαžΆαŸ”

αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„ server1.testdomain αž―αž€αžŸαžΆαžšαžαŸ’αžšαžΌαžœαžαŸ‚αž”αž„αŸ’αž€αžΎαž /etc/issue αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αžΆαžαž·αž€αžΆ Debian GNU/Linux n l. αž―αž€αžŸαžΆαžšαžαŸ’αžšαžΌαžœαžαŸ‚αž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ αž“αž·αž„αž€αŸ’αžšαž»αž˜ rootαžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“ 644.

αž™αžΎαž„αžŸαžšαžŸαŸαžš manifestoαŸ–

node 'server1.testdomain' {   # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, относящийся ΠΊ Π½ΠΎΠ΄Π΅ server1.testdomain
    file { '/etc/issue':   # описываСм Ρ„Π°ΠΉΠ» /etc/issue
        ensure  => present,   # этот Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ
        content => 'Debian GNU/Linux n l',   # Ρƒ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ содСрТимоС
        owner   => root,   # ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ-Π²Π»Π°Π΄Π΅Π»Π΅Ρ†
        group   => root,   # Π³Ρ€ΡƒΠΏΠΏΠ°-Π²Π»Π°Π΄Π΅Π»Π΅Ρ†
        mode    => '0644',   # ΠΏΡ€Π°Π²Π° Π½Π° Ρ„Π°ΠΉΠ». Они Π·Π°Π΄Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ строки (Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ число с 0 Π² Π½Π°Ρ‡Π°Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ воспринято ΠΊΠ°ΠΊ записанноС Π² Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ систСмС, ΠΈ всё ΠΏΠΎΠΉΠ΄Ρ‘Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ
    }
}

αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžšαžœαžΆαž„αž’αž“αž’αžΆαž“αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„

αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„ server2.testdomain nginx αžαŸ’αžšαžΌαžœαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αžŠαŸ„αž™αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž–αžΈαž˜αž»αž“αŸ”

αžαŸ„αŸ‡αž”αŸ†αž”αŸ‚αž€αž”αž‰αŸ’αž αžΆαŸ–

  • αž€αž‰αŸ’αž…αž”αŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„ nginx.
  • αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ‚αž›αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”
  • αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžαŸ’αžšαžΌαžœαžαŸ‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš nginx.
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžαŸ’αžšαžΌαžœαžαŸ‚αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αŸ”

αž™αžΎαž„αžŸαžšαžŸαŸαžš manifestoαŸ–

node 'server2.testdomain' {   # Π±Π»ΠΎΠΊ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, относящийся ΠΊ Π½ΠΎΠ΄Π΅ server2.testdomain
    package { 'nginx':   # описываСм ΠΏΠ°ΠΊΠ΅Ρ‚ nginx
        ensure => installed,   # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ установлСн
    }
  # ΠŸΡ€ΡΠΌΠ°Ρ стрСлка (->) Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ рСсурс Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
  # ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ послС рСсурса, описанного Π²Ρ‹ΡˆΠ΅.
  # Π’Π°ΠΊΠΈΠ΅ зависимости Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹.
    -> file { '/etc/nginx':   # описываСм Ρ„Π°ΠΉΠ» /etc/nginx
        ensure  => directory,   # это Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ дирСктория
        source  => 'puppet:///modules/example/nginx-conf',   # Π΅Ρ‘ содСрТимоС Π½ΡƒΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ с ΠΏΠ°ΠΏΠΏΠ΅Ρ‚-сСрвСра ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ адрСсу
        recurse => true,   # ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ рСкурсивно
        purge   => true,   # Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ лишниС Ρ„Π°ΠΉΠ»Ρ‹ (Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² источникС)
        force   => true,   # ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ лишниС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ
    }
  # Волнистая стрСлка (~>) Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ рСсурс Π½ΠΈΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½
  # ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° измСнСния рСсурса, описанного Π²Ρ‹ΡˆΠ΅.
  # Волнистая стрСлка Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΡ€ΡΠΌΡƒΡŽ (->).
    ~> service { 'nginx':   # описываСм сСрвис nginx
        ensure => running,   # ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½
        enable => true,   # Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ автоматичСски ΠΏΡ€ΠΈ стартС систСмы
    }
  # Когда рСсурс Ρ‚ΠΈΠΏΠ° service ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅,
  # ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ сСрвис пСрСзапускаСтся.
}

αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αžΈαžαžΆαŸ†αž„αž―αž€αžŸαžΆαžšαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž™αŸ‰αž„αŸ–

/etc/puppetlabs/code/environments/production/ # (это для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠŸΠ°ΠΏΠΏΠ΅Ρ‚Π°, для старого ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ /etc/puppet)
β”œβ”€β”€ manifests/
β”‚   └── site.pp
└── modules/
    └── example/
        └── files/
            └── nginx-conf/
                β”œβ”€β”€ nginx.conf
                β”œβ”€β”€ mime.types
                └── conf.d/
                    └── some.conf

αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“

αž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαŸ€αž”αžšαžΆαž”αŸ‹αž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž…αŸ†αž“αž½αž“αž”αŸ’αžšαžΆαŸ† αžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‚αžΊαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž—αžΆαž‚αž…αŸ’αžšαžΎαž“αŸ”

αž―αž€αžŸαžΆαžš

αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž―αž€αžŸαžΆαžš αžαžαž―αž€αžŸαžΆαžš αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆ αž˜αžΆαžαž·αž€αžΆαžšαž”αžŸαŸ‹αžœαžΆ αž“αž·αž„αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ–

  • αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“ - αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž―αž€αžŸαžΆαžš (αžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž)
  • αž•αŸ’αž›αžΌαžœ - αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž―αž€αžŸαžΆαžš (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžˆαŸ’αž˜αŸ„αŸ‡)
  • αž’αžΆαž“αžΆαž±αŸ’αž™αž”αžΆαž“αž“αžΌαžœ - αž”αŸ’αžšαž—αŸαž‘αž―αž€αžŸαžΆαžšαŸ–
    • absent - αž›αž»αž”αž―αž€αžŸαžΆαžš
    • present - αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž”αŸ’αžšαž—αŸαž‘αžŽαžΆαž˜αž½αž™ (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αŸ’αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž‘αŸ αž―αž€αžŸαžΆαžšαž’αž˜αŸ’αž˜αžαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž)
    • file - αž―αž€αžŸαžΆαžšαž’αž˜αŸ’αž˜αžαžΆαŸ”
    • directory - ថត
    • link - αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆ
  • αž˜αžΆαžαž·αž€αžΆ - αž˜αžΆαžαž·αž€αžΆαž―αž€αžŸαžΆαžš (αžŸαž˜αžšαž˜αŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ‚αž―αž€αžŸαžΆαžšαž’αž˜αŸ’αž˜αžαžΆ αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαžšαž½αž˜αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ αž”αŸ’αžšαž—αž– ឬ αž‚αŸ„αž›αžŠαŸ…)
  • αž”αŸ’αžšαž—αž– - αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž›αžΌαžœαžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž…αž˜αŸ’αž›αž„αž˜αžΆαžαž·αž€αžΆαž“αŸƒαž―αž€αžŸαžΆαžš (αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαžšαž½αž˜αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ αž˜αžΆαžαž·αž€αžΆ ឬ αž‚αŸ„αž›αžŠαŸ…) αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‡αžΆ URI αž‡αžΆαž˜αž½αž™αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αž½αž™αŸ” puppet: (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž―αž€αžŸαžΆαžšαž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž™αŸ‰αž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ) αž“αž·αž„αž‡αžΆαž˜αž½αž™αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ http: (αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžαžΆαž“αžΉαž„αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡) αž“αž·αž„αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž‡αžΆαž˜αž½αž™αžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜ file: αž¬αž‡αžΆαž•αŸ’αž›αžΌαžœαžŠαžΆαž…αŸ‹αžαžΆαžαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž―αž€αžŸαžΆαžšαž–αžΈ FS αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ)
  • αž‚αŸ„αž›αžŠαŸ… - αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž‚αž½αžšαž…αž„αŸ’αž’αž»αž› (αž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžΎαžšαž½αž˜αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ αž˜αžΆαžαž·αž€αžΆ ឬ αž”αŸ’αžšαž—αž–)
  • αž˜αŸ’αž…αžΆαžŸαŸ‹ - αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž‚αž½αžšαž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αž―αž€αžŸαžΆαžš
  • αž€αŸ’αžšαž»αž˜ - αž€αŸ’αžšαž»αž˜αžŠαŸ‚αž›αž―αž€αžŸαžΆαžšαž‚αž½αžšαžαŸ‚αž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·
  • αžšαž”αŸ€αž” - αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž―αž€αžŸαžΆαžš (αž‡αžΆαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš)
  • αž€αžΎαžαž‘αžΎαž„αžœαž·αž‰αŸ” - αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαžαž…αž˜αŸ’αž›αž„αž‘αžΎαž„αžœαž·αž‰
  • αž”αž“αŸ’αžŸαž»αž‘αŸ’αž’ - αž”αžΎαž€αž€αžΆαžšαž›αž»αž”αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Puppet
  • αž€αž˜αŸ’αž›αžΆαŸ†αž„ - αž”αžΎαž€αž€αžΆαžšαž›αž»αž”αžαžαžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ Puppet

αž“αžΈαž˜αž½αž™αŸ—

αžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž›αž»αž”αž€αž‰αŸ’αž…αž”αŸ‹αŸ” αž’αžΆαž…αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„ - αžŠαŸ†αž‘αžΎαž„αž€αž‰αŸ’αž…αž”αŸ‹αž‘αžΎαž„αžœαž·αž‰αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ reinstall_on_refresh.

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ–

  • αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“ - αžˆαŸ’αž˜αŸ„αŸ‡αž€αž‰αŸ’αž…αž”αŸ‹ (αžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž)
  • αžˆαŸ’αž˜αŸ„αŸ‡ - αžˆαŸ’αž˜αŸ„αŸ‡αž€αž‰αŸ’αž…αž”αŸ‹ (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžˆαŸ’αž˜αŸ„αŸ‡)
  • αž€αŸ†αž–αžΌαž›αž˜αž½αž™ - αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎ
  • αž’αžΆαž“αžΆαž±αŸ’αž™αž”αžΆαž“αž“αžΌαžœ - αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αŸ–
    • present, installed - αžŠαŸ†αž‘αžΎαž„αž€αŸ†αžŽαŸ‚αžŽαžΆαž˜αž½αž™αŸ”
    • latest - αž€αŸ†αžŽαŸ‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„
    • absent - αž”αžΆαž“αž›αž»αž” (apt-get remove)
    • purged - αž”αžΆαž“αž›αž»αž”αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ (apt-get purge)
    • held - αž€αŸ†αžŽαŸ‚αž€αž‰αŸ’αž…αž”αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž€αŸ‹αžŸαŸ„ (apt-mark hold)
    • любая другая строка - αž€αŸ†αžŽαŸ‚αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„
  • reinstall_on_refresh - αž”αŸ’αžšαžŸαž·αž“αž”αžΎ trueαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž“αŸ…αž–αŸαž›αž”αžΆαž“αž‘αž‘αž½αž›αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„ αž€αž‰αŸ’αž…αž”αŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž‘αžΎαž„αžœαž·αž‰αŸ” αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž”αŸ’αžšαž—αž– αžŠαŸ‚αž›αž€αžΆαžšαž€αžŸαžΆαž„αž€αž‰αŸ’αž…αž”αŸ‹αž‘αžΎαž„αžœαž·αž‰αž’αžΆαž…αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αŸ…αž–αŸαž›αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŸαžΆαž„αžŸαž„αŸ‹αŸ” αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ false.

αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜

αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ” αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„ - αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αžΎαž„αžœαž·αž‰αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ–

  • αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“ - αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ (αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸ)
  • αžˆαŸ’αž˜αŸ„αŸ‡ - αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžˆαŸ’αž˜αŸ„αŸ‡)
  • αž’αžΆαž“αžΆαž±αŸ’αž™αž”αžΆαž“αž“αžΌαžœ - αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αŸ–
    • running - αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš
    • stopped - αžˆαž”αŸ‹
  • αž’αž“αž»αž‰αŸ’αž‰αžΆαž - αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αŸ–
    • true - αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€ (systemctl enable)
    • mask - αž€αŸ’αž›αŸ‚αž„αž”αž“αŸ’αž›αŸ† (systemctl mask)
    • false - αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘ (systemctl disable)
  • αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ - αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αžΎαž„αžœαž·αž‰
  • αžŸαŸ’αžαžΆαž“αž—αžΆαž– - αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜
  • αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ β€” αž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆαžαžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ initscript αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ false αž αžΎαž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ - αžαž˜αŸ’αž›αŸƒαž“αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎ false αž“αž·αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ αž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ - αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αžˆαž”αŸ‹ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰ (αž”αŸ‰αž»αž“αŸ’αžαŸ‚ systemd αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ systemctl restart).
  • hasstatus β€” αž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆαžαžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ initscript αž‚αžΆαŸ†αž‘αŸ’αžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ statusαŸ” αž”αžΎ falseαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎ αžŸαŸ’αžαžΆαž“αž—αžΆαž–. αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ true.

αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαžΆαž„αž€αŸ’αžšαŸ…αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž”αž„αŸ’αž€αžΎαž, αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡, αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚ ឬ αžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αžšαžΆαž™αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž› Puppet αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„ - αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ–

  • αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“ - αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· (αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸ)
  • αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ - αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžˆαŸ’αž˜αŸ„αŸ‡)
  • αž•αŸ’αž›αžΌαžœ - αž•αŸ’αž›αžΌαžœαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžšαž€αž˜αžΎαž›αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αŸ”
  • αžαŸ‚αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ β€” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αŸαžαžŸαžΌαž“αŸ’αž™ αž“αŸ„αŸ‡αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž…αž˜αŸ’αž”αž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·
  • αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚ - αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αŸαžαž€αžΌαžŠαžαŸ’αžšαž‘αž”αŸ‹αžŠαŸ‚αž›αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžŸαžΌαž“αŸ’αž™αž“αŸ„αŸ‡αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž…αž˜αŸ’αž”αž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·
  • αž”αž„αŸ’αž€αžΎαž β€” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž‘αŸ αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž…αž˜αŸ’αž”αž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·
  • αžŸαŸ’αžšαžŸαŸ‹αžŸαŸ’αžšαžΆαž™ - αž”αŸ’αžšαžŸαž·αž“αž”αžΎ trueαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαž“αŸαŸ‡αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž–αžΈαž’αž“αž’αžΆαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”
  • cwd - αžαžαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ
  • αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎ - αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αžΈαž’αŸ’αž“αž€αžŽαžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ
  • αž€αŸ†αž–αžΌαž›αž˜αž½αž™ - αžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ–
    • posix - αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž»αž˜αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž™αŸ‰αžΆαž„αžŸαžΆαž˜αž‰αŸ’αž‰ αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΆαž€αžŠαžαžΆαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž•αŸ’αž›αžΌαžœ
    • αžŸαŸ‚αž› - αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ‚αž› /bin/sh, αž’αžΆαž…αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αž•αŸ’αž›αžΌαžœαž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ globbing, αž”αŸ†αž–αž„αŸ‹ αž“αž·αž„αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžŸαŸ‚αž›αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“αžαž½αž’αž€αŸ’αžŸαžšαž–αž·αžŸαŸαžŸαžŽαžΆαž˜αž½αž™ (|, ;, &&, || αž›β€‹αž›)αŸ”

cron

αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ cronjobs αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ–

  • αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“ - αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž˜αž½αž™αž…αŸ†αž“αž½αž“
  • αž’αžΆαž“αžΆαž±αŸ’αž™αž”αžΆαž“αž“αžΌαžœ - αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž€αžΆαžšαž„αžΆαžšαŸ–
    • present - αž”αž„αŸ’αž€αžΎαžαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αž·αž“αž˜αžΆαž“
    • absent - αž›αž»αž”αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αžΆαž“
  • αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ - αžαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš
  • αž”αžšαž·αžŸαŸ’αžαžΆαž“ β€” αž€αŸ’αž“αž»αž„αž”αžšαž·αžŸαŸ’αžαžΆαž“αžŽαžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ (αž”αž‰αŸ’αž‡αžΈαž’αžαŸαžšαž”αžšαž·αžŸαŸ’αžαžΆαž“ αž“αž·αž„αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆαžαžΆαž˜αžšαž™αŸˆ =)
  • αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎ - αž–αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŽαžΆαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ
  • αž“αžΆαž‘αžΈ, αž˜αŸ‰αŸ„αž„, αžαŸ’αž„αŸƒαž’αŸ’αžœαžΎαž€αžΆαžš, αžαŸ‚, αžαŸ’αž„αŸƒαžαŸ‚ - αž–αŸαž›αžŽαžΆαžαŸ’αžšαžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš cron αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŽαžΆαž˜αž½αž™αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αžαž˜αŸ’αž›αŸƒαžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ crontab αž“αžΉαž„αž˜αžΆαž“ *.

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαž™αŸ‰αž„ 6.0 cron αžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαžŸαž·αž“αž”αžΎ αž™αž€αž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹ αž“αŸ…αž€αŸ’αž“αž»αž„ puppetserver αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž“αŸ…αž›αžΎαž‚αŸαž αž‘αŸ†αž–αŸαžšαž‘αžΌαž‘αŸ…αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž‚αžΆαžαŸ‹ αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž’αž”αŸ‹ αž“αŸ…αž€αŸ’αž“αž»αž„ puppet-agent αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ†αž‘αžΎαž„αžœαžΆαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž‘αŸαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž―αž€αžŸαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αŸ†αžŽαŸ‚αž‘αžΈαž”αŸ’αžšαžΆαŸ†αž“αŸƒαž’αžΆαž™αŸ‰αž„, ឬ αž“αŸ…αž›αžΎ GitHub.

αž’αŸ†αž–αžΈαž’αž“αž’αžΆαž“αž‡αžΆαž‘αžΌαž‘αŸ…

αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αž”αŸ’αž›αŸ‚αž€αž“αŸƒαž’αž“αž’αžΆαž“

αž€αŸ†αž αž»αžŸαž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž™αžΎαž„αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž‚αžΊ αžŸαŸαž…αž€αŸ’αžαžΈαž”αŸ’αžšαž€αžΆαžŸαžŸαŸ’αž‘αž½αž“. αž€αŸ†αž αž»αžŸαž“αŸαŸ‡αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αž“αž’αžΆαž“αž–αžΈαžšαž¬αž…αŸ’αžšαžΎαž“αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαž›αŸαž…αž‘αžΎαž„αž€αŸ’αž“αž»αž„αžαžαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžŸαžšαžŸαŸαžšαž˜αŸ’αžαž„αž‘αŸ€αžαŸ– manifests αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαŸ†αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž˜αž·αž“αž‚αž½αžšαž˜αžΆαž“αž’αž“αž’αžΆαž“αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ‚αž›αž˜αžΆαž“αž…αŸ†αžŽαž„αž‡αžΎαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆ!

αž‡αž½αž“αž€αžΆαž›αž˜αžΆαž“αžαŸ†αžšαžΌαžœαž€αžΆαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš nameαžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αŸ†αž αž»αžŸαŸ–

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

αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž‡αž½αž™αž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž…αž˜αŸ’αž›αž„ βˆ’ name Ρƒ αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜, command Ρƒ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·, αž›β€‹αž›αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αŸαžαžΆ

αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž–αž·αžŸαŸαžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“ αžŠαŸ„αž™αž˜αž·αž“αž‚αž·αžαž–αžΈαž›αž€αŸ’αžαžŽαŸˆαžšαž”αžŸαŸ‹αžœαžΆαŸ”

αž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αŸαžαžΆ αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαž’αžΆαž™αŸ‰αž„.

αž”αž‰αŸ’αž‡αžΈαžαŸ’αž›αžΈαŸ–

  • αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“ - αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž’αž“αž’αžΆαž“αž“αŸαŸ‡αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαŸ”
  • αž˜αž»αž“ - αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαžΆαžαžΎαž’αž“αž’αžΆαž“αž˜αž½αž™αžŽαžΆαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αž“αž’αžΆαž“αž“αŸαŸ‡αŸ”
  • αž‡αžΆαžœαž‡αžΆαž”αŸ’αžšαž…αžΆαŸ† - αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαžΆαžαžΎαž’αž“αž’αžΆαž“αžŽαžΆαžŠαŸ‚αž›αž’αž“αž’αžΆαž“αž“αŸαŸ‡αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αŸ”
  • αž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αŸ” - αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž€αŸ†αžŽαžαŸ‹αžαžΆαž’αž“αž’αžΆαž“αžŽαžΆαžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž–αžΈαž’αž“αž’αžΆαž“αž“αŸαŸ‡αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αŸαžαžΆαžŠαŸ‚αž›αž”αžΆαž“αžšαžΆαž™αž”αž‰αŸ’αž‡αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αž‘αž½αž›αž™αž€αž‘αžΆαŸ†αž„αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž’αž“αž’αžΆαž“αžαŸ‚αž˜αž½αž™ αž¬αž’αžΆαžšαŸαž“αŸƒαžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αžαž„αŸ’αž€αŸ€αž”αž€αžΆαžšαŸ‰αŸαŸ”

αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž’αž“αž’αžΆαž“

αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž’αž“αž’αžΆαž“αž‚αžΊαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž€αžΆαžšαž›αžΎαž€αž‘αžΎαž„αž’αŸ†αž–αžΈαž’αž“αž’αžΆαž“αŸ” αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž…αž˜αŸ’αž”αž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αŸ” αž€αžΆαžšαž™αŸ„αž„αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž“αžΉαž„αž”αž„αŸ’αž€αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αŸ”

αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ– αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αž’αž€αŸ’αžŸαžšαž’αŸ† (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ’αžšαž—αŸαž‘αž˜αžΆαž“αžŸαž‰αŸ’αž‰αžΆαž–αžΈαžš αž“αŸ„αŸ‡αž•αŸ’αž“αŸ‚αž€αž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαžˆαŸ’αž˜αŸ„αŸ‡αžšαžœαžΆαž„αžŸαž‰αŸ’αž‰αžΆαž‘αžΆαŸ†αž„αž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆαž’αž€αŸ’αžŸαžšαž’αŸ†) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“αž€αŸ’αž“αž»αž„αžαž„αŸ’αž€αŸ€αž”αž€αžΆαžšαŸ‰αŸ (αž€αžšαžŽαžΈαž“αŸƒαžˆαŸ’αž˜αŸ„αŸ‡ αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš!) αž˜αž·αž“αž‚αž½αžšαž˜αžΆαž“αž…αž“αŸ’αž›αŸ„αŸ‡; αžαž„αŸ’αž€αŸ€αž”αž€αžΆαžšαŸ‰αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž—αŸ’αž›αžΆαž˜αŸ—αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ’αžšαž—αŸαž‘αŸ”

αž§αž‘αžΆαž αžšαžŽαŸ:

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

αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž“αž·αž„αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„

αž―αž€αžŸαžΆαžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ”

αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αžΈαž˜αž»αž“ αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžŸαžΆαž˜αž‰αŸ’αž‰αžšαžœαžΆαž„αž’αž“αž’αžΆαž“αž‚αžΊαž‡αžΆαž’αž“αŸ’αžαžšαž€αžΆαž›αŸ” αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αžŸαžΌαž˜αž”αŸ’αžšαž™αŸαžαŸ’αž“αž“αŸ…αž–αŸαž›αž”αž“αŸ’αžαŸ‚αž˜αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ - αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αžœαžŠαŸ’αž αžŠαŸ‚αž›αž“αžΉαž„αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αŸ”

αž˜αž·αž“αžŠαžΌαž…αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž’αž“αŸ’αžαžšαž€αžΆαž›αž‘αŸαŸ” αž…αŸ’αž”αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž’αž“αž»αžœαžαŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αŸ–

  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž’αžΆαž“αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αŸ” αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž’αžΆαž”αŸ‹αžŠαŸαžαž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“ βˆ’ αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž· αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆ, αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αžΎαž„αžœαž·αž‰, αž“αžΈαž˜αž½αž™αŸ— αžŠαŸ†αž‘αžΎαž„αž€αž‰αŸ’αž…αž”αŸ‹αž‘αžΎαž„αžœαž·αž‰αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž’αžΆαž“αž˜αž·αž“αž˜αžΆαž“αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž’αžΆαž”αŸ‹αžŠαŸαžαžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αž“αŸ„αŸ‡αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž€αžΎαžαž‘αžΎαž„αž‘αŸαŸ”
  • αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž’αžΆαž™αŸ‰αž„ αž’αž“αž’αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž˜αž·αž“αž›αžΎαžŸαž–αžΈαž˜αŸ’αžαž„αž‘αŸαŸ” αžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž… αžŠαŸ„αž™αžŸαžΆαžšαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž αžΎαž™αž€αŸ’αžšαžΆαž αŸ’αžœαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž˜αž·αž“αž˜αžΆαž“αžœαžŠαŸ’αžαŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎ Puppet αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαŸ’αžαžΆαž“αž—αžΆαž–αž“αŸƒαž’αž“αž’αžΆαž“ αž’αž“αž’αžΆαž“αž“αžΉαž„αž•αŸ’αž‰αžΎαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž‘αŸ…αž€αžΆαž“αŸ‹αž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž‡αžΆαžœαžœαžΆαŸ”
  • αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž’αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž– αžœαžΆαž•αŸ’αž‰αžΎαž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž‘αŸ…αž€αžΆαž“αŸ‹αž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž‡αžΆαžœαžœαžΆαŸ”

αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹

αžαžΆαž˜αž€αŸ’αž”αž½αž“ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž’αž“αž’αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αž˜αž·αž“αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž αžΎαž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ manifest αž“αŸ„αŸ‡ Puppet αž“αžΉαž„αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž“αŸ„αŸ‡αž‘αŸαŸ” αž§αž‘αžΆαž αžšαžŽαŸαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αž“αž’αžΆαž“αž“αŸƒαž”αŸ’αžšαž—αŸαž‘ αž―αž€αžŸαžΆαžš αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž·αž“αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ ownerαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ Puppet αž“αžΉαž„αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αŸ’αž…αžΆαžŸαŸ‹αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ„αŸ‡αž‘αŸαŸ”

αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαžαŸ’αž“αžΆαž€αŸ‹ ធថេរ αž“αž·αž„αž“αž·αž™αž˜αž“αŸαž™

αž§αž”αž˜αžΆαžαžΆαž™αžΎαž„αž˜αžΆαž“αžαŸ’αž“αžΆαŸ†αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž˜αžΆαž“αž•αŸ’αž“αŸ‚αž€αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸαž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž‚αŸ’αž“αžΆαž•αž„αžŠαŸ‚αžš - αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸαž™αžΎαž„αž’αžΆαž…αž–αžŽαŸŒαž“αžΆαžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αž˜αž½αž™αž”αŸ’αž›αž»αž€αŸ” node {}. αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž’αŸ’αž“αž€αž’αžΆαž…αž…αž˜αŸ’αž›αž„αž•αŸ’αž“αŸ‚αž€αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαž‘αžΌαž‘αŸ…αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž˜αž·αž“αž›αŸ’αž’ - αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž•αŸ’αž“αŸ‚αž€αž‘αžΌαž‘αŸ…αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αžšαžΏαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαž»αžŸ αž αžΎαž™αž‡αžΆαž‘αžΌαž‘αŸ… αž‚αŸ„αž›αž€αžΆαžšαžŽαŸ DRY (αž€αž»αŸ†αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž˜αž½αž™αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž˜αžΆαž“αž€αžΆαžšαžšαž…αž“αžΆαžŠαžΌαž…αž‡αžΆ класс.

αžαŸ’αž“αžΆαž€αŸ‹

Класс αž‚αžΊαž‡αžΆαž”αŸ’αž›αž»αž€αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž€αžΌαžŠ 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 αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŽαžΆαž˜αž½αž™αŸ”

αžœαžΆαž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“ αžŠαŸ„αž™αž”αŸ’αžšαžΎαž’αžαŸαžš.

αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αŸ– αž’αžαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαž™αŸ‰αž„αž‚αžΊαž˜αž·αž“αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αžΆαž“!

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž’αžαŸαžšαž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž”αžΆαž“αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸ αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸ αžαž˜αŸ’αž›αŸƒαž“αŸƒαž’αžαŸαžšαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“ undef.

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž’αžαŸαžšαŸ–

# созданиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
$variable = 'value'
$var2 = 1
$var3 = true
$var4 = undef
# использованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
$var5 = $var6
file { '/tmp/text': content => $variable }
# интСрполяция ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… β€” раскрытиС значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² строках. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…!
$var6 = "Variable with name variable has value ${variable}"

αž’αžΆαž™αŸ‰αž„αž˜αžΆαž“ αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡, αž“αž·αž„αž’αžαŸαžš, αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜, αž˜αžΆαž“ αžαŸ†αž”αž“αŸ‹αž“αŸƒαž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αŸ– αž’αžαŸαžšβ€‹αžŠαŸ‚αž›β€‹αž˜αžΆαž“β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžŠαžΌαž…αž‚αŸ’αž“αžΆβ€‹αž’αžΆαž…β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž€αŸ†αžŽαžαŸ‹β€‹αž€αŸ’αž“αž»αž„β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž•αŸ’αžŸαŸαž„β€‹αž‚αŸ’αž“αžΆαŸ” αž“αŸ…αž–αŸαž›β€‹αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž“αŸƒβ€‹αž’αžαŸαžš αž’αžαŸαžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αžŸαŸ’αžœαŸ‚αž„αžšαž€β€‹αž€αŸ’αž“αž»αž„β€‹αž‘αŸ†αž αŸ†β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž€αŸ’αž“αž»αž„β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αž·αž‘β€‹αž—αŸ’αž‡αžΆαž”αŸ‹ αž αžΎαž™β€‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž“αŸ…αž›αžΎαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž‘αŸ†αž αŸ†αžˆαŸ’αž˜αŸ„αŸ‡αŸ–

  • αžŸαž€αž› - αž’αžαŸαžšαž“αŸ…αžαžΆαž„αž€αŸ’αžšαŸ…αžαŸ’αž“αžΆαž€αŸ‹αž¬αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαžαŸ’αž“αžΆαŸ†αž„αž‘αŸ…αž‘αžΈαž“αŸ„αŸ‡;
  • node namespace αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαžαŸ’αž“αžΆαŸ†αž„;
  • class namespace αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαžαŸ’αž“αžΆαž€αŸ‹αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž—αžΆαž–αž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž“αŸ…αž–αŸαž›αž…αžΌαž›αž”αŸ’αžšαžΎαž’αžαŸαžš αž’αŸ’αž“αž€αž’αžΆαž…αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ namespace αž€αŸ’αž“αž»αž„αžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžšαŸ–

# пСрСмСнная Π±Π΅Π· пространства ΠΈΠΌΡ‘Π½
$var
# пСрСмСнная Π² глобальном пространствС ΠΈΠΌΡ‘Π½
$::var
# пСрСмСнная Π² пространствС ΠΈΠΌΡ‘Π½ класса
$classname::var
$::classname::var

αž…αžΌαžšαž™αžΎαž„αž™αž›αŸ‹αžŸαŸ’αžšαž”αžαžΆαž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ nginx αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžš $nginx_conf_source. αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžαŸ’αž“αžΆαž€αŸ‹αž“αžΉαž„αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

class nginx_example {
    package { 'nginx':
        ensure => installed,
    }
    -> file { '/etc/nginx':
        ensure => directory,
        source => $nginx_conf_source,   # здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ вмСсто фиксированной строки
        recure => true,
        purge  => true,
        force  => true,
    }
    ~> service { 'nginx':
        ensure => running,
        enable => true,
    }
}

node 'server2.testdomain' {
    $nginx_conf_source = 'puppet:///modules/example/nginx-conf'
    include nginx_example
}

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž‚αžΊαž˜αž·αž“αž›αŸ’αž’αž‘αŸαž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž˜αžΆαž“ "αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžŸαž˜αŸ’αž„αžΆαžαŸ‹" αžŠαŸ‚αž›αž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹αž’αžαŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‚αž”αž“αŸαŸ‡αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ” αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αž“αŸαŸ‡αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž‘αžΌαž‘αŸ… - αžαŸ’αž“αžΆαž€αŸ‹αž’αžΆαž…αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αž“αžΆαž€αŸ‹ αž‚αžΊβ€‹αž‡αžΆβ€‹αž’αžαŸαžšβ€‹αž€αŸ’αž“αž»αž„β€‹αž‘αŸ†αž αŸ†β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžαŸ’αž“αžΆαž€αŸ‹ αž–αž½αž€β€‹αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αž‡αžΆαž€αŸ‹β€‹αž€αŸ’αž“αž»αž„β€‹αž”αž‹αž˜αž€αžαžΆβ€‹αžαŸ’αž“αžΆαž€αŸ‹ αž αžΎαž™β€‹αž’αžΆαž…β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αžŠαžΌαž…β€‹αž‡αžΆβ€‹αž’αžαŸαžšβ€‹αž’αž˜αŸ’αž˜αžαžΆβ€‹αž€αŸ’αž“αž»αž„β€‹αžαž½β€‹αžαŸ’αž“αžΆαž€αŸ‹αŸ” αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαžαŸ’αž“αžΆαž€αŸ‹αž€αŸ’αž“αž»αž„ manifest αŸ”

αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ…αž‡αžΆαžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž˜αž·αž“αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž αžΎαž™αžαž˜αŸ’αž›αŸƒαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎ αžœαžΆαž“αžΉαž„αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αŸ”

αž…αžΌαžšαž™αžΎαž„αž€αŸ†αžŽαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αž“αžΆαž€αŸ‹αž–αžΈαž§αž‘αžΆαž αžšαžŽαŸαžαžΆαž„αž›αžΎ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž–αžΈαžšαŸ– αž‘αžΈαž˜αž½αž™ αž‘αžΆαž˜αž‘αžΆαžš αž‚αžΊαž‡αžΆαž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ αž αžΎαž™αž‘αžΈαž–αžΈαžš αžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αž αž‚αžΊαž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž€αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™ nginx (αž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž€αŸ’αž“αž»αž„ Debian αž˜αžΆαž“αž€αž‰αŸ’αž…αž”αŸ‹ nginx, nginx-light, nginx-full).

# ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ сразу послС ΠΈΠΌΠ΅Π½ΠΈ класса Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках
class nginx_example (
  $conf_source,
  $package_name = 'nginx-light', # ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
) {
  package { $package_name:
    ensure => installed,
  }
  -> file { '/etc/nginx':
    ensure  => directory,
    source  => $conf_source,
    recurse => true,
    purge   => true,
    force   => true,
  }
  ~> service { 'nginx':
    ensure => running,
    enable => true,
  }
}

node 'server2.testdomain' {
  # Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ класса, функция include Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚* β€” Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ resource-style declaration
  # *Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚, Π½ΠΎ ΠΏΡ€ΠΎ это расскаТу Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСрии. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово "Hiera".
  class { 'nginx_example':
    conf_source => 'puppet:///modules/example/nginx-conf',   # Π·Π°Π΄Π°Ρ‘ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ класса Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсов
  }
}

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαž™αŸ‰αž„ αž’αžαŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž›αŸ” αž”αžšαž·αž—αŸ„αž‚ αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”. αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŸαž»αž–αž›αž—αžΆαž–αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αžαŸ’αž“αžΆαž€αŸ‹αž“αž·αž„αž“αž·αž™αž˜αž“αŸαž™αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αžΉαž„αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž“αŸ„αŸ‡ αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αž“αžΉαž„αž€αžΎαžαž‘αžΎαž„αŸ”

αž”αŸ’αžšαž—αŸαž‘αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž—αŸ’αž›αžΆαž˜αŸ—αž˜αž»αž“αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαŸ–

class example (
  String $param1,
  Integer $param2,
  Array $param3,
  Hash $param4,
  Hash[String, String] $param5,
) {
  ...
}

αžαŸ’αž“αžΆαž€αŸ‹αŸ– αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αžαŸ’αž“αžΆαž€αŸ‹{'αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ’αž“αžΆαž€αŸ‹':}

αžαŸ’αž“αžΆαž€αŸ‹αž“αžΈαž˜αž½αž™αŸ—αž‚αžΊαž‡αžΆαž’αž“αž’αžΆαž“αž“αŸƒαž”αŸ’αžšαž—αŸαž‘ αžαŸ’αž“αžΆαž€αŸ‹. αžŠαžΌαž…αž“αžΉαž„αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αžš αž˜αž·αž“αž’αžΆαž…αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαžšαž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž“αžΆαž€αŸ‹αž˜αž½αž™αž‘αŸ…αžαŸ’αž“αžΆαŸ†αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž–αžΈαžšαžŠαž„αžŠαŸ„αž™αž”αŸ’αžšαžΎ class { 'classname':} (αž˜αž·αž“αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž”αŸ’αž›αŸ‚αž€αž‚αŸ’αž“αžΆ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆ αž¬αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘) αžœαžΆαž“αžΉαž„αž˜αžΆαž“αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎ class αž€αŸ’αž“αž»αž„αžšαž…αž“αžΆαž”αŸαž‘αŸ’αž˜αž’αž“αž’αžΆαž“ αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžšαž”αžŸαŸ‹αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„ manifest αŸ”

αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎ includeαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžαŸ’αž“αžΆαž€αŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αžšαžΎαž“αžŠαž„αžαžΆαž˜αž€αžΆαžšαž…αž„αŸ‹αž”αžΆαž“αŸ” αž€αžΆαžšαž–αž·αžαž‚αžΊαžαžΆ include αž‚αžΊαž‡αžΆαž˜αž»αžαž„αžΆαžš ideempotent αžŠαŸ‚αž›αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎ class αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ… directory αžŠαŸ‚αžšαž¬αž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαŸ’αž“αžΆαž€αŸ‹αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαž αžœαžΆαž”αž“αŸ’αžαŸ‚αž˜αžœαžΆ αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž˜αžΆαž“αžšαž½αž…αž αžΎαž™ αžœαžΆαž˜αž·αž“αž’αŸ’αžœαžΎαž’αŸ’αžœαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αŸ’αžšαžΎ include αž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžαŸ’αž“αžΆαž€αŸ‹αž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαž€αžΆαžŸαžαŸ’αž“αžΆαž€αŸ‹αž”αžΆαž“αž‘αŸ - αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαžαŸ‚αž€αŸ†αžŽαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαžΆαž„αž€αŸ’αžšαŸ… - Hiera ឬ ENC αŸ” αž™αžΎαž„αž“αžΉαž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž–αž½αž€αž‚αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž€αŸ†αžŽαžαŸ‹

αžŠαžΌαž…αžŠαŸ‚αž›αž”αžΆαž“αž“αž·αž™αžΆαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αž˜αž»αž“ αžαŸ’αž“αžΆαž€αŸ‹αžŠαžΌαž…αž‚αŸ’αž“αžΆαž˜αž·αž“αž’αžΆαž…αž˜αžΆαž“αžœαžαŸ’αžαž˜αžΆαž“αž“αŸ…αž›αžΎ node αž…αŸ’αžšαžΎαž“αž‡αžΆαž„αž˜αŸ’αžαž„αž‘αŸαŸ” αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžαŸ’αž›αŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž”αŸ’αžšαžΎαž”αŸ’αž›αž»αž€αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸƒαž€αžΌαžŠαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ” αž˜αŸ‰αŸ’αž™αžΆαž„αž‘αŸ€αž αžαŸ’αžšαžΌαžœαž€αžΆαžšαž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αŸ”

αž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΌαžŒαž»αž› PHP αž™αžΎαž„αž’αŸ’αžœαžΎαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ Avito:

  1. αžŠαŸ†αž‘αžΎαž„αž€αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡αŸ”
  2. αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸαŸ‡αŸ”
  3. αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž symlink αž‘αŸ… config αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ php-fpm αŸ”
  4. αž™αžΎαž„αž”αž„αŸ’αž€αžΎαž symlink αž‘αŸ… config αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ php cli αŸ”

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αŸ‚αž”αž“αŸαŸ‡αž€αžΆαžšαžšαž…αž“αžΆαžŠαžΌαž…αž‡αžΆ αž€αŸ†αžŽαžαŸ‹ (αž€αŸ†αžŽαžαŸ‹αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹ αž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹)αŸ” A Define αž‚αžΊαžŸαŸ’αžšαžŠαŸ€αž„αž‘αŸ…αž“αžΉαž„ class αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž—αžΆαž–αžαž»αžŸαž”αŸ’αž›αŸ‚αž€αž‚αŸ’αž“αžΆαŸ– αž‘αžΈαž˜αž½αž™ Define αž“αžΈαž˜αž½αž™αŸ—αž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž’αž“αž’αžΆαž“ αž˜αž·αž“αž˜αŸ‚αž“αž’αž“αž’αžΆαž“αž‘αŸαŸ” αž‘αžΈαž–αžΈαžš αž“αž·αž™αž˜αž“αŸαž™αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž”αž„αŸ’αž€αž”αŸ‹αž“αŸαž™ $titleαžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“αž‘αŸ…αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž€αžΆαžŸαŸ” αžŠαžΌαž…αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αžš αž“αž·αž™αž˜αž“αŸαž™αžαŸ’αžšαžΌαžœαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž‡αžΆαž˜αž»αž“αžŸαž·αž“ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΌαžŒαž»αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ PHPαŸ–

define php74::module (
  $php_module_name = $title,
  $php_package_name = "php7.4-${title}",
  $version = 'installed',
  $priority = '20',
  $data = "extension=${title}.son",
  $php_module_path = '/etc/php/7.4/mods-available',
) {
  package { $php_package_name:
    ensure          => $version,
    install_options => ['-o', 'DPkg::NoTriggers=true'],  # Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ дСбиановских php-ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² сами ΡΠΎΠ·Π΄Π°ΡŽΡ‚ симлинки ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ сСрвис php-fpm - Π½Π°ΠΌ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈ симлинками, ΠΈ сСрвисом ΠΌΡ‹ управляСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Puppet
  }
  -> file { "${php_module_path}/${php_module_name}.ini":
    ensure  => $ensure,
    content => $data,
  }
  file { "/etc/php/7.4/cli/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
  file { "/etc/php/7.4/fpm/conf.d/${priority}-${php_module_name}.ini":
    ensure  => link,
    target  => "${php_module_path}/${php_module_name}.ini",
  }
}

node server3.testdomain {
  php74::module { 'sqlite3': }
  php74::module { 'amqp': php_package_name => 'php-amqp' }
  php74::module { 'msgpack': priority => '10' }
}

αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αžαžŠαžΎαž˜αŸ’αž”αžΈαž…αžΆαž”αŸ‹αž€αŸ†αž αž»αžŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαžŸαŸ’αž‘αž½αž“αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„ αž€αŸ†αžŽαžαŸ‹αŸ” αžœαžΆαž€αžΎαžαž‘αžΎαž„αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αž·αž™αž˜αž“αŸαž™αž˜αžΆαž“αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαŸαžš αž αžΎαž™αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαžš αž¬αž…αŸ’αžšαžΎαž“αž“αŸƒαž“αž·αž™αž˜αž“αŸαž™αž“αŸαŸ‡αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ”

αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαžαŸ’αž›αž½αž“αž’αŸ’αž“αž€αž–αžΈαž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αŸ– αž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž“αž·αž™αž˜αž“αŸαž™αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎ $title. αž‡αž˜αŸ’αžšαžΎαžŸαž˜αž½αž™αž‚αžΊαž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž˜αž·αž“αž’αžΆαž…αžαŸ’αžœαŸ‡αž”αžΆαž“ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αž αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž’αž“αž’αžΆαž“αž‘αžΌαž‘αŸ…αž…αŸ†αž–αŸ„αŸ‡αž‚αŸ’αžšαž”αŸ‹αž€αžšαžŽαžΈαž“αŸƒαž“αž·αž™αž˜αž“αŸαž™αž‘αŸ…αž‡αžΆαžαŸ’αž“αžΆαž€αŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž›αžαŸ’αž“αžΆαž€αŸ‹αž“αŸαŸ‡αž€αŸ’αž“αž»αž„αž“αž·αž™αž˜αž“αŸαž™ - αž˜αž»αžαž„αžΆαžšαŸ” include αž‚αŸ’αž˜αžΆαž“αž€αž˜αŸ’αž›αžΆαŸ†αž„αŸ”

αž˜αžΆαž“αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž—αžΆαž–αž‘αž“αŸ‹αžαŸ’αžŸαŸ„αž™αž“αŸ…αž–αŸαž›αž”αž“αŸ’αžαŸ‚αž˜αž’αž“αž’αžΆαž“ αž–αŸ„αž›αž‚αžΊαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αž»αžαž„αžΆαžš defined ΠΈ ensure_resourcesαž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αŸ†αž–αžΈαžœαžΆαž“αŸ…αžœαž‚αŸ’αž‚αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž“αž·αž„αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αž“αž·αž™αž˜αž“αŸαž™

αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αž“αž·αž™αž˜αž“αŸαž™αž”αž“αŸ’αžαŸ‚αž˜αž…αŸ’αž”αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž“αž·αž„αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αŸ–

  • αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αŸ…αž›αžΎ class/define αž”αž“αŸ’αžαŸ‚αž˜αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αŸ…αž›αžΎαž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒ class/define;
  • αžαŸ’αž“αžΆαž€αŸ‹/αž€αŸ†αžŽαžαŸ‹αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž”αž“αŸ’αžαŸ‚αž˜αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αŸ…αž‚αŸ’αžšαž”αŸ‹αžαŸ’αž“αžΆαž€αŸ‹/αž€αŸ†αžŽαžαŸ‹αž’αž“αž’αžΆαž“αŸ”
  • class/define notification αž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž’αŸ†αž–αžΈαž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒ class/define;
  • class/define subscription αž‡αžΆαžœαž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒ class/defineαŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒ αž“αž·αž„αž‡αž˜αŸ’αžšαžΎαžŸ

αž―αž€αžŸαžΆαžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ”

if

αžœαžΆαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ–

if Π’Π«Π ΠΠ–Π•ΠΠ˜Π•1 {
  ...
} elsif Π’Π«Π ΠΠ–Π•ΠΠ˜Π•2 {
  ...
} else {
  ...
}

αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚

αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž‡αžΆ if αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸαŸ– αž”αŸ’αž›αž»αž€αž“αŸƒαž€αžΌαžŠαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αž“αŸ’αžŸαŸ„αž˜αž˜αž·αž“αž–αž·αžαŸ”

unless Π’Π«Π ΠΠ–Π•ΠΠ˜Π• {
  ...
}

αž€αžšαžŽαžΈ

αž˜αž·αž“αž˜αžΆαž“αž’αŸ’αžœαžΈαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž‘αŸαŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαžαž˜αŸ’αž›αŸƒαž’αž˜αŸ’αž˜αžαžΆ (αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš αž›αŸαžαŸ”αž›αŸ”) αž€αž“αŸ’αžŸαŸ„αž˜αž’αž˜αŸ’αž˜αžαžΆ αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαžαž˜αŸ’αž›αŸƒαŸ”

case Π’Π«Π ΠΠ–Π•ΠΠ˜Π• {
  Π—ΠΠΠ§Π•ΠΠ˜Π•1: { ... }
  Π—ΠΠΠ§Π•ΠΠ˜Π•2, Π—ΠΠΠ§Π•ΠΠ˜Π•3: { ... }
  default: { ... }
}

αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ

αž§αž”αž€αžšαžŽαŸαž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαžŠαŸ‚αž›αžŸαŸ’αžšαžŠαŸ€αž„αž“αžΉαž„ caseαž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αŸ’αž›αž»αž€αž“αŸƒαž€αžΌαžŠ αžœαžΆαžαŸ’αžšαž‘αž”αŸ‹αžαž˜αŸ’αž›αŸƒαž˜αž½αž™αŸ”

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

αž˜αŸ‰αžΌαžŒαž»αž›

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαžΌαž… αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž˜αž½αž™αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž™αžΎαž„αž–αžŽαŸŒαž“αžΆ αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αžαŸ’αž“αžΆαŸ†αž„αž˜αžΆαž“αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰ αžœαžΆαž“αžΉαž„αž€αžΎαž“αž‘αžΎαž„ αž αžΎαž™αžœαžΆαž€αŸ’αž›αžΆαž™αž‡αžΆαž€αžΆαžšαžšαž’αžΆαž€αŸ‹αžšαž’αž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αž αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΌαžŠαž‘αžΎαž„αžœαž·αž‰ - αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΌαžŠαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αžαŸ‚αž˜αž½αž™ αžœαžΆαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž€αžΌαžŠαž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αžŠαž‘αŸƒαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž‘αžΆαŸ†αž„αž–αžΈαžšαž“αŸαŸ‡ Puppet αž˜αžΆαž“αž’αž„αŸ’αž‚αž—αžΆαž–αž˜αž½αž™αž αŸ…αžαžΆ αž˜αŸ‰αžΌαžŒαž»αž›αŸ”

αž˜αŸ‰αžΌαžŒαž»αž› - αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž™αž˜αž“αŸαž™ αž“αž·αž„αž’αž„αŸ’αž‚αž—αžΆαž–αž’αžΆαž™αŸ‰αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αžαžαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™αŸ” αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž˜αŸ‰αžΌαžŒαž»αž›αž‚αžΊαž‡αžΆαž”αŸ†αžŽαŸ‚αž€αž―αž€αžšαžΆαž‡αŸ’αž™αž“αŸƒαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž’αžΆαž™αŸ‰αž„αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžœαžΆαž’αžΆαž…αž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ nginx αž αžΎαž™αžœαžΆαž“αžΉαž„αž˜αžΆαž“αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ nginx αž¬αž’αžΆαž…αž˜αžΆαž“αž˜αŸ‰αžΌαžŒαž»αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ PHP αž αžΎαž™αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž›αžΎαŸ”

αž˜αŸ‰αžΌαžŒαž»αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαŸ‚ αž αžΎαž™αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒαž˜αŸ‰αžΌαžŒαž»αž›αž“αŸ…αž›αžΎαž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€αž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž•αž„αžŠαŸ‚αžšαŸ” αž˜αžΆαž“αžƒαŸ’αž›αžΆαŸ†αž„αž”αžΎαž€αž…αŸ†αž αž“αŸƒαž˜αŸ‰αžΌαžŒαž»αž› - αž’αžΆαž™αŸ‰αž„ Forge.

αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž’αžΆαž™αŸ‰αž„ αž˜αŸ‰αžΌαžŒαž»αž›αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαžšαž„αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸƒαžαžαž«αžŸαŸ” αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš - αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž―αž€αžŸαžΆαžš αž‚αŸ†αžšαžΌ lib αž“αž·αž„αž’αŸ’αžœαžΈαŸ—αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž―αž€αžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›

αž«αžŸαž“αŸƒαž˜αŸ‰αžΌαžŒαž»αž›αž’αžΆαž…αž˜αžΆαž“αžαžαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž–αž·αž–αžŽαŸŒαž“αžΆαŸ–

  • manifests - αžœαžΆαž˜αžΆαž“ manifestos
  • files - αžœαžΆαž˜αžΆαž“αž―αž€αžŸαžΆαžš
  • templates - αžœαžΆαž˜αžΆαž“αž‚αŸ†αžšαžΌ
  • lib - αžœαžΆαž˜αžΆαž“αž›αŸαžαž€αžΌαžŠ Ruby

αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αž“αŸƒαžαž αž“αž·αž„αž―αž€αžŸαžΆαžšαž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡αŸ”

αžˆαŸ’αž˜αŸ„αŸ‡αž’αž“αž’αžΆαž“ αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αž―αž€αžŸαžΆαžšαž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›

αž―αž€αžŸαžΆαžšαž“αŸ…αž‘αžΈαž“αŸαŸ‡αŸ”

αž’αž“αž’αžΆαž“ (αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž™αž˜αž“αŸαž™) αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž˜αž·αž“αž’αžΆαž…αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αžαž”αžΆαž“αž‘αŸαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αž˜αžΆαž“αž€αžΆαžšαž†αŸ’αž›αžΎαž™αž†αŸ’αž›αž„αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžšαžœαžΆαž„αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž’αž“αž’αžΆαž“ αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž―αž€αžŸαžΆαžšαžŠαŸ‚αž› Puppet αž“αžΉαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž’αž“αž’αžΆαž“αž“αŸ„αŸ‡αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ†αž–αžΆαž“αž…αŸ’αž”αžΆαž”αŸ‹αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡ αž“αŸ„αŸ‡ Puppet αž“αžΉαž„αž˜αž·αž“αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž’αž“αž’αžΆαž“αž‘αŸ αž αžΎαž™αž’αŸ’αž“αž€αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αŸ†αž αž»αžŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αŸ”

αž…αŸ’αž”αžΆαž”αŸ‹αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αŸ–

  • αž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αžαŸ’αžšαžΌαžœαžαŸ‚αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΌαžŒαž»αž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αŸ‰αžΌαžŒαž»αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αŸ… fooαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αž“αž’αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ foo::<anything>αž¬αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚ foo.
  • αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αž˜αŸ‰αžΌαžŒαž»αž›αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš init.pp.
  • αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αž’αžΆαž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž―αž€αžŸαžΆαžšαž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–
    • αž”αž»αž–αŸ’αžœαž”αž‘αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΌαžŒαž»αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αž»αž”αž…αŸ„αž›
    • αž–αŸ„αŸ‡αžœαŸ€αž“αž’αŸ†αž‘αŸ’αžœαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž”αžΎαž˜αžΆαž“ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ†αž“αž½αžŸαžŠαŸ„αž™αžŸαž‰αŸ’αž‰αžΆαž…αž»αž…
    • αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜ .pp

αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαž˜αž½αž™αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αŸ” αž§αž”αž˜αžΆαžαžΆαžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αžŸαžšαžŸαŸαžšαž˜αŸ‰αžΌαžŒαž»αž› nginx. αžœαžΆαž˜αžΆαž“αž’αž“αž’αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

  • класс nginx αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰ init.pp;
  • класс nginx::service αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰ service.pp;
  • αž€αŸ†αžŽαžαŸ‹ nginx::server αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰ server.pp;
  • αž€αŸ†αžŽαžαŸ‹ nginx::server::location αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰ server/location.pp.

αž–αž»αž˜αŸ’αž–

αž”αŸ’αžšαžΆαž€αžŠβ€‹αžŽαžΆαžŸαŸ‹β€‹αž’αŸ’αž“αž€β€‹αžαŸ’αž›αž½αž“β€‹αž―αž„β€‹αžŠαžΉαž„β€‹αžαžΆβ€‹αž’αŸ’αžœαžΈβ€‹αž‡αžΆβ€‹αž‚αŸ†αžšαžΌ αžαŸ’αž‰αž»αŸ†β€‹αž“αžΉαž„β€‹αž˜αž·αž“β€‹αžšαŸ€αž”αžšαžΆαž”αŸ‹β€‹αž›αž˜αŸ’αž’αž·αžβ€‹αž“αŸ…β€‹αž‘αžΈαž“αŸαŸ‡β€‹αž‘αŸαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž‘αž»αž€αžœαžΆαž…αŸ„αž›αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžœαž·αž‚αžΈαž—αžΈαžŒαžΆ.

αžšαž”αŸ€αž”αž”αŸ’αžšαžΎαž–αž»αž˜αŸ’αž–αŸ– αž’αžαŸ’αžαž“αŸαž™αž“αŸƒαž‚αŸ†αžšαžΌαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž„αŸ’αžšαžΈαž€αžŠαŸ„αž™αž”αŸ’αžšαžΎαž˜αž»αžαž„αžΆαžšαž˜αž½αž™αŸ” templateαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž‚αŸ†αžšαžΌαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž“αž’αžΆαž“αž“αŸƒαž”αŸ’αžšαž—αŸαž‘ αž―αž€αžŸαžΆαžš αž”αŸ’αžšαžΎαžšαž½αž˜αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš content. αž§αž‘αžΆαž αžšαžŽαŸαžŠαžΌαž…αž“αŸαŸ‡αŸ–

file { '/tmp/example': content => template('modulename/templatename.erb')

αž˜αžΎαž›αž•αŸ’αž›αžΌαžœ <modulename>/<filename> αž”αž„αŸ’αž€αž”αŸ‹αž“αŸαž™αž―αž€αžŸαžΆαžš <rootdir>/modules/<modulename>/templates/<filename>.

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž˜αž½αž™αŸ” inline_template - αžœαžΆαž‘αž‘αž½αž›αž’αžαŸ’αžαž”αž‘αž‚αŸ†αžšαžΌαž‡αžΆαž€αžΆαžšαž”αž‰αŸ’αž…αžΌαž› αž˜αž·αž“αž˜αŸ‚αž“αžˆαŸ’αž˜αŸ„αŸ‡αž―αž€αžŸαžΆαžšαž‘αŸαŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ†αžšαžΌ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž’αžαŸαžš Puppet αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž€αŸ’αž“αž»αž„αžœαž·αžŸαžΆαž›αž—αžΆαž–αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αŸ”

αž’αžΆαž™αŸ‰αž„αž‚αžΆαŸ†αž‘αŸ’αžšαž‚αŸ†αžšαžΌαž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹ ERB αž“αž·αž„ EPPαŸ–

αžŠαŸ„αž™αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈ ERB

αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αŸ–

  • <%= Π’Π«Π ΠΠ–Π•ΠΠ˜Π• %> - αž”αž‰αŸ’αž…αžΌαž›αžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αž“αŸ’αžŸαŸ„αž˜
  • <% Π’Π«Π ΠΠ–Π•ΠΠ˜Π• %> - αž‚αžŽαž“αžΆαžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αž“αŸ’αžŸαŸ„αž˜ (αžŠαŸ„αž™αž˜αž·αž“αž”αž‰αŸ’αž…αžΌαž›αžœαžΆ)αŸ” αžŸαŸαž…αž€αŸ’αžαžΈαžαŸ’αž›αŸ‚αž„αž€αžΆαžšαžŽαŸαžαžΆαž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒ (αž”αŸ’αžšαžŸαž·αž“αž”αžΎ) αž“αž·αž„αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ† (αž“αžΈαž˜αž½αž™αŸ—) αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž‘αŸ…αž‘αžΈαž“αŸαŸ‡αŸ”
  • <%# ΠšΠžΠœΠœΠ•ΠΠ’ΠΠ Π˜Π™ %>

αž€αž“αŸ’αžŸαŸ„αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ ERB αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‡αžΆ Ruby (ERB αž‚αžΊαž–αž·αžαž‡αžΆαž”αž„αŸ’αž€αž”αŸ‹ Ruby)αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž”αŸ’αžšαžΎαž’αžαŸαžšαž–αžΈ manifest αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž“αŸ’αžαŸ‚αž˜ @ αž‘αŸ…αžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž›αž»αž”αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€αž”αž“αŸ’αž‘αžΆαžαŸ‹αžŠαŸ‚αž›αž›αŸαž…αž‘αžΎαž„αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαžŸαžΆαž„αžŸαž„αŸ‹αžœαžαŸ’αžαž»αž”αž‰αŸ’αž‡αžΆ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαžŸαŸ’αž›αžΆαž€αž”αž·αž‘ -%>.

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‚αŸ†αžšαžΌ

αž§αž”αž˜αžΆαžαžΆαžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αžŸαžšαžŸαŸαžšαž˜αŸ‰αžΌαžŒαž»αž›αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ ZooKeeper αŸ” αžαŸ’αž“αžΆαž€αŸ‹αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž config αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž“αŸαŸ‡αŸ–

class zookeeper::configure (
  Array[String] $nodes,
  Integer $port_client,
  Integer $port_quorum,
  Integer $port_leader,
  Hash[String, Any] $properties,
  String $datadir,
) {
  file { '/etc/zookeeper/conf/zoo.cfg':
    ensure  => present,
    content => template('zookeeper/zoo.cfg.erb'),
  }
}

αž“αž·αž„αž‚αŸ†αžšαžΌαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαŸ” zoo.cfg.erb - αžŠαžΌαž…αŸ’αž“αŸαŸ‡αŸ–

<% if @nodes.length > 0 -%>
<% @nodes.each do |node, id| -%>
server.<%= id %>=<%= node %>:<%= @port_leader %>:<%= @port_quorum %>;<%= @port_client %>
<% end -%>
<% end -%>

dataDir=<%= @datadir %>

<% @properties.each do |k, v| -%>
<%= k %>=<%= v %>
<% end -%>

αž€αžΆαžšαž–αž·αž αž“αž·αž„αž’αžαŸαžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™

αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž•αŸ’αž“αŸ‚αž€αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αžšαž”αžŸαŸ‹ Debian αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„αž€αŸ†αžŽαŸ‚αž˜αž½αž™ αž¬αž˜αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžŠαŸ„αž™αžŠαŸƒ αžŠαŸ„αž™αžŸαžšαžŸαŸαžšαžŸαžΆαžšαž‘αžΎαž„αžœαž·αž‰ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαŸ’αž“αžΆαŸ†αž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸαŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαž‘αŸ αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž€αž˜αŸ’αž˜αž‚αžΊαž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαžαŸ’αž“αžΆαŸ†αž„ Puppet αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαž αŸ…αžαžΆαž€αžΆαžšαž–αž·αžαŸ” αž’αž„αŸ’αž‚αž αŸαžαž» - αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ manifests αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž‡αžΆαž’αžαŸαžšαž’αž˜αŸ’αž˜αžαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ namespace αžŸαž€αž›αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž€αŸ†αžŽαŸ‚αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž”αž‰αŸ’αž‡αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ αž”αž‰αŸ’αž‡αžΈαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž”αžŽαŸ’αžαžΆαž‰ αž“αž·αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž“αž·αž„αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαŸ” αž€αžΆαžšαž–αž·αžαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ manifests αž“αž·αž„ templates αž‡αžΆαž’αžαŸαžšαž’αž˜αŸ’αž˜αžαžΆαŸ”

αž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αžΆαžšαž–αž·αžαŸ–

notify { "Running OS ${facts['os']['name']} version ${facts['os']['release']['full']}": }
# рСсурс Ρ‚ΠΈΠΏΠ° notify просто Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС Π² Π»ΠΎΠ³

αž“αž·αž™αžΆαž™αž‡αžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžš αž€αžΆαžšαž–αž·αžαž˜αž½αž™αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡ (αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš) αž“αž·αž„αžαž˜αŸ’αž›αŸƒαž˜αž½αž™ (αž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αŸ—αž˜αžΆαž“αŸ– αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš ធអរេ αžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜)αŸ” αž”αžšαž·αž—αŸ„αž‚ αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž’αž„αŸ’αž‚αž αŸαžαž»αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹. αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αžŸαžšαžŸαŸαžšαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž”αžΆαž“αžŠαŸ‚αžšαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αžΆαžšαž–αž·αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆ αžŠαžΌαž…αž‡αžΆαž˜αž»αžαž„αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Rubyαž¬αžšαž”αŸ€αž” αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αŸ”. αž€αžΆαžšαž–αž·αžαž€αŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹αž•αž„αžŠαŸ‚αžšαŸ” αž―αž€αžŸαžΆαžšαž’αžαŸ’αžαž”αž‘αž‡αžΆαž˜αž½αž™αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αŸ”

αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž’αžΆαž™αŸ‰αž„αžŠαŸ†αž”αžΌαž„αž…αž˜αŸ’αž›αž„αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αž˜αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈ pappetserver αž‘αŸ…αž€αžΆαž“αŸ‹αžαŸ’αž“αžΆαŸ†αž„ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αž½αž€αžœαžΆ αž αžΎαž™αž•αŸ’αž‰αžΎαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αž”αŸ’αžšαž˜αžΌαž›αž”αžΆαž“αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸαŸ‡ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž…αž„αž€αŸ’αžšαž„αž€αžΆαžαžΆαž‘αž»αž€αŸ”

αž€αžΆαžšαž–αž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αŸ”

αž€αžΆαžšαž–αž·αžαž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸ…αž€αŸ’αž“αž»αž„αžαž facts.d. αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž―αž€αžŸαžΆαžšαžαŸ’αžšαžΌαžœαžαŸ‚αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαžαŸ‚αž”αž‰αŸ’αž…αŸαž‰αž–αŸαžαŸŒαž˜αžΆαž“αž‘αŸ…αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹ YAML ឬ key=value formatαŸ”

αž€αž»αŸ†αž—αŸ’αž›αŸαž…αžαžΆαž€αžΆαžšαž–αž·αžαž’αž“αž»αžœαžαŸ’αžαž…αŸ†αž–αŸ„αŸ‡αžαŸ’αž“αžΆαŸ†αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαŸ„αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ poppet αžŠαŸ‚αž›αž˜αŸ‰αžΌαžŒαž»αž›αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αž‚αŸ’αžšαžΈαž” αžŸαžΌαž˜αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž˜αžΆαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž·αžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ”

#!/bin/sh
echo "testfact=success"
#!/bin/sh
echo '{"testyamlfact":"success"}'

αž€αžΆαžšαž–αž·αž Ruby

αž€αžΆαžšαž–αž·αžαž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž›αž“αŸ…αž€αŸ’αž“αž»αž„αžαž lib/facter.

# всё начинаСтся с Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Facter.add с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΊΡ‚Π° ΠΈ Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π°
Facter.add('ladvd') do
# Π² Π±Π»ΠΎΠΊΠ°Ρ… confine ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ условия примСнимости Ρ„Π°ΠΊΡ‚Π° β€” ΠΊΠΎΠ΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ true, ΠΈΠ½Π°Ρ‡Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚Π° Π½Π΅ вычисляСтся ΠΈ Π½Π΅ возвращаСтся
  confine do
    Facter::Core::Execution.which('ladvdc') # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² PATH Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ исполняСмый Ρ„Π°ΠΉΠ»
  end
  confine do
    File.socket?('/var/run/ladvd.sock') # ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ UNIX-domain socket
  end
# Π² Π±Π»ΠΎΠΊΠ΅ setcode происходит собствСнно вычислСниС значСния Ρ„Π°ΠΊΡ‚Π°
  setcode do
    hash = {}
    if (out = Facter::Core::Execution.execute('ladvdc -b'))
      out.split.each do |l|
        line = l.split('=')
        next if line.length != 2
        name, value = line
        hash[name.strip.downcase.tr(' ', '_')] = value.strip.chomp(''').reverse.chomp(''').reverse
      end
    end
    hash  # Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послСднСго выраТСния Π² Π±Π»ΠΎΠΊΠ΅ setcode являСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΊΡ‚Π°
  end
end

αž’αžαŸ’αžαž”αž‘αž€αžΆαžšαž–αž·αž

αž€αžΆαžšαž–αž·αžαž”αŸ‚αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžαž /etc/facter/facts.d αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαž™αŸ‰αž„αž…αžΆαžŸαŸ‹αž¬ /etc/puppetlabs/facts.d αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžΆαž™αŸ‰αž„αžαŸ’αž˜αžΈαŸ”

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

αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžšαž–αž·αž

αž˜αžΆαž“αžœαž·αž’αžΈαž–αžΈαžšαž™αŸ‰αžΆαž„αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΆαžšαž–αž·αžαŸ–

  • αžαžΆαž˜αžšαž™αŸˆαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜ $facts: $facts['fqdn'];
  • αž”αŸ’αžšαžΎαžˆαŸ’αž˜αŸ„αŸ‡αž–αž·αžαž‡αžΆαžˆαŸ’αž˜αŸ„αŸ‡αž’αžαŸαžšαŸ– $fqdn.

αžœαžΆαž‡αžΆαž€αžΆαžšαž›αŸ’αž’αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαžœαž…αž“αžΆαž“αž»αž€αŸ’αžšαž˜ $factsαž¬αž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αž“αŸαŸ‡ αž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αž…αž“αŸ’αž›αŸ„αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžŸαž€αž› ($::facts).

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αŸƒαž―αž€αžŸαžΆαžšαŸ”

αž’αžαŸαžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™

αž€αŸ’αžšαŸ…αž–αžΈαž€αžΆαžšαž–αž·αžαž€αŸαž˜αžΆαž“αžŠαŸ‚αžšαŸ” αž’αžαŸαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ namespace αžŸαž€αž›αŸ”

  • αž’αž„αŸ’αž‚αž αŸαžαž»αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ” β€” αž’αžαŸαžšβ€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž™αž€β€‹αž…αŸαž‰β€‹αž–αžΈβ€‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšβ€‹αžšαž”αžŸαŸ‹β€‹αž’αžαž·αžαž·αž‡αž“ (αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈβ€‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž…αŸαž‰β€‹αž‡αžΆβ€‹αž’αž˜αŸ’αž˜αžαžΆβ€‹αž“αŸ…β€‹αž›αžΎβ€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž”αž˜αŸ’αžšαžΎ poppet αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšβ€‹αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αž™αž€β€‹αž“αž·αž„β€‹αž•αŸ’αž›αžΆαžŸαŸ‹β€‹αž”αŸ’αžαžΌβ€‹αžšβ€‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšβ€‹αžšαž”αžŸαŸ‹β€‹αžαŸ’αž›αž½αž“β€‹αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž’αžαŸαžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“ "αž‘αž»αž€αž…αž·αžαŸ’αž"): αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž“αŸƒβ€‹αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš αžˆαŸ’αž˜αŸ„αŸ‡β€‹αžšαž”αžŸαŸ‹ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž“αž·αž„αžŠαŸ‚αž“ αž•αŸ’αž“αŸ‚αž€αž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžšαŸ”
  • αž€αžΆαžšαž–αž·αžαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ -αž’αžαŸαžšβ€‹αž‘αžΆαž€αŸ‹αž‘αž„β€‹αž“αžΉαž„β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž’αŸ†αž–αžΈβ€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž˜αŸβ€”αž€αŸ†αžŽαŸ‚ αžˆαŸ’αž˜αŸ„αŸ‡ αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž”αž˜αŸ’αžšαžΎ αž”αžšαž·αžŸαŸ’αžαžΆαž“αŸ”
  • αž€αžΆαžšαž–αž·αžαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžš β€” αž’αžαŸαžšαž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžŠαŸ„αž™αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž’αžΆαž™αŸ‰αž„ αž“αž·αž„αž˜αž·αž“αž˜αŸ‚αž“αžŠαŸ„αž™αž€αžΆαžšαž–αž·αž β€” αžˆαŸ’αž˜αŸ„αŸ‡αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αžαŸ’αžš αž€αŸ†αžŽαŸ‚αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžš αž€αŸ†αžŽαŸ‚αž’αžΆαž™αŸ‰αž„αŸ”
  • ធថេរមេ - ធថេរ Pappetmaster (sic!) αžœαžΆαž‚αžΊαž’αŸ†αž–αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„αž“αŸ…αž€αŸ’αž“αž»αž„ αž€αžΆαžšαž–αž·αžαžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ, αž”αžΌαž€αžαž˜αŸ’αž›αŸƒαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αžΊαž’αžΆαž…αžšαž€αž”αžΆαž“αŸ”
  • αž’αžαŸαžšαž…αž„αž€αŸ’αžšαž„ - αž’αžαŸαžšαž…αž„αž€αŸ’αžšαž„αžŠαŸ‚αž›αžαž»αžŸαž‚αŸ’αž“αžΆαž€αŸ’αž“αž»αž„αžœαž·αžŸαžΆαž›αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ—αŸ– αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž˜αŸ‰αžΌαžŒαž»αž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž“αž·αž„αžˆαŸ’αž˜αŸ„αŸ‡αžšαž”αžŸαŸ‹αž˜αŸ‰αžΌαžŒαž»αž›αžŠαŸ‚αž›αžœαžαŸ’αžαž»αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΌαž›αž”αŸ’αžšαžΎαŸ” αž–αž½αž€αžœαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αžŠαžΎαž˜αŸ’αž”αžΈαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαŸ’αž“αžΆαž€αŸ‹αž―αž€αž‡αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαž˜αŸ‰αžΌαžŒαž»αž›αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‘αŸαŸ”

αž”αž“αŸ’αžαŸ‚αž˜ 1: αžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αž·αž„αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡?

αž’αžαŸ’αžαž”αž‘αž˜αžΆαž“αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαž€αžΌαžŠαž’αžΆαž™αŸ‰αž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž”αžΆαž“αž”αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαžŠαž“αŸαŸ‡αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ” αž’αž‰αŸ’αž…αžΉαž„αžαŸ’αž‰αž»αŸ†αž€αŸ‚αžαŸ’αž›αž½αž“αž―αž„αž αžΎαž™αŸ”

αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž‚αžΊαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Puppet αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžšαžŽαžΈαž—αžΆαž‚αž…αŸ’αžšαžΎαž“ αž’αŸ’αž“αž€αž€αŸαž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž•αž„αžŠαŸ‚αžšαŸ”

αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžš

αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αŸ†αžŽαŸ‚αž‘αžΈ 5 αž€αž‰αŸ’αž…αž”αŸ‹αž’αžΆαž™αŸ‰αž„αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž–αžΈ αžƒαŸ’αž›αžΆαŸ†αž„ Puppetlabs αž•αŸ’αž›αžΌαžœαž€αžΆαžš αž•αŸ’αž‘αž»αž€αž“αžΌαžœαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ (αžαŸ’αž”αžΌαž„αž‘αž‘αžΉαž˜ αž“αž·αž„αžαŸ’αž”αžΌαž„αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆ) αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž›αŸ†αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž‘αŸ (αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ Debian - αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαžΎαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ RPM) αŸ”

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αž αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αžΆαž™αŸ‰αž„ αžœαžΆαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž‚αŸ’αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ– αž•αŸ’αžαž›αŸ‹αžαžΆαž›αŸαžαž€αžΌαžŠαž’αžΆαž™αŸ‰αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž˜αŸ’αž›αž„αž‘αŸ…αžαŸ’αž“αžΆαŸ†αž„ αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš puppet apply <ΠΏΡƒΡ‚ΡŒ ΠΊ манифСсту>:

atikhonov@atikhonov ~/puppet-test $ cat helloworld.pp 
node default {
    notify { 'Hello world!': }
}
atikhonov@atikhonov ~/puppet-test $ puppet apply helloworld.pp 
Notice: Compiled catalog for atikhonov.localdomain in environment production in 0.01 seconds
Notice: Hello world!
Notice: /Stage[main]/Main/Node[default]/Notify[Hello world!]/message: defined 'message' as 'Hello world!'
Notice: Applied catalog in 0.01 seconds

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αžŠαŸαž˜αž·αž“ - αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžšαŸ€αž„αžšαžΆαž›αŸ‹αž€αž“αŸ’αž›αŸ‡αž˜αŸ‰αŸ„αž„αž˜αŸ’αžαž„ αž–αž½αž€αž‚αŸαž“αžΉαž„αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž‘αžΆαž‰αž™αž€αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαžαŸ’αžšαžΆαž”αŸ‹αžαžΆαž˜αž‚αŸ†αžšαžΌαž“αŸƒαž€αžΆαžšαž„αžΆαžš - αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ sudo puppet agent -t. αžŸαŸ„ -t (--test) αž–αž·αžαž‡αžΆαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αž˜αŸ’αžšαžΎαžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αž‡αžΆαž›αž€αŸ’αžαžŽαŸˆαž”αž»αž‚αŸ’αž‚αž›αŸ” αž‡αž˜αŸ’αžšαžΎαžŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžšαž½αž˜αž˜αžΆαž“αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–

  • αž€αž»αŸ†αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αžŠαŸαž˜αž·αž“ (αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αžŠαŸαž˜αž·αž“);
  • αž”αž·αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžαžΆαž‘αž»αž€ (αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž“αžΉαž„αž”αž“αŸ’αžαž’αŸ’αžœαžΎαž€αžΆαžš αž“αž·αž„αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž˜αŸ’αžαž„αžšαŸ€αž„αžšαžΆαž›αŸ‹αž€αž“αŸ’αž›αŸ‡αž˜αŸ‰αŸ„αž„);
  • αžŸαžšαžŸαŸαžšαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž€αžΆαžšαž„αžΆαžšαž›αž˜αŸ’αž’αž·αž;
  • αž”αž„αŸ’αž αžΆαž‰αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαŸ”

αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž˜αžΆαž“αžšαž”αŸ€αž”αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš - αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαžœαžΆαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž˜αž·αž“αž”αŸ’αžšαžΆαž€αžŠαžαžΆαž’αŸ’αž“αž€αž”αžΆαž“αžŸαžšαžŸαŸαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž αžΎαž™αž…αž„αŸ‹αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž“αžΉαž„αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αž’αŸ†αž‘αž»αž„αž–αŸαž›αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αžšαž”αŸ€αž”αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΎαž€αžŠαŸ„αž™αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš --noop αž“αŸ…αž›αžΎαž”αž“αŸ’αž‘αžΆαžαŸ‹αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ– sudo puppet agent -t --noop.

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž’αŸ’αž“αž€αž’αžΆαž…αž”αžΎαž€αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸαž“αŸƒαž€αžΆαžšαž„αžΆαžš - αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆ αž’αžΆαž™αŸ‰αž„αžŸαžšαžŸαŸαžšαž’αŸ†αž–αžΈαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžœαžΆαž’αž“αž»αžœαžαŸ’αž: αž’αŸ†αž–αžΈαž’αž“αž’αžΆαž“αžŠαŸ‚αž›αžœαžΆαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš αž’αŸ†αž–αžΈαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸƒαž’αž“αž’αžΆαž“αž“αŸαŸ‡ αž’αŸ†αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš --debug.

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ

αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αž–αž·αž…αžΆαžšαžŽαžΆαž’αŸ†αž–αžΈαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž–αŸαž‰αž›αŸαž‰αž“αŸƒ pappetserver αž“αž·αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αžΌαžŠαž‘αŸ…αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž‘αŸ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αžαžΆαž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹αž˜αžΆαž“αž€αŸ†αžŽαŸ‚αž˜αž»αžαž„αžΆαžšαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž”αž“αŸ’αžαŸ‚αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž…αŸ†αž“αž½αž“αžαžΌαž…αž˜αž½αž™αž“αŸƒ αžαŸ’αž“αžΆαŸ†αž„ (αž“αž·αž™αžΆαž™αžšαž αžΌαžαžŠαž›αŸ‹αž˜αž½αž™αžšαž™) αŸ” αžαŸ’αž“αžΆαŸ†αž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αž“αžΉαž„αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžšαž›αŸƒαžαž˜αŸ’αžšαžΌαžœ - αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž™αŸ‰αž„αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž˜αž·αž“αž›αžΎαžŸαž–αžΈαž€αž˜αŸ’αž˜αž€αžšαž”αž½αž“αž“αžΆαž€αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαž“αž…αŸ†αž“αž½αž“αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ αž αžΎαž™αž€αž»αŸ†αž—αŸ’αž›αŸαž…αž”αž„αŸ’αž€αžΎαž“αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž“αžΉαž„αž”αŸ’αžšαž˜αžΌαž›αžŸαŸ†αžšαžΆαž˜αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αŸ”

αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αžΌαžŠ - αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž›αžΏαž“ αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž˜αžΎαž› (αž“αŸ… r10k)[https://github.com/puppetlabs/r10k] αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžαžΌαž…αŸ—αžœαžΆαž‚αž½αžšαžαŸ‚αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž αžΎαž™αŸ”

αž§αž”αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αžΈ 2αŸ– αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž’αŸ†αž–αžΈαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠ

  1. αžŠαžΆαž€αŸ‹αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αž“αž·αž™αž˜αž“αŸαž™αŸ”
  2. αžšαž€αŸ’αžŸαžΆαžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αž“αž·αž™αž˜αž“αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΌαžŒαž»αž› αž˜αž·αž“αž˜αŸ‚αž“αž“αŸ…αž€αŸ’αž“αž»αž„ manifests αžŠαŸ‚αž›αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžαŸ’αž“αžΆαŸ†αž„αž‘αŸαŸ”
  3. αž”αŸ’αžšαžΎαž€αžΆαžšαž–αž·αžαŸ”
  4. αž€αž»αŸ†αž”αž„αŸ’αž€αžΎαž ifs αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αŸ”
  5. αž˜αžΆαž“αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŸαŸαžšαžΈαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αž“αž·αž™αž˜αž“αŸαž™ - αž“αŸαŸ‡αž”αŸ’αžšαžŸαžΎαžšαž‡αžΆαž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαžŠαŸ‚αž›αž›αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αžαž½αž“αŸƒαžαŸ’αž“αžΆαž€αŸ‹/αž€αŸ†αžŽαžαŸ‹αŸ”

αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αž“αŸ’αž™αž›αŸ‹αž–αžΈαž˜αžΌαž›αž αŸαžαž»αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžŽαŸ‚αž“αžΆαŸ†αž’αŸ„αž™αž’αŸ’αžœαžΎαž”αŸ‚αž”αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αžŸαžΌαž˜αž”αž‰αŸ’αž…αž”αŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αŸ†αž–αžΈ Hiera, ENC αž“αž·αž„ PuppetDB αŸ”

αž˜αžΆαž“αžαŸ‚αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž…αžΌαž›αžšαž½αž˜αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αž‘αž„αŸ‹αž˜αžαž·αž“αŸαŸ‡αŸ” αž…αžΌαž›αžŸαžΌαž˜αŸ”

αžαžΆαž˜αž–αž·αžαž˜αžΆαž“αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ€αž - αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αžŸαžšαžŸαŸαžšαž’αžαŸ’αžαž”αž‘αž›αžΎαž”αŸ’αžšαž’αžΆαž“αž”αž‘αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž”αŸ„αŸ‡αž†αŸ’αž“αŸ„αžαž›αžΎαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αž„αŸ‹αž’αžΆαž“αž’αŸ†αž–αžΈαŸ–

  • 59,1%αžŸαŸ†αžŽαž„αŸ‹αž’αžΆαž™αŸ‰αž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹ - αž€αž˜αŸ’αžšαž·αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αŸ– αžšαž„αŸ’αžœαž·αž›αž‡αž»αŸ† αž€αžΆαžšαž’αŸ’αžœαžΎαž•αŸ‚αž“αž‘αžΈ αž“αž·αž„αž€αž“αŸ’αžŸαŸ„αž˜ lambda αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž’αž“αž’αžΆαž“ αž’αž“αž’αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž“αžΆαŸ†αž…αŸαž‰ αž“αž·αž„αž€αžΆαžšαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž’αž“αŸ’αžαžšαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαžΆαž˜αžšαž™αŸˆαž’αžΆαž™αŸ‰αž„ αžŸαŸ’αž›αžΆαž€ αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆ αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžšαžΌαž”αžΈαŸ”13
  • 31,8%"αžαŸ’αž‰αž»αŸ†αž‡αžΆαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžšαž”αžŸαŸ‹αž˜αŸ’αžαžΆαž™αžαŸ’αž‰αž»αŸ†" αž¬αžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Avito αž”αž„αŸ’αž€αžΎαžαž˜αž·αžαŸ’αžαž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ poppet αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαž€αŸ†αžŽαŸ‚αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆ αž αžΎαž™αž‡αžΆαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž•αŸ’αž“αŸ‚αž€αž’αŸ†αž–αžΈαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ poppet.7
  • 81,8%αžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž’αžΆαž™αŸ‰αž„αŸ– αž§αž”αž€αžšαžŽαŸ αž―αž€αžŸαžΆαžš αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž CI/CD.18

αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ 22 αž“αžΆαž€αŸ‹αž”αžΆαž“αž”αŸ„αŸ‡αž†αŸ’αž“αŸ„αžαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ ៧៨ αž“αžΆαž€αŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž αžΆαž˜αžƒαžΆαžαŸ‹αŸ”

αž”αŸ’αžšαž—αž–: www.habr.com