1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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
49
50
51
52
53
54
55
56
57
58
59
60
61
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
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
96 PROTOCOL_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, 0)
97
98
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
113 CPU_PINNING_SEP = ":"
114 CPU_PINNING_ALL = "all"
115
116 CPU_PINNING_ALL_VAL = -1
117
118 CPU_PINNING_OFF = [CPU_PINNING_ALL_VAL]
119
120
121
122
123
124
125
126
127 CPU_PINNING_ALL_XEN = "0-63"
128
129
130
131
132
133 CPU_PINNING_ALL_KVM = 0xFFFFFFFF
134
135
136 DD_CMD = "dd"
137 MAX_WIPE_CHUNK = 1024
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
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
185 LUXI_EOM = "\3"
186 LUXI_VERSION = CONFIG_VERSION
187
188
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
203 XEN_CMD = _autoconf.XEN_CMD
204
205
206
207
208
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
223 CONS_SSH = "ssh"
224
225
226 CONS_VNC = "vnc"
227
228
229 CONS_SPICE = "spice"
230
231
232 CONS_MESSAGE = "msg"
233
234
235 CONS_ALL = compat.UniqueFrozenset([
236 CONS_SSH,
237 CONS_VNC,
238 CONS_SPICE,
239 CONS_MESSAGE,
240 ])
241
242
243
244
245 RSA_KEY_BITS = 2048
246
247
248
249
250
251
252
253 OPENSSL_CIPHERS = "HIGH:-DES:-3DES:-EXPORT:-ADH"
254
255
256 X509_CERT_SIGN_DIGEST = "SHA1"
257
258
259 X509_CERT_DEFAULT_VALIDITY = 365 * 5
260
261
262 X509_CERT_CN = "ganeti.example.com"
263
264 X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
265
266
267 IEM_IMPORT = "import"
268 IEM_EXPORT = "export"
269
270
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
283
284 IEIO_FILE = "file"
285
286 IEIO_RAW_DISK = "raw"
287
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
298 EXT_PLUGIN_MASK = re.compile("^[a-zA-Z0-9_-]+$")
299
300
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
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
320 ST_FILE = "file"
321 ST_LVM_PV = "lvm-pv"
322 ST_LVM_VG = "lvm-vg"
323
324
325
326 SF_NODE = "node"
327 SF_TYPE = "type"
328
329 SF_NAME = "name"
330 SF_SIZE = "size"
331 SF_FREE = "free"
332 SF_USED = "used"
333 SF_ALLOCATABLE = "allocatable"
334
335
336 SO_FIX_CONSISTENCY = "fix-consistency"
337
338
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
363
364 (LDS_OKAY,
365 LDS_UNKNOWN,
366 LDS_FAULTY) = range(1, 4)
367
368
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
379 DTS_INT_MIRROR = compat.UniqueFrozenset([DT_DRBD8])
380
381
382 DTS_EXT_MIRROR = compat.UniqueFrozenset([
383 DT_DISKLESS,
384 DT_SHARED_FILE,
385 DT_BLOCK,
386 DT_RBD,
387 DT_EXT,
388 ])
389
390
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
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
411 DTS_MAY_ADOPT = compat.UniqueFrozenset([
412 DT_PLAIN,
413 DT_BLOCK,
414 ])
415
416
417 DTS_MUST_ADOPT = compat.UniqueFrozenset([DT_BLOCK])
418
419
420 DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR)
421
422
423 DTS_FILEBASED = compat.UniqueFrozenset([
424 DT_FILE,
425 DT_SHARED_FILE,
426 ])
427
428
429
430
431 DTS_COPYABLE = compat.UniqueFrozenset([
432 DT_FILE,
433 DT_PLAIN,
434 ])
435
436
437 DTS_EXCL_STORAGE = compat.UniqueFrozenset([DT_PLAIN])
438
439
440 DTS_NO_FREE_SPACE_CHECK = compat.UniqueFrozenset([
441 DT_FILE,
442 DT_SHARED_FILE,
443 DT_RBD,
444 DT_EXT,
445 ])
446
447
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
472 DRBD_HMAC_ALG = "md5"
473 DRBD_NET_PROTOCOL = "C"
474 DRBD_STATUS_FILE = "/proc/drbd"
475
476
477 DRBD_META_SIZE = 128
478
479
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
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
498 RBD_CMD = "rbd"
499
500
501 FD_LOOP = "loop"
502 FD_BLKTAP = "blktap"
503
504
505 LDS_DRBD = compat.UniqueFrozenset([LD_DRBD8])
506
507
508 DISK_RDONLY = "ro"
509 DISK_RDWR = "rw"
510 DISK_ACCESS_SET = compat.UniqueFrozenset([DISK_RDONLY, DISK_RDWR])
511
512
513 REPLACE_DISK_PRI = "replace_on_primary"
514 REPLACE_DISK_SEC = "replace_on_secondary"
515 REPLACE_DISK_CHG = "replace_new_secondary"
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
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
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
543 RIE_VERSION = 0
544 RIE_HANDSHAKE = "Hi, I'm Ganeti"
545
546
547 RIE_CERT_VALIDITY = 24 * 60 * 60
548
549
550 RIE_CONNECT_TIMEOUT = 180
551
552
553 RIE_CONNECT_ATTEMPT_TIMEOUT = 20
554
555
556 RIE_CONNECT_RETRIES = 10
557
558
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
575 INISECT_EXP = "export"
576 INISECT_INS = "instance"
577 INISECT_HYP = "hypervisor"
578 INISECT_BEP = "backend"
579 INISECT_OSP = "os"
580
581
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
590
591
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
598
599
600 EXIT_UNKNOWN_FIELD = 14
601
602
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
619 DEFAULT_BRIDGE = "xen-br0"
620 CLASSIC_DRBD_SYNC_SPEED = 60 * 1024
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
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
638 DEFAULT_SHUTDOWN_TIMEOUT = 120
639 NODE_MAX_CLOCK_SKEW = 150
640
641 DISK_TRANSFER_CONNECT_TIMEOUT = 60
642
643 DISK_SEPARATOR = _autoconf.DISK_SEPARATOR
644 IP_COMMAND_PATH = _autoconf.IP_PATH
645
646
647 JOB_IDS_KEY = "jobs"
648
649
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
661 (RPC_ENCODING_NONE,
662 RPC_ENCODING_ZLIB_BASE64) = range(2)
663
664
665 RPC_TMO_URGENT = 60
666 RPC_TMO_FAST = 5 * 60
667 RPC_TMO_NORMAL = 15 * 60
668 RPC_TMO_SLOW = 3600
669 RPC_TMO_4HRS = 4 * 3600
670 RPC_TMO_1DAY = 86400
671
672
673 RPC_CONNECT_TIMEOUT = 5
674
675
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
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
725 SSH = "ssh"
726 SCP = "scp"
727
728
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
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"
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
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
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
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
960 HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
961
962
963 HV_NODEINFO_KEY_VERSION = "hv_version"
964
965
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
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
1011 BE_MEMORY = "memory"
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
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
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
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
1136
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
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
1192 OOB_POWER_DELAY = 2.0
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
1207 PP_DEFAULT = "default"
1208
1209
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
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
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
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
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
1317
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
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
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
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
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
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
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
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
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
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
1444 VERIFY_NPLUSONE_MEM = "nplusone_mem"
1445 VERIFY_OPTIONAL_CHECKS = compat.UniqueFrozenset([VERIFY_NPLUSONE_MEM])
1446
1447
1448 CV_TCLUSTER = "cluster"
1449 CV_TGROUP = "group"
1450 CV_TNODE = "node"
1451 CV_TINSTANCE = "instance"
1452
1453
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
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
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
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
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
1643 SSL_CERT_EXPIRATION_WARN = 30
1644 SSL_CERT_EXPIRATION_ERROR = 7
1645
1646
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
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
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
1697 JOB_NOTCHANGED = "nochange"
1698
1699
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
1722
1723 OP_STATUS_QUEUED = "queued"
1724 OP_STATUS_WAITING = "waiting"
1725 OP_STATUS_CANCELING = "canceling"
1726 OP_STATUS_RUNNING = "running"
1727
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
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
1754 LOCKS_REPLACE = "replace"
1755 LOCKS_APPEND = "append"
1756
1757
1758
1759
1760
1761
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
1767 ELOG_MESSAGE = "message"
1768 ELOG_REMOTE_IMPORT = "remote-import"
1769 ELOG_JQUEUE_TEST = "jqueue-test"
1770
1771
1772 ETC_HOSTS_ADD = "add"
1773 ETC_HOSTS_REMOVE = "remove"
1774
1775
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
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
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
1813 QR_VIA_LUXI = QR_VIA_OP.union([
1814 QR_LOCK,
1815 QR_JOB,
1816 ])
1817
1818
1819 QR_VIA_RAPI = QR_VIA_LUXI
1820
1821
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
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
1842
1843
1844 RS_NORMAL = 0
1845
1846 RS_UNKNOWN = 1
1847
1848 RS_NODATA = 2
1849
1850
1851
1852 RS_UNAVAIL = 3
1853
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
1865 RSS_DESCRIPTION = {
1866 RS_UNKNOWN: ("(unknown)", "??"),
1867 RS_NODATA: ("(nodata)", "?"),
1868 RS_OFFLINE: ("(offline)", "*"),
1869 RS_UNAVAIL: ("(unavail)", "-"),
1870 }
1871
1872
1873 MAX_NICS = 8
1874 MAX_DISKS = 16
1875
1876
1877 SSCONF_FILEPREFIX = "ssconf_"
1878
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
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,
1983 HV_MIGRATION_DOWNTIME: 30,
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
2050
2051
2052
2053
2054 LDP_PLAN_AHEAD: 20,
2055 LDP_FILL_TARGET: 0,
2056 LDP_DELAY_TARGET: 1,
2057 LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED,
2058 LDP_MIN_RATE: 4 * 1024,
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
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
2106 del _LV_DEFAULTS, _DRBD_DEFAULTS
2107
2108 NICC_DEFAULTS = {
2109 NIC_MODE: NIC_MODE_BRIDGED,
2110 NIC_LINK: DEFAULT_BRIDGE,
2111 }
2112
2113
2114
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
2148
2149 PART_MARGIN = .01
2150
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
2165
2166
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
2205 CONFD_ERROR_UNKNOWN_ENTRY = 1
2206 CONFD_ERROR_INTERNAL = 2
2207 CONFD_ERROR_ARGUMENT = 3
2208
2209
2210
2211
2212 CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
2213
2214
2215
2216
2217
2218 CONFD_CONFIG_RELOAD_TIMEOUT = 17
2219
2220
2221
2222
2223 CONFD_CONFIG_RELOAD_RATELIMIT = 250000
2224
2225
2226
2227
2228
2229 CONFD_MAGIC_FOURCC = "plj0"
2230
2231
2232
2233
2234 CONFD_DEFAULT_REQ_COVERAGE = 6
2235
2236
2237
2238
2239 CONFD_CLIENT_EXPIRE_TIMEOUT = 10
2240
2241
2242
2243
2244
2245
2246 MAX_UDP_DATA_SIZE = 61440
2247
2248
2249 UIDPOOL_UID_MIN = 0
2250 UIDPOOL_UID_MAX = 2 ** 32 - 1
2251
2252
2253 PGREP = "pgrep"
2254
2255
2256 INITIAL_NODE_GROUP_NAME = "default"
2257
2258
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
2269 BLOCKDEV_DRIVER_MANUAL = "manual"
2270
2271
2272 QEMUIMG_PATH = _autoconf.QEMUIMG_PATH
2273
2274
2275 HTOOLS = _autoconf.HTOOLS
2276
2277 IALLOC_HAIL = "hail"
2278
2279
2280
2281 FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2282 FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2283
2284
2285 SSHK_RSA = "rsa"
2286 SSHK_DSA = "dsa"
2287 SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2288
2289
2290 SSHAK_RSA = "ssh-rsa"
2291 SSHAK_DSS = "ssh-dss"
2292 SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2293
2294
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
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
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
2313 RANDOM_UUID_FILE = "/proc/sys/kernel/random/uuid"
2314
2315
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
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
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
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
2348 BUILTIN_DATA_COLLECTOR_VERSION = "B"
2349
2350
2351 del re, _vcsversion, _autoconf, socket, pathutils, compat
2352