Chef Ruby loop over attributes in an .erb template file

前端 未结 2 1869
执笔经年
执笔经年 2021-02-09 20:12

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 ar

相关标签:
2条回答
  • 2021-02-09 20:27

    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 so

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

    Might help clarify things to see that the following are all different ways to represent a hash.

    Inside a recipe

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

    Alternative syntax inside recipe

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

    And another alternative syntax inside recipe

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

    Inside a role

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

    Since everything is a hash, and the config() resource takes a hash as a parameter, just pass the hash in as is.

    0 讨论(0)
  • 2021-02-09 20:41

    What you probably meant was:

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

    When iterating over a Hash, you go over its key-value pairs. So for the first iteration, key will be 'ES_USER', and value will be '' (which is not nil...).

    Next you check that the value is not blank?, and print out the key=value line.

    0 讨论(0)
提交回复
热议问题