windows - 从 Ansible 中注册的变量创建字典/列表

标签 windows list dictionary ansible iteration

嘿*,

我正在编写一个剧本,它应该在 Windows 注册表中设置一些磁盘属性。 所有磁盘属性都存储在特定供应商文件夹下。每个磁盘文件夹下都有一个我想更改的值。

- Disk&Ven_QEMU&Prod_QEMU_HARDDISK
  |- 00000
  |- 00001
- Disk&Ven_VMware&Prod_Virtual_disk
  |- 00000

我能够确定供应商文件夹以及 HKLM 根目录下的磁盘文件夹:\SYSTEM\CurrentControlSet\Enum\SCSI:

- hosts: some_host
  tasks:
    - name: Get vendor folders
      win_reg_stat:
        path: HKLM:\SYSTEM\CurrentControlSet\Enum\SCSI
      register: vendors
    
    - name: Get disk folders
      win_reg_stat:
        path: "HKLM:\\SYSTEM\\CurrentControlSet\\Enum\\SCSI\\{{ item }}"
      with_items:
      - "{{ vendors.sub_keys }}"
      register: disks
    
    - debug:
        var: disks.results

输出如下所示:

ok: [some_host] => {
    "disks.results": [
        {
            "ansible_loop_var": "item",
            "changed": false,
            "exists": true,
            "failed": false,
            "item": "CdRom&Ven_QEMU&Prod_QEMU_DVD-ROM",
            "properties": {},
            "sub_keys": [
                "000001"
            ]
        },
        {
            "ansible_loop_var": "item",
            "changed": false,
            "exists": true,
            "failed": false,
            "item": "Disk&Ven_QEMU&Prod_QEMU_HARDDISK",
            "properties": {},
            "sub_keys": [
                "000000",
                "000001"
            ]
        },
        {
            "ansible_loop_var": "item",
            "changed": false,
            "exists": true,
            "failed": false,
            "item": "Disk&Ven_VMware&Prod_Virtual_disk",
            "properties": {},
            "sub_keys": [
                "000000"
            ]
        }
    ]
}

我现在有点陷入困境。我正在尝试获取字典或列表来迭代所有这些磁盘文件夹。类似这样的事情:

Disk&Ven_QEMU&Prod_QEMU_HARDDISK: 000000
Disk&Ven_QEMU&Prod_QEMU_HARDDISK: 000001
Disk&Ven_VMware&Prod_Virtual_disk: 000000

有办法实现吗?

感谢和问候 埃里克

最佳答案

例如

    - set_fact:
        my_list: "{{ my_list|default([]) + [{item.0.item:item.1}] }}"
      with_subelements:
        - "{{ disks.results }}"
        - sub_keys

给出

  my_list:
  - CdRom&Ven_QEMU&Prod_QEMU_DVD-ROM: '000001'
  - Disk&Ven_QEMU&Prod_QEMU_HARDDISK: '000000'
  - Disk&Ven_QEMU&Prod_QEMU_HARDDISK: '000001'
  - Disk&Ven_VMware&Prod_Virtual_disk: '000000'

无法创建字典,因为在字典中,键必须是唯一的。

关于windows - 从 Ansible 中注册的变量创建字典/列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65668318/

相关文章:

windows - Windows上的boot2docker - 无法访问暴露的端口

windows - 如何配置Docker CLI从Git-Bash上的minikube访问docker服务器?

php - Gettext 将始终使用系统默认语言环境

C# Windows 窗体 : Looping through Dynamically created TextBoxes and checking to see if Text has changed

python - 无法更新多处理的 manager.dict() 中的嵌套字典值

swift - 我过滤了字典的 NSMutableArray 然后我想再次过滤一个键

javascript - CustomListItem 中没有事件触发

list - 为什么 `list.Remove()` 试图明确避免内存泄漏?

Python 检查二维列表是否包含另一个列表的数字

json - 每当引用从函数返回的 slice 或映射时为空指针