2017-09-06 7 views
0

我有下面的代码未抛出一个错误,但事实是空ansible解析额外的变种使用默认值,如果正则表达式失败

- 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

回答

1

没有任何参数default仅当值为Undefin时触发过滤器编辑。但是无法匹配的正则表达式的结果是一个空字符串,它是而不是未定义。您可能想要设置boolean标志:

- set_fact: 
     myrepo: "{{ results.stdout | regex_search(regexp,'\\1') | default('global', boolean=True) }}" 
    vars: 
     regexp: '(.*)/(.*)'