我正在尝试自己引导节点并在首次启动时运行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
感谢。
答案 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”。它确实是在“/”下创建该文件。
但无论如何,它验证了我对如何从自动调整角度引导实例的思考。