移除隐藏 Ansible 代理映射的空 play 变量
清单组变量会输给 play 级声明,即使该声明为空或为 null。
如果 group_vars 定义了代理映射,但任务收到的是空值,请查找在同一 play 中声明的同名变量。play 变量的优先级更高;即使占位符为空,它仍会覆盖清单。
对于允许使用公共 HTTP 代理的外部下载,HTTP 代理列表为清单值提供候选地址。请把映射保留在清单中:
proxy_env:
http_proxy: http://proxy.example.net:8080
https_proxy: http://proxy.example.net:8080然后将其应用到目标任务,且不要使用 play 级的 proxy_env: 占位符:
environment: "{{ proxy_env | default({}) }}"如果角色需要回退值,角色默认值中的空映射位于清单值之下,可以让清单值胜出。
所示过滤器处理的是 undefined,而不是所有看起来为空的状态。显式的 null 已经定义,因此普通的 default({}) 不会清除那个更高优先级的覆盖。
更改代理端点之前,请先检查受影响主机的实际取值。只有在变量优先级选定了它所求值的映射之后,environment 指令才会提供任务的输入。