Nano Hash - криптовалюты, майнинг, программирование

Chef 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

Мой рубин не самый лучший, потому что я только начинаю со всеми этими вещами, но я не смог найти примеров для такого типа ситуаций. Любая помощь будет здорово, спасибо.


Ответы:


1

Вероятно, вы имели в виду:

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

При переборе Hash вы просматриваете его пары ключ-значение. Таким образом, для первой итерации key будет 'ES_USER', а value будет '' (что не nil...).

Затем вы проверяете, что значение не равно blank?, и распечатайте строку key=value.

06.03.2014
  • Спасибо ... ваш ответ был точным, за исключением отсутствующего <% end %> после <%= key %>=<%= value %>. 07.03.2014
  • О, и на самом деле это unless value.empty?, потому что по какой-то причине он не принимал blank в функции. 07.03.2014
  • Когда я использую этот цикл, запуск шеф-повара выводит весь json, а не строку значения и самого ключа. Можете ли вы предложить, как я могу заставить его ввести строку? 31.12.2014
  • @BenjaminGoodacre - какой именно код вы используете? какой ввод? 31.12.2014

  • 2

    Кулинарная книга elasticsearch недавно была переписана для использования 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() принимает хэш в качестве параметра, просто передайте хэш как есть.

    10.12.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..