ansible - Ansible jinja 2 模板值不应该改变
问题描述
我已经在 ansible 中编写了 jinja2 模板。我想要实现的是,如果未提及 service_name 并且远程计算机上已存在 service_name,则 ansible 不应使用模板中提到的默认名称更改 service_name。但是,当未定义 service_name 时,即使 service_name 存在,ansible 也会在远程机器上用“abc”替换服务名称。任何帮助,将不胜感激。
active={{ active_status}}
instrument={{ instrument_status }}
{% if service_name is defined %}
service_name={{ service_name }}
{% else %}
service_name=abc
{% endif %}
谢谢
解决方案
根据我的上述评论,这里有一个可能的示例实现来满足您的要求。test_template.j2
是您当前模板的精确副本。您可以将服务名称作为额外变量传递给 test ( -e service_name=my_service
)
基本上,如果service_name
没有定义,我们:
- 检查远程文件是否已存在并将
slurp
其内容放入 var - 在文件中查找相关行。注意:
regex_replace('None', '')
这里是为了确保如果之前的搜索/匹配没有返回任何内容,我们会得到一个空字符串。 - 仅当在先前任务中发现相关内容时才设置服务名称
正确完成此检查/设置后,您只需复制模板即可,无论情况如何。
---
- name: Conditional writing of template
hosts: localhost
gather_facts: false
vars:
my_dest: /tmp/test_file.txt
active_status: some active value
instrument_status: some instrument value
tasks:
- name: Try to read service name from existing file when it is not defined
when: service_name is not defined
block:
- name: Check if file exists
stat:
path: "{{ my_dest }}"
register: my_file
- name: Try to read target file if exists
slurp:
src: "{{ my_dest }}"
when: my_file.stat.exists
register: my_file_slurp
- name: Look for service name if there
set_fact:
looked_service: >-
{{
my_file_slurp.content
| b64decode
| regex_search('^service_name=.*$', multiline=true)
| regex_replace('^service_name=(.*)$', '\1')
| regex_replace('None', '')
}}
when: my_file.stat.exists
- name: Update service name if found
set_fact:
service_name: "{{ looked_service }}"
when: looked_service | default('') | length > 0
- name: Copy template file to destination
template:
src: test_template.j2
dest: "{{ my_dest }}"
推荐阅读
- apache - Apache:在虚拟主机上禁止
- css - 如何在 windows 和 mac 中从电子(使用 vue)打印具有相同结果的页面
- python - n 个列表中项目的所有可能组合
- android - onBindViewHolder 绑定视图不一致
- java - How to print a variable using an user input
- c# - Unity for Android 中的 Azure AD 身份验证出错
- reactjs - React Native:成功启动模拟器,但应用程序未完全打开,index.ios.js 构建
- python - 使用python分离DBSCAN中每个集群的坐标(3D坐标)
- java - 有没有办法在 Linux 上用 Java 原子地写入文件?
- excel - 如何在此 excel 案例中添加单元格引用?