Commit 6e6bb8d5 authored by Guido Trotter's avatar Guido Trotter
Browse files

VNC password: move to hv param and use in kvm


Signed-off-by: default avatarGuido Trotter <ultrotter@google.com>
Reviewed-by: default avatarOlivier Tharan <olive@google.com>
parent c69a43c8
......@@ -367,6 +367,7 @@ HV_CDROM_IMAGE_PATH = "cdrom_image_path"
HV_NIC_TYPE = "nic_type"
HV_DISK_TYPE = "disk_type"
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
HV_VNC_PASSWORD_FILE = "vnc_password_file"
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
......@@ -389,6 +390,7 @@ HVS_PARAMETER_TYPES = {
HV_CDROM_IMAGE_PATH: VTYPE_STRING,
HV_NIC_TYPE: VTYPE_STRING,
HV_DISK_TYPE: VTYPE_STRING,
HV_VNC_PASSWORD_FILE: VTYPE_STRING,
HV_VNC_BIND_ADDRESS: VTYPE_STRING,
HV_VNC_TLS: VTYPE_BOOL,
HV_VNC_X509: VTYPE_STRING,
......@@ -604,6 +606,7 @@ HVC_DEFAULTS = {
HV_NIC_TYPE: HT_NIC_RTL8139,
HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
HV_VNC_BIND_ADDRESS: '0.0.0.0',
HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE,
HV_ACPI: True,
HV_PAE: True,
HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
......@@ -620,6 +623,7 @@ HVC_DEFAULTS = {
HV_VNC_TLS: False,
HV_VNC_X509: '',
HV_VNC_X509_VERIFY: False,
HV_VNC_PASSWORD_FILE: '',
HV_CDROM_IMAGE_PATH: '',
HV_BOOT_ORDER: HT_BO_DISK,
HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
......
......@@ -62,6 +62,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
constants.HV_VNC_TLS: hv_base.NO_CHECK,
constants.HV_VNC_X509: hv_base.OPT_DIR_CHECK,
constants.HV_VNC_X509_VERIFY: hv_base.NO_CHECK,
constants.HV_VNC_PASSWORD_FILE: hv_base.OPT_FILE_CHECK,
constants.HV_CDROM_IMAGE_PATH: hv_base.OPT_FILE_CHECK,
constants.HV_BOOT_ORDER:
hv_base.ParamInSet(True, constants.HT_KVM_VALID_BO_TYPES),
......@@ -330,7 +331,6 @@ class KVMHypervisor(hv_base.BaseHypervisor):
kvm_cmd.extend(['-usb'])
kvm_cmd.extend(['-usbdevice', mouse_type])
# FIXME: handle vnc password
vnc_bind_address = hvp[constants.HV_VNC_BIND_ADDRESS]
if vnc_bind_address:
if utils.IsValidIP(vnc_bind_address):
......@@ -358,6 +358,9 @@ class KVMHypervisor(hv_base.BaseHypervisor):
elif hvp[constants.HV_VNC_X509]:
vnc_append = '%s,x509=%s' % (vnc_append,
hvp[constants.HV_VNC_X509])
if hvp[constants.HV_VNC_PASSWORD_FILE]:
vnc_append = '%s,password' % vnc_append
vnc_arg = '%s%s' % (vnc_arg, vnc_append)
else:
......@@ -432,6 +435,7 @@ class KVMHypervisor(hv_base.BaseHypervisor):
"""
pidfile, pid, alive = self._InstancePidAlive(instance.name)
hvp = instance.hvparams
if alive:
raise errors.HypervisorError("Failed to start instance %s: %s" %
(instance.name, "already running"))
......@@ -460,6 +464,15 @@ class KVMHypervisor(hv_base.BaseHypervisor):
target, port = incoming
kvm_cmd.extend(['-incoming', 'tcp:%s:%s' % (target, port)])
vnc_pwd_file = hvp[constants.HV_VNC_PASSWORD_FILE]
vnc_pwd = None
if vnc_pwd_file:
try:
vnc_pwd = utils.ReadFile(vnc_pwd_file)
except EnvironmentError, err:
raise errors.HypervisorError("Failed to open VNC password file %s: %s"
% (vnc_pwd_file, err))
result = utils.RunCmd(kvm_cmd)
if result.failed:
raise errors.HypervisorError("Failed to start instance %s: %s (%s)" %
......@@ -470,6 +483,10 @@ class KVMHypervisor(hv_base.BaseHypervisor):
raise errors.HypervisorError("Failed to start instance %s: %s" %
(instance.name))
if vnc_pwd:
change_cmd = 'change vnc password %s' % vnc_pwd
self._CallMonitorCommand(instance.name, change_cmd)
for filename in temp_files:
utils.RemoveFile(filename)
......
......@@ -526,6 +526,7 @@ class XenHvmHypervisor(XenHypervisor):
"VNC bind address is not a valid IP address", None, None),
constants.HV_KERNEL_PATH: hv_base.REQ_FILE_CHECK,
constants.HV_DEVICE_MODEL: hv_base.REQ_FILE_CHECK,
constants.HV_VNC_PASSWORD_FILE: hv_base.REQ_FILE_CHECK,
}
@classmethod
......@@ -574,11 +575,12 @@ class XenHvmHypervisor(XenHypervisor):
config.write("# vncdisplay = 1\n")
config.write("vncunused = 1\n")
vnc_pwd_file = hvp[constants.HV_VNC_PASSWORD_FILE]
try:
password = utils.ReadFile(constants.VNC_PASSWORD_FILE)
password = utils.ReadFile(vnc_pwd_file)
except EnvironmentError, err:
raise errors.HypervisorError("Failed to open VNC password file %s: %s" %
(constants.VNC_PASSWORD_FILE, err))
(vnc_pwd_file, err))
config.write("vncpasswd = '%s'\n" % password.rstrip())
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment