Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
213 views
in Technique[技术] by (71.8m points)

windows - Create dictionary / list from registered variable in Ansible

Hej *,

I'm writing a playbook which should set some disk attributes in the Windows registry. All disk attributes are stored under a specific vendor folder. There is a value under each disk folder that I want to change in the end.

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

I'm able to determine the vendor folder as well as the disk folders under the root of HKLM:SYSTEMCurrentControlSetEnumSCSI:

- hosts: some_host
  tasks:
    - name: Get vendor folders
      win_reg_stat:
        path: HKLM:SYSTEMCurrentControlSetEnumSCSI
      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

The output looks like this:

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"
            ]
        }
    ]
}

I'm a bit stuck right now. I'm trying to get a dictionary or list for iterating through all those disk folders. Something like that:

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

Is there a way to accomplish that?

Thanks and regards Erik


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

For example

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

gives

  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'

It's not possible to create a dictionary because, in a dictionary, the keys must be unique.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...