Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 343dcda8

History | View | Annotate | Download (60.9 kB)

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 # need user confirmation
410

    
411
#: Exit code for query operations with unknown fields
412
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
413

    
414
# tags
415
TAG_CLUSTER = _constants.TAG_CLUSTER
416
TAG_NODEGROUP = _constants.TAG_NODEGROUP
417
TAG_NODE = _constants.TAG_NODE
418
TAG_INSTANCE = _constants.TAG_INSTANCE
419
TAG_NETWORK = _constants.TAG_NETWORK
420
VALID_TAG_TYPES = _constants.VALID_TAG_TYPES
421

    
422
MAX_TAG_LEN = _constants.MAX_TAG_LEN
423
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
424

    
425
# others
426
DEFAULT_BRIDGE = "xen-br0"
427
DEFAULT_OVS = "switch1"
428
CLASSIC_DRBD_SYNC_SPEED = 60 * 1024  # 60 MiB, expressed in KiB
429
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
430
IP4_ADDRESS_ANY = "0.0.0.0"
431
IP6_ADDRESS_LOCALHOST = "::1"
432
IP6_ADDRESS_ANY = "::"
433
IP4_VERSION = 4
434
IP6_VERSION = 6
435
VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
436
# for export to htools
437
IP4_FAMILY = socket.AF_INET
438
IP6_FAMILY = socket.AF_INET6
439

    
440
TCP_PING_TIMEOUT = 10
441
DEFAULT_VG = "xenvg"
442
DEFAULT_DRBD_HELPER = "/bin/true"
443
MIN_VG_SIZE = 20480
444
DEFAULT_MAC_PREFIX = "aa:00:00"
445
# default maximum instance wait time, in seconds.
446
DEFAULT_SHUTDOWN_TIMEOUT = 120
447
NODE_MAX_CLOCK_SKEW = _constants.NODE_MAX_CLOCK_SKEW
448
# Time for an intra-cluster disk transfer to wait for a connection
449
DISK_TRANSFER_CONNECT_TIMEOUT = 60
450
# Disk index separator
451
DISK_SEPARATOR = _constants.DISK_SEPARATOR
452
IP_COMMAND_PATH = _constants.IP_COMMAND_PATH
453

    
454
RPC_TMO_URGENT = _constants.RPC_TMO_URGENT
455
RPC_TMO_FAST = _constants.RPC_TMO_FAST
456
RPC_TMO_NORMAL = _constants.RPC_TMO_NORMAL
457
RPC_TMO_SLOW = _constants.RPC_TMO_SLOW
458
RPC_TMO_4HRS = _constants.RPC_TMO_4HRS
459
RPC_TMO_1DAY = _constants.RPC_TMO_1DAY
460
RPC_CONNECT_TIMEOUT = _constants.RPC_CONNECT_TIMEOUT
461

    
462
#: Key for job IDs in opcode result
463
JOB_IDS_KEY = "jobs"
464

    
465
# runparts results
466
(RUNPARTS_SKIP,
467
 RUNPARTS_RUN,
468
 RUNPARTS_ERR) = range(3)
469

    
470
RUNPARTS_STATUS = compat.UniqueFrozenset([
471
  RUNPARTS_SKIP,
472
  RUNPARTS_RUN,
473
  RUNPARTS_ERR,
474
  ])
475

    
476
# RPC constants
477
(RPC_ENCODING_NONE,
478
 RPC_ENCODING_ZLIB_BASE64) = range(2)
479

    
480
# os related constants
481
OS_SCRIPT_CREATE = "create"
482
OS_SCRIPT_IMPORT = "import"
483
OS_SCRIPT_EXPORT = "export"
484
OS_SCRIPT_RENAME = "rename"
485
OS_SCRIPT_VERIFY = "verify"
486
OS_SCRIPTS = compat.UniqueFrozenset([
487
  OS_SCRIPT_CREATE,
488
  OS_SCRIPT_IMPORT,
489
  OS_SCRIPT_EXPORT,
490
  OS_SCRIPT_RENAME,
491
  OS_SCRIPT_VERIFY,
492
  ])
493

    
494
OS_API_FILE = "ganeti_api_version"
495
OS_VARIANTS_FILE = "variants.list"
496
OS_PARAMETERS_FILE = "parameters.list"
497

    
498
OS_VALIDATE_PARAMETERS = "parameters"
499
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
500

    
501
# External Storage (ES) related constants
502
ES_ACTION_CREATE = "create"
503
ES_ACTION_REMOVE = "remove"
504
ES_ACTION_GROW = "grow"
505
ES_ACTION_ATTACH = "attach"
506
ES_ACTION_DETACH = "detach"
507
ES_ACTION_SETINFO = "setinfo"
508
ES_ACTION_VERIFY = "verify"
509

    
510
ES_SCRIPT_CREATE = ES_ACTION_CREATE
511
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
512
ES_SCRIPT_GROW = ES_ACTION_GROW
513
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
514
ES_SCRIPT_DETACH = ES_ACTION_DETACH
515
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
516
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
517
ES_SCRIPTS = frozenset([
518
  ES_SCRIPT_CREATE,
519
  ES_SCRIPT_REMOVE,
520
  ES_SCRIPT_GROW,
521
  ES_SCRIPT_ATTACH,
522
  ES_SCRIPT_DETACH,
523
  ES_SCRIPT_SETINFO,
524
  ES_SCRIPT_VERIFY
525
  ])
526

    
527
ES_PARAMETERS_FILE = "parameters.list"
528

    
529
# reboot types
530
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
531
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
532
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
533
REBOOT_TYPES = _constants.REBOOT_TYPES
534

    
535
# instance reboot behaviors
536
INSTANCE_REBOOT_ALLOWED = "reboot"
537
INSTANCE_REBOOT_EXIT = "exit"
538

    
539
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
540
  INSTANCE_REBOOT_ALLOWED,
541
  INSTANCE_REBOOT_EXIT,
542
  ])
543

    
544
VTYPE_STRING = _constants.VTYPE_STRING
545
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
546
VTYPE_BOOL = _constants.VTYPE_BOOL
547
VTYPE_SIZE = _constants.VTYPE_SIZE
548
VTYPE_INT = _constants.VTYPE_INT
549
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
550

    
551
# Constant representing that the user does not specify any IP version
552
IFACE_NO_IP_VERSION_SPECIFIED = 0
553

    
554
VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
555
  75,
556
  110,
557
  300,
558
  600,
559
  1200,
560
  1800,
561
  2400,
562
  4800,
563
  9600,
564
  14400,
565
  19200,
566
  28800,
567
  38400,
568
  57600,
569
  115200,
570
  230400,
571
  345600,
572
  460800,
573
  ])
574

    
575
# HV parameter names (global namespace)
576
HV_BOOT_ORDER = "boot_order"
577
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
578
HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
579
HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
580
HV_NIC_TYPE = "nic_type"
581
HV_DISK_TYPE = "disk_type"
582
HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
583
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
584
HV_VNC_PASSWORD_FILE = "vnc_password_file"
585
HV_VNC_TLS = "vnc_tls"
586
HV_VNC_X509 = "vnc_x509_path"
587
HV_VNC_X509_VERIFY = "vnc_x509_verify"
588
HV_KVM_SPICE_BIND = "spice_bind"
589
HV_KVM_SPICE_IP_VERSION = "spice_ip_version"
590
HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file"
591
HV_KVM_SPICE_LOSSLESS_IMG_COMPR = "spice_image_compression"
592
HV_KVM_SPICE_JPEG_IMG_COMPR = "spice_jpeg_wan_compression"
593
HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR = "spice_zlib_glz_wan_compression"
594
HV_KVM_SPICE_STREAMING_VIDEO_DETECTION = "spice_streaming_video"
595
HV_KVM_SPICE_AUDIO_COMPR = "spice_playback_compression"
596
HV_KVM_SPICE_USE_TLS = "spice_use_tls"
597
HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers"
598
HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent"
599
HV_ACPI = "acpi"
600
HV_PAE = "pae"
601
HV_USE_BOOTLOADER = "use_bootloader"
602
HV_BOOTLOADER_ARGS = "bootloader_args"
603
HV_BOOTLOADER_PATH = "bootloader_path"
604
HV_KERNEL_ARGS = "kernel_args"
605
HV_KERNEL_PATH = "kernel_path"
606
HV_INITRD_PATH = "initrd_path"
607
HV_ROOT_PATH = "root_path"
608
HV_SERIAL_CONSOLE = "serial_console"
609
HV_SERIAL_SPEED = "serial_speed"
610
HV_USB_MOUSE = "usb_mouse"
611
HV_KEYMAP = "keymap"
612
HV_DEVICE_MODEL = "device_model"
613
HV_INIT_SCRIPT = "init_script"
614
HV_MIGRATION_PORT = "migration_port"
615
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
616
HV_MIGRATION_DOWNTIME = "migration_downtime"
617
HV_MIGRATION_MODE = "migration_mode"
618
HV_USE_LOCALTIME = "use_localtime"
619
HV_DISK_CACHE = "disk_cache"
620
HV_SECURITY_MODEL = "security_model"
621
HV_SECURITY_DOMAIN = "security_domain"
622
HV_KVM_FLAG = "kvm_flag"
623
HV_VHOST_NET = "vhost_net"
624
HV_KVM_USE_CHROOT = "use_chroot"
625
HV_CPU_MASK = "cpu_mask"
626
HV_MEM_PATH = "mem_path"
627
HV_PASSTHROUGH = "pci_pass"
628
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
629
HV_REBOOT_BEHAVIOR = "reboot_behavior"
630
HV_CPU_TYPE = "cpu_type"
631
HV_CPU_CAP = "cpu_cap"
632
HV_CPU_WEIGHT = "cpu_weight"
633
HV_CPU_CORES = "cpu_cores"
634
HV_CPU_THREADS = "cpu_threads"
635
HV_CPU_SOCKETS = "cpu_sockets"
636
HV_SOUNDHW = "soundhw"
637
HV_USB_DEVICES = "usb_devices"
638
HV_VGA = "vga"
639
HV_KVM_EXTRA = "kvm_extra"
640
HV_KVM_MACHINE_VERSION = "machine_version"
641
HV_KVM_PATH = "kvm_path"
642
HV_VIF_TYPE = "vif_type"
643
HV_VIF_SCRIPT = "vif_script"
644
HV_XEN_CMD = "xen_cmd"
645
HV_XEN_CPUID = "cpuid"
646
HV_VNET_HDR = "vnet_hdr"
647
HV_VIRIDIAN = "viridian"
648

    
649

    
650
HVS_PARAMETER_TYPES = {
651
  HV_KVM_PATH: VTYPE_STRING,
652
  HV_BOOT_ORDER: VTYPE_STRING,
653
  HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
654
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
655
  HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
656
  HV_NIC_TYPE: VTYPE_STRING,
657
  HV_DISK_TYPE: VTYPE_STRING,
658
  HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
659
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
660
  HV_VNC_BIND_ADDRESS: VTYPE_STRING,
661
  HV_VNC_TLS: VTYPE_BOOL,
662
  HV_VNC_X509: VTYPE_STRING,
663
  HV_VNC_X509_VERIFY: VTYPE_BOOL,
664
  HV_KVM_SPICE_BIND: VTYPE_STRING,
665
  HV_KVM_SPICE_IP_VERSION: VTYPE_INT,
666
  HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING,
667
  HV_KVM_SPICE_LOSSLESS_IMG_COMPR: VTYPE_STRING,
668
  HV_KVM_SPICE_JPEG_IMG_COMPR: VTYPE_STRING,
669
  HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: VTYPE_STRING,
670
  HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: VTYPE_STRING,
671
  HV_KVM_SPICE_AUDIO_COMPR: VTYPE_BOOL,
672
  HV_KVM_SPICE_USE_TLS: VTYPE_BOOL,
673
  HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING,
674
  HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL,
675
  HV_ACPI: VTYPE_BOOL,
676
  HV_PAE: VTYPE_BOOL,
677
  HV_USE_BOOTLOADER: VTYPE_BOOL,
678
  HV_BOOTLOADER_PATH: VTYPE_STRING,
679
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
680
  HV_KERNEL_PATH: VTYPE_STRING,
681
  HV_KERNEL_ARGS: VTYPE_STRING,
682
  HV_INITRD_PATH: VTYPE_STRING,
683
  HV_ROOT_PATH: VTYPE_MAYBE_STRING,
684
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
685
  HV_SERIAL_SPEED: VTYPE_INT,
686
  HV_USB_MOUSE: VTYPE_STRING,
687
  HV_KEYMAP: VTYPE_STRING,
688
  HV_DEVICE_MODEL: VTYPE_STRING,
689
  HV_INIT_SCRIPT: VTYPE_STRING,
690
  HV_MIGRATION_PORT: VTYPE_INT,
691
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
692
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
693
  HV_MIGRATION_MODE: VTYPE_STRING,
694
  HV_USE_LOCALTIME: VTYPE_BOOL,
695
  HV_DISK_CACHE: VTYPE_STRING,
696
  HV_SECURITY_MODEL: VTYPE_STRING,
697
  HV_SECURITY_DOMAIN: VTYPE_STRING,
698
  HV_KVM_FLAG: VTYPE_STRING,
699
  HV_VHOST_NET: VTYPE_BOOL,
700
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
701
  HV_CPU_MASK: VTYPE_STRING,
702
  HV_MEM_PATH: VTYPE_STRING,
703
  HV_PASSTHROUGH: VTYPE_STRING,
704
  HV_BLOCKDEV_PREFIX: VTYPE_STRING,
705
  HV_REBOOT_BEHAVIOR: VTYPE_STRING,
706
  HV_CPU_TYPE: VTYPE_STRING,
707
  HV_CPU_CAP: VTYPE_INT,
708
  HV_CPU_WEIGHT: VTYPE_INT,
709
  HV_CPU_CORES: VTYPE_INT,
710
  HV_CPU_THREADS: VTYPE_INT,
711
  HV_CPU_SOCKETS: VTYPE_INT,
712
  HV_SOUNDHW: VTYPE_STRING,
713
  HV_USB_DEVICES: VTYPE_STRING,
714
  HV_VGA: VTYPE_STRING,
715
  HV_KVM_EXTRA: VTYPE_STRING,
716
  HV_KVM_MACHINE_VERSION: VTYPE_STRING,
717
  HV_VIF_TYPE: VTYPE_STRING,
718
  HV_VIF_SCRIPT: VTYPE_STRING,
719
  HV_XEN_CMD: VTYPE_STRING,
720
  HV_XEN_CPUID: VTYPE_STRING,
721
  HV_VNET_HDR: VTYPE_BOOL,
722
  HV_VIRIDIAN: VTYPE_BOOL,
723
  }
724

    
725
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
726

    
727
HVS_PARAMETER_TITLES = {
728
  HV_ACPI: "ACPI",
729
  HV_BOOT_ORDER: "Boot_order",
730
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
731
  HV_DISK_TYPE: "Disk_type",
732
  HV_INITRD_PATH: "Initrd_path",
733
  HV_KERNEL_PATH: "Kernel_path",
734
  HV_NIC_TYPE: "NIC_type",
735
  HV_PAE: "PAE",
736
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
737
  HV_PASSTHROUGH: "pci_pass",
738
  HV_CPU_TYPE: "cpu_type",
739
  }
740

    
741
# Migration statuses
742
HV_MIGRATION_COMPLETED = "completed"
743
HV_MIGRATION_ACTIVE = "active"
744
HV_MIGRATION_FAILED = "failed"
745
HV_MIGRATION_CANCELLED = "cancelled"
746

    
747
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
748
  HV_MIGRATION_COMPLETED,
749
  HV_MIGRATION_ACTIVE,
750
  HV_MIGRATION_FAILED,
751
  HV_MIGRATION_CANCELLED,
752
  ])
753

    
754
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
755
  HV_MIGRATION_FAILED,
756
  HV_MIGRATION_CANCELLED,
757
  ])
758

    
759
# KVM-specific statuses
760
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
761

    
762
# Node info keys
763
HV_NODEINFO_KEY_VERSION = "hv_version"
764

    
765
# Hypervisor state
766
HVST_MEMORY_TOTAL = "mem_total"
767
HVST_MEMORY_NODE = "mem_node"
768
HVST_MEMORY_HV = "mem_hv"
769
HVST_CPU_TOTAL = "cpu_total"
770
HVST_CPU_NODE = "cpu_node"
771

    
772
HVST_DEFAULTS = {
773
  HVST_MEMORY_TOTAL: 0,
774
  HVST_MEMORY_NODE: 0,
775
  HVST_MEMORY_HV: 0,
776
  HVST_CPU_TOTAL: 1,
777
  HVST_CPU_NODE: 1,
778
  }
779

    
780
HVSTS_PARAMETER_TYPES = {
781
  HVST_MEMORY_TOTAL: VTYPE_INT,
782
  HVST_MEMORY_NODE: VTYPE_INT,
783
  HVST_MEMORY_HV: VTYPE_INT,
784
  HVST_CPU_TOTAL: VTYPE_INT,
785
  HVST_CPU_NODE: VTYPE_INT,
786
  }
787

    
788
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
789

    
790
# Disk state
791
DS_DISK_TOTAL = "disk_total"
792
DS_DISK_RESERVED = "disk_reserved"
793
DS_DISK_OVERHEAD = "disk_overhead"
794

    
795
DS_DEFAULTS = {
796
  DS_DISK_TOTAL: 0,
797
  DS_DISK_RESERVED: 0,
798
  DS_DISK_OVERHEAD: 0,
799
  }
800

    
801
ISPEC_MEM_SIZE = _constants.ISPEC_MEM_SIZE
802
ISPEC_CPU_COUNT = _constants.ISPEC_CPU_COUNT
803
ISPEC_DISK_COUNT = _constants.ISPEC_DISK_COUNT
804
ISPEC_DISK_SIZE = _constants.ISPEC_DISK_SIZE
805
ISPEC_NIC_COUNT = _constants.ISPEC_NIC_COUNT
806
ISPEC_SPINDLE_USE = _constants.ISPEC_SPINDLE_USE
807
ISPECS_PARAMETER_TYPES = _constants.ISPECS_PARAMETER_TYPES
808
ISPECS_PARAMETERS = _constants.ISPECS_PARAMETERS
809

    
810
ISPECS_MINMAX = _constants.ISPECS_MINMAX
811
ISPECS_MIN = _constants.ISPECS_MIN
812
ISPECS_MAX = _constants.ISPECS_MAX
813
ISPECS_STD = _constants.ISPECS_STD
814
IPOLICY_DTS = _constants.IPOLICY_DTS
815
IPOLICY_VCPU_RATIO = _constants.IPOLICY_VCPU_RATIO
816
IPOLICY_SPINDLE_RATIO = _constants.IPOLICY_SPINDLE_RATIO
817
ISPECS_MINMAX_KEYS = _constants.ISPECS_MINMAX_KEYS
818
IPOLICY_PARAMETERS = _constants.IPOLICY_PARAMETERS
819
IPOLICY_ALL_KEYS = _constants.IPOLICY_ALL_KEYS
820

    
821
ND_OOB_PROGRAM = _constants.ND_OOB_PROGRAM
822
ND_SPINDLE_COUNT = _constants.ND_SPINDLE_COUNT
823
ND_EXCLUSIVE_STORAGE = _constants.ND_EXCLUSIVE_STORAGE
824
ND_OVS = _constants.ND_OVS
825
ND_OVS_NAME = _constants.ND_OVS_NAME
826
ND_OVS_LINK = _constants.ND_OVS_LINK
827

    
828
NDS_PARAMETER_TYPES = _constants.NDS_PARAMETER_TYPES
829
NDS_PARAMETERS = _constants.NDS_PARAMETERS
830
NDS_PARAMETER_TITLES = _constants.NDS_PARAMETER_TITLES
831
DSS_PARAMETER_TYPES = {
832
  DS_DISK_TOTAL: VTYPE_INT,
833
  DS_DISK_RESERVED: VTYPE_INT,
834
  DS_DISK_OVERHEAD: VTYPE_INT,
835
  }
836

    
837
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
838
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
839

    
840
# Backend parameter names
841
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
842
BE_MAXMEM = "maxmem"
843
BE_MINMEM = "minmem"
844
BE_VCPUS = "vcpus"
845
BE_AUTO_BALANCE = "auto_balance"
846
BE_ALWAYS_FAILOVER = "always_failover"
847
BE_SPINDLE_USE = "spindle_use"
848

    
849
BES_PARAMETER_TYPES = {
850
  BE_MAXMEM: VTYPE_SIZE,
851
  BE_MINMEM: VTYPE_SIZE,
852
  BE_VCPUS: VTYPE_INT,
853
  BE_AUTO_BALANCE: VTYPE_BOOL,
854
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
855
  BE_SPINDLE_USE: VTYPE_INT,
856
  }
857

    
858
BES_PARAMETER_TITLES = {
859
  BE_AUTO_BALANCE: "Auto_balance",
860
  BE_MAXMEM: "ConfigMaxMem",
861
  BE_MINMEM: "ConfigMinMem",
862
  BE_VCPUS: "ConfigVCPUs",
863
  }
864

    
865
BES_PARAMETER_COMPAT = {
866
  BE_MEMORY: VTYPE_SIZE,
867
  }
868
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
869

    
870
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
871

    
872
# Logical Disks parameters
873
LDP_RESYNC_RATE = "resync-rate"
874
LDP_STRIPES = "stripes"
875
LDP_BARRIERS = "disabled-barriers"
876
LDP_NO_META_FLUSH = "disable-meta-flush"
877
LDP_DEFAULT_METAVG = "default-metavg"
878
LDP_DISK_CUSTOM = "disk-custom"
879
LDP_NET_CUSTOM = "net-custom"
880
LDP_PROTOCOL = "protocol"
881
LDP_DYNAMIC_RESYNC = "dynamic-resync"
882
LDP_PLAN_AHEAD = "c-plan-ahead"
883
LDP_FILL_TARGET = "c-fill-target"
884
LDP_DELAY_TARGET = "c-delay-target"
885
LDP_MAX_RATE = "c-max-rate"
886
LDP_MIN_RATE = "c-min-rate"
887
LDP_POOL = "pool"
888
LDP_ACCESS = "access"
889
DISK_LD_TYPES = {
890
  LDP_RESYNC_RATE: VTYPE_INT,
891
  LDP_STRIPES: VTYPE_INT,
892
  LDP_BARRIERS: VTYPE_STRING,
893
  LDP_NO_META_FLUSH: VTYPE_BOOL,
894
  LDP_DEFAULT_METAVG: VTYPE_STRING,
895
  LDP_DISK_CUSTOM: VTYPE_STRING,
896
  LDP_NET_CUSTOM: VTYPE_STRING,
897
  LDP_PROTOCOL: VTYPE_STRING,
898
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
899
  LDP_PLAN_AHEAD: VTYPE_INT,
900
  LDP_FILL_TARGET: VTYPE_INT,
901
  LDP_DELAY_TARGET: VTYPE_INT,
902
  LDP_MAX_RATE: VTYPE_INT,
903
  LDP_MIN_RATE: VTYPE_INT,
904
  LDP_POOL: VTYPE_STRING,
905
  LDP_ACCESS: VTYPE_STRING,
906
  }
907
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
908

    
909
# Disk template parameters (can be set/changed by the user via gnt-cluster and
910
# gnt-group)
911
DRBD_RESYNC_RATE = "resync-rate"
912
DRBD_DATA_STRIPES = "data-stripes"
913
DRBD_META_STRIPES = "meta-stripes"
914
DRBD_DISK_BARRIERS = "disk-barriers"
915
DRBD_META_BARRIERS = "meta-barriers"
916
DRBD_DEFAULT_METAVG = "metavg"
917
DRBD_DISK_CUSTOM = "disk-custom"
918
DRBD_NET_CUSTOM = "net-custom"
919
DRBD_PROTOCOL = "protocol"
920
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
921
DRBD_PLAN_AHEAD = "c-plan-ahead"
922
DRBD_FILL_TARGET = "c-fill-target"
923
DRBD_DELAY_TARGET = "c-delay-target"
924
DRBD_MAX_RATE = "c-max-rate"
925
DRBD_MIN_RATE = "c-min-rate"
926
LV_STRIPES = "stripes"
927
RBD_POOL = "pool"
928
RBD_ACCESS = "access"
929
DISK_DT_TYPES = {
930
  DRBD_RESYNC_RATE: VTYPE_INT,
931
  DRBD_DATA_STRIPES: VTYPE_INT,
932
  DRBD_META_STRIPES: VTYPE_INT,
933
  DRBD_DISK_BARRIERS: VTYPE_STRING,
934
  DRBD_META_BARRIERS: VTYPE_BOOL,
935
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
936
  DRBD_DISK_CUSTOM: VTYPE_STRING,
937
  DRBD_NET_CUSTOM: VTYPE_STRING,
938
  DRBD_PROTOCOL: VTYPE_STRING,
939
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
940
  DRBD_PLAN_AHEAD: VTYPE_INT,
941
  DRBD_FILL_TARGET: VTYPE_INT,
942
  DRBD_DELAY_TARGET: VTYPE_INT,
943
  DRBD_MAX_RATE: VTYPE_INT,
944
  DRBD_MIN_RATE: VTYPE_INT,
945
  LV_STRIPES: VTYPE_INT,
946
  RBD_POOL: VTYPE_STRING,
947
  RBD_ACCESS: VTYPE_STRING,
948
  }
949

    
950
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
951

    
952
# dynamic disk parameters
953
DDP_LOCAL_IP = "local-ip"
954
DDP_REMOTE_IP = "remote-ip"
955
DDP_PORT = "port"
956
DDP_LOCAL_MINOR = "local-minor"
957
DDP_REMOTE_MINOR = "remote-minor"
958

    
959
# OOB supported commands
960
OOB_POWER_ON = _constants.OOB_POWER_ON
961
OOB_POWER_OFF = _constants.OOB_POWER_OFF
962
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
963
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
964
OOB_HEALTH = _constants.OOB_HEALTH
965
OOB_COMMANDS = _constants.OOB_COMMANDS
966

    
967
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
968

    
969
OOB_TIMEOUT = _constants.OOB_TIMEOUT
970
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
971

    
972
OOB_STATUS_OK = _constants.OOB_STATUS_OK
973
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
974
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
975
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
976
OOB_STATUSES = _constants.OOB_STATUSES
977

    
978
# Instance Parameters Profile
979
PP_DEFAULT = "default"
980

    
981
# NIC_* constants are used inside the ganeti config
982
NIC_MODE = _constants.NIC_MODE
983
NIC_LINK = _constants.NIC_LINK
984
NIC_VLAN = _constants.NIC_VLAN
985

    
986
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
987
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
988
NIC_MODE_OVS = _constants.NIC_MODE_OVS
989
NIC_IP_POOL = _constants.NIC_IP_POOL
990
NIC_VALID_MODES = _constants.NIC_VALID_MODES
991

    
992
RESERVE_ACTION = "reserve"
993
RELEASE_ACTION = "release"
994

    
995
NICS_PARAMETER_TYPES = {
996
  NIC_MODE: VTYPE_STRING,
997
  NIC_LINK: VTYPE_STRING,
998
  NIC_VLAN: VTYPE_MAYBE_STRING,
999
  }
1000

    
1001
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1002

    
1003
# IDISK_* constants are used in opcodes, to create/change disks
1004
IDISK_SIZE = "size"
1005
IDISK_SPINDLES = "spindles"
1006
IDISK_MODE = "mode"
1007
IDISK_ADOPT = "adopt"
1008
IDISK_VG = "vg"
1009
IDISK_METAVG = "metavg"
1010
IDISK_PROVIDER = "provider"
1011
IDISK_NAME = "name"
1012
IDISK_PARAMS_TYPES = {
1013
  IDISK_SIZE: VTYPE_SIZE,
1014
  IDISK_SPINDLES: VTYPE_INT,
1015
  IDISK_MODE: VTYPE_STRING,
1016
  IDISK_ADOPT: VTYPE_STRING,
1017
  IDISK_VG: VTYPE_STRING,
1018
  IDISK_METAVG: VTYPE_STRING,
1019
  IDISK_PROVIDER: VTYPE_STRING,
1020
  IDISK_NAME: VTYPE_MAYBE_STRING,
1021
  }
1022
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1023

    
1024
# INIC_* constants are used in opcodes, to create/change nics
1025
INIC_MAC = "mac"
1026
INIC_IP = "ip"
1027
INIC_MODE = "mode"
1028
INIC_LINK = "link"
1029
INIC_NETWORK = "network"
1030
INIC_NAME = "name"
1031
INIC_VLAN = "vlan"
1032
INIC_BRIDGE = "bridge"
1033
INIC_PARAMS_TYPES = {
1034
  INIC_IP: VTYPE_MAYBE_STRING,
1035
  INIC_LINK: VTYPE_STRING,
1036
  INIC_MAC: VTYPE_STRING,
1037
  INIC_MODE: VTYPE_STRING,
1038
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1039
  INIC_NAME: VTYPE_MAYBE_STRING,
1040
  INIC_VLAN: VTYPE_MAYBE_STRING,
1041
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1042
  }
1043
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1044

    
1045
# Hypervisor constants
1046
HT_XEN_PVM = _constants.HT_XEN_PVM
1047
HT_FAKE = _constants.HT_FAKE
1048
HT_XEN_HVM = _constants.HT_XEN_HVM
1049
HT_KVM = _constants.HT_KVM
1050
HT_CHROOT = _constants.HT_CHROOT
1051
HT_LXC = _constants.HT_LXC
1052
HYPER_TYPES = _constants.HYPER_TYPES
1053
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1054

    
1055
VNC_BASE_PORT = 5900
1056
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1057

    
1058
# NIC types
1059
HT_NIC_RTL8139 = "rtl8139"
1060
HT_NIC_NE2K_PCI = "ne2k_pci"
1061
HT_NIC_NE2K_ISA = "ne2k_isa"
1062
HT_NIC_I82551 = "i82551"
1063
HT_NIC_I85557B = "i82557b"
1064
HT_NIC_I8259ER = "i82559er"
1065
HT_NIC_PCNET = "pcnet"
1066
HT_NIC_E1000 = "e1000"
1067
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1068

    
1069
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1070
  HT_NIC_RTL8139,
1071
  HT_NIC_NE2K_PCI,
1072
  HT_NIC_E1000,
1073
  HT_NIC_NE2K_ISA,
1074
  HT_NIC_PARAVIRTUAL,
1075
  ])
1076
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1077
  HT_NIC_RTL8139,
1078
  HT_NIC_NE2K_PCI,
1079
  HT_NIC_NE2K_ISA,
1080
  HT_NIC_I82551,
1081
  HT_NIC_I85557B,
1082
  HT_NIC_I8259ER,
1083
  HT_NIC_PCNET,
1084
  HT_NIC_E1000,
1085
  HT_NIC_PARAVIRTUAL,
1086
  ])
1087

    
1088
# Vif types
1089
# default vif type in xen-hvm
1090
HT_HVM_VIF_IOEMU = "ioemu"
1091
HT_HVM_VIF_VIF = "vif"
1092
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1093
  HT_HVM_VIF_IOEMU,
1094
  HT_HVM_VIF_VIF,
1095
  ])
1096

    
1097
# Disk types
1098
HT_DISK_IOEMU = "ioemu"
1099
HT_DISK_IDE = "ide"
1100
HT_DISK_SCSI = "scsi"
1101
HT_DISK_SD = "sd"
1102
HT_DISK_MTD = "mtd"
1103
HT_DISK_PFLASH = "pflash"
1104

    
1105
HT_CACHE_DEFAULT = "default"
1106
HT_CACHE_NONE = "none"
1107
HT_CACHE_WTHROUGH = "writethrough"
1108
HT_CACHE_WBACK = "writeback"
1109
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1110
  HT_CACHE_DEFAULT,
1111
  HT_CACHE_NONE,
1112
  HT_CACHE_WTHROUGH,
1113
  HT_CACHE_WBACK,
1114
  ])
1115

    
1116
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1117
  HT_DISK_PARAVIRTUAL,
1118
  HT_DISK_IOEMU,
1119
  ])
1120
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1121
  HT_DISK_PARAVIRTUAL,
1122
  HT_DISK_IDE,
1123
  HT_DISK_SCSI,
1124
  HT_DISK_SD,
1125
  HT_DISK_MTD,
1126
  HT_DISK_PFLASH,
1127
  ])
1128

    
1129
# Mouse types:
1130
HT_MOUSE_MOUSE = "mouse"
1131
HT_MOUSE_TABLET = "tablet"
1132

    
1133
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1134
  HT_MOUSE_MOUSE,
1135
  HT_MOUSE_TABLET,
1136
  ])
1137

    
1138
# Boot order
1139
HT_BO_FLOPPY = "floppy"
1140
HT_BO_CDROM = "cdrom"
1141
HT_BO_DISK = "disk"
1142
HT_BO_NETWORK = "network"
1143

    
1144
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1145
  HT_BO_FLOPPY,
1146
  HT_BO_CDROM,
1147
  HT_BO_DISK,
1148
  HT_BO_NETWORK,
1149
  ])
1150

    
1151
# SPICE lossless image compression options
1152
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1153
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1154
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1155
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1156
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1157
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1158

    
1159
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1160
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1161
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1162
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1163
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1164
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1165
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1166
  ])
1167

    
1168
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1169
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1170
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1171
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1172

    
1173
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1174
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1175
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1176
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1177
  ])
1178

    
1179
# SPICE video stream detection
1180
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1181
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1182
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1183

    
1184
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1185
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1186
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1187
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1188
  ])
1189

    
1190
# Security models
1191
HT_SM_NONE = "none"
1192
HT_SM_USER = "user"
1193
HT_SM_POOL = "pool"
1194

    
1195
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1196
  HT_SM_NONE,
1197
  HT_SM_USER,
1198
  HT_SM_POOL,
1199
  ])
1200

    
1201
# Kvm flag values
1202
HT_KVM_ENABLED = "enabled"
1203
HT_KVM_DISABLED = "disabled"
1204

    
1205
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1206

    
1207
# Migration type
1208
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1209
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1210
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1211

    
1212
# Cluster Verify steps
1213
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1214
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1215

    
1216
# Cluster Verify error classes
1217
CV_TCLUSTER = _constants.CV_TCLUSTER
1218
CV_TGROUP = _constants.CV_TGROUP
1219
CV_TNODE = _constants.CV_TNODE
1220
CV_TINSTANCE = _constants.CV_TINSTANCE
1221

    
1222
# Cluster Verify error codes and documentation
1223
CV_ECLUSTERCFG = _constants.CV_ECLUSTERCFG
1224
CV_ECLUSTERCERT = _constants.CV_ECLUSTERCERT
1225
CV_ECLUSTERFILECHECK = _constants.CV_ECLUSTERFILECHECK
1226
CV_ECLUSTERDANGLINGNODES = _constants.CV_ECLUSTERDANGLINGNODES
1227
CV_ECLUSTERDANGLINGINST = _constants.CV_ECLUSTERDANGLINGINST
1228
CV_EGROUPDIFFERENTPVSIZE = _constants.CV_EGROUPDIFFERENTPVSIZE
1229
CV_EINSTANCEBADNODE = _constants.CV_EINSTANCEBADNODE
1230
CV_EINSTANCEDOWN = _constants.CV_EINSTANCEDOWN
1231
CV_EINSTANCELAYOUT = _constants.CV_EINSTANCELAYOUT
1232
CV_EINSTANCEMISSINGDISK = _constants.CV_EINSTANCEMISSINGDISK
1233
CV_EINSTANCEFAULTYDISK = _constants.CV_EINSTANCEFAULTYDISK
1234
CV_EINSTANCEWRONGNODE = _constants.CV_EINSTANCEWRONGNODE
1235
CV_EINSTANCESPLITGROUPS = _constants.CV_EINSTANCESPLITGROUPS
1236
CV_EINSTANCEPOLICY = _constants.CV_EINSTANCEPOLICY
1237
CV_EINSTANCEUNSUITABLENODE = _constants.CV_EINSTANCEUNSUITABLENODE
1238
CV_EINSTANCEMISSINGCFGPARAMETER = _constants.CV_EINSTANCEMISSINGCFGPARAMETER
1239
CV_ENODEDRBD = _constants.CV_ENODEDRBD
1240
CV_ENODEDRBDVERSION = _constants.CV_ENODEDRBDVERSION
1241
CV_ENODEDRBDHELPER = _constants.CV_ENODEDRBDHELPER
1242
CV_ENODEFILECHECK = _constants.CV_ENODEFILECHECK
1243
CV_ENODEHOOKS = _constants.CV_ENODEHOOKS
1244
CV_ENODEHV = _constants.CV_ENODEHV
1245
CV_ENODELVM = _constants.CV_ENODELVM
1246
CV_ENODEN1 = _constants.CV_ENODEN1
1247
CV_ENODENET = _constants.CV_ENODENET
1248
CV_ENODEOS = _constants.CV_ENODEOS
1249
CV_ENODEORPHANINSTANCE = _constants.CV_ENODEORPHANINSTANCE
1250
CV_ENODEORPHANLV = _constants.CV_ENODEORPHANLV
1251
CV_ENODERPC = _constants.CV_ENODERPC
1252
CV_ENODESSH = _constants.CV_ENODESSH
1253
CV_ENODEVERSION = _constants.CV_ENODEVERSION
1254
CV_ENODESETUP = _constants.CV_ENODESETUP
1255
CV_ENODETIME = _constants.CV_ENODETIME
1256
CV_ENODEOOBPATH = _constants.CV_ENODEOOBPATH
1257
CV_ENODEUSERSCRIPTS = _constants.CV_ENODEUSERSCRIPTS
1258
CV_ENODEFILESTORAGEPATHS = _constants.CV_ENODEFILESTORAGEPATHS
1259
CV_ENODEFILESTORAGEPATHUNUSABLE = _constants.CV_ENODEFILESTORAGEPATHUNUSABLE
1260
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1261
  _constants.CV_ENODESHAREDFILESTORAGEPATHUNUSABLE
1262

    
1263
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1264
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1265

    
1266
# Node verify constants
1267
NV_BRIDGES = "bridges"
1268
NV_DRBDHELPER = "drbd-helper"
1269
NV_DRBDVERSION = "drbd-version"
1270
NV_DRBDLIST = "drbd-list"
1271
NV_EXCLUSIVEPVS = "exclusive-pvs"
1272
NV_FILELIST = "filelist"
1273
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1274
NV_FILE_STORAGE_PATH = "file-storage-path"
1275
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1276
NV_HVINFO = "hvinfo"
1277
NV_HVPARAMS = "hvparms"
1278
NV_HYPERVISOR = "hypervisor"
1279
NV_INSTANCELIST = "instancelist"
1280
NV_LVLIST = "lvlist"
1281
NV_MASTERIP = "master-ip"
1282
NV_NODELIST = "nodelist"
1283
NV_NODENETTEST = "node-net-test"
1284
NV_NODESETUP = "nodesetup"
1285
NV_OOB_PATHS = "oob-paths"
1286
NV_OSLIST = "oslist"
1287
NV_PVLIST = "pvlist"
1288
NV_TIME = "time"
1289
NV_USERSCRIPTS = "user-scripts"
1290
NV_VERSION = "version"
1291
NV_VGLIST = "vglist"
1292
NV_VMNODES = "vmnodes"
1293

    
1294
# Instance status
1295
INSTST_RUNNING = _constants.INSTST_RUNNING
1296
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1297
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1298
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1299
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1300
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1301
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1302
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1303
INSTST_ALL = _constants.INSTST_ALL
1304

    
1305
# Admin states
1306
ADMINST_UP = _constants.ADMINST_UP
1307
ADMINST_DOWN = _constants.ADMINST_DOWN
1308
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1309
ADMINST_ALL = _constants.ADMINST_ALL
1310

    
1311
# Node roles
1312
NR_REGULAR = _constants.NR_REGULAR
1313
NR_MASTER = _constants.NR_MASTER
1314
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1315
NR_DRAINED = _constants.NR_DRAINED
1316
NR_OFFLINE = _constants.NR_OFFLINE
1317
NR_ALL = _constants.NR_ALL
1318

    
1319
# SSL certificate check constants (in days)
1320
SSL_CERT_EXPIRATION_WARN = 30
1321
SSL_CERT_EXPIRATION_ERROR = 7
1322

    
1323
# Allocator framework constants
1324
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1325
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1326
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1327
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1328

    
1329
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1330
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1331
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1332
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1333
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1334
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1335

    
1336
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1337
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1338

    
1339
# Node evacuation
1340
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1341
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1342
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1343
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1344

    
1345
# Job queue
1346
JOB_QUEUE_VERSION = 1
1347
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1348
JOB_QUEUE_FILES_PERMS = 0640
1349

    
1350
JOB_ID_TEMPLATE = r"\d+"
1351
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1352

    
1353
# unchanged job return
1354
JOB_NOTCHANGED = "nochange"
1355

    
1356
# Job status
1357
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1358
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1359
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1360
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1361
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1362
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1363
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1364
JOBS_PENDING = _constants.JOBS_PENDING
1365
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1366
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1367

    
1368
# OpCode status
1369
# not yet finalized
1370
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1371
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1372
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1373
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1374
# finalized
1375
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1376
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1377
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1378
OPS_FINALIZED = _constants.OPS_FINALIZED
1379

    
1380
# OpCode priority
1381
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1382
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1383
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1384
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1385
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1386
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1387
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1388

    
1389
# Lock recalculate mode
1390
LOCKS_REPLACE = "replace"
1391
LOCKS_APPEND = "append"
1392

    
1393
# Lock timeout (sum) before we should go into blocking acquire (still
1394
# can be reset by priority change); computed as max time (10 hours)
1395
# before we should actually go into blocking acquire given that we
1396
# start from default priority level; in seconds
1397
# TODO
1398
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1399
LOCK_ATTEMPTS_MAXWAIT = 15.0
1400
LOCK_ATTEMPTS_MINWAIT = 1.0
1401

    
1402
# Execution log types
1403
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1404
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1405
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1406

    
1407
# /etc/hosts modification
1408
ETC_HOSTS_ADD = "add"
1409
ETC_HOSTS_REMOVE = "remove"
1410

    
1411
# Job queue test
1412
JQT_MSGPREFIX = "TESTMSG="
1413
JQT_EXPANDNAMES = "expandnames"
1414
JQT_EXEC = "exec"
1415
JQT_LOGMSG = "logmsg"
1416
JQT_STARTMSG = "startmsg"
1417
JQT_ALL = compat.UniqueFrozenset([
1418
  JQT_EXPANDNAMES,
1419
  JQT_EXEC,
1420
  JQT_LOGMSG,
1421
  JQT_STARTMSG,
1422
  ])
1423

    
1424
# Query resources
1425
QR_CLUSTER = "cluster"
1426
QR_INSTANCE = "instance"
1427
QR_NODE = "node"
1428
QR_LOCK = "lock"
1429
QR_GROUP = "group"
1430
QR_OS = "os"
1431
QR_JOB = "job"
1432
QR_EXPORT = "export"
1433
QR_NETWORK = "network"
1434
QR_EXTSTORAGE = "extstorage"
1435

    
1436
#: List of resources which can be queried using L{opcodes.OpQuery}
1437
QR_VIA_OP = compat.UniqueFrozenset([
1438
  QR_CLUSTER,
1439
  QR_INSTANCE,
1440
  QR_NODE,
1441
  QR_GROUP,
1442
  QR_OS,
1443
  QR_EXPORT,
1444
  QR_NETWORK,
1445
  QR_EXTSTORAGE,
1446
  ])
1447

    
1448
#: List of resources which can be queried using Local UniX Interface
1449
QR_VIA_LUXI = QR_VIA_OP.union([
1450
  QR_LOCK,
1451
  QR_JOB,
1452
  ])
1453

    
1454
#: List of resources which can be queried using RAPI
1455
QR_VIA_RAPI = QR_VIA_LUXI
1456

    
1457
# Query field types
1458
QFT_UNKNOWN = "unknown"
1459
QFT_TEXT = "text"
1460
QFT_BOOL = "bool"
1461
QFT_NUMBER = "number"
1462
QFT_UNIT = "unit"
1463
QFT_TIMESTAMP = "timestamp"
1464
QFT_OTHER = "other"
1465

    
1466
#: All query field types
1467
QFT_ALL = compat.UniqueFrozenset([
1468
  QFT_UNKNOWN,
1469
  QFT_TEXT,
1470
  QFT_BOOL,
1471
  QFT_NUMBER,
1472
  QFT_UNIT,
1473
  QFT_TIMESTAMP,
1474
  QFT_OTHER,
1475
  ])
1476

    
1477
# Query result field status (don't change or reuse values as they're used by
1478
# clients)
1479
#: Normal field status
1480
RS_NORMAL = 0
1481
#: Unknown field
1482
RS_UNKNOWN = 1
1483
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1484
RS_NODATA = 2
1485
#: Value unavailable/unsupported for item; if this field is supported
1486
#: but we cannot get the data for the moment, RS_NODATA or
1487
#: RS_OFFLINE should be used
1488
RS_UNAVAIL = 3
1489
#: Resource marked offline
1490
RS_OFFLINE = 4
1491

    
1492
RS_ALL = compat.UniqueFrozenset([
1493
  RS_NORMAL,
1494
  RS_UNKNOWN,
1495
  RS_NODATA,
1496
  RS_UNAVAIL,
1497
  RS_OFFLINE,
1498
  ])
1499

    
1500
#: Dictionary with special field cases and their verbose/terse formatting
1501
RSS_DESCRIPTION = {
1502
  RS_UNKNOWN: ("(unknown)", "??"),
1503
  RS_NODATA: ("(nodata)", "?"),
1504
  RS_OFFLINE: ("(offline)", "*"),
1505
  RS_UNAVAIL: ("(unavail)", "-"),
1506
  }
1507

    
1508
# max dynamic devices
1509
MAX_NICS = 8
1510
MAX_DISKS = 16
1511

    
1512
# SSCONF file prefix
1513
SSCONF_FILEPREFIX = "ssconf_"
1514
# SSCONF keys
1515
SS_CLUSTER_NAME = "cluster_name"
1516
SS_CLUSTER_TAGS = "cluster_tags"
1517
SS_FILE_STORAGE_DIR = "file_storage_dir"
1518
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
1519
SS_MASTER_CANDIDATES = "master_candidates"
1520
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
1521
SS_MASTER_IP = "master_ip"
1522
SS_MASTER_NETDEV = "master_netdev"
1523
SS_MASTER_NETMASK = "master_netmask"
1524
SS_MASTER_NODE = "master_node"
1525
SS_NODE_LIST = "node_list"
1526
SS_NODE_PRIMARY_IPS = "node_primary_ips"
1527
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
1528
SS_OFFLINE_NODES = "offline_nodes"
1529
SS_ONLINE_NODES = "online_nodes"
1530
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
1531
SS_INSTANCE_LIST = "instance_list"
1532
SS_RELEASE_VERSION = "release_version"
1533
SS_HYPERVISOR_LIST = "hypervisor_list"
1534
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
1535
SS_UID_POOL = "uid_pool"
1536
SS_NODEGROUPS = "nodegroups"
1537
SS_NETWORKS = "networks"
1538

    
1539
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1540
SS_HVPARAMS_PREF = "hvparams_"
1541

    
1542
# Hvparams keys:
1543
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1544
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1545
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1546
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1547
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1548
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1549

    
1550
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1551
  SS_HVPARAMS_XEN_PVM,
1552
  SS_HVPARAMS_XEN_FAKE,
1553
  SS_HVPARAMS_XEN_HVM,
1554
  SS_HVPARAMS_XEN_KVM,
1555
  SS_HVPARAMS_XEN_CHROOT,
1556
  SS_HVPARAMS_XEN_LXC,
1557
  ])
1558

    
1559
SS_FILE_PERMS = 0444
1560

    
1561
# cluster wide default parameters
1562
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1563

    
1564
HVC_DEFAULTS = {
1565
  HT_XEN_PVM: {
1566
    HV_USE_BOOTLOADER: False,
1567
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
1568
    HV_BOOTLOADER_ARGS: "",
1569
    HV_KERNEL_PATH: XEN_KERNEL,
1570
    HV_INITRD_PATH: "",
1571
    HV_ROOT_PATH: "/dev/xvda1",
1572
    HV_KERNEL_ARGS: "ro",
1573
    HV_MIGRATION_PORT: 8002,
1574
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1575
    HV_BLOCKDEV_PREFIX: "sd",
1576
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1577
    HV_CPU_MASK: CPU_PINNING_ALL,
1578
    HV_CPU_CAP: 0,
1579
    HV_CPU_WEIGHT: 256,
1580
    HV_VIF_SCRIPT: "",
1581
    HV_XEN_CMD: XEN_CMD_XM,
1582
    HV_XEN_CPUID: "",
1583
    HV_SOUNDHW: "",
1584
    },
1585
  HT_XEN_HVM: {
1586
    HV_BOOT_ORDER: "cd",
1587
    HV_CDROM_IMAGE_PATH: "",
1588
    HV_NIC_TYPE: HT_NIC_RTL8139,
1589
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1590
    HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY,
1591
    HV_VNC_PASSWORD_FILE: pathutils.VNC_PASSWORD_FILE,
1592
    HV_ACPI: True,
1593
    HV_PAE: True,
1594
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
1595
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
1596
    HV_MIGRATION_PORT: 8002,
1597
    HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
1598
    HV_USE_LOCALTIME: False,
1599
    HV_BLOCKDEV_PREFIX: "hd",
1600
    HV_PASSTHROUGH: "",
1601
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1602
    HV_CPU_MASK: CPU_PINNING_ALL,
1603
    HV_CPU_CAP: 0,
1604
    HV_CPU_WEIGHT: 256,
1605
    HV_VIF_TYPE: HT_HVM_VIF_IOEMU,
1606
    HV_VIF_SCRIPT: "",
1607
    HV_VIRIDIAN: False,
1608
    HV_XEN_CMD: XEN_CMD_XM,
1609
    HV_XEN_CPUID: "",
1610
    HV_SOUNDHW: "",
1611
    },
1612
  HT_KVM: {
1613
    HV_KVM_PATH: KVM_PATH,
1614
    HV_KERNEL_PATH: KVM_KERNEL,
1615
    HV_INITRD_PATH: "",
1616
    HV_KERNEL_ARGS: "ro",
1617
    HV_ROOT_PATH: "/dev/vda1",
1618
    HV_ACPI: True,
1619
    HV_SERIAL_CONSOLE: True,
1620
    HV_SERIAL_SPEED: 38400,
1621
    HV_VNC_BIND_ADDRESS: "",
1622
    HV_VNC_TLS: False,
1623
    HV_VNC_X509: "",
1624
    HV_VNC_X509_VERIFY: False,
1625
    HV_VNC_PASSWORD_FILE: "",
1626
    HV_KVM_SPICE_BIND: "",
1627
    HV_KVM_SPICE_IP_VERSION: IFACE_NO_IP_VERSION_SPECIFIED,
1628
    HV_KVM_SPICE_PASSWORD_FILE: "",
1629
    HV_KVM_SPICE_LOSSLESS_IMG_COMPR: "",
1630
    HV_KVM_SPICE_JPEG_IMG_COMPR: "",
1631
    HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: "",
1632
    HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: "",
1633
    HV_KVM_SPICE_AUDIO_COMPR: True,
1634
    HV_KVM_SPICE_USE_TLS: False,
1635
    HV_KVM_SPICE_TLS_CIPHERS: OPENSSL_CIPHERS,
1636
    HV_KVM_SPICE_USE_VDAGENT: True,
1637
    HV_KVM_FLOPPY_IMAGE_PATH: "",
1638
    HV_CDROM_IMAGE_PATH: "",
1639
    HV_KVM_CDROM2_IMAGE_PATH: "",
1640
    HV_BOOT_ORDER: HT_BO_DISK,
1641
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
1642
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1643
    HV_KVM_CDROM_DISK_TYPE: "",
1644
    HV_USB_MOUSE: "",
1645
    HV_KEYMAP: "",
1646
    HV_MIGRATION_PORT: 8102,
1647
    HV_MIGRATION_BANDWIDTH: 32, # MiB/s
1648
    HV_MIGRATION_DOWNTIME: 30,  # ms
1649
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1650
    HV_USE_LOCALTIME: False,
1651
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
1652
    HV_SECURITY_MODEL: HT_SM_NONE,
1653
    HV_SECURITY_DOMAIN: "",
1654
    HV_KVM_FLAG: "",
1655
    HV_VHOST_NET: False,
1656
    HV_KVM_USE_CHROOT: False,
1657
    HV_MEM_PATH: "",
1658
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1659
    HV_CPU_MASK: CPU_PINNING_ALL,
1660
    HV_CPU_TYPE: "",
1661
    HV_CPU_CORES: 0,
1662
    HV_CPU_THREADS: 0,
1663
    HV_CPU_SOCKETS: 0,
1664
    HV_SOUNDHW: "",
1665
    HV_USB_DEVICES: "",
1666
    HV_VGA: "",
1667
    HV_KVM_EXTRA: "",
1668
    HV_KVM_MACHINE_VERSION: "",
1669
    HV_VNET_HDR: True,
1670
    },
1671
  HT_FAKE: {
1672
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1673
  },
1674
  HT_CHROOT: {
1675
    HV_INIT_SCRIPT: "/ganeti-chroot",
1676
    },
1677
  HT_LXC: {
1678
    HV_CPU_MASK: "",
1679
    },
1680
  }
1681

    
1682
HVC_GLOBALS = compat.UniqueFrozenset([
1683
  HV_MIGRATION_PORT,
1684
  HV_MIGRATION_BANDWIDTH,
1685
  HV_MIGRATION_MODE,
1686
  HV_XEN_CMD,
1687
  ])
1688

    
1689
BEC_DEFAULTS = {
1690
  BE_MINMEM: 128,
1691
  BE_MAXMEM: 128,
1692
  BE_VCPUS: 1,
1693
  BE_AUTO_BALANCE: True,
1694
  BE_ALWAYS_FAILOVER: False,
1695
  BE_SPINDLE_USE: 1,
1696
  }
1697

    
1698
NDC_DEFAULTS = {
1699
  ND_OOB_PROGRAM: "",
1700
  ND_SPINDLE_COUNT: 1,
1701
  ND_EXCLUSIVE_STORAGE: False,
1702
  ND_OVS: False,
1703
  ND_OVS_NAME: DEFAULT_OVS,
1704
  ND_OVS_LINK: ""
1705
  }
1706

    
1707
NDC_GLOBALS = compat.UniqueFrozenset([
1708
  ND_EXCLUSIVE_STORAGE,
1709
  ])
1710

    
1711
DISK_LD_DEFAULTS = {
1712
  DT_DRBD8: {
1713
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1714
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1715
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1716
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1717
    LDP_DISK_CUSTOM: "",
1718
    LDP_NET_CUSTOM: "",
1719
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1720
    LDP_DYNAMIC_RESYNC: False,
1721

    
1722
    # The default values for the DRBD dynamic resync speed algorithm
1723
    # are taken from the drbsetup 8.3.11 man page, except for
1724
    # c-plan-ahead (that we don't need to set to 0, because we have a
1725
    # separate option to enable it) and for c-max-rate, that we cap to
1726
    # the default value for the static resync rate.
1727
    LDP_PLAN_AHEAD: 20, # ds
1728
    LDP_FILL_TARGET: 0, # sectors
1729
    LDP_DELAY_TARGET: 1, # ds
1730
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
1731
    LDP_MIN_RATE: 4 * 1024, # KiB/s
1732
    },
1733
  DT_PLAIN: {
1734
    LDP_STRIPES: _constants.LVM_STRIPECOUNT
1735
    },
1736
  DT_FILE: {},
1737
  DT_SHARED_FILE: {},
1738
  DT_BLOCK: {},
1739
  DT_RBD: {
1740
    LDP_POOL: "rbd",
1741
    LDP_ACCESS: DISK_KERNELSPACE,
1742
    },
1743
  DT_EXT: {},
1744
  }
1745

    
1746
# readability shortcuts
1747
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1748
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1749

    
1750
DISK_DT_DEFAULTS = {
1751
  DT_PLAIN: {
1752
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1753
    },
1754
  DT_DRBD8: {
1755
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1756
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1757
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1758
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1759
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1760
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1761
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1762
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1763
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1764
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1765
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1766
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1767
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1768
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1769
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1770
    },
1771
  DT_DISKLESS: {},
1772
  DT_FILE: {},
1773
  DT_SHARED_FILE: {},
1774
  DT_BLOCK: {},
1775
  DT_RBD: {
1776
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
1777
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
1778
    },
1779
  DT_EXT: {},
1780
  }
1781

    
1782
# we don't want to export the shortcuts
1783
del _LV_DEFAULTS, _DRBD_DEFAULTS
1784

    
1785
NICC_DEFAULTS = {
1786
  NIC_MODE: NIC_MODE_BRIDGED,
1787
  NIC_LINK: DEFAULT_BRIDGE,
1788
  NIC_VLAN: VALUE_HS_NOTHING,
1789
  }
1790

    
1791
# All of the following values are quite arbitrarily - there are no
1792
# "good" defaults, these must be customised per-site
1793
ISPECS_MINMAX_DEFAULTS = {
1794
  ISPECS_MIN: {
1795
    ISPEC_MEM_SIZE: 128,
1796
    ISPEC_CPU_COUNT: 1,
1797
    ISPEC_DISK_COUNT: 1,
1798
    ISPEC_DISK_SIZE: 1024,
1799
    ISPEC_NIC_COUNT: 1,
1800
    ISPEC_SPINDLE_USE: 1,
1801
    },
1802
  ISPECS_MAX: {
1803
    ISPEC_MEM_SIZE: 32768,
1804
    ISPEC_CPU_COUNT: 8,
1805
    ISPEC_DISK_COUNT: MAX_DISKS,
1806
    ISPEC_DISK_SIZE: 1024 * 1024,
1807
    ISPEC_NIC_COUNT: MAX_NICS,
1808
    ISPEC_SPINDLE_USE: 12,
1809
    },
1810
  }
1811
IPOLICY_DEFAULTS = {
1812
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
1813
  ISPECS_STD: {
1814
    ISPEC_MEM_SIZE: 128,
1815
    ISPEC_CPU_COUNT: 1,
1816
    ISPEC_DISK_COUNT: 1,
1817
    ISPEC_DISK_SIZE: 1024,
1818
    ISPEC_NIC_COUNT: 1,
1819
    ISPEC_SPINDLE_USE: 1,
1820
    },
1821
  IPOLICY_DTS: list(DISK_TEMPLATES),
1822
  IPOLICY_VCPU_RATIO: 4.0,
1823
  IPOLICY_SPINDLE_RATIO: 32.0,
1824
  }
1825

    
1826
MASTER_POOL_SIZE_DEFAULT = 10
1827

    
1828
# Exclusive storage:
1829
# Error margin used to compare physical disks
1830
PART_MARGIN = .01
1831
# Space reserved when creating instance disks
1832
PART_RESERVED = .02
1833

    
1834
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
1835

    
1836
CONFD_REQ_PING = _constants.CONFD_REQ_PING
1837
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
1838
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
1839
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
1840
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
1841
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
1842
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
1843
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
1844
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
1845
CONFD_REQS = _constants.CONFD_REQS
1846

    
1847
# Confd request query fields. These are used to narrow down queries.
1848
# These must be strings rather than integers, because json-encoding
1849
# converts them to strings anyway, as they're used as dict-keys.
1850
CONFD_REQQ_LINK = _constants.CONFD_REQQ_LINK
1851
CONFD_REQQ_IP = _constants.CONFD_REQQ_IP
1852
CONFD_REQQ_IPLIST = _constants.CONFD_REQQ_IPLIST
1853
CONFD_REQQ_FIELDS = _constants.CONFD_REQQ_FIELDS
1854

    
1855
# FIXME: perhaps update code that uses these constants to deal with
1856
# integers instead of strings
1857
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
1858
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
1859
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
1860

    
1861
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
1862
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
1863
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
1864
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
1865

    
1866
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
1867
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
1868
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
1869
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
1870
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
1871

    
1872
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
1873
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
1874
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
1875

    
1876
# Each request is "salted" by the current timestamp.
1877
# This constants decides how many seconds of skew to accept.
1878
# TODO: make this a default and allow the value to be more configurable
1879
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
1880

    
1881
# When we haven't reloaded the config for more than this amount of
1882
# seconds, we force a test to see if inotify is betraying us. Using a
1883
# prime number to ensure we get less chance of 'same wakeup' with
1884
# other processes.
1885
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
1886

    
1887
# If we receive more than one update in this amount of microseconds,
1888
# we move to polling every RATELIMIT seconds, rather than relying on
1889
# inotify, to be able to serve more requests.
1890
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
1891

    
1892
# Magic number prepended to all confd queries.
1893
# This allows us to distinguish different types of confd protocols and handle
1894
# them. For example by changing this we can move the whole payload to be
1895
# compressed, or move away from json.
1896
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
1897

    
1898
# By default a confd request is sent to the minimum between this number and all
1899
# MCs. 6 was chosen because even in the case of a disastrous 50% response rate,
1900
# we should have enough answers to be able to compare more than one.
1901
CONFD_DEFAULT_REQ_COVERAGE = _constants.CONFD_DEFAULT_REQ_COVERAGE
1902

    
1903
# Timeout in seconds to expire pending query request in the confd client
1904
# library. We don't actually expect any answer more than 10 seconds after we
1905
# sent a request.
1906
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
1907

    
1908
# Maximum UDP datagram size.
1909
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
1910
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
1911
#   (assuming we can't use jumbo frames)
1912
# We just set this to 60K, which should be enough
1913
MAX_UDP_DATA_SIZE = 61440
1914

    
1915
# User-id pool minimum/maximum acceptable user-ids.
1916
UIDPOOL_UID_MIN = 0
1917
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
1918

    
1919
# Name or path of the pgrep command
1920
PGREP = "pgrep"
1921

    
1922
# Name of the node group that gets created at cluster init or upgrade
1923
INITIAL_NODE_GROUP_NAME = "default"
1924

    
1925
# Possible values for NodeGroup.alloc_policy
1926
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
1927
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
1928
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
1929
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
1930

    
1931
# Temporary external/shared storage parameters
1932
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
1933

    
1934
# qemu-img path, required for ovfconverter
1935
QEMUIMG_PATH = _constants.QEMUIMG_PATH
1936

    
1937
# Whether htools was enabled at compilation time
1938
HTOOLS = _constants.HTOOLS
1939
# The hail iallocator
1940
IALLOC_HAIL = "hail"
1941

    
1942
# Fake opcodes for functions that have hooks attached to them via
1943
# backend.RunLocalHooks
1944
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
1945
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
1946

    
1947
# SSH key types
1948
SSHK_RSA = "rsa"
1949
SSHK_DSA = "dsa"
1950
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
1951

    
1952
# SSH authorized key types
1953
SSHAK_RSA = "ssh-rsa"
1954
SSHAK_DSS = "ssh-dss"
1955
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
1956

    
1957
# SSH setup
1958
SSHS_CLUSTER_NAME = "cluster_name"
1959
SSHS_SSH_HOST_KEY = "ssh_host_key"
1960
SSHS_SSH_ROOT_KEY = "ssh_root_key"
1961
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
1962

    
1963
#: Key files for SSH daemon
1964
SSH_DAEMON_KEYFILES = {
1965
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
1966
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
1967
  }
1968

    
1969
# Node daemon setup
1970
NDS_CLUSTER_NAME = "cluster_name"
1971
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
1972
NDS_SSCONF = "ssconf"
1973
NDS_START_NODE_DAEMON = "start_node_daemon"
1974

    
1975
# Path generating random UUID
1976
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
1977

    
1978
# Regex string for verifying a UUID
1979
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
1980

    
1981
# Auto-repair tag prefixes
1982
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
1983
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
1984
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
1985
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
1986
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
1987

    
1988
# Auto-repair levels
1989
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
1990
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
1991
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
1992
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
1993
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
1994

    
1995
# Auto-repair results
1996
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
1997
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
1998
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
1999
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2000

    
2001
# The version identifier for builtin data collectors
2002
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2003

    
2004
# The reason trail opcode parameter name
2005
OPCODE_REASON = _constants.OPCODE_REASON
2006

    
2007
# The source reasons for the execution of an OpCode
2008
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2009
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2010
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2011
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2012
OPCODE_REASON_SRC_USER = "gnt:user"
2013

    
2014
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2015
  OPCODE_REASON_SRC_CLIENT,
2016
  OPCODE_REASON_SRC_NODED,
2017
  OPCODE_REASON_SRC_OPCODE,
2018
  OPCODE_REASON_SRC_RLIB2,
2019
  OPCODE_REASON_SRC_USER,
2020
  ])
2021

    
2022
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2023

    
2024
# CPU load collector variables
2025
STAT_FILE = _constants.STAT_FILE
2026
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2027
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2028

    
2029
# Mond's variable for periodical data collection
2030
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2031

    
2032
# MonD's latest API version
2033
MOND_LATEST_API_VERSION = 1
2034

    
2035
# Timeouts for upgrades
2036

    
2037
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2038
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2039

    
2040
# Do not re-export imported modules
2041
del re, _vcsversion, _constants, socket, pathutils, compat
2042

    
2043

    
2044
ALLOCATABLE_KEY = "allocatable"
2045
FAILED_KEY = "failed"