कठपुतली - प्रकार और प्रदाता
कठपुतली प्रकार का उपयोग व्यक्तिगत कॉन्फ़िगरेशन प्रबंधन के लिए किया जाता है। कठपुतलियों में विभिन्न प्रकार होते हैं जैसे एक सेवा प्रकार, पैकेज प्रकार, प्रदाता प्रकार, आदि जिसमें प्रत्येक प्रकार के प्रदाता होते हैं। प्रदाता विभिन्न प्लेटफार्मों या टूल पर कॉन्फ़िगरेशन को संभालता है। उदाहरण के लिए, पैकेज के प्रकार में योग्यता, यम, आरपीएम और डीजीएम प्रदाता हैं। बहुत सारे प्रकार हैं और कठपुतली एक अच्छा स्पेक्ट्रम कॉन्फ़िगरेशन प्रबंधन आइटम शामिल करती है जिसे प्रबंधित करने की आवश्यकता होती है।
कठपुतली रूबी को अपनी आधार भाषा के रूप में इस्तेमाल करती है। मौजूद सभी कठपुतली प्रकार और प्रदाता रूबी भाषा में लिखे गए हैं। जैसा कि यह मानक एन्कोडिंग प्रारूप का अनुसरण करता है, कोई उन्हें केवल रेपो के उदाहरण में दिखाए गए अनुसार बना सकता है जो रिपॉजिटरी का प्रबंधन करता है। यहां, हम प्रकार रेपो और प्रदाताओं के svn और git बनाएंगे। रेपो टाइप का पहला हिस्सा खुद टाइप होता है। प्रकार आम तौर पर lib / कठपुतली / प्रकार में संग्रहीत होते हैं। इसके लिए हम एक फाइल बनाएंगे जिसका नाम हैrepo.rb।
$ touch repo.rb
फ़ाइल में निम्न सामग्री जोड़ें।
Puppet::Type.newtype(:repo) do
@doc = "Manage repos"
Ensurable
newparam(:source) do
desc "The repo source"
validate do |value|
if value =~ /^git/
resource[:provider] = :git
else
resource[:provider] = :svn
end
end
isnamevar
end
newparam(:path) do
desc "Destination path"
validate do |value|
unless value =~ /^\/[a-z0-9]+/
raise ArgumentError , "%s is not a valid file path" % value
end
end
end
end
उपरोक्त स्क्रिप्ट में, हमने एक ब्लॉक बनाया है "Puppet::Type.newtype(:repo) do"जो रेपो नाम के साथ एक नए प्रकार का निर्माण करता है। फिर, हमारे पास @doc है जो जो भी विवरण जोड़ना चाहता है उसे जोड़ने में मदद करता है। अगला बयान सुनिश्चित करने योग्य है; यह एक बुनियादी सुनिश्चित संपत्ति बनाता है। कठपुतली प्रकार का उपयोग करता है। ensure कॉन्फ़िगरेशन आइटम की स्थिति का निर्धारण करने के लिए गुण।
उदाहरण
service { "sshd":
ensure => present,
}
सुनिश्चित करने वाला विवरण कठपुतली को तीन विधि को छोड़कर बताता है: प्रदाता में बनाना, नष्ट करना और मौजूद होना। ये विधियाँ निम्न सुविधाएँ प्रदान करती हैं -
- संसाधन बनाने के लिए एक कमांड
- किसी संसाधन को हटाने का आदेश
- संसाधन के अस्तित्व की जांच करने के लिए एक कमांड
इसके बाद हमें इन विधियों और उनकी सामग्रियों को निर्दिष्ट करने की आवश्यकता है। कठपुतली उनके चारों ओर सहायक आधारभूत संरचना का निर्माण करती है।
अगला, हम स्रोत नामक एक नए पैरामीटर को परिभाषित करते हैं।
newparam(:source) do
desc "The repo source"
validate do |value|
if value =~ /^git/
resource[:provider] = :git
else
resource[:provider] = :svn
end
end
isnamevar
end
स्रोत रेपो प्रकार को बताएगा जहां स्रोत रिपॉजिटरी को पुनः प्राप्त / क्लोन / चेकआउट करना है। इसमें, हम एक हुक का भी उपयोग कर रहे हैं जिसे वैलिडेट कहा जाता है। प्रदाता अनुभाग में, हमने git और svn को परिभाषित किया है जो हमारे द्वारा परिभाषित भंडार की वैधता के लिए जाँच करते हैं।
अंत में, कोड में हमने पथ नामक एक और पैरामीटर को परिभाषित किया है।
newparam(:path) do
desc "Destination path"
validate do |value|
unless value =~ /^\/[a-z0-9]+/
raise ArgumentError , "%s is not a valid file path" % value
end
यह वह मान प्रकार है जो निर्दिष्ट करता है कि नए कोड को कहां रखा जाए। यहां, एक ब्लॉक बनाने के लिए फिर से मान्य हुक का उपयोग करें जो उपयुक्तता के मूल्य की जांच करता है।
तोड़फोड़ प्रदाता उपयोग मामला
उपर्युक्त प्रकार का उपयोग करके तोड़फोड़ प्रदाता के साथ शुरू करते हैं।
require 'fileutils'
Puppet::Type.type(:repo).provide(:svn) do
desc "SVN Support"
commands :svncmd => "svn"
commands :svnadmin => "svnadmin"
def create
svncmd "checkout", resource[:name], resource[:path]
end
def destroy
FileUtils.rm_rf resource[:path]
end
def exists?
File.directory? resource[:path]
end
end
उपरोक्त कोड में, हमारे पास अपफ्रंट डिफाइन है जो हमें चाहिए fileutils पुस्तकालय, आवश्यकता है 'fileutils' जिससे हम विधि का उपयोग करने जा रहे हैं।
अगला, हमने प्रदाता को ब्लॉक कठपुतली के रूप में परिभाषित किया है :: Type.type (: repo) .provide (: svn) करते हैं जो कठपुतली को बताता है कि यह प्रकार के लिए प्रदाता है जिसे रेपो कहा जाता है।
फिर, हमने जोड़ा है descजो प्रदाता को कुछ प्रलेखन जोड़ने की अनुमति देता है। हमने उस कमांड को भी परिभाषित किया है जिसका उपयोग यह प्रदाता करेगा। अगली पंक्ति में, हम संसाधन बनाने, हटाने, और मौजूद होने जैसी सुविधाओं की जाँच कर रहे हैं।
एक संसाधन बनाना
एक बार उपरोक्त सभी कार्य पूरा हो जाने के बाद, हम एक संसाधन बनाएंगे जिसका उपयोग हमारी कक्षाओं में किया जाएगा और निम्न कोड में दिखाए अनुसार फाइलों को प्रकट करेंगे।
repo { "wp":
source => "http://g01063908.git.brcl.org/trunk/",
path => "/var/www/wp",
ensure => present,
}