2016-05-11 11 views
0

Я пытаюсь создать несколько отдельных файлов .conf для массива vhosts на моем веб-сервере с помощью шеф-повара 11.10. Я хочу, чтобы содержимое этих файлов несколько отличалось на один из vhost.Несколько шаблонов шеф-повара с a Для каждого оператора и массива атрибутов

Текущая реализация создает разные имена файлов (по 1 для каждого в массиве.), Но шаблон содержит только последний элемент в массиве каждый раз.

Например, в массиве есть 3 vhosts - example1.com, example2.com, example3.com. В моей /var/www/conf.d/ каталог У меня есть 3 файлов после того, как рецепт запуска

> example1.com.conf 
> example2.com.conf 
> example3.com.conf 

который является хорошим началом, однако, содержимое этих файлов все же с последней переменной в используемого массива. Все они имеют «example3.com» в качестве хоста, например.

server { 
    listen 80; 
    server_name example3.com; 
    return 301 https://$host$request_uri; 
} 

Мой рецепт containts это

vhosts = node['nginx']['vhosts'] 

vhosts.each do |vhost| 
    node.default['nginx']['hostname'] = vhost 

    template "#{node[:nginx][:conf_dir]}/#{vhost}.conf" do 
    source "#{node[:nginx][:vhost_template]}" 
    owner "root" 
    group "root" 
    mode 0644 
    notifies :restart, resources(:service => "nginx") 
    end 
end 

и в моем шаблоне следующий код

server { 
    listen 443; 
    server_name <%= node[:nginx][:hostname] %>; 
    return 301 http://$host$request_uri; 
} 

и в моем атрибуты/файла default.rb у меня есть следующий массив.

default[:nginx][:vhosts] = [ "example1.com", "example2.com", "example3.com" ] 

ответ

1

Не имеет смысла устанавливать атрибут одного узла в цикле. Из-за выполнения Chef только последнее значение сохраняется, когда ресурс шаблона фактически создается. Попробуйте сбросив эту строку:

node.default['nginx']['hostname'] = vhost 

и затем pass vhost in the template variables атрибут и использовать его в .erb файле.

(Кроме того, для справки, вы, как правило, не требуется установить узел по умолчанию атрибуты в рецепте, который является то, что с помощью node.default[...] делает, но это не корень вопрос здесь.)

+0

Это работало отлично Спасибо приятель . Да, переменные - это путь. И определенно относительно атрибутов по умолчанию! :) Большое вам спасибо – jimmy