अक्सर हमें इस समस्या का सामना करना पड़ता है कि कठपुतली के साथ आने वाले मानक तथ्य हमेशा पर्याप्त नहीं होते हैं। नए तथ्यों को जोड़कर इस समस्या का समाधान प्राप्त किया जा सकता है। आप रूबी में लिखे गए अपने तथ्यों को कठपुतली सर्वर में जोड़ सकते हैं। फिर प्लग-इन सिंक्रनाइज़ेशन का उपयोग करने वाला सर्वर उन्हें सभी क्लाइंट को वितरित करेगा।
क्लाइंट पर वर्तमान में मौजूद सभी तथ्यों को देखने के लिए, फैक्टर-पी कमांड का उपयोग करें
तथ्यों की क्या जरूरत है, इसके लिए बेत
के लेख की शुरुआत
देखें ।
उदाहरण
मान लें कि हमें सिस्टम की क्षमता निर्धारित करने के लिए uname -i कमांड का आउटपुट प्राप्त करने की आवश्यकता है। ऐसा करने के लिए, हमें एक तथ्य बनाने की जरूरत है। आइए हमारे तथ्य का नाम लें हार्डवेयर_प्लेट, और कठपुतलियों के सर्वर पर हार्डवेयर_प्लेट रिकॉर्डर.आरबी बनाएँ:
{} Modulepath
└── {मॉड्यूल}
└── देय
└── तथ्य
तथ्यों में तथ्य
फैक्टर.वेल्यू ("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
तथ्यों को सेट करना।
तथ्यों में कई विकल्प होते हैं जिनका उपयोग करके आप तथ्यों को ठीक कर सकते हैं।
मध्यांतर
यदि आपका तथ्य अविश्वसनीय है और हमेशा सही ढंग से काम पूरा नहीं कर सकता है, तो आप टाइमआउट का उपयोग कर सकते हैं। यदि सेटकोड ब्लॉक का निष्पादन समय टाइमआउट से अधिक लंबा है, तो फैक्टर प्रक्रिया को बाधित करेगा और तथ्य को उस त्रुटि मान को असाइन करेगा जो तथ्य को निर्धारित करता है।
कैशिंग
यदि तथ्य कुछ समय के लिए नहीं बदलते हैं या उन्हें खोजने में लंबा समय लगता है, तो उन्हें कैश किया जा सकता है। ऐसा करने के लिए, हमें एक तथ्य घोषित करते समय ': ttl' विकल्प जोड़ना होगा
Facter.add("mylongoperation", :ttl => 600) do setcode do ... ... end end
0 - कभी कैश नहीं। डिफ़ॉल्ट व्यवहार।
-1 - कैश हमेशा के लिए है। एक बार के संचालन के लिए उपयोगी। उदाहरण के लिए: वितरण नाम।
तथ्यों का महत्व
तथ्यों का एक पैरामीटर है - वजन। अधिक वजन वाले तथ्य पहले पूरे होते हैं
तथ्यों की सीमा
हम - confine पैरामीटर का उपयोग करके अन्य तथ्यों के आधार पर तथ्यों के निष्पादन को प्रतिबंधित कर सकते हैं।
उदाहरण के लिए, केवल एक तथ्य को खोजना अगर सिस्टम का कर्नेल लिनक्स है
Facter.add(:powerstates) do confine :kernel => "Linux" setcode do Facter::Util::Resolution.exec('cat /sys/power/states') end end