Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 厨师长通过定制json_Ruby_Chef Infra_Chef Solo - Fatal编程技术网

Ruby 厨师长通过定制json

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"

我拼命想弄清楚如何在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
有人知道怎么做吗? 我是否需要在JSON forJSON_type中传入Chef::EnvironmentChef::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”]
您是否设置了“node['params']['vhost']”属性

如果没有问题,请尝试设置“默认属性”而不是“覆盖属性”,因为没有要覆盖的属性。

是否设置了“节点['params']['vhost']”属性

如果没有问题,请尝试设置“默认属性”而不是“覆盖属性”,因为没有要覆盖的属性。

是否设置了“节点['params']['vhost']”属性

如果没有问题,请尝试设置“默认属性”而不是“覆盖属性”,因为没有要覆盖的属性。

是否设置了“节点['params']['vhost']”属性


如果没有问题,请尝试设置“默认属性”而不是“覆盖属性”,因为没有要覆盖的属性。

只有在为配方中的属性设置默认值时,才应使用
节点。默认值['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很高兴知道,最终覆盖是很奇怪的