Revision f15a6b03

b/lib/hypervisor/hv_base.py
83 83
_FILE_CHECK = (utils.IsNormAbsPath, "must be an absolute normalized path",
84 84
               os.path.isfile, "not found or not a file")
85 85

  
86
# must be a file or a URL
87
_FILE_OR_URL_CHECK = (utils.IsNormAbsPathOrURL,
88
                      "must be an absolute normalized path or a URL",
89
                      lambda x: os.path.isfile(x) or
90
                      re.match(r'(https?|ftps?)://', x),
91
                      "not found or not a file or URL")
92

  
86 93
# must be a directory
87 94
_DIR_CHECK = (utils.IsNormAbsPath, "must be an absolute normalized path",
88 95
              os.path.isdir, "not found or not a directory")
......
108 115
# nice wrappers for users
109 116
REQ_FILE_CHECK = (True, ) + _FILE_CHECK
110 117
OPT_FILE_CHECK = (False, ) + _FILE_CHECK
118
REQ_FILE_OR_URL_CHECK = (True, ) + _FILE_OR_URL_CHECK
119
OPT_FILE_OR_URL_CHECK = (False, ) + _FILE_OR_URL_CHECK
111 120
REQ_DIR_CHECK = (True, ) + _DIR_CHECK
112 121
OPT_DIR_CHECK = (False, ) + _DIR_CHECK
113 122
REQ_NET_PORT_CHECK = (True, ) + _NET_PORT_CHECK
b/lib/hypervisor/hv_kvm.py
678 678
    constants.HV_KVM_SPICE_TLS_CIPHERS: hv_base.NO_CHECK,
679 679
    constants.HV_KVM_SPICE_USE_VDAGENT: hv_base.NO_CHECK,
680 680
    constants.HV_KVM_FLOPPY_IMAGE_PATH: hv_base.OPT_FILE_CHECK,
681
    constants.HV_CDROM_IMAGE_PATH: hv_base.OPT_FILE_CHECK,
681
    constants.HV_CDROM_IMAGE_PATH: hv_base.OPT_FILE_OR_URL_CHECK,
682 682
    constants.HV_KVM_CDROM2_IMAGE_PATH: hv_base.OPT_FILE_CHECK,
683 683
    constants.HV_BOOT_ORDER:
684 684
      hv_base.ParamInSet(True, constants.HT_KVM_VALID_BO_TYPES),
......
1426 1426

  
1427 1427
    iso_image = hvp[constants.HV_CDROM_IMAGE_PATH]
1428 1428
    if iso_image:
1429
      options = ",format=raw,media=cdrom"
1429
      options = ",media=cdrom"
1430
      if not re.match(r'(https?|ftps?)://', iso_image):
1431
        options = "%s,format=raw" % options
1430 1432
      # set cdrom 'if' type
1431 1433
      if boot_cdrom:
1432 1434
        actual_cdrom_type = constants.HT_DISK_IDE
b/lib/utils/io.py
23 23
"""
24 24

  
25 25
import os
26
import re
26 27
import logging
27 28
import shutil
28 29
import tempfile
......
669 670
  return os.path.commonprefix([prepared_root, norm_other]) == prepared_root
670 671

  
671 672

  
673
def IsNormAbsPathOrURL(path):
674
  """Check whether a path is absolute and normalized, or an HTTP URL.
675

  
676
  """
677
  return IsNormAbsPath(path) or re.match(r'(https?|ftps?)://', path)
678

  
679

  
672 680
def PathJoin(*args):
673 681
  """Safe-join a list of path components.
674 682

  

Also available in: Unified diff