def _set_graphics(devices, target_vm_conf): # TODO: Support VMs with multiple <graphics> sections. graphics = devices.find('graphics') if graphics is None: return graphics_listen = graphics.find('listen') target_display_network, target_display_ip = _vmconf_display(target_vm_conf) if net_api.ovs_bridge(target_display_network): graphics_listen.attrib.pop('network', None) graphics_listen.set('type', 'address') graphics_listen.set('address', target_display_ip) graphics.attrib.pop('listen', None) else: libvirt_network = libvirtnetwork.netname_o2l(target_display_network) graphics_listen.attrib.pop('address', None) graphics_listen.set('type', 'network') graphics_listen.set('network', libvirt_network) graphics.attrib.pop('listen', None)
def getXML(self): """ Create domxml for a graphics framebuffer. <graphics type='spice' port='5900' tlsPort='5901' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> <clipboard copypaste='no'/> </graphics> OR <graphics type='vnc' port='5900' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> </graphics> """ graphicsAttrs = { 'type': self.device, 'port': self.port, 'autoport': 'yes', } if config.getboolean('vars', 'ssl'): graphicsAttrs['defaultMode'] = 'secure' # the default, 'any', has automatic fallback to # insecure mode, so works with ssl off. if self.device == 'spice': graphicsAttrs['tlsPort'] = self.tlsPort self._setPasswd(graphicsAttrs) if 'keyMap' in self.specParams: graphicsAttrs['keymap'] = self.specParams['keyMap'] graphics = vmxml.Element('graphics', **graphicsAttrs) if not conv.tobool(self.specParams.get('copyPasteEnable', True)): clipboard = vmxml.Element('clipboard', copypaste='no') graphics.appendChild(clipboard) if not conv.tobool(self.specParams.get('fileTransferEnable', True)): filetransfer = vmxml.Element('filetransfer', enable='no') graphics.appendChild(filetransfer) # This list could be dropped in 4.1. We should keep only # the default mode, which is both simpler and safer. if (self.device == 'spice' and 'spiceSecureChannels' in self.specParams): for chan in self._getSpiceChannels(): graphics.appendChildWithArgs('channel', name=chan, mode='secure') display_network = self.specParams.get('displayNetwork') if display_network: graphics.appendChildWithArgs( 'listen', type='network', network=libvirtnetwork.netname_o2l(display_network)) else: graphics.setAttrs(listen='0') return graphics
def fixDisplayNetworks(xml_str): networks = set(re.findall('(?<=DISPLAY-NETWORK:)[\w:-]+', xml_str)) for network in networks: xml_str = xml_str.replace('DISPLAY-NETWORK:' + network, libvirtnetwork.netname_o2l(network)) return xml_str
def getXML(self): """ Create domxml for a graphics framebuffer. <graphics type='spice' port='5900' tlsPort='5901' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> <clipboard copypaste='no'/> </graphics> OR <graphics type='vnc' port='5900' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> </graphics> """ graphicsAttrs = { 'type': self.device, 'port': self.port, 'autoport': 'yes', } if config.getboolean('vars', 'ssl'): graphicsAttrs['defaultMode'] = 'secure' # the default, 'any', has automatic fallback to # insecure mode, so works with ssl off. if self.device == 'spice': graphicsAttrs['tlsPort'] = self.tlsPort self._setPasswd(graphicsAttrs) if 'keyMap' in self.specParams: graphicsAttrs['keymap'] = self.specParams['keyMap'] graphics = vmxml.Element('graphics', **graphicsAttrs) if not conv.tobool(self.specParams.get('copyPasteEnable', True)): clipboard = vmxml.Element('clipboard', copypaste='no') graphics.appendChild(clipboard) if not conv.tobool( self.specParams.get('fileTransferEnable', True)): filetransfer = vmxml.Element('filetransfer', enable='no') graphics.appendChild(filetransfer) # This list could be dropped in 4.1. We should keep only # the default mode, which is both simpler and safer. if (self.device == 'spice' and 'spiceSecureChannels' in self.specParams): for chan in self._getSpiceChannels(): graphics.appendChildWithArgs('channel', name=chan, mode='secure') display_network = self.specParams.get('displayNetwork') if display_network: graphics.appendChildWithArgs( 'listen', type='network', network=libvirtnetwork.netname_o2l(display_network)) else: graphics.setAttrs(listen='0') return graphics
def getXML(self): """ Create domxml for a graphics framebuffer. <graphics type='spice' port='5900' tlsPort='5901' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> <clipboard copypaste='no'/> </graphics> OR <graphics type='vnc' port='5900' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> </graphics> """ graphicsAttrs = { 'type': self.device, 'port': self.port, 'autoport': 'yes', } if config.getboolean('vars', 'ssl'): graphicsAttrs['defaultMode'] = 'secure' # the default, 'any', has automatic fallback to # insecure mode, so works with ssl off. if self.device == 'spice': graphicsAttrs['tlsPort'] = self.tlsPort self._setPasswd(graphicsAttrs) if 'keyMap' in self.specParams: graphicsAttrs['keymap'] = self.specParams['keyMap'] graphics = vmxml.Element('graphics', **graphicsAttrs) if not conv.tobool(self.specParams.get('copyPasteEnable', True)): clipboard = vmxml.Element('clipboard', copypaste='no') graphics.appendChild(clipboard) if not conv.tobool( self.specParams.get('fileTransferEnable', True)): filetransfer = vmxml.Element('filetransfer', enable='no') graphics.appendChild(filetransfer) # This list could be dropped in 4.1. We should keep only # the default mode, which is both simpler and safer. if (self.device == 'spice' and 'spiceSecureChannels' in self.specParams): for chan in self._getSpiceChannels(): graphics.appendChildWithArgs('channel', name=chan, mode='secure') # For the listen type IP to be used, the display network must be OVS. # We assume that the cluster in which the host operates is OVS enabled # and all other hosts in the cluster have the migration hook installed. # The migration hook is responsible to convert ip to net and vice versa display_network = self.specParams['displayNetwork'] display_ip = self.specParams.get('displayIp', '0') if (display_network and display_ip != '0' and supervdsm.getProxy().ovs_bridge(display_network)): graphics.appendChildWithArgs( 'listen', type='address', address=display_ip) elif display_network: graphics.appendChildWithArgs( 'listen', type='network', network=libvirtnetwork.netname_o2l(display_network)) else: graphics.setAttrs(listen='0') return graphics
def getXML(self): """ Create domxml for a graphics framebuffer. <graphics type='spice' port='5900' tlsPort='5901' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> <clipboard copypaste='no'/> </graphics> OR <graphics type='vnc' port='5900' autoport='yes' listen='0' keymap='en-us' passwdValidTo='1970-01-01T00:00:01'> <listen type='address' address='0'/> </graphics> """ graphicsAttrs = { 'type': self.device, 'port': self.port, 'autoport': 'yes', } if config.getboolean('vars', 'ssl'): graphicsAttrs['defaultMode'] = 'secure' # the default, 'any', has automatic fallback to # insecure mode, so works with ssl off. if self.device == 'spice': graphicsAttrs['tlsPort'] = self.tlsPort self._setPasswd(graphicsAttrs) if 'keyMap' in self.specParams: graphicsAttrs['keymap'] = self.specParams['keyMap'] graphics = vmxml.Element('graphics', **graphicsAttrs) if not conv.tobool(self.specParams.get('copyPasteEnable', True)): clipboard = vmxml.Element('clipboard', copypaste='no') graphics.appendChild(clipboard) if not conv.tobool(self.specParams.get('fileTransferEnable', True)): filetransfer = vmxml.Element('filetransfer', enable='no') graphics.appendChild(filetransfer) # This list could be dropped in 4.1. We should keep only # the default mode, which is both simpler and safer. if (self.device == 'spice' and 'spiceSecureChannels' in self.specParams): for chan in self._getSpiceChannels(): graphics.appendChildWithArgs('channel', name=chan, mode='secure') # For the listen type IP to be used, the display network must be OVS. # We assume that the cluster in which the host operates is OVS enabled # and all other hosts in the cluster have the migration hook installed. # The migration hook is responsible to convert ip to net and vice versa display_network = self.specParams['displayNetwork'] display_ip = self.specParams.get('displayIp', '0') if (display_network and display_ip != '0' and supervdsm.getProxy().ovs_bridge(display_network)): graphics.appendChildWithArgs('listen', type='address', address=display_ip) elif display_network: graphics.appendChildWithArgs( 'listen', type='network', network=libvirtnetwork.netname_o2l(display_network)) else: graphics.setAttrs(listen='0') return graphics