Chef infra `搜索`未在开发人员上按角色查找节点
我正在旋转一组节点。在Chef infra `搜索`未在开发人员上按角色查找节点,chef-infra,test-kitchen,chef-zero,Chef Infra,Test Kitchen,Chef Zero,我正在旋转一组节点。在myrepo/cookbooks/mycookbook/.kitchen.yml中,我有 driver: name: vagrant provisioner: name: chef_zero roles_path: '../../roles' environments_path: '../../environments' data_bags_path: '../../data_bags' platforms: - name: ubuntu-12.
myrepo/cookbooks/mycookbook/.kitchen.yml
中,我有
driver:
name: vagrant
provisioner:
name: chef_zero
roles_path: '../../roles'
environments_path: '../../environments'
data_bags_path: '../../data_bags'
platforms:
- name: ubuntu-12.04
suites:
- name: node01
driver:
vm_hostname: "node01.localhost"
run_list:
- role[genericnode]
provisioner:
client_rb:
environment: development
nodes = []
search(:node, 'role:genericnode').each do |node|
nodes.push("http://#{node['ipaddress']}:8080")
end
node.default['mysetting'] = nodes.join(',')
在myrepo/cookbooks/mycookbook/recipes/default.rb中
driver:
name: vagrant
provisioner:
name: chef_zero
roles_path: '../../roles'
environments_path: '../../environments'
data_bags_path: '../../data_bags'
platforms:
- name: ubuntu-12.04
suites:
- name: node01
driver:
vm_hostname: "node01.localhost"
run_list:
- role[genericnode]
provisioner:
client_rb:
environment: development
nodes = []
search(:node, 'role:genericnode').each do |node|
nodes.push("http://#{node['ipaddress']}:8080")
end
node.default['mysetting'] = nodes.join(',')
但在我的开发环境中,搜索返回一个空列表。我是否需要以上.kitchen.yml
设置才能使用角色genericnode
访问网络中节点的ip地址
其他信息:
角色如下:
{
"name": "genericnode",
"description": "Generic Node",
"json_class": "Chef::Role",
"default_attributes": {
},
"override_attributes": {
},
"chef_type": "role",
"run_list": [
"recipe[apt::default]", "recipe[mycookbook::default]"
],
"env_run_lists": {
}
}
要在chef_zero下进行搜索,您需要提供一个节点对象文件夹作为JSON,作为搜索的数据。搜索不会找到当前节点,除非它位于服务器上(除非您将其添加到该节点/文件夹中,否则它不会位于服务器上) 通常的解决方法是使用搜索和检查本地值
ips = []
search(:node, 'roles:genericnode').each do |n|
ips << n['ipaddress']
end
if node['roles'].include?'(genericnode')
ips |= [node['ipaddress']]
end
node.default['mysetting'] = ips.map{|ip| "http://#{ip}:8080"}.join(',')
ips=[]
搜索(:节点,'roles:genericnode')。每个|
ips这似乎是可行的!但是我如何在节点/genericnode.json中指定节点的ip呢?还是在.kitchen.yml中使用网络:-[“专用网络”,{ip:“192.168.0.2”}]
,例如?或者两者都指定?明白了!您只需将其设置为:{“名称”:“genericnode”,“厨师类型”:“节点”,“json_类”:“Chef::Node”,“Chef_环境”:“development”,“run_list”:[“role[genericnode]”],“role”:“genericnode”,“automatic”:{“ipaddress”:“192.168.0.2”}