constants.HV_ACPI: hv_base.NO_CHECK,
constants.HV_SERIAL_CONSOLE: hv_base.NO_CHECK,
constants.HV_VNC_BIND_ADDRESS: \
- (False, lambda x: (utils.IsValidIP(x) or os.path.isabs(x)),
+ (False, lambda x: (utils.IsValidIP(x) or utils.IsAbsNormPath(x)),
"the VNC bind address must be either a valid IP address or an absolute"
" pathname", None, None),
constants.HV_VNC_TLS: hv_base.NO_CHECK,
_MIGRATION_STATUS_RE = re.compile('Migration\s+status:\s+(\w+)',
re.M | re.I)
+ _KVM_NETWORK_SCRIPT = constants.SYSCONFDIR + "/ganeti/kvm-vif-bridge"
+
+ ANCILLARY_FILES = [
+ _KVM_NETWORK_SCRIPT,
+ ]
+
def __init__(self):
hv_base.BaseHypervisor.__init__(self)
# Let's make sure the directories we need exist, even if the RUN_DIR lives
script.write("export BRIDGE=%s\n" % nic.bridge)
script.write("export INTERFACE=$1\n")
# TODO: make this configurable at ./configure time
- script.write("if [ -x /etc/ganeti/kvm-vif-bridge ]; then\n")
+ script.write("if [ -x '%s' ]; then\n" % self._KVM_NETWORK_SCRIPT)
script.write(" # Execute the user-specific vif file\n")
- script.write(" /etc/ganeti/kvm-vif-bridge\n")
+ script.write(" %s\n" % self._KVM_NETWORK_SCRIPT)
script.write("else\n")
script.write(" # Connect the interface to the bridge\n")
script.write(" /sbin/ifconfig $INTERFACE 0.0.0.0 up\n")
while arg_list:
arg = arg_list.pop(0)
if arg == '-m':
- memory = arg_list.pop(0)
+ memory = int(arg_list.pop(0))
elif arg == '-smp':
- vcpus = arg_list.pop(0)
+ vcpus = int(arg_list.pop(0))
return (instance_name, pid, memory, vcpus, stat, times)
hvparams[constants.HV_NIC_TYPE] == constants.HT_NIC_PARAVIRTUAL):
raise errors.HypervisorError("Cannot boot from a paravirtual NIC. Please"
" change the NIC type.")
+
+ @classmethod
+ def PowercycleNode(cls):
+ """KVM powercycle, just a wrapper over Linux powercycle.
+
+ """
+ cls.LinuxPowercycle()