如何解决从 Ansible 中的注册变量创建字典/列表
嘿*,
我正在编写一个剧本,它应该在 Windows 注册表中设置一些磁盘属性。 所有磁盘属性都存储在特定供应商文件夹下。每个磁盘文件夹下都有一个我最后要更改的值。
- disk&Ven_QEMU&Prod_QEMU_HARDdisK
|- 00000
|- 00001
- disk&Ven_VMware&Prod_Virtual_disk
|- 00000
我能够确定 HKLM 根目录下的 vendor 文件夹和磁盘文件夹:\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","item": "disk&Ven_QEMU&Prod_QEMU_HARDdisK","sub_keys": [
"000000","000001"
]
},"item": "disk&Ven_VMware&Prod_Virtual_disk","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'
无法创建字典,因为在字典中,键必须是唯一的。
,我想与您分享我的最终解决方案。感谢弗拉基米尔的帮助。
- name: Get vendors
win_reg_stat:
path: HKLM:\SYSTEM\CurrentControlSet\Enum\SCSI
register: os_vendors
- name: Get vendors subfolders
win_reg_stat:
path: "HKLM:\\SYSTEM\\CurrentControlSet\\Enum\\SCSI\\{{ item }}"
loop: "{{ os_vendors.sub_keys }}"
register: os_subfolders
- name: Build registry pathes with vendors and disks
set_fact:
os_regpath_dict: "{{ os_regpath_dict | default({}) | combine ({item.item : item.sub_keys })}}"
loop: "{{ os_subfolders.results }}"
- name: Get disk folders
win_reg_stat:
path: "HKLM:\\SYSTEM\\CurrentControlSet\\Enum\\SCSI\\{{ item.0.key }}\\{{ item.1 }}\\Device Parameters\\Partmgr"
name: "Attributes"
loop: "{{ os_regpath_dict | dict2items | subelements('value') }}"
when: "'Disk' in item.0.key"
register: os_disks
- name: Set value of entry Attributes to 0
win_regedit:
path: "HKLM:\\SYSTEM\\CurrentControlSet\\Enum\\SCSI\\{{ item.item.0.key }}\\{{ item.item.1 }}\\Device Parameters\\Partmgr"
name: Attributes
data: 0
type: dword
loop: "{{ os_disks.results }}"
when: item.value is defined
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。