Chef Ruby循环遍历.erb模板文件中的属性
所以这可能有点令人困惑,但请耐心等待。 简而言之,我希望使用某个键值循环所有属性,然后在值不为空时将它们插入模板中。 这是我的代码:
属性:
# === 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'] = ''
模板:
=
输出(希望):
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
我的ruby不是最好的,因为我刚刚开始使用所有这些东西,但我找不到这种情况的任何例子。 任何帮助都会很棒,谢谢。
你的意思是:
<% node['elasticsearch']['default'].each do |key, value| -%> <% unless value.empty? -%> <%= key %>=<%= value %> <% end %> <% end %>
在迭代Hash
,您将检查其键值对。 所以对于第一次迭代, key
将是'ES_USER'
, value
将是''
(这不是nil
……)。
接下来检查该值是否为blank?
,并打印出key=value
行。
最近重写了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()资源将散列作为参数,因此只需按原样传递散列。
- Rails elasticsearch – 命名范围搜索
- 使用Searchkick在ElasticSearch中搜索子文档
- URI :: InvalidURIError:方案http不接受注册表部分:: 9200(或错误的主机名?)
- ElasticSearch with Tire不包括带STI模型的自定义分析器
- Elasticsearch过滤最大值文档
- 使用rest-client ruby gem在elasticsearch get请求中传递json数据
- Rails 5:如何在弹性搜索中导入数据并执行条件搜索?
- 法拉第:: ConnectionFailed,连接被拒绝 – 连接(2)为“localhost”端口9200错误Ruby on Rails