- # FIXME: all the parameters could be checked before, in ExpandNames, or in
- # a separate CheckArguments function, if we implement one, so the operation
- # can be aborted without waiting for any lock, should it have an error...
- self.mem = getattr(self.op, "mem", None)
- self.vcpus = getattr(self.op, "vcpus", None)
- self.ip = getattr(self.op, "ip", None)
- self.mac = getattr(self.op, "mac", None)
- self.bridge = getattr(self.op, "bridge", None)
- self.kernel_path = getattr(self.op, "kernel_path", None)
- self.initrd_path = getattr(self.op, "initrd_path", None)
- self.hvm_boot_order = getattr(self.op, "hvm_boot_order", None)
- self.hvm_acpi = getattr(self.op, "hvm_acpi", None)
- self.hvm_pae = getattr(self.op, "hvm_pae", None)
- self.hvm_nic_type = getattr(self.op, "hvm_nic_type", None)
- self.hvm_disk_type = getattr(self.op, "hvm_disk_type", None)
- self.hvm_cdrom_image_path = getattr(self.op, "hvm_cdrom_image_path", None)
- self.vnc_bind_address = getattr(self.op, "vnc_bind_address", None)
- self.force = getattr(self.op, "force", None)
- all_parms = [self.mem, self.vcpus, self.ip, self.bridge, self.mac,
- self.kernel_path, self.initrd_path, self.hvm_boot_order,
- self.hvm_acpi, self.hvm_pae, self.hvm_cdrom_image_path,
- self.vnc_bind_address, self.hvm_nic_type, self.hvm_disk_type]
- if all_parms.count(None) == len(all_parms):
- raise errors.OpPrereqError("No changes submitted")
- if self.mem is not None:
- try:
- self.mem = int(self.mem)
- except ValueError, err:
- raise errors.OpPrereqError("Invalid memory size: %s" % str(err))
- if self.vcpus is not None:
- try:
- self.vcpus = int(self.vcpus)
- except ValueError, err:
- raise errors.OpPrereqError("Invalid vcpus number: %s" % str(err))
- if self.ip is not None:
- self.do_ip = True
- if self.ip.lower() == "none":
- self.ip = None
- else:
- if not utils.IsValidIP(self.ip):
- raise errors.OpPrereqError("Invalid IP address '%s'." % self.ip)
- else:
- self.do_ip = False
- self.do_bridge = (self.bridge is not None)
- if self.mac is not None:
- if self.cfg.IsMacInUse(self.mac):
- raise errors.OpPrereqError('MAC address %s already in use in cluster' %
- self.mac)
- if not utils.IsValidMac(self.mac):
- raise errors.OpPrereqError('Invalid MAC address %s' % self.mac)
-
- if self.kernel_path is not None:
- self.do_kernel_path = True
- if self.kernel_path == constants.VALUE_NONE:
- raise errors.OpPrereqError("Can't set instance to no kernel")
-
- if self.kernel_path != constants.VALUE_DEFAULT:
- if not os.path.isabs(self.kernel_path):
- raise errors.OpPrereqError("The kernel path must be an absolute"
- " filename")
- else:
- self.do_kernel_path = False
-
- if self.initrd_path is not None:
- self.do_initrd_path = True
- if self.initrd_path not in (constants.VALUE_NONE,
- constants.VALUE_DEFAULT):
- if not os.path.isabs(self.initrd_path):
- raise errors.OpPrereqError("The initrd path must be an absolute"
- " filename")
- else:
- self.do_initrd_path = False
-
- # boot order verification
- if self.hvm_boot_order is not None:
- if self.hvm_boot_order != constants.VALUE_DEFAULT:
- if len(self.hvm_boot_order.strip("acdn")) != 0:
- raise errors.OpPrereqError("invalid boot order specified,"
- " must be one or more of [acdn]"
- " or 'default'")
-
- # hvm_cdrom_image_path verification
- if self.op.hvm_cdrom_image_path is not None:
- if not (os.path.isabs(self.op.hvm_cdrom_image_path) or
- self.op.hvm_cdrom_image_path.lower() == "none"):
- raise errors.OpPrereqError("The path to the HVM CDROM image must"
- " be an absolute path or None, not %s" %
- self.op.hvm_cdrom_image_path)
- if not (os.path.isfile(self.op.hvm_cdrom_image_path) or
- self.op.hvm_cdrom_image_path.lower() == "none"):
- raise errors.OpPrereqError("The HVM CDROM image must either be a"
- " regular file or a symlink pointing to"
- " an existing regular file, not %s" %
- self.op.hvm_cdrom_image_path)
-
- # vnc_bind_address verification
- if self.op.vnc_bind_address is not None:
- if not utils.IsValidIP(self.op.vnc_bind_address):
- raise errors.OpPrereqError("given VNC bind address '%s' doesn't look"
- " like a valid IP address" %
- self.op.vnc_bind_address)