首页 > 解决方案 > 变量中的变量 Ansible

问题描述

我正在尝试在变量中使用变量。

我有一个 JSON 变量:

os: { 

   "centos_7_5": {
    offer: "CentOS",
    publisher: "OpenLogic",
    sku: "7.5",
    version: "latest"
    },    
   "debian_9": {
    offer: "Debian",
    publisher: "credativ",
    sku: "9",
    version: "latest"
    }
}

如果我使用

  - debug:
      msg: " {{ os.debian_9.offer }}"

输出如所愿:

"msg": " Debian"

现在,我正在尝试将操作系统名称放入一个变量中(以便该变量可以位于配置文件中),如下所示:

desired_os: debian_9

我想做这样的事情:

- debug:
    msg: " {{ os.desired_os.offer }}"

但我找不到让它工作的方法。我在 set_fact 中尝试了一些连接,'{{ "os."~desired_os~".offer" }}'但输出不符合预期:

"msg": "stuff.os.debian_9.offer"

谢谢。

标签: jsonansible

解决方案


您可以使用varname[var]符号。

- hosts: localhost
  gather_facts: no

  vars:
    os: { 
   "centos_7_5": {
    offer: "CentOS",
    publisher: "OpenLogic",
    sku: "7.5",
    version: "latest"
    },    
   "debian_9": {
    offer: "Debian",
    publisher: "credativ",
    sku: "9",
    version: "latest"
    }
    }
    desired_os: debian_9

  tasks:
    - debug:
        msg: " {{ os['debian_9'].offer }}"
    - debug:
        msg: " {{ os[desired_os].offer }}"

推荐阅读