问题描述
所以我有一个使用 Jinja2 模板创建日志文件的 ansible playbook.每次我运行剧本时,它都会从 customer.yml 中提取客户信息并将完成的模板输出到stunnel.conf"文件中.模板工作正常,但我试图找到一种方法来附加以前的stunnel.conf",而不是使用模板模块覆盖它.我希望手动将文本添加到 'stunnel.conf' 的开头而不是覆盖它.你认为这可能吗?
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
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
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
推荐答案
您可以使用 blockinfile 模块和模板 查找以管理 stunnel.conf 中的每个客户端块:
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 }}"
为了便于阅读,我缩短了文件路径.
这样 Ansible 将寻找特定客户端的托管块({{ cust }}
变量)并添加/替换来自模板化 stunnel.j2 的内容.
This way Ansible will look for managed block for specific client ({{ cust }}
variable) and add/replace with content from templated stunnel.j2.
这篇关于在 Ansible 中使用模板模块附加文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!