web-dev-qa-db-ja.com

Ansibleのテンプレートモジュールでファイルを追加する

そのため、Jinja2テンプレートを使用してログファイルを作成するansibleプレイブックがあります。プレイブックを実行するたびに、customers.ymlから顧客情報を取得し、完成したテンプレートを「stunnel.conf」ファイルに出力します。テンプレートは正常に機能しますが、テンプレートモジュールを使用して上書きするのではなく、前の「stunnel.conf」を追加する方法を見つけようとしています。 'stunnel.conf'の先頭に手動でテキストを追加し、上書きしないようにしたいと思います。これは可能だと思いますか?

Stunnel.conf

; GFAM - PBSTP
[customer-GFAM-34074]
cert = /etc/stunnel/stunnel.pem
accept = 34094
connect = 35094

; GUANFABANK - FXSIM
[customer-GUANFABANK-34051]
cert = /etc/stunnel/stunnel.pem
accept = 34095
connect = 35095

; ONEZERO2 - TRADESTREAM
[customer-ONEZERO2-39124]
cert = /etc/stunnel/stunnel.pem
accept = 34096
connect = 35096

; BTG-VELOCITY - PBSTP
[customer-BTG-VELOCITY-42533]
cert = /etc/stunnel/stunnel.pem
accept = 34097
connect = 35097

Jinja2テンプレート

{#CONTEXT: {{ customers }}#}
{% set currentport = 34093%}
{% for cust, config in customers.items() %}
; {{ cust }} - {{ config['type'] }}
[customer-{{ cust }}-{{ config['accept'] }}]
cert = {{ "/etc/stunnel/stunnel.pem" }}
{#accept = {{ config['accept'] }}#}
{#connect = {{ config['connect'] }}#}
accept = {{ currentport + 1 }}
connect = {{ currentport + 1001 }}
{% set currentport = currentport + 1 %}

{% endfor %}

playbook.yml

- include_vars:
    file: /home/vagrant/stunnelSimAnsPractice/roles/ns16/vars/customers.yml
    name: customers

- template:
    src: /home/vagrant/stunnelSimAnsPractice/roles/ns16/templates/stunnel.j2
    dest: /home/vagrant/stunnelSimAnsPractice/roles/ns16/output/stunnel.conf
    owner: root
    group: root
5

blockinfile モジュールと テンプレート ルックアップを使用して、stunnel.conf内のクライアントごとのブロックを管理できます。

- include_vars:
    file: customers.yml
    name: customers

- blockinfile:
    dest: stunnel.conf
    block: "{{ lookup('template', 'stunnel.j2') }}"
    marker: "; {mark} ANSIBLE MANAGED BLOCK FOR {{ cust }}"

読みやすくするためにファイルパスを短くしました。

このようにして、Ansibleは特定のクライアントの管理対象ブロックを探します({{ cust }}変数)、テンプレート化されたstunnel.j2のコンテンツを追加/置換します。

13

私はこのようにすることを提案したいと思います:

  1. テンプレートの出力を一時ファイルに保存します。
  2. 一時ファイルの内容をStunnel.confファイルに追加します。
  3. 一時ファイルを削除します。

プレイブックでは、次のようになります。

- include_vars:
    file: /home/vagrant/stunnelSimAnsPractice/roles/ns16/vars/customers.yml
    name: customers

- template:
    src: /home/vagrant/stunnelSimAnsPractice/roles/ns16/templates/stunnel.j2
    dest: /home/vagrant/stunnelSimAnsPractice/roles/ns16/output/temp.conf
    owner: root
    group: root

- name: "Append stunnel.conf with content of temporary file"
  Shell: cat temp.conf >> stunnel.conf
  args:
    chdir: "/home/vagrant/stunnelSimAnsPractice/roles/ns16/output"

- name: "Delete temporary file"
  file:
    path: /home/vagrant/stunnelSimAnsPractice/roles/ns16/output/temp.conf
    state: absent
2
kzygmans