다음 스크립트가 있습니다 ~ # 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: task
산출:
PLAY [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
다음으로 설정 되어 있습니다.변수 1.
그러나 문제는 내가 제공 set.task.type: var4
하거나 다른 변수를 제공할 때입니다.
비율 task.type
은 다음과 같이 설정됩니다.변수 4바꾸다결석한.
질문:
task.type: absent
set.task.type
배열의 값과 일치하지 않는 경우 새 값을 어떻게 설정합니까?
답변1
당신이 달성하고 싶은 것이 무엇인지도 나에게는 명확하지 않지만, 귀하의 질문에 관해서는
task.type: absent
set.task.type
배열의 값과 일치하지 않는 경우 새 값을 어떻게 설정합니까?
그리고
set.task.type
존재하지 않는 값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
참고하시기 바랍니다.새로운 값을 설정하지 않음대신 새 개체가 만들어집니다. 그 이후에는 목록이 없고 task[*].type
사전만 있을 것입니다 task.type
.
추가 문서
update_fact
모듈 – 현재 사실 세트를 업데이트합니다.변수는 제자리에서 수정되지 않지만 모듈에서 반환됩니다.