【发布时间】:2015-04-21 06:10:09
【问题描述】:
我正在拼命想弄清楚如何在 Chef-Solo 中应用一些 节点变量。否则我必须继续重新配置。
第 1 步,我登录到配置框:
$ vagrant ssh
$ sudo chef-solo -o virtualenv::addsite -j /vagrant/resources/attr_test.json
第 2 步,我有一个 JSON 文件传递我试图在配方中运行的数据。 我相信这有 node.normal 模式,它的优先级高于默认值?
这是我目前拥有的 attr_test.json
{
"username": "vagrant",
"params": {
"vhost": "fake"
},
"user": {
"name": "vagrant"
},
"overwrite_attributes": {
"username": "vagrant"
}
}
这是配方,但我无法获取要填充的 node.default 数据。
virtualenv/recipes/addsite.rb
bash 'mkvirtualenv' do
cwd "/home/#{node.default['username']}/projects/"
user node.default['username']
environment ({
'HOME' => ::Dir.home(node.default['username']),
'USER' => node.default['username']
})
code <<-EOH
source /usr/local/bin/virtualenvwrapper.sh \
mkvirtualenv --no-site-packages --distribute #{node.default['params']['vhost']}
EOH
end
错误
Chef::Exceptions::ValidationFailed
----------------------------------
Option user must be a kind of [String, Integer]! You passed {}.
Cookbook Trace:
---------------
/var/chef/cookbooks/virtualenv/recipes/addsite.rb:8:in `block in from_file'
/var/chef/cookbooks/virtualenv/recipes/addsite.rb:6:in `from_file'
有人知道怎么做吗? 我需要在 json_type 的 JSON 中传入 Chef::Environment 或 Chef::Role 吗?
更新
这是我用 Chef::Node、Chef::Environment、Chef::Role 等尝试过的另一件事。我仍然收到“You Passed {}”并且看不到用户名或其他项目: (
{
"json_class": "Chef::Node",
"chef_type": "node",
"name": "node_test",
"normal": {
"username": "vagrant",
"params": {
"vhost": "fakeit"
}
},
"normal_attributes": {
"username": "vagrant",
"params": {
"vhost": "fakeit"
}
},
"override_attributes": {
"username": "vagrant",
"params": {
"vhost": "fakeit"
}
},
"override": {
"username": "vagrant",
"params": {
"vhost": "fakeit"
}
},
"default": {
"username": "vagrant",
"params": {
"vhost": "fakeit"
}
},
"default_attributes": {
"username": "vagrant",
"params": {
"vhost": "fakeit"
}
},
"automatic": {},
"run_list": [
]
}
解决方案
我勾选了正确的答案。这是我的 JSON,所以它可以帮助任何人!问题是配方:
{ "json_class": "Chef::Node", “厨师类型”:“节点”, “名称”:“节点测试”, “普通的”: { “用户名”:“流浪者”, “参数”:{ “虚拟主机”:“假冒” } }, “覆盖”:{}, “默认”: {}, “自动的”: {}, "run_list": [] }
- 要写入/设置一个值,我只使用
node.default["value"] - 要读取一个值,我只使用
node["value"]
【问题讨论】:
标签: ruby chef-infra chef-solo