Ansible基于vars_prompt提示变量条件赋值时结果恒为https问题
问题根因
- Ansible的
vars_prompt返回的所有输入值默认都是字符串类型,Jinja2原生布尔判断规则中,所有非空字符串都会被判定为真。因此即便你输入的是语义为假的no、false类字符串,直接做if https判断时也会判定为真,始终返回https。 - 你在debug任务中使用了
bool过滤器将字符串转为布尔值所以可以正确输出false,但protocol变量的条件判断中没有做类型转换,是问题的直接原因。
修复方案
修改vars段中protocol变量的定义,增加bool过滤器完成类型转换即可:
vars: protocol: "{{ 'https' if https | bool else 'http' }}"
如果需要兼容大小写输入(比如用户输入No、NO、FALSE这类值),可以额外增加lower过滤器提升兼容性:
vars: protocol: "{{ 'https' if https | lower | bool else 'http' }}"
验证结果
修改后重新执行Playbook,输入no时protocol会正确返回http,输入yes时返回https,符合预期逻辑。
内容的提问来源于stack exchange,提问作者Guido Caffa
相关产品推荐
相关产品推荐

