我有以下的剧本~ # cat demo.yml:
- name: demo
hosts: localhost
gather_facts: no
vars:
set:
task:
type: var1
task:
- type: var1
- type: var2
- type: var3
tasks:
- debug:
var: set
- debug:
var: task
- set_fact:
task:
type: "{{set.task.type if item.type is search(set.task.type|join('|')) else 'absent'}}"
loop: "{{task}}"
- debug:
var: taskPLAY [demo] ************************************************************************************************************************************************************************************************
TASK [debug] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"set": {
"task": {
"type": "var1"
}
}
}
TASK [debug] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"task": [
{
"type": "var1"
},
{
"type": "var2"
},
{
"type": "var3"
}
]
}
TASK [set_fact] ********************************************************************************************************************************************************************************************
ok: [localhost] => (item={'type': 'var1'})
ok: [localhost] => (item={'type': 'var2'})
ok: [localhost] => (item={'type': 'var3'})
TASK [debug] ***********************************************************************************************************************************************************************************************
ok: [localhost] => {
"task": {
"type": "var1"
}
}
PLAY RECAP *************************************************************************************************************************************************************************************************
localhost : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 正如您可以看到的那样,这非常有效,变量task.type的新值被设置为var1。
但是,问题是当我提供set.task.type: var4或任何其他变量时。
将task.type设置为var4而不是缺席。
如果task.type: absent不匹配数组中的任何值,如何设置新值set.task.type?
发布于 2022-08-16 10:06:55
对我来说,对于你的问题,我也不清楚你想达到什么目的。
如果
task.type: absent不匹配数组中的任何值,如何设置新值set.task.type?
和
在我提供不存在于
set.task.type数组(annot.:list)的task.type值之前,这是很棒的。
这似乎是因为字典上的过滤器| join('|'),以及对我来说似乎没有必要的loop。所以如何
验证变量
set.task.type是否在task.type__列表中。如果存在值,则需要将task.type更新为set.task.type__中的值。
不带循环地执行
---
- hosts: localhost
become: false
gather_facts: false
vars:
# dictionary
set:
task:
type: var4
# list
task:
- type: var1
- type: var2
- type: var3
tasks:
- debug:
msg: "{{ set.task.type if task | join('|') is search(set.task.type) else 'absent' }}"的输出结果。
TASK [debug] *****
ok: [localhost] =>
msg: absent请注意,您没有设置新值,而是创建了一个新对象。之后将不会有list task[*].type,而是一个字典task.type。
update_fact模块-更新当前设置的事实变量没有修改到位,而是由模块返回。https://unix.stackexchange.com/questions/713204
复制相似问题