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