Dear oVIrt,

 

A while ago we discussed on ways to change/update content of parameters of domxml in certain action.

 

As I mentioned before, we have added the VDSMHook 60_nsupdate which removes the DNS record entries when a VM is destroyed:

 

domxml = hooking.read_domxml()

        name = domxml.getElementsByTagName('name')[0]

        name = " ".join(name.nodeValue for name in name.childNodes if name.nodeType == name.TEXT_NODE)

        nsupdate_commands = """server {server_ip}

update delete {vm_name}.example.com a

update delete {vm_name}. example.com aaaa

update delete {vm_name}. example.com txt

send

""".format(server_ip="172.16.1.10", vm_name=name)

 

The goal:

However, we did not want to execute remove dns records when VM is only migrated. Since its considered a “destroy” action we took following approach.

 

domxml = hooking.read_domxml()

        migration = domxml.createElement("is_migration")

        domxml.getElementsByTagName("domain")[0].appendChild(migration)

        logging.info("domxml_updated {}".format(domxml.toprettyxml()))

        hooking.write_domxml(domxml)

 

When executing first time, we observed that flag “

 

        <name>hookiesvm</name>

        <uuid>fcfa66cb-b251-43a3-8e2b-f33b3024a749</uuid>

        <metadata xmlns:ns0="http://ovirt.org/vm/tune/1.0" xmlns:ns1="http://ovirt.org/vm/1.0">

                <ns0:qos/>

                <ovirt-vm:vm xmlns:ovirt-vm="http://ovirt.org/vm/1.0">

                        <ovirt-vm:clusterVersion>4.3</ovirt-vm:clusterVersion>

                        <ovirt-vm:destroy_on_reboot type="bool">False</ovirt-vm:destroy_on_reboot>

                        <ovirt-vm:launchPaused>false</ovirt-vm:launchPaused>

                        <ovirt-vm:memGuaranteedSize type="int">1024</ovirt-vm:memGuaranteedSize>

                        <ovirt-vm:minGuaranteedMemoryMb type="int">1024</ovirt-vm:minGuaranteedMemoryMb>

...skipping...

                        <address bus="0x00" domain="0x0000" function="0x0" slot="0x09" type="pci"/>

                </rng>

        </devices>

        <seclabel model="selinux" relabel="yes" type="dynamic">

                <label>system_u:system_r:svirt_t:s0:c169,c575</label>

                <imagelabel>system_u:object_r:svirt_image_t:s0:c169,c575</imagelabel>

        </seclabel>

        <seclabel model="dac" relabel="yes" type="dynamic">

                <label>+107:+107</label>

                <imagelabel>+107:+107</imagelabel>

        </seclabel>

        <is_migration/>

</domain>  

is added to domxml, but was present once 60_nsupdate hook was executed.

 

The question: How do we make sure that, when domxml is updated, that the update is visible/usable by following hook, in single run? How to pass these changes between hooks?

 

Kindly awaiting your reply.

 

 

— — —
Met vriendelijke groet / Kind regards,

Marko Vrgotic