Ansible中vars_prompt能否搭配when条件实现指定提示跳过?
Ansible 实现输入y后跳过后续提示的解决方案
问题原因
Ansible 的vars_prompt属于剧本预处理阶段的逻辑,执行时机早于变量解析和条件判断流程,直接在vars_prompt条目下添加的when条件不会被识别生效,因此不管第一个输入的内容是什么,后续的提示都会正常弹出。
解决方法
将后续三个交互逻辑从vars_prompt移到任务阶段,使用pause模块实现交互,此时defaultMOTD变量已经完成赋值,when条件可以正常生效。完整实现代码如下:
--- - name: User MOTD Script hosts: localhost vars_prompt: - name: "defaultMOTD" prompt: "Do you want to set the MOTDs to the default? (y/n)" private: no pre_tasks: # 自定义 /etc/motd 输入逻辑 - name: 提示输入/etc/motd内容 pause: prompt: "Please input your MOTD for /etc/motd: " register: motd_input when: defaultMOTD != "y" - name: 赋值MOTD变量 set_fact: MOTD: "{{ motd_input.user_input }}" when: defaultMOTD != "y" # 自定义 /etc/issue 输入逻辑 - name: 提示输入/etc/issue内容 pause: prompt: "Please input your MOTD for /etc/issue: " register: issue_input when: defaultMOTD != "y" - name: 赋值MOTDIssue变量 set_fact: MOTDIssue: "{{ issue_input.user_input }}" when: defaultMOTD != "y" # 自定义 /etc/issue.net 输入逻辑 - name: 提示输入/etc/issue.net内容 pause: prompt: "Please input your MOTD for /etc/issue.net: " register: issue_net_input when: defaultMOTD != "y" - name: 赋值MOTDIssueNet变量 set_fact: MOTDIssueNet: "{{ issue_net_input.user_input }}" when: defaultMOTD != "y" tasks: # 此处添加你后续操作MOTD的业务逻辑,可直接调用MOTD、MOTDIssue、MOTDIssueNet变量
效果说明
当用户在第一个提示输入y时,所有pre_tasks下的交互和变量赋值任务都会被跳过,不会弹出后续输入提示;如果输入其他值,则会依次弹出三个自定义内容的输入提示,和你原有逻辑的效果一致。
内容的提问来源于stack exchange,提问作者Ruth Edges
相关产品推荐
相关产品推荐

