1

我正在尝试自行引导节点并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

启动节点后,我看到该节点已向厨师服务器注册,但是在我的脚本的最后一行中指定的配方getting-started不会被触发。firstboot.jsonchef-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

谢谢。

4

2 回答 2

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'
于 2013-08-01T10:49:29.260 回答
0

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

但无论如何,它验证了我关于如何从自动缩放的角度引导实例的想法。

于 2013-09-18T06:05:26.503 回答