如何在Ansible的var_prompt中实现提示换行分隔及输入选择后即时反馈
Ansible Vars_Prompt优化:添加选择反馈与提示换行分隔
我刚好遇到过类似的需求,咱们可以通过拆分任务和添加即时反馈的方式解决这两个问题。先看看你的当前配置,然后一步步调整:
你的当前配置
tasks: vars_prompt: - name: logging_endpoint_selected prompt: "Confirm the endpoint to forward logs.\n 1. test1 \n 2. test2 \n * Please input either 1 or 2 based on your selection " private: no - name: "Username" prompt: " Splunk software must create an administrator account during startup. Otherwise, you cannot log in.\n Create credentials for the administrator account.\n Characters do not appear on the screen when you type in credentials\n Please enter an administrator username" private: no - name: "Password" prompt: " Password must contain at least:\n * 8 total printable ASCII character(s).\n Please enter a new password" private: yes - name: "Confirm_Password" prompt: " Please confirm new password" private: yes
问题分析
- 提示无换行分隔:所有
vars_prompt项连续输出,输入完成后没有自动换行,导致下一个提示紧跟上一个输入结果,视觉上很拥挤; - 无选择反馈:用户输入1/2后,没有即时确认信息,无法直观验证自己的选择是否正确。
解决方案
我们可以把任务拆分成三个部分:收集选择→输出反馈→收集账号密码,同时在提示文本中手动添加换行符来分隔内容:
修改后的完整Playbook
tasks: # 第一步:收集日志端点选择,末尾添加换行预留分隔空间 - name: Prompt for logging endpoint selection vars_prompt: - name: logging_endpoint_selected prompt: "Confirm the endpoint to forward logs.\n 1. test1 \n 2. test2 \n * Please input either 1 or 2 based on your selection \n\n" private: no # 可选:添加输入验证,确保输入是1或2 validate: "{{ item in ['1','2'] }}" invalid_msg: "Invalid input! Please enter 1 or 2." # 第二步:即时输出选择反馈,让用户直观确认选择 - name: Show selected endpoint feedback debug: msg: "You selected the option {{ 'test1' if logging_endpoint_selected == '1' else 'test2' }}" # 确保只有输入有效时才显示反馈 when: logging_endpoint_selected in ['1','2'] # 第三步:收集管理员账号密码,每个提示开头添加换行分隔 - name: Prompt for administrator credentials vars_prompt: - name: "Username" prompt: "\nSplunk software must create an administrator account during startup. Otherwise, you cannot log in.\nCreate credentials for the administrator account.\nCharacters do not appear on the screen when you type in credentials\nPlease enter an administrator username\n" private: no - name: "Password" prompt: "\nPassword must contain at least:\n* 8 total printable ASCII character(s).\nPlease enter a new password\n" private: yes # 可选:验证密码长度 validate: "{{ item | length >=8 }}" invalid_msg: "Password must be at least 8 characters long!" - name: "Confirm_Password" prompt: "\nPlease confirm new password\n" private: yes # 可选:验证两次密码一致 validate: "{{ item == Password }}" invalid_msg: "Passwords do not match! Please try again."
关键优化点说明
- 添加选择反馈:用
debug模块在收集完选择后立刻输出对应的提示,通过条件判断if/else把输入的1/2映射到对应的选项名称; - 提示换行分隔:在每个
prompt文本的开头或末尾添加\n(比如第一个提示末尾加\n\n,后续提示开头加\n),确保输入完成后下一个提示和上一个内容之间有空行; - 可选验证增强:给
vars_prompt添加validate和invalid_msg参数,确保输入符合要求(比如必须是1/2、密码长度足够、两次密码一致),避免无效输入。
这样调整后,用户输入选择后会立刻看到反馈,每个提示之间也会有清晰的换行分隔,交互体验会顺畅很多。
内容的提问来源于stack exchange,提问作者NVP
相关产品推荐
相关产品推荐

