厨师 – 独奏传递自定义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 /食谱/ 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 ?
UPDATE
这是我尝试使用Chef :: Node,Chef :: Environment,Chef :: Role等的另一件事。我仍然得到“你通过{}”并且看不到用户名或其他项目:(
{ "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”,“chef_type”:“node”,“name”:“node_test”,“normal”:{“username”:“vagrant”,“params”:{“vhost”: “fakeit”}},“覆盖”:{},“默认”:{},“自动”:{},“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']
周围使用#{}
,因为它不在需要插值的字符串中但是如果它失败,我可能会错误地读取它。
你有设置“node [‘params’] [‘vhost’]”属性吗?
如果这不是问题,请尝试设置“default_attributes”而不是“overwrite_attributes”,因为没有要覆盖的属性。
- Ruby on Rails教程 – Michael Hartl – 测试“用户何时收到电子邮件地址”
- 如何跳过has_secure_passwordvalidation
- Ruby正则表达式中的反斜杠+捕获组
- 能机械化读ajax吗? (ruby)
- ‘form_for @ecard’和’form_for:ecard’有什么区别?
- 奇怪的Ruby语法?
- def <<(path)在rails / ruby中意味着什么
- 使用Paperclip将图像发布请求通过http上传到其他应用程序
- 在尝试保存大(ish)整数值时,获取指示编号的错误“超出ActiveRecord :: Type :: Integer且限制为4”的范围