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