ウラジミール・fomin @、私は強くlineinfile
モジュールを使用してからあなたを落胆しています:それは非常に壊れやすいです。
{% for ... %}
ループを利用すると、template
を使用する方が良いでしょう。 、
- 冪等(tm)の出荷デフォルトで
- 変更は、彼らは通常、すでにアプリの特定のconfigsを含めることができるように:
は、コンフィギュレーションは、ターゲット・ホスト上のロケット科学置かれていない、と心配していませんORは、自動化できる非常に最小限の下流パッチを必要とします。
- あなたは、私は通常、例えば、ここでは、役割の
templates
フォルダの下に同一の相対パスでテンプレートファイルを入れています
を入れているコンテンツの管理/安定性を失います自分の役割のテンプレートフォルダの下に、下のテンプレートを置く:あなたはあなたの中に対応する詳細とapp
変数を持つことになります推測したよう
upstream {{app.name}} {
{% for alias in app.aliases %}
#server {{alias}}.{{app.domain}}; there.
{% endfor %}
}
server {
listen 80;
location/{
proxy_pass http://{{app.name}};
}
}
:それではetc/nginx/conf.d/myapp.conf.j2
のように、あなたの設定を置きます。
これは、まるで同じように動作します。 このテンプレートそうのようにレンダリングすることができます:
- name: put nginx app config
template:
src: '{{tpl}}.j2'
dest: '/{{tpl}}'
...
with_items:
- 'etc/nginx/conf.d/myapp.conf'
loop_control:
loop_var: tpl
このコードは、私見を維持するために容易になるだろう、とあまり注意が必要です。 あなたのファイルはテンプレートの状態とまったく同じように見えます。
メインのnginx設定ファイルは、すべての.confファイルを/etc/nginx/conf.d/
に含めるように正しく設定する必要があります。正しい設定レベルを含める必要があります。
しかし、私はあなたがそのアイデアを得ていることを願っています。
:)
上記のコードは、変数を持っていた場合には、仕事とは:
app:
name: myapp1
domain: mydomain.com
aliases:
- name1
- name22
- name3
また、このアプローチは、あなたが簡単に拡張することができます。複数のアプリケーションをサポートするために、あなた
ステップ1:あなたの変数を拡張:
apps:
- name: myapp1
domain: mydomain1.com
aliases:
- name1
- name22
- name3
- name: myapp2
domain: mydomain2.com
aliases:
- lalala
- uquququ
- lslsls
ステップ2:あなたのタスク
- name: 'put nginx config of {{app.name}}'
template:
src: '{{tpl}}.j2'
dest: '/{{tpl|dirname}}/{{app.name}}.conf'
...
with_items:
- 'etc/nginx/conf.d/myapp.conf'
loop_control:
loop_var: tpl
ステップ3を更新:myapps.yml
の名前タスクリストとしてそれを抽出
ステップ4:アプリのループオーバーでタスクリストを実行する変数:
- include: myapps.yml
with_items: '{{apps}}'
loop_control:
loop_var: app
これは、他のアプリのために変更する必要のないテンプレートがあることを意味します。 あなたはそれをより複雑にすることができます - app
の特定の追加キーを確認し、対応する行/部分をconfigに追加します。 これはあなたのすべてのアプリに適用されます。 apps
では、さまざまなアプリについて異なるフィールドを定義することができ、それが持つものだけを使うには十分な堅牢性があります。
いいえ、いいですか? :)
これは冪等ではないため、線を徐々に追加しないでください。あなたはファイルにどの行を入れるべきかを定義し、すべての行が存在するように注意します。 – ceving