Как 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)