为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Ansible 2.7 或 2.8 中循环遍历多级 dict 或 yaml?

如何在 Ansible 2.7 或 2.8 中循环遍历多级 dict 或 yaml?

吃鸡游戏 2021-11-16 16:27:18
我通过多级 yaml 找到了一些 ansible 循环示例,但是,我似乎无法再深入一层。我有一个要在 xenserver 池上创建的机器或虚拟机列表,我需要选择主机名、CPU 数量等。#Requires ansible dev version 2.8.  2.8 will be release summer 2019.- hosts: xenservers  vars:    Machines:      Connectors:        Connector1:          hostname: CCConn-0001          num_cpus: 4          num_cpu_cores_per_socket: 2          memory_mb: 8192        Connector2:          hostname: CCConn-0002          num_cpus: 4          num_cpu_cores_per_socket: 2          memory_mb: 8192      #Storefronts:      #  Storefront1:      #    hostname: SFPrinci-0001      #    num_cpus: 4      #    num_cpu_cores_per_socket: 2      #    memory_mb: 8192  tasks:  # - name: Create VMs from a template  #   xenserver_guest:  #     hostname: 10.8.47.11  #     username:   #     password:   #     validate_certs: no  #     #folder: /home/testvms  #     name: '{{Need a hostname here}}'  #     state: poweredon  #     template: W2K16_RTM_64_EN_ans  #     disks:  #     - size_gb: 100  #       name: ''  #       sr: XenRTVol  #     linked_clone: yes  #     hardware:  #       num_cpus: 'Need number of cpus here'  #       num_cpu_cores_per_socket: 'Need cores per socket here'  #       memory_mb: 'Need memory here'  #     cdrom:  #       type: iso  #       iso_name: guest-tools.iso  #     networks:  #     - name: vlan40  #     wait_for_ip_address: no  #   delegate_to: localhost  #   register: deploy  #   with_subelements: '{{Machines}}'  - name:    debug:      msg: "{{ item.key }} - {{ item.value }}"    loop: "{{ Machines | dict2items }}"我一直在玩 dict2items,但是,我不知道如何获得我需要低一级的值。如果这是有道理的。
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

您可以丢弃两个级别上的所有键名并仅迭代值:

- debug:
    msg: "{{ item }}"
  loop: "{{ Machines | json_query('*.*[]') }}"

json_query过滤器使用JMESPath语法。


查看完整回答
反对 回复 2021-11-16
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

Python 嵌套字典查找可以按如下方式完成:


# Create test dictionary

test_dict = {'level_one': {'level_two': 'test'}}


# Print the nested value

print(test_dict['level_one']['level_two'])


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信