问题描述
我想在每次发现时在* {My-Dept $ 1}之后在file.yaml中添加行“ * {My-Dept $ 2}”,我能够找到以* {My-Dept开头的行$ 1},并且只插入了一次,结果就麻烦了。
我在文件的多行中包含此内容,并希望在“ * {My-Dept $ 1}”之后插入。
参考如下:
Infrastructure:
- *{My-Dept$0}
- *{My-Dept$1}
Applications:
- *{My-Dept$1}
- *{My-Dept$3}
- *{My-Dept$4}
Database:
- *{My-Dept$0}
- *{My-Dept$1}
- *{My-Dept$3}
使用下面的代码,我只能在最后一个“ Database arry”条目之后添加“-* {My-Dept $ 2}”行。
- name: Add missing Dept
lineinfile:
dest: ./file.yaml
insertafter: '[*{]My-Dept[$]1[}]' #
line: ' - *{My-Dept$2}'
和输出:
Infrastructure:
- *{My-Dept$0}
- *{My-Dept$1}
Applications:
- *{My-Dept$1}
- *{My-Dept$3}
- *{My-Dept$4}
Database:
- *{My-Dept$0}
- *{My-Dept$1}
- *{My-Dept$2}
- *{My-Dept$3}
我希望在* {My-Dept $ 1}项的每个发现的下一行上都显示“ * {My-Dept $ 2}”。大多数搜索查找都在谈论替换,但是我的要求是在每次查找中插入多次。
解决方法
制作 file.yaml valid YAML。例如
shell> cat file.yaml
---
Infrastructure:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
Applications:
- '*{My-Dept$1}'
- '*{My-Dept$3}'
- '*{My-Dept$4}'
Database:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
- '*{My-Dept$3}'
Q:“将* {My-Dept $ 2}放入* {My-Dept $ 1}条目的每个结果的下一行。”
A:可以自行编辑文件。
- 将文件中的变量读取到字典中。例如
- include_vars:
file: file.yaml
name: my_dict
- debug:
var: my_dict
给予
my_dict:
Applications:
- '*{My-Dept$1}'
- '*{My-Dept$3}'
- '*{My-Dept$4}'
Database:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
- '*{My-Dept$3}'
Infrastructure:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
- 修改数据。例如
- set_fact:
my_dict1: "{{ my_dict1|default({})|
combine({item: (my_dict[item] + add_items)|unique|sort}) }}"
loop: "{{ my_dict.keys()|list }}"
vars:
add_items:
- '*{My-Dept$2}'
- debug:
var: my_dict1
给予
my_dict1:
Applications:
- '*{My-Dept$1}'
- '*{My-Dept$2}'
- '*{My-Dept$3}'
- '*{My-Dept$4}'
Database:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
- '*{My-Dept$2}'
- '*{My-Dept$3}'
Infrastructure:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
- '*{My-Dept$2}'
- 创建模板
shelll> cat file.yaml.j2
---
{% for k,v in my_dict1.items() %}
{{ k }}:
{% for item in v %}
- '{{ item }}'
{% endfor %}
{% endfor %}
- 将修改后的数据写入文件
- template:
src: file.yaml.j2
dest: file.yaml
给予
shell> cat file.yaml
---
Infrastructure:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
- '*{My-Dept$2}'
Applications:
- '*{My-Dept$1}'
- '*{My-Dept$2}'
- '*{My-Dept$3}'
- '*{My-Dept$4}'
Database:
- '*{My-Dept$0}'
- '*{My-Dept$1}'
- '*{My-Dept$2}'
- '*{My-Dept$3}'