ansible传递给映射变量

时间:2017-12-12 18:01:22

标签: ansible jinja2 ansible-template ansible-role

我有一个ansible tomcat角色

默认/ main.yml

tomcat_http:
  port: "8080"
  protocol: "HTTP/1.1"
  connectionTimeout: "120000"
  URIEncoding: "UTF-8"

我有另一个角色(app),它使用tomcat角色作为依赖项,如下所示

默认/ main.yml

app_uriencoding: "ISO-8859-1"

元/ main.yml

dependencies:
  - { role: common, tags: app }
  - { role: tomcat, tomcat_http.URIEncoding: "{{ app_uriencoding }}", tags: app }

当我在目标上运行app角色时,我希望将app角色(ISO-8859-1)中定义的URIEncoding值传递给tomcat角色并覆盖uriencoding的tomcat角色默认值。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

- role: tomcat
  tomcat_http:
    URIEncoding: "{{ app_uriencoding }}"
  tags: app

这种方式来自角色&var的tomcat_http将与角色的默认值合并。但要注意,这可能会制止你剧本的其他部分。

如果您希望独立覆盖角色的默认值,请使用:

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