首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何反向检查字典YAML中的父级

如何反向检查字典YAML中的父级
EN

Stack Overflow用户
提问于 2022-01-26 20:26:46
回答 1查看 195关注 0票数 2

我有一本字典,它的结构和下面完全一样。

在我挣扎的地方是在Ansible代码中,我将如何让一个用户进入apple,并识别出它的类型是水果?

当用户进入spinach时,Ansible将其识别为素食吗?

基本上,如何在字典中反向检查父级?编辑:在使用selectattr之后,如何将其赋值给将来使用的一个变量?目前,我得到了food_groups \(‘name’,'contains',first).type:水果作为输出,我如何只获得分配给变量的水果?

代码语言:javascript
复制
groups:
   - type: fruit
     names:
     - apple
     - oranges
     - grapes
   - type: veggie
     names:
     - broccoli
     - spinach
EN

回答 1

Stack Overflow用户

发布于 2022-01-26 22:17:54

问:“如何让用户输入‘苹果’,并识别出‘水果’的类型?。”

A:创建一个字典,将项目映射到组,例如给定数据

代码语言:javascript
复制
    my_groups:
      - type: fruit
        names:
          - apple
          - oranges
          - grapes
          - tomato
      - type: veggie
        names:
          - broccoli
          - spinach
          - tomato

以下任务

代码语言:javascript
复制
    - set_fact:
        my_dict: "{{ my_dict|d({'undef': 'undef'})|
                     combine({item.1: [item.0.type]}, list_merge='append') }}"
      with_subelements:
        - "{{ my_groups }}"
        - names

给出

代码语言:javascript
复制
  my_dict:
    apple: [fruit]
    broccoli: [veggie]
    grapes: [fruit]
    oranges: [fruit]
    spinach: [veggie]
    tomato: [fruit, veggie]
    undef: undef

我在两组中都添加了“番茄”,以测试多组的成员资格。项目组的标识现在是微不足道的。

代码语言:javascript
复制
    - debug:
        msg: "{{ my_item|d('undef') }} is {{ my_dict[my_item|d('undef')]|d('none') }}"

默认给予

代码语言:javascript
复制
  msg: undef is undef

当您输入字典中不存在的项时,您将得到

代码语言:javascript
复制
shell> ansible-playbook playbook.yml -e my_item=foo
...
  msg: foo is none

当您在字典中输入一个项目时,您将得到组(S)。

代码语言:javascript
复制
shell> ansible-playbook playbook.yml -e my_item=spinach
...
  msg: spinach is ['veggie']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70869845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档