Ruby 厨师长通过定制json
我拼命想弄清楚如何在Chef Solo中应用几个节点变量。否则我就得继续重新安排 步骤1,我登录到配置框:Ruby 厨师长通过定制json,ruby,chef-infra,chef-solo,Ruby,Chef Infra,Chef Solo,我拼命想弄清楚如何在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 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
有人知道怎么做吗?
我是否需要在JSON forJSON_type中传入Chef::Environment或Chef::Role
更新
下面是我在Chef::Node、Chef::Environment、Chef::Role等方面尝试过的另一件事。我仍然得到“youpassed{}”,并且看不到用户名或其他项目:(
解决方案
{
"username": "vagrant",
"params": {
"vhost": "fake"
},
"user": {
"name": "vagrant"
},
"overwrite_attributes": {
"username": "vagrant"
}
}
我勾选了正确的答案。这是我的JSON,它可以帮助任何人!问题在于配方:
{
“json_类”:“厨师::节点”,
“厨师长类型”:“节点”,
“名称”:“节点测试”,
“正常”:{
“用户名”:“流浪者”,
“参数”:{
“vhost”:“fakeit”
}
},
“覆盖”:{},
“默认值”:{},
“自动”:{},
“运行列表”:[]}
- 要写入/设置值,我只需使用
node.default[“value”]
- 要读取值,我只需使用
node[“value”]
如果没有问题,请尝试设置“默认属性”而不是“覆盖属性”,因为没有要覆盖的属性。只有在为配方中的属性设置默认值时,才应使用
节点。默认值['whatever']
要使用atrtibute,只需使用节点['which']
我认为错误来自“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
bash'mkvirtualenv'do
cwd“/home/#{node['username']}/projects/”
用户节点['username']
环境({
'HOME'=>::Dir.HOME(节点['username']),
'USER'=>node['username']
})
code只有在为配方中的属性设置默认值时,才应使用node.default['whatever']
要使用atrtibute,只需使用节点['which']
我认为错误来自“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
bash'mkvirtualenv'do
cwd“/home/#{node['username']}/projects/”
用户节点['username']
环境({
'HOME'=>::Dir.HOME(节点['username']),
'USER'=>node['username']
})
code只有在为配方中的属性设置默认值时,才应使用node.default['whatever']
要使用atrtibute,只需使用节点['which']
我认为错误来自“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
bash'mkvirtualenv'do
cwd“/home/#{node['username']}/projects/”
用户节点['username']
环境({
'HOME'=>::Dir.HOME(节点['username']),
'USER'=>node['username']
})
code只有在为配方中的属性设置默认值时,才应使用node.default['whatever']
要使用atrtibute,只需使用节点['which']
我认为错误来自“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
bash'mkvirtualenv'do
cwd“/home/#{node['username']}/projects/”
用户节点['username']
环境({
'HOME'=>::Dir.HOME(节点['username']),
'USER'=>node['username']
})
代码感谢您的响应!我在recipe节点中设置了这些参数。默认值['params']['template']=“django.erb”
效果很好。但我甚至无法获得要加载的用户名,该用户名已设置为节点。默认值['username]=“vagrant”
--我将更新我的JSON以显示我再次尝试的内容。这与此无关。默认、正常和重写是优先级别,不需要在较低级别上定义一个重写级别的属性。tnx@Tensibai很高兴知道,最后重写未设置的内容很奇怪yet@rastasheep事实上,违约/正常al和override是优先级级别。在ruby访问未知变量时,在访问时将其设置为nil,您仍然在重写某些内容。关于如何在chef Run中管理它,感谢您的响应!我在recipe节点中设置了这些参数。默认值['params']['template']=“django.erb”
效果很好。但我甚至无法获取设置为节点的要加载的用户名。默认值[“username”]=“vagrant”
--我将更新我的JSON以显示我再次尝试的内容。这与此无关。默认、正常和覆盖都是优先级别,不需要在较低级别上定义一个覆盖级别的属性。tnx@Tensibai很高兴知道,最终覆盖是很奇怪的