2011-05-26 11 views
18

को तोड़ता है मेरे पास मौजूदा chef-solo प्रोजेक्ट है जिसमें मैं vagrant समर्थन जोड़ने की कोशिश कर रहा हूं। मैं आमतौर पर कैनोनिकल द्वारा प्रकाशित उबंटू 10.04 एएमआई का उपयोग करके ईसी 2 सर्वर पर इन व्यंजनों को पकाए जाने के लिए चाकू का उपयोग करता हूं। मुझे नहीं भूमिका परिभाषा फ़ाइल में इन्हें जोड़ने कर तोवाग्रेंट को भूमिकाओं की आवश्यकता होती है जो roles.json में मौजूदा शेफ प्रोजेक्ट

{ 
    "name": "memcached", 
    "chef_type": "role", 
    "json_class": "Chef::Role", 
    "run_list": ["base", "memcached"] 
} 

, तो मैं यह अगले त्रुटि मिलती है:

Vagrant है कि मैं अपने काम कर roles/*.json फ़ाइलों को chef_type और json_class विशेषताओं को जोड़ने इस तरह, की आवश्यकता है । संभवतः ये गुण शेफ को मेरी जेएसओएन फाइल का इलाज करने के लिए शेफ :: रोल क्लास के उदाहरण की तरह बताते हैं।

[default] [Thu, 26 May 2011 02:19:44 +0200] DEBUG: NoMethodError: undefined method `run_list_for' for {"name"=>"memcached", "run_list"=>["wantsa", "memcached"]}:Hash 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/run_list/run_list_expansion.rb:139:in `expand_run_list_items' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/run_list/run_list_expansion.rb:78:in `expand' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/run_list.rb:138:in `expand' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/node.rb:437:in `expand!' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/client.rb:249:in `build_node' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/client.rb:151:in `run' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application/solo.rb:192:in `run_application' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application/solo.rb:183:in `loop' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application/solo.rb:183:in `run_application' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/../lib/chef/application.rb:66:in `run' 
/opt/ruby/lib/ruby/gems/1.8/gems/chef-0.10.0/bin/chef-solo:25 
/opt/ruby/bin/chef-solo:19:in `load' 
/opt/ruby/bin/chef-solo:19 

हालांकि, जब मैं chef_type और json_class विशेषताओं के अस्तित्व EC2 पर एक ही भूमिका पकाने के लिए कोशिश की प्रक्रिया को तोड़ने, अगले त्रुटि उपज। मुमकिन है इस वजह से इस मामले में महाराज एक रूबी हैश की तरह मेरी भूमिका परिभाषा के इलाज के लिए (और इसे से .delete कहते हैं) चाहता है

/usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/node.rb:379:in `consume_run_list': undefined method `delete' for #<Chef::Role:0x7fa337535138> (NoMethodError) 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/node.rb:370:in `consume_attributes' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/node.rb:358:in `consume_external_attrs' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/client.rb:222:in `build_node' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/client.rb:145:in `run' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application/solo.rb:190:in `run_application' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application/solo.rb:181:in `loop' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application/solo.rb:181:in `run_application' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/../lib/chef/application.rb:62:in `run' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.16/bin/chef-solo:25 
    from /usr/bin/chef-solo:19:in `load' 
    from /usr/bin/chef-solo:19 
rake aborted! 

जब मैं chef_type और हटाने json_class मेरी EC2 खाना पकाने स्क्रिप्ट वापस सामान्य रूप में काम करने के लिए जाना, लेकिन फिर वाग्रेंट टूट गया है।

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

खान:

ssh [email protected] "cd /etc/chef; sudo env chef_environment=production chef-solo -l info -c config/solo.rb -j roles/memcached.json " 

Vagrants:

cd /tmp/vagrant-chef 
chef-solo -c solo.rb -j dna.json 

वहाँ कोई रास्ता है कि मैं कॉन्फ़िगर कर सकते हैं मेरी Vagrantfile इन काम करने के लिए है?

उत्तर

1

जबकि मैंने इस विशेष समस्या में भाग नहीं लिया है, मैंने देखा है कि शेफ, एक चलती लक्ष्य के रूप में, यदि आप शेफ के विभिन्न संस्करणों पर एक ही व्यंजनों का उपयोग कर रहे हैं तो अजीब चीजें होती हैं।

बस इसे खत्म करने के लिए, सबसे पहले मैं कोशिश करता हूं कि मेरे शेफ संस्करणों को सुसंगत बनाना है। मैं देखता हूं कि आपका वाग्रेंट वीएम संस्करण 0.10.0 का उपयोग कर रहा है और आपका ईसी 2 वीएम 0.9.16 का उपयोग कर रहा है - जो भी अधिक महत्वपूर्ण है, शायद आप उस पर मानकीकृत कर सकते हैं - उदा। यदि आप स्थानीय रूप से अपने ईसी 2 सिस्टम को दोहराने की कोशिश कर रहे हैं, तो आप अपने वाग्रेंट बेस बॉक्स को फिर से बना सकते हैं (या अपना खुद का निर्माण कर सकते हैं, दस्तावेज वैगेंट वेबसाइट पर बहुत अच्छा है) जैसे कि यह आपके द्वारा इंस्टॉल किए गए कार्यों से अधिक निकटता से मेल खाता है EC2।

0

यह शेफ के नवीनतम संस्करण में तय किया जाना चाहिए। एक JSON भेद्यता थी जो अनंत वस्तु deserialization की अनुमति दी। मेरा मानना ​​है कि इसके लिए फिक्स मुद्दे भी उस मुद्दे को ठीक करेंगे जो आप यहां देख रहे हैं।

शेफ 11 और वाग्रेंट 1.5.6

आज़माएं