首页 > 解决方案 > 在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 }} ]}}

是否可以在设置时从另一个变量中检索?

标签: ansibleansible-inventoryansible-facts

解决方案


你有两个问题。

首先,您永远不会嵌套 Jinja 模板标记 ( {{...}})。如果您已经在 J​​inja 模板上下文中,只需按名称引用变量。

其次,您使用创建的变量在任务完成运行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')] }}"

推荐阅读