कठपुतली पर तथ्य

अक्सर हमें इस समस्या का सामना करना पड़ता है कि कठपुतली के साथ आने वाले मानक तथ्य हमेशा पर्याप्त नहीं होते हैं। नए तथ्यों को जोड़कर इस समस्या का समाधान प्राप्त किया जा सकता है। आप रूबी में लिखे गए अपने तथ्यों को कठपुतली सर्वर में जोड़ सकते हैं। फिर प्लग-इन सिंक्रनाइज़ेशन का उपयोग करने वाला सर्वर उन्हें सभी क्लाइंट को वितरित करेगा।

क्लाइंट पर वर्तमान में मौजूद सभी तथ्यों को देखने के लिए, फैक्टर-पी कमांड का उपयोग करें

तथ्यों की क्या जरूरत है, इसके लिए बेत के लेख की शुरुआत देखें

उदाहरण

मान लें कि हमें सिस्टम की क्षमता निर्धारित करने के लिए uname -i कमांड का आउटपुट प्राप्त करने की आवश्यकता है। ऐसा करने के लिए, हमें एक तथ्य बनाने की जरूरत है। आइए हमारे तथ्य का नाम लें हार्डवेयर_प्लेट, और कठपुतलियों के सर्वर पर हार्डवेयर_प्लेट रिकॉर्डर.आरबी बनाएँ:

{} Modulepath
└── {मॉड्यूल}
└── देय
└── तथ्य


# hardware_platform.rb Facter.add("hardware_platform") do setcode do Facter::Util::Resolution.exec('/bin/uname -i') end end 


तथ्यों में तथ्य

फैक्टर.वेल्यू ("somefact") या Facter.somefact कंस्ट्रक्शन का उपयोग करके अपने मालिक को लिखते समय हम तथ्य मूल्यों का उपयोग कर सकते हैं। यदि कोई तथ्य नहीं है, तो पहला 0 वापस आ जाएगा, और दूसरा अपवाद होगा।
 Facter.add("osfamily") do setcode do distid = Facter.value('lsbdistid') case distid when /RedHatEnterprise|CentOS|Fedora/ "redhat" when "ubuntu" "debian" else distid end end end 

अब, क्लाइंट पर कठपुतली एजेंट के अगले लॉन्च के बाद, तथ्य उपलब्ध हो जाएगा।

टिप्पणी

कठपुतली सर्वर और क्लाइंट पर, [मुख्य] ​​अनुभाग में एक विकल्प होना चाहिए
pluginsync = true

तथ्यों को सेट करना।


तथ्यों में कई विकल्प होते हैं जिनका उपयोग करके आप तथ्यों को ठीक कर सकते हैं।

मध्यांतर

यदि आपका तथ्य अविश्वसनीय है और हमेशा सही ढंग से काम पूरा नहीं कर सकता है, तो आप टाइमआउट का उपयोग कर सकते हैं। यदि सेटकोड ब्लॉक का निष्पादन समय टाइमआउट से अधिक लंबा है, तो फैक्टर प्रक्रिया को बाधित करेगा और तथ्य को उस त्रुटि मान को असाइन करेगा जो तथ्य को निर्धारित करता है।
 #  timeout Facter.add(:sleep) do timeout = 10 setcode do if Random.rand(6) == 0 sleep 999999 else "awake" end end end 


कैशिंग

यदि तथ्य कुछ समय के लिए नहीं बदलते हैं या उन्हें खोजने में लंबा समय लगता है, तो उन्हें कैश किया जा सकता है। ऐसा करने के लिए, हमें एक तथ्य घोषित करते समय ': ttl' विकल्प जोड़ना होगा
 Facter.add("mylongoperation", :ttl => 600) do setcode do ...  ... end end 


0 - कभी कैश नहीं। डिफ़ॉल्ट व्यवहार।
-1 - कैश हमेशा के लिए है। एक बार के संचालन के लिए उपयोगी। उदाहरण के लिए: वितरण नाम।

तथ्यों का महत्व

तथ्यों का एक पैरामीटर है - वजन। अधिक वजन वाले तथ्य पहले पूरे होते हैं
 #  Facter.add(:role) do has_weight 100 setcode do if File.exist? "/etc/postgres_server" "postgres_server" end end end #     Facter.add(:role) do has_weight 50 setcode do if File.exist? "/usr/sbin/pg_create" "postgres_server" end end end #      ,    Facter.add(:role) do setcode do "desktop" end end 


तथ्यों की सीमा

हम - confine पैरामीटर का उपयोग करके अन्य तथ्यों के आधार पर तथ्यों के निष्पादन को प्रतिबंधित कर सकते हैं।
उदाहरण के लिए, केवल एक तथ्य को खोजना अगर सिस्टम का कर्नेल लिनक्स है
 Facter.add(:powerstates) do confine :kernel => "Linux" setcode do Facter::Util::Resolution.exec('cat /sys/power/states') end end 

Source: https://habr.com/ru/post/In165543/


All Articles