Ansible中host_vars无法覆盖group_vars变量的问题与用法咨询
问题1:host_vars未覆盖group_vars的原因
- 你想通过host_vars覆盖全局组变量的用法逻辑是符合Ansible设计的,出现问题是因为你的playbook配置错误。
- Ansible默认会自动加载inventory同级目录下
group_vars、host_vars目录内的变量,正常优先级规则为:单主机host_vars变量 > 组group_vars变量,不需要你手动在playbook中通过vars_files引入group_vars/all。 - 你当前在playbook中显式通过
vars_files加载了group_vars/all,vars_files指定的变量优先级高于inventory自动加载的host_vars变量,因此host_vars中定义的hostname被覆盖,最终输出了name1。 - 解决方法:删除playbook中如下配置即可,变量会自动加载,此时host_vars的
name2会正常生效:
vars_files: - group_vars/all
问题2:host_vars下文件命名为web_server是否生效
- 该配置无法生效。
host_vars目录下的文件名需要和inventory中定义的单主机的IP/别名完全匹配才会被加载,你配置中的web_server是组名,不是单主机标识,Ansible会将其识别为名为web_server的单主机的变量,而你的inventory中不存在这台主机,因此不会对10.20.30.40生效。- 如果你想给
web_server整个组配置变量,需要将文件放在group_vars目录下,命名为web_server即可。
内容的提问来源于stack exchange,提问作者Miantian
相关产品推荐
相关产品推荐

