2017-09-06 5 views
0

Iエラーを投げていない、次のコードを持っていますが、事実はここ ansible解析余分のvarの使用デフォルト正規表現が失敗した場合

- 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"正規表現の結果は、値がUndefinの場合のみdefaultフィルタがトリガされたパラメータを指定せずに

答えて

1

空になっている場合、私はmyrepoはglobalになりたいですed。しかし、一致しないregexpの結果は、空の文字列であり、ではなく、未定義です。 booleanフラグを設定することができます:

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