Package ganeti :: Module constants
[hide private]
[frames] | no frames]

Source Code for Module ganeti.constants

   1  # 
   2  # 
   3   
   4  # Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Google Inc. 
   5  # 
   6  # This program is free software; you can redistribute it and/or modify 
   7  # it under the terms of the GNU General Public License as published by 
   8  # the Free Software Foundation; either version 2 of the License, or 
   9  # (at your option) any later version. 
  10  # 
  11  # This program is distributed in the hope that it will be useful, but 
  12  # WITHOUT ANY WARRANTY; without even the implied warranty of 
  13  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
  14  # General Public License for more details. 
  15  # 
  16  # You should have received a copy of the GNU General Public License 
  17  # along with this program; if not, write to the Free Software 
  18  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
  19  # 02110-1301, USA. 
  20   
  21   
  22  """Module holding different constants.""" 
  23   
  24  import re 
  25  import socket 
  26   
  27  from ganeti import _autoconf 
  28  from ganeti import _vcsversion 
  29   
  30  # various versions 
  31  RELEASE_VERSION = _autoconf.PACKAGE_VERSION 
  32  OS_API_V10 = 10 
  33  OS_API_V15 = 15 
  34  OS_API_V20 = 20 
  35  OS_API_VERSIONS = frozenset([OS_API_V10, OS_API_V15, OS_API_V20]) 
  36  VCS_VERSION = _vcsversion.VCS_VERSION 
  37  EXPORT_VERSION = 0 
  38  RAPI_VERSION = 2 
  39   
  40   
  41  # Format for CONFIG_VERSION: 
  42  #   01 03 0123 = 01030123 
  43  #   ^^ ^^ ^^^^ 
  44  #   |  |  + Configuration version/revision 
  45  #   |  + Minor version 
  46  #   + Major version 
  47  # 
  48  # It stored as an integer. Make sure not to write an octal number. 
  49   
  50  # BuildVersion and SplitVersion must be in here because we can't import other 
  51  # modules. The cfgupgrade tool must be able to read and write version numbers 
  52  # and thus requires these functions. To avoid code duplication, they're kept in 
  53  # here. 
  54   
55 -def BuildVersion(major, minor, revision):
56 """Calculates int version number from major, minor and revision numbers. 57 58 Returns: int representing version number 59 60 """ 61 assert isinstance(major, int) 62 assert isinstance(minor, int) 63 assert isinstance(revision, int) 64 return (1000000 * major + 65 10000 * minor + 66 1 * revision)
67 68
69 -def SplitVersion(version):
70 """Splits version number stored in an int. 71 72 Returns: tuple; (major, minor, revision) 73 74 """ 75 assert isinstance(version, int) 76 77 (major, remainder) = divmod(version, 1000000) 78 (minor, revision) = divmod(remainder, 10000) 79 80 return (major, minor, revision)
81 82 83 CONFIG_MAJOR = int(_autoconf.VERSION_MAJOR) 84 CONFIG_MINOR = int(_autoconf.VERSION_MINOR) 85 CONFIG_REVISION = 0 86 CONFIG_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, CONFIG_REVISION) 87 88 #: RPC protocol version 89 PROTOCOL_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, 0) 90 91 # user separation 92 DAEMONS_GROUP = _autoconf.DAEMONS_GROUP 93 ADMIN_GROUP = _autoconf.ADMIN_GROUP 94 MASTERD_USER = _autoconf.MASTERD_USER 95 MASTERD_GROUP = _autoconf.MASTERD_GROUP 96 RAPI_USER = _autoconf.RAPI_USER 97 RAPI_GROUP = _autoconf.RAPI_GROUP 98 CONFD_USER = _autoconf.CONFD_USER 99 CONFD_GROUP = _autoconf.CONFD_GROUP 100 NODED_USER = _autoconf.NODED_USER 101 NODED_GROUP = _autoconf.NODED_GROUP 102 103 # cpu pinning separators and constants 104 CPU_PINNING_SEP = ":" 105 CPU_PINNING_ALL = "all" 106 # internal representation of "all" 107 CPU_PINNING_ALL_VAL = -1 108 # one "all" entry in a CPU list means CPU pinning is off 109 CPU_PINNING_OFF = [CPU_PINNING_ALL_VAL] 110 111 # A Xen-specific implementation detail - there is no way to actually say 112 # "use any cpu for pinning" in a Xen configuration file, as opposed to the 113 # command line, where you can say "xm vcpu-pin <domain> <vcpu> all". 114 # The workaround used in Xen is "0-63" (see source code function 115 # xm_vcpu_pin in <xen-source>/tools/python/xen/xm/main.py). 116 # To support future changes, the following constant is treated as a 117 # blackbox string that simply means use-any-cpu-for-pinning-under-xen. 118 CPU_PINNING_ALL_XEN = "0-63" 119 120 # A KVM-specific implementation detail - the following value is used 121 # to set CPU affinity to all processors (#0 through #31), per taskset 122 # man page. 123 # FIXME: This only works for machines with up to 32 CPU cores 124 CPU_PINNING_ALL_KVM = 0xFFFFFFFF 125 126 # Wipe 127 DD_CMD = "dd" 128 WIPE_BLOCK_SIZE = 1024 ** 2 129 MAX_WIPE_CHUNK = 1024 # 1GB 130 MIN_WIPE_CHUNK_PERCENT = 10 131 132 133 # file paths 134 DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti" 135 RUN_DIR = _autoconf.LOCALSTATEDIR + "/run" 136 RUN_GANETI_DIR = RUN_DIR + "/ganeti" 137 BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache" 138 DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks" 139 RUN_DIRS_MODE = 0775 140 SOCKET_DIR = RUN_GANETI_DIR + "/socket" 141 SECURE_DIR_MODE = 0700 142 SECURE_FILE_MODE = 0600 143 CRYPTO_KEYS_DIR = RUN_GANETI_DIR + "/crypto" 144 IMPORT_EXPORT_DIR = RUN_GANETI_DIR + "/import-export" 145 ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/" 146 LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock" 147 SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock" 148 # User-id pool lock directory 149 # The user-ids that are in use have a corresponding lock file in this directory 150 UIDPOOL_LOCKDIR = RUN_GANETI_DIR + "/uid-pool" 151 CLUSTER_CONF_FILE = DATA_DIR + "/config.data" 152 NODED_CERT_FILE = DATA_DIR + "/server.pem" 153 RAPI_CERT_FILE = DATA_DIR + "/rapi.pem" 154 CONFD_HMAC_KEY = DATA_DIR + "/hmac.key" 155 SPICE_CERT_FILE = DATA_DIR + "/spice.pem" 156 SPICE_CACERT_FILE = DATA_DIR + "/spice-ca.pem" 157 CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret" 158 INSTANCE_STATUS_FILE = RUN_GANETI_DIR + "/instance-status" 159 SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts" 160 RAPI_USERS_FILE = DATA_DIR + "/rapi/users" 161 QUEUE_DIR = DATA_DIR + "/queue" 162 DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util" 163 SETUP_SSH = _autoconf.TOOLSDIR + "/setup-ssh" 164 KVM_IFUP = _autoconf.PKGLIBDIR + "/kvm-ifup" 165 KVM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/kvm-console-wrapper" 166 XEN_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/xen-console-wrapper" 167 ETC_HOSTS = "/etc/hosts" 168 DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR 169 DEFAULT_SHARED_FILE_STORAGE_DIR = _autoconf.SHARED_FILE_STORAGE_DIR 170 ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE 171 ENABLE_SHARED_FILE_STORAGE = _autoconf.ENABLE_SHARED_FILE_STORAGE 172 SYSCONFDIR = _autoconf.SYSCONFDIR 173 TOOLSDIR = _autoconf.TOOLSDIR 174 CONF_DIR = SYSCONFDIR + "/ganeti" 175 USER_SCRIPTS_DIR = CONF_DIR + "/scripts" 176 ENABLE_CONFD = _autoconf.ENABLE_CONFD 177 HS_CONFD = _autoconf.HS_CONFD 178 179 #: Lock file for watcher, locked in shared mode by watcher; lock in exclusive 180 # mode to block watcher (see L{cli._RunWhileClusterStoppedHelper.Call} 181 WATCHER_LOCK_FILE = LOCK_DIR + "/ganeti-watcher.lock" 182 183 #: Status file for per-group watcher, locked in exclusive mode by watcher 184 WATCHER_GROUP_STATE_FILE = DATA_DIR + "/watcher.%s.data" 185 186 #: File for per-group instance status, merged into L{INSTANCE_STATUS_FILE} by 187 #: per-group processes 188 WATCHER_GROUP_INSTANCE_STATUS_FILE = DATA_DIR + "/watcher.%s.instance-status" 189 190 #: File containing Unix timestamp until which watcher should be paused 191 WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause" 192 193 # Master IP address setup scripts paths (default and user-provided) 194 DEFAULT_MASTER_SETUP_SCRIPT = TOOLSDIR + "/master-ip-setup" 195 EXTERNAL_MASTER_SETUP_SCRIPT = USER_SCRIPTS_DIR + "/master-ip-setup" 196 197 ALL_CERT_FILES = frozenset([ 198 NODED_CERT_FILE, 199 RAPI_CERT_FILE, 200 SPICE_CERT_FILE, 201 SPICE_CACERT_FILE, 202 ]) 203 204 MASTER_SOCKET = SOCKET_DIR + "/ganeti-master" 205 206 NODED = "ganeti-noded" 207 CONFD = "ganeti-confd" 208 RAPI = "ganeti-rapi" 209 MASTERD = "ganeti-masterd" 210 # used in the ganeti-nbma project 211 NLD = "ganeti-nld" 212 213 DAEMONS_PORTS = { 214 # daemon-name: ("proto", "default-port") 215 NODED: ("tcp", 1811), 216 CONFD: ("udp", 1814), 217 RAPI: ("tcp", 5080), 218 "ssh": ("tcp", 22), 219 # used in the ganeti-nbma project 220 NLD: ("udp", 1816), 221 } 222 DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1] 223 DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1] 224 DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1] 225 # used in the ganeti-nbma project 226 DEFAULT_NLD_PORT = DAEMONS_PORTS[NLD][1] 227 228 FIRST_DRBD_PORT = 11000 229 LAST_DRBD_PORT = 14999 230 231 LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/" 232 DAEMONS_LOGFILES = { 233 # "daemon-name": "logfile" 234 NODED: LOG_DIR + "node-daemon.log", 235 CONFD: LOG_DIR + "conf-daemon.log", 236 RAPI: LOG_DIR + "rapi-daemon.log", 237 MASTERD: LOG_DIR + "master-daemon.log", 238 # used in the ganeti-nbma project 239 NLD: LOG_DIR + "nl-daemon.log", 240 } 241 242 LOG_OS_DIR = LOG_DIR + "os" 243 LOG_WATCHER = LOG_DIR + "watcher.log" 244 LOG_COMMANDS = LOG_DIR + "commands.log" 245 LOG_BURNIN = LOG_DIR + "burnin.log" 246 LOG_SETUP_SSH = LOG_DIR + "setup-ssh.log" 247 248 DEV_CONSOLE = "/dev/console" 249 250 PROC_MOUNTS = "/proc/mounts" 251 252 # Local UniX Interface related constants 253 LUXI_EOM = "\3" 254 LUXI_VERSION = CONFIG_VERSION 255 256 # one of "no", "yes", "only" 257 SYSLOG_USAGE = _autoconf.SYSLOG_USAGE 258 SYSLOG_NO = "no" 259 SYSLOG_YES = "yes" 260 SYSLOG_ONLY = "only" 261 SYSLOG_SOCKET = "/dev/log" 262 263 OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH 264 EXPORT_DIR = _autoconf.EXPORT_DIR 265 266 EXPORT_CONF_FILE = "config.ini" 267 268 XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER 269 XEN_KERNEL = _autoconf.XEN_KERNEL 270 XEN_INITRD = _autoconf.XEN_INITRD 271 XEN_CMD_XM = "xm" 272 XEN_CMD_XL = "xl" 273 # FIXME: This will be made configurable using hvparams in Ganeti 2.7 274 XEN_CMD = _autoconf.XEN_CMD 275 # When the Xen toolstack used is "xl", live migration requires the source host 276 # to connect to the target host via ssh (xl runs this command). We need to pass 277 # the command xl runs some extra info so that it can use Ganeti's key 278 # verification and not fail. Note that this string is incomplete: it must be 279 # filled with the cluster name before being used. 280 XL_SSH_CMD = ("ssh -l root -oGlobalKnownHostsFile=%s" 281 " -oUserKnownHostsFile=/dev/null" 282 " -oCheckHostIp=no -oStrictHostKeyChecking=yes" 283 " -oHostKeyAlias=%%s") % SSH_KNOWN_HOSTS_FILE 284 285 KVM_PATH = _autoconf.KVM_PATH 286 KVM_KERNEL = _autoconf.KVM_KERNEL 287 SOCAT_PATH = _autoconf.SOCAT_PATH 288 SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE 289 SOCAT_USE_COMPRESS = _autoconf.SOCAT_USE_COMPRESS 290 SOCAT_ESCAPE_CODE = "0x1d" 291 292 #: Console as SSH command 293 CONS_SSH = "ssh" 294 295 #: Console as VNC server 296 CONS_VNC = "vnc" 297 298 #: Console as SPICE server 299 CONS_SPICE = "spice" 300 301 #: Display a message for console access 302 CONS_MESSAGE = "msg" 303 304 #: All console types 305 CONS_ALL = frozenset([CONS_SSH, CONS_VNC, CONS_SPICE, CONS_MESSAGE]) 306 307 # For RSA keys more bits are better, but they also make operations more 308 # expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year 309 # 2010 on. 310 RSA_KEY_BITS = 2048 311 312 # Ciphers allowed for SSL connections. For the format, see ciphers(1). A better 313 # way to disable ciphers would be to use the exclamation mark (!), but socat 314 # versions below 1.5 can't parse exclamation marks in options properly. When 315 # modifying the ciphers, ensure not to accidentially add something after it's 316 # been removed. Use the "openssl" utility to check the allowed ciphers, e.g. 317 # "openssl ciphers -v HIGH:-DES". 318 OPENSSL_CIPHERS = "HIGH:-DES:-3DES:-EXPORT:-ADH" 319 320 # Digest used to sign certificates ("openssl x509" uses SHA1 by default) 321 X509_CERT_SIGN_DIGEST = "SHA1" 322 323 # Default validity of certificates in days 324 X509_CERT_DEFAULT_VALIDITY = 365 * 5 325 326 # commonName (CN) used in certificates 327 X509_CERT_CN = "ganeti.example.com" 328 329 X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature" 330 331 IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export" 332 333 # Import/export daemon mode 334 IEM_IMPORT = "import" 335 IEM_EXPORT = "export" 336 337 # Import/export transport compression 338 IEC_NONE = "none" 339 IEC_GZIP = "gzip" 340 IEC_ALL = frozenset([ 341 IEC_NONE, 342 IEC_GZIP, 343 ]) 344 345 IE_CUSTOM_SIZE = "fd" 346 347 IE_MAGIC_RE = re.compile(r"^[-_.a-zA-Z0-9]{5,100}$") 348 349 # Import/export I/O 350 # Direct file I/O, equivalent to a shell's I/O redirection using '<' or '>' 351 IEIO_FILE = "file" 352 # Raw block device I/O using "dd" 353 IEIO_RAW_DISK = "raw" 354 # OS definition import/export script 355 IEIO_SCRIPT = "script" 356 357 VALUE_DEFAULT = "default" 358 VALUE_AUTO = "auto" 359 VALUE_GENERATE = "generate" 360 VALUE_NONE = "none" 361 VALUE_TRUE = "true" 362 VALUE_FALSE = "false" 363 364 # External script validation mask 365 EXT_PLUGIN_MASK = re.compile("^[a-zA-Z0-9_-]+$") 366 367 # hooks-related constants 368 HOOKS_BASE_DIR = CONF_DIR + "/hooks" 369 HOOKS_PHASE_PRE = "pre" 370 HOOKS_PHASE_POST = "post" 371 HOOKS_NAME_CFGUPDATE = "config-update" 372 HOOKS_NAME_WATCHER = "watcher" 373 HOOKS_VERSION = 2 374 HOOKS_PATH = "/sbin:/bin:/usr/sbin:/usr/bin" 375 376 # hooks subject type (what object type does the LU deal with) 377 HTYPE_CLUSTER = "CLUSTER" 378 HTYPE_NODE = "NODE" 379 HTYPE_GROUP = "GROUP" 380 HTYPE_INSTANCE = "INSTANCE" 381 382 HKR_SKIP = 0 383 HKR_FAIL = 1 384 HKR_SUCCESS = 2 385 386 # Storage types 387 ST_FILE = "file" 388 ST_LVM_PV = "lvm-pv" 389 ST_LVM_VG = "lvm-vg" 390 391 # Storage fields 392 # first two are valid in LU context only, not passed to backend 393 SF_NODE = "node" 394 SF_TYPE = "type" 395 # and the rest are valid in backend 396 SF_NAME = "name" 397 SF_SIZE = "size" 398 SF_FREE = "free" 399 SF_USED = "used" 400 SF_ALLOCATABLE = "allocatable" 401 402 # Storage operations 403 SO_FIX_CONSISTENCY = "fix-consistency" 404 405 # Available fields per storage type 406 VALID_STORAGE_FIELDS = frozenset([ 407 SF_NAME, 408 SF_TYPE, 409 SF_SIZE, 410 SF_USED, 411 SF_FREE, 412 SF_ALLOCATABLE 413 ]) 414 415 VALID_STORAGE_TYPES = frozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG]) 416 417 MODIFIABLE_STORAGE_FIELDS = { 418 ST_LVM_PV: frozenset([SF_ALLOCATABLE]), 419 } 420 421 VALID_STORAGE_OPERATIONS = { 422 ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]), 423 } 424 425 # Local disk status 426 # Note: Code depends on LDS_OKAY < LDS_UNKNOWN < LDS_FAULTY 427 (LDS_OKAY, 428 LDS_UNKNOWN, 429 LDS_FAULTY) = range(1, 4) 430 431 # disk template types 432 DT_DISKLESS = "diskless" 433 DT_PLAIN = "plain" 434 DT_DRBD8 = "drbd" 435 DT_FILE = "file" 436 DT_SHARED_FILE = "sharedfile" 437 DT_BLOCK = "blockdev" 438 DT_RBD = "rbd" 439 440 # the set of network-mirrored disk templates 441 DTS_INT_MIRROR = frozenset([DT_DRBD8]) 442 443 # the set of externally-mirrored disk templates (e.g. SAN, NAS) 444 DTS_EXT_MIRROR = frozenset([DT_SHARED_FILE, DT_BLOCK, DT_RBD]) 445 446 # the set of non-lvm-based disk templates 447 DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE, DT_SHARED_FILE, 448 DT_BLOCK, DT_RBD]) 449 450 # the set of disk templates which can be grown 451 DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE, DT_SHARED_FILE, DT_RBD]) 452 453 # the set of disk templates that allow adoption 454 DTS_MAY_ADOPT = frozenset([DT_PLAIN, DT_BLOCK]) 455 456 # the set of disk templates that *must* use adoption 457 DTS_MUST_ADOPT = frozenset([DT_BLOCK]) 458 459 # the set of disk templates that allow migrations 460 DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR) 461 462 # the set of file based disk templates 463 DTS_FILEBASED = frozenset([DT_FILE, DT_SHARED_FILE]) 464 465 # logical disk types 466 LD_LV = "lvm" 467 LD_DRBD8 = "drbd8" 468 LD_FILE = "file" 469 LD_BLOCKDEV = "blockdev" 470 LD_RBD = "rbd" 471 LOGICAL_DISK_TYPES = frozenset([ 472 LD_LV, 473 LD_DRBD8, 474 LD_FILE, 475 LD_BLOCKDEV, 476 LD_RBD, 477 ]) 478 479 LDS_BLOCK = frozenset([LD_LV, LD_DRBD8, LD_BLOCKDEV, LD_RBD]) 480 481 # drbd constants 482 DRBD_HMAC_ALG = "md5" 483 DRBD_NET_PROTOCOL = "C" 484 485 # drbd barrier types 486 DRBD_B_NONE = "n" 487 DRBD_B_DISK_BARRIERS = "b" 488 DRBD_B_DISK_DRAIN = "d" 489 DRBD_B_DISK_FLUSH = "f" 490 491 # Valid barrier combinations: "n" or any non-null subset of "bfd" 492 DRBD_VALID_BARRIER_OPT = frozenset([ 493 frozenset([DRBD_B_NONE]), 494 frozenset([DRBD_B_DISK_BARRIERS]), 495 frozenset([DRBD_B_DISK_DRAIN]), 496 frozenset([DRBD_B_DISK_FLUSH]), 497 frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]), 498 frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]), 499 frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]), 500 frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]), 501 frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]), 502 ]) 503 504 # rbd tool command 505 RBD_CMD = "rbd" 506 507 # file backend driver 508 FD_LOOP = "loop" 509 FD_BLKTAP = "blktap" 510 511 # the set of drbd-like disk types 512 LDS_DRBD = frozenset([LD_DRBD8]) 513 514 # disk access mode 515 DISK_RDONLY = "ro" 516 DISK_RDWR = "rw" 517 DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR]) 518 519 # disk replacement mode 520 REPLACE_DISK_PRI = "replace_on_primary" # replace disks on primary 521 REPLACE_DISK_SEC = "replace_on_secondary" # replace disks on secondary 522 REPLACE_DISK_CHG = "replace_new_secondary" # change secondary node 523 REPLACE_DISK_AUTO = "replace_auto" 524 REPLACE_MODES = frozenset([ 525 REPLACE_DISK_PRI, 526 REPLACE_DISK_SEC, 527 REPLACE_DISK_CHG, 528 REPLACE_DISK_AUTO, 529 ]) 530 531 # Instance export mode 532 EXPORT_MODE_LOCAL = "local" 533 EXPORT_MODE_REMOTE = "remote" 534 EXPORT_MODES = frozenset([ 535 EXPORT_MODE_LOCAL, 536 EXPORT_MODE_REMOTE, 537 ]) 538 539 # instance creation modes 540 INSTANCE_CREATE = "create" 541 INSTANCE_IMPORT = "import" 542 INSTANCE_REMOTE_IMPORT = "remote-import" 543 INSTANCE_CREATE_MODES = frozenset([ 544 INSTANCE_CREATE, 545 INSTANCE_IMPORT, 546 INSTANCE_REMOTE_IMPORT, 547 ]) 548 549 # Remote import/export handshake message and version 550 RIE_VERSION = 0 551 RIE_HANDSHAKE = "Hi, I'm Ganeti" 552 553 # Remote import/export certificate validity in seconds 554 RIE_CERT_VALIDITY = 24 * 60 * 60 555 556 # Overall timeout for establishing connection 557 RIE_CONNECT_TIMEOUT = 180 558 559 # Export only: how long to wait per connection attempt (seconds) 560 RIE_CONNECT_ATTEMPT_TIMEOUT = 20 561 562 # Export only: number of attempts to connect 563 RIE_CONNECT_RETRIES = 10 564 565 #: Give child process up to 5 seconds to exit after sending a signal 566 CHILD_LINGER_TIMEOUT = 5.0 567 568 DISK_TEMPLATES = frozenset([ 569 DT_DISKLESS, 570 DT_PLAIN, 571 DT_DRBD8, 572 DT_FILE, 573 DT_SHARED_FILE, 574 DT_BLOCK, 575 DT_RBD 576 ]) 577 578 FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP]) 579 580 # import/export config options 581 INISECT_EXP = "export" 582 INISECT_INS = "instance" 583 INISECT_HYP = "hypervisor" 584 INISECT_BEP = "backend" 585 INISECT_OSP = "os" 586 587 # dynamic device modification 588 DDM_ADD = "add" 589 DDM_MODIFY = "modify" 590 DDM_REMOVE = "remove" 591 DDMS_VALUES = frozenset([DDM_ADD, DDM_REMOVE]) 592 DDMS_VALUES_WITH_MODIFY = (DDMS_VALUES | frozenset([ 593 DDM_MODIFY, 594 ])) 595 # TODO: DDM_SWAP, DDM_MOVE? 596 597 # common exit codes 598 EXIT_SUCCESS = 0 599 EXIT_FAILURE = 1 600 EXIT_NOTCLUSTER = 5 601 EXIT_NOTMASTER = 11 602 EXIT_NODESETUP_ERROR = 12 603 EXIT_CONFIRMATION = 13 # need user confirmation 604 605 #: Exit code for query operations with unknown fields 606 EXIT_UNKNOWN_FIELD = 14 607 608 # tags 609 TAG_CLUSTER = "cluster" 610 TAG_NODEGROUP = "nodegroup" 611 TAG_NODE = "node" 612 TAG_INSTANCE = "instance" 613 VALID_TAG_TYPES = frozenset([ 614 TAG_CLUSTER, 615 TAG_NODEGROUP, 616 TAG_NODE, 617 TAG_INSTANCE, 618 ]) 619 MAX_TAG_LEN = 128 620 MAX_TAGS_PER_OBJ = 4096 621 622 # others 623 DEFAULT_BRIDGE = "xen-br0" 624 CLASSIC_DRBD_SYNC_SPEED = 60 * 1024 # 60 MiB, expressed in KiB 625 IP4_ADDRESS_LOCALHOST = "127.0.0.1" 626 IP4_ADDRESS_ANY = "0.0.0.0" 627 IP6_ADDRESS_LOCALHOST = "::1" 628 IP6_ADDRESS_ANY = "::" 629 IP4_VERSION = 4 630 IP6_VERSION = 6 631 VALID_IP_VERSIONS = frozenset([IP4_VERSION, IP6_VERSION]) 632 # for export to htools 633 IP4_FAMILY = socket.AF_INET 634 IP6_FAMILY = socket.AF_INET6 635 636 TCP_PING_TIMEOUT = 10 637 GANETI_RUNAS = "root" 638 DEFAULT_VG = "xenvg" 639 DEFAULT_DRBD_HELPER = "/bin/true" 640 MIN_VG_SIZE = 20480 641 DEFAULT_MAC_PREFIX = "aa:00:00" 642 # default maximum instance wait time, in seconds. 643 DEFAULT_SHUTDOWN_TIMEOUT = 120 644 NODE_MAX_CLOCK_SKEW = 150 645 # Time for an intra-cluster disk transfer to wait for a connection 646 DISK_TRANSFER_CONNECT_TIMEOUT = 60 647 # Disk index separator 648 DISK_SEPARATOR = _autoconf.DISK_SEPARATOR 649 IP_COMMAND_PATH = _autoconf.IP_PATH 650 651 #: Key for job IDs in opcode result 652 JOB_IDS_KEY = "jobs" 653 654 # runparts results 655 (RUNPARTS_SKIP, 656 RUNPARTS_RUN, 657 RUNPARTS_ERR) = range(3) 658 659 RUNPARTS_STATUS = frozenset([RUNPARTS_SKIP, RUNPARTS_RUN, RUNPARTS_ERR]) 660 661 # RPC constants 662 (RPC_ENCODING_NONE, 663 RPC_ENCODING_ZLIB_BASE64) = range(2) 664 665 # os related constants 666 OS_SCRIPT_CREATE = "create" 667 OS_SCRIPT_IMPORT = "import" 668 OS_SCRIPT_EXPORT = "export" 669 OS_SCRIPT_RENAME = "rename" 670 OS_SCRIPT_VERIFY = "verify" 671 OS_SCRIPTS = frozenset([ 672 OS_SCRIPT_CREATE, 673 OS_SCRIPT_IMPORT, 674 OS_SCRIPT_EXPORT, 675 OS_SCRIPT_RENAME, 676 OS_SCRIPT_VERIFY 677 ]) 678 679 OS_API_FILE = "ganeti_api_version" 680 OS_VARIANTS_FILE = "variants.list" 681 OS_PARAMETERS_FILE = "parameters.list" 682 683 OS_VALIDATE_PARAMETERS = "parameters" 684 OS_VALIDATE_CALLS = frozenset([OS_VALIDATE_PARAMETERS]) 685 686 # ssh constants 687 SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR 688 SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key" 689 SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub" 690 SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key" 691 SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub" 692 SSH = "ssh" 693 SCP = "scp" 694 695 # reboot types 696 INSTANCE_REBOOT_SOFT = "soft" 697 INSTANCE_REBOOT_HARD = "hard" 698 INSTANCE_REBOOT_FULL = "full" 699 700 REBOOT_TYPES = frozenset([ 701 INSTANCE_REBOOT_SOFT, 702 INSTANCE_REBOOT_HARD, 703 INSTANCE_REBOOT_FULL 704 ]) 705 706 # instance reboot behaviors 707 INSTANCE_REBOOT_ALLOWED = "reboot" 708 INSTANCE_REBOOT_EXIT = "exit" 709 710 REBOOT_BEHAVIORS = frozenset([ 711 INSTANCE_REBOOT_ALLOWED, 712 INSTANCE_REBOOT_EXIT 713 ]) 714 715 VTYPE_STRING = "string" 716 VTYPE_MAYBE_STRING = "maybe-string" 717 VTYPE_BOOL = "bool" 718 VTYPE_SIZE = "size" # size, in MiBs 719 VTYPE_INT = "int" 720 ENFORCEABLE_TYPES = frozenset([ 721 VTYPE_STRING, 722 VTYPE_MAYBE_STRING, 723 VTYPE_BOOL, 724 VTYPE_SIZE, 725 VTYPE_INT, 726 ]) 727 728 # Constant representing that the user does not specify any IP version 729 IFACE_NO_IP_VERSION_SPECIFIED = 0 730 731 # HV parameter names (global namespace) 732 HV_BOOT_ORDER = "boot_order" 733 HV_CDROM_IMAGE_PATH = "cdrom_image_path" 734 HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path" 735 HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path" 736 HV_NIC_TYPE = "nic_type" 737 HV_DISK_TYPE = "disk_type" 738 HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type" 739 HV_VNC_BIND_ADDRESS = "vnc_bind_address" 740 HV_VNC_PASSWORD_FILE = "vnc_password_file" 741 HV_VNC_TLS = "vnc_tls" 742 HV_VNC_X509 = "vnc_x509_path" 743 HV_VNC_X509_VERIFY = "vnc_x509_verify" 744 HV_KVM_SPICE_BIND = "spice_bind" 745 HV_KVM_SPICE_IP_VERSION = "spice_ip_version" 746 HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file" 747 HV_KVM_SPICE_LOSSLESS_IMG_COMPR = "spice_image_compression" 748 HV_KVM_SPICE_JPEG_IMG_COMPR = "spice_jpeg_wan_compression" 749 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR = "spice_zlib_glz_wan_compression" 750 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION = "spice_streaming_video" 751 HV_KVM_SPICE_AUDIO_COMPR = "spice_playback_compression" 752 HV_KVM_SPICE_USE_TLS = "spice_use_tls" 753 HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers" 754 HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent" 755 HV_ACPI = "acpi" 756 HV_PAE = "pae" 757 HV_USE_BOOTLOADER = "use_bootloader" 758 HV_BOOTLOADER_ARGS = "bootloader_args" 759 HV_BOOTLOADER_PATH = "bootloader_path" 760 HV_KERNEL_ARGS = "kernel_args" 761 HV_KERNEL_PATH = "kernel_path" 762 HV_INITRD_PATH = "initrd_path" 763 HV_ROOT_PATH = "root_path" 764 HV_SERIAL_CONSOLE = "serial_console" 765 HV_USB_MOUSE = "usb_mouse" 766 HV_KEYMAP = "keymap" 767 HV_DEVICE_MODEL = "device_model" 768 HV_INIT_SCRIPT = "init_script" 769 HV_MIGRATION_PORT = "migration_port" 770 HV_MIGRATION_BANDWIDTH = "migration_bandwidth" 771 HV_MIGRATION_DOWNTIME = "migration_downtime" 772 HV_MIGRATION_MODE = "migration_mode" 773 HV_USE_LOCALTIME = "use_localtime" 774 HV_DISK_CACHE = "disk_cache" 775 HV_SECURITY_MODEL = "security_model" 776 HV_SECURITY_DOMAIN = "security_domain" 777 HV_KVM_FLAG = "kvm_flag" 778 HV_VHOST_NET = "vhost_net" 779 HV_KVM_USE_CHROOT = "use_chroot" 780 HV_CPU_MASK = "cpu_mask" 781 HV_MEM_PATH = "mem_path" 782 HV_BLOCKDEV_PREFIX = "blockdev_prefix" 783 HV_REBOOT_BEHAVIOR = "reboot_behavior" 784 785 HVS_PARAMETER_TYPES = { 786 HV_BOOT_ORDER: VTYPE_STRING, 787 HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING, 788 HV_CDROM_IMAGE_PATH: VTYPE_STRING, 789 HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING, 790 HV_NIC_TYPE: VTYPE_STRING, 791 HV_DISK_TYPE: VTYPE_STRING, 792 HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING, 793 HV_VNC_PASSWORD_FILE: VTYPE_STRING, 794 HV_VNC_BIND_ADDRESS: VTYPE_STRING, 795 HV_VNC_TLS: VTYPE_BOOL, 796 HV_VNC_X509: VTYPE_STRING, 797 HV_VNC_X509_VERIFY: VTYPE_BOOL, 798 HV_KVM_SPICE_BIND: VTYPE_STRING, 799 HV_KVM_SPICE_IP_VERSION: VTYPE_INT, 800 HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING, 801 HV_KVM_SPICE_LOSSLESS_IMG_COMPR: VTYPE_STRING, 802 HV_KVM_SPICE_JPEG_IMG_COMPR: VTYPE_STRING, 803 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: VTYPE_STRING, 804 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: VTYPE_STRING, 805 HV_KVM_SPICE_AUDIO_COMPR: VTYPE_BOOL, 806 HV_KVM_SPICE_USE_TLS: VTYPE_BOOL, 807 HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING, 808 HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL, 809 HV_ACPI: VTYPE_BOOL, 810 HV_PAE: VTYPE_BOOL, 811 HV_USE_BOOTLOADER: VTYPE_BOOL, 812 HV_BOOTLOADER_PATH: VTYPE_STRING, 813 HV_BOOTLOADER_ARGS: VTYPE_STRING, 814 HV_KERNEL_PATH: VTYPE_STRING, 815 HV_KERNEL_ARGS: VTYPE_STRING, 816 HV_INITRD_PATH: VTYPE_STRING, 817 HV_ROOT_PATH: VTYPE_MAYBE_STRING, 818 HV_SERIAL_CONSOLE: VTYPE_BOOL, 819 HV_USB_MOUSE: VTYPE_STRING, 820 HV_KEYMAP: VTYPE_STRING, 821 HV_DEVICE_MODEL: VTYPE_STRING, 822 HV_INIT_SCRIPT: VTYPE_STRING, 823 HV_MIGRATION_PORT: VTYPE_INT, 824 HV_MIGRATION_BANDWIDTH: VTYPE_INT, 825 HV_MIGRATION_DOWNTIME: VTYPE_INT, 826 HV_MIGRATION_MODE: VTYPE_STRING, 827 HV_USE_LOCALTIME: VTYPE_BOOL, 828 HV_DISK_CACHE: VTYPE_STRING, 829 HV_SECURITY_MODEL: VTYPE_STRING, 830 HV_SECURITY_DOMAIN: VTYPE_STRING, 831 HV_KVM_FLAG: VTYPE_STRING, 832 HV_VHOST_NET: VTYPE_BOOL, 833 HV_KVM_USE_CHROOT: VTYPE_BOOL, 834 HV_CPU_MASK: VTYPE_STRING, 835 HV_MEM_PATH: VTYPE_STRING, 836 HV_BLOCKDEV_PREFIX: VTYPE_STRING, 837 HV_REBOOT_BEHAVIOR: VTYPE_STRING, 838 } 839 840 HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys()) 841 842 # Migration statuses 843 HV_MIGRATION_COMPLETED = "completed" 844 HV_MIGRATION_ACTIVE = "active" 845 HV_MIGRATION_FAILED = "failed" 846 HV_MIGRATION_CANCELLED = "cancelled" 847 848 HV_MIGRATION_VALID_STATUSES = frozenset([ 849 HV_MIGRATION_COMPLETED, 850 HV_MIGRATION_ACTIVE, 851 HV_MIGRATION_FAILED, 852 HV_MIGRATION_CANCELLED, 853 ]) 854 855 HV_MIGRATION_FAILED_STATUSES = frozenset([ 856 HV_MIGRATION_FAILED, 857 HV_MIGRATION_CANCELLED, 858 ]) 859 860 # KVM-specific statuses 861 HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES 862 863 # Node info keys 864 HV_NODEINFO_KEY_VERSION = "hv_version" 865 866 # Hypervisor state 867 HVST_MEMORY_TOTAL = "mem_total" 868 HVST_MEMORY_NODE = "mem_node" 869 HVST_MEMORY_HV = "mem_hv" 870 HVST_CPU_TOTAL = "cpu_total" 871 HVST_CPU_NODE = "cpu_node" 872 873 HVST_DEFAULTS = { 874 HVST_MEMORY_TOTAL: 0, 875 HVST_MEMORY_NODE: 0, 876 HVST_MEMORY_HV: 0, 877 HVST_CPU_TOTAL: 1, 878 HVST_CPU_NODE: 1, 879 } 880 881 HVSTS_PARAMETER_TYPES = { 882 HVST_MEMORY_TOTAL: VTYPE_INT, 883 HVST_MEMORY_NODE: VTYPE_INT, 884 HVST_MEMORY_HV: VTYPE_INT, 885 HVST_CPU_TOTAL: VTYPE_INT, 886 HVST_CPU_NODE: VTYPE_INT, 887 } 888 889 HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys()) 890 891 # Disk state 892 DS_DISK_TOTAL = "disk_total" 893 DS_DISK_RESERVED = "disk_reserved" 894 DS_DISK_OVERHEAD = "disk_overhead" 895 896 DS_DEFAULTS = { 897 DS_DISK_TOTAL: 0, 898 DS_DISK_RESERVED: 0, 899 DS_DISK_OVERHEAD: 0, 900 } 901 902 DSS_PARAMETER_TYPES = { 903 DS_DISK_TOTAL: VTYPE_INT, 904 DS_DISK_RESERVED: VTYPE_INT, 905 DS_DISK_OVERHEAD: VTYPE_INT, 906 } 907 908 DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys()) 909 DS_VALID_TYPES = frozenset([LD_LV]) 910 911 # Backend parameter names 912 BE_MEMORY = "memory" # deprecated and replaced by max and min mem 913 BE_MAXMEM = "maxmem" 914 BE_MINMEM = "minmem" 915 BE_VCPUS = "vcpus" 916 BE_AUTO_BALANCE = "auto_balance" 917 BE_ALWAYS_FAILOVER = "always_failover" 918 BE_SPINDLE_USE = "spindle_use" 919 920 BES_PARAMETER_TYPES = { 921 BE_MAXMEM: VTYPE_SIZE, 922 BE_MINMEM: VTYPE_SIZE, 923 BE_VCPUS: VTYPE_INT, 924 BE_AUTO_BALANCE: VTYPE_BOOL, 925 BE_ALWAYS_FAILOVER: VTYPE_BOOL, 926 BE_SPINDLE_USE: VTYPE_INT, 927 } 928 929 BES_PARAMETER_COMPAT = { 930 BE_MEMORY: VTYPE_SIZE, 931 } 932 BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES) 933 934 BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys()) 935 936 # instance specs 937 ISPEC_MEM_SIZE = "memory-size" 938 ISPEC_CPU_COUNT = "cpu-count" 939 ISPEC_DISK_COUNT = "disk-count" 940 ISPEC_DISK_SIZE = "disk-size" 941 ISPEC_NIC_COUNT = "nic-count" 942 ISPEC_SPINDLE_USE = "spindle-use" 943 944 ISPECS_PARAMETER_TYPES = { 945 ISPEC_MEM_SIZE: VTYPE_INT, 946 ISPEC_CPU_COUNT: VTYPE_INT, 947 ISPEC_DISK_COUNT: VTYPE_INT, 948 ISPEC_DISK_SIZE: VTYPE_INT, 949 ISPEC_NIC_COUNT: VTYPE_INT, 950 ISPEC_SPINDLE_USE: VTYPE_INT, 951 } 952 953 ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys()) 954 955 ISPECS_MIN = "min" 956 ISPECS_MAX = "max" 957 ISPECS_STD = "std" 958 IPOLICY_DTS = "disk-templates" 959 IPOLICY_VCPU_RATIO = "vcpu-ratio" 960 IPOLICY_SPINDLE_RATIO = "spindle-ratio" 961 962 IPOLICY_ISPECS = frozenset([ 963 ISPECS_MIN, 964 ISPECS_MAX, 965 ISPECS_STD, 966 ]) 967 968 IPOLICY_PARAMETERS = frozenset([ 969 IPOLICY_VCPU_RATIO, 970 IPOLICY_SPINDLE_RATIO, 971 ]) 972 973 IPOLICY_ALL_KEYS = (IPOLICY_ISPECS | 974 IPOLICY_PARAMETERS | 975 frozenset([IPOLICY_DTS])) 976 977 # Node parameter names 978 ND_OOB_PROGRAM = "oob_program" 979 ND_SPINDLE_COUNT = "spindle_count" 980 981 NDS_PARAMETER_TYPES = { 982 ND_OOB_PROGRAM: VTYPE_MAYBE_STRING, 983 ND_SPINDLE_COUNT: VTYPE_INT, 984 } 985 986 NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys()) 987 988 # Logical Disks parameters 989 LDP_RESYNC_RATE = "resync-rate" 990 LDP_STRIPES = "stripes" 991 LDP_BARRIERS = "disabled-barriers" 992 LDP_NO_META_FLUSH = "disable-meta-flush" 993 LDP_DEFAULT_METAVG = "default-metavg" 994 LDP_DISK_CUSTOM = "disk-custom" 995 LDP_NET_CUSTOM = "net-custom" 996 LDP_DYNAMIC_RESYNC = "dynamic-resync" 997 LDP_PLAN_AHEAD = "c-plan-ahead" 998 LDP_FILL_TARGET = "c-fill-target" 999 LDP_DELAY_TARGET = "c-delay-target" 1000 LDP_MAX_RATE = "c-max-rate" 1001 LDP_MIN_RATE = "c-min-rate" 1002 LDP_POOL = "pool" 1003 DISK_LD_TYPES = { 1004 LDP_RESYNC_RATE: VTYPE_INT, 1005 LDP_STRIPES: VTYPE_INT, 1006 LDP_BARRIERS: VTYPE_STRING, 1007 LDP_NO_META_FLUSH: VTYPE_BOOL, 1008 LDP_DEFAULT_METAVG: VTYPE_STRING, 1009 LDP_DISK_CUSTOM: VTYPE_STRING, 1010 LDP_NET_CUSTOM: VTYPE_STRING, 1011 LDP_DYNAMIC_RESYNC: VTYPE_BOOL, 1012 LDP_PLAN_AHEAD: VTYPE_INT, 1013 LDP_FILL_TARGET: VTYPE_INT, 1014 LDP_DELAY_TARGET: VTYPE_INT, 1015 LDP_MAX_RATE: VTYPE_INT, 1016 LDP_MIN_RATE: VTYPE_INT, 1017 LDP_POOL: VTYPE_STRING, 1018 } 1019 DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys()) 1020 1021 # Disk template parameters (can be set/changed by the user via gnt-cluster and 1022 # gnt-group) 1023 DRBD_RESYNC_RATE = "resync-rate" 1024 DRBD_DATA_STRIPES = "data-stripes" 1025 DRBD_META_STRIPES = "meta-stripes" 1026 DRBD_DISK_BARRIERS = "disk-barriers" 1027 DRBD_META_BARRIERS = "meta-barriers" 1028 DRBD_DEFAULT_METAVG = "metavg" 1029 DRBD_DISK_CUSTOM = "disk-custom" 1030 DRBD_NET_CUSTOM = "net-custom" 1031 DRBD_DYNAMIC_RESYNC = "dynamic-resync" 1032 DRBD_PLAN_AHEAD = "c-plan-ahead" 1033 DRBD_FILL_TARGET = "c-fill-target" 1034 DRBD_DELAY_TARGET = "c-delay-target" 1035 DRBD_MAX_RATE = "c-max-rate" 1036 DRBD_MIN_RATE = "c-min-rate" 1037 LV_STRIPES = "stripes" 1038 RBD_POOL = "pool" 1039 DISK_DT_TYPES = { 1040 DRBD_RESYNC_RATE: VTYPE_INT, 1041 DRBD_DATA_STRIPES: VTYPE_INT, 1042 DRBD_META_STRIPES: VTYPE_INT, 1043 DRBD_DISK_BARRIERS: VTYPE_STRING, 1044 DRBD_META_BARRIERS: VTYPE_BOOL, 1045 DRBD_DEFAULT_METAVG: VTYPE_STRING, 1046 DRBD_DISK_CUSTOM: VTYPE_STRING, 1047 DRBD_NET_CUSTOM: VTYPE_STRING, 1048 DRBD_DYNAMIC_RESYNC: VTYPE_BOOL, 1049 DRBD_PLAN_AHEAD: VTYPE_INT, 1050 DRBD_FILL_TARGET: VTYPE_INT, 1051 DRBD_DELAY_TARGET: VTYPE_INT, 1052 DRBD_MAX_RATE: VTYPE_INT, 1053 DRBD_MIN_RATE: VTYPE_INT, 1054 LV_STRIPES: VTYPE_INT, 1055 RBD_POOL: VTYPE_STRING, 1056 } 1057 1058 DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys()) 1059 1060 # OOB supported commands 1061 OOB_POWER_ON = "power-on" 1062 OOB_POWER_OFF = "power-off" 1063 OOB_POWER_CYCLE = "power-cycle" 1064 OOB_POWER_STATUS = "power-status" 1065 OOB_HEALTH = "health" 1066 1067 OOB_COMMANDS = frozenset([ 1068 OOB_POWER_ON, 1069 OOB_POWER_OFF, 1070 OOB_POWER_CYCLE, 1071 OOB_POWER_STATUS, 1072 OOB_HEALTH 1073 ]) 1074 1075 OOB_POWER_STATUS_POWERED = "powered" 1076 1077 OOB_TIMEOUT = 60 # 60 seconds 1078 OOB_POWER_DELAY = 2.0 # 2 seconds 1079 1080 OOB_STATUS_OK = "OK" 1081 OOB_STATUS_WARNING = "WARNING" 1082 OOB_STATUS_CRITICAL = "CRITICAL" 1083 OOB_STATUS_UNKNOWN = "UNKNOWN" 1084 1085 OOB_STATUSES = frozenset([ 1086 OOB_STATUS_OK, 1087 OOB_STATUS_WARNING, 1088 OOB_STATUS_CRITICAL, 1089 OOB_STATUS_UNKNOWN, 1090 ]) 1091 1092 # Instance Parameters Profile 1093 PP_DEFAULT = "default" 1094 1095 # NIC_* constants are used inside the ganeti config 1096 NIC_MODE = "mode" 1097 NIC_LINK = "link" 1098 1099 NIC_MODE_BRIDGED = "bridged" 1100 NIC_MODE_ROUTED = "routed" 1101 1102 NIC_VALID_MODES = frozenset([NIC_MODE_BRIDGED, NIC_MODE_ROUTED]) 1103 1104 NICS_PARAMETER_TYPES = { 1105 NIC_MODE: VTYPE_STRING, 1106 NIC_LINK: VTYPE_STRING, 1107 } 1108 1109 NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys()) 1110 1111 # IDISK_* constants are used in opcodes, to create/change disks 1112 IDISK_SIZE = "size" 1113 IDISK_MODE = "mode" 1114 IDISK_ADOPT = "adopt" 1115 IDISK_VG = "vg" 1116 IDISK_METAVG = "metavg" 1117 IDISK_PARAMS_TYPES = { 1118 IDISK_SIZE: VTYPE_SIZE, 1119 IDISK_MODE: VTYPE_STRING, 1120 IDISK_ADOPT: VTYPE_STRING, 1121 IDISK_VG: VTYPE_STRING, 1122 IDISK_METAVG: VTYPE_STRING, 1123 } 1124 IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys()) 1125 1126 # INIC_* constants are used in opcodes, to create/change nics 1127 INIC_MAC = "mac" 1128 INIC_IP = "ip" 1129 INIC_MODE = "mode" 1130 INIC_LINK = "link" 1131 INIC_PARAMS_TYPES = { 1132 INIC_IP: VTYPE_MAYBE_STRING, 1133 INIC_LINK: VTYPE_STRING, 1134 INIC_MAC: VTYPE_STRING, 1135 INIC_MODE: VTYPE_STRING, 1136 } 1137 INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys()) 1138 1139 # Hypervisor constants 1140 HT_XEN_PVM = "xen-pvm" 1141 HT_FAKE = "fake" 1142 HT_XEN_HVM = "xen-hvm" 1143 HT_KVM = "kvm" 1144 HT_CHROOT = "chroot" 1145 HT_LXC = "lxc" 1146 HYPER_TYPES = frozenset([ 1147 HT_XEN_PVM, 1148 HT_FAKE, 1149 HT_XEN_HVM, 1150 HT_KVM, 1151 HT_CHROOT, 1152 HT_LXC, 1153 ]) 1154 HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM]) 1155 1156 VNC_BASE_PORT = 5900 1157 VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password" 1158 VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY 1159 1160 # NIC types 1161 HT_NIC_RTL8139 = "rtl8139" 1162 HT_NIC_NE2K_PCI = "ne2k_pci" 1163 HT_NIC_NE2K_ISA = "ne2k_isa" 1164 HT_NIC_I82551 = "i82551" 1165 HT_NIC_I85557B = "i82557b" 1166 HT_NIC_I8259ER = "i82559er" 1167 HT_NIC_PCNET = "pcnet" 1168 HT_NIC_E1000 = "e1000" 1169 HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual" 1170 1171 HT_HVM_VALID_NIC_TYPES = frozenset([ 1172 HT_NIC_RTL8139, 1173 HT_NIC_NE2K_PCI, 1174 HT_NIC_E1000, 1175 HT_NIC_NE2K_ISA, 1176 HT_NIC_PARAVIRTUAL 1177 ]) 1178 HT_KVM_VALID_NIC_TYPES = frozenset([ 1179 HT_NIC_RTL8139, 1180 HT_NIC_NE2K_PCI, 1181 HT_NIC_NE2K_ISA, 1182 HT_NIC_I82551, 1183 HT_NIC_I85557B, 1184 HT_NIC_I8259ER, 1185 HT_NIC_PCNET, 1186 HT_NIC_E1000, 1187 HT_NIC_PARAVIRTUAL 1188 ]) 1189 1190 # Disk types 1191 HT_DISK_IOEMU = "ioemu" 1192 HT_DISK_IDE = "ide" 1193 HT_DISK_SCSI = "scsi" 1194 HT_DISK_SD = "sd" 1195 HT_DISK_MTD = "mtd" 1196 HT_DISK_PFLASH = "pflash" 1197 1198 HT_CACHE_DEFAULT = "default" 1199 HT_CACHE_NONE = "none" 1200 HT_CACHE_WTHROUGH = "writethrough" 1201 HT_CACHE_WBACK = "writeback" 1202 HT_VALID_CACHE_TYPES = frozenset([ 1203 HT_CACHE_DEFAULT, 1204 HT_CACHE_NONE, 1205 HT_CACHE_WTHROUGH, 1206 HT_CACHE_WBACK 1207 ]) 1208 1209 HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU]) 1210 HT_KVM_VALID_DISK_TYPES = frozenset([ 1211 HT_DISK_PARAVIRTUAL, 1212 HT_DISK_IDE, 1213 HT_DISK_SCSI, 1214 HT_DISK_SD, 1215 HT_DISK_MTD, 1216 HT_DISK_PFLASH 1217 ]) 1218 1219 # Mouse types: 1220 HT_MOUSE_MOUSE = "mouse" 1221 HT_MOUSE_TABLET = "tablet" 1222 1223 HT_KVM_VALID_MOUSE_TYPES = frozenset([HT_MOUSE_MOUSE, HT_MOUSE_TABLET]) 1224 1225 # Boot order 1226 HT_BO_FLOPPY = "floppy" 1227 HT_BO_CDROM = "cdrom" 1228 HT_BO_DISK = "disk" 1229 HT_BO_NETWORK = "network" 1230 1231 HT_KVM_VALID_BO_TYPES = frozenset([ 1232 HT_BO_FLOPPY, 1233 HT_BO_CDROM, 1234 HT_BO_DISK, 1235 HT_BO_NETWORK 1236 ]) 1237 1238 # SPICE lossless image compression options 1239 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz" 1240 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz" 1241 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic" 1242 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz" 1243 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz" 1244 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off" 1245 1246 HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = frozenset([ 1247 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ, 1248 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ, 1249 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC, 1250 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ, 1251 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ, 1252 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF, 1253 ]) 1254 1255 # SPICE lossy image compression options (valid for both jpeg and zlib-glz) 1256 HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto" 1257 HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never" 1258 HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always" 1259 1260 HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = frozenset([ 1261 HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO, 1262 HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER, 1263 HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS, 1264 ]) 1265 1266 # SPICE video stream detection 1267 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off" 1268 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all" 1269 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter" 1270 1271 HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = frozenset([ 1272 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF, 1273 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL, 1274 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER, 1275 ]) 1276 1277 # Security models 1278 HT_SM_NONE = "none" 1279 HT_SM_USER = "user" 1280 HT_SM_POOL = "pool" 1281 1282 HT_KVM_VALID_SM_TYPES = frozenset([HT_SM_NONE, HT_SM_USER, HT_SM_POOL]) 1283 1284 # Kvm flag values 1285 HT_KVM_ENABLED = "enabled" 1286 HT_KVM_DISABLED = "disabled" 1287 1288 HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED]) 1289 1290 # Migration type 1291 HT_MIGRATION_LIVE = "live" 1292 HT_MIGRATION_NONLIVE = "non-live" 1293 HT_MIGRATION_MODES = frozenset([HT_MIGRATION_LIVE, HT_MIGRATION_NONLIVE]) 1294 1295 # Cluster Verify steps 1296 VERIFY_NPLUSONE_MEM = "nplusone_mem" 1297 VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM]) 1298 1299 # Cluster Verify error classes 1300 CV_TCLUSTER = "cluster" 1301 CV_TNODE = "node" 1302 CV_TINSTANCE = "instance" 1303 1304 # Cluster Verify error codes and documentation 1305 CV_ECLUSTERCFG = \ 1306 (CV_TCLUSTER, "ECLUSTERCFG", "Cluster configuration verification failure") 1307 CV_ECLUSTERCERT = \ 1308 (CV_TCLUSTER, "ECLUSTERCERT", 1309 "Cluster certificate files verification failure") 1310 CV_ECLUSTERFILECHECK = \ 1311 (CV_TCLUSTER, "ECLUSTERFILECHECK", 1312 "Cluster configuration verification failure") 1313 CV_ECLUSTERDANGLINGNODES = \ 1314 (CV_TNODE, "ECLUSTERDANGLINGNODES", 1315 "Some nodes belong to non-existing groups") 1316 CV_ECLUSTERDANGLINGINST = \ 1317 (CV_TNODE, "ECLUSTERDANGLINGINST", 1318 "Some instances have a non-existing primary node") 1319 CV_EINSTANCEBADNODE = \ 1320 (CV_TINSTANCE, "EINSTANCEBADNODE", 1321 "Instance marked as running lives on an offline node") 1322 CV_EINSTANCEDOWN = \ 1323 (CV_TINSTANCE, "EINSTANCEDOWN", "Instance not running on its primary node") 1324 CV_EINSTANCELAYOUT = \ 1325 (CV_TINSTANCE, "EINSTANCELAYOUT", "Instance has multiple secondary nodes") 1326 CV_EINSTANCEMISSINGDISK = \ 1327 (CV_TINSTANCE, "EINSTANCEMISSINGDISK", "Missing volume on an instance") 1328 CV_EINSTANCEFAULTYDISK = \ 1329 (CV_TINSTANCE, "EINSTANCEFAULTYDISK", 1330 "Impossible to retrieve status for a disk") 1331 CV_EINSTANCEWRONGNODE = \ 1332 (CV_TINSTANCE, "EINSTANCEWRONGNODE", "Instance running on the wrong node") 1333 CV_EINSTANCESPLITGROUPS = \ 1334 (CV_TINSTANCE, "EINSTANCESPLITGROUPS", 1335 "Instance with primary and secondary nodes in different groups") 1336 CV_EINSTANCEPOLICY = \ 1337 (CV_TINSTANCE, "EINSTANCEPOLICY", 1338 "Instance does not meet policy") 1339 CV_ENODEDRBD = \ 1340 (CV_TNODE, "ENODEDRBD", "Error parsing the DRBD status file") 1341 CV_ENODEDRBDHELPER = \ 1342 (CV_TNODE, "ENODEDRBDHELPER", "Error caused by the DRBD helper") 1343 CV_ENODEFILECHECK = \ 1344 (CV_TNODE, "ENODEFILECHECK", 1345 "Error retrieving the checksum of the node files") 1346 CV_ENODEHOOKS = \ 1347 (CV_TNODE, "ENODEHOOKS", "Communication failure in hooks execution") 1348 CV_ENODEHV = \ 1349 (CV_TNODE, "ENODEHV", "Hypervisor parameters verification failure") 1350 CV_ENODELVM = \ 1351 (CV_TNODE, "ENODELVM", "LVM-related node error") 1352 CV_ENODEN1 = \ 1353 (CV_TNODE, "ENODEN1", "Not enough memory to accommodate instance failovers") 1354 CV_ENODENET = \ 1355 (CV_TNODE, "ENODENET", "Network-related node error") 1356 CV_ENODEOS = \ 1357 (CV_TNODE, "ENODEOS", "OS-related node error") 1358 CV_ENODEORPHANINSTANCE = \ 1359 (CV_TNODE, "ENODEORPHANINSTANCE", "Unknown intance running on a node") 1360 CV_ENODEORPHANLV = \ 1361 (CV_TNODE, "ENODEORPHANLV", "Unknown LVM logical volume") 1362 CV_ENODERPC = \ 1363 (CV_TNODE, "ENODERPC", 1364 "Error during connection to the primary node of an instance") 1365 CV_ENODESSH = \ 1366 (CV_TNODE, "ENODESSH", "SSH-related node error") 1367 CV_ENODEVERSION = \ 1368 (CV_TNODE, "ENODEVERSION", 1369 "Protocol version mismatch or Ganeti version mismatch") 1370 CV_ENODESETUP = \ 1371 (CV_TNODE, "ENODESETUP", "Node setup error") 1372 CV_ENODETIME = \ 1373 (CV_TNODE, "ENODETIME", "Node returned invalid time") 1374 CV_ENODEOOBPATH = \ 1375 (CV_TNODE, "ENODEOOBPATH", "Invalid Out Of Band path") 1376 CV_ENODEUSERSCRIPTS = \ 1377 (CV_TNODE, "ENODEUSERSCRIPTS", "User scripts not present or not executable") 1378 1379 CV_ALL_ECODES = frozenset([ 1380 CV_ECLUSTERCFG, 1381 CV_ECLUSTERCERT, 1382 CV_ECLUSTERFILECHECK, 1383 CV_ECLUSTERDANGLINGNODES, 1384 CV_ECLUSTERDANGLINGINST, 1385 CV_EINSTANCEBADNODE, 1386 CV_EINSTANCEDOWN, 1387 CV_EINSTANCELAYOUT, 1388 CV_EINSTANCEMISSINGDISK, 1389 CV_EINSTANCEFAULTYDISK, 1390 CV_EINSTANCEWRONGNODE, 1391 CV_EINSTANCESPLITGROUPS, 1392 CV_EINSTANCEPOLICY, 1393 CV_ENODEDRBD, 1394 CV_ENODEDRBDHELPER, 1395 CV_ENODEFILECHECK, 1396 CV_ENODEHOOKS, 1397 CV_ENODEHV, 1398 CV_ENODELVM, 1399 CV_ENODEN1, 1400 CV_ENODENET, 1401 CV_ENODEOS, 1402 CV_ENODEORPHANINSTANCE, 1403 CV_ENODEORPHANLV, 1404 CV_ENODERPC, 1405 CV_ENODESSH, 1406 CV_ENODEVERSION, 1407 CV_ENODESETUP, 1408 CV_ENODETIME, 1409 CV_ENODEOOBPATH, 1410 CV_ENODEUSERSCRIPTS, 1411 ]) 1412 1413 CV_ALL_ECODES_STRINGS = frozenset(estr for (_, estr, _) in CV_ALL_ECODES) 1414 1415 # Node verify constants 1416 NV_DRBDHELPER = "drbd-helper" 1417 NV_DRBDLIST = "drbd-list" 1418 NV_FILELIST = "filelist" 1419 NV_HVINFO = "hvinfo" 1420 NV_HYPERVISOR = "hypervisor" 1421 NV_HVPARAMS = "hvparms" 1422 NV_INSTANCELIST = "instancelist" 1423 NV_LVLIST = "lvlist" 1424 NV_MASTERIP = "master-ip" 1425 NV_NODELIST = "nodelist" 1426 NV_NODENETTEST = "node-net-test" 1427 NV_NODESETUP = "nodesetup" 1428 NV_OSLIST = "oslist" 1429 NV_PVLIST = "pvlist" 1430 NV_TIME = "time" 1431 NV_VERSION = "version" 1432 NV_VGLIST = "vglist" 1433 NV_VMNODES = "vmnodes" 1434 NV_OOB_PATHS = "oob-paths" 1435 NV_BRIDGES = "bridges" 1436 NV_USERSCRIPTS = "user-scripts" 1437 1438 # Instance status 1439 INSTST_RUNNING = "running" 1440 INSTST_ADMINDOWN = "ADMIN_down" 1441 INSTST_ADMINOFFLINE = "ADMIN_offline" 1442 INSTST_NODEOFFLINE = "ERROR_nodeoffline" 1443 INSTST_NODEDOWN = "ERROR_nodedown" 1444 INSTST_WRONGNODE = "ERROR_wrongnode" 1445 INSTST_ERRORUP = "ERROR_up" 1446 INSTST_ERRORDOWN = "ERROR_down" 1447 INSTST_ALL = frozenset([ 1448 INSTST_RUNNING, 1449 INSTST_ADMINDOWN, 1450 INSTST_ADMINOFFLINE, 1451 INSTST_NODEOFFLINE, 1452 INSTST_NODEDOWN, 1453 INSTST_WRONGNODE, 1454 INSTST_ERRORUP, 1455 INSTST_ERRORDOWN, 1456 ]) 1457 1458 # Admin states 1459 ADMINST_UP = "up" 1460 ADMINST_DOWN = "down" 1461 ADMINST_OFFLINE = "offline" 1462 ADMINST_ALL = frozenset([ 1463 ADMINST_UP, 1464 ADMINST_DOWN, 1465 ADMINST_OFFLINE, 1466 ]) 1467 1468 # Node roles 1469 NR_REGULAR = "R" 1470 NR_MASTER = "M" 1471 NR_MCANDIDATE = "C" 1472 NR_DRAINED = "D" 1473 NR_OFFLINE = "O" 1474 NR_ALL = frozenset([ 1475 NR_REGULAR, 1476 NR_MASTER, 1477 NR_MCANDIDATE, 1478 NR_DRAINED, 1479 NR_OFFLINE, 1480 ]) 1481 1482 # SSL certificate check constants (in days) 1483 SSL_CERT_EXPIRATION_WARN = 30 1484 SSL_CERT_EXPIRATION_ERROR = 7 1485 1486 # Allocator framework constants 1487 IALLOCATOR_VERSION = 2 1488 IALLOCATOR_DIR_IN = "in" 1489 IALLOCATOR_DIR_OUT = "out" 1490 VALID_IALLOCATOR_DIRECTIONS = frozenset([ 1491 IALLOCATOR_DIR_IN, 1492 IALLOCATOR_DIR_OUT, 1493 ]) 1494 IALLOCATOR_MODE_ALLOC = "allocate" 1495 IALLOCATOR_MODE_RELOC = "relocate" 1496 IALLOCATOR_MODE_CHG_GROUP = "change-group" 1497 IALLOCATOR_MODE_NODE_EVAC = "node-evacuate" 1498 VALID_IALLOCATOR_MODES = frozenset([ 1499 IALLOCATOR_MODE_ALLOC, 1500 IALLOCATOR_MODE_RELOC, 1501 IALLOCATOR_MODE_CHG_GROUP, 1502 IALLOCATOR_MODE_NODE_EVAC, 1503 ]) 1504 IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH 1505 1506 IALLOCATOR_NEVAC_PRI = "primary-only" 1507 IALLOCATOR_NEVAC_SEC = "secondary-only" 1508 IALLOCATOR_NEVAC_ALL = "all" 1509 IALLOCATOR_NEVAC_MODES = frozenset([ 1510 IALLOCATOR_NEVAC_PRI, 1511 IALLOCATOR_NEVAC_SEC, 1512 IALLOCATOR_NEVAC_ALL, 1513 ]) 1514 1515 # Node evacuation 1516 NODE_EVAC_PRI = "primary-only" 1517 NODE_EVAC_SEC = "secondary-only" 1518 NODE_EVAC_ALL = "all" 1519 NODE_EVAC_MODES = frozenset([ 1520 NODE_EVAC_PRI, 1521 NODE_EVAC_SEC, 1522 NODE_EVAC_ALL, 1523 ]) 1524 1525 # Job queue 1526 JOB_QUEUE_VERSION = 1 1527 JOB_QUEUE_LOCK_FILE = QUEUE_DIR + "/lock" 1528 JOB_QUEUE_VERSION_FILE = QUEUE_DIR + "/version" 1529 JOB_QUEUE_SERIAL_FILE = QUEUE_DIR + "/serial" 1530 JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive" 1531 JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain" 1532 JOB_QUEUE_SIZE_HARD_LIMIT = 5000 1533 1534 JOB_ID_TEMPLATE = r"\d+" 1535 JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE) 1536 1537 # unchanged job return 1538 JOB_NOTCHANGED = "nochange" 1539 1540 # Job status 1541 JOB_STATUS_QUEUED = "queued" 1542 JOB_STATUS_WAITING = "waiting" 1543 JOB_STATUS_CANCELING = "canceling" 1544 JOB_STATUS_RUNNING = "running" 1545 JOB_STATUS_CANCELED = "canceled" 1546 JOB_STATUS_SUCCESS = "success" 1547 JOB_STATUS_ERROR = "error" 1548 JOBS_FINALIZED = frozenset([ 1549 JOB_STATUS_CANCELED, 1550 JOB_STATUS_SUCCESS, 1551 JOB_STATUS_ERROR, 1552 ]) 1553 JOB_STATUS_ALL = frozenset([ 1554 JOB_STATUS_QUEUED, 1555 JOB_STATUS_WAITING, 1556 JOB_STATUS_CANCELING, 1557 JOB_STATUS_RUNNING, 1558 ]) | JOBS_FINALIZED 1559 1560 # OpCode status 1561 # not yet finalized 1562 OP_STATUS_QUEUED = "queued" 1563 OP_STATUS_WAITING = "waiting" 1564 OP_STATUS_CANCELING = "canceling" 1565 OP_STATUS_RUNNING = "running" 1566 # finalized 1567 OP_STATUS_CANCELED = "canceled" 1568 OP_STATUS_SUCCESS = "success" 1569 OP_STATUS_ERROR = "error" 1570 OPS_FINALIZED = frozenset([ 1571 OP_STATUS_CANCELED, 1572 OP_STATUS_SUCCESS, 1573 OP_STATUS_ERROR 1574 ]) 1575 1576 # OpCode priority 1577 OP_PRIO_LOWEST = +19 1578 OP_PRIO_HIGHEST = -20 1579 1580 OP_PRIO_LOW = +10 1581 OP_PRIO_NORMAL = 0 1582 OP_PRIO_HIGH = -10 1583 1584 OP_PRIO_SUBMIT_VALID = frozenset([ 1585 OP_PRIO_LOW, 1586 OP_PRIO_NORMAL, 1587 OP_PRIO_HIGH, 1588 ]) 1589 1590 OP_PRIO_DEFAULT = OP_PRIO_NORMAL 1591 1592 # Lock recalculate mode 1593 LOCKS_REPLACE = "replace" 1594 LOCKS_APPEND = "append" 1595 1596 # Lock timeout (sum) before we should go into blocking acquire (still 1597 # can be reset by priority change); computed as max time (10 hours) 1598 # before we should actually go into blocking acquire given that we 1599 # start from default priority level; in seconds 1600 # TODO 1601 LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST) 1602 LOCK_ATTEMPTS_MAXWAIT = 15.0 1603 LOCK_ATTEMPTS_MINWAIT = 1.0 1604 1605 # Execution log types 1606 ELOG_MESSAGE = "message" 1607 ELOG_REMOTE_IMPORT = "remote-import" 1608 ELOG_JQUEUE_TEST = "jqueue-test" 1609 1610 # /etc/hosts modification 1611 ETC_HOSTS_ADD = "add" 1612 ETC_HOSTS_REMOVE = "remove" 1613 1614 # Job queue test 1615 JQT_MSGPREFIX = "TESTMSG=" 1616 JQT_EXPANDNAMES = "expandnames" 1617 JQT_EXEC = "exec" 1618 JQT_LOGMSG = "logmsg" 1619 JQT_STARTMSG = "startmsg" 1620 JQT_ALL = frozenset([ 1621 JQT_EXPANDNAMES, 1622 JQT_EXEC, 1623 JQT_LOGMSG, 1624 JQT_STARTMSG, 1625 ]) 1626 1627 # Query resources 1628 QR_CLUSTER = "cluster" 1629 QR_INSTANCE = "instance" 1630 QR_NODE = "node" 1631 QR_LOCK = "lock" 1632 QR_GROUP = "group" 1633 QR_OS = "os" 1634 QR_JOB = "job" 1635 QR_EXPORT = "export" 1636 1637 #: List of resources which can be queried using L{opcodes.OpQuery} 1638 QR_VIA_OP = frozenset([ 1639 QR_CLUSTER, 1640 QR_INSTANCE, 1641 QR_NODE, 1642 QR_GROUP, 1643 QR_OS, 1644 QR_EXPORT, 1645 ]) 1646 1647 #: List of resources which can be queried using Local UniX Interface 1648 QR_VIA_LUXI = QR_VIA_OP.union([ 1649 QR_LOCK, 1650 QR_JOB, 1651 ]) 1652 1653 #: List of resources which can be queried using RAPI 1654 QR_VIA_RAPI = QR_VIA_LUXI 1655 1656 # Query field types 1657 QFT_UNKNOWN = "unknown" 1658 QFT_TEXT = "text" 1659 QFT_BOOL = "bool" 1660 QFT_NUMBER = "number" 1661 QFT_UNIT = "unit" 1662 QFT_TIMESTAMP = "timestamp" 1663 QFT_OTHER = "other" 1664 1665 #: All query field types 1666 QFT_ALL = frozenset([ 1667 QFT_UNKNOWN, 1668 QFT_TEXT, 1669 QFT_BOOL, 1670 QFT_NUMBER, 1671 QFT_UNIT, 1672 QFT_TIMESTAMP, 1673 QFT_OTHER, 1674 ]) 1675 1676 # Query result field status (don't change or reuse values as they're used by 1677 # clients) 1678 #: Normal field status 1679 RS_NORMAL = 0 1680 #: Unknown field 1681 RS_UNKNOWN = 1 1682 #: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE} 1683 RS_NODATA = 2 1684 #: Value unavailable/unsupported for item; if this field is supported 1685 #: but we cannot get the data for the moment, RS_NODATA or 1686 #: RS_OFFLINE should be used 1687 RS_UNAVAIL = 3 1688 #: Resource marked offline 1689 RS_OFFLINE = 4 1690 1691 RS_ALL = frozenset([ 1692 RS_NORMAL, 1693 RS_UNKNOWN, 1694 RS_NODATA, 1695 RS_UNAVAIL, 1696 RS_OFFLINE, 1697 ]) 1698 1699 #: Dictionary with special field cases and their verbose/terse formatting 1700 RSS_DESCRIPTION = { 1701 RS_UNKNOWN: ("(unknown)", "??"), 1702 RS_NODATA: ("(nodata)", "?"), 1703 RS_OFFLINE: ("(offline)", "*"), 1704 RS_UNAVAIL: ("(unavail)", "-"), 1705 } 1706 1707 # max dynamic devices 1708 MAX_NICS = 8 1709 MAX_DISKS = 16 1710 1711 # SSCONF file prefix 1712 SSCONF_FILEPREFIX = "ssconf_" 1713 # SSCONF keys 1714 SS_CLUSTER_NAME = "cluster_name" 1715 SS_CLUSTER_TAGS = "cluster_tags" 1716 SS_FILE_STORAGE_DIR = "file_storage_dir" 1717 SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir" 1718 SS_MASTER_CANDIDATES = "master_candidates" 1719 SS_MASTER_CANDIDATES_IPS = "master_candidates_ips" 1720 SS_MASTER_IP = "master_ip" 1721 SS_MASTER_NETDEV = "master_netdev" 1722 SS_MASTER_NETMASK = "master_netmask" 1723 SS_MASTER_NODE = "master_node" 1724 SS_NODE_LIST = "node_list" 1725 SS_NODE_PRIMARY_IPS = "node_primary_ips" 1726 SS_NODE_SECONDARY_IPS = "node_secondary_ips" 1727 SS_OFFLINE_NODES = "offline_nodes" 1728 SS_ONLINE_NODES = "online_nodes" 1729 SS_PRIMARY_IP_FAMILY = "primary_ip_family" 1730 SS_INSTANCE_LIST = "instance_list" 1731 SS_RELEASE_VERSION = "release_version" 1732 SS_HYPERVISOR_LIST = "hypervisor_list" 1733 SS_MAINTAIN_NODE_HEALTH = "maintain_node_health" 1734 SS_UID_POOL = "uid_pool" 1735 SS_NODEGROUPS = "nodegroups" 1736 1737 SS_FILE_PERMS = 0444 1738 1739 # cluster wide default parameters 1740 DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM 1741 1742 HVC_DEFAULTS = { 1743 HT_XEN_PVM: { 1744 HV_USE_BOOTLOADER: False, 1745 HV_BOOTLOADER_PATH: XEN_BOOTLOADER, 1746 HV_BOOTLOADER_ARGS: "", 1747 HV_KERNEL_PATH: XEN_KERNEL, 1748 HV_INITRD_PATH: "", 1749 HV_ROOT_PATH: "/dev/sda1", 1750 HV_KERNEL_ARGS: "ro", 1751 HV_MIGRATION_PORT: 8002, 1752 HV_MIGRATION_MODE: HT_MIGRATION_LIVE, 1753 HV_BLOCKDEV_PREFIX: "sd", 1754 HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED, 1755 HV_CPU_MASK: CPU_PINNING_ALL, 1756 }, 1757 HT_XEN_HVM: { 1758 HV_BOOT_ORDER: "cd", 1759 HV_CDROM_IMAGE_PATH: "", 1760 HV_NIC_TYPE: HT_NIC_RTL8139, 1761 HV_DISK_TYPE: HT_DISK_PARAVIRTUAL, 1762 HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY, 1763 HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE, 1764 HV_ACPI: True, 1765 HV_PAE: True, 1766 HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader", 1767 HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm", 1768 HV_MIGRATION_PORT: 8002, 1769 HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE, 1770 HV_USE_LOCALTIME: False, 1771 HV_BLOCKDEV_PREFIX: "hd", 1772 HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED, 1773 HV_CPU_MASK: CPU_PINNING_ALL, 1774 }, 1775 HT_KVM: { 1776 HV_KERNEL_PATH: KVM_KERNEL, 1777 HV_INITRD_PATH: "", 1778 HV_KERNEL_ARGS: "ro", 1779 HV_ROOT_PATH: "/dev/vda1", 1780 HV_ACPI: True, 1781 HV_SERIAL_CONSOLE: True, 1782 HV_VNC_BIND_ADDRESS: "", 1783 HV_VNC_TLS: False, 1784 HV_VNC_X509: "", 1785 HV_VNC_X509_VERIFY: False, 1786 HV_VNC_PASSWORD_FILE: "", 1787 HV_KVM_SPICE_BIND: "", 1788 HV_KVM_SPICE_IP_VERSION: IFACE_NO_IP_VERSION_SPECIFIED, 1789 HV_KVM_SPICE_PASSWORD_FILE: "", 1790 HV_KVM_SPICE_LOSSLESS_IMG_COMPR: "", 1791 HV_KVM_SPICE_JPEG_IMG_COMPR: "", 1792 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: "", 1793 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: "", 1794 HV_KVM_SPICE_AUDIO_COMPR: True, 1795 HV_KVM_SPICE_USE_TLS: False, 1796 HV_KVM_SPICE_TLS_CIPHERS: OPENSSL_CIPHERS, 1797 HV_KVM_SPICE_USE_VDAGENT: True, 1798 HV_KVM_FLOPPY_IMAGE_PATH: "", 1799 HV_CDROM_IMAGE_PATH: "", 1800 HV_KVM_CDROM2_IMAGE_PATH: "", 1801 HV_BOOT_ORDER: HT_BO_DISK, 1802 HV_NIC_TYPE: HT_NIC_PARAVIRTUAL, 1803 HV_DISK_TYPE: HT_DISK_PARAVIRTUAL, 1804 HV_KVM_CDROM_DISK_TYPE: "", 1805 HV_USB_MOUSE: "", 1806 HV_KEYMAP: "", 1807 HV_MIGRATION_PORT: 8102, 1808 HV_MIGRATION_BANDWIDTH: 32, # MiB/s 1809 HV_MIGRATION_DOWNTIME: 30, # ms 1810 HV_MIGRATION_MODE: HT_MIGRATION_LIVE, 1811 HV_USE_LOCALTIME: False, 1812 HV_DISK_CACHE: HT_CACHE_DEFAULT, 1813 HV_SECURITY_MODEL: HT_SM_NONE, 1814 HV_SECURITY_DOMAIN: "", 1815 HV_KVM_FLAG: "", 1816 HV_VHOST_NET: False, 1817 HV_KVM_USE_CHROOT: False, 1818 HV_MEM_PATH: "", 1819 HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED, 1820 HV_CPU_MASK: CPU_PINNING_ALL, 1821 }, 1822 HT_FAKE: { 1823 }, 1824 HT_CHROOT: { 1825 HV_INIT_SCRIPT: "/ganeti-chroot", 1826 }, 1827 HT_LXC: { 1828 HV_CPU_MASK: "", 1829 }, 1830 } 1831 1832 HVC_GLOBALS = frozenset([ 1833 HV_MIGRATION_PORT, 1834 HV_MIGRATION_BANDWIDTH, 1835 HV_MIGRATION_MODE, 1836 ]) 1837 1838 BEC_DEFAULTS = { 1839 BE_MINMEM: 128, 1840 BE_MAXMEM: 128, 1841 BE_VCPUS: 1, 1842 BE_AUTO_BALANCE: True, 1843 BE_ALWAYS_FAILOVER: False, 1844 BE_SPINDLE_USE: 1, 1845 } 1846 1847 NDC_DEFAULTS = { 1848 ND_OOB_PROGRAM: None, 1849 ND_SPINDLE_COUNT: 1, 1850 } 1851 1852 DISK_LD_DEFAULTS = { 1853 LD_DRBD8: { 1854 LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED, 1855 LDP_BARRIERS: _autoconf.DRBD_BARRIERS, 1856 LDP_NO_META_FLUSH: _autoconf.DRBD_NO_META_FLUSH, 1857 LDP_DEFAULT_METAVG: DEFAULT_VG, 1858 LDP_DISK_CUSTOM: "", 1859 LDP_NET_CUSTOM: "", 1860 LDP_DYNAMIC_RESYNC: False, 1861 1862 # The default values for the DRBD dynamic resync speed algorithm are taken 1863 # from the drbsetup 8.3.11 man page, except for c-plan-ahead (that we 1864 # don't need to set to 0, because we have a separate option to enable it) 1865 # and for c-max-rate, that we cap to the default value for the static resync 1866 # rate. 1867 LDP_PLAN_AHEAD: 20, # ds 1868 LDP_FILL_TARGET: 0, # sectors 1869 LDP_DELAY_TARGET: 1, # ds 1870 LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s 1871 LDP_MIN_RATE: 4 * 1024, # KiB/s 1872 }, 1873 LD_LV: { 1874 LDP_STRIPES: _autoconf.LVM_STRIPECOUNT 1875 }, 1876 LD_FILE: { 1877 }, 1878 LD_BLOCKDEV: { 1879 }, 1880 LD_RBD: { 1881 LDP_POOL: "rbd" 1882 }, 1883 } 1884 1885 # readability shortcuts 1886 _LV_DEFAULTS = DISK_LD_DEFAULTS[LD_LV] 1887 _DRBD_DEFAULTS = DISK_LD_DEFAULTS[LD_DRBD8] 1888 1889 DISK_DT_DEFAULTS = { 1890 DT_PLAIN: { 1891 LV_STRIPES: DISK_LD_DEFAULTS[LD_LV][LDP_STRIPES], 1892 }, 1893 DT_DRBD8: { 1894 DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE], 1895 DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES], 1896 DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES], 1897 DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS], 1898 DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH], 1899 DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG], 1900 DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM], 1901 DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM], 1902 DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC], 1903 DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD], 1904 DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET], 1905 DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET], 1906 DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE], 1907 DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE], 1908 }, 1909 DT_DISKLESS: { 1910 }, 1911 DT_FILE: { 1912 }, 1913 DT_SHARED_FILE: { 1914 }, 1915 DT_BLOCK: { 1916 }, 1917 DT_RBD: { 1918 RBD_POOL: DISK_LD_DEFAULTS[LD_RBD][LDP_POOL] 1919 }, 1920 } 1921 1922 # we don't want to export the shortcuts 1923 del _LV_DEFAULTS, _DRBD_DEFAULTS 1924 1925 NICC_DEFAULTS = { 1926 NIC_MODE: NIC_MODE_BRIDGED, 1927 NIC_LINK: DEFAULT_BRIDGE, 1928 } 1929 1930 # All of the following values are quite arbitrarily - there are no 1931 # "good" defaults, these must be customised per-site 1932 IPOLICY_DEFAULTS = { 1933 ISPECS_MIN: { 1934 ISPEC_MEM_SIZE: 128, 1935 ISPEC_CPU_COUNT: 1, 1936 ISPEC_DISK_COUNT: 1, 1937 ISPEC_DISK_SIZE: 1024, 1938 ISPEC_NIC_COUNT: 1, 1939 ISPEC_SPINDLE_USE: 1, 1940 }, 1941 ISPECS_MAX: { 1942 ISPEC_MEM_SIZE: 32768, 1943 ISPEC_CPU_COUNT: 8, 1944 ISPEC_DISK_COUNT: MAX_DISKS, 1945 ISPEC_DISK_SIZE: 1024 * 1024, 1946 ISPEC_NIC_COUNT: MAX_NICS, 1947 ISPEC_SPINDLE_USE: 12, 1948 }, 1949 ISPECS_STD: { 1950 ISPEC_MEM_SIZE: 128, 1951 ISPEC_CPU_COUNT: 1, 1952 ISPEC_DISK_COUNT: 1, 1953 ISPEC_DISK_SIZE: 1024, 1954 ISPEC_NIC_COUNT: 1, 1955 ISPEC_SPINDLE_USE: 1, 1956 }, 1957 IPOLICY_DTS: DISK_TEMPLATES, 1958 IPOLICY_VCPU_RATIO: 4.0, 1959 IPOLICY_SPINDLE_RATIO: 32.0, 1960 } 1961 1962 MASTER_POOL_SIZE_DEFAULT = 10 1963 1964 CONFD_PROTOCOL_VERSION = 1 1965 1966 CONFD_REQ_PING = 0 1967 CONFD_REQ_NODE_ROLE_BYNAME = 1 1968 CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2 1969 CONFD_REQ_CLUSTER_MASTER = 3 1970 CONFD_REQ_NODE_PIP_LIST = 4 1971 CONFD_REQ_MC_PIP_LIST = 5 1972 CONFD_REQ_INSTANCES_IPS_LIST = 6 1973 CONFD_REQ_NODE_DRBD = 7 1974 1975 # Confd request query fields. These are used to narrow down queries. 1976 # These must be strings rather than integers, because json-encoding 1977 # converts them to strings anyway, as they're used as dict-keys. 1978 CONFD_REQQ_LINK = "0" 1979 CONFD_REQQ_IP = "1" 1980 CONFD_REQQ_IPLIST = "2" 1981 CONFD_REQQ_FIELDS = "3" 1982 1983 CONFD_REQFIELD_NAME = "0" 1984 CONFD_REQFIELD_IP = "1" 1985 CONFD_REQFIELD_MNODE_PIP = "2" 1986 1987 CONFD_REQS = frozenset([ 1988 CONFD_REQ_PING, 1989 CONFD_REQ_NODE_ROLE_BYNAME, 1990 CONFD_REQ_NODE_PIP_BY_INSTANCE_IP, 1991 CONFD_REQ_CLUSTER_MASTER, 1992 CONFD_REQ_NODE_PIP_LIST, 1993 CONFD_REQ_MC_PIP_LIST, 1994 CONFD_REQ_INSTANCES_IPS_LIST, 1995 CONFD_REQ_NODE_DRBD, 1996 ]) 1997 1998 CONFD_REPL_STATUS_OK = 0 1999 CONFD_REPL_STATUS_ERROR = 1 2000 CONFD_REPL_STATUS_NOTIMPLEMENTED = 2 2001 2002 CONFD_REPL_STATUSES = frozenset([ 2003 CONFD_REPL_STATUS_OK, 2004 CONFD_REPL_STATUS_ERROR, 2005 CONFD_REPL_STATUS_NOTIMPLEMENTED, 2006 ]) 2007 2008 (CONFD_NODE_ROLE_MASTER, 2009 CONFD_NODE_ROLE_CANDIDATE, 2010 CONFD_NODE_ROLE_OFFLINE, 2011 CONFD_NODE_ROLE_DRAINED, 2012 CONFD_NODE_ROLE_REGULAR, 2013 ) = range(5) 2014 2015 # A few common errors for confd 2016 CONFD_ERROR_UNKNOWN_ENTRY = 1 2017 CONFD_ERROR_INTERNAL = 2 2018 CONFD_ERROR_ARGUMENT = 3 2019 2020 # Each request is "salted" by the current timestamp. 2021 # This constants decides how many seconds of skew to accept. 2022 # TODO: make this a default and allow the value to be more configurable 2023 CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW 2024 2025 # When we haven't reloaded the config for more than this amount of seconds, we 2026 # force a test to see if inotify is betraying us. 2027 CONFD_CONFIG_RELOAD_TIMEOUT = 60 2028 2029 # If we receive more than one update in this amount of seconds, we move to 2030 # polling every RATELIMIT seconds, rather than relying on inotify, to be able 2031 # to serve more requests. 2032 CONFD_CONFIG_RELOAD_RATELIMIT = 2 2033 2034 # Magic number prepended to all confd queries. 2035 # This allows us to distinguish different types of confd protocols and handle 2036 # them. For example by changing this we can move the whole payload to be 2037 # compressed, or move away from json. 2038 CONFD_MAGIC_FOURCC = "plj0" 2039 2040 # By default a confd request is sent to the minimum between this number and all 2041 # MCs. 6 was chosen because even in the case of a disastrous 50% response rate, 2042 # we should have enough answers to be able to compare more than one. 2043 CONFD_DEFAULT_REQ_COVERAGE = 6 2044 2045 # Timeout in seconds to expire pending query request in the confd client 2046 # library. We don't actually expect any answer more than 10 seconds after we 2047 # sent a request. 2048 CONFD_CLIENT_EXPIRE_TIMEOUT = 10 2049 2050 # Maximum UDP datagram size. 2051 # On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507 2052 # On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487 2053 # (assuming we can't use jumbo frames) 2054 # We just set this to 60K, which should be enough 2055 MAX_UDP_DATA_SIZE = 61440 2056 2057 # User-id pool minimum/maximum acceptable user-ids. 2058 UIDPOOL_UID_MIN = 0 2059 UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids 2060 2061 # Name or path of the pgrep command 2062 PGREP = "pgrep" 2063 2064 # Name of the node group that gets created at cluster init or upgrade 2065 INITIAL_NODE_GROUP_NAME = "default" 2066 2067 # Possible values for NodeGroup.alloc_policy 2068 ALLOC_POLICY_PREFERRED = "preferred" 2069 ALLOC_POLICY_LAST_RESORT = "last_resort" 2070 ALLOC_POLICY_UNALLOCABLE = "unallocable" 2071 VALID_ALLOC_POLICIES = [ 2072 ALLOC_POLICY_PREFERRED, 2073 ALLOC_POLICY_LAST_RESORT, 2074 ALLOC_POLICY_UNALLOCABLE, 2075 ] 2076 2077 # Temporary external/shared storage parameters 2078 BLOCKDEV_DRIVER_MANUAL = "manual" 2079 2080 # qemu-img path, required for ovfconverter 2081 QEMUIMG_PATH = _autoconf.QEMUIMG_PATH 2082 2083 # Whether htools was enabled at compilation time 2084 HTOOLS = _autoconf.HTOOLS 2085 # The hail iallocator 2086 IALLOC_HAIL = "hail" 2087 2088 # Fake opcodes for functions that have hooks attached to them via 2089 # backend.RunLocalHooks 2090 FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP" 2091 FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN" 2092 2093 # Do not re-export imported modules 2094 del re, _vcsversion, _autoconf, socket 2095