2012-11-01 27 views
7

मुझे एक शेफ रेसिपी में एक संसाधन मिला है जिसे मैं वैकल्पिक बनाना चाहता हूं। यही है, जब नुस्खा चलता है, अगर संसाधन विफल रहता है तो मैं बाकी सब कुछ जारी रखना चाहता हूं। मैं अभी भी जानना चाहता हूं कि उस संसाधन के साथ विफलता थी, यह सिर्फ एक महत्वपूर्ण संसाधन नहीं है और कुछ भी इस पर निर्भर नहीं है, इसलिए मैं बाकी की दौड़ जारी रखूंगा।आप शेफ संसाधन वैकल्पिक कैसे बनाते हैं?

मुझे कठपुतली के साथ काम करने के लिए उपयोग किया जाता है, जहां आपको अपनी निर्भरताओं को स्पष्ट रूप से घोषित करना होता है, और संसाधन केवल तभी छोड़े जाते हैं जब वे निर्भरता विफल हो जाते हैं क्योंकि पूरी तरह से फ़ाइल नहीं चलती है।

यह सुनिश्चित नहीं है कि यह वास्तविक प्रश्न (यहां तक ​​कि एफएक्यू पढ़ने के बाद भी) बंद क्यों किया गया था, लेकिन मैं जो कुछ पूछ रहा हूं उसे चित्रित करने के लिए मैं कुछ उदाहरण कोड जोड़ूंगा, उम्मीद है कि कोई और फिर से खोलने या उत्तर देने के लिए वोट दे सकता है।

मैं एक देव वातावरण स्थापित करने के लिए शेफ का उपयोग कर रहा हूं, और इसका हिस्सा बस कुछ गिट रेपो को क्लोनिंग कर रहा है। कुछ भी उन पर निर्भर नहीं करता है, और कभी-कभी एक निजी रेपो है कि कुछ देवताओं तक पहुंच नहीं है। अगर यह क्लोन करने में विफल रहता है, तो मैं अन्य संसाधनों को जारी रखना जारी रखना चाहता हूं।

निम्न संसाधनों के

तो:

["foo", "bar", "baz"].each do |repo| 
    git repo do 
    repository "[email protected]/example/#{repo}" 
    reference "master" 
    action  :sync 
    depth  1 
    user  'dev' 
    group  'dev' 
    destination "#{node[:src_dir]}/#{repo}" 
    end 
end 

उपयोगकर्ता चल रहा यह foo क्लोन करने के लिए अनुमति नहीं है, मैं विफल foo चाहते हैं, लेकिन बार और baz अभी भी क्लोन करने के लिए है। वो कैसे संभव है?

+1

त्वरित और गंदी विकल्पों को सेट कर सकते हैं: ignore_failure सच है, only_if "कर्ल http://github.com/repo" – agross

+1

ignore_failure मैं के लिए क्या देख रहा था। कर्ल वास्तव में काम नहीं करेगा क्योंकि यह एक निजी रेपो है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं, इसलिए मैं इसके लिए एसएसएच कुंजी पर निर्भर हूं। साथ ही, केवल_आईफ मुझे कुछ भी बताए बिना संसाधन को बाईपास कर देगा, जबकि अनदेखा_फाइल मुझे लॉग में एक अच्छा संदेश देता है: 'STDERR: त्रुटि: रिपोजिटरी नहीं मिली। ignore_failure सेट है, जारी है ' – mmrobins

उत्तर

0

एक संभावना है कि आप अपनी खुद की प्रदाता कक्षा को Chef::Provider::Git उप-वर्ग बनाएं और उस व्यवहार को बदलें जिसे आप उपclass में पसंद नहीं करते हैं। आप उस संसाधन के लिए प्रदाता कक्षा सेट करने के लिए संसाधन में provider विशेषता विधि का उपयोग कर सकते हैं - इस मामले में, आपके प्रदाता वर्ग में। आप संभावित रूप से पुस्तकालय फ़ाइल में अपनी प्रदाता कक्षा रखेंगे।