- set_fact:
Number_New: "{{ nsplit.0 }}"
Status: "{{ nsplit.1|default('%') }}"
vars:
nsplit: "{{ Number.split('_', 1) }}"
让用户认为将Number参数传递给我的ansible-playbook为>>
ansible-playbook /app/test.yml -e "Number=22235_ReDep_292001105550"
我希望set_fact“ Number_New”是第一个下划线“ _”之前的字符串,即22235,“ Status”是第一个下划线“ _”之后的所有字符串,即]]
Expectation: Number_New should be "22235" Status should be "ReDep_292001105550"
第二种情况;用户可以通过-e“ Number = 22235”。这种情况下,我希望set_fact“ Number_New”应该与传递的“ Number = 22235”相同,而Status应该是“%”模数符号。
Expectation: Number_New should be "22235" Status should be "%"
下面是我的剧本尝试,当传递的参数为“ Number = 22235_ReDep_292001105550”时工作正常,但在-e“ Number = 22235”时失败,]
tasks: - name: Populate number and status from user input set_fact: Number_New: "{{ Number.split('_')[0] | default(Number) }}" Status: "{{ Number.split('_')[1] }}_{{ Number.split('_')[2] | default('%') }}"
失败时出错:
<<fatal: [localhost]: FAILED! => { "msg": "The task includes an option with an undefined variable. The error was: list object has no element 1\n\nThe error appears to be in '/app/test.yml': line 32, column 6, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: Populate number and status from user input\n ^ here\n" }
下面的任务完成了工作
- set_fact: Number_New: "{{ nsplit.0 }}" Status: "{{ nsplit.1|default('%') }}" vars: nsplit: "{{ Number.split('_', 1) }}"
- set_fact:
Number_New: "{{ nsplit.0 }}"
Status: "{{ nsplit.1|default('%') }}"
vars:
nsplit: "{{ Number.split('_', 1) }}"