หุ่น - โมดูล

ใน Puppet โมดูลสามารถกำหนดเป็นคอลเล็กชันของทรัพยากรคลาสไฟล์นิยามและเทมเพลต Puppet รองรับการแจกจ่ายโมดูลซ้ำได้ง่ายซึ่งมีประโยชน์อย่างมากในการสร้างโค้ดแบบแยกส่วนเนื่องจากสามารถเขียนโมดูลทั่วไปที่ระบุและสามารถใช้งานได้หลายครั้งโดยมีการเปลี่ยนแปลงโค้ดเพียงเล็กน้อย ตัวอย่างเช่นการดำเนินการนี้จะเปิดใช้งานการกำหนดค่าไซต์เริ่มต้นภายใต้ / etc / หุ่นโดยมีโมดูลที่จัดส่งโดย Puppet ที่เหมาะสมใน / etc / share / robot

การกำหนดค่าโมดูล

ในโมดูล Puppet ใด ๆ เรามีสองพาร์ติชันที่ช่วยในการกำหนดโครงสร้างของโค้ดและควบคุมส่วนต่างๆ

  • เส้นทางการค้นหาของโมดูลถูกกำหนดค่าโดยใช้รายการไดเร็กทอรีที่คั่นด้วยโคลอนในไฟล์ puppetmasterd หรือ masterdส่วนต่อมาของไฟล์คอนฟิกูเรชันหลักของ Puppet ที่มีนามสกุล modulepath พารามิเตอร์.

[puppetmasterd] 
... 
modulepath = /var/lib/puppet/modules:/data/puppet/modules

    สามารถเพิ่มพา ธ การค้นหาที่รันไทม์ได้โดยการตั้งค่าตัวแปรสภาพแวดล้อม PUPPETLAB ซึ่งต้องเป็นรายการตัวแปรที่คั่นด้วยโคลอน

  • การตั้งค่าการควบคุมการเข้าถึงสำหรับโมดูลเซิร์ฟเวอร์ไฟล์ใน fileserver.conf การกำหนดค่าพา ธ สำหรับโมดูลนั้นจะถูกละเว้นเสมอและการระบุเส้นทางจะทำให้เกิดคำเตือน

แหล่งที่มาของโมดูล

Puppet รองรับตำแหน่งอื่นสำหรับจัดเก็บโมดูล โมดูลใด ๆ สามารถจัดเก็บในระบบไฟล์ที่แตกต่างกันของเครื่องใดเครื่องหนึ่ง อย่างไรก็ตามต้องระบุพา ธ ทั้งหมดที่จัดเก็บโมดูลไว้ในตัวแปรคอนฟิกูเรชันที่เรียกว่าmodulepath ซึ่งโดยทั่วไปเป็นตัวแปรพา ธ ที่ Puppet สแกนหาไดเร็กทอรีโมดูลทั้งหมดและโหลดขึ้นเมื่อกำลังบูต

เส้นทางเริ่มต้นที่เหมาะสมสามารถกำหนดค่าเป็น -

/etc/puppet/modules:/usr/share/puppet:/var/lib/modules.

หรืออีกวิธีหนึ่งคือไดเร็กทอรี / etc / Puppet สามารถสร้างเป็นโมดูลที่ไม่ระบุชื่อพิเศษซึ่งจะถูกค้นหาก่อนเสมอ

การตั้งชื่อโมดูล

Puppet เป็นไปตามมาตรฐานการตั้งชื่อเดียวกันของโมดูลเฉพาะโดยชื่อโมดูลต้องเป็นคำปกติจับคู่ [- \\ w +] (ตัวอักษรคำตัวเลขขีดล่างและขีดกลาง) และไม่มีตัวคั่นเนมสเปซ: หรือ /. แม้ว่าอาจได้รับอนุญาตเกี่ยวกับลำดับชั้นของโมดูล แต่สำหรับโมดูลใหม่ก็ไม่สามารถซ้อนกันได้

โมดูลภายในองค์กร

เมื่อผู้ใช้สร้างโมดูลใหม่ใน Puppet โมดูลจะเป็นไปตามโครงสร้างเดียวกันและมีรายการไฟล์แบบกระจายปลั๊กอินและเทมเพลตที่จัดเรียงในโครงสร้างไดเร็กทอรีเฉพาะดังที่แสดงในโค้ดต่อไปนี้

MODULE_PATH/ 
   downcased_module_name/ 
      files/ 
      manifests/ 
         init.pp 
      lib/ 
         puppet/ 
            parser/ 
               functions 
            provider/ 
            type/ 
         facter/ 
      templates/ 
      README

เมื่อใดก็ตามที่สร้างโมดูลขึ้นมาจะมี init.ppไฟล์ manifest ที่ตำแหน่งฟิกซ์ที่ระบุภายในไดเร็กทอรี manifest ไฟล์รายการนี้เป็นไฟล์ดีฟอลต์ซึ่งเรียกใช้งานก่อนในโมดูลใด ๆ และมีคอลเล็กชันของคลาสทั้งหมดที่เกี่ยวข้องกับโมดูลนั้น ๆ เพิ่มเติม.ppสามารถเพิ่มไฟล์ได้โดยตรงภายใต้โฟลเดอร์ Manifest หากเรากำลังเพิ่มไฟล์. pp เพิ่มเติมควรตั้งชื่อตามคลาส

หนึ่งในคุณสมบัติหลักที่ทำได้โดยใช้โมดูลคือการแชร์โค้ด โมดูลโดยธรรมชาติควรมีอยู่ในตัวซึ่งหมายความว่าควรรวมโมดูลใด ๆ จากที่ใดก็ได้และวางลงบนเส้นทางโมดูลซึ่งจะโหลดเมื่อ Puppet บูทขึ้น ด้วยความช่วยเหลือของโมดูลหนึ่งจะได้รับความเป็นโมดูลาร์ในการเข้ารหัสโครงสร้างพื้นฐานของหุ่นกระบอก

ตัวอย่าง

พิจารณาโมดูล autofs ที่ติดตั้งแผนที่ auto.homes แบบคงที่และสร้าง auto.master จากเทมเพลต

class autofs { 
   package { autofs: ensure => latest } 
   service { autofs: ensure => running } 
   
   file { "/etc/auto.homes": 
      source => "puppet://$servername/modules/autofs/auto.homes" 
   } 
   file { "/etc/auto.master": 
      content => template("autofs/auto.master.erb") 
   } 
}

ระบบไฟล์จะมีไฟล์ดังต่อไปนี้

MODULE_PATH/ 
autofs/ 
manifests/ 
init.pp 
files/ 
auto.homes 
templates/ 
auto.master.erb

การค้นหาโมดูล

หุ่นเป็นไปตามโครงสร้างที่กำหนดไว้ล่วงหน้าซึ่งประกอบด้วยไดเร็กทอรีและไดเร็กทอรีย่อยหลายรายการในโครงสร้างที่กำหนดไว้ ไดเร็กทอรีเหล่านี้มีไฟล์ประเภทต่างๆที่โมดูลต้องการเพื่อดำเนินการบางอย่าง ความมหัศจรรย์เบื้องหลังเล็กน้อยช่วยให้แน่ใจว่าไฟล์ที่ถูกต้องเชื่อมโยงกับบริบทที่ถูกต้อง การค้นหาโมดูลทั้งหมดอยู่ภายใน modulepath ซึ่งเป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอน

สำหรับการอ้างอิงไฟล์บนเซิร์ฟเวอร์ไฟล์จะใช้การอ้างอิงที่คล้ายกันเพื่อให้การอ้างอิงไปยังหุ่น: //$servername/modules/autofs/auto.homes แก้ไขเป็นไฟล์ autofs / files / auto.homes ในพา ธ ของโมดูล

ในการทำให้โมดูลสามารถใช้งานได้กับทั้งไคลเอนต์บรรทัดคำสั่งและหุ่นต้นแบบเราสามารถใช้ URL ของเส้นทางจากหุ่น: /// เช่น URL ที่ไม่มีชื่อเซิร์ฟเวอร์ที่ชัดเจน URL ดังกล่าวได้รับการปฏิบัติแตกต่างกันเล็กน้อยโดยPuppet และ puppetd. Puppet ค้นหา URL แบบไร้เซิร์ฟเวอร์ในระบบไฟล์โลคัล

ไฟล์เทมเพลตจะถูกค้นหาในลักษณะที่คล้ายกับไฟล์ Manifest และไฟล์: การกล่าวถึงแม่แบบ (“ autofs / auto.master.erb”) จะทำให้หุ่นมาสเตอร์มองหาไฟล์ใน $templatedir/autofs/auto.master.erb แล้ว autofs/templates/auto.master.erbบนเส้นทางโมดูล ด้วยทุกสิ่งที่อยู่ภายใต้ Puppet เวอร์ชัน Puppet นั้นสามารถใช้ได้ เรียกว่าการโหลดโมดูลอัตโนมัติ Puppet จะพยายามโหลดคลาสและคำจำกัดความจากโมดูลโดยอัตโนมัติ