首页 > 解决方案 > Ansible如何使用变量和字符串的混合作为键从字典中获取值

问题描述

我试图实现这样的目标,说起来比实现容易,基本上我想在 import_task 中使用变量和字符串的混合作为键从字典中获取值,所以代码应该是这样的:

- import_tasks: "somefile_{{ somedic[ansible_distribution'_'ansible_distribution_major_version ] }}.yml"

dic 应该是这样的:

somedic: { "RedHat_7": "endoffilename" } 

当在服务器 RedHat 7 上运行时,它应该结束加载一个名为

somefile_endoffilename.yml

标签: ansibleansible-facts

解决方案


你不能用那个字典结构来做,因为它需要嵌套变量解引用,而 Jinja2 不支持。所以你的字典需要看起来像这样:

vars:
  somedic:
    "RedHat":
       "7": "endoffilename"

在 JSON 中,这看起来像:

vars:
  somedic: { "RedHat": { "7": "endoffilename" } }

然后,你可以得到你需要的东西:

---
- hosts: localhost
  gather_facts: no
  vars:
    somedic: { "RedHat": { "7": "endoffilename" } }

    OS: RedHat
    MajorVersion: "7"

  tasks:
   - debug:
      msg: "somefile_{{ somedic[OS][MajorVersion] }}.yml"

任务的输出debug是:

TASK [debug] *************************************************************************
Tuesday 26 May 2020  11:14:30 -0400 (0:00:00.027)       0:00:00.146 *********** 
ok: [localhost] => {
    "msg": "somefile_endoffilename.yml"
}

推荐阅读