So this might be a little confusing but bear with me. In short I want to loop over all attributes with a certain key value and then insert them into a template if the values are not empty. Here is my code:
ATTRIBUTES:
# === 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 %>
OUTPUT (hopefully):
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
My ruby isn't the best because I'm just starting out with all of this stuff but I couldn't find any examples for this type of situation. Any help would be great, thanks.
The elasticsearch cookbook was recently rewritten to use LWRP/HWRP/Custom Resources. Your implementation will need to be tweeked to work with the new cookbook.
To answer your question; node attributes are just a hash
node['elasticsearch']['default']
, you can pass the entire thing into the resource like soMight help clarify things to see that the following are all different ways to represent a hash.
Inside a recipe
Alternative syntax inside recipe
And another alternative syntax inside recipe
Inside a role
Since everything is a hash, and the config() resource takes a hash as a parameter, just pass the hash in as is.
What you probably meant was:
When iterating over a
Hash
, you go over its key-value pairs. So for the first iteration,key
will be'ES_USER'
, andvalue
will be''
(which is notnil
...).Next you check that the value is not
blank?
, and print out thekey=value
line.