[英]chef-solo passing custom json
我拼命試圖找出如何在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_中為json_type傳遞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,因此可以幫助任何人! 問題是RECIPE:
{“ json_class”:“ Chef :: Node”,“ chef_type”:“ node”,“ name”:“ node_test”,“ normal”:{“ username”:“ vagrant”,“ params”:{“ vhost”: “ fakeit”}},“ override”:{},“ default”:{},“ automatic”:{},“ run_list”:[]}
node.default["value"]
node["value"]
僅在為配方中的屬性設置默認值時,才應使用node.default['whatever']
。
要使用atrtibute,只需使用node['whatever']
我認為錯誤是由於'USER'環境變量得到一個空值引起的。
此代碼應與您的第一個json文件一起正常工作。
bash 'mkvirtualenv' do
cwd "/home/#{node['username']}/projects/"
user node['username']
environment ({
'HOME' => ::Dir.home(node['username']),
'USER' => node['username']
})
code <<-EOH
source /usr/local/bin/virtualenvwrapper.sh \
mkvirtualenv --no-site-packages --distribute node['params']['vhost']
EOH
end
我認為不需要在node['params']['vhost']
周圍使用#{}
,因為它不在需要內插的字符串中,但是如果HereDoc語法失敗,則可能會出錯,請讀取它。
您是否已設置“ node ['params'] ['vhost']”屬性?
如果沒有問題,請嘗試設置“ default_attributes”而不是“ overwrite_attributes”,因為沒有要覆蓋的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.