2012-07-08 10 views
26

शेफ एक अजीब क्रम में संसाधनों को संसाधित कर रहा है, जिससे मेरा निर्माण विफल हो गया है। मेरा मुख्य नुस्खा (mytardis-chef/site-cookbooks/recipes/default.rb) इस तरह शुरू होता है:शेफ: "include_recipe" चरण में संसाधन क्यों छोड़े जा रहे हैं?

include_recipe "build-essential" 
include_recipe "mytardis::deps" 
include_recipe "mytardis::nginx" 
include_recipe "mytardis::postgresql" 

mytardis-chef/cookbooks/build-essential/recipes/default.rb इस तरह दिखता है:

case node['platform'] 
when "ubuntu","debian" 
    %w{build-essential binutils-doc}.each do |pkg| 
    package pkg do 
     action :install 
    end 
    end 
when "centos","redhat","fedora","scientific" 
    %w{gcc gcc-c++ kernel-devel make}.each do |pkg| 
    package pkg do 
     action :install 
    end 
    end 
end 

...

रनटाइम पर, कारणों के लिए (यह https://github.com/opscode-cookbooks/build-essential/blob/master/recipes/default.rb के एक पुराने संस्करण है) मैं समझ में नहीं आता है, यह बिल्ड-आवश्यक नुस्खा लोड हो जाता है लेकिन निष्पादित नहीं किया जाता है:

[default] Waiting for VM to boot. This can take a few minutes. 
[default] VM booted and ready for use! 
[default] Mounting shared folders... 
[default] -- v-root: /vagrant 
[default] -- v-csr-3: /tmp/vagrant-chef-1/chef-solo-3/roles 
[default] -- v-csc-2: /tmp/vagrant-chef-1/chef-solo-2/cookbooks 
[default] -- v-csc-1: /tmp/vagrant-chef-1/chef-solo-1/cookbooks 
[default] -- v-csdb-4: /tmp/vagrant-chef-1/chef-solo-4/data_bags 
[default] Running provisioner: Vagrant::Provisioners::ChefSolo... 
[default] Generating chef JSON and uploading... 
[default] Running chef-solo... 
[Sun, 08 Jul 2012 05:14:32 +0200] INFO: *** Chef 10.12.0 *** 
[Sun, 08 Jul 2012 05:14:32 +0200] DEBUG: Building node object for lucid32 
[Sun, 08 Jul 2012 05:14:32 +0200] DEBUG: Extracting run list from JSON attributes provided on command line 
[Sun, 08 Jul 2012 05:14:32 +0200] INFO: Setting the run_list to ["recipe[mytardis]"] from JSON 
[Sun, 08 Jul 2012 05:14:32 +0200] DEBUG: Applying attributes from json file 
[Sun, 08 Jul 2012 05:14:32 +0200] DEBUG: Platform is ubuntu version 10.04 
[Sun, 08 Jul 2012 05:14:32 +0200] INFO: Run List is [recipe[mytardis]] 
[Sun, 08 Jul 2012 05:14:32 +0200] INFO: Run List expands to [mytardis] 
[Sun, 08 Jul 2012 05:14:32 +0200] INFO: Starting Chef Run for lucid32 
[Sun, 08 Jul 2012 05:14:32 +0200] INFO: Running start handlers 
[Sun, 08 Jul 2012 05:14:32 +0200] INFO: Start handlers complete. 
... 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe mytardis via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe default in cookbook mytardis 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe build-essential via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe default in cookbook build-essential 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe mytardis::deps via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe deps in cookbook mytardis 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe mytardis::nginx via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe nginx in cookbook mytardis 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe iptables via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe default in cookbook iptables 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe mytardis::postgresql via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe postgresql in cookbook mytardis 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe postgresql::server via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe server in cookbook postgresql 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Loading Recipe postgresql::client via include_recipe 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: Found recipe client in cookbook postgresql 
[Sun, 08 Jul 2012 05:14:33 +0200] INFO: Processing package[postgresql-client] action install (postgresql::client line 37) 
[Sun, 08 Jul 2012 05:14:33 +0200] DEBUG: package[postgresql-client] checking package status for postgresql-client 
.... 
[Sun, 08 Jul 2012 05:14:45 +0200] ERROR: gem_package[pg] (postgresql::client line 42) has had an error 
. 
make 
sh: make: not found 

यही है, बिल्ड-आवश्यक नुस्खा "पाया" और "लोड" है, लेकिन यह पोस्टग्रेस रेसिपी है जो पहले "संसाधित" हो जाती है। और चूंकि निर्माण-आवश्यक (जो सी संकलक स्थापित करता है) चलाया नहीं गया था, बाद वाला विफल रहता है।

config.vm.provision :chef_solo do |chef| 
    chef.log_level = :debug 
    chef.cookbooks_path = ["mytardis-chef/site-cookbooks", "mytardis-chef/cookbooks"] 
    chef.roles_path = "mytardis-chef/roles" 
    chef.data_bags_path = "mytardis-chef/data_bags" 
    chef.add_recipe "mytardis"  
    end 

मैं पहले बावर्ची (? शायद 10.10.0) के एक थोड़ा पुराने संस्करण का उपयोग कर रहा था कि संस्करण में, निर्माण जरूरी था भी नहीं किया जा रहा रन:

मेरी Vagrantfile की प्रासंगिकता का इस तरह दिखता है , लेकिन mytardis :: deps था। अब शेफ 10.12.0 का उपयोग कर। भौतिक मशीन ओएसएक्स है, वीएम उबंटू ल्यूसिड है।

तो, कुछ सवाल:

  1. क्यों निर्माण जरूरी "संसाधित" नहीं किया जा रहा है?
  2. ऐसा करने का सही तरीका क्या है? (मैंने इन व्यंजनों को नहीं लिखा, और मैं समझता हूं कि वे अपने लेखक के लिए काम करते हैं या काम करते हैं।)
  3. क्या साइट-कुकबुक और कुकबुक 'छायांकन' सुविधा अभी भी काम करनी चाहिए? यह माना जाता है कि http://tickets.opscode.com/browse/CHEF-2308 (मैंने साइट-कुकबुक/मार्टर्डिस/रेसिपी/बिल्ड-जरूरी लेकिन कोई खुशी नहीं के तहत एक प्रतीकात्मक लिंक बनाने की कोशिश की)।
+0

बिल्ड-आवश्यक/व्यंजनों/default.rb में आप Chef :: Log.info ("मैं # {cookbook_name} :: # {recipe_name}" में) डाल सकता हूं और जब यह लोड हो जाता है तो यह लॉग संदेश प्रिंट करेगा विधि। अपवाद हैंडलर द्वारा बनाई गई फ़ाइल, "/var/chef/cache/failed-run-data.json" जैसी कुछ चीज़ों में भी लोड किए गए सभी संसाधनों का संपूर्ण संसाधन संग्रह होगा, जो डीबगिंग में सहायता कर सकता है कि क्या संसाधन नुस्खा जोड़ा गया था। – jtimberman

+0

कुकबुक छायांकन सुविधा यह है कि जहां आप साइट-कुकबुक में रखकर एक कुकबुक में मौजूद घटकों को ओवरराइट कर सकते हैं, न केवल दोनों स्थानों में अलग-अलग कुकबुक हैं। – jtimberman

+0

क्या आप इसे हल करने में सक्षम थे? –

उत्तर

40

यह पता चला है कि यह कैसे काम करता है बावर्ची की एक बहुत सामान्य (लेकिन नीचे से प्रलेखित) हिस्सा है: यह सब कुछ संकलित, और तो चल रहा शुरू होता है। सिवाय कुछ व्यंजनों (Postgres) की तरह कतार कूद वास्तव में संकलन समय पर स्थापित करने के लिए, इस तरह कोड का उपयोग:

action :nothing 
end.run_action(:run) 

समाधान है कि कुछ भी करने से पहले Postgres भी ऐसा करने की जरूरत है चलाने के लिए की जरूरत है। सौभाग्य से, Build-essentials के नए संस्करण इस की अनुमति देते हैं। ऊपर कॉलिन को

node.default['build_essential']['compiletime'] = true 

धन्यवाद:

name "myapp" 
run_list(
    "recipe[build-essential]", 
    "recipe[myapp]" 
) 
default_attributes(
    "build_essential" => { 
    "compiletime" => true 
    } 
) 
+1

इसे उत्तर के रूप में चिह्नित करने पर विचार करें। –

+1

मैं आज इस में एक और कुकबुक के साथ भाग गया जो 'डेटाबेस :: postgresql' पर निर्भर करता है, जो बदले में' postgresql :: ruby' पर निर्भर करता है। 'Postgresql :: ruby' के लिए वर्तमान नुस्खा 'पीजी' मणि,' libpq', और' postgresql' को सभी को ** शेफ रन के संकलन ** चरण में स्थापित करता है। यह 'run_action (: install)' का उपयोग करके करता है क्योंकि यह उत्तर बताता है। – TrinitronX

+0

कुछ मामलों में इसके आसपास काम करने का एक और तरीका है ... उदाहरण के लिए: एक कुकबुक पर 'रसोई परीक्षण' चलाना जिसमें 'postgresql :: रूबी' शामिल है, परिणामस्वरूप एक स्टेल पैकेज कैश से उपयुक्त त्रुटियां हो सकती हैं। इसे ठीक करने के लिए, हम 'अब' कुकबुक के डीएसएल का उपयोग शेफ चलाने की शुरुआत में 'एपीटी-अपडेट अपडेट' को मजबूर करने के लिए कर सकते हैं: 'include_recipe_now 'apt'' – TrinitronX

6

एक रसोई की किताब लिख अगर, अपनी विशेषताएं दायर करने के लिए विशेषता जोड़ें: इस प्रकार आप एक भूमिका पर स्थापित गुण।

+0

क्या यह build_essential नुस्खा के लिए विशिष्ट है, या करता है कहीं भी काम करते हो? क्या यह दस्तावेज है? –

+0

स्टीव, यह वाक्यविन्यास किसी भी नुस्खा में प्रयोग योग्य है। नोड एक शेफ नोड का 'आत्म' संदर्भ है, डिफ़ॉल्ट रूप से स्व-शीर्षक वाली सेटिंग है जो कि कुकबुक/रेसिपी के उपयोग पर लागू होती है, जब तक कि फिर से ओवरराइड न हो जाए। अन्य दो विकल्प build_essential विशिष्ट हैं। – toobulkeh

संबंधित मुद्दे