diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py index 07c2a9d7cd9ccd5ff686154b0972ad673c92eaf7..da80b4c9cf649f55819164d8958de0e580b0341f 100644 --- a/lib/hypervisor/hv_kvm.py +++ b/lib/hypervisor/hv_kvm.py @@ -255,11 +255,25 @@ class KVMHypervisor(hv_base.BaseHypervisor): #"hvm_boot_order", #"hvm_cdrom_image_path", - kvm_cmd.extend(['-nographic']) - # FIXME: handle vnc, if needed - # How do we decide whether to have it or not?? :( - #"vnc_bind_address", - #"network_port" + # FIXME: handle vnc password + vnc_bind_address = instance.hvparams[constants.HV_VNC_BIND_ADDRESS] + if vnc_bind_address: + kvm_cmd.extend(['-usbdevice', 'tablet']) + if instance.network_port > constants.HT_HVM_VNC_BASE_PORT: + display = instance.network_port - constants.HT_HVM_VNC_BASE_PORT + if vnc_bind_address == '0.0.0.0': + vnc_arg = ':%d' % (display) + else: + vnc_arg = '%s:%d' % (constants.HV_VNC_BIND_ADDRESS, display) + kvm_cmd.extend(['-vnc', vnc_arg]) + else: + logging.error("Network port is not a valid VNC display (%d < %d)." + " Not starting VNC" % + (instance.network_port, constants.HT_HVM_VNC_BASE_PORT)) + kvm_cmd.extend(['-vnc', 'none']) + else: + kvm_cmd.extend(['-nographic']) + monitor_dev = 'unix:%s,server,nowait' % \ self._InstanceMonitor(instance.name) kvm_cmd.extend(['-monitor', monitor_dev])