linux - ansible - 使用 jinja 模板更改配置文件中的特定行
问题描述
我有一个想要模板化的 .ini 配置文件,但我只想用 jinja2 文件操作一两行。
示例配置文件:
[configuration]
config1 = this_is_fine
config2 = to_be_templated
config3 = to_be_templated
config_4 = this_is_fine
定义只会改变的 configuration.ini.j2 的最佳方法是什么
config2 = {{ assigned_value }}
config3 = {{ assigned_value }}
在运行剧本时保持格式和剩余配置到位?
解决方案
问:“用 Jinja2 文件操作一两行。 ”
A:“一两行”是指一个块。使用blockinfile来操作文件中的块。您需要标记来执行此操作,例如给定文件
shell> cat conf.ini
[configuration]
config1 = this_is_fine
config2 = to_be_templated
config3 = to_be_templated
config_4 = this_is_fine
下面的两个任务在开始config2和结束config3的块周围放置标记
- replace:
path: conf.ini
regexp: '(config2.*)'
replace: |-
{{ '#' }} BEGIN ANSIBLE MANAGED BLOCK c2-3
\g<1>
- replace:
path: conf.ini
regexp: '(config2.*[\s\S]*?config3.*)'
replace: |-
\g<1>
{{ '#' }} END ANSIBLE MANAGED BLOCK c2-3
给
shell> cat conf.ini
[configuration]
config1 = this_is_fine
# BEGIN ANSIBLE MANAGED BLOCK c2-3
config2 = to_be_templated
config3 = to_be_templated
# END ANSIBLE MANAGED BLOCK c2-3
config_4 = this_is_fine
这两个任务不是幂等的。只运行一次。将它们放在单独的剧本中以设置项目或测试标记的存在。
现在您可以使用模板
shell> cat conf.ini.j2
config2 = {{ assigned_value }}
config3 = {{ assigned_value }}
例如下面的任务
- blockinfile:
path: conf.ini
marker: '# {mark} ANSIBLE MANAGED BLOCK c2-3'
block: |
{{ lookup('template', 'conf.ini.j2') }}
vars:
assigned_value: AVALUE
给
shell> cat conf.ini
[configuration]
config1 = this_is_fine
# BEGIN ANSIBLE MANAGED BLOCK c2-3
config2 = AVALUE
config3 = AVALUE
# END ANSIBLE MANAGED BLOCK c2-3
config_4 = this_is_fine
推荐阅读
- google-data-studio - 创建连接器:如何在字段中放置初始/默认值
- selenium - 在 selenium 的子弹出窗口中做一些操作
- android - 仅在 JVM 上测试 AndroidX 片段(不启动模拟器/设备)
- java - Could not deserialize result from HTTP invoker remote service [...]; nested exception is java.lang.ClassNotFoundException:
- java - JPQL count multiple many-to-one and group counts by child column
- python - 模型以字典形式查看,然后将其呈现为 html 表
- r - Sort values from multiple column and create a new variable
- algorithm - 要执行的最大比较次数以搜索根本不存在的节点
- sql - SQL - 如果其他联接为空,则从联接获取数据
- javascript - Faster way to get uniq values from nested array in javascript