#!/usr/bin/env python # -*- coding: utf-8 -*- from models import Config, Disk, OSTemplate, OSType from models import Guest from models import status __author__ = 'James Iter' __date__ = '2017/3/25' __contact__ = 'james.iter.cn@gmail.com' __copyright__ = '(c) 2017 by James Iter.' class GuestXML(object): def __init__(self, guest=None, disk=None, config=None, os_type=None): assert isinstance(guest, Guest) assert isinstance(disk, Disk) assert isinstance(config, Config) self.guest = guest self.disk = disk self.config = config self.os_type = os_type def get_domain(self): return """ {0} {1} {2} {3} {4} {5} {6} {7} {8} """.format(self.get_features(), self.get_cpu_mode(), self.get_clock(), self.get_name(), self.get_uuid(), self.get_vcpu(), self.get_memory(), self.get_os(), self.get_devices()) @staticmethod def get_features(): return """ """ @staticmethod def get_cpu_mode(): return """""" def get_clock(self): # clock 参考链接:https://libvirt.org/formatdomain.html#elementsTime # Windows Guest 设为 localtime,非 Windows Guest 都设为 utc offset = 'utc' if self.os_type == OSType.windows.value: offset = 'localtime' return """""".format(offset) def get_name(self): return """{0}""".format(self.guest.label) def get_uuid(self): return """{0}""".format(self.guest.uuid) def get_vcpu(self): return """{0}""".format(self.guest.cpu.__str__()) def get_memory(self): return """{0}""".format(self.guest.memory.__str__()) @staticmethod def get_os(): return """ hvm """ def get_devices(self): return """ {0} {1} {2} {3} {4} """.format(self.get_interface(), self.get_disk(), self.get_graphics(), self.get_console(), self.get_channel()) def get_interface(self): return """ """.format(self.guest.network) def get_disk(self): from initialize import dev_table if self.config.storage_mode in [status.StorageMode.local.value, status.StorageMode.shared_mount.value]: disk_xml = """ """.format(self.disk.format, self.disk.path, dev_table[self.disk.sequence]) elif self.config.storage_mode in [status.StorageMode.ceph.value, status.StorageMode.glusterfs.value]: dfs_protocol = 'ceph' if self.config.storage_mode == status.StorageMode.glusterfs.value: dfs_protocol = 'gluster' disk_xml = """ """.format(self.disk.format, dfs_protocol, self.config.dfs_volume, self.disk.path, dev_table[self.disk.sequence]) else: disk_xml = '' return disk_xml def get_graphics(self): return """ """.format(self.guest.vnc_password, self.guest.vnc_port, self.guest.manage_network) @staticmethod def get_console(): return """ """ @staticmethod def get_channel(): return """ """