“chef-client -j”未按预期运行

时间:2013-08-01 08:47:56

标签: chef

我正在尝试自己引导节点并在首次启动时运行getting-started配方。除了实际配方永远不会运行外,一切似乎都能正常工作。

这是我的脚本,由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

节点启动后,我看到该节点已向Chef服务器注册,但getting-started配方在firstboot.json中与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]

问题: 你能告诉我这里可能缺少什么吗?为什么chef-client无法运行firstboot.json中提到的任何内容。

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

,它也只会运行chef-client -j /etc/chef/firstboot.json

感谢。

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

“入门”食谱应该在用户的主目录下创建“chef-getting-started.txt”。它确实是在“/”下创建该文件。

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