地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

Jinja2 で vhostのループをする

templateモジュールを使ってvhostを大量に使うhttpdのconfの生成方法

変数ファイル

httpd_virtualhostname:
  - hostname: virtualexample1.com
    vars:
      - /var/www/vhosts/virtualexample1.com
      - /var/www/vhosts/virtualexample1.com/LOG
  - hostname: virtualexample2.com
    vars:
      - /var/www/vhosts/virtualexample2.com
      - /var/www/vhosts/virtualexample2.com/LOG

templateファイル

Listen 80
NameVirtualHost *:80 

{% for n in httpd_virtualhostname %} 

<VirtualHost *:80> 
  ServerName {{ n.hostname }} 
  DocumentRoot {{ n.vars.0 }}
 CustomLog {{ n.vars.1 }} combined
</VirtualHost> 
{% endfor %}

playbook

- name: deliv conf
  template:
    src: templates/virtualhost.conf
    dest: /etc/httpd/conf.d/virtualhost.conf

Jinja2を使うことでifやらで条件分岐を行うことも可能。

vhostで80で受けたり443で受けるってケースで443だけ証明書の設定をするみたいな条件分岐を書くことも可能。