[Kimchi-devel] [PATCH V9 3/7] Add two function to set and get domain xml metadata
Sheldon
shaohef at linux.vnet.ibm.com
Mon Apr 28 12:44:03 UTC 2014
On 04/28/2014 02:32 PM, Royce Lv wrote:
> As we discussed, metadata xml will be changed to structural rather
> than flat right? See little comments below.
> On 2014年04月25日 22:14, shaohef at linux.vnet.ibm.com wrote:
>> From: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
>>
>> Libvirt support two API to set and get domain xml metadata.
>> These two function wrap them.
>> Put them in model/utils.py, so vm_storage and vm_iface can make use of
>> them.
>>
>> For set domain xml metadata, we set live and config xml by default.
>> For get domain xml metadata, we get the current xml by default.
>>
>> Signed-off-by: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
>> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
>> ---
>> src/kimchi/i18n.py | 1 +
>> src/kimchi/model/utils.py | 38 ++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 39 insertions(+)
>>
>> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
>> index a1af1f7..e28f689 100644
>> --- a/src/kimchi/i18n.py
>> +++ b/src/kimchi/i18n.py
>> @@ -87,6 +87,7 @@ messages = {
>> "KCHVM0027E": _("User(s) '%(users)s' do not exist"),
>> "KCHVM0028E": _("Group(s) '%(groups)s' do not exist"),
>> "KCHVM0029E": _("Unable to shutdown virtual machine %(name)s.
>> Details: %(err)s"),
>> + "KCHVM0030E": _("Unable to get access metadata of virtual
>> machine %(name)s. Details: %(err)s"),
>>
>> "KCHVMIF0001E": _("Interface %(iface)s does not exist in
>> virtual machine %(name)s"),
>> "KCHVMIF0002E": _("Network %(network)s specified for virtual
>> machine %(name)s does not exist"),
>> diff --git a/src/kimchi/model/utils.py b/src/kimchi/model/utils.py
>> index 80e1801..9b94a06 100644
>> --- a/src/kimchi/model/utils.py
>> +++ b/src/kimchi/model/utils.py
>> @@ -18,6 +18,12 @@
>> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>> 02110-1301 USA
>>
>> from kimchi.exception import OperationFailed
>> +import libvirt
>> +from lxml import etree
>> +
>> +
>> +KIMCHI_META_URL = "https://github.com/kimchi-project/kimchi/metadata/"
>> +KIMCHI_NAMESPACE = "kimchi"
>>
>>
>> def get_vm_name(vm_name, t_name, name_list):
>> @@ -28,3 +34,35 @@ def get_vm_name(vm_name, t_name, name_list):
>> if vm_name not in name_list:
>> return vm_name
>> raise OperationFailed("KCHUTILS0003E")
>> +
>> +
>> +def get_vm_config_flag(dom, mode="persistent"):
>> + # libvirt.VIR_DOMAIN_AFFECT_CURRENT is 0
>> + # VIR_DOMAIN_AFFECT_LIVE is 1, VIR_DOMAIN_AFFECT_CONFIG is 2
>> + flag = {"live": libvirt.VIR_DOMAIN_AFFECT_LIVE,
>> + "persistent": libvirt.VIR_DOMAIN_AFFECT_CONFIG,
>> + "current": libvirt.VIR_DOMAIN_AFFECT_CURRENT,
> Why do we need 'current'? 'current' refers to either 'config' or
> 'live' to me.
libvirt support 'current', so let kimchi support it.
if other developers do not want to check the status of VM, then he can
easily to call 'current'.
>> + "all": libvirt.VIR_DOMAIN_AFFECT_CONFIG +
>> + libvirt.VIR_DOMAIN_AFFECT_LIVE if dom.isActive() and
>> + dom.isPersistent() else libvirt.VIR_DOMAIN_AFFECT_CURRENT}
>> +
>> + return flag[mode]
>> +
>> +
>> +def set_metadata_node(dom, meta_xml, mode="all"):
>> + element = etree.fromstring(meta_xml)
>> + # From libvirt doc, Passing None for @metadata says to remove
>> that element
>> + # from the domain XML (passing the empty string leaves the
>> element present)
>> + # Do not support remove the old metadata
>> + dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, meta_xml,
>> + KIMCHI_NAMESPACE, KIMCHI_META_URL + element.tag,
>> + flags=get_vm_config_flag(dom, mode))
>> +
>> +
>> +def get_metadata_node(dom, element, mode="current"):
>> + try:
>> + return dom.metadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT,
>> + KIMCHI_META_URL + element,
>> + flags=get_vm_config_flag(dom, mode))
>> + except libvirt.libvirtError:
>> + return ""
>
>
>
--
Thanks and best regards!
Sheldon Feng(冯少合)<shaohef at linux.vnet.ibm.com>
IBM Linux Technology Center
More information about the Kimchi-devel
mailing list