55 |
55 |
constants.HV_ACPI,
|
56 |
56 |
constants.HV_SERIAL_CONSOLE,
|
57 |
57 |
constants.HV_VNC_BIND_ADDRESS,
|
|
58 |
constants.HV_VNC_TLS,
|
|
59 |
constants.HV_VNC_X509,
|
|
60 |
constants.HV_VNC_X509_VERIFY,
|
58 |
61 |
]
|
59 |
62 |
|
60 |
63 |
_MIGRATION_STATUS_RE = re.compile('Migration\s+status:\s+(\w+)',
|
... | ... | |
277 |
280 |
(instance.network_port,
|
278 |
281 |
constants.HT_HVM_VNC_BASE_PORT))
|
279 |
282 |
vnc_arg = 'none'
|
|
283 |
|
|
284 |
# Only allow tls and other option when not binding to a file, for now.
|
|
285 |
# kvm/qemu gets confused otherwise about the filename to use.
|
|
286 |
vnc_append = ''
|
|
287 |
if instance.hvparams[constants.HV_VNC_TLS]:
|
|
288 |
vnc_append = '%s,tls' % vnc_append
|
|
289 |
if instance.hvparams[constants.HV_VNC_X509_VERIFY]:
|
|
290 |
vnc_append = '%s,x509verify=%s' % (vnc_append,
|
|
291 |
instance.hvparams[constants.HV_VNC_X509])
|
|
292 |
elif instance.hvparams[constants.HV_VNC_X509]:
|
|
293 |
vnc_append = '%s,x509=%s' % (vnc_append,
|
|
294 |
instance.hvparams[constants.HV_VNC_X509])
|
|
295 |
vnc_arg = '%s%s' % (vnc_arg, vnc_append)
|
|
296 |
|
280 |
297 |
else:
|
281 |
|
if os.path.isdir(vnc_bind_address):
|
282 |
|
vnc_arg = 'unix:%s/%s.vnc' % (vnc_bind_address, instance.name)
|
283 |
|
else:
|
284 |
|
vnc_arg = 'unix:%s' % vnc_bind_address
|
|
298 |
vnc_arg = 'unix:%s/%s.vnc' % (vnc_bind_address, instance.name)
|
|
299 |
|
285 |
300 |
kvm_cmd.extend(['-vnc', vnc_arg])
|
286 |
301 |
else:
|
287 |
302 |
kvm_cmd.extend(['-nographic'])
|
... | ... | |
696 |
711 |
" pathname. '%s' given" %
|
697 |
712 |
vnc_bind_address)
|
698 |
713 |
|
|
714 |
if hvparams[constants.HV_VNC_X509_VERIFY] and \
|
|
715 |
not hvparams[constants.HV_VNC_X509]:
|
|
716 |
raise errors.HypervisorError("%s must be defined, if %s is" %
|
|
717 |
(constants.HV_VNC_X509,
|
|
718 |
constants.HV_VNC_X509_VERIFY))
|
|
719 |
|
|
720 |
if hvparams[constants.HV_VNC_X509]:
|
|
721 |
if not os.path.isabs(hvparams[constants.HV_VNC_X509]):
|
|
722 |
raise errors.HypervisorError("The vnc x509 path must an absolute path"
|
|
723 |
", if defined")
|
|
724 |
|
699 |
725 |
def ValidateParameters(self, hvparams):
|
700 |
726 |
"""Check the given parameters for validity.
|
701 |
727 |
|
... | ... | |
713 |
739 |
if initrd_path and not os.path.isfile(initrd_path):
|
714 |
740 |
raise errors.HypervisorError("Instance initrd '%s' not found or"
|
715 |
741 |
" not a file" % initrd_path)
|
|
742 |
|
|
743 |
vnc_bind_address = hvparams[constants.HV_VNC_BIND_ADDRESS]
|
|
744 |
if vnc_bind_address and not utils.IsValidIP(vnc_bind_address) and \
|
|
745 |
not os.path.isdir(vnc_bind_address):
|
|
746 |
raise errors.HypervisorError("Instance vnc bind address must be either"
|
|
747 |
" an ip address or an existing directory")
|
|
748 |
|
|
749 |
vnc_x509 = hvparams[constants.HV_VNC_X509]
|
|
750 |
if vnc_x509 and not os.path.isdir(vnc_x509):
|
|
751 |
raise errors.HypervisorError("Instance vnc x509 path '%s' not found"
|
|
752 |
" or not a directory" % vnc_x509)
|
|
753 |
|