X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/600535f0cffc11b5455ac5657cee1f680ebc547c..9a8ae794db0f1aded3bb0e86892fa248b624b9d2:/lib/constants.py diff --git a/lib/constants.py b/lib/constants.py index 95e1708..973914b 100644 --- a/lib/constants.py +++ b/lib/constants.py @@ -1,7 +1,7 @@ # # -# Copyright (C) 2006, 2007, 2008, 2009, 2010 Google Inc. +# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Google Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,7 +26,6 @@ import re from ganeti import _autoconf # various versions -PROTOCOL_VERSION = 40 RELEASE_VERSION = _autoconf.PACKAGE_VERSION OS_API_V10 = 10 OS_API_V15 = 15 @@ -84,10 +83,27 @@ CONFIG_MINOR = int(_autoconf.VERSION_MINOR) CONFIG_REVISION = 0 CONFIG_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, CONFIG_REVISION) +#: RPC protocol version +PROTOCOL_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, 0) + # user separation DAEMONS_GROUP = _autoconf.DAEMONS_GROUP +ADMIN_GROUP = _autoconf.ADMIN_GROUP MASTERD_USER = _autoconf.MASTERD_USER +MASTERD_GROUP = _autoconf.MASTERD_GROUP RAPI_USER = _autoconf.RAPI_USER +RAPI_GROUP = _autoconf.RAPI_GROUP +CONFD_USER = _autoconf.CONFD_USER +CONFD_GROUP = _autoconf.CONFD_GROUP +NODED_USER = _autoconf.NODED_USER + + +# Wipe +DD_CMD = "dd" +WIPE_BLOCK_SIZE = 1024**2 +MAX_WIPE_CHUNK = 1024 # 1GB +MIN_WIPE_CHUNK_PERCENT = 10 + # file paths DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti" @@ -104,6 +120,7 @@ CRYPTO_KEYS_DIR = RUN_GANETI_DIR + "/crypto" CRYPTO_KEYS_DIR_MODE = SECURE_DIR_MODE IMPORT_EXPORT_DIR = RUN_GANETI_DIR + "/import-export" IMPORT_EXPORT_DIR_MODE = 0755 +ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/" # keep RUN_GANETI_DIR first here, to make sure all get created when the node # daemon is started (this takes care of RUN_DIR being tmpfs) SUB_RUN_DIRS = [ RUN_GANETI_DIR, BDEV_CACHE_DIR, DISK_LINKS_DIR ] @@ -121,12 +138,16 @@ WATCHER_STATEFILE = DATA_DIR + "/watcher.data" WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause" INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status" SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts" -RAPI_USERS_FILE = DATA_DIR + "/rapi_users" +RAPI_USERS_FILE = DATA_DIR + "/rapi/users" QUEUE_DIR = DATA_DIR + "/queue" DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util" +SETUP_SSH = _autoconf.TOOLSDIR + "/setup-ssh" +KVM_IFUP = _autoconf.PKGLIBDIR + "/kvm-ifup" ETC_HOSTS = "/etc/hosts" DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR +DEFAULT_SHARED_FILE_STORAGE_DIR = _autoconf.SHARED_FILE_STORAGE_DIR ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE +ENABLE_SHARED_FILE_STORAGE = _autoconf.ENABLE_SHARED_FILE_STORAGE SYSCONFDIR = _autoconf.SYSCONFDIR TOOLSDIR = _autoconf.TOOLSDIR CONF_DIR = SYSCONFDIR + "/ganeti" @@ -182,8 +203,9 @@ DEV_CONSOLE = "/dev/console" PROC_MOUNTS = "/proc/mounts" -# luxi related constants +# Local UniX Interface related constants LUXI_EOM = "\3" +LUXI_VERSION = CONFIG_VERSION # one of 'no', 'yes', 'only' SYSLOG_USAGE = _autoconf.SYSLOG_USAGE @@ -204,8 +226,21 @@ XEN_INITRD = _autoconf.XEN_INITRD KVM_PATH = _autoconf.KVM_PATH SOCAT_PATH = _autoconf.SOCAT_PATH SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE +SOCAT_USE_COMPRESS = _autoconf.SOCAT_USE_COMPRESS SOCAT_ESCAPE_CODE = "0x1d" +#: Console as SSH command +CONS_SSH = "ssh" + +#: Console as VNC server +CONS_VNC = "vnc" + +#: Display a message for console access +CONS_MESSAGE = "msg" + +#: All console types +CONS_ALL = frozenset([CONS_SSH, CONS_VNC, CONS_MESSAGE]) + # For RSA keys more bits are better, but they also make operations more # expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year # 2010 on. @@ -214,7 +249,7 @@ RSA_KEY_BITS = 2048 # Ciphers allowed for SSL connections. For the format, see ciphers(1). A better # way to disable ciphers would be to use the exclamation mark (!), but socat # versions below 1.5 can't parse exclamation marks in options properly. When -# modifying the ciphers, ensure to not accidentially add something after it's +# modifying the ciphers, ensure not to accidentially add something after it's # been removed. Use the "openssl" utility to check the allowed ciphers, e.g. # "openssl ciphers -v HIGH:-DES". OPENSSL_CIPHERS = "HIGH:-DES:-3DES:-EXPORT:-ADH" @@ -277,6 +312,7 @@ HOOKS_VERSION = 2 # hooks subject type (what object type does the LU deal with) HTYPE_CLUSTER = "CLUSTER" HTYPE_NODE = "NODE" +HTYPE_GROUP = "GROUP" HTYPE_INSTANCE = "INSTANCE" HKR_SKIP = 0 @@ -327,24 +363,37 @@ DT_DISKLESS = "diskless" DT_PLAIN = "plain" DT_DRBD8 = "drbd" DT_FILE = "file" +DT_SHARED_FILE = "sharedfile" +DT_BLOCK = "blockdev" # the set of network-mirrored disk templates -DTS_NET_MIRROR = frozenset([DT_DRBD8]) +DTS_INT_MIRROR = frozenset([DT_DRBD8]) + +# the set of externally-mirrored disk templates (e.g. SAN, NAS) +DTS_EXT_MIRROR = frozenset([DT_SHARED_FILE, DT_BLOCK]) # the set of non-lvm-based disk templates -DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE]) +DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE, DT_SHARED_FILE, DT_BLOCK]) # the set of disk templates which can be grown -DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE]) +DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE, DT_SHARED_FILE]) # the set of disk templates that allow adoption -DTS_MAY_ADOPT = frozenset([DT_PLAIN]) +DTS_MAY_ADOPT = frozenset([DT_PLAIN, DT_BLOCK]) + +# the set of disk templates that *must* use adoption +DTS_MUST_ADOPT = frozenset([DT_BLOCK]) + +# the set of disk templates that allow migrations +DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR) + # logical disk types LD_LV = "lvm" LD_DRBD8 = "drbd8" LD_FILE = "file" -LDS_BLOCK = frozenset([LD_LV, LD_DRBD8]) +LD_BLOCKDEV = "blockdev" +LDS_BLOCK = frozenset([LD_LV, LD_DRBD8, LD_BLOCKDEV]) # drbd constants DRBD_HMAC_ALG = "md5" @@ -404,11 +453,20 @@ RIE_HANDSHAKE = "Hi, I'm Ganeti" # Remote import/export certificate validity in seconds RIE_CERT_VALIDITY = 24 * 60 * 60 -# Remote import/export connect timeout for socat -RIE_CONNECT_TIMEOUT = 60 +# Overall timeout for establishing connection +RIE_CONNECT_TIMEOUT = 180 + +# Export only: how long to wait per connection attempt (seconds) +RIE_CONNECT_ATTEMPT_TIMEOUT = 20 + +# Export only: number of attempts to connect +RIE_CONNECT_RETRIES = 10 -DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN, - DT_DRBD8, DT_FILE]) +#: Give child process up to 5 seconds to exit after sending a signal +CHILD_LINGER_TIMEOUT = 5.0 + +DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN, DT_DRBD8, + DT_FILE, DT_SHARED_FILE, DT_BLOCK]) FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP]) @@ -420,8 +478,9 @@ INISECT_BEP = "backend" INISECT_OSP = "os" # dynamic device modification -DDM_ADD = 'add' -DDM_REMOVE = 'remove' +DDM_ADD = "add" +DDM_REMOVE = "remove" +DDMS_VALUES = frozenset([DDM_ADD, DDM_REMOVE]) # common exit codes EXIT_SUCCESS = 0 @@ -431,6 +490,9 @@ EXIT_NOTMASTER = 11 EXIT_NODESETUP_ERROR = 12 EXIT_CONFIRMATION = 13 # need user confirmation +#: Exit code for query operations with unknown fields +EXIT_UNKNOWN_FIELD = 14 + # tags TAG_CLUSTER = "cluster" TAG_NODE = "node" @@ -450,6 +512,8 @@ IP4_ADDRESS_LOCALHOST = "127.0.0.1" IP4_ADDRESS_ANY = "0.0.0.0" IP6_ADDRESS_LOCALHOST = "::1" IP6_ADDRESS_ANY = "::" +IP4_VERSION = 4 +IP6_VERSION = 6 TCP_PING_TIMEOUT = 10 GANETI_RUNAS = "root" DEFAULT_VG = "xenvg" @@ -461,7 +525,12 @@ LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT DEFAULT_SHUTDOWN_TIMEOUT = 120 NODE_MAX_CLOCK_SKEW = 150 # Time for an intra-cluster disk transfer to wait for a connection -DISK_TRANSFER_CONNECT_TIMEOUT = 30 +DISK_TRANSFER_CONNECT_TIMEOUT = 60 +# Disk index separator +DISK_SEPARATOR = _autoconf.DISK_SEPARATOR + +#: Key for job IDs in opcode result +JOB_IDS_KEY = "jobs" # runparts results (RUNPARTS_SKIP, @@ -510,11 +579,13 @@ REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT, INSTANCE_REBOOT_FULL]) VTYPE_STRING = 'string' +VTYPE_MAYBE_STRING = "maybe-string" VTYPE_BOOL = 'bool' VTYPE_SIZE = 'size' # size, in MiBs VTYPE_INT = 'int' ENFORCEABLE_TYPES = frozenset([ VTYPE_STRING, + VTYPE_MAYBE_STRING, VTYPE_BOOL, VTYPE_SIZE, VTYPE_INT, @@ -546,7 +617,7 @@ HV_INIT_SCRIPT = "init_script" HV_MIGRATION_PORT = "migration_port" HV_MIGRATION_BANDWIDTH = "migration_bandwidth" HV_MIGRATION_DOWNTIME = "migration_downtime" -HV_MIGRATION_TYPE = "migration_type" +HV_MIGRATION_MODE = "migration_mode" HV_USE_LOCALTIME = "use_localtime" HV_DISK_CACHE = "disk_cache" HV_SECURITY_MODEL = "security_model" @@ -555,6 +626,8 @@ HV_KVM_FLAG = "kvm_flag" HV_VHOST_NET = "vhost_net" HV_KVM_USE_CHROOT = "use_chroot" HV_CPU_MASK = "cpu_mask" +HV_MEM_PATH = "mem_path" +HV_BLOCKDEV_PREFIX = "blockdev_prefix" HVS_PARAMETER_TYPES = { HV_BOOT_ORDER: VTYPE_STRING, @@ -582,7 +655,7 @@ HVS_PARAMETER_TYPES = { HV_MIGRATION_PORT: VTYPE_INT, HV_MIGRATION_BANDWIDTH: VTYPE_INT, HV_MIGRATION_DOWNTIME: VTYPE_INT, - HV_MIGRATION_TYPE: VTYPE_STRING, + HV_MIGRATION_MODE: VTYPE_STRING, HV_USE_LOCALTIME: VTYPE_BOOL, HV_DISK_CACHE: VTYPE_STRING, HV_SECURITY_MODEL: VTYPE_STRING, @@ -591,11 +664,13 @@ HVS_PARAMETER_TYPES = { HV_VHOST_NET: VTYPE_BOOL, HV_KVM_USE_CHROOT: VTYPE_BOOL, HV_CPU_MASK: VTYPE_STRING, + HV_MEM_PATH: VTYPE_STRING, + HV_BLOCKDEV_PREFIX: VTYPE_STRING, } HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys()) -# BE parameter names +# Backend parameter names BE_MEMORY = "memory" BE_VCPUS = "vcpus" BE_AUTO_BALANCE = "auto_balance" @@ -608,9 +683,46 @@ BES_PARAMETER_TYPES = { BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys()) +# Node parameter names +ND_OOB_PROGRAM = "oob_program" + +NDS_PARAMETER_TYPES = { + ND_OOB_PROGRAM: VTYPE_MAYBE_STRING, + } + +NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys()) + +# OOB supported commands +OOB_POWER_ON = "power-on" +OOB_POWER_OFF = "power-off" +OOB_POWER_CYCLE = "power-cycle" +OOB_POWER_STATUS = "power-status" +OOB_HEALTH = "health" + +OOB_COMMANDS = frozenset([OOB_POWER_ON, OOB_POWER_OFF, OOB_POWER_CYCLE, + OOB_POWER_STATUS, OOB_HEALTH]) + +OOB_POWER_STATUS_POWERED = "powered" + +OOB_TIMEOUT = 60 # 60 seconds +OOB_POWER_DELAY = 2.0 # 2 seconds + +OOB_STATUS_OK = "OK" +OOB_STATUS_WARNING = "WARNING" +OOB_STATUS_CRITICAL = "CRITICAL" +OOB_STATUS_UNKNOWN = "UNKNOWN" + +OOB_STATUSES = frozenset([ + OOB_STATUS_OK, + OOB_STATUS_WARNING, + OOB_STATUS_CRITICAL, + OOB_STATUS_UNKNOWN, + ]) + # Instance Parameters Profile PP_DEFAULT = "default" +# NIC_* constants are used inside the ganeti config NIC_MODE = "mode" NIC_LINK = "link" @@ -626,22 +738,31 @@ NICS_PARAMETER_TYPES = { NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys()) +# IDISK_* constants are used in opcodes, to create/change disks IDISK_SIZE = "size" IDISK_MODE = "mode" IDISK_ADOPT = "adopt" -IDISK_PARAMS = frozenset([IDISK_SIZE, IDISK_MODE, IDISK_ADOPT]) +IDISK_VG = "vg" IDISK_PARAMS_TYPES = { IDISK_SIZE: VTYPE_SIZE, IDISK_MODE: VTYPE_STRING, IDISK_ADOPT: VTYPE_STRING, + IDISK_VG: VTYPE_STRING, } +IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys()) + +# INIC_* constants are used in opcodes, to create/change nics INIC_MAC = "mac" INIC_IP = "ip" INIC_MODE = "mode" INIC_LINK = "link" -INIC_BRIDGE = "bridge" -INIC_PARAMS = frozenset([INIC_MAC, INIC_IP, INIC_MODE, INIC_LINK, INIC_BRIDGE]) -INIC_PARAMS_TYPES = dict([(name, VTYPE_STRING) for name in INIC_PARAMS]) +INIC_PARAMS_TYPES = { + INIC_IP: VTYPE_MAYBE_STRING, + INIC_LINK: VTYPE_STRING, + INIC_MAC: VTYPE_STRING, + INIC_MODE: VTYPE_STRING, + } +INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys()) # Hypervisor constants HT_XEN_PVM = "xen-pvm" @@ -676,7 +797,8 @@ HT_NIC_E1000 = "e1000" HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual" HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI, - HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL]) + HT_NIC_E1000, HT_NIC_NE2K_ISA, + HT_NIC_PARAVIRTUAL]) HT_KVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI, HT_NIC_NE2K_ISA, HT_NIC_I82551, HT_NIC_I85557B, HT_NIC_I8259ER, @@ -733,7 +855,7 @@ HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED]) # Migration type HT_MIGRATION_LIVE = "live" HT_MIGRATION_NONLIVE = "non-live" -HT_MIGRATION_TYPES = frozenset([HT_MIGRATION_LIVE, HT_MIGRATION_NONLIVE]) +HT_MIGRATION_MODES = frozenset([HT_MIGRATION_LIVE, HT_MIGRATION_NONLIVE]) # Cluster Verify steps VERIFY_NPLUSONE_MEM = 'nplusone_mem' @@ -745,6 +867,7 @@ NV_DRBDLIST = "drbd-list" NV_FILELIST = "filelist" NV_HVINFO = "hvinfo" NV_HYPERVISOR = "hypervisor" +NV_HVPARAMS = "hvparms" NV_INSTANCELIST = "instancelist" NV_LVLIST = "lvlist" NV_MASTERIP = "master-ip" @@ -756,6 +879,40 @@ NV_PVLIST = "pvlist" NV_TIME = "time" NV_VERSION = "version" NV_VGLIST = "vglist" +NV_VMNODES = "vmnodes" +NV_OOB_PATHS = "oob-paths" + +# Instance status +INSTST_RUNNING = "running" +INSTST_ADMINDOWN = "ADMIN_down" +INSTST_NODEOFFLINE = "ERROR_nodeoffline" +INSTST_NODEDOWN = "ERROR_nodedown" +INSTST_WRONGNODE = "ERROR_wrongnode" +INSTST_ERRORUP = "ERROR_up" +INSTST_ERRORDOWN = "ERROR_down" +INSTST_ALL = frozenset([ + INSTST_RUNNING, + INSTST_ADMINDOWN, + INSTST_NODEOFFLINE, + INSTST_NODEDOWN, + INSTST_WRONGNODE, + INSTST_ERRORUP, + INSTST_ERRORDOWN, + ]) + +# Node roles +NR_REGULAR = "R" +NR_MASTER = "M" +NR_MCANDIDATE = "C" +NR_DRAINED = "D" +NR_OFFLINE = "O" +NR_ALL = frozenset([ + NR_REGULAR, + NR_MASTER, + NR_MCANDIDATE, + NR_DRAINED, + NR_OFFLINE, + ]) # SSL certificate check constants (in days) SSL_CERT_EXPIRATION_WARN = 30 @@ -808,6 +965,12 @@ JOBS_FINALIZED = frozenset([ JOB_STATUS_SUCCESS, JOB_STATUS_ERROR, ]) +JOB_STATUS_ALL = frozenset([ + JOB_STATUS_QUEUED, + JOB_STATUS_WAITLOCK, + JOB_STATUS_CANCELING, + JOB_STATUS_RUNNING, + ]) | JOBS_FINALIZED # OpCode status # not yet finalized @@ -823,23 +986,114 @@ OPS_FINALIZED = frozenset([OP_STATUS_CANCELED, OP_STATUS_SUCCESS, OP_STATUS_ERROR]) +# OpCode priority +OP_PRIO_LOWEST = +19 +OP_PRIO_HIGHEST = -20 + +OP_PRIO_LOW = +10 +OP_PRIO_NORMAL = 0 +OP_PRIO_HIGH = -10 + +OP_PRIO_SUBMIT_VALID = frozenset([ + OP_PRIO_LOW, + OP_PRIO_NORMAL, + OP_PRIO_HIGH, + ]) + +OP_PRIO_DEFAULT = OP_PRIO_NORMAL + # Execution log types ELOG_MESSAGE = "message" ELOG_PROGRESS = "progress" ELOG_REMOTE_IMPORT = "remote-import" ELOG_JQUEUE_TEST = "jqueue-test" +# /etc/hosts modification +ETC_HOSTS_ADD = "add" +ETC_HOSTS_REMOVE = "remove" + # Job queue test JQT_MSGPREFIX = "TESTMSG=" JQT_EXPANDNAMES = "expandnames" JQT_EXEC = "exec" JQT_LOGMSG = "logmsg" +JQT_STARTMSG = "startmsg" JQT_ALL = frozenset([ JQT_EXPANDNAMES, JQT_EXEC, JQT_LOGMSG, + JQT_STARTMSG, ]) +# Query resources +QR_INSTANCE = "instance" +QR_NODE = "node" +QR_LOCK = "lock" +QR_GROUP = "group" +QR_OS = "os" + +#: List of resources which can be queried using L{opcodes.OpQuery} +QR_VIA_OP = frozenset([QR_INSTANCE, QR_NODE, QR_GROUP, QR_OS]) + +#: List of resources which can be queried using Local UniX Interface +QR_VIA_LUXI = QR_VIA_OP.union([ + QR_LOCK, + ]) + +#: List of resources which can be queried using RAPI +QR_VIA_RAPI = QR_VIA_LUXI + +# Query field types +QFT_UNKNOWN = "unknown" +QFT_TEXT = "text" +QFT_BOOL = "bool" +QFT_NUMBER = "number" +QFT_UNIT = "unit" +QFT_TIMESTAMP = "timestamp" +QFT_OTHER = "other" + +#: All query field types +QFT_ALL = frozenset([ + QFT_UNKNOWN, + QFT_TEXT, + QFT_BOOL, + QFT_NUMBER, + QFT_UNIT, + QFT_TIMESTAMP, + QFT_OTHER, + ]) + +# Query result field status (don't change or reuse values as they're used by +# clients) +#: Normal field status +RS_NORMAL = 0 +#: Unknown field +RS_UNKNOWN = 1 +#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE} +RS_NODATA = 2 +#: Value unavailable/unsupported for item; if this field is supported +#: but we cannot get the data for the moment, RS_NODATA or +#: RS_OFFLINE should be used +RS_UNAVAIL = 3 +#: Resource marked offline +RS_OFFLINE = 4 + +RS_ALL = frozenset([ + RS_NORMAL, + RS_UNKNOWN, + RS_NODATA, + RS_UNAVAIL, + RS_OFFLINE, + ]) + +#: Dictionary with special field cases and their verbose/terse formatting +RSS_DESCRIPTION = { + RS_UNKNOWN: ("(unknown)", "??"), + RS_NODATA: ("(nodata)", "?"), + RS_OFFLINE: ("(offline)", "*"), + RS_UNAVAIL: ("(unavail)", "-"), + } + # max dynamic devices MAX_NICS = 8 MAX_DISKS = 16 @@ -848,6 +1102,7 @@ MAX_DISKS = 16 SS_CLUSTER_NAME = "cluster_name" SS_CLUSTER_TAGS = "cluster_tags" SS_FILE_STORAGE_DIR = "file_storage_dir" +SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir" SS_MASTER_CANDIDATES = "master_candidates" SS_MASTER_CANDIDATES_IPS = "master_candidates_ips" SS_MASTER_IP = "master_ip" @@ -858,11 +1113,13 @@ SS_NODE_PRIMARY_IPS = "node_primary_ips" SS_NODE_SECONDARY_IPS = "node_secondary_ips" SS_OFFLINE_NODES = "offline_nodes" SS_ONLINE_NODES = "online_nodes" +SS_PRIMARY_IP_FAMILY = "primary_ip_family" SS_INSTANCE_LIST = "instance_list" SS_RELEASE_VERSION = "release_version" SS_HYPERVISOR_LIST = "hypervisor_list" SS_MAINTAIN_NODE_HEALTH = "maintain_node_health" SS_UID_POOL = "uid_pool" +SS_NODEGROUPS = "nodegroups" # cluster wide default parameters DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM @@ -877,7 +1134,8 @@ HVC_DEFAULTS = { HV_ROOT_PATH: '/dev/sda1', HV_KERNEL_ARGS: 'ro', HV_MIGRATION_PORT: 8002, - HV_MIGRATION_TYPE: HT_MIGRATION_LIVE, + HV_MIGRATION_MODE: HT_MIGRATION_LIVE, + HV_BLOCKDEV_PREFIX: "sd", }, HT_XEN_HVM: { HV_BOOT_ORDER: "cd", @@ -891,8 +1149,9 @@ HVC_DEFAULTS = { HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader", HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm", HV_MIGRATION_PORT: 8002, - HV_MIGRATION_TYPE: HT_MIGRATION_NONLIVE, + HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE, HV_USE_LOCALTIME: False, + HV_BLOCKDEV_PREFIX: "hd", }, HT_KVM: { HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU", @@ -914,7 +1173,7 @@ HVC_DEFAULTS = { HV_MIGRATION_PORT: 8102, HV_MIGRATION_BANDWIDTH: 32, # MiB/s HV_MIGRATION_DOWNTIME: 30, # ms - HV_MIGRATION_TYPE: HT_MIGRATION_LIVE, + HV_MIGRATION_MODE: HT_MIGRATION_LIVE, HV_USE_LOCALTIME: False, HV_DISK_CACHE: HT_CACHE_DEFAULT, HV_SECURITY_MODEL: HT_SM_NONE, @@ -922,6 +1181,7 @@ HVC_DEFAULTS = { HV_KVM_FLAG: "", HV_VHOST_NET: False, HV_KVM_USE_CHROOT: False, + HV_MEM_PATH: "", }, HT_FAKE: { }, @@ -936,7 +1196,7 @@ HVC_DEFAULTS = { HVC_GLOBALS = frozenset([ HV_MIGRATION_PORT, HV_MIGRATION_BANDWIDTH, - HV_MIGRATION_TYPE, + HV_MIGRATION_MODE, ]) BEC_DEFAULTS = { @@ -945,6 +1205,10 @@ BEC_DEFAULTS = { BE_AUTO_BALANCE: True, } +NDC_DEFAULTS = { + ND_OOB_PROGRAM: None, + } + NICC_DEFAULTS = { NIC_MODE: NIC_MODE_BRIDGED, NIC_LINK: DEFAULT_BRIDGE, @@ -1049,3 +1313,19 @@ UIDPOOL_UID_MAX = 2**32-1 # Assuming 32 bit user-ids # Name or path of the pgrep command PGREP = "pgrep" + +# Name of the node group that gets created at cluster init or upgrade +INITIAL_NODE_GROUP_NAME = "default" + +# Possible values for NodeGroup.alloc_policy +ALLOC_POLICY_PREFERRED = "preferred" +ALLOC_POLICY_LAST_RESORT = "last_resort" +ALLOC_POLICY_UNALLOCABLE = "unallocable" +VALID_ALLOC_POLICIES = [ + ALLOC_POLICY_PREFERRED, + ALLOC_POLICY_LAST_RESORT, + ALLOC_POLICY_UNALLOCABLE, + ] + +# Temporary external/shared storage parameters +BLOCKDEV_DRIVER_MANUAL = "manual"