ansible的hosts文件里添加部分的children和vars如下
[card-prod1:vars]
dubbo_port="20904"
tomcat_port="8804"
[card-prod2:vars]
dubbo_port="20904"
tomcat_port="8804"
[card:children]
card-prod1
card-prod2
[video:children]
video-prod1
video-prod2
[video:vars]
dubbo_port=20920
tomcat_port=8820
[wx:children]
wx-prod1
wx-prod2
[wx:vars]
dubbo_port=20918
tomcat_port=8818
dubbo_port会被最后一个参数的值覆盖掉。
查了下资料 似乎没法解决。不想每个主机写一个参数,采用直接使用-e 参数传入 方便一点。至少只要每个组传一次 方便一些。
变量优先级
1 extra vars (在命令行中使用 -e)优先级最高
2 然后是在inventory中定义的连接变量(比如ansible_ssh_user)
3 接着是大多数的其它变量(命令行转换,play中的变量,included的变量,role中的变量等)
4 然后是在inventory定义的其它变量
5 然后是由系统发现的facts
6 然后是 "role默认变量", 这个是最默认的值,很容易丧失优先权
可参考
https://www.it1352.com/1930098.html
https://linux.xiao5tech.com/devops/ansible/1.5.4_var_same_host_different_group.html