Revision 8b2d1013

b/lib/constants.py
283 283
HV_NIC_TYPE = "nic_type"
284 284
HV_DISK_TYPE = "disk_type"
285 285
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
286
HV_VNC_TLS = "vnc_tls"
287
HV_VNC_X509 = "vnc_x509_path"
288
HV_VNC_X509_VERIFY = "vnc_x509_verify"
286 289
HV_ACPI = "acpi"
287 290
HV_PAE = "pae"
288 291
HV_KERNEL_PATH = "kernel_path"
......
296 299
  HV_NIC_TYPE,
297 300
  HV_DISK_TYPE,
298 301
  HV_VNC_BIND_ADDRESS,
302
  HV_VNC_TLS,
303
  HV_VNC_X509,
304
  HV_VNC_X509_VERIFY,
299 305
  HV_ACPI,
300 306
  HV_PAE,
301 307
  HV_KERNEL_PATH,
......
451 457
    HV_ACPI: True,
452 458
    HV_SERIAL_CONSOLE: True,
453 459
    HV_VNC_BIND_ADDRESS: None,
460
    HV_VNC_TLS: False,
461
    HV_VNC_X509: '',
462
    HV_VNC_X509_VERIFY: False,
454 463
    },
455 464
  HT_FAKE: {
456 465
    },
b/lib/hypervisor/hv_kvm.py
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

  

Also available in: Unified diff