Chef Ruby bucle sobre atributos en un archivo de plantilla .erb

Así que esto podría ser un poco confuso pero ten paciencia conmigo. En resumen, quiero recorrer todos los atributos con un determinado valor clave y luego insertarlos en una plantilla si los valores no están vacíos. Aquí está mi código:

ATRIBUTOS:

# === 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'] = '' 

MODELO:

   =  

SALIDA (con suerte):

 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 

Mi Ruby no es el mejor porque estoy empezando con todo esto pero no pude encontrar ningún ejemplo para este tipo de situación. Cualquier ayuda sería genial, gracias.

Lo que probablemente quiso decir fue:

 <% node['elasticsearch']['default'].each do |key, value| -%> <% unless value.empty? -%> <%= key %>=<%= value %> <% end %> <% end %> 

Al iterar sobre un Hash , se repasan sus pares clave-valor. Entonces, para la primera iteración, la key será 'ES_USER' y el value será '' (que no es nil …).

A continuación, comprueba que el valor no está en blank? , e imprime la línea key=value .

El libro de cocina de elasticsearch fue reescrito recientemente para utilizar LWRP / HWRP / Custom Resources. Su implementación deberá ser ajustada para trabajar con el nuevo libro de cocina.

Para responder tu pregunta; los atributos de nodo son solo un node['elasticsearch']['default'] hash node['elasticsearch']['default'] , puedes pasar todo el objeto al recurso como tal

 elasticsearch_configure 'whatever' do configuration ( node['elasticsearch']['default'] ) action :manage notifies :restart, 'elasticsearch_service[elasticsearch]' end 

Podría ayudar a aclarar las cosas para ver que las siguientes son todas formas diferentes de representar un hash.

Dentro de una receta

 default['elasticsearch']['default']['LOG_DIR'] = '/var/log/elasticsearch' default['elasticsearch']['default']['DATA_DIR'] = '/var/lib/elasticsearch' ... 

Sintaxis alternativa dentro de la receta.

 default[:elasticsearch][:default][:LOG_DIR] = '/var/log/elasticsearch' default[:elasticsearch][:default][:DATA_DIR] = '/var/lib/elasticsearch' 

Y otra syntax alternativa dentro de la receta.

 default.elasticsearch.default.LOG_DIR = '/var/log/elasticsearch' default.elasticsearch.default.DATA_DIR = '/var/lib/elasticsearch' 

Dentro de un rol

 { "chef_type": "role", "default_attributes": { "elasticsearch": { "default": { "LOG_DIR": "/var/log/elasticsearch", "DATA_DIR": "/var/lib/elasticsearch" } } } } 

Ya que todo es un hash, y el recurso config () toma un hash como parámetro, simplemente pase el hash como está.