Appending files with Template Module in Ansible
Solution 1
You can use blockinfile module and template lookup to manage per-client blocks in your 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 }}"
I've shortened file paths for readability.
This way Ansible will look for managed block for specific client ({{ cust }}
variable) and add/replace with content from templated stunnel.j2.
Solution 2
I would like suggest to do it like this:
- Save output of template to temporary file.
- Append Stunnel.conf file with content of temporary file.
- Delete temporary file.
In playbook it could look like:
- 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
Johnny Gillespie
Updated on June 09, 2022Comments
-
Johnny Gillespie almost 2 years
So I have an ansible playbook that is using a Jinja2 template to create a log file. Everytime I run the playbook it is pulling in customer information from customers.yml and outputting the completed template into a 'stunnel.conf' file. The template works fine but I am trying to find a way to append the previous 'stunnel.conf' rather than overwriting it using the Template module. I wish to add text to the beginning of the 'stunnel.conf' manually and not have it overwritten. Do you think this would be possible?
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 Template
{#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