Ansible中的变量

时间:2019-07-05 14:56:35

标签: json 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 }}"

但是我找不到使它工作的方法。 我使用'{{ "os."~desired_os~".offer" }}'在set_fact中尝试了一些串联,但是输出不是所需的:

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

谢谢。

4 个答案:

答案 0 :(得分:0)

嗨,请尝试使用以下代码段:

json

tarifs()->get()

剧本:

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

答案 1 :(得分:0)

您可以使用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 }}"

答案 2 :(得分:0)

只需在双括号内添加变量。

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

答案 3 :(得分:0)

请尝试如下

debug: msg= "{{os.vars[desired_os].offer}}"