From 838e6e53f9996411ac0be749eddfc64640ab06d8 Mon Sep 17 00:00:00 2001 From: waheedi Date: Fri, 12 Apr 2019 12:51:18 +0200 Subject: [PATCH 1/7] rewrote the implementation for get_uuid, get_on_poweroff, get_on_reboot, get_on_crash, get_macs, get_devices and removed get_xml method --- salt/modules/virt.py | 201 +++++++++++++++++++++++++++++-------------- 1 file changed, 136 insertions(+), 65 deletions(-) diff --git a/salt/modules/virt.py b/salt/modules/virt.py index 58a787e717db..4d0820f259fb 100644 --- a/salt/modules/virt.py +++ b/salt/modules/virt.py @@ -324,57 +324,52 @@ def _parse_qemu_img_info(info): def _get_uuid(dom): ''' - Return a uuid from the named vm - - CLI Example: - - .. code-block:: bash - - salt '*' virt.get_uuid + Get uuid from a libvirt domain object. ''' - return ElementTree.fromstring(get_xml(dom)).find('uuid').text + uuid = ElementTree.fromstring(dom.XMLDesc(0)).find('uuid') + + return uuid def _get_on_poweroff(dom): ''' - Return `on_poweroff` setting from the named vm - - CLI Example: - - .. code-block:: bash - - salt '*' virt.get_on_restart + Get on_poweroff from a libvirt domain object. ''' - node = ElementTree.fromstring(get_xml(dom)).find('on_poweroff') + node = ElementTree.fromstring(dom.XMLDesc(0)).find('on_poweroff') + return node.text if node is not None else '' def _get_on_reboot(dom): ''' - Return `on_reboot` setting from the named vm + Get on_reboot from a libvirt domain object. + ''' + node = ElementTree.fromstring(dom.XMLDesc(0)).find('on_reboot') - CLI Example: + return node.text if node is not None else '' - .. code-block:: bash - salt '*' virt.get_on_reboot +def _get_on_crash(dom): + ''' + Get on_crash from a libvirt domain object. ''' - node = ElementTree.fromstring(get_xml(dom)).find('on_reboot') + node = ElementTree.fromstring(dom.XMLDesc(0)).find('on_crash') + return node.text if node is not None else '' -def _get_on_crash(dom): +def _get_macs(dom): ''' - Return `on_crash` setting from the named vm - - CLI Example: + Get mac addresses (macs) from a libvirt domain object. + ''' + return [node.get('address') for node in dom.XMLDesc(0).findall('devices/interface/mac')] - .. code-block:: bash - salt '*' virt.get_on_crash +def _get_disk_devs(dom): ''' - node = ElementTree.fromstring(get_xml(dom)).find('on_crash') - return node.text if node is not None else '' + Get the disk devices names from a libvirt domain object. + ''' + return [target.get('dev') for target in dom.XMLDesc(0).findall('devices/disk/target')] def _get_nics(dom): @@ -2345,8 +2340,9 @@ def get_macs(vm_, **kwargs): salt '*' virt.get_macs ''' - doc = ElementTree.fromstring(get_xml(vm_, **kwargs)) - return [node.get('address') for node in doc.findall('devices/interface/mac')] + macs = _get_macs(_get_domain(conn, vm_)) + + return macs def get_graphics(vm_, **kwargs): @@ -2425,6 +2421,114 @@ def get_disks(vm_, **kwargs): conn.close() return disks +def get_uuid(vm_, **kwargs): + ''' + Return a uuid from the named vm + + :param vm_: name of the domain + :param connection: libvirt connection URI, overriding defaults + + .. versionadded:: 2019.2.0 + :param username: username to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + :param password: password to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + + CLI Example: + + .. code-block:: bash + + salt '*' virt.get_uuid + ''' + conn = __get_conn(**kwargs) + uuid = _get_uuid(_get_domain(conn, vm_)) + + return uuid + + +def get_on_poweroff(vm_, **kwargs): + ''' + Return a on_poweroff from the named vm + + :param vm_: name of the domain + :param connection: libvirt connection URI, overriding defaults + + .. versionadded:: 2019.2.0 + :param username: username to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + :param password: password to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + + + CLI Example: + + .. code-block:: bash + + salt '*' virt.get_on_poweroff + ''' + conn = __get_conn(**kwargs) + on_poweroff = _get_on_poweroff(_get_domain(conn, vm_)) + + return on_poweroff + + +def get_on_reboot(vm_, **kwargs): + ''' + Return a on_reboot from the named vm + + :param vm_: name of the domain + :param connection: libvirt connection URI, overriding defaults + + .. versionadded:: 2019.2.0 + :param username: username to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + :param password: password to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + + CLI Example: + + .. code-block:: bash + + salt '*' virt.get_on_reboot + ''' + conn = __get_conn(**kwargs) + on_reboot = _get_on_reboot(_get_domain(conn, vm_)) + + return on_reboot + + +def get_on_crash(vm_, **kwargs): + ''' + Return a on_crash from the named vm + + :param vm_: name of the domain + :param connection: libvirt connection URI, overriding defaults + + .. versionadded:: 2019.2.0 + :param username: username to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + :param password: password to connect with, overriding defaults + + .. versionadded:: 2019.2.0 + + CLI Example: + + .. code-block:: bash + + salt '*' virt.get_on_crash + ''' + conn = __get_conn(**kwargs) + on_crash = _get_on_crash(_get_domain(conn, vm_)) + + return on_crash + def setmem(vm_, memory, config=False, **kwargs): ''' @@ -2626,33 +2730,6 @@ def full_info(**kwargs): return info -def get_xml(vm_, **kwargs): - ''' - Returns the XML for a given vm - - :param vm_: domain name - :param connection: libvirt connection URI, overriding defaults - - .. versionadded:: 2019.2.0 - :param username: username to connect with, overriding defaults - - .. versionadded:: 2019.2.0 - :param password: password to connect with, overriding defaults - - .. versionadded:: 2019.2.0 - - CLI Example: - - .. code-block:: bash - - salt '*' virt.get_xml - ''' - conn = __get_conn(**kwargs) - xml_desc = _get_domain(conn, vm_).XMLDesc(0) - conn.close() - return xml_desc - - def get_profiles(hypervisor=None, **kwargs): ''' Return the virt profiles for hypervisor. @@ -3747,12 +3824,6 @@ def vm_diskstats(vm_=None, **kwargs): salt '*' virt.vm_blockstats ''' - def get_disk_devs(dom): - ''' - Extract the disk devices names from the domain XML definition - ''' - doc = ElementTree.fromstring(get_xml(dom, **kwargs)) - return [target.get('dev') for target in doc.findall('devices/disk/target')] def _info(dom): ''' @@ -3760,7 +3831,7 @@ def _info(dom): ''' # Do not use get_disks, since it uses qemu-img and is very slow # and unsuitable for any sort of real time statistics - disks = get_disk_devs(dom) + disks = _get_disk_devs(dom) ret = {'rd_req': 0, 'rd_bytes': 0, 'wr_req': 0, From 7ee9297df4c0b213f8edc1d1dbbdd06f6d095975 Mon Sep 17 00:00:00 2001 From: waheedi Date: Tue, 16 Apr 2019 10:46:25 +0200 Subject: [PATCH 2/7] return text instead of ElementTree.element object for uuid --- salt/modules/virt.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/modules/virt.py b/salt/modules/virt.py index 4d0820f259fb..df622aca87f1 100644 --- a/salt/modules/virt.py +++ b/salt/modules/virt.py @@ -326,7 +326,7 @@ def _get_uuid(dom): ''' Get uuid from a libvirt domain object. ''' - uuid = ElementTree.fromstring(dom.XMLDesc(0)).find('uuid') + uuid = ElementTree.fromstring(dom.XMLDesc(0)).find('uuid').text return uuid From c98a6553415cb399e8b31af3dd4cf9f8df7319a9 Mon Sep 17 00:00:00 2001 From: waheedi Date: Tue, 16 Apr 2019 11:22:45 +0200 Subject: [PATCH 3/7] fixing lints --- salt/modules/virt.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/salt/modules/virt.py b/salt/modules/virt.py index df622aca87f1..839f82bbf1c5 100644 --- a/salt/modules/virt.py +++ b/salt/modules/virt.py @@ -2340,7 +2340,9 @@ def get_macs(vm_, **kwargs): salt '*' virt.get_macs ''' + conn = __get_conn(**kwargs) macs = _get_macs(_get_domain(conn, vm_)) + conn.close() return macs @@ -2421,6 +2423,7 @@ def get_disks(vm_, **kwargs): conn.close() return disks + def get_uuid(vm_, **kwargs): ''' Return a uuid from the named vm From c11ce8a803d5e09a4dcf21f7dcc2feb7353eaa22 Mon Sep 17 00:00:00 2001 From: waheedi Date: Tue, 16 Apr 2019 11:22:45 +0200 Subject: [PATCH 4/7] fixing lints --- salt/modules/virt.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/salt/modules/virt.py b/salt/modules/virt.py index df622aca87f1..839f82bbf1c5 100644 --- a/salt/modules/virt.py +++ b/salt/modules/virt.py @@ -2340,7 +2340,9 @@ def get_macs(vm_, **kwargs): salt '*' virt.get_macs ''' + conn = __get_conn(**kwargs) macs = _get_macs(_get_domain(conn, vm_)) + conn.close() return macs @@ -2421,6 +2423,7 @@ def get_disks(vm_, **kwargs): conn.close() return disks + def get_uuid(vm_, **kwargs): ''' Return a uuid from the named vm From 55a29680034a2e5d1db8983af5187ccda5c9d0cf Mon Sep 17 00:00:00 2001 From: waheedi Date: Tue, 16 Apr 2019 15:30:38 +0200 Subject: [PATCH 5/7] readded get_xml function to virt module --- salt/modules/virt.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/salt/modules/virt.py b/salt/modules/virt.py index 839f82bbf1c5..79c90c169da9 100644 --- a/salt/modules/virt.py +++ b/salt/modules/virt.py @@ -2626,6 +2626,26 @@ def setvcpus(vm_, vcpus, config=False, **kwargs): return ret1 == ret2 == 0 +def get_xml(vm_, **kwargs): + ''' + Returns the XML for a given vm + :param vm_: domain name + :param connection: libvirt connection URI, overriding defaults + .. versionadded:: 2019.2.0 + :param username: username to connect with, overriding defaults + .. versionadded:: 2019.2.0 + :param password: password to connect with, overriding defaults + .. versionadded:: 2019.2.0 + CLI Example: + .. code-block:: bash + salt '*' virt.get_xml + ''' + conn = __get_conn(**kwargs) + xml_desc = _get_domain(conn, vm_).XMLDesc(0) + conn.close() + return xml_desc + + def _freemem(conn): ''' Internal variant of freemem taking a libvirt connection as parameter From e43fafc022b015e3bee7a9220ab840da770a6813 Mon Sep 17 00:00:00 2001 From: waheedi Date: Tue, 16 Apr 2019 15:46:02 +0200 Subject: [PATCH 6/7] fixed indenetation for get_xml function --- salt/modules/virt.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/salt/modules/virt.py b/salt/modules/virt.py index 79c90c169da9..53b06dc4274d 100644 --- a/salt/modules/virt.py +++ b/salt/modules/virt.py @@ -2629,14 +2629,20 @@ def setvcpus(vm_, vcpus, config=False, **kwargs): def get_xml(vm_, **kwargs): ''' Returns the XML for a given vm + :param vm_: domain name :param connection: libvirt connection URI, overriding defaults + .. versionadded:: 2019.2.0 :param username: username to connect with, overriding defaults + .. versionadded:: 2019.2.0 :param password: password to connect with, overriding defaults + .. versionadded:: 2019.2.0 + CLI Example: + .. code-block:: bash salt '*' virt.get_xml ''' From 4007e01d0734c54a37c7c03cd7bf6d515b3c9b3c Mon Sep 17 00:00:00 2001 From: waheedi Date: Tue, 16 Apr 2019 15:46:02 +0200 Subject: [PATCH 7/7] fixed indenetation for get_xml function --- salt/modules/virt.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/salt/modules/virt.py b/salt/modules/virt.py index 79c90c169da9..31d92aa9f5dd 100644 --- a/salt/modules/virt.py +++ b/salt/modules/virt.py @@ -2629,15 +2629,22 @@ def setvcpus(vm_, vcpus, config=False, **kwargs): def get_xml(vm_, **kwargs): ''' Returns the XML for a given vm + :param vm_: domain name :param connection: libvirt connection URI, overriding defaults + .. versionadded:: 2019.2.0 :param username: username to connect with, overriding defaults + .. versionadded:: 2019.2.0 :param password: password to connect with, overriding defaults + .. versionadded:: 2019.2.0 + CLI Example: + .. code-block:: bash + salt '*' virt.get_xml ''' conn = __get_conn(**kwargs)