Как Chef включает файлы, созданные во время выполнения в качестве источника шаблона

Используя рецепт шеф-повара, я сначала создаю .erb файл динамически на основе входных данных из файла CSV, а затем я хочу использовать это .erb файл в качестве источника шаблона. Но, к сожалению, изменения сделаны (в .erb файл) не рассматриваются, пока рецепт сближает ресурсы. Я также пытался использовать ленивую оценку, но не смог понять, как использовать ее для источника шаблона.

2 ответа

Цитирование шаблона документации:

source Типы Ruby: String, Array

Расположение файла шаблона. По умолчанию chef-клиент ищет файл шаблона в каталоге /templates поваренной книги. Когда для свойства local установлено значение true, используйте для указания пути к шаблону на локальном узле. Это свойство также может использоваться для распространения определенных файлов на конкретные платформы. См. "Специфичность файла" ниже для получения дополнительной информации. Значение по умолчанию: имя блока ресурсов. См. Раздел "Синтаксис" выше для получения дополнительной информации.)

А также

local 

Типы Ruby: TrueClass, FalseClass

Загрузите шаблон из локального пути. По умолчанию chef-клиент загружает шаблоны из каталога /templates поваренной книги. Если для этого свойства установлено значение true, используйте свойство source, чтобы указать путь к шаблону на локальном узле. Значение по умолчанию: false.

так что вы можете сделать это:

# generate the local .erb file let's say source.erb

template "/path/to/file" do
  source "/path/to/source.erb"
  local true
end

Ваш вопрос звучит как и проблема XY, чтение файла CSV для создания шаблона звучит контрпродуктивно и, вероятно, может быть сделано с атрибутами и с использованием преимуществ variable атрибут template ресурс.

Предполагая, что вы знаете, как записать значения из файла CSV в качестве локальной переменной в рецепте.

Examples:
 csv_hostname
 csv_fqdn

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

файл example.erb

# Dynamically generated by awesome Chef so don't alter by hand.
HOSTNAME=<% @host_name %>
FQDN=<% @fqdn %>

файл recipe.rb

template 'path\to\example.config' do
  source 'example.erb'
  variables(
    lazy {
      :host_name => csv_hostname,
      :fqdn => csv_fqdn
  })
end

Если вам нужно запустить его во время компиляции, добавьте действие в блок.

template 'xxx' do
  # blah blah
end.run_action(:create)
Другие вопросы по тегам