我有以下代码,它不会抛出错误,但事实是空的
- shell: echo '{{ p }}'
register: results
- debug:
var: results
- set_fact:
myrepo: "{{ results.stdout | regex_search(regexp,'\\1') | default ( {'0':'global'} ) }}"
vars:
regexp: '(.*)/(.*)'
这是输出
TASK [command] **************************************************************************************************************************************************************************************
changed: [localhost]
TASK [debug] ****************************************************************************************************************************************************************************************
ok: [localhost] => {
"results": {
"changed": true,
"cmd": "echo 'tim'",
"delta": "0:00:00.095831",
"end": "2017-09-06 16:37:19.977023",
"rc": 0,
"start": "2017-09-06 16:37:19.881192",
"stderr": "",
"stderr_lines": [],
"stdout": "tim",
"stdout_lines": [
"tim"
]
}
}
TASK [set_fact] *************************************************************************************************************************************************************************************
ok: [localhost]
TASK [debug] ****************************************************************************************************************************************************************************************
ok: [localhost] => {
"myrepo": ""
}
命令为ansible-playbook -i hosts -c local file.yml --extra-vars "p=tim"
如果正则表达式结果为空,我希望myrepo为global
答案 0 :(得分:1)
没有任何参数default仅当值为Undefined时才会触发过滤器。但是,无法匹配的regexp结果是一个空字符串,不未定义。您可能想要设置boolean
标志:
- set_fact:
myrepo: "{{ results.stdout | regex_search(regexp,'\\1') | default('global', boolean=True) }}"
vars:
regexp: '(.*)/(.*)'