所以我有一个变量,我们将其称为“值”,并且您知道它由以下内容组成:
"delta": "0:00:00.021861",
"end": "2019-01-17 10:16:50.303568",
"failed": false,
"rc": 0,
"start": "2019-01-17 10:16:50.281707",
"stderr": "",
"stderr_lines": [],
"stdout": A, B, C, D, E, F, G"
"stdout_lines": A, B, C, D, E, F, G"
现在,我需要编辑该变量,所以我运行了一个with_items循环,如下所示:
- set_fact:
new_value: "{{ new_value | default([]) | union([item])}}"
when: ...if letter is a vowel...
with_items: "{{ value.stdout_lines }}"
然后我这样做:
- set_fact:
value: new_value
问题是,现在它不再像以前那样是同一类型的对象,它只是一个普通的旧列表,因为我循环遍历了'.stdout_lines'
是否有办法解决此问题,以便'new_value'也具有所有以前的信息,例如:“ delta”,“ end”,“ stderr”等?
答案 0 :(得分:0)
您不能编辑现有事实,但是可以根据需要设置一个新的事实。
---
- hosts: localhost
gather_facts: no
tasks:
- set_fact:
value:
delta: '0:00:00.021861'
end: '2019-01-17 10:16:50.303568'
start: '2019-01-17 10:16:50.281707'
stdout_lines: ['A', 'B', 'C', 'D', 'E', 'F', 'G']
- set_fact:
new_value: "{{ value.stdout_lines | select('match', '[AE]') | list }}"
- set_fact:
value: "{{ value | combine({'stdout_lines': new_value}) }}"
- debug:
msg: "{{ value }}"
在这里,我们使用combine
过滤器以新值覆盖原始词典的一部分。