Compare commits

..

No commits in common. "v3.0.1" and "v3.0.0" have entirely different histories.

1 changed files with 15 additions and 43 deletions

View File

@ -777,6 +777,7 @@ def node_check(proxmox, node):
def get_vminfo(module, proxmox, node, vmid, **kwargs):
global results # noqa
results = {}
mac = {}
try:
vm = proxmox.nodes(node).qemu(vmid).config.get()
except Exception as e:
@ -794,8 +795,8 @@ def get_vminfo(module, proxmox, node, vmid, **kwargs):
kwargs.update(kwargs[k])
del kwargs[k]
results["nets"] = _extract_nets(vm)
results["disks"] = _extract_disks(vm)
results["mac"] = mac
results["devices"] = _extract_devices(vm)
results["vmid"] = int(vmid)
results["_raw"] = vm
@ -865,28 +866,16 @@ def create_vm(
urlencoded_ssh_keys = quote(kwargs["sshkeys"], safe="")
kwargs["sshkeys"] = str(urlencoded_ssh_keys)
disks = {}
for item in [kwargs[i] for i in ["scsi", "virtio", "ide", "sata"] if i in kwargs]:
disks = _extract_disks(item)
nets = {}
for item in [kwargs[i] for i in ["net"] if i in kwargs]:
nets = _extract_nets(item)
devices = _extract_devices(item)
# If update, ensure existing disks are not recreated.
if update:
for k, v in disks.items():
if results["disks"].get(k):
for k, v in devices.items():
if results["devices"].get(k):
kwargs[k.rstrip(string.digits)][k] = "{0}:{1},{2}".format(
results["disks"][k]["storage_id"], results["disks"][k]["storage_opts"],
",".join(disks[k]["opts"])
)
for k, v in nets.items():
if results["nets"].get(k):
kwargs[k.rstrip(string.digits)][k] = "{0}={1},{2}".format(
results["nets"][k]["net_id"], results["nets"][k]["net_opts"],
",".join(nets[k]["opts"])
results["devices"][k]["storage_id"], results["devices"][k]["storage_opts"],
",".join(devices[k]["opts"])
)
# Convert all dict in kwargs to elements.
@ -1539,37 +1528,20 @@ def main():
)
def _extract_disks(item):
disks = defaultdict(dict)
def _extract_devices(item):
devices = defaultdict(dict)
for k, v in item.items():
if re.match(r"(scsi|virtio|ide|sata)[0-9]", k):
disks[k]["opts"] = []
devices[k]["opts"] = []
for val in v.split(","):
if len(val.split(":")) == 2:
storage = val.split(":")
disks[k]["storage_id"] = storage[0]
disks[k]["storage_opts"] = storage[1]
devices[k]["storage_id"] = storage[0]
devices[k]["storage_opts"] = storage[1]
else:
disks[k]["opts"].append(val)
devices[k]["opts"].append(val)
return disks
def _extract_nets(item):
nets = defaultdict(dict)
for k, v in item.items():
if re.match(r"net[0-9]", k):
nets[k]["opts"] = []
for val in v.split(","):
if any(val.startswith(s) for s in ["e1000", "rtl8139", "virtio", "vmxnet3"]):
if len(val.split("=")) == 2:
net = val.split("=")
nets[k]["net_id"] = net[0]
nets[k]["net_opts"] = net[1]
else:
nets[k]["opts"].append(val)
return nets
return devices
if __name__ == "__main__":