2013-08-01 143 views
1

我试图自行引导一个节点并在第一次引导时运行getting-started配方。一切似乎都很好,除非实际的配方永远不会运行。“chef-client -j”未按预期运行

这里是我的脚本是由rc.local触发:

#!/bin/bash 

wget http://<some_IP_Address>/chef-11.6.0-1.el6.x86_64.rpm -P /var/tmp/ 
rpm -ivh /var/tmp/chef-11.6.0-1.el6.x86_64.rpm 
mkdir -p /etc/chef 
cd /etc/chef 
wget http://<some_IP_Address>/chef-validator.pem 
mv chef-validator.pem validation.pem 

cat > client.rb << EOL 
log_level  :auto 
log_location  STDOUT 
chef_server_url "MY_CHEF_SERVER_FQDN" 
validation_client_name "chef-validator" 
EOL 

cat > /etc/chef/firstboot.json << EOL 
{"run_list": ["recipe[getting-started]"]} 
EOL 

chef-client -j /etc/chef/firstboot.json 

一旦节点启动时,我看到节点获取与在firstboot.json沿着指定的厨师服务器然而getting-started配方注册我脚本最后一行的chef-client -j没有被触发。

它就像只chef-client被触发,而不是chef-client -j /etc/chef/firstboot.json

如果我把我的工作站,我看到这个配方添加到节点的run_list为好,只是它尚未执行。

这里是我的节点厨师工作站输出命令这是自举:

$ knife node show node_name.domain.com --run-list 
node_name.domain.com: 
    run_list: recipe[getting-started] 

问题: 你能告诉我什么,我可以在这里失踪?为什么厨师客户端无法运行firstboot.json中提到的任何内容。

更新: 如果我手动运行chef-client -j /etc/chef/firstboot.json,那么它会完成这项工作。因此,调用rc.local似乎有些问题。它只运行chef-client即使我提到chef-client -j /etc/chef/firstboot.json

谢谢。

+0

它是否有足够的权限来执行_getting-started_ recipe中陈述的内容? –

+0

我这么认为。如果我手动运行相同的脚本,配方会得到很好的执行。我应该通过'rc.local'来查看任何特定权限吗?另外,我正在考虑使用'cloudinit'作为替代方案。但这个问题不应该如此难以破解。我想我错过了一些明显的东西。谢谢你的时间。 – slayedbylucifer

回答

0

的 “工具入门” 的配方是应该打造 “厨师越来越-started.txt” 下用户的主目录。它确实是在“/”下创建该文件。

但无论如何,它验证了我对如何从自动缩放视角引导实例的思考。

2

而不是

cat > /etc/chef/firstboot.json << EOL 
{"run_list": ["recipe[getting-started]"]} 
EOL 

chef-client -j /etc/chef/firstboot.json 
在脚本

,尝试:

chef-client -o 'getting-started' 
+0

谢谢。但它仍然没有运行食谱。它确实向厨师服务器注册,就好像我只运行了“厨师客户端”一样。但是“入门”配方无法运行。再次,如果我手动运行它,它工作正常。我认为这与'rc.local'有关,因为当我手动运行我的脚本时,我的方法以及你的方法工作得很好。谢谢你的时间。 – slayedbylucifer