Шеф-повар 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'] = ''
ШАБЛОН:
<% 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
Мой рубин не самый лучший, потому что я только начинаю со всего этого, но я не смог найти примеров для подобных ситуаций. Любая помощь будет отличной, спасибо.
2 ответа
Что вы, вероятно, имели в виду:
<% node['elasticsearch']['default'].each do |key, value| -%>
<% unless value.empty? -%>
<%= key %>=<%= value %>
<% end %>
<% end %>
При переборе Hash
вы перебираете его пары ключ-значение. Итак, для первой итерации, key
будет 'ES_USER'
, а также value
будет ''
(который не nil
...).
Далее вы проверяете, что значение не blank?
и распечатайте key=value
линия.
Кулинарная книга asticsearch была недавно переписана для использования 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() принимает хеш в качестве параметра, просто передайте хеш как есть.