首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ansible传递到映射的变量

ansible传递到映射的变量
EN

Stack Overflow用户
提问于 2017-12-13 02:01:22
回答 1查看 78关注 0票数 0

我有一个ansible tomcat的角色

defaults/main.yml

代码语言:javascript
复制
tomcat_http:
  port: "8080"
  protocol: "HTTP/1.1"
  connectionTimeout: "120000"
  URIEncoding: "UTF-8"

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

defaults/main.yml

代码语言:javascript
复制
app_uriencoding: "ISO-8859-1"

meta/main.yml

代码语言:javascript
复制
dependencies:
  - { role: common, tags: app }
  - { role: tomcat, tomcat_http.URIEncoding: "{{ app_uriencoding }}", tags: app }

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

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

代码语言:javascript
复制
tomcat_http.URIEncoding
tomcat_http[URIEncoding]
tomcat_http.["URIEncoding"]

我要么得到语法错误,要么就是不能工作。如果有人对如何将值传递到映射变量有任何想法,请让我知道。

EN

回答 1

Stack Overflow用户

发布于 2017-12-13 02:42:35

一般来说,这是不可能的,因为使用默认的(和建议的) Ansible配置变量会覆盖优先级较低的变量。

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

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

代码语言:javascript
复制
- role: tomcat
  tomcat_http:
    URIEncoding: "{{ app_uriencoding }}"
  tags: app

这样,来自角色变量的tomcat_http将与角色的默认值合并。但要注意,这可能会阻碍你的行动手册的其他部分。

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

代码语言:javascript
复制
tomcat_http_port: "8080"
tomcat_http_protocol: "HTTP/1.1"
tomcat_http_connectionTimeout: "120000"
tomcat_http_URIEncoding: "UTF-8"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47778867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档