Запись файла с несколькими кулинарными книгами Chef, нацеленными на один и тот же файл

У меня есть ситуация, когда у меня есть три кулинарных книги, каждая с ресурсом шаблона, который записывает в файл /etc/hosts.

Вместо того, чтобы перезаписывать, я хотел бы добавить:

  • Первая поваренная книга создает файл /etc/hosts и записывает строки 1,2,3.
  • Вторая кулинарная книга добавляет строки 4,5. и т.п.

Как правильно поступить с этим в стране шеф-поваров?


person Jacques Betancourt    schedule 18.06.2015    source источник
comment
возможный дубликат Как я могу изменить файл с помощью шеф-повара?   -  person StephenKing    schedule 19.06.2015


Ответы (1)


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

CookbookA/атрибуты/default.rb

default['hosts']['lines'] = []

CookbookA/recipes/genfile.rb

template "/etc/hosts" do
  source "hosts.erb"
end

CookbookA/templates/default/hosts.erb

#File Generated by Chef
<% node['hosts']['lines'].each do |l| %>
<% l -%>
<% end.unless node['hosts']['lines'].empty? %>

А затем в других ваших файлах атрибутов поваренных книг:

default['hosts']['lines'] << ["first line","second line"]

И эти поваренные книги зависят от CookbookA и в их рецепте вызывают include_recipe "CookbookA::genfile.rb"

Используя <<, вы добавляете атрибут вместо того, чтобы перезаписывать его.

person Tensibai    schedule 19.06.2015