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