所以这可能有点令人困惑,但请耐心等待。简而言之,我希望使用某个键值循环所有属性,然后在值不为空时将它们插入模板中。这是我的代码:
属性:
# === Default file Configurations
#
default['elasticsearch']['default']['ES_USER'] = ''
default['elasticsearch']['default']['ES_GROUP'] = ''
default['elasticsearch']['default']['ES_HEAP_SIZE'] = ''
default['elasticsearch']['default']['MAX_OPEN_FILES'] = ''
default['elasticsearch']['default']['MAX_LOCKED_MEMORY'] = 'unlimited'
default['elasticsearch']['default']['MAX_MAP_COUNT'] = ''
default['elasticsearch']['default']['LOG_DIR'] = '/var/log/elasticsearch'
default['elasticsearch']['default']['DATA_DIR'] = '/var/lib/elasticsearch'
default['elasticsearch']['default']['WORK_DIR'] = '/tmp/elasticsearch'
default['elasticsearch']['default']['CONF_DIR'] = '/etc/elasticsearch'
default['elasticsearch']['default']['CONF_FILE'] = '/etc/elasticsearch/elasticsearch.yml'
default['elasticsearch']['default']['RESTART_ON_UPGRADE'] = ''
TEMPLATE:
<% node['elasticsearch']['default'].each do |host| -%>
<% if node.elasticsearch.default.host not nil -%>
<%= host %>=<%= node.elasticsearch.default.host %>
<% end %>
输出(希望):
MAX_LOCKED_MEMORY=unlimited
LOG_DIR=/var/log/elasticsearch
DATA_DIR=/var/lib/elasticsearch
WORK_DIR=/tmp/elasticsearch
CONF_DIR=/etc/elasticsearch
CONF_FILE=/etc/elasticsearch/elasticsearch.yml
我的红宝石不是最好的,因为我刚刚开始使用所有这些东西,但我找不到这种情况的任何例子。任何帮助都会很棒,谢谢。
答案 0 :(得分:8)
你可能意味着:
<% node['elasticsearch']['default'].each do |key, value| -%>
<% unless value.empty? -%>
<%= key %>=<%= value %>
<% end %>
<% end %>
在迭代Hash
时,您会检查其键值对。因此,对于第一次迭代,key
将为'ES_USER'
,value
将为''
(不是nil
...)。
接下来,检查该值是否为blank?
,并打印出key=value
行。
答案 1 :(得分:0)
最近改编了elasticsearch cookbook以使用LWRP / HWRP / Custom Resources。您的实施需要通过调整才能使用新的食谱。
回答你的问题;节点属性只是一个哈希node['elasticsearch']['default']
,您可以将整个事物传递给资源,如此
elasticsearch_configure 'whatever' do
configuration ( node['elasticsearch']['default'] )
action :manage
notifies :restart, 'elasticsearch_service[elasticsearch]'
end
可能有助于澄清事情,以确定以下是表示哈希的所有不同方式。
在食谱内
default['elasticsearch']['default']['LOG_DIR'] = '/var/log/elasticsearch'
default['elasticsearch']['default']['DATA_DIR'] = '/var/lib/elasticsearch'
...
食谱中的替代语法
default[:elasticsearch][:default][:LOG_DIR] = '/var/log/elasticsearch'
default[:elasticsearch][:default][:DATA_DIR] = '/var/lib/elasticsearch'
配方中的另一种替代语法
default.elasticsearch.default.LOG_DIR = '/var/log/elasticsearch'
default.elasticsearch.default.DATA_DIR = '/var/lib/elasticsearch'
角色内部
{
"chef_type": "role",
"default_attributes": {
"elasticsearch": {
"default": {
"LOG_DIR": "/var/log/elasticsearch",
"DATA_DIR": "/var/lib/elasticsearch"
}
}
}
}
由于所有内容都是哈希值,并且config()资源将哈希作为参数,因此只需按原样传递哈希值即可。