Ich versuche mehrere separate .conf-Dateien für ein Array von Vhosts auf meinem Webserver mit Chef 11.10 zu erstellen. Ich möchte, dass der Inhalt dieser Dateien per vhost leicht unterschiedlich ist.Mehrere Chef-Vorlagen mit einer For Each-Anweisung und einem Attribut-Array
Die aktuelle Implementierung erstellt verschiedene Dateinamen (1 für jeden im Array.), Aber die Vorlage enthält jedes Mal nur das letzte Element im Array.
Zum Beispiel gibt es 3 vhosts - example1.com, example2.com, example3.com in einem Array. In meinem /var/www/conf.d/ Verzeichnis habe ich 3 Dateien nach dem Rezept
> example1.com.conf
> example2.com.conf
> example3.com.conf
laufen wird, das ist ein guter Anfang, aber der Inhalt dieser Dateien alle mit dem letzten Variablen gleich sind in das verwendete Array. Alle haben "example3.com" als Host zB.
server {
listen 80;
server_name example3.com;
return 301 https://$host$request_uri;
}
Mein Rezept containts diese
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
und meine Vorlage in den folgenden Code
server {
listen 443;
server_name <%= node[:nginx][:hostname] %>;
return 301 http://$host$request_uri;
}
und in meine Attribute/default.rb Datei i die folgende Array.
Das funktionierte perfekt Dank Kamerad . Ja, Variablen waren der richtige Weg. Und definitiv in Bezug auf die Standardattribute! :) Vielen Dank – jimmy