2012-12-06 16 views
6

新しいCentOS 6.3 VMをインストールし、SELinuxを無効にしました。以下は、私はルビーをインストールするために走った正確なスクリプトは、シェフのソロで、提供にVMを実行しようとしました:残念ながらChef-Solo "nilのための未定義メソッド[] ':NilClass"

#!/bin/bash 
# 
# Install Chef-Solo if it doesn't exist, then provision the server. 
# 
CHEF_FILE="https://dl.dropbox.com/u/4204671/LiquidCompass/lc-chef.tar.gz" 

if [ "$#" -eq 0 ]; then 
    echo "You must provide the type of server this is. (Eg: production-api, qa-api, development)" 
    exit 1 
fi 

if [ ! -x "/usr/bin/chef-solo" ]; then 
    rpm -Uvh http://rbel.frameos.org/rbel6 
    yum install -y ruby ruby-devel ruby-ri ruby-rdoc ruby-shadow gcc gcc-c++ automake autoconf make curl dmidecode 

    cd /tmp 
    curl -O http://production.cf.rubygems.org/rubygems/rubygems-1.8.10.tgz 
    tar zxf rubygems-1.8.10.tgz 
    cd rubygems-1.8.10 
    ruby setup.rb --no-format-executable 

    gem install chef --no-ri --no-rdoc 
fi 

if [ -d "/etc/chef" ]; then 
    rm -rf /etc/chef 
fi 

if [ -d "/tmp/lc-chef" ]; then 
    rm -rf /tmp/lc-chef* 
fi 

mkdir /etc/chef 

echo "file_cache_path \"/tmp/lc-chef/chef-solo\" 
cookbook_path \"/tmp/lc-chef/cookbooks\" 
role_path \"/tmp/lc-chef/roles\" 
json_attribs \"/etc/chef/node.json\"" > /etc/chef/solo.rb 

echo "{ 
    \"name\": \"$1\", 
    \"normal\": { 
     \"company\": \"Liquid Compass LLC\", 
     \"tags\": [] 
    }, 
    \"chef_environment\": \"_default\", 
    \"run_list\": [ 
     \"role[$1]\" 
    ] 
}" > /etc/chef/node.json 

cd /tmp 
curl -O $CHEF_FILE 
tar zxf lc-chef.tar.gz 

chef-solo -c /etc/chef/solo.rb 

、スクリプトは私が受け取る走る権利として:

[2012-12-05T17:39:27-07:00] INFO: Start handlers complete. 

================================================================================ 
Recipe Compile Error in /tmp/lc-chef/cookbooks/liquidcompass/recipes/php.rb 
================================================================================ 

NoMethodError 
------------- 
undefined method `[]' for nil:NilClass 

Cookbook Trace: 
--------------- 
    /tmp/lc-chef/cookbooks/liquidcompass/recipes/php.rb:20:in `from_file' 

Relevant File Content: 
---------------------- 
/tmp/lc-chef/cookbooks/liquidcompass/recipes/php.rb: 

13: # Unless required by applicable law or agreed to in writing, software 
14: # distributed under the License is distributed on an "AS IS" BASIS, 
15: # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
16: # See the License for the specific language governing permissions and 
17: # limitations under the License. 
18: # 
19: 
20>> php_url      = "http://us.php.net/distributions/php-#{node['php']['version']}.tar.gz" 
21: node.set['php']['prefix'] = "/opt/php-#{node['php']['version']}" 
22: node.set['php']['conf_path'] = "#{node['php']['dir']}/php.ini" 
23: node.set['php']['configure_flags'] = [ 
24:  "--prefix=#{node['php']['prefix']}", 
25:  "--with-config-file-path=#{node['php']['dir']}", 
26:  "--with-config-file-scan-dir=#{node['php']['dir']}/conf.d", 
27:  "--with-curl", 
28:  "--with-pear", 
29:  "--with-gd", 

だから、のように見えますロードしようとすると窒息しているnode['php']['version']。だから、シェフが属性ファイルをロードされていないか、または何か他のものが間違っていることが表示されます

default['php']['version']    = "5.4.9" 

:これは、と私の/tmp/lc-chef/cookbooks/liquidcompass/attributes/default.rbで定義されています。これを見つけ出すかどうかは正確には分かりません。

実行:

  • RubyGemsの1.8.10
  • シェフ10.16.2

敬具、
アンドリューところで

、これはスタックトレースは次のとおりです。

Generated at Wed Dec 05 17:39:27 -0700 2012 
NoMethodError: undefined method `[]' for nil:NilClass 
/tmp/lc-chef/cookbooks/liquidcompass/recipes/php.rb:20:in `from_file' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/cookbook_version.rb:558:in `load_recipe' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/mixin/language_include_recipe.rb:46:in `load_recipe' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/mixin/language_include_recipe.rb:33:in `include_recipe' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/mixin/language_include_recipe.rb:27:in `each' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/mixin/language_include_recipe.rb:27:in `include_recipe' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/run_context.rb:79:in `load' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/run_context.rb:75:in `each' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/run_context.rb:75:in `load' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/client.rb:198:in `setup_run_context' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/client.rb:418:in `do_run' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/client.rb:176:in `run' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/application.rb:140:in `run_chef_client' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/application/solo.rb:224:in `run_application' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/application/solo.rb:216:in `loop' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/application/solo.rb:216:in `run_application' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/../lib/chef/application.rb:72:in `run' 
/usr/lib64/ruby/gems/1.8/gems/chef-10.16.2/bin/chef-solo:25 
/usr/bin/chef-solo:19:in `load' 
/usr/bin/chef-solo:19 

答えて

3

シェフソロはデフォルト属性をサポートしていません。

ノードディレクトリの下にnode.jsonをまとめて、.json形式の属性をリストする必要があります。

だからあなたの場合には:あなたが.rbの形式でデフォルトの属性/任意の属性を使用する場合は

{ 
    "php": { 
     "version": "5.4.9" 
    } 
} 

、あなたはシェフ・サーバー/シェフ・クライアントを使用する必要があるとしています。

+0

をこれは本当に奇妙です...しかし、私はちょうどVMを吹き飛ばしたし、それを再構築します。その後、私はOPで提供したスクリプトを実行し、それは正常に動作しました。私は最初のVMで何が起こったのか分かりません。 –

+0

それは本当に変です: http://wiki.opscode.com/display/chef/Chef+Solo#ChefSolo-JSON%2CAttributesandRecipes –

5

デフォルト属性がシェフソロ

で正常に動作し、私はあなたの料理の内部で何が起こっているかわからないんだけど - それはあなたのコードではなく、シェフの問題です。簡単な例として、これをチェック:

https://gist.github.com/adamhjk/6141718

+0

シェフのソロ版は何ですか? –

+0

私がchef-solo --version シェフのためにこの作品を確認できます:11.10.4' – devalias

関連する問題