ansible - 在ansible中从另一个检索变量
问题描述
我想从刚刚设置的另一个变量中检索该变量。
- set_fact:
app_env: "{{ app_env | default('prod') }}"
app_url: "{{ app_global_var_urls[ {{ app_env }} }}"
- name: "Check facts"
debug:
msg: "{{ app_env }} {{ app_url }}"
我尝试了以下方法
{{ app_global_var_urls[ {{ app_env }} }}
{{ app_global_var_urls.app_env }} }}
{{ app_global_var_urls.[ {{ app_env }} ]}}
是否可以在设置时从另一个变量中检索?
解决方案
你有两个问题。
首先,您永远不会嵌套 Jinja 模板标记 ( {{...}}
)。如果您已经在 Jinja 模板上下文中,只需按名称引用变量。
其次,您使用创建的变量在任务完成运行set_fact
之前不可用。set_fact
换句话说,在一个set_fact
任务中,您不能引用作为该任务的一部分创建的变量。
您需要重写您的剧本以使用两个单独的set_fact
任务:
- set_fact:
app_env: "{{ app_env | default('prod') }}"
- set_fact:
app_url: "{{ app_global_var_urls[ app_env ] }}"
或者做这样的事情:
- set_fact:
app_env: "{{ app_env | default('prod') }}"
app_url: "{{ app_global_var_urls[app_env | default('prod')] }}"
推荐阅读
- docker - docker-compose中的DNS,映射到非80端口?
- ios - 在标签栏Swift上推送/呈现视图控制器
- apache-spark - 两个数据框的连接正在工作,但现在当我更改其中一个数据框的内容时它失败了
- python-2.7 - PyInstaller: IOError: [Errno 2] No such file or directory: with ciscoconfparse library
- javascript - 散景滑块堆积条形图
- asp.net - ASP.net 超链接波浪号 ~ URL 未按预期呈现
- r - 按日期字符串过滤文件列表
- json - 如何将响应 json 与 TypeScript 接口 Angular6 对齐
- php - PHP - 通过 RFC 1738 对自定义 URL 进行编码
- java - vaadin $v-background-color 可以以编程方式更改吗?