【问题标题】:ansible passing to a mapped variableansible传递给映射变量
【发布时间】:2017-12-12 18:01:22
【问题描述】:

我有一个 ansible tomcat 角色

defaults/main.yml

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

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

defaults/main.yml

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 jinja2 ansible-template ansible-role


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2018-04-30
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多