如果您想让用户有机会改进,请使用pause。但是,没有默认。
- hosts: localhost
gather_facts: false
tasks:
- pause:
prompt: "vm_env (values: PRD, TST, DEV)"
register: result
until: result.user_input|default('') in ['PRD', 'TST', 'DEV']
retries: 3
delay: 0
- set_fact:
vm_env: "{{ result.user_input }}"
给予
PLAY [localhost] ****
TASK [pause] ****
[pause]
vm_env (values: PRD, TST, DEV):
ok: [localhost]
TASK [set_fact] ****
ok: [localhost]
TASK [debug] ****
ok: [localhost] => {
"vm_env": "PRD"
}
PLAY RECAP ****
localhost: ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
备注
- 请注意,如果您在上面的值中使用“yes”或“no”,那么 set_fact 之后会将 user_input 信息变为布尔值(“true”/“false”)! (信用@Monger39)
- pause:
prompt: "vm_env (values: yes, no)"
register: result
- debug:
msg: |-
result.user_input: {{ result.user_input }}
result.user_input|type_debug: {{ result.user_input|type_debug }}
- set_fact:
vm_env: "{{ result.user_input }}"
- debug:
msg: |-
vm_env: {{ vm_env }}
vm_env|type_debug: {{ vm_env|type_debug }}
在下面给出“是”的输出
TASK [pause] ********************************************************
[pause]
vm_env (values: yes, no):
yes^Mok: [localhost]
TASK [debug] ********************************************************
ok: [localhost] =>
msg: |-
result.user_input: yes
result.user_input|type_debug: AnsibleUnsafeText
TASK [set_fact] *****************************************************
ok: [localhost]
TASK [debug] ********************************************************
ok: [localhost] =>
msg: |-
vm_env: True
vm_env|type_debug: bool
'no' 的类似输出
TASK [pause] ********************************************************
[pause]
vm_env (values: yes, no):
no^Mok: [localhost]
TASK [debug] ********************************************************
ok: [localhost] =>
msg: |-
result.user_input: no
result.user_input|type_debug: AnsibleUnsafeText
TASK [set_fact] *****************************************************
ok: [localhost]
TASK [debug] ********************************************************
ok: [localhost] =>
msg: |-
vm_env: False
vm_env|type_debug: bool
- 尽管隐含的是/否转换为真/假,但可以在 until 循环中测试字符串。以下任务按预期工作
- pause:
prompt: "vm_env (values: yes, no)"
register: result
until: result.user_input|default('') in ['yes', 'no']
retries: 3
delay: 0
- debug:
msg: "User entered: {{ result.user_input|bool|ternary('yes', 'no') }}"
见: