применить рецепт ко всем серверам, имена хостов которых совпадают с регулярным выражением, используя CHEF

Я создаю рецепт повара, чтобы применить изменение конфигурации на всех серверах, имя хоста которых соответствует определенному шаблону с использованием регулярного выражения. Однако я не знаю, как это сделать.

Пример: мое имя хоста выглядит так:

  • dvabwichf01
  • dvcdwichf01

мой рецепт в default.rb:

case node['hostname']
when '*ab*'
  template "/tmp/regextest" do
    source "test_ab.erb"
    mode "0644"
  end
else
  template "/tmp/regextest" do
    source "test_cd.erb"
    mode "0644"
  end
end

Но это не работает должным образом, на всех серверах обновляется только шаблон «else». Пожалуйста помогите.

# chef-recipe cookbook chef-infra
Источник
Codelisting
за 2 против
Лучший ответ

Вам нужно будет использовать фактическое регулярное выражение, а не строку, как у вас там (также вы используете сопоставление глобусов fnmatch, а не регулярное выражение). Это можно исправить, только если имя хоста буквально*ab* . Литерал регулярного выражения в Ruby обычно выглядит так:/whatever/ . такwhen /ab/ в этом случае.

за 1 против

Я использовал переключатель для выбора значений, добавив метод в свой вспомогательный файл (в моем случае я поместил его в / app / helpers / application_helper.rb Пример ниже: def name_of_your_method (hostname) case hostname when "Host1" "template_1" when "Host2 "" шаблон_2 "когда" Хост2 "" шаблон_3 "когда" Хост3 "" шаблон_4 "еще" шаблон_по умолчанию "конец конец

Затем в своем коде вы должны использовать имя в своем методе:

<%= user.hostname %>

И в вашей таблице (данных) у вас будет столбец для имени хоста (в этом примере)

Надеюсь это поможет

Codelisting
Популярные категории
На заметку программисту