मैं कई परियोजनाओं के साथ काम करता हूं, इसलिए cjc का समाधान मेरे लिए काम नहीं करेगा। आम बनाम कस्टम कॉन्फ़िगरेशन का एक मुद्दा भी है (पते आदि कंपनी के लिए आम हैं, कॉन्फ़िगरेशन में थोड़ा सा जादू भी है)। जिस स्कीम को मैंने अंत में निपटाया है वह थोड़ी हैक है, लेकिन यह एक सुविधाजनक उपयोग है।
वैश्विक के बजाय ~/.chef, मैं शेफ-रेपो के भीतर '.chef' उपनिर्देशिका का उपयोग करता हूं, जिसे गिट में संग्रहीत नहीं किया जाता है (इसे जोड़ा जाता है .gitignore)। मेरे पास फ़ाइल config/knife.rbफ़ाइल भी है जिसे Git में चेक किया गया है और इसमें साझा कॉन्फ़िगरेशन है। यह इस स्निपेट के साथ शुरू होता है:
root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
conf = File.join(root_dir, ".chef", conf_name)
Kernel::load(conf) if File.exists? conf
end
यह .chef/knife-local.rbकस्टम कॉन्फ़िगरेशन वाली फ़ाइलों को लोड करता है (मूल संस्करण में यह केवल OPSCODE_USER='username'निरंतर है जो बाद में उपयोग किया जाता है, लेकिन इसमें कोई भी चाकू कॉन्फ़िगरेशन हो सकता है), और .chef/knife-secrets.rbजिसमें साझा रहस्य (एडब्ल्यूएस कुंजी आदि) शामिल हैं।
नीचे, नियमित रूप से चाकू विन्यास है जो इन फाइलों में परिभाषित स्थिरांक का उपयोग करता है, जैसे:
client_key "#{root_dir}/.chef/#{OPSCODE_USER}.pem"
इस तरह, मैं कंपनी भर में चाकू के विन्यास के स्टैंडराइजेशन को प्राप्त करता हूं, जिसका अर्थ है कि विकी में साझा किया गया कोई भी कोड स्निपेट या चाकू आह्वान सभी के लिए काम करेगा। चाकू में पर्याप्त भ्रम और जादू है - अलग-अलग विन्यास केवल इसे बदतर बना देगा। इसके अलावा, सभी को छोटे जादू के स्निपेट्स का लाभ मिलता है, जैसे कि यहknife ssh उपयोगकर्ता में उपयोग किए गए लॉगिन को कॉन्फ़िगर करने के लिए है~/.ssh/config
साझा रहस्यों का भी मुद्दा है: शेफ सर्वर की सत्यापन कुंजी, AWS कुंजी को संग्रहीत knife-secrets.rb, EC2 की SSH निजी कुंजी, एन्क्रिप्टेड डेटा बैग कुंजियाँ, और इसी तरह। हम निश्चित रूप से नहीं चाहते हैं कि उन्हें भंडार में संग्रहीत किया जाए - या, वास्तव में, कहीं भी जहां वे सुरक्षित रूप से एन्क्रिप्ट नहीं किए गए हैं। इसलिए हम उन फाइलों को एक .tar.gzफाइल के रूप में वितरित करते हैं , जो कंपनी में सभी के लिए GPG-एन्क्रिप्टेड है, और ड्रॉपबॉक्स पर साझा की गई है।
यह सब कॉन्फ़िगर करना जटिल हो रहा है, और मैं चाहता हूं कि टीम के लोग वास्तव में इस चीज का उपयोग करें, इसलिए अंतिम तत्व है: rake initकार्य जो .chefनिर्देशिका बनाता है , config/knife.rbसहानुभूति पैदा करता है , डिक्रिप्ट करता है और chef-secrets.tgzफ़ाइल को खोल देता है, सुनिश्चित करता है कि उपयोगकर्ता की निजी ऑप्सकोड प्लेटफ़ॉर्म कुंजी है और .chef/knife-local.rbठीक से है कॉन्फ़िगर किया गया है, चाकू प्लगइन्स को सहानुभूति देता है, और निर्देशिका और फाइलों के अंदर उचित अनुमतियाँ सेट करता है। यह कार्य सेट किया गया है, ताकि इसे पहले से ही प्रारंभिक रिपॉजिटरी (उदाहरण के लिए रहस्य या चाकू प्लगइन्स को अपडेट करने के लिए) पर कई बार चलाने के लिए सुरक्षित हो।
एक सहायक कार्य भी है जो सभी रहस्यों को दोहराता है, सभी के लिए तारबॉल को एन्क्रिप्ट करता है, और इसे ड्रॉपबॉक्स में कॉपी करता है, जिससे नए कर्मचारियों को जोड़ना या रहस्य बदलना आसान हो जाता है।
कई वातावरणों के बारे में: बावर्ची में वातावरण नामक एक विशेषता होती है । मैंने अभी तक इसका उपयोग नहीं किया है, लेकिन इसे वह करना चाहिए जो आपको चाहिए। आप दो अलग-अलग होस्टेड शेफ संगठनों या शेफ सर्वरों के होने से उत्पादन वातावरण को सख्ती से अलग कर सकते हैं (डेवलपर्स के पास किसी भी तरह से संबंधित होने से बचने के लिए)। यह चाकू। आरआरबी स्निपेट दिखाता है कि वर्तमान में जाँच की गई शाखा के आधार पर चाकू को एक अलग तरीके से कैसे कॉन्फ़िगर किया जाए - आप इसका उपयोग पर्यावरण और साथ ही शेफ सर्वर के यूआरएल को सेट करने के लिए कर सकते हैं। चाकू-प्रवाह भी कहा जाता है जिसे चाकू-प्रवाह कहा जाता है , अधिक पूर्ण, दो-संगठन वर्कफ़्लो प्रदान करता है।
.chefपर्यावरण चर या कुछ और का उपयोग करने के लिए फ़ोल्डर सेट कर सकते हैं ?