简体   繁体   English

从set_fact创建键时如何检索字典值

[英]How to retrieve dictionary value when creating key from set_fact

I am trying to retrieve a value from a dictionary by 'dotting' through the keys with a variable (using set_fact).我试图通过使用变量(使用 set_fact)“打点”键来从字典中检索值。

How do I retrieve the value for applications.office.nuspec.id if i built it through set_fact?如果我通过 set_fact 构建它,我如何检索 Applications.office.nuspec.id 的值?

Here is my dictionary这是我的字典

vars: 
  applications:
    office:
      nuspec:
        id: data_wanted 

Here is the code put together with "current_chocolatey_parameter_value" storing the location of the dictionary value I want这是与“current_chocolatey_parameter_value”放在一起的代码,用于存储我想要的字典值的位置

  - name: Set variable to id
      set_fact: selected_current_chocolatey_parameter=id

  - name: Create string to represent variable to select value from dictionary
    set_fact: current_chocolatey_parameter_value="applications.office.nuspec.{{ selected_current_chocolatey_parameter }}"

  - name: The combined new string is
    debug: msg="{{ current_chocolatey_parameter_value }}"

  TASK [The combined new string is] 

 ****************************************************************************************** 
 ***********************************************************
  ok: [localhost] => {
  "msg": "applications.office.nuspec.id"
  }

I have tried lookup('vars', current_chocolatey_parameter_value) with no luck.我试过 lookup('vars', current_chocolatey_parameter_value) 没有运气。

How do I get the value of applications.office.nuspec.id from my defined dictionary when I have the string stored in a variable that I want to reference it with?当我将字符串存储在要引用它的变量中时,如何从我定义的字典中获取 applications.office.nuspec.id 的值?

---
- name: Test lookup play
  hosts: localhost
  connection: local
  gather_facts: false
  vars:
    applications:
      office:
        nuspec:
          id: data_wanted

  tasks:
  - name: Set variable to id
    set_fact: selected_current_chocolatey_parameter=id

  - name: Create string to represent variable to select value from dictionary
    set_fact: current_chocolatey_parameter_value="applications.office.nuspec.{{ selected_current_chocolatey_parameter }}"

  - name: The combined new string is
    debug: msg="{{ current_chocolatey_parameter_value }}"
    
  - name: Looked up value 1
    debug: msg="{{ applications.office.nuspec[selected_current_chocolatey_parameter] }}"

  - name: Looked up value 2
    debug: msg="{{ applications.office.nuspec.get(selected_current_chocolatey_parameter) }}"

Produces生产

$ ansible-playbook -i localhost, stackoverflow1.yml

PLAY [Test lookup play] *******************************************************************************

TASK [Set variable to id] *****************************************************************************
ok: [localhost]

TASK [Create string to represent variable to select value from dictionary] ****************************
ok: [localhost]

TASK [The combined new string is] *********************************************************************
ok: [localhost] => {
    "msg": "applications.office.nuspec.id"
}

TASK [Looked up value 1] ******************************************************************************
ok: [localhost] => {
    "msg": "data_wanted"
}

TASK [Looked up value 2] ******************************************************************************
ok: [localhost] => {
    "msg": "data_wanted"
}

Remember that you can call any core Python functions between "{{ ...}}"请记住,您可以在“{{ ...}}”之间调用任何核心 Python 函数

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM