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 LUXID_USER = _autoconf.LUXID_USER
108 LUXID_GROUP = _autoconf.LUXID_GROUP
109 NODED_USER = _autoconf.NODED_USER
110 NODED_GROUP = _autoconf.NODED_GROUP
111 MOND_USER = _autoconf.MOND_USER
112 MOND_GROUP = _autoconf.MOND_GROUP
113 SSH_LOGIN_USER = _autoconf.SSH_LOGIN_USER
114 SSH_CONSOLE_USER = _autoconf.SSH_CONSOLE_USER
115
116
117 CPU_PINNING_SEP = ":"
118 CPU_PINNING_ALL = "all"
119
120 CPU_PINNING_ALL_VAL = -1
121
122 CPU_PINNING_OFF = [CPU_PINNING_ALL_VAL]
123
124
125
126
127
128
129
130
131 CPU_PINNING_ALL_XEN = "0-63"
132
133
134
135
136
137 CPU_PINNING_ALL_KVM = 0xFFFFFFFF
138
139
140 DD_CMD = "dd"
141 MAX_WIPE_CHUNK = 1024
142 MIN_WIPE_CHUNK_PERCENT = 10
143
144 RUN_DIRS_MODE = 0775
145 SECURE_DIR_MODE = 0700
146 SECURE_FILE_MODE = 0600
147 ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/"
148 ENABLE_CONFD = _autoconf.ENABLE_CONFD
149 ENABLE_MOND = _autoconf.ENABLE_MOND
150 ENABLE_SPLIT_QUERY = _autoconf.ENABLE_SPLIT_QUERY
151 ENABLE_RESTRICTED_COMMANDS = _autoconf.ENABLE_RESTRICTED_COMMANDS
152
153
154 SSH = "ssh"
155 SCP = "scp"
156
157 NODED = "ganeti-noded"
158 CONFD = "ganeti-confd"
159 LUXID = "ganeti-luxid"
160 RAPI = "ganeti-rapi"
161 MASTERD = "ganeti-masterd"
162 MOND = "ganeti-mond"
163
164 DAEMONS = compat.UniqueFrozenset([
165 NODED,
166 CONFD,
167 LUXID,
168 RAPI,
169 MASTERD,
170 MOND,
171 ])
172
173 DAEMONS_PORTS = {
174
175 NODED: ("tcp", 1811),
176 CONFD: ("udp", 1814),
177 MOND: ("tcp", 1815),
178 RAPI: ("tcp", 5080),
179 SSH: ("tcp", 22),
180 }
181
182 DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
183 DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
184 DEFAULT_MOND_PORT = DAEMONS_PORTS[MOND][1]
185 DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
186
187 FIRST_DRBD_PORT = 11000
188 LAST_DRBD_PORT = 14999
189
190 DAEMONS_LOGBASE = {
191 NODED: "node-daemon",
192 CONFD: "conf-daemon",
193 LUXID: "luxi-daemon",
194 RAPI: "rapi-daemon",
195 MASTERD: "master-daemon",
196 MOND: "monitoring-daemon",
197 }
198
199 DAEMONS_LOGFILES = \
200 dict((daemon, pathutils.GetLogFilename(DAEMONS_LOGBASE[daemon]))
201 for daemon in DAEMONS_LOGBASE)
202
203
204
205
206
207
208 EXTRA_LOGREASON_ACCESS = "access"
209 EXTRA_LOGREASON_ERROR = "error"
210
211 VALID_EXTRA_LOGREASONS = compat.UniqueFrozenset([
212 EXTRA_LOGREASON_ACCESS,
213 EXTRA_LOGREASON_ERROR,
214 ])
215
216
217 DAEMONS_EXTRA_LOGBASE = {
218 MOND: {
219 EXTRA_LOGREASON_ACCESS: "monitoring-daemon-access",
220 EXTRA_LOGREASON_ERROR: "monitoring-daemon-error",
221 }
222 }
223
224 DAEMONS_EXTRA_LOGFILES = \
225 dict((daemon, dict((extra,
226 pathutils.GetLogFilename(DAEMONS_EXTRA_LOGBASE[daemon][extra]))
227 for extra in DAEMONS_EXTRA_LOGBASE[daemon]))
228 for daemon in DAEMONS_EXTRA_LOGBASE)
229
230 DEV_CONSOLE = "/dev/console"
231
232 PROC_MOUNTS = "/proc/mounts"
233
234
235 LUXI_EOM = chr(3)
236 LUXI_VERSION = CONFIG_VERSION
237
238 LUXI_OVERRIDE = "FORCE_LUXI_SOCKET"
239 LUXI_OVERRIDE_MASTER = "master"
240 LUXI_OVERRIDE_QUERY = "query"
241 LUXI_SOCKET_PERMS = 0660
242
243
244 SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
245 SYSLOG_NO = "no"
246 SYSLOG_YES = "yes"
247 SYSLOG_ONLY = "only"
248 SYSLOG_SOCKET = "/dev/log"
249
250 EXPORT_CONF_FILE = "config.ini"
251
252 XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
253 XEN_KERNEL = _autoconf.XEN_KERNEL
254 XEN_INITRD = _autoconf.XEN_INITRD
255 XEN_CMD_XM = "xm"
256 XEN_CMD_XL = "xl"
257
258 KNOWN_XEN_COMMANDS = compat.UniqueFrozenset([
259 XEN_CMD_XM,
260 XEN_CMD_XL,
261 ])
262
263
264
265
266
267
268 XL_SSH_CMD = ("ssh -l %s -oGlobalKnownHostsFile=%s"
269 " -oUserKnownHostsFile=/dev/null"
270 " -oCheckHostIp=no -oStrictHostKeyChecking=yes"
271 " -oHostKeyAlias=%%s") % (SSH_LOGIN_USER,
272 pathutils.SSH_KNOWN_HOSTS_FILE)
273
274 KVM_PATH = _autoconf.KVM_PATH
275 KVM_KERNEL = _autoconf.KVM_KERNEL
276 SOCAT_PATH = _autoconf.SOCAT_PATH
277 SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
278 SOCAT_USE_COMPRESS = _autoconf.SOCAT_USE_COMPRESS
279 SOCAT_ESCAPE_CODE = "0x1d"
280
281
282 CONS_SSH = "ssh"
283
284
285 CONS_VNC = "vnc"
286
287
288 CONS_SPICE = "spice"
289
290
291 CONS_MESSAGE = "msg"
292
293
294 CONS_ALL = compat.UniqueFrozenset([
295 CONS_SSH,
296 CONS_VNC,
297 CONS_SPICE,
298 CONS_MESSAGE,
299 ])
300
301
302
303
304 RSA_KEY_BITS = 2048
305
306
307
308
309
310
311
312 OPENSSL_CIPHERS = "HIGH:-DES:-3DES:-EXPORT:-ADH"
313
314
315 X509_CERT_SIGN_DIGEST = "SHA1"
316
317
318 X509_CERT_DEFAULT_VALIDITY = 365 * 5
319
320
321 X509_CERT_CN = "ganeti.example.com"
322
323 X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
324
325
326 IEM_IMPORT = "import"
327 IEM_EXPORT = "export"
328
329
330 IEC_NONE = "none"
331 IEC_GZIP = "gzip"
332 IEC_ALL = compat.UniqueFrozenset([
333 IEC_NONE,
334 IEC_GZIP,
335 ])
336
337 IE_CUSTOM_SIZE = "fd"
338
339 IE_MAGIC_RE = re.compile(r"^[-_.a-zA-Z0-9]{5,100}$")
340
341
342
343 IEIO_FILE = "file"
344
345 IEIO_RAW_DISK = "raw"
346
347 IEIO_SCRIPT = "script"
348
349 VALUE_DEFAULT = "default"
350 VALUE_AUTO = "auto"
351 VALUE_GENERATE = "generate"
352 VALUE_NONE = "none"
353 VALUE_TRUE = "true"
354 VALUE_FALSE = "false"
355
356
357 EXT_PLUGIN_MASK = re.compile("^[a-zA-Z0-9_-]+$")
358
359
360 HOOKS_PHASE_PRE = "pre"
361 HOOKS_PHASE_POST = "post"
362 HOOKS_NAME_CFGUPDATE = "config-update"
363 HOOKS_NAME_WATCHER = "watcher"
364 HOOKS_VERSION = 2
365 HOOKS_PATH = "/sbin:/bin:/usr/sbin:/usr/bin"
366
367
368 HTYPE_CLUSTER = "CLUSTER"
369 HTYPE_NODE = "NODE"
370 HTYPE_GROUP = "GROUP"
371 HTYPE_INSTANCE = "INSTANCE"
372 HTYPE_NETWORK = "NETWORK"
373
374 HKR_SKIP = 0
375 HKR_FAIL = 1
376 HKR_SUCCESS = 2
377
378
379 ST_BLOCK = "blockdev"
380 ST_DISKLESS = "diskless"
381 ST_EXT = "ext"
382 ST_FILE = "file"
383 ST_LVM_PV = "lvm-pv"
384 ST_LVM_VG = "lvm-vg"
385 ST_RADOS = "rados"
386
387 STORAGE_TYPES = compat.UniqueFrozenset([
388 ST_BLOCK,
389 ST_DISKLESS,
390 ST_EXT,
391 ST_FILE,
392 ST_LVM_PV,
393 ST_LVM_VG,
394 ST_RADOS,
395 ])
396
397
398
399 STS_REPORT = compat.UniqueFrozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG])
400
401
402
403 SF_NODE = "node"
404 SF_TYPE = "type"
405
406 SF_NAME = "name"
407 SF_SIZE = "size"
408 SF_FREE = "free"
409 SF_USED = "used"
410 SF_ALLOCATABLE = "allocatable"
411
412
413 SO_FIX_CONSISTENCY = "fix-consistency"
414
415
416 VALID_STORAGE_FIELDS = compat.UniqueFrozenset([
417 SF_NAME,
418 SF_TYPE,
419 SF_SIZE,
420 SF_USED,
421 SF_FREE,
422 SF_ALLOCATABLE,
423 ])
424
425 MODIFIABLE_STORAGE_FIELDS = {
426 ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
427 }
428
429 VALID_STORAGE_OPERATIONS = {
430 ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
431 }
432
433
434
435 (LDS_OKAY,
436 LDS_UNKNOWN,
437 LDS_FAULTY) = range(1, 4)
438
439 LDS_NAMES = {
440 LDS_OKAY: "ok",
441 LDS_UNKNOWN: "unknown",
442 LDS_FAULTY: "faulty",
443 }
444
445
446 DT_BLOCK = "blockdev"
447 DT_DISKLESS = "diskless"
448 DT_DRBD8 = "drbd"
449 DT_EXT = "ext"
450 DT_FILE = "file"
451 DT_PLAIN = "plain"
452 DT_RBD = "rbd"
453 DT_SHARED_FILE = "sharedfile"
454
455
456
457
458
459 DISK_TEMPLATE_PREFERENCE = [
460 DT_BLOCK,
461 DT_DISKLESS,
462 DT_DRBD8,
463 DT_EXT,
464 DT_FILE,
465 DT_PLAIN,
466 DT_RBD,
467 DT_SHARED_FILE,
468 ]
469
470 DISK_TEMPLATES = compat.UniqueFrozenset([
471 DT_DISKLESS,
472 DT_PLAIN,
473 DT_DRBD8,
474 DT_FILE,
475 DT_SHARED_FILE,
476 DT_BLOCK,
477 DT_RBD,
478 DT_EXT
479 ])
480
481
482 DEFAULT_ENABLED_DISK_TEMPLATES = [
483 DT_DRBD8,
484 DT_PLAIN,
485 ]
486
487
488 MAP_DISK_TEMPLATE_STORAGE_TYPE = {
489 DT_BLOCK: ST_BLOCK,
490 DT_DISKLESS: ST_DISKLESS,
491 DT_DRBD8: ST_LVM_VG,
492 DT_EXT: ST_EXT,
493 DT_FILE: ST_FILE,
494 DT_PLAIN: ST_LVM_VG,
495 DT_RBD: ST_RADOS,
496 DT_SHARED_FILE: ST_FILE,
497 }
498
499
500 DTS_INT_MIRROR = compat.UniqueFrozenset([DT_DRBD8])
501
502
503 DTS_EXT_MIRROR = compat.UniqueFrozenset([
504 DT_DISKLESS,
505 DT_SHARED_FILE,
506 DT_BLOCK,
507 DT_RBD,
508 DT_EXT,
509 ])
510
511
512 DTS_NOT_LVM = compat.UniqueFrozenset([
513 DT_DISKLESS,
514 DT_FILE,
515 DT_SHARED_FILE,
516 DT_BLOCK,
517 DT_RBD,
518 DT_EXT,
519 ])
520
521
522 DTS_GROWABLE = compat.UniqueFrozenset([
523 DT_PLAIN,
524 DT_DRBD8,
525 DT_FILE,
526 DT_SHARED_FILE,
527 DT_RBD,
528 DT_EXT,
529 ])
530
531
532 DTS_MAY_ADOPT = compat.UniqueFrozenset([
533 DT_PLAIN,
534 DT_BLOCK,
535 ])
536
537
538 DTS_MUST_ADOPT = compat.UniqueFrozenset([DT_BLOCK])
539
540
541 DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR)
542
543
544 DTS_FILEBASED = compat.UniqueFrozenset([
545 DT_FILE,
546 DT_SHARED_FILE,
547 ])
548
549
550
551
552 DTS_COPYABLE = compat.UniqueFrozenset([
553 DT_FILE,
554 DT_PLAIN,
555 ])
556
557
558 DTS_EXCL_STORAGE = compat.UniqueFrozenset([DT_PLAIN])
559
560
561 DTS_NO_FREE_SPACE_CHECK = compat.UniqueFrozenset([
562 DT_FILE,
563 DT_SHARED_FILE,
564 DT_RBD,
565 DT_EXT,
566 ])
567
568 DTS_BLOCK = compat.UniqueFrozenset([
569 DT_PLAIN,
570 DT_DRBD8,
571 DT_BLOCK,
572 DT_RBD,
573 DT_EXT,
574 ])
575
576
577 DTS_DRBD = compat.UniqueFrozenset([DT_DRBD8])
578
579
580 DRBD_HMAC_ALG = "md5"
581 DRBD_DEFAULT_NET_PROTOCOL = "C"
582 DRBD_MIGRATION_NET_PROTOCOL = "C"
583 DRBD_STATUS_FILE = "/proc/drbd"
584
585
586 DRBD_META_SIZE = 128
587
588
589 DRBD_B_NONE = "n"
590 DRBD_B_DISK_BARRIERS = "b"
591 DRBD_B_DISK_DRAIN = "d"
592 DRBD_B_DISK_FLUSH = "f"
593
594
595 DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([
596 frozenset([DRBD_B_NONE]),
597 frozenset([DRBD_B_DISK_BARRIERS]),
598 frozenset([DRBD_B_DISK_DRAIN]),
599 frozenset([DRBD_B_DISK_FLUSH]),
600 frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]),
601 frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]),
602 frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]),
603 frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]),
604 ])
605
606
607 RBD_CMD = "rbd"
608
609
610 FD_LOOP = "loop"
611 FD_BLKTAP = "blktap"
612 FD_BLKTAP2 = "blktap2"
613 FD_DEFAULT = FD_LOOP
614
615
616 DISK_RDONLY = "ro"
617 DISK_RDWR = "rw"
618 DISK_ACCESS_SET = compat.UniqueFrozenset([DISK_RDONLY, DISK_RDWR])
619
620
621 REPLACE_DISK_PRI = "replace_on_primary"
622 REPLACE_DISK_SEC = "replace_on_secondary"
623 REPLACE_DISK_CHG = "replace_new_secondary"
624 REPLACE_DISK_AUTO = "replace_auto"
625 REPLACE_MODES = compat.UniqueFrozenset([
626 REPLACE_DISK_PRI,
627 REPLACE_DISK_SEC,
628 REPLACE_DISK_CHG,
629 REPLACE_DISK_AUTO,
630 ])
631
632
633 EXPORT_MODE_LOCAL = "local"
634 EXPORT_MODE_REMOTE = "remote"
635 EXPORT_MODES = compat.UniqueFrozenset([
636 EXPORT_MODE_LOCAL,
637 EXPORT_MODE_REMOTE,
638 ])
639
640
641 INSTANCE_CREATE = "create"
642 INSTANCE_IMPORT = "import"
643 INSTANCE_REMOTE_IMPORT = "remote-import"
644 INSTANCE_CREATE_MODES = compat.UniqueFrozenset([
645 INSTANCE_CREATE,
646 INSTANCE_IMPORT,
647 INSTANCE_REMOTE_IMPORT,
648 ])
649
650
651 RIE_VERSION = 0
652 RIE_HANDSHAKE = "Hi, I'm Ganeti"
653
654
655 RIE_CERT_VALIDITY = 24 * 60 * 60
656
657
658 RIE_CONNECT_TIMEOUT = 180
659
660
661 RIE_CONNECT_ATTEMPT_TIMEOUT = 20
662
663
664 RIE_CONNECT_RETRIES = 10
665
666
667 CHILD_LINGER_TIMEOUT = 5.0
668
669 FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP, FD_BLKTAP2])
670
671
672 INISECT_EXP = "export"
673 INISECT_INS = "instance"
674 INISECT_HYP = "hypervisor"
675 INISECT_BEP = "backend"
676 INISECT_OSP = "os"
677
678
679 DDM_ADD = "add"
680 DDM_MODIFY = "modify"
681 DDM_REMOVE = "remove"
682 DDMS_VALUES = compat.UniqueFrozenset([DDM_ADD, DDM_REMOVE])
683 DDMS_VALUES_WITH_MODIFY = (DDMS_VALUES | frozenset([
684 DDM_MODIFY,
685 ]))
686
687
688
689 EXIT_SUCCESS = 0
690 EXIT_FAILURE = 1
691 EXIT_NOTCLUSTER = 5
692 EXIT_NOTMASTER = 11
693 EXIT_NODESETUP_ERROR = 12
694 EXIT_CONFIRMATION = 13
695
696
697 EXIT_UNKNOWN_FIELD = 14
698
699
700 TAG_CLUSTER = "cluster"
701 TAG_NODEGROUP = "nodegroup"
702 TAG_NODE = "node"
703 TAG_INSTANCE = "instance"
704 TAG_NETWORK = "network"
705 VALID_TAG_TYPES = compat.UniqueFrozenset([
706 TAG_CLUSTER,
707 TAG_NODEGROUP,
708 TAG_NODE,
709 TAG_INSTANCE,
710 TAG_NETWORK,
711 ])
712 MAX_TAG_LEN = 128
713 MAX_TAGS_PER_OBJ = 4096
714
715
716 DEFAULT_BRIDGE = "xen-br0"
717 CLASSIC_DRBD_SYNC_SPEED = 60 * 1024
718 IP4_ADDRESS_LOCALHOST = "127.0.0.1"
719 IP4_ADDRESS_ANY = "0.0.0.0"
720 IP6_ADDRESS_LOCALHOST = "::1"
721 IP6_ADDRESS_ANY = "::"
722 IP4_VERSION = 4
723 IP6_VERSION = 6
724 VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
725
726 IP4_FAMILY = socket.AF_INET
727 IP6_FAMILY = socket.AF_INET6
728
729 TCP_PING_TIMEOUT = 10
730 DEFAULT_VG = "xenvg"
731 DEFAULT_DRBD_HELPER = "/bin/true"
732 MIN_VG_SIZE = 20480
733 DEFAULT_MAC_PREFIX = "aa:00:00"
734
735 DEFAULT_SHUTDOWN_TIMEOUT = 120
736 NODE_MAX_CLOCK_SKEW = 150
737
738 DISK_TRANSFER_CONNECT_TIMEOUT = 60
739
740 DISK_SEPARATOR = _autoconf.DISK_SEPARATOR
741 IP_COMMAND_PATH = _autoconf.IP_PATH
742
743
744 JOB_IDS_KEY = "jobs"
745
746
747 (RUNPARTS_SKIP,
748 RUNPARTS_RUN,
749 RUNPARTS_ERR) = range(3)
750
751 RUNPARTS_STATUS = compat.UniqueFrozenset([
752 RUNPARTS_SKIP,
753 RUNPARTS_RUN,
754 RUNPARTS_ERR,
755 ])
756
757
758 (RPC_ENCODING_NONE,
759 RPC_ENCODING_ZLIB_BASE64) = range(2)
760
761
762 RPC_TMO_URGENT = 60
763 RPC_TMO_FAST = 5 * 60
764 RPC_TMO_NORMAL = 15 * 60
765 RPC_TMO_SLOW = 3600
766 RPC_TMO_4HRS = 4 * 3600
767 RPC_TMO_1DAY = 86400
768
769
770 RPC_CONNECT_TIMEOUT = 5
771
772
773 OS_SCRIPT_CREATE = "create"
774 OS_SCRIPT_IMPORT = "import"
775 OS_SCRIPT_EXPORT = "export"
776 OS_SCRIPT_RENAME = "rename"
777 OS_SCRIPT_VERIFY = "verify"
778 OS_SCRIPTS = compat.UniqueFrozenset([
779 OS_SCRIPT_CREATE,
780 OS_SCRIPT_IMPORT,
781 OS_SCRIPT_EXPORT,
782 OS_SCRIPT_RENAME,
783 OS_SCRIPT_VERIFY,
784 ])
785
786 OS_API_FILE = "ganeti_api_version"
787 OS_VARIANTS_FILE = "variants.list"
788 OS_PARAMETERS_FILE = "parameters.list"
789
790 OS_VALIDATE_PARAMETERS = "parameters"
791 OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
792
793
794 ES_ACTION_CREATE = "create"
795 ES_ACTION_REMOVE = "remove"
796 ES_ACTION_GROW = "grow"
797 ES_ACTION_ATTACH = "attach"
798 ES_ACTION_DETACH = "detach"
799 ES_ACTION_SETINFO = "setinfo"
800 ES_ACTION_VERIFY = "verify"
801
802 ES_SCRIPT_CREATE = ES_ACTION_CREATE
803 ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
804 ES_SCRIPT_GROW = ES_ACTION_GROW
805 ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
806 ES_SCRIPT_DETACH = ES_ACTION_DETACH
807 ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
808 ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
809 ES_SCRIPTS = frozenset([
810 ES_SCRIPT_CREATE,
811 ES_SCRIPT_REMOVE,
812 ES_SCRIPT_GROW,
813 ES_SCRIPT_ATTACH,
814 ES_SCRIPT_DETACH,
815 ES_SCRIPT_SETINFO,
816 ES_SCRIPT_VERIFY
817 ])
818
819 ES_PARAMETERS_FILE = "parameters.list"
820
821
822 INSTANCE_REBOOT_SOFT = "soft"
823 INSTANCE_REBOOT_HARD = "hard"
824 INSTANCE_REBOOT_FULL = "full"
825
826 REBOOT_TYPES = compat.UniqueFrozenset([
827 INSTANCE_REBOOT_SOFT,
828 INSTANCE_REBOOT_HARD,
829 INSTANCE_REBOOT_FULL,
830 ])
831
832
833 INSTANCE_REBOOT_ALLOWED = "reboot"
834 INSTANCE_REBOOT_EXIT = "exit"
835
836 REBOOT_BEHAVIORS = compat.UniqueFrozenset([
837 INSTANCE_REBOOT_ALLOWED,
838 INSTANCE_REBOOT_EXIT,
839 ])
840
841 VTYPE_STRING = "string"
842 VTYPE_MAYBE_STRING = "maybe-string"
843 VTYPE_BOOL = "bool"
844 VTYPE_SIZE = "size"
845 VTYPE_INT = "int"
846 ENFORCEABLE_TYPES = compat.UniqueFrozenset([
847 VTYPE_STRING,
848 VTYPE_MAYBE_STRING,
849 VTYPE_BOOL,
850 VTYPE_SIZE,
851 VTYPE_INT,
852 ])
853
854
855 IFACE_NO_IP_VERSION_SPECIFIED = 0
856
857 VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
858 75,
859 110,
860 300,
861 600,
862 1200,
863 1800,
864 2400,
865 4800,
866 9600,
867 14400,
868 19200,
869 28800,
870 38400,
871 57600,
872 115200,
873 230400,
874 345600,
875 460800,
876 ])
877
878
879 HV_BOOT_ORDER = "boot_order"
880 HV_CDROM_IMAGE_PATH = "cdrom_image_path"
881 HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
882 HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
883 HV_NIC_TYPE = "nic_type"
884 HV_DISK_TYPE = "disk_type"
885 HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
886 HV_VNC_BIND_ADDRESS = "vnc_bind_address"
887 HV_VNC_PASSWORD_FILE = "vnc_password_file"
888 HV_VNC_TLS = "vnc_tls"
889 HV_VNC_X509 = "vnc_x509_path"
890 HV_VNC_X509_VERIFY = "vnc_x509_verify"
891 HV_KVM_SPICE_BIND = "spice_bind"
892 HV_KVM_SPICE_IP_VERSION = "spice_ip_version"
893 HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file"
894 HV_KVM_SPICE_LOSSLESS_IMG_COMPR = "spice_image_compression"
895 HV_KVM_SPICE_JPEG_IMG_COMPR = "spice_jpeg_wan_compression"
896 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR = "spice_zlib_glz_wan_compression"
897 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION = "spice_streaming_video"
898 HV_KVM_SPICE_AUDIO_COMPR = "spice_playback_compression"
899 HV_KVM_SPICE_USE_TLS = "spice_use_tls"
900 HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers"
901 HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent"
902 HV_ACPI = "acpi"
903 HV_PAE = "pae"
904 HV_USE_BOOTLOADER = "use_bootloader"
905 HV_BOOTLOADER_ARGS = "bootloader_args"
906 HV_BOOTLOADER_PATH = "bootloader_path"
907 HV_KERNEL_ARGS = "kernel_args"
908 HV_KERNEL_PATH = "kernel_path"
909 HV_INITRD_PATH = "initrd_path"
910 HV_ROOT_PATH = "root_path"
911 HV_SERIAL_CONSOLE = "serial_console"
912 HV_SERIAL_SPEED = "serial_speed"
913 HV_USB_MOUSE = "usb_mouse"
914 HV_KEYMAP = "keymap"
915 HV_DEVICE_MODEL = "device_model"
916 HV_INIT_SCRIPT = "init_script"
917 HV_MIGRATION_PORT = "migration_port"
918 HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
919 HV_MIGRATION_DOWNTIME = "migration_downtime"
920 HV_MIGRATION_MODE = "migration_mode"
921 HV_USE_LOCALTIME = "use_localtime"
922 HV_DISK_CACHE = "disk_cache"
923 HV_SECURITY_MODEL = "security_model"
924 HV_SECURITY_DOMAIN = "security_domain"
925 HV_KVM_FLAG = "kvm_flag"
926 HV_VHOST_NET = "vhost_net"
927 HV_KVM_USE_CHROOT = "use_chroot"
928 HV_CPU_MASK = "cpu_mask"
929 HV_MEM_PATH = "mem_path"
930 HV_PASSTHROUGH = "pci_pass"
931 HV_BLOCKDEV_PREFIX = "blockdev_prefix"
932 HV_REBOOT_BEHAVIOR = "reboot_behavior"
933 HV_CPU_TYPE = "cpu_type"
934 HV_CPU_CAP = "cpu_cap"
935 HV_CPU_WEIGHT = "cpu_weight"
936 HV_CPU_CORES = "cpu_cores"
937 HV_CPU_THREADS = "cpu_threads"
938 HV_CPU_SOCKETS = "cpu_sockets"
939 HV_SOUNDHW = "soundhw"
940 HV_USB_DEVICES = "usb_devices"
941 HV_VGA = "vga"
942 HV_KVM_EXTRA = "kvm_extra"
943 HV_KVM_MACHINE_VERSION = "machine_version"
944 HV_KVM_PATH = "kvm_path"
945 HV_VIF_TYPE = "vif_type"
946 HV_VIF_SCRIPT = "vif_script"
947 HV_XEN_CMD = "xen_cmd"
948 HV_VNET_HDR = "vnet_hdr"
949 HV_VIRIDIAN = "viridian"
950
951
952 HVS_PARAMETER_TYPES = {
953 HV_KVM_PATH: VTYPE_STRING,
954 HV_BOOT_ORDER: VTYPE_STRING,
955 HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
956 HV_CDROM_IMAGE_PATH: VTYPE_STRING,
957 HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
958 HV_NIC_TYPE: VTYPE_STRING,
959 HV_DISK_TYPE: VTYPE_STRING,
960 HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
961 HV_VNC_PASSWORD_FILE: VTYPE_STRING,
962 HV_VNC_BIND_ADDRESS: VTYPE_STRING,
963 HV_VNC_TLS: VTYPE_BOOL,
964 HV_VNC_X509: VTYPE_STRING,
965 HV_VNC_X509_VERIFY: VTYPE_BOOL,
966 HV_KVM_SPICE_BIND: VTYPE_STRING,
967 HV_KVM_SPICE_IP_VERSION: VTYPE_INT,
968 HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING,
969 HV_KVM_SPICE_LOSSLESS_IMG_COMPR: VTYPE_STRING,
970 HV_KVM_SPICE_JPEG_IMG_COMPR: VTYPE_STRING,
971 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: VTYPE_STRING,
972 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: VTYPE_STRING,
973 HV_KVM_SPICE_AUDIO_COMPR: VTYPE_BOOL,
974 HV_KVM_SPICE_USE_TLS: VTYPE_BOOL,
975 HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING,
976 HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL,
977 HV_ACPI: VTYPE_BOOL,
978 HV_PAE: VTYPE_BOOL,
979 HV_USE_BOOTLOADER: VTYPE_BOOL,
980 HV_BOOTLOADER_PATH: VTYPE_STRING,
981 HV_BOOTLOADER_ARGS: VTYPE_STRING,
982 HV_KERNEL_PATH: VTYPE_STRING,
983 HV_KERNEL_ARGS: VTYPE_STRING,
984 HV_INITRD_PATH: VTYPE_STRING,
985 HV_ROOT_PATH: VTYPE_MAYBE_STRING,
986 HV_SERIAL_CONSOLE: VTYPE_BOOL,
987 HV_SERIAL_SPEED: VTYPE_INT,
988 HV_USB_MOUSE: VTYPE_STRING,
989 HV_KEYMAP: VTYPE_STRING,
990 HV_DEVICE_MODEL: VTYPE_STRING,
991 HV_INIT_SCRIPT: VTYPE_STRING,
992 HV_MIGRATION_PORT: VTYPE_INT,
993 HV_MIGRATION_BANDWIDTH: VTYPE_INT,
994 HV_MIGRATION_DOWNTIME: VTYPE_INT,
995 HV_MIGRATION_MODE: VTYPE_STRING,
996 HV_USE_LOCALTIME: VTYPE_BOOL,
997 HV_DISK_CACHE: VTYPE_STRING,
998 HV_SECURITY_MODEL: VTYPE_STRING,
999 HV_SECURITY_DOMAIN: VTYPE_STRING,
1000 HV_KVM_FLAG: VTYPE_STRING,
1001 HV_VHOST_NET: VTYPE_BOOL,
1002 HV_KVM_USE_CHROOT: VTYPE_BOOL,
1003 HV_CPU_MASK: VTYPE_STRING,
1004 HV_MEM_PATH: VTYPE_STRING,
1005 HV_PASSTHROUGH: VTYPE_STRING,
1006 HV_BLOCKDEV_PREFIX: VTYPE_STRING,
1007 HV_REBOOT_BEHAVIOR: VTYPE_STRING,
1008 HV_CPU_TYPE: VTYPE_STRING,
1009 HV_CPU_CAP: VTYPE_INT,
1010 HV_CPU_WEIGHT: VTYPE_INT,
1011 HV_CPU_CORES: VTYPE_INT,
1012 HV_CPU_THREADS: VTYPE_INT,
1013 HV_CPU_SOCKETS: VTYPE_INT,
1014 HV_SOUNDHW: VTYPE_STRING,
1015 HV_USB_DEVICES: VTYPE_STRING,
1016 HV_VGA: VTYPE_STRING,
1017 HV_KVM_EXTRA: VTYPE_STRING,
1018 HV_KVM_MACHINE_VERSION: VTYPE_STRING,
1019 HV_VIF_TYPE: VTYPE_STRING,
1020 HV_VIF_SCRIPT: VTYPE_STRING,
1021 HV_XEN_CMD: VTYPE_STRING,
1022 HV_VNET_HDR: VTYPE_BOOL,
1023 HV_VIRIDIAN: VTYPE_BOOL,
1024 }
1025
1026 HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
1027
1028 HVS_PARAMETER_TITLES = {
1029 HV_ACPI: "ACPI",
1030 HV_BOOT_ORDER: "Boot_order",
1031 HV_CDROM_IMAGE_PATH: "CDROM_image_path",
1032 HV_DISK_TYPE: "Disk_type",
1033 HV_INITRD_PATH: "Initrd_path",
1034 HV_KERNEL_PATH: "Kernel_path",
1035 HV_NIC_TYPE: "NIC_type",
1036 HV_PAE: "PAE",
1037 HV_VNC_BIND_ADDRESS: "VNC_bind_address",
1038 HV_PASSTHROUGH: "pci_pass",
1039 HV_CPU_TYPE: "cpu_type",
1040 }
1041
1042
1043 HV_MIGRATION_COMPLETED = "completed"
1044 HV_MIGRATION_ACTIVE = "active"
1045 HV_MIGRATION_FAILED = "failed"
1046 HV_MIGRATION_CANCELLED = "cancelled"
1047
1048 HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
1049 HV_MIGRATION_COMPLETED,
1050 HV_MIGRATION_ACTIVE,
1051 HV_MIGRATION_FAILED,
1052 HV_MIGRATION_CANCELLED,
1053 ])
1054
1055 HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
1056 HV_MIGRATION_FAILED,
1057 HV_MIGRATION_CANCELLED,
1058 ])
1059
1060
1061 HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
1062
1063
1064 HV_NODEINFO_KEY_VERSION = "hv_version"
1065
1066
1067 HVST_MEMORY_TOTAL = "mem_total"
1068 HVST_MEMORY_NODE = "mem_node"
1069 HVST_MEMORY_HV = "mem_hv"
1070 HVST_CPU_TOTAL = "cpu_total"
1071 HVST_CPU_NODE = "cpu_node"
1072
1073 HVST_DEFAULTS = {
1074 HVST_MEMORY_TOTAL: 0,
1075 HVST_MEMORY_NODE: 0,
1076 HVST_MEMORY_HV: 0,
1077 HVST_CPU_TOTAL: 1,
1078 HVST_CPU_NODE: 1,
1079 }
1080
1081 HVSTS_PARAMETER_TYPES = {
1082 HVST_MEMORY_TOTAL: VTYPE_INT,
1083 HVST_MEMORY_NODE: VTYPE_INT,
1084 HVST_MEMORY_HV: VTYPE_INT,
1085 HVST_CPU_TOTAL: VTYPE_INT,
1086 HVST_CPU_NODE: VTYPE_INT,
1087 }
1088
1089 HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
1090
1091
1092 DS_DISK_TOTAL = "disk_total"
1093 DS_DISK_RESERVED = "disk_reserved"
1094 DS_DISK_OVERHEAD = "disk_overhead"
1095
1096 DS_DEFAULTS = {
1097 DS_DISK_TOTAL: 0,
1098 DS_DISK_RESERVED: 0,
1099 DS_DISK_OVERHEAD: 0,
1100 }
1101
1102 DSS_PARAMETER_TYPES = {
1103 DS_DISK_TOTAL: VTYPE_INT,
1104 DS_DISK_RESERVED: VTYPE_INT,
1105 DS_DISK_OVERHEAD: VTYPE_INT,
1106 }
1107
1108 DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
1109 DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
1110
1111
1112 BE_MEMORY = "memory"
1113 BE_MAXMEM = "maxmem"
1114 BE_MINMEM = "minmem"
1115 BE_VCPUS = "vcpus"
1116 BE_AUTO_BALANCE = "auto_balance"
1117 BE_ALWAYS_FAILOVER = "always_failover"
1118 BE_SPINDLE_USE = "spindle_use"
1119
1120 BES_PARAMETER_TYPES = {
1121 BE_MAXMEM: VTYPE_SIZE,
1122 BE_MINMEM: VTYPE_SIZE,
1123 BE_VCPUS: VTYPE_INT,
1124 BE_AUTO_BALANCE: VTYPE_BOOL,
1125 BE_ALWAYS_FAILOVER: VTYPE_BOOL,
1126 BE_SPINDLE_USE: VTYPE_INT,
1127 }
1128
1129 BES_PARAMETER_TITLES = {
1130 BE_AUTO_BALANCE: "Auto_balance",
1131 BE_MAXMEM: "ConfigMaxMem",
1132 BE_MINMEM: "ConfigMinMem",
1133 BE_VCPUS: "ConfigVCPUs",
1134 }
1135
1136 BES_PARAMETER_COMPAT = {
1137 BE_MEMORY: VTYPE_SIZE,
1138 }
1139 BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
1140
1141 BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1142
1143
1144 ISPEC_MEM_SIZE = "memory-size"
1145 ISPEC_CPU_COUNT = "cpu-count"
1146 ISPEC_DISK_COUNT = "disk-count"
1147 ISPEC_DISK_SIZE = "disk-size"
1148 ISPEC_NIC_COUNT = "nic-count"
1149 ISPEC_SPINDLE_USE = "spindle-use"
1150
1151 ISPECS_PARAMETER_TYPES = {
1152 ISPEC_MEM_SIZE: VTYPE_INT,
1153 ISPEC_CPU_COUNT: VTYPE_INT,
1154 ISPEC_DISK_COUNT: VTYPE_INT,
1155 ISPEC_DISK_SIZE: VTYPE_INT,
1156 ISPEC_NIC_COUNT: VTYPE_INT,
1157 ISPEC_SPINDLE_USE: VTYPE_INT,
1158 }
1159
1160 ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys())
1161
1162 ISPECS_MINMAX = "minmax"
1163 ISPECS_MIN = "min"
1164 ISPECS_MAX = "max"
1165 ISPECS_STD = "std"
1166 IPOLICY_DTS = "disk-templates"
1167 IPOLICY_VCPU_RATIO = "vcpu-ratio"
1168 IPOLICY_SPINDLE_RATIO = "spindle-ratio"
1169
1170 ISPECS_MINMAX_KEYS = compat.UniqueFrozenset([
1171 ISPECS_MIN,
1172 ISPECS_MAX,
1173 ])
1174
1175 IPOLICY_PARAMETERS = compat.UniqueFrozenset([
1176 IPOLICY_VCPU_RATIO,
1177 IPOLICY_SPINDLE_RATIO,
1178 ])
1179
1180 IPOLICY_ALL_KEYS = (IPOLICY_PARAMETERS |
1181 frozenset([ISPECS_MINMAX, ISPECS_STD, IPOLICY_DTS]))
1182
1183
1184 ND_OOB_PROGRAM = "oob_program"
1185 ND_SPINDLE_COUNT = "spindle_count"
1186 ND_EXCLUSIVE_STORAGE = "exclusive_storage"
1187
1188 NDS_PARAMETER_TYPES = {
1189 ND_OOB_PROGRAM: VTYPE_STRING,
1190 ND_SPINDLE_COUNT: VTYPE_INT,
1191 ND_EXCLUSIVE_STORAGE: VTYPE_BOOL,
1192 }
1193
1194 NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
1195
1196 NDS_PARAMETER_TITLES = {
1197 ND_OOB_PROGRAM: "OutOfBandProgram",
1198 ND_SPINDLE_COUNT: "SpindleCount",
1199 ND_EXCLUSIVE_STORAGE: "ExclusiveStorage",
1200 }
1201
1202
1203 LDP_RESYNC_RATE = "resync-rate"
1204 LDP_STRIPES = "stripes"
1205 LDP_BARRIERS = "disabled-barriers"
1206 LDP_NO_META_FLUSH = "disable-meta-flush"
1207 LDP_DEFAULT_METAVG = "default-metavg"
1208 LDP_DISK_CUSTOM = "disk-custom"
1209 LDP_NET_CUSTOM = "net-custom"
1210 LDP_PROTOCOL = "protocol"
1211 LDP_DYNAMIC_RESYNC = "dynamic-resync"
1212 LDP_PLAN_AHEAD = "c-plan-ahead"
1213 LDP_FILL_TARGET = "c-fill-target"
1214 LDP_DELAY_TARGET = "c-delay-target"
1215 LDP_MAX_RATE = "c-max-rate"
1216 LDP_MIN_RATE = "c-min-rate"
1217 LDP_POOL = "pool"
1218 DISK_LD_TYPES = {
1219 LDP_RESYNC_RATE: VTYPE_INT,
1220 LDP_STRIPES: VTYPE_INT,
1221 LDP_BARRIERS: VTYPE_STRING,
1222 LDP_NO_META_FLUSH: VTYPE_BOOL,
1223 LDP_DEFAULT_METAVG: VTYPE_STRING,
1224 LDP_DISK_CUSTOM: VTYPE_STRING,
1225 LDP_NET_CUSTOM: VTYPE_STRING,
1226 LDP_PROTOCOL: VTYPE_STRING,
1227 LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
1228 LDP_PLAN_AHEAD: VTYPE_INT,
1229 LDP_FILL_TARGET: VTYPE_INT,
1230 LDP_DELAY_TARGET: VTYPE_INT,
1231 LDP_MAX_RATE: VTYPE_INT,
1232 LDP_MIN_RATE: VTYPE_INT,
1233 LDP_POOL: VTYPE_STRING,
1234 }
1235 DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
1236
1237
1238
1239 DRBD_RESYNC_RATE = "resync-rate"
1240 DRBD_DATA_STRIPES = "data-stripes"
1241 DRBD_META_STRIPES = "meta-stripes"
1242 DRBD_DISK_BARRIERS = "disk-barriers"
1243 DRBD_META_BARRIERS = "meta-barriers"
1244 DRBD_DEFAULT_METAVG = "metavg"
1245 DRBD_DISK_CUSTOM = "disk-custom"
1246 DRBD_NET_CUSTOM = "net-custom"
1247 DRBD_PROTOCOL = "protocol"
1248 DRBD_DYNAMIC_RESYNC = "dynamic-resync"
1249 DRBD_PLAN_AHEAD = "c-plan-ahead"
1250 DRBD_FILL_TARGET = "c-fill-target"
1251 DRBD_DELAY_TARGET = "c-delay-target"
1252 DRBD_MAX_RATE = "c-max-rate"
1253 DRBD_MIN_RATE = "c-min-rate"
1254 LV_STRIPES = "stripes"
1255 RBD_POOL = "pool"
1256 DISK_DT_TYPES = {
1257 DRBD_RESYNC_RATE: VTYPE_INT,
1258 DRBD_DATA_STRIPES: VTYPE_INT,
1259 DRBD_META_STRIPES: VTYPE_INT,
1260 DRBD_DISK_BARRIERS: VTYPE_STRING,
1261 DRBD_META_BARRIERS: VTYPE_BOOL,
1262 DRBD_DEFAULT_METAVG: VTYPE_STRING,
1263 DRBD_DISK_CUSTOM: VTYPE_STRING,
1264 DRBD_NET_CUSTOM: VTYPE_STRING,
1265 DRBD_PROTOCOL: VTYPE_STRING,
1266 DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
1267 DRBD_PLAN_AHEAD: VTYPE_INT,
1268 DRBD_FILL_TARGET: VTYPE_INT,
1269 DRBD_DELAY_TARGET: VTYPE_INT,
1270 DRBD_MAX_RATE: VTYPE_INT,
1271 DRBD_MIN_RATE: VTYPE_INT,
1272 LV_STRIPES: VTYPE_INT,
1273 RBD_POOL: VTYPE_STRING,
1274 }
1275
1276 DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1277
1278
1279 OOB_POWER_ON = "power-on"
1280 OOB_POWER_OFF = "power-off"
1281 OOB_POWER_CYCLE = "power-cycle"
1282 OOB_POWER_STATUS = "power-status"
1283 OOB_HEALTH = "health"
1284
1285 OOB_COMMANDS = compat.UniqueFrozenset([
1286 OOB_POWER_ON,
1287 OOB_POWER_OFF,
1288 OOB_POWER_CYCLE,
1289 OOB_POWER_STATUS,
1290 OOB_HEALTH,
1291 ])
1292
1293 OOB_POWER_STATUS_POWERED = "powered"
1294
1295 OOB_TIMEOUT = 60
1296 OOB_POWER_DELAY = 2.0
1297
1298 OOB_STATUS_OK = "OK"
1299 OOB_STATUS_WARNING = "WARNING"
1300 OOB_STATUS_CRITICAL = "CRITICAL"
1301 OOB_STATUS_UNKNOWN = "UNKNOWN"
1302
1303 OOB_STATUSES = compat.UniqueFrozenset([
1304 OOB_STATUS_OK,
1305 OOB_STATUS_WARNING,
1306 OOB_STATUS_CRITICAL,
1307 OOB_STATUS_UNKNOWN,
1308 ])
1309
1310
1311 PP_DEFAULT = "default"
1312
1313
1314 NIC_MODE = "mode"
1315 NIC_LINK = "link"
1316
1317 NIC_MODE_BRIDGED = "bridged"
1318 NIC_MODE_ROUTED = "routed"
1319 NIC_MODE_OVS = "openvswitch"
1320 NIC_IP_POOL = "pool"
1321
1322 NIC_VALID_MODES = compat.UniqueFrozenset([
1323 NIC_MODE_BRIDGED,
1324 NIC_MODE_ROUTED,
1325 NIC_MODE_OVS,
1326 ])
1327
1328 RESERVE_ACTION = "reserve"
1329 RELEASE_ACTION = "release"
1330
1331 NICS_PARAMETER_TYPES = {
1332 NIC_MODE: VTYPE_STRING,
1333 NIC_LINK: VTYPE_STRING,
1334 }
1335
1336 NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1337
1338
1339 IDISK_SIZE = "size"
1340 IDISK_SPINDLES = "spindles"
1341 IDISK_MODE = "mode"
1342 IDISK_ADOPT = "adopt"
1343 IDISK_VG = "vg"
1344 IDISK_METAVG = "metavg"
1345 IDISK_PROVIDER = "provider"
1346 IDISK_NAME = "name"
1347 IDISK_PARAMS_TYPES = {
1348 IDISK_SIZE: VTYPE_SIZE,
1349 IDISK_SPINDLES: VTYPE_INT,
1350 IDISK_MODE: VTYPE_STRING,
1351 IDISK_ADOPT: VTYPE_STRING,
1352 IDISK_VG: VTYPE_STRING,
1353 IDISK_METAVG: VTYPE_STRING,
1354 IDISK_PROVIDER: VTYPE_STRING,
1355 IDISK_NAME: VTYPE_MAYBE_STRING,
1356 }
1357 IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1358
1359 MODIFIABLE_IDISK_PARAMS_TYPES = {
1360 IDISK_MODE: VTYPE_STRING,
1361 IDISK_NAME: VTYPE_STRING,
1362 }
1363 MODIFIABLE_IDISK_PARAMS = frozenset(MODIFIABLE_IDISK_PARAMS_TYPES.keys())
1364
1365
1366 INIC_MAC = "mac"
1367 INIC_IP = "ip"
1368 INIC_MODE = "mode"
1369 INIC_LINK = "link"
1370 INIC_NETWORK = "network"
1371 INIC_NAME = "name"
1372 INIC_PARAMS_TYPES = {
1373 INIC_IP: VTYPE_MAYBE_STRING,
1374 INIC_LINK: VTYPE_STRING,
1375 INIC_MAC: VTYPE_STRING,
1376 INIC_MODE: VTYPE_STRING,
1377 INIC_NETWORK: VTYPE_MAYBE_STRING,
1378 INIC_NAME: VTYPE_MAYBE_STRING,
1379 }
1380 INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1381
1382
1383 HT_XEN_PVM = "xen-pvm"
1384 HT_FAKE = "fake"
1385 HT_XEN_HVM = "xen-hvm"
1386 HT_KVM = "kvm"
1387 HT_CHROOT = "chroot"
1388 HT_LXC = "lxc"
1389 HYPER_TYPES = compat.UniqueFrozenset([
1390 HT_XEN_PVM,
1391 HT_FAKE,
1392 HT_XEN_HVM,
1393 HT_KVM,
1394 HT_CHROOT,
1395 HT_LXC,
1396 ])
1397 HTS_REQ_PORT = compat.UniqueFrozenset([HT_XEN_HVM, HT_KVM])
1398
1399 VNC_BASE_PORT = 5900
1400 VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1401
1402
1403 HT_NIC_RTL8139 = "rtl8139"
1404 HT_NIC_NE2K_PCI = "ne2k_pci"
1405 HT_NIC_NE2K_ISA = "ne2k_isa"
1406 HT_NIC_I82551 = "i82551"
1407 HT_NIC_I85557B = "i82557b"
1408 HT_NIC_I8259ER = "i82559er"
1409 HT_NIC_PCNET = "pcnet"
1410 HT_NIC_E1000 = "e1000"
1411 HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1412
1413 HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1414 HT_NIC_RTL8139,
1415 HT_NIC_NE2K_PCI,
1416 HT_NIC_E1000,
1417 HT_NIC_NE2K_ISA,
1418 HT_NIC_PARAVIRTUAL,
1419 ])
1420 HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1421 HT_NIC_RTL8139,
1422 HT_NIC_NE2K_PCI,
1423 HT_NIC_NE2K_ISA,
1424 HT_NIC_I82551,
1425 HT_NIC_I85557B,
1426 HT_NIC_I8259ER,
1427 HT_NIC_PCNET,
1428 HT_NIC_E1000,
1429 HT_NIC_PARAVIRTUAL,
1430 ])
1431
1432
1433
1434 HT_HVM_VIF_IOEMU = "ioemu"
1435 HT_HVM_VIF_VIF = "vif"
1436 HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1437 HT_HVM_VIF_IOEMU,
1438 HT_HVM_VIF_VIF,
1439 ])
1440
1441
1442 HT_DISK_IOEMU = "ioemu"
1443 HT_DISK_IDE = "ide"
1444 HT_DISK_SCSI = "scsi"
1445 HT_DISK_SD = "sd"
1446 HT_DISK_MTD = "mtd"
1447 HT_DISK_PFLASH = "pflash"
1448
1449 HT_CACHE_DEFAULT = "default"
1450 HT_CACHE_NONE = "none"
1451 HT_CACHE_WTHROUGH = "writethrough"
1452 HT_CACHE_WBACK = "writeback"
1453 HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1454 HT_CACHE_DEFAULT,
1455 HT_CACHE_NONE,
1456 HT_CACHE_WTHROUGH,
1457 HT_CACHE_WBACK,
1458 ])
1459
1460 HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1461 HT_DISK_PARAVIRTUAL,
1462 HT_DISK_IOEMU,
1463 ])
1464 HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1465 HT_DISK_PARAVIRTUAL,
1466 HT_DISK_IDE,
1467 HT_DISK_SCSI,
1468 HT_DISK_SD,
1469 HT_DISK_MTD,
1470 HT_DISK_PFLASH,
1471 ])
1472
1473
1474 HT_MOUSE_MOUSE = "mouse"
1475 HT_MOUSE_TABLET = "tablet"
1476
1477 HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1478 HT_MOUSE_MOUSE,
1479 HT_MOUSE_TABLET,
1480 ])
1481
1482
1483 HT_BO_FLOPPY = "floppy"
1484 HT_BO_CDROM = "cdrom"
1485 HT_BO_DISK = "disk"
1486 HT_BO_NETWORK = "network"
1487
1488 HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1489 HT_BO_FLOPPY,
1490 HT_BO_CDROM,
1491 HT_BO_DISK,
1492 HT_BO_NETWORK,
1493 ])
1494
1495
1496 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1497 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1498 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1499 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1500 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1501 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1502
1503 HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1504 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1505 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1506 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1507 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1508 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1509 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1510 ])
1511
1512
1513 HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1514 HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1515 HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1516
1517 HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1518 HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1519 HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1520 HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1521 ])
1522
1523
1524 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1525 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1526 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1527
1528 HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1529 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1530 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1531 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1532 ])
1533
1534
1535 HT_SM_NONE = "none"
1536 HT_SM_USER = "user"
1537 HT_SM_POOL = "pool"
1538
1539 HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1540 HT_SM_NONE,
1541 HT_SM_USER,
1542 HT_SM_POOL,
1543 ])
1544
1545
1546 HT_KVM_ENABLED = "enabled"
1547 HT_KVM_DISABLED = "disabled"
1548
1549 HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1550
1551
1552 HT_MIGRATION_LIVE = "live"
1553 HT_MIGRATION_NONLIVE = "non-live"
1554 HT_MIGRATION_MODES = compat.UniqueFrozenset([
1555 HT_MIGRATION_LIVE,
1556 HT_MIGRATION_NONLIVE,
1557 ])
1558
1559
1560 VERIFY_NPLUSONE_MEM = "nplusone_mem"
1561 VERIFY_OPTIONAL_CHECKS = compat.UniqueFrozenset([VERIFY_NPLUSONE_MEM])
1562
1563
1564 CV_TCLUSTER = "cluster"
1565 CV_TGROUP = "group"
1566 CV_TNODE = "node"
1567 CV_TINSTANCE = "instance"
1568
1569
1570 CV_ECLUSTERCFG = \
1571 (CV_TCLUSTER, "ECLUSTERCFG", "Cluster configuration verification failure")
1572 CV_ECLUSTERCERT = \
1573 (CV_TCLUSTER, "ECLUSTERCERT",
1574 "Cluster certificate files verification failure")
1575 CV_ECLUSTERFILECHECK = \
1576 (CV_TCLUSTER, "ECLUSTERFILECHECK",
1577 "Cluster configuration verification failure")
1578 CV_ECLUSTERDANGLINGNODES = \
1579 (CV_TNODE, "ECLUSTERDANGLINGNODES",
1580 "Some nodes belong to non-existing groups")
1581 CV_ECLUSTERDANGLINGINST = \
1582 (CV_TNODE, "ECLUSTERDANGLINGINST",
1583 "Some instances have a non-existing primary node")
1584 CV_EGROUPDIFFERENTPVSIZE = \
1585 (CV_TGROUP, "EGROUPDIFFERENTPVSIZE", "PVs in the group have different sizes")
1586 CV_EINSTANCEBADNODE = \
1587 (CV_TINSTANCE, "EINSTANCEBADNODE",
1588 "Instance marked as running lives on an offline node")
1589 CV_EINSTANCEDOWN = \
1590 (CV_TINSTANCE, "EINSTANCEDOWN", "Instance not running on its primary node")
1591 CV_EINSTANCELAYOUT = \
1592 (CV_TINSTANCE, "EINSTANCELAYOUT", "Instance has multiple secondary nodes")
1593 CV_EINSTANCEMISSINGDISK = \
1594 (CV_TINSTANCE, "EINSTANCEMISSINGDISK", "Missing volume on an instance")
1595 CV_EINSTANCEFAULTYDISK = \
1596 (CV_TINSTANCE, "EINSTANCEFAULTYDISK",
1597 "Impossible to retrieve status for a disk")
1598 CV_EINSTANCEWRONGNODE = \
1599 (CV_TINSTANCE, "EINSTANCEWRONGNODE", "Instance running on the wrong node")
1600 CV_EINSTANCESPLITGROUPS = \
1601 (CV_TINSTANCE, "EINSTANCESPLITGROUPS",
1602 "Instance with primary and secondary nodes in different groups")
1603 CV_EINSTANCEPOLICY = \
1604 (CV_TINSTANCE, "EINSTANCEPOLICY",
1605 "Instance does not meet policy")
1606 CV_EINSTANCEUNSUITABLENODE = \
1607 (CV_TINSTANCE, "EINSTANCEUNSUITABLENODE",
1608 "Instance running on nodes that are not suitable for it")
1609 CV_EINSTANCEMISSINGCFGPARAMETER = \
1610 (CV_TINSTANCE, "EINSTANCEMISSINGCFGPARAMETER",
1611 "A configuration parameter for an instance is missing")
1612 CV_ENODEDRBD = \
1613 (CV_TNODE, "ENODEDRBD", "Error parsing the DRBD status file")
1614 CV_ENODEDRBDVERSION = \
1615 (CV_TNODE, "ENODEDRBDVERSION", "DRBD version mismatch within a node group")
1616 CV_ENODEDRBDHELPER = \
1617 (CV_TNODE, "ENODEDRBDHELPER", "Error caused by the DRBD helper")
1618 CV_ENODEFILECHECK = \
1619 (CV_TNODE, "ENODEFILECHECK",
1620 "Error retrieving the checksum of the node files")
1621 CV_ENODEHOOKS = \
1622 (CV_TNODE, "ENODEHOOKS", "Communication failure in hooks execution")
1623 CV_ENODEHV = \
1624 (CV_TNODE, "ENODEHV", "Hypervisor parameters verification failure")
1625 CV_ENODELVM = \
1626 (CV_TNODE, "ENODELVM", "LVM-related node error")
1627 CV_ENODEN1 = \
1628 (CV_TNODE, "ENODEN1", "Not enough memory to accommodate instance failovers")
1629 CV_ENODENET = \
1630 (CV_TNODE, "ENODENET", "Network-related node error")
1631 CV_ENODEOS = \
1632 (CV_TNODE, "ENODEOS", "OS-related node error")
1633 CV_ENODEORPHANINSTANCE = \
1634 (CV_TNODE, "ENODEORPHANINSTANCE", "Unknown intance running on a node")
1635 CV_ENODEORPHANLV = \
1636 (CV_TNODE, "ENODEORPHANLV", "Unknown LVM logical volume")
1637 CV_ENODERPC = \
1638 (CV_TNODE, "ENODERPC",
1639 "Error during connection to the primary node of an instance")
1640 CV_ENODESSH = \
1641 (CV_TNODE, "ENODESSH", "SSH-related node error")
1642 CV_ENODEVERSION = \
1643 (CV_TNODE, "ENODEVERSION",
1644 "Protocol version mismatch or Ganeti version mismatch")
1645 CV_ENODESETUP = \
1646 (CV_TNODE, "ENODESETUP", "Node setup error")
1647 CV_ENODETIME = \
1648 (CV_TNODE, "ENODETIME", "Node returned invalid time")
1649 CV_ENODEOOBPATH = \
1650 (CV_TNODE, "ENODEOOBPATH", "Invalid Out Of Band path")
1651 CV_ENODEUSERSCRIPTS = \
1652 (CV_TNODE, "ENODEUSERSCRIPTS", "User scripts not present or not executable")
1653 CV_ENODEFILESTORAGEPATHS = \
1654 (CV_TNODE, "ENODEFILESTORAGEPATHS", "Detected bad file storage paths")
1655 CV_ENODEFILESTORAGEPATHUNUSABLE = \
1656 (CV_TNODE, "ENODEFILESTORAGEPATHUNUSABLE", "File storage path unusable")
1657 CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1658 (CV_TNODE, "ENODESHAREDFILESTORAGEPATHUNUSABLE",
1659 "Shared file storage path unusable")
1660
1661 CV_ALL_ECODES = compat.UniqueFrozenset([
1662 CV_ECLUSTERCFG,
1663 CV_ECLUSTERCERT,
1664 CV_ECLUSTERFILECHECK,
1665 CV_ECLUSTERDANGLINGNODES,
1666 CV_ECLUSTERDANGLINGINST,
1667 CV_EINSTANCEBADNODE,
1668 CV_EINSTANCEDOWN,
1669 CV_EINSTANCELAYOUT,
1670 CV_EINSTANCEMISSINGDISK,
1671 CV_EINSTANCEFAULTYDISK,
1672 CV_EINSTANCEWRONGNODE,
1673 CV_EINSTANCESPLITGROUPS,
1674 CV_EINSTANCEPOLICY,
1675 CV_ENODEDRBD,
1676 CV_ENODEDRBDHELPER,
1677 CV_ENODEFILECHECK,
1678 CV_ENODEHOOKS,
1679 CV_ENODEHV,
1680 CV_ENODELVM,
1681 CV_ENODEN1,
1682 CV_ENODENET,
1683 CV_ENODEOS,
1684 CV_ENODEORPHANINSTANCE,
1685 CV_ENODEORPHANLV,
1686 CV_ENODERPC,
1687 CV_ENODESSH,
1688 CV_ENODEVERSION,
1689 CV_ENODESETUP,
1690 CV_ENODETIME,
1691 CV_ENODEOOBPATH,
1692 CV_ENODEUSERSCRIPTS,
1693 CV_ENODEFILESTORAGEPATHS,
1694 CV_ENODEFILESTORAGEPATHUNUSABLE,
1695 CV_ENODESHAREDFILESTORAGEPATHUNUSABLE,
1696 ])
1697
1698 CV_ALL_ECODES_STRINGS = \
1699 compat.UniqueFrozenset(estr for (_, estr, _) in CV_ALL_ECODES)
1700
1701
1702 NV_BRIDGES = "bridges"
1703 NV_DRBDHELPER = "drbd-helper"
1704 NV_DRBDVERSION = "drbd-version"
1705 NV_DRBDLIST = "drbd-list"
1706 NV_EXCLUSIVEPVS = "exclusive-pvs"
1707 NV_FILELIST = "filelist"
1708 NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1709 NV_FILE_STORAGE_PATH = "file-storage-path"
1710 NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1711 NV_HVINFO = "hvinfo"
1712 NV_HVPARAMS = "hvparms"
1713 NV_HYPERVISOR = "hypervisor"
1714 NV_INSTANCELIST = "instancelist"
1715 NV_LVLIST = "lvlist"
1716 NV_MASTERIP = "master-ip"
1717 NV_NODELIST = "nodelist"
1718 NV_NODENETTEST = "node-net-test"
1719 NV_NODESETUP = "nodesetup"
1720 NV_OOB_PATHS = "oob-paths"
1721 NV_OSLIST = "oslist"
1722 NV_PVLIST = "pvlist"
1723 NV_TIME = "time"
1724 NV_USERSCRIPTS = "user-scripts"
1725 NV_VERSION = "version"
1726 NV_VGLIST = "vglist"
1727 NV_VMNODES = "vmnodes"
1728
1729
1730 INSTST_RUNNING = "running"
1731 INSTST_ADMINDOWN = "ADMIN_down"
1732 INSTST_ADMINOFFLINE = "ADMIN_offline"
1733 INSTST_NODEOFFLINE = "ERROR_nodeoffline"
1734 INSTST_NODEDOWN = "ERROR_nodedown"
1735 INSTST_WRONGNODE = "ERROR_wrongnode"
1736 INSTST_ERRORUP = "ERROR_up"
1737 INSTST_ERRORDOWN = "ERROR_down"
1738 INSTST_ALL = compat.UniqueFrozenset([
1739 INSTST_RUNNING,
1740 INSTST_ADMINDOWN,
1741 INSTST_ADMINOFFLINE,
1742 INSTST_NODEOFFLINE,
1743 INSTST_NODEDOWN,
1744 INSTST_WRONGNODE,
1745 INSTST_ERRORUP,
1746 INSTST_ERRORDOWN,
1747 ])
1748
1749
1750 ADMINST_UP = "up"
1751 ADMINST_DOWN = "down"
1752 ADMINST_OFFLINE = "offline"
1753 ADMINST_ALL = compat.UniqueFrozenset([
1754 ADMINST_UP,
1755 ADMINST_DOWN,
1756 ADMINST_OFFLINE,
1757 ])
1758
1759
1760 NR_REGULAR = "R"
1761 NR_MASTER = "M"
1762 NR_MCANDIDATE = "C"
1763 NR_DRAINED = "D"
1764 NR_OFFLINE = "O"
1765 NR_ALL = compat.UniqueFrozenset([
1766 NR_REGULAR,
1767 NR_MASTER,
1768 NR_MCANDIDATE,
1769 NR_DRAINED,
1770 NR_OFFLINE,
1771 ])
1772
1773
1774 SSL_CERT_EXPIRATION_WARN = 30
1775 SSL_CERT_EXPIRATION_ERROR = 7
1776
1777
1778 IALLOCATOR_VERSION = 2
1779 IALLOCATOR_DIR_IN = "in"
1780 IALLOCATOR_DIR_OUT = "out"
1781 VALID_IALLOCATOR_DIRECTIONS = compat.UniqueFrozenset([
1782 IALLOCATOR_DIR_IN,
1783 IALLOCATOR_DIR_OUT,
1784 ])
1785 IALLOCATOR_MODE_ALLOC = "allocate"
1786 IALLOCATOR_MODE_RELOC = "relocate"
1787 IALLOCATOR_MODE_CHG_GROUP = "change-group"
1788 IALLOCATOR_MODE_NODE_EVAC = "node-evacuate"
1789 IALLOCATOR_MODE_MULTI_ALLOC = "multi-allocate"
1790 VALID_IALLOCATOR_MODES = compat.UniqueFrozenset([
1791 IALLOCATOR_MODE_ALLOC,
1792 IALLOCATOR_MODE_RELOC,
1793 IALLOCATOR_MODE_CHG_GROUP,
1794 IALLOCATOR_MODE_NODE_EVAC,
1795 IALLOCATOR_MODE_MULTI_ALLOC,
1796 ])
1797 IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
1798 DEFAULT_IALLOCATOR_SHORTCUT = "."
1799
1800 IALLOCATOR_NEVAC_PRI = "primary-only"
1801 IALLOCATOR_NEVAC_SEC = "secondary-only"
1802 IALLOCATOR_NEVAC_ALL = "all"
1803 IALLOCATOR_NEVAC_MODES = compat.UniqueFrozenset([
1804 IALLOCATOR_NEVAC_PRI,
1805 IALLOCATOR_NEVAC_SEC,
1806 IALLOCATOR_NEVAC_ALL,
1807 ])
1808
1809
1810 NODE_EVAC_PRI = "primary-only"
1811 NODE_EVAC_SEC = "secondary-only"
1812 NODE_EVAC_ALL = "all"
1813 NODE_EVAC_MODES = compat.UniqueFrozenset([
1814 NODE_EVAC_PRI,
1815 NODE_EVAC_SEC,
1816 NODE_EVAC_ALL,
1817 ])
1818
1819
1820 JOB_QUEUE_VERSION = 1
1821 JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1822 JOB_QUEUE_FILES_PERMS = 0640
1823
1824 JOB_ID_TEMPLATE = r"\d+"
1825 JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1826
1827
1828 JOB_NOTCHANGED = "nochange"
1829
1830
1831 JOB_STATUS_QUEUED = "queued"
1832 JOB_STATUS_WAITING = "waiting"
1833 JOB_STATUS_CANCELING = "canceling"
1834 JOB_STATUS_RUNNING = "running"
1835 JOB_STATUS_CANCELED = "canceled"
1836 JOB_STATUS_SUCCESS = "success"
1837 JOB_STATUS_ERROR = "error"
1838 JOBS_PENDING = compat.UniqueFrozenset([
1839 JOB_STATUS_QUEUED,
1840 JOB_STATUS_WAITING,
1841 JOB_STATUS_CANCELING,
1842 ])
1843 JOBS_FINALIZED = compat.UniqueFrozenset([
1844 JOB_STATUS_CANCELED,
1845 JOB_STATUS_SUCCESS,
1846 JOB_STATUS_ERROR,
1847 ])
1848 JOB_STATUS_ALL = compat.UniqueFrozenset([
1849 JOB_STATUS_RUNNING,
1850 ]) | JOBS_PENDING | JOBS_FINALIZED
1851
1852
1853
1854 OP_STATUS_QUEUED = "queued"
1855 OP_STATUS_WAITING = "waiting"
1856 OP_STATUS_CANCELING = "canceling"
1857 OP_STATUS_RUNNING = "running"
1858
1859 OP_STATUS_CANCELED = "canceled"
1860 OP_STATUS_SUCCESS = "success"
1861 OP_STATUS_ERROR = "error"
1862 OPS_FINALIZED = compat.UniqueFrozenset([
1863 OP_STATUS_CANCELED,
1864 OP_STATUS_SUCCESS,
1865 OP_STATUS_ERROR,
1866 ])
1867
1868
1869 OP_PRIO_LOWEST = +19
1870 OP_PRIO_HIGHEST = -20
1871
1872 OP_PRIO_LOW = +10
1873 OP_PRIO_NORMAL = 0
1874 OP_PRIO_HIGH = -10
1875
1876 OP_PRIO_SUBMIT_VALID = compat.UniqueFrozenset([
1877 OP_PRIO_LOW,
1878 OP_PRIO_NORMAL,
1879 OP_PRIO_HIGH,
1880 ])
1881
1882 OP_PRIO_DEFAULT = OP_PRIO_NORMAL
1883
1884
1885 LOCKS_REPLACE = "replace"
1886 LOCKS_APPEND = "append"
1887
1888
1889
1890
1891
1892
1893 LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1894 LOCK_ATTEMPTS_MAXWAIT = 15.0
1895 LOCK_ATTEMPTS_MINWAIT = 1.0
1896
1897
1898 ELOG_MESSAGE = "message"
1899 ELOG_REMOTE_IMPORT = "remote-import"
1900 ELOG_JQUEUE_TEST = "jqueue-test"
1901
1902
1903 ETC_HOSTS_ADD = "add"
1904 ETC_HOSTS_REMOVE = "remove"
1905
1906
1907 JQT_MSGPREFIX = "TESTMSG="
1908 JQT_EXPANDNAMES = "expandnames"
1909 JQT_EXEC = "exec"
1910 JQT_LOGMSG = "logmsg"
1911 JQT_STARTMSG = "startmsg"
1912 JQT_ALL = compat.UniqueFrozenset([
1913 JQT_EXPANDNAMES,
1914 JQT_EXEC,
1915 JQT_LOGMSG,
1916 JQT_STARTMSG,
1917 ])
1918
1919
1920 QR_CLUSTER = "cluster"
1921 QR_INSTANCE = "instance"
1922 QR_NODE = "node"
1923 QR_LOCK = "lock"
1924 QR_GROUP = "group"
1925 QR_OS = "os"
1926 QR_JOB = "job"
1927 QR_EXPORT = "export"
1928 QR_NETWORK = "network"
1929 QR_EXTSTORAGE = "extstorage"
1930
1931
1932 QR_VIA_OP = compat.UniqueFrozenset([
1933 QR_CLUSTER,
1934 QR_INSTANCE,
1935 QR_NODE,
1936 QR_GROUP,
1937 QR_OS,
1938 QR_EXPORT,
1939 QR_NETWORK,
1940 QR_EXTSTORAGE,
1941 ])
1942
1943
1944 QR_VIA_LUXI = QR_VIA_OP.union([
1945 QR_LOCK,
1946 QR_JOB,
1947 ])
1948
1949
1950 QR_VIA_RAPI = QR_VIA_LUXI
1951
1952
1953 QFT_UNKNOWN = "unknown"
1954 QFT_TEXT = "text"
1955 QFT_BOOL = "bool"
1956 QFT_NUMBER = "number"
1957 QFT_UNIT = "unit"
1958 QFT_TIMESTAMP = "timestamp"
1959 QFT_OTHER = "other"
1960
1961
1962 QFT_ALL = compat.UniqueFrozenset([
1963 QFT_UNKNOWN,
1964 QFT_TEXT,
1965 QFT_BOOL,
1966 QFT_NUMBER,
1967 QFT_UNIT,
1968 QFT_TIMESTAMP,
1969 QFT_OTHER,
1970 ])
1971
1972
1973
1974
1975 RS_NORMAL = 0
1976
1977 RS_UNKNOWN = 1
1978
1979 RS_NODATA = 2
1980
1981
1982
1983 RS_UNAVAIL = 3
1984
1985 RS_OFFLINE = 4
1986
1987 RS_ALL = compat.UniqueFrozenset([
1988 RS_NORMAL,
1989 RS_UNKNOWN,
1990 RS_NODATA,
1991 RS_UNAVAIL,
1992 RS_OFFLINE,
1993 ])
1994
1995
1996 RSS_DESCRIPTION = {
1997 RS_UNKNOWN: ("(unknown)", "??"),
1998 RS_NODATA: ("(nodata)", "?"),
1999 RS_OFFLINE: ("(offline)", "*"),
2000 RS_UNAVAIL: ("(unavail)", "-"),
2001 }
2002
2003
2004 MAX_NICS = 8
2005 MAX_DISKS = 16
2006
2007
2008 SSCONF_FILEPREFIX = "ssconf_"
2009
2010 SS_CLUSTER_NAME = "cluster_name"
2011 SS_CLUSTER_TAGS = "cluster_tags"
2012 SS_FILE_STORAGE_DIR = "file_storage_dir"
2013 SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
2014 SS_MASTER_CANDIDATES = "master_candidates"
2015 SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
2016 SS_MASTER_IP = "master_ip"
2017 SS_MASTER_NETDEV = "master_netdev"
2018 SS_MASTER_NETMASK = "master_netmask"
2019 SS_MASTER_NODE = "master_node"
2020 SS_NODE_LIST = "node_list"
2021 SS_NODE_PRIMARY_IPS = "node_primary_ips"
2022 SS_NODE_SECONDARY_IPS = "node_secondary_ips"
2023 SS_OFFLINE_NODES = "offline_nodes"
2024 SS_ONLINE_NODES = "online_nodes"
2025 SS_PRIMARY_IP_FAMILY = "primary_ip_family"
2026 SS_INSTANCE_LIST = "instance_list"
2027 SS_RELEASE_VERSION = "release_version"
2028 SS_HYPERVISOR_LIST = "hypervisor_list"
2029 SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
2030 SS_UID_POOL = "uid_pool"
2031 SS_NODEGROUPS = "nodegroups"
2032 SS_NETWORKS = "networks"
2033
2034
2035 SS_HVPARAMS_PREF = "hvparams_"
2036
2037
2038 SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
2039 SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
2040 SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
2041 SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
2042 SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
2043 SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
2044
2045 VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
2046 SS_HVPARAMS_XEN_PVM,
2047 SS_HVPARAMS_XEN_FAKE,
2048 SS_HVPARAMS_XEN_HVM,
2049 SS_HVPARAMS_XEN_KVM,
2050 SS_HVPARAMS_XEN_CHROOT,
2051 SS_HVPARAMS_XEN_LXC,
2052 ])
2053
2054 SS_FILE_PERMS = 0444
2055
2056
2057 DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
2058
2059 HVC_DEFAULTS = {
2060 HT_XEN_PVM: {
2061 HV_USE_BOOTLOADER: False,
2062 HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
2063 HV_BOOTLOADER_ARGS: "",
2064 HV_KERNEL_PATH: XEN_KERNEL,
2065 HV_INITRD_PATH: "",
2066 HV_ROOT_PATH: "/dev/xvda1",
2067 HV_KERNEL_ARGS: "ro",
2068 HV_MIGRATION_PORT: 8002,
2069 HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
2070 HV_BLOCKDEV_PREFIX: "sd",
2071 HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
2072 HV_CPU_MASK: CPU_PINNING_ALL,
2073 HV_CPU_CAP: 0,
2074 HV_CPU_WEIGHT: 256,
2075 HV_VIF_SCRIPT: "",
2076 HV_XEN_CMD: XEN_CMD_XM,
2077 },
2078 HT_XEN_HVM: {
2079 HV_BOOT_ORDER: "cd",
2080 HV_CDROM_IMAGE_PATH: "",
2081 HV_NIC_TYPE: HT_NIC_RTL8139,
2082 HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
2083 HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY,
2084 HV_VNC_PASSWORD_FILE: pathutils.VNC_PASSWORD_FILE,
2085 HV_ACPI: True,
2086 HV_PAE: True,
2087 HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
2088 HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
2089 HV_MIGRATION_PORT: 8002,
2090 HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
2091 HV_USE_LOCALTIME: False,
2092 HV_BLOCKDEV_PREFIX: "hd",
2093 HV_PASSTHROUGH: "",
2094 HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
2095 HV_CPU_MASK: CPU_PINNING_ALL,
2096 HV_CPU_CAP: 0,
2097 HV_CPU_WEIGHT: 256,
2098 HV_VIF_TYPE: HT_HVM_VIF_IOEMU,
2099 HV_VIF_SCRIPT: "",
2100 HV_VIRIDIAN: False,
2101 HV_XEN_CMD: XEN_CMD_XM,
2102 },
2103 HT_KVM: {
2104 HV_KVM_PATH: KVM_PATH,
2105 HV_KERNEL_PATH: KVM_KERNEL,
2106 HV_INITRD_PATH: "",
2107 HV_KERNEL_ARGS: "ro",
2108 HV_ROOT_PATH: "/dev/vda1",
2109 HV_ACPI: True,
2110 HV_SERIAL_CONSOLE: True,
2111 HV_SERIAL_SPEED: 38400,
2112 HV_VNC_BIND_ADDRESS: "",
2113 HV_VNC_TLS: False,
2114 HV_VNC_X509: "",
2115 HV_VNC_X509_VERIFY: False,
2116 HV_VNC_PASSWORD_FILE: "",
2117 HV_KVM_SPICE_BIND: "",
2118 HV_KVM_SPICE_IP_VERSION: IFACE_NO_IP_VERSION_SPECIFIED,
2119 HV_KVM_SPICE_PASSWORD_FILE: "",
2120 HV_KVM_SPICE_LOSSLESS_IMG_COMPR: "",
2121 HV_KVM_SPICE_JPEG_IMG_COMPR: "",
2122 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: "",
2123 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: "",
2124 HV_KVM_SPICE_AUDIO_COMPR: True,
2125 HV_KVM_SPICE_USE_TLS: False,
2126 HV_KVM_SPICE_TLS_CIPHERS: OPENSSL_CIPHERS,
2127 HV_KVM_SPICE_USE_VDAGENT: True,
2128 HV_KVM_FLOPPY_IMAGE_PATH: "",
2129 HV_CDROM_IMAGE_PATH: "",
2130 HV_KVM_CDROM2_IMAGE_PATH: "",
2131 HV_BOOT_ORDER: HT_BO_DISK,
2132 HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
2133 HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
2134 HV_KVM_CDROM_DISK_TYPE: "",
2135 HV_USB_MOUSE: "",
2136 HV_KEYMAP: "",
2137 HV_MIGRATION_PORT: 8102,
2138 HV_MIGRATION_BANDWIDTH: 32,
2139 HV_MIGRATION_DOWNTIME: 30,
2140 HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
2141 HV_USE_LOCALTIME: False,
2142 HV_DISK_CACHE: HT_CACHE_DEFAULT,
2143 HV_SECURITY_MODEL: HT_SM_NONE,
2144 HV_SECURITY_DOMAIN: "",
2145 HV_KVM_FLAG: "",
2146 HV_VHOST_NET: False,
2147 HV_KVM_USE_CHROOT: False,
2148 HV_MEM_PATH: "",
2149 HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
2150 HV_CPU_MASK: CPU_PINNING_ALL,
2151 HV_CPU_TYPE: "",
2152 HV_CPU_CORES: 0,
2153 HV_CPU_THREADS: 0,
2154 HV_CPU_SOCKETS: 0,
2155 HV_SOUNDHW: "",
2156 HV_USB_DEVICES: "",
2157 HV_VGA: "",
2158 HV_KVM_EXTRA: "",
2159 HV_KVM_MACHINE_VERSION: "",
2160 HV_VNET_HDR: True,
2161 },
2162 HT_FAKE: {
2163 HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
2164 },
2165 HT_CHROOT: {
2166 HV_INIT_SCRIPT: "/ganeti-chroot",
2167 },
2168 HT_LXC: {
2169 HV_CPU_MASK: "",
2170 },
2171 }
2172
2173 HVC_GLOBALS = compat.UniqueFrozenset([
2174 HV_MIGRATION_PORT,
2175 HV_MIGRATION_BANDWIDTH,
2176 HV_MIGRATION_MODE,
2177 HV_XEN_CMD,
2178 ])
2179
2180 BEC_DEFAULTS = {
2181 BE_MINMEM: 128,
2182 BE_MAXMEM: 128,
2183 BE_VCPUS: 1,
2184 BE_AUTO_BALANCE: True,
2185 BE_ALWAYS_FAILOVER: False,
2186 BE_SPINDLE_USE: 1,
2187 }
2188
2189 NDC_DEFAULTS = {
2190 ND_OOB_PROGRAM: "",
2191 ND_SPINDLE_COUNT: 1,
2192 ND_EXCLUSIVE_STORAGE: False,
2193 }
2194
2195 NDC_GLOBALS = compat.UniqueFrozenset([
2196 ND_EXCLUSIVE_STORAGE,
2197 ])
2198
2199 DISK_LD_DEFAULTS = {
2200 DT_DRBD8: {
2201 LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
2202 LDP_BARRIERS: _autoconf.DRBD_BARRIERS,
2203 LDP_NO_META_FLUSH: _autoconf.DRBD_NO_META_FLUSH,
2204 LDP_DEFAULT_METAVG: DEFAULT_VG,
2205 LDP_DISK_CUSTOM: "",
2206 LDP_NET_CUSTOM: "",
2207 LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
2208 LDP_DYNAMIC_RESYNC: False,
2209
2210
2211
2212
2213
2214
2215 LDP_PLAN_AHEAD: 20,
2216 LDP_FILL_TARGET: 0,
2217 LDP_DELAY_TARGET: 1,
2218 LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED,
2219 LDP_MIN_RATE: 4 * 1024,
2220 },
2221 DT_PLAIN: {
2222 LDP_STRIPES: _autoconf.LVM_STRIPECOUNT
2223 },
2224 DT_FILE: {},
2225 DT_SHARED_FILE: {},
2226 DT_BLOCK: {},
2227 DT_RBD: {
2228 LDP_POOL: "rbd"
2229 },
2230 DT_EXT: {},
2231 }
2232
2233
2234 _LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
2235 _DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
2236
2237 DISK_DT_DEFAULTS = {
2238 DT_PLAIN: {
2239 LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
2240 },
2241 DT_DRBD8: {
2242 DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
2243 DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
2244 DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
2245 DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
2246 DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
2247 DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
2248 DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
2249 DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
2250 DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
2251 DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
2252 DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
2253 DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
2254 DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
2255 DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
2256 DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
2257 },
2258 DT_DISKLESS: {},
2259 DT_FILE: {},
2260 DT_SHARED_FILE: {},
2261 DT_BLOCK: {},
2262 DT_RBD: {
2263 RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL]
2264 },
2265 DT_EXT: {},
2266 }
2267
2268
2269 del _LV_DEFAULTS, _DRBD_DEFAULTS
2270
2271 NICC_DEFAULTS = {
2272 NIC_MODE: NIC_MODE_BRIDGED,
2273 NIC_LINK: DEFAULT_BRIDGE,
2274 }
2275
2276
2277
2278 ISPECS_MINMAX_DEFAULTS = {
2279 ISPECS_MIN: {
2280 ISPEC_MEM_SIZE: 128,
2281 ISPEC_CPU_COUNT: 1,
2282 ISPEC_DISK_COUNT: 1,
2283 ISPEC_DISK_SIZE: 1024,
2284 ISPEC_NIC_COUNT: 1,
2285 ISPEC_SPINDLE_USE: 1,
2286 },
2287 ISPECS_MAX: {
2288 ISPEC_MEM_SIZE: 32768,
2289 ISPEC_CPU_COUNT: 8,
2290 ISPEC_DISK_COUNT: MAX_DISKS,
2291 ISPEC_DISK_SIZE: 1024 * 1024,
2292 ISPEC_NIC_COUNT: MAX_NICS,
2293 ISPEC_SPINDLE_USE: 12,
2294 },
2295 }
2296 IPOLICY_DEFAULTS = {
2297 ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
2298 ISPECS_STD: {
2299 ISPEC_MEM_SIZE: 128,
2300 ISPEC_CPU_COUNT: 1,
2301 ISPEC_DISK_COUNT: 1,
2302 ISPEC_DISK_SIZE: 1024,
2303 ISPEC_NIC_COUNT: 1,
2304 ISPEC_SPINDLE_USE: 1,
2305 },
2306 IPOLICY_DTS: list(DISK_TEMPLATES),
2307 IPOLICY_VCPU_RATIO: 4.0,
2308 IPOLICY_SPINDLE_RATIO: 32.0,
2309 }
2310
2311 MASTER_POOL_SIZE_DEFAULT = 10
2312
2313
2314
2315 PART_MARGIN = .01
2316
2317 PART_RESERVED = .02
2318
2319 CONFD_PROTOCOL_VERSION = 1
2320
2321 CONFD_REQ_PING = 0
2322 CONFD_REQ_NODE_ROLE_BYNAME = 1
2323 CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
2324 CONFD_REQ_CLUSTER_MASTER = 3
2325 CONFD_REQ_NODE_PIP_LIST = 4
2326 CONFD_REQ_MC_PIP_LIST = 5
2327 CONFD_REQ_INSTANCES_IPS_LIST = 6
2328 CONFD_REQ_NODE_DRBD = 7
2329 CONFD_REQ_NODE_INSTANCES = 8
2330
2331
2332
2333
2334 CONFD_REQQ_LINK = "0"
2335 CONFD_REQQ_IP = "1"
2336 CONFD_REQQ_IPLIST = "2"
2337 CONFD_REQQ_FIELDS = "3"
2338
2339 CONFD_REQFIELD_NAME = "0"
2340 CONFD_REQFIELD_IP = "1"
2341 CONFD_REQFIELD_MNODE_PIP = "2"
2342
2343 CONFD_REQS = compat.UniqueFrozenset([
2344 CONFD_REQ_PING,
2345 CONFD_REQ_NODE_ROLE_BYNAME,
2346 CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
2347 CONFD_REQ_CLUSTER_MASTER,
2348 CONFD_REQ_NODE_PIP_LIST,
2349 CONFD_REQ_MC_PIP_LIST,
2350 CONFD_REQ_INSTANCES_IPS_LIST,
2351 CONFD_REQ_NODE_DRBD,
2352 ])
2353
2354 CONFD_REPL_STATUS_OK = 0
2355 CONFD_REPL_STATUS_ERROR = 1
2356 CONFD_REPL_STATUS_NOTIMPLEMENTED = 2
2357
2358 CONFD_REPL_STATUSES = compat.UniqueFrozenset([
2359 CONFD_REPL_STATUS_OK,
2360 CONFD_REPL_STATUS_ERROR,
2361 CONFD_REPL_STATUS_NOTIMPLEMENTED,
2362 ])
2363
2364 (CONFD_NODE_ROLE_MASTER,
2365 CONFD_NODE_ROLE_CANDIDATE,
2366 CONFD_NODE_ROLE_OFFLINE,
2367 CONFD_NODE_ROLE_DRAINED,
2368 CONFD_NODE_ROLE_REGULAR,
2369 ) = range(5)
2370
2371
2372 CONFD_ERROR_UNKNOWN_ENTRY = 1
2373 CONFD_ERROR_INTERNAL = 2
2374 CONFD_ERROR_ARGUMENT = 3
2375
2376
2377
2378
2379 CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
2380
2381
2382
2383
2384
2385 CONFD_CONFIG_RELOAD_TIMEOUT = 17
2386
2387
2388
2389
2390 CONFD_CONFIG_RELOAD_RATELIMIT = 250000
2391
2392
2393
2394
2395
2396 CONFD_MAGIC_FOURCC = "plj0"
2397
2398
2399
2400
2401 CONFD_DEFAULT_REQ_COVERAGE = 6
2402
2403
2404
2405
2406 CONFD_CLIENT_EXPIRE_TIMEOUT = 10
2407
2408
2409
2410
2411
2412
2413 MAX_UDP_DATA_SIZE = 61440
2414
2415
2416 UIDPOOL_UID_MIN = 0
2417 UIDPOOL_UID_MAX = 2 ** 32 - 1
2418
2419
2420 PGREP = "pgrep"
2421
2422
2423 INITIAL_NODE_GROUP_NAME = "default"
2424
2425
2426 ALLOC_POLICY_PREFERRED = "preferred"
2427 ALLOC_POLICY_LAST_RESORT = "last_resort"
2428 ALLOC_POLICY_UNALLOCABLE = "unallocable"
2429 VALID_ALLOC_POLICIES = [
2430 ALLOC_POLICY_PREFERRED,
2431 ALLOC_POLICY_LAST_RESORT,
2432 ALLOC_POLICY_UNALLOCABLE,
2433 ]
2434
2435
2436 BLOCKDEV_DRIVER_MANUAL = "manual"
2437
2438
2439 QEMUIMG_PATH = _autoconf.QEMUIMG_PATH
2440
2441
2442 HTOOLS = _autoconf.HTOOLS
2443
2444 IALLOC_HAIL = "hail"
2445
2446
2447
2448 FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2449 FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2450
2451
2452 SSHK_RSA = "rsa"
2453 SSHK_DSA = "dsa"
2454 SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2455
2456
2457 SSHAK_RSA = "ssh-rsa"
2458 SSHAK_DSS = "ssh-dss"
2459 SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2460
2461
2462 SSHS_CLUSTER_NAME = "cluster_name"
2463 SSHS_SSH_HOST_KEY = "ssh_host_key"
2464 SSHS_SSH_ROOT_KEY = "ssh_root_key"
2465 SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2466
2467
2468 SSH_DAEMON_KEYFILES = {
2469 SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2470 SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2471 }
2472
2473
2474 NDS_CLUSTER_NAME = "cluster_name"
2475 NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2476 NDS_SSCONF = "ssconf"
2477 NDS_START_NODE_DAEMON = "start_node_daemon"
2478
2479
2480 RANDOM_UUID_FILE = "/proc/sys/kernel/random/uuid"
2481
2482
2483 UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2484
2485
2486 AUTO_REPAIR_TAG_PREFIX = "ganeti:watcher:autorepair:"
2487 AUTO_REPAIR_TAG_ENABLED = AUTO_REPAIR_TAG_PREFIX
2488 AUTO_REPAIR_TAG_SUSPENDED = AUTO_REPAIR_TAG_ENABLED + "suspend:"
2489 AUTO_REPAIR_TAG_PENDING = AUTO_REPAIR_TAG_PREFIX + "pending:"
2490 AUTO_REPAIR_TAG_RESULT = AUTO_REPAIR_TAG_PREFIX + "result:"
2491
2492
2493 AUTO_REPAIR_FIX_STORAGE = "fix-storage"
2494 AUTO_REPAIR_MIGRATE = "migrate"
2495 AUTO_REPAIR_FAILOVER = "failover"
2496 AUTO_REPAIR_REINSTALL = "reinstall"
2497 AUTO_REPAIR_ALL_TYPES = [
2498 AUTO_REPAIR_FIX_STORAGE,
2499 AUTO_REPAIR_MIGRATE,
2500 AUTO_REPAIR_FAILOVER,
2501 AUTO_REPAIR_REINSTALL,
2502 ]
2503
2504
2505 AUTO_REPAIR_SUCCESS = "success"
2506 AUTO_REPAIR_FAILURE = "failure"
2507 AUTO_REPAIR_ENOPERM = "enoperm"
2508 AUTO_REPAIR_ALL_RESULTS = frozenset([
2509 AUTO_REPAIR_SUCCESS,
2510 AUTO_REPAIR_FAILURE,
2511 AUTO_REPAIR_ENOPERM,
2512 ])
2513
2514
2515 BUILTIN_DATA_COLLECTOR_VERSION = "B"
2516
2517
2518 OPCODE_REASON = "reason"
2519
2520
2521 OPCODE_REASON_SRC_CLIENT = "gnt:client"
2522 OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2523 OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2524 OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2525 OPCODE_REASON_SRC_USER = "gnt:user"
2526
2527 OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2528 OPCODE_REASON_SRC_CLIENT,
2529 OPCODE_REASON_SRC_NODED,
2530 OPCODE_REASON_SRC_OPCODE,
2531 OPCODE_REASON_SRC_RLIB2,
2532 OPCODE_REASON_SRC_USER,
2533 ])
2534
2535 DISKSTATS_FILE = "/proc/diskstats"
2536
2537
2538 del re, _vcsversion, _autoconf, socket, pathutils, compat
2539