Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 6e18cc0d

History | View | Annotate | Download (60.8 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
# import/export config options
390
INISECT_EXP = "export"
391
INISECT_INS = "instance"
392
INISECT_HYP = "hypervisor"
393
INISECT_BEP = "backend"
394
INISECT_OSP = "os"
395

    
396
# dynamic device modification
397
DDM_ADD = _constants.DDM_ADD
398
DDM_MODIFY = _constants.DDM_MODIFY
399
DDM_REMOVE = _constants.DDM_REMOVE
400
DDMS_VALUES = _constants.DDMS_VALUES
401
DDMS_VALUES_WITH_MODIFY = _constants.DDMS_VALUES_WITH_MODIFY
402
# TODO: DDM_SWAP, DDM_MOVE?
403

    
404
# common exit codes
405
EXIT_SUCCESS = _constants.EXIT_SUCCESS
406
EXIT_FAILURE = _constants.EXIT_FAILURE
407
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
408
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
409
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
410
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
411

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

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

    
423
MAX_TAG_LEN = _constants.MAX_TAG_LEN
424
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
425

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

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

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

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

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

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

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

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

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

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

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

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

    
528
ES_PARAMETERS_FILE = "parameters.list"
529

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

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

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

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

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

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

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

    
650

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

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

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

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

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

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

    
760
# KVM-specific statuses
761
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
762

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
968
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
969

    
970
OOB_TIMEOUT = _constants.OOB_TIMEOUT
971
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
972

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

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

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

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

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

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

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

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

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

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

    
1056
VNC_BASE_PORT = 5900
1057
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1058

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1264
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1265
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1266

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

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

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

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

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

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

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

    
1337
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1338
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1339

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1560
SS_FILE_PERMS = 0444
1561

    
1562
# cluster wide default parameters
1563
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1564

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

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

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

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

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

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

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

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

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

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

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

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

    
1827
MASTER_POOL_SIZE_DEFAULT = 10
1828

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

    
1835
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
1836

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
2023
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2024

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

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

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

    
2036
# Timeouts for upgrades
2037

    
2038
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2039
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2040

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

    
2044

    
2045
ALLOCATABLE_KEY = "allocatable"
2046
FAILED_KEY = "failed"