ansible传递到映射变量

ansible传递到映射变量,ansible,jinja2,ansible-template,ansible-role,Ansible,Jinja2,Ansible Template,Ansible Role,我有一个扮演雄猫的角色 默认值/main.yml tomcat_http: port: "8080" protocol: "HTTP/1.1" connectionTimeout: "120000" URIEncoding: "UTF-8" app_uriencoding: "ISO-8859-1" 我有另一个角色(应用程序),它使用tomcat角色作为依赖项,如下所示 默认值/main.yml tomcat_http: port: "8080" protocol:

我有一个扮演雄猫的角色

默认值/main.yml

tomcat_http:
  port: "8080"
  protocol: "HTTP/1.1"
  connectionTimeout: "120000"
  URIEncoding: "UTF-8"
app_uriencoding: "ISO-8859-1"
我有另一个角色(应用程序),它使用tomcat角色作为依赖项,如下所示

默认值/main.yml

tomcat_http:
  port: "8080"
  protocol: "HTTP/1.1"
  connectionTimeout: "120000"
  URIEncoding: "UTF-8"
app_uriencoding: "ISO-8859-1"
meta/main.yml

dependencies:
  - { role: common, tags: app }
  - { role: tomcat, tomcat_http.URIEncoding: "{{ app_uriencoding }}", tags: app }
当我在目标上运行应用程序角色时,我希望应用程序角色(ISO-8859-1)中定义的URIEncoding值传递给tomcat角色,并覆盖URIEncoding的tomcat角色默认值

我无法将值传递给tomcat角色“
{{tomcat_http.URIEncoding}}
。我尝试过的一些选择

tomcat_http.URIEncoding
tomcat_http[URIEncoding]
tomcat_http.["URIEncoding"]

要么我有语法错误,要么就是不起作用。如果有人对如何将值传递到映射变量有任何想法,请告诉我

通常情况下,这是不可能的,因为默认(和建议的)Ansible配置变量会覆盖较低优先级的变量

但是有一个选项,您可以将其设置为
merge

在这种情况下,您可以使用:

- role: tomcat
  tomcat_http:
    URIEncoding: "{{ app_uriencoding }}"
  tags: app
这样,来自角色的var的
tomcat\uhttp
将与角色的默认值合并。但要小心,这可能会打断你剧本的其他部分

如果希望独立重写角色的默认值,请使用:

tomcat_http_port: "8080"
tomcat_http_protocol: "HTTP/1.1"
tomcat_http_connectionTimeout: "120000"
tomcat_http_URIEncoding: "UTF-8"