Шеф-повар 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() принимает хеш в качестве параметра, просто передайте хеш как есть.

Другие вопросы по тегам