mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
ZFS-backed block devices may contain just the bare device name and
not have extra options like `,size=foo`, `,format=qcow2` etc. This
breaks an assumption in existing regex (which expects a comma).
Support such device strings and add a couple of testcases to validate.
(cherry picked from commit db713bd0f5
)
Co-authored-by: Anup Chenthamarakshan <anupcshan@users.noreply.github.com>
This commit is contained in:
parent
830734d6cf
commit
29636c1cc8
3 changed files with 32 additions and 9 deletions
4
changelogs/fragments/2841-proxmox_kvm_zfs_devstr.yml
Normal file
4
changelogs/fragments/2841-proxmox_kvm_zfs_devstr.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
bugfixes:
|
||||||
|
- "proxmox_kvm - fix parsing of Proxmox VM information with device info not containing
|
||||||
|
a comma, like disks backed by ZFS zvols
|
||||||
|
(https://github.com/ansible-collections/community.general/issues/2840)."
|
|
@ -818,23 +818,25 @@ def get_vminfo(module, proxmox, node, vmid, **kwargs):
|
||||||
# Split information by type
|
# Split information by type
|
||||||
re_net = re.compile(r'net[0-9]')
|
re_net = re.compile(r'net[0-9]')
|
||||||
re_dev = re.compile(r'(virtio|ide|scsi|sata)[0-9]')
|
re_dev = re.compile(r'(virtio|ide|scsi|sata)[0-9]')
|
||||||
for k, v in kwargs.items():
|
for k in kwargs.keys():
|
||||||
if re_net.match(k):
|
if re_net.match(k):
|
||||||
interface = k
|
mac[k] = parse_mac(vm[k])
|
||||||
k = vm[k]
|
|
||||||
k = re.search('=(.*?),', k).group(1)
|
|
||||||
mac[interface] = k
|
|
||||||
elif re_dev.match(k):
|
elif re_dev.match(k):
|
||||||
device = k
|
devices[k] = parse_dev(vm[k])
|
||||||
k = vm[k]
|
|
||||||
k = re.search('(.*?),', k).group(1)
|
|
||||||
devices[device] = k
|
|
||||||
|
|
||||||
results['mac'] = mac
|
results['mac'] = mac
|
||||||
results['devices'] = devices
|
results['devices'] = devices
|
||||||
results['vmid'] = int(vmid)
|
results['vmid'] = int(vmid)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_mac(netstr):
|
||||||
|
return re.search('=(.*?),', netstr).group(1)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_dev(devstr):
|
||||||
|
return re.search('(.*?)(,|$)', devstr).group(1)
|
||||||
|
|
||||||
|
|
||||||
def settings(proxmox, vmid, node, **kwargs):
|
def settings(proxmox, vmid, node, **kwargs):
|
||||||
proxmox_node = proxmox.nodes(node)
|
proxmox_node = proxmox.nodes(node)
|
||||||
|
|
||||||
|
|
17
tests/unit/plugins/modules/cloud/misc/test_proxmox_kvm.py
Normal file
17
tests/unit/plugins/modules/cloud/misc/test_proxmox_kvm.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Copyright: (c) 2021, Ansible Project
|
||||||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function)
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
from ansible_collections.community.general.plugins.modules.cloud.misc.proxmox_kvm import parse_dev, parse_mac
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_mac():
|
||||||
|
assert parse_mac('virtio=00:11:22:AA:BB:CC,bridge=vmbr0,firewall=1') == '00:11:22:AA:BB:CC'
|
||||||
|
|
||||||
|
|
||||||
|
def test_parse_dev():
|
||||||
|
assert parse_dev('local-lvm:vm-1000-disk-0,format=qcow2') == 'local-lvm:vm-1000-disk-0'
|
||||||
|
assert parse_dev('local-lvm:vm-101-disk-1,size=8G') == 'local-lvm:vm-101-disk-1'
|
||||||
|
assert parse_dev('local-zfs:vm-1001-disk-0') == 'local-zfs:vm-1001-disk-0'
|
Loading…
Reference in a new issue