Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 9be1ff8c

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
# drbd constants
312
DRBD_HMAC_ALG = "md5"
313
DRBD_DEFAULT_NET_PROTOCOL = "C"
314
DRBD_MIGRATION_NET_PROTOCOL = "C"
315
DRBD_STATUS_FILE = "/proc/drbd"
316

    
317
#: Size of DRBD meta block device
318
DRBD_META_SIZE = 128
319

    
320
DTS_INT_MIRROR = _constants.DTS_INT_MIRROR
321
DTS_EXT_MIRROR = _constants.DTS_EXT_MIRROR
322
DTS_NOT_LVM = _constants.DTS_NOT_LVM
323
DTS_GROWABLE = _constants.DTS_GROWABLE
324
DTS_MAY_ADOPT = _constants.DTS_MAY_ADOPT
325
DTS_MUST_ADOPT = _constants.DTS_MUST_ADOPT
326
DTS_MIRRORED = _constants.DTS_MIRRORED
327
DTS_FILEBASED = _constants.DTS_FILEBASED
328
DTS_COPYABLE = _constants.DTS_COPYABLE
329
DTS_EXCL_STORAGE = _constants.DTS_EXCL_STORAGE
330
DTS_NO_FREE_SPACE_CHECK = _constants.DTS_NO_FREE_SPACE_CHECK
331
DTS_BLOCK = _constants.DTS_BLOCK
332
# drbd barrier types
333
DRBD_B_NONE = "n"
334
DRBD_B_DISK_BARRIERS = "b"
335
DRBD_B_DISK_DRAIN = "d"
336
DRBD_B_DISK_FLUSH = "f"
337

    
338
# Valid barrier combinations: "n" or any non-null subset of "bfd"
339
DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([
340
  frozenset([DRBD_B_NONE]),
341
  frozenset([DRBD_B_DISK_BARRIERS]),
342
  frozenset([DRBD_B_DISK_DRAIN]),
343
  frozenset([DRBD_B_DISK_FLUSH]),
344
  frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]),
345
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]),
346
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]),
347
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]),
348
  ])
349

    
350
# rbd tool command
351
RBD_CMD = "rbd"
352

    
353
FD_BLKTAP = _constants.FD_BLKTAP
354
FD_LOOP = _constants.FD_LOOP
355
FILE_DRIVER = _constants.FILE_DRIVER
356

    
357
LDS_DRBD = _constants.LDS_DRBD
358

    
359
# disk access mode
360
DISK_RDONLY = _constants.DISK_RDONLY
361
DISK_RDWR = _constants.DISK_RDWR
362
DISK_ACCESS_SET = _constants.DISK_ACCESS_SET
363
DISK_USERSPACE = _constants.DISK_USERSPACE
364
DISK_KERNELSPACE = _constants.DISK_KERNELSPACE
365
DISK_VALID_ACCESS_MODES = _constants.DISK_VALID_ACCESS_MODES
366

    
367
REPLACE_DISK_PRI = _constants.REPLACE_DISK_PRI
368
REPLACE_DISK_SEC = _constants.REPLACE_DISK_SEC
369
REPLACE_DISK_CHG = _constants.REPLACE_DISK_CHG
370
REPLACE_DISK_AUTO = _constants.REPLACE_DISK_AUTO
371
REPLACE_MODES = _constants.REPLACE_MODES
372

    
373
# Instance export mode
374
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
375
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
376
EXPORT_MODES = _constants.EXPORT_MODES
377

    
378
# instance creation modes
379
INSTANCE_CREATE = _constants.INSTANCE_CREATE
380
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
381
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
382
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
383

    
384
# Remote import/export handshake message and version
385
RIE_VERSION = 0
386
RIE_HANDSHAKE = "Hi, I'm Ganeti"
387

    
388
# Remote import/export certificate validity in seconds
389
RIE_CERT_VALIDITY = 24 * 60 * 60
390

    
391
# Overall timeout for establishing connection
392
RIE_CONNECT_TIMEOUT = 180
393

    
394
# Export only: how long to wait per connection attempt (seconds)
395
RIE_CONNECT_ATTEMPT_TIMEOUT = 20
396

    
397
# Export only: number of attempts to connect
398
RIE_CONNECT_RETRIES = 10
399

    
400
#: Give child process up to 5 seconds to exit after sending a signal
401
CHILD_LINGER_TIMEOUT = 5.0
402

    
403

    
404
# import/export config options
405
INISECT_EXP = "export"
406
INISECT_INS = "instance"
407
INISECT_HYP = "hypervisor"
408
INISECT_BEP = "backend"
409
INISECT_OSP = "os"
410

    
411
# dynamic device modification
412
DDM_ADD = _constants.DDM_ADD
413
DDM_MODIFY = _constants.DDM_MODIFY
414
DDM_REMOVE = _constants.DDM_REMOVE
415
DDMS_VALUES = _constants.DDMS_VALUES
416
DDMS_VALUES_WITH_MODIFY = _constants.DDMS_VALUES_WITH_MODIFY
417
# TODO: DDM_SWAP, DDM_MOVE?
418

    
419
# common exit codes
420
EXIT_SUCCESS = _constants.EXIT_SUCCESS
421
EXIT_FAILURE = _constants.EXIT_FAILURE
422
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
423
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
424
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
425
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
426

    
427
#: Exit code for query operations with unknown fields
428
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
429

    
430
# tags
431
TAG_CLUSTER = _constants.TAG_CLUSTER
432
TAG_NODEGROUP = _constants.TAG_NODEGROUP
433
TAG_NODE = _constants.TAG_NODE
434
TAG_INSTANCE = _constants.TAG_INSTANCE
435
TAG_NETWORK = _constants.TAG_NETWORK
436
VALID_TAG_TYPES = _constants.VALID_TAG_TYPES
437

    
438
MAX_TAG_LEN = _constants.MAX_TAG_LEN
439
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
440

    
441
# others
442
DEFAULT_BRIDGE = "xen-br0"
443
DEFAULT_OVS = "switch1"
444
CLASSIC_DRBD_SYNC_SPEED = 60 * 1024  # 60 MiB, expressed in KiB
445
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
446
IP4_ADDRESS_ANY = "0.0.0.0"
447
IP6_ADDRESS_LOCALHOST = "::1"
448
IP6_ADDRESS_ANY = "::"
449
IP4_VERSION = 4
450
IP6_VERSION = 6
451
VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
452
# for export to htools
453
IP4_FAMILY = socket.AF_INET
454
IP6_FAMILY = socket.AF_INET6
455

    
456
TCP_PING_TIMEOUT = 10
457
DEFAULT_VG = "xenvg"
458
DEFAULT_DRBD_HELPER = "/bin/true"
459
MIN_VG_SIZE = 20480
460
DEFAULT_MAC_PREFIX = "aa:00:00"
461
# default maximum instance wait time, in seconds.
462
DEFAULT_SHUTDOWN_TIMEOUT = 120
463
NODE_MAX_CLOCK_SKEW = _constants.NODE_MAX_CLOCK_SKEW
464
# Time for an intra-cluster disk transfer to wait for a connection
465
DISK_TRANSFER_CONNECT_TIMEOUT = 60
466
# Disk index separator
467
DISK_SEPARATOR = _constants.DISK_SEPARATOR
468
IP_COMMAND_PATH = _constants.IP_COMMAND_PATH
469

    
470
RPC_TMO_URGENT = _constants.RPC_TMO_URGENT
471
RPC_TMO_FAST = _constants.RPC_TMO_FAST
472
RPC_TMO_NORMAL = _constants.RPC_TMO_NORMAL
473
RPC_TMO_SLOW = _constants.RPC_TMO_SLOW
474
RPC_TMO_4HRS = _constants.RPC_TMO_4HRS
475
RPC_TMO_1DAY = _constants.RPC_TMO_1DAY
476
RPC_CONNECT_TIMEOUT = _constants.RPC_CONNECT_TIMEOUT
477

    
478
#: Key for job IDs in opcode result
479
JOB_IDS_KEY = "jobs"
480

    
481
# runparts results
482
(RUNPARTS_SKIP,
483
 RUNPARTS_RUN,
484
 RUNPARTS_ERR) = range(3)
485

    
486
RUNPARTS_STATUS = compat.UniqueFrozenset([
487
  RUNPARTS_SKIP,
488
  RUNPARTS_RUN,
489
  RUNPARTS_ERR,
490
  ])
491

    
492
# RPC constants
493
(RPC_ENCODING_NONE,
494
 RPC_ENCODING_ZLIB_BASE64) = range(2)
495

    
496
# os related constants
497
OS_SCRIPT_CREATE = "create"
498
OS_SCRIPT_IMPORT = "import"
499
OS_SCRIPT_EXPORT = "export"
500
OS_SCRIPT_RENAME = "rename"
501
OS_SCRIPT_VERIFY = "verify"
502
OS_SCRIPTS = compat.UniqueFrozenset([
503
  OS_SCRIPT_CREATE,
504
  OS_SCRIPT_IMPORT,
505
  OS_SCRIPT_EXPORT,
506
  OS_SCRIPT_RENAME,
507
  OS_SCRIPT_VERIFY,
508
  ])
509

    
510
OS_API_FILE = "ganeti_api_version"
511
OS_VARIANTS_FILE = "variants.list"
512
OS_PARAMETERS_FILE = "parameters.list"
513

    
514
OS_VALIDATE_PARAMETERS = "parameters"
515
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
516

    
517
# External Storage (ES) related constants
518
ES_ACTION_CREATE = "create"
519
ES_ACTION_REMOVE = "remove"
520
ES_ACTION_GROW = "grow"
521
ES_ACTION_ATTACH = "attach"
522
ES_ACTION_DETACH = "detach"
523
ES_ACTION_SETINFO = "setinfo"
524
ES_ACTION_VERIFY = "verify"
525

    
526
ES_SCRIPT_CREATE = ES_ACTION_CREATE
527
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
528
ES_SCRIPT_GROW = ES_ACTION_GROW
529
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
530
ES_SCRIPT_DETACH = ES_ACTION_DETACH
531
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
532
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
533
ES_SCRIPTS = frozenset([
534
  ES_SCRIPT_CREATE,
535
  ES_SCRIPT_REMOVE,
536
  ES_SCRIPT_GROW,
537
  ES_SCRIPT_ATTACH,
538
  ES_SCRIPT_DETACH,
539
  ES_SCRIPT_SETINFO,
540
  ES_SCRIPT_VERIFY
541
  ])
542

    
543
ES_PARAMETERS_FILE = "parameters.list"
544

    
545
# reboot types
546
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
547
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
548
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
549
REBOOT_TYPES = _constants.REBOOT_TYPES
550

    
551
# instance reboot behaviors
552
INSTANCE_REBOOT_ALLOWED = "reboot"
553
INSTANCE_REBOOT_EXIT = "exit"
554

    
555
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
556
  INSTANCE_REBOOT_ALLOWED,
557
  INSTANCE_REBOOT_EXIT,
558
  ])
559

    
560
VTYPE_STRING = _constants.VTYPE_STRING
561
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
562
VTYPE_BOOL = _constants.VTYPE_BOOL
563
VTYPE_SIZE = _constants.VTYPE_SIZE
564
VTYPE_INT = _constants.VTYPE_INT
565
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
566

    
567
# Constant representing that the user does not specify any IP version
568
IFACE_NO_IP_VERSION_SPECIFIED = 0
569

    
570
VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
571
  75,
572
  110,
573
  300,
574
  600,
575
  1200,
576
  1800,
577
  2400,
578
  4800,
579
  9600,
580
  14400,
581
  19200,
582
  28800,
583
  38400,
584
  57600,
585
  115200,
586
  230400,
587
  345600,
588
  460800,
589
  ])
590

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

    
665

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

    
741
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
742

    
743
HVS_PARAMETER_TITLES = {
744
  HV_ACPI: "ACPI",
745
  HV_BOOT_ORDER: "Boot_order",
746
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
747
  HV_DISK_TYPE: "Disk_type",
748
  HV_INITRD_PATH: "Initrd_path",
749
  HV_KERNEL_PATH: "Kernel_path",
750
  HV_NIC_TYPE: "NIC_type",
751
  HV_PAE: "PAE",
752
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
753
  HV_PASSTHROUGH: "pci_pass",
754
  HV_CPU_TYPE: "cpu_type",
755
  }
756

    
757
# Migration statuses
758
HV_MIGRATION_COMPLETED = "completed"
759
HV_MIGRATION_ACTIVE = "active"
760
HV_MIGRATION_FAILED = "failed"
761
HV_MIGRATION_CANCELLED = "cancelled"
762

    
763
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
764
  HV_MIGRATION_COMPLETED,
765
  HV_MIGRATION_ACTIVE,
766
  HV_MIGRATION_FAILED,
767
  HV_MIGRATION_CANCELLED,
768
  ])
769

    
770
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
771
  HV_MIGRATION_FAILED,
772
  HV_MIGRATION_CANCELLED,
773
  ])
774

    
775
# KVM-specific statuses
776
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
777

    
778
# Node info keys
779
HV_NODEINFO_KEY_VERSION = "hv_version"
780

    
781
# Hypervisor state
782
HVST_MEMORY_TOTAL = "mem_total"
783
HVST_MEMORY_NODE = "mem_node"
784
HVST_MEMORY_HV = "mem_hv"
785
HVST_CPU_TOTAL = "cpu_total"
786
HVST_CPU_NODE = "cpu_node"
787

    
788
HVST_DEFAULTS = {
789
  HVST_MEMORY_TOTAL: 0,
790
  HVST_MEMORY_NODE: 0,
791
  HVST_MEMORY_HV: 0,
792
  HVST_CPU_TOTAL: 1,
793
  HVST_CPU_NODE: 1,
794
  }
795

    
796
HVSTS_PARAMETER_TYPES = {
797
  HVST_MEMORY_TOTAL: VTYPE_INT,
798
  HVST_MEMORY_NODE: VTYPE_INT,
799
  HVST_MEMORY_HV: VTYPE_INT,
800
  HVST_CPU_TOTAL: VTYPE_INT,
801
  HVST_CPU_NODE: VTYPE_INT,
802
  }
803

    
804
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
805

    
806
# Disk state
807
DS_DISK_TOTAL = "disk_total"
808
DS_DISK_RESERVED = "disk_reserved"
809
DS_DISK_OVERHEAD = "disk_overhead"
810

    
811
DS_DEFAULTS = {
812
  DS_DISK_TOTAL: 0,
813
  DS_DISK_RESERVED: 0,
814
  DS_DISK_OVERHEAD: 0,
815
  }
816

    
817
ISPEC_MEM_SIZE = _constants.ISPEC_MEM_SIZE
818
ISPEC_CPU_COUNT = _constants.ISPEC_CPU_COUNT
819
ISPEC_DISK_COUNT = _constants.ISPEC_DISK_COUNT
820
ISPEC_DISK_SIZE = _constants.ISPEC_DISK_SIZE
821
ISPEC_NIC_COUNT = _constants.ISPEC_NIC_COUNT
822
ISPEC_SPINDLE_USE = _constants.ISPEC_SPINDLE_USE
823
ISPECS_PARAMETER_TYPES = _constants.ISPECS_PARAMETER_TYPES
824
ISPECS_PARAMETERS = _constants.ISPECS_PARAMETERS
825

    
826
ISPECS_MINMAX = _constants.ISPECS_MINMAX
827
ISPECS_MIN = _constants.ISPECS_MIN
828
ISPECS_MAX = _constants.ISPECS_MAX
829
ISPECS_STD = _constants.ISPECS_STD
830
IPOLICY_DTS = _constants.IPOLICY_DTS
831
IPOLICY_VCPU_RATIO = _constants.IPOLICY_VCPU_RATIO
832
IPOLICY_SPINDLE_RATIO = _constants.IPOLICY_SPINDLE_RATIO
833
ISPECS_MINMAX_KEYS = _constants.ISPECS_MINMAX_KEYS
834
IPOLICY_PARAMETERS = _constants.IPOLICY_PARAMETERS
835
IPOLICY_ALL_KEYS = _constants.IPOLICY_ALL_KEYS
836

    
837
ND_OOB_PROGRAM = _constants.ND_OOB_PROGRAM
838
ND_SPINDLE_COUNT = _constants.ND_SPINDLE_COUNT
839
ND_EXCLUSIVE_STORAGE = _constants.ND_EXCLUSIVE_STORAGE
840
ND_OVS = _constants.ND_OVS
841
ND_OVS_NAME = _constants.ND_OVS_NAME
842
ND_OVS_LINK = _constants.ND_OVS_LINK
843

    
844
NDS_PARAMETER_TYPES = _constants.NDS_PARAMETER_TYPES
845
NDS_PARAMETERS = _constants.NDS_PARAMETERS
846
NDS_PARAMETER_TITLES = _constants.NDS_PARAMETER_TITLES
847
DSS_PARAMETER_TYPES = {
848
  DS_DISK_TOTAL: VTYPE_INT,
849
  DS_DISK_RESERVED: VTYPE_INT,
850
  DS_DISK_OVERHEAD: VTYPE_INT,
851
  }
852

    
853
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
854
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
855

    
856
# Backend parameter names
857
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
858
BE_MAXMEM = "maxmem"
859
BE_MINMEM = "minmem"
860
BE_VCPUS = "vcpus"
861
BE_AUTO_BALANCE = "auto_balance"
862
BE_ALWAYS_FAILOVER = "always_failover"
863
BE_SPINDLE_USE = "spindle_use"
864

    
865
BES_PARAMETER_TYPES = {
866
  BE_MAXMEM: VTYPE_SIZE,
867
  BE_MINMEM: VTYPE_SIZE,
868
  BE_VCPUS: VTYPE_INT,
869
  BE_AUTO_BALANCE: VTYPE_BOOL,
870
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
871
  BE_SPINDLE_USE: VTYPE_INT,
872
  }
873

    
874
BES_PARAMETER_TITLES = {
875
  BE_AUTO_BALANCE: "Auto_balance",
876
  BE_MAXMEM: "ConfigMaxMem",
877
  BE_MINMEM: "ConfigMinMem",
878
  BE_VCPUS: "ConfigVCPUs",
879
  }
880

    
881
BES_PARAMETER_COMPAT = {
882
  BE_MEMORY: VTYPE_SIZE,
883
  }
884
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
885

    
886
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
887

    
888
# Logical Disks parameters
889
LDP_RESYNC_RATE = "resync-rate"
890
LDP_STRIPES = "stripes"
891
LDP_BARRIERS = "disabled-barriers"
892
LDP_NO_META_FLUSH = "disable-meta-flush"
893
LDP_DEFAULT_METAVG = "default-metavg"
894
LDP_DISK_CUSTOM = "disk-custom"
895
LDP_NET_CUSTOM = "net-custom"
896
LDP_PROTOCOL = "protocol"
897
LDP_DYNAMIC_RESYNC = "dynamic-resync"
898
LDP_PLAN_AHEAD = "c-plan-ahead"
899
LDP_FILL_TARGET = "c-fill-target"
900
LDP_DELAY_TARGET = "c-delay-target"
901
LDP_MAX_RATE = "c-max-rate"
902
LDP_MIN_RATE = "c-min-rate"
903
LDP_POOL = "pool"
904
LDP_ACCESS = "access"
905
DISK_LD_TYPES = {
906
  LDP_RESYNC_RATE: VTYPE_INT,
907
  LDP_STRIPES: VTYPE_INT,
908
  LDP_BARRIERS: VTYPE_STRING,
909
  LDP_NO_META_FLUSH: VTYPE_BOOL,
910
  LDP_DEFAULT_METAVG: VTYPE_STRING,
911
  LDP_DISK_CUSTOM: VTYPE_STRING,
912
  LDP_NET_CUSTOM: VTYPE_STRING,
913
  LDP_PROTOCOL: VTYPE_STRING,
914
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
915
  LDP_PLAN_AHEAD: VTYPE_INT,
916
  LDP_FILL_TARGET: VTYPE_INT,
917
  LDP_DELAY_TARGET: VTYPE_INT,
918
  LDP_MAX_RATE: VTYPE_INT,
919
  LDP_MIN_RATE: VTYPE_INT,
920
  LDP_POOL: VTYPE_STRING,
921
  LDP_ACCESS: VTYPE_STRING,
922
  }
923
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
924

    
925
# Disk template parameters (can be set/changed by the user via gnt-cluster and
926
# gnt-group)
927
DRBD_RESYNC_RATE = "resync-rate"
928
DRBD_DATA_STRIPES = "data-stripes"
929
DRBD_META_STRIPES = "meta-stripes"
930
DRBD_DISK_BARRIERS = "disk-barriers"
931
DRBD_META_BARRIERS = "meta-barriers"
932
DRBD_DEFAULT_METAVG = "metavg"
933
DRBD_DISK_CUSTOM = "disk-custom"
934
DRBD_NET_CUSTOM = "net-custom"
935
DRBD_PROTOCOL = "protocol"
936
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
937
DRBD_PLAN_AHEAD = "c-plan-ahead"
938
DRBD_FILL_TARGET = "c-fill-target"
939
DRBD_DELAY_TARGET = "c-delay-target"
940
DRBD_MAX_RATE = "c-max-rate"
941
DRBD_MIN_RATE = "c-min-rate"
942
LV_STRIPES = "stripes"
943
RBD_POOL = "pool"
944
RBD_ACCESS = "access"
945
DISK_DT_TYPES = {
946
  DRBD_RESYNC_RATE: VTYPE_INT,
947
  DRBD_DATA_STRIPES: VTYPE_INT,
948
  DRBD_META_STRIPES: VTYPE_INT,
949
  DRBD_DISK_BARRIERS: VTYPE_STRING,
950
  DRBD_META_BARRIERS: VTYPE_BOOL,
951
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
952
  DRBD_DISK_CUSTOM: VTYPE_STRING,
953
  DRBD_NET_CUSTOM: VTYPE_STRING,
954
  DRBD_PROTOCOL: VTYPE_STRING,
955
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
956
  DRBD_PLAN_AHEAD: VTYPE_INT,
957
  DRBD_FILL_TARGET: VTYPE_INT,
958
  DRBD_DELAY_TARGET: VTYPE_INT,
959
  DRBD_MAX_RATE: VTYPE_INT,
960
  DRBD_MIN_RATE: VTYPE_INT,
961
  LV_STRIPES: VTYPE_INT,
962
  RBD_POOL: VTYPE_STRING,
963
  RBD_ACCESS: VTYPE_STRING,
964
  }
965

    
966
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
967

    
968
# dynamic disk parameters
969
DDP_LOCAL_IP = "local-ip"
970
DDP_REMOTE_IP = "remote-ip"
971
DDP_PORT = "port"
972
DDP_LOCAL_MINOR = "local-minor"
973
DDP_REMOTE_MINOR = "remote-minor"
974

    
975
# OOB supported commands
976
OOB_POWER_ON = _constants.OOB_POWER_ON
977
OOB_POWER_OFF = _constants.OOB_POWER_OFF
978
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
979
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
980
OOB_HEALTH = _constants.OOB_HEALTH
981
OOB_COMMANDS = _constants.OOB_COMMANDS
982

    
983
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
984

    
985
OOB_TIMEOUT = _constants.OOB_TIMEOUT
986
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
987

    
988
OOB_STATUS_OK = _constants.OOB_STATUS_OK
989
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
990
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
991
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
992
OOB_STATUSES = _constants.OOB_STATUSES
993

    
994
# Instance Parameters Profile
995
PP_DEFAULT = "default"
996

    
997
# NIC_* constants are used inside the ganeti config
998
NIC_MODE = _constants.NIC_MODE
999
NIC_LINK = _constants.NIC_LINK
1000
NIC_VLAN = _constants.NIC_VLAN
1001

    
1002
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1003
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1004
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1005
NIC_IP_POOL = _constants.NIC_IP_POOL
1006
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1007

    
1008
RESERVE_ACTION = "reserve"
1009
RELEASE_ACTION = "release"
1010

    
1011
NICS_PARAMETER_TYPES = {
1012
  NIC_MODE: VTYPE_STRING,
1013
  NIC_LINK: VTYPE_STRING,
1014
  NIC_VLAN: VTYPE_MAYBE_STRING,
1015
  }
1016

    
1017
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1018

    
1019
# IDISK_* constants are used in opcodes, to create/change disks
1020
IDISK_SIZE = "size"
1021
IDISK_SPINDLES = "spindles"
1022
IDISK_MODE = "mode"
1023
IDISK_ADOPT = "adopt"
1024
IDISK_VG = "vg"
1025
IDISK_METAVG = "metavg"
1026
IDISK_PROVIDER = "provider"
1027
IDISK_NAME = "name"
1028
IDISK_PARAMS_TYPES = {
1029
  IDISK_SIZE: VTYPE_SIZE,
1030
  IDISK_SPINDLES: VTYPE_INT,
1031
  IDISK_MODE: VTYPE_STRING,
1032
  IDISK_ADOPT: VTYPE_STRING,
1033
  IDISK_VG: VTYPE_STRING,
1034
  IDISK_METAVG: VTYPE_STRING,
1035
  IDISK_PROVIDER: VTYPE_STRING,
1036
  IDISK_NAME: VTYPE_MAYBE_STRING,
1037
  }
1038
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1039

    
1040
# INIC_* constants are used in opcodes, to create/change nics
1041
INIC_MAC = "mac"
1042
INIC_IP = "ip"
1043
INIC_MODE = "mode"
1044
INIC_LINK = "link"
1045
INIC_NETWORK = "network"
1046
INIC_NAME = "name"
1047
INIC_VLAN = "vlan"
1048
INIC_BRIDGE = "bridge"
1049
INIC_PARAMS_TYPES = {
1050
  INIC_IP: VTYPE_MAYBE_STRING,
1051
  INIC_LINK: VTYPE_STRING,
1052
  INIC_MAC: VTYPE_STRING,
1053
  INIC_MODE: VTYPE_STRING,
1054
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1055
  INIC_NAME: VTYPE_MAYBE_STRING,
1056
  INIC_VLAN: VTYPE_MAYBE_STRING,
1057
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1058
  }
1059
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1060

    
1061
# Hypervisor constants
1062
HT_XEN_PVM = _constants.HT_XEN_PVM
1063
HT_FAKE = _constants.HT_FAKE
1064
HT_XEN_HVM = _constants.HT_XEN_HVM
1065
HT_KVM = _constants.HT_KVM
1066
HT_CHROOT = _constants.HT_CHROOT
1067
HT_LXC = _constants.HT_LXC
1068
HYPER_TYPES = _constants.HYPER_TYPES
1069
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1070

    
1071
VNC_BASE_PORT = 5900
1072
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1073

    
1074
# NIC types
1075
HT_NIC_RTL8139 = "rtl8139"
1076
HT_NIC_NE2K_PCI = "ne2k_pci"
1077
HT_NIC_NE2K_ISA = "ne2k_isa"
1078
HT_NIC_I82551 = "i82551"
1079
HT_NIC_I85557B = "i82557b"
1080
HT_NIC_I8259ER = "i82559er"
1081
HT_NIC_PCNET = "pcnet"
1082
HT_NIC_E1000 = "e1000"
1083
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1084

    
1085
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1086
  HT_NIC_RTL8139,
1087
  HT_NIC_NE2K_PCI,
1088
  HT_NIC_E1000,
1089
  HT_NIC_NE2K_ISA,
1090
  HT_NIC_PARAVIRTUAL,
1091
  ])
1092
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1093
  HT_NIC_RTL8139,
1094
  HT_NIC_NE2K_PCI,
1095
  HT_NIC_NE2K_ISA,
1096
  HT_NIC_I82551,
1097
  HT_NIC_I85557B,
1098
  HT_NIC_I8259ER,
1099
  HT_NIC_PCNET,
1100
  HT_NIC_E1000,
1101
  HT_NIC_PARAVIRTUAL,
1102
  ])
1103

    
1104
# Vif types
1105
# default vif type in xen-hvm
1106
HT_HVM_VIF_IOEMU = "ioemu"
1107
HT_HVM_VIF_VIF = "vif"
1108
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1109
  HT_HVM_VIF_IOEMU,
1110
  HT_HVM_VIF_VIF,
1111
  ])
1112

    
1113
# Disk types
1114
HT_DISK_IOEMU = "ioemu"
1115
HT_DISK_IDE = "ide"
1116
HT_DISK_SCSI = "scsi"
1117
HT_DISK_SD = "sd"
1118
HT_DISK_MTD = "mtd"
1119
HT_DISK_PFLASH = "pflash"
1120

    
1121
HT_CACHE_DEFAULT = "default"
1122
HT_CACHE_NONE = "none"
1123
HT_CACHE_WTHROUGH = "writethrough"
1124
HT_CACHE_WBACK = "writeback"
1125
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1126
  HT_CACHE_DEFAULT,
1127
  HT_CACHE_NONE,
1128
  HT_CACHE_WTHROUGH,
1129
  HT_CACHE_WBACK,
1130
  ])
1131

    
1132
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1133
  HT_DISK_PARAVIRTUAL,
1134
  HT_DISK_IOEMU,
1135
  ])
1136
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1137
  HT_DISK_PARAVIRTUAL,
1138
  HT_DISK_IDE,
1139
  HT_DISK_SCSI,
1140
  HT_DISK_SD,
1141
  HT_DISK_MTD,
1142
  HT_DISK_PFLASH,
1143
  ])
1144

    
1145
# Mouse types:
1146
HT_MOUSE_MOUSE = "mouse"
1147
HT_MOUSE_TABLET = "tablet"
1148

    
1149
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1150
  HT_MOUSE_MOUSE,
1151
  HT_MOUSE_TABLET,
1152
  ])
1153

    
1154
# Boot order
1155
HT_BO_FLOPPY = "floppy"
1156
HT_BO_CDROM = "cdrom"
1157
HT_BO_DISK = "disk"
1158
HT_BO_NETWORK = "network"
1159

    
1160
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1161
  HT_BO_FLOPPY,
1162
  HT_BO_CDROM,
1163
  HT_BO_DISK,
1164
  HT_BO_NETWORK,
1165
  ])
1166

    
1167
# SPICE lossless image compression options
1168
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1169
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1170
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1171
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1172
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1173
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1174

    
1175
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1176
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1177
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1178
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1179
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1180
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1181
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1182
  ])
1183

    
1184
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1185
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1186
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1187
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1188

    
1189
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1190
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1191
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1192
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1193
  ])
1194

    
1195
# SPICE video stream detection
1196
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1197
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1198
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1199

    
1200
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1201
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1202
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1203
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1204
  ])
1205

    
1206
# Security models
1207
HT_SM_NONE = "none"
1208
HT_SM_USER = "user"
1209
HT_SM_POOL = "pool"
1210

    
1211
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1212
  HT_SM_NONE,
1213
  HT_SM_USER,
1214
  HT_SM_POOL,
1215
  ])
1216

    
1217
# Kvm flag values
1218
HT_KVM_ENABLED = "enabled"
1219
HT_KVM_DISABLED = "disabled"
1220

    
1221
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1222

    
1223
# Migration type
1224
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1225
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1226
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1227

    
1228
# Cluster Verify steps
1229
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1230
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1231

    
1232
# Cluster Verify error classes
1233
CV_TCLUSTER = _constants.CV_TCLUSTER
1234
CV_TGROUP = _constants.CV_TGROUP
1235
CV_TNODE = _constants.CV_TNODE
1236
CV_TINSTANCE = _constants.CV_TINSTANCE
1237

    
1238
# Cluster Verify error codes and documentation
1239
CV_ECLUSTERCFG = _constants.CV_ECLUSTERCFG
1240
CV_ECLUSTERCERT = _constants.CV_ECLUSTERCERT
1241
CV_ECLUSTERFILECHECK = _constants.CV_ECLUSTERFILECHECK
1242
CV_ECLUSTERDANGLINGNODES = _constants.CV_ECLUSTERDANGLINGNODES
1243
CV_ECLUSTERDANGLINGINST = _constants.CV_ECLUSTERDANGLINGINST
1244
CV_EGROUPDIFFERENTPVSIZE = _constants.CV_EGROUPDIFFERENTPVSIZE
1245
CV_EINSTANCEBADNODE = _constants.CV_EINSTANCEBADNODE
1246
CV_EINSTANCEDOWN = _constants.CV_EINSTANCEDOWN
1247
CV_EINSTANCELAYOUT = _constants.CV_EINSTANCELAYOUT
1248
CV_EINSTANCEMISSINGDISK = _constants.CV_EINSTANCEMISSINGDISK
1249
CV_EINSTANCEFAULTYDISK = _constants.CV_EINSTANCEFAULTYDISK
1250
CV_EINSTANCEWRONGNODE = _constants.CV_EINSTANCEWRONGNODE
1251
CV_EINSTANCESPLITGROUPS = _constants.CV_EINSTANCESPLITGROUPS
1252
CV_EINSTANCEPOLICY = _constants.CV_EINSTANCEPOLICY
1253
CV_EINSTANCEUNSUITABLENODE = _constants.CV_EINSTANCEUNSUITABLENODE
1254
CV_EINSTANCEMISSINGCFGPARAMETER = _constants.CV_EINSTANCEMISSINGCFGPARAMETER
1255
CV_ENODEDRBD = _constants.CV_ENODEDRBD
1256
CV_ENODEDRBDVERSION = _constants.CV_ENODEDRBDVERSION
1257
CV_ENODEDRBDHELPER = _constants.CV_ENODEDRBDHELPER
1258
CV_ENODEFILECHECK = _constants.CV_ENODEFILECHECK
1259
CV_ENODEHOOKS = _constants.CV_ENODEHOOKS
1260
CV_ENODEHV = _constants.CV_ENODEHV
1261
CV_ENODELVM = _constants.CV_ENODELVM
1262
CV_ENODEN1 = _constants.CV_ENODEN1
1263
CV_ENODENET = _constants.CV_ENODENET
1264
CV_ENODEOS = _constants.CV_ENODEOS
1265
CV_ENODEORPHANINSTANCE = _constants.CV_ENODEORPHANINSTANCE
1266
CV_ENODEORPHANLV = _constants.CV_ENODEORPHANLV
1267
CV_ENODERPC = _constants.CV_ENODERPC
1268
CV_ENODESSH = _constants.CV_ENODESSH
1269
CV_ENODEVERSION = _constants.CV_ENODEVERSION
1270
CV_ENODESETUP = _constants.CV_ENODESETUP
1271
CV_ENODETIME = _constants.CV_ENODETIME
1272
CV_ENODEOOBPATH = _constants.CV_ENODEOOBPATH
1273
CV_ENODEUSERSCRIPTS = _constants.CV_ENODEUSERSCRIPTS
1274
CV_ENODEFILESTORAGEPATHS = _constants.CV_ENODEFILESTORAGEPATHS
1275
CV_ENODEFILESTORAGEPATHUNUSABLE = _constants.CV_ENODEFILESTORAGEPATHUNUSABLE
1276
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1277
  _constants.CV_ENODESHAREDFILESTORAGEPATHUNUSABLE
1278

    
1279
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1280
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1281

    
1282
# Node verify constants
1283
NV_BRIDGES = "bridges"
1284
NV_DRBDHELPER = "drbd-helper"
1285
NV_DRBDVERSION = "drbd-version"
1286
NV_DRBDLIST = "drbd-list"
1287
NV_EXCLUSIVEPVS = "exclusive-pvs"
1288
NV_FILELIST = "filelist"
1289
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1290
NV_FILE_STORAGE_PATH = "file-storage-path"
1291
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1292
NV_HVINFO = "hvinfo"
1293
NV_HVPARAMS = "hvparms"
1294
NV_HYPERVISOR = "hypervisor"
1295
NV_INSTANCELIST = "instancelist"
1296
NV_LVLIST = "lvlist"
1297
NV_MASTERIP = "master-ip"
1298
NV_NODELIST = "nodelist"
1299
NV_NODENETTEST = "node-net-test"
1300
NV_NODESETUP = "nodesetup"
1301
NV_OOB_PATHS = "oob-paths"
1302
NV_OSLIST = "oslist"
1303
NV_PVLIST = "pvlist"
1304
NV_TIME = "time"
1305
NV_USERSCRIPTS = "user-scripts"
1306
NV_VERSION = "version"
1307
NV_VGLIST = "vglist"
1308
NV_VMNODES = "vmnodes"
1309

    
1310
# Instance status
1311
INSTST_RUNNING = _constants.INSTST_RUNNING
1312
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1313
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1314
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1315
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1316
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1317
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1318
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1319
INSTST_ALL = _constants.INSTST_ALL
1320

    
1321
# Admin states
1322
ADMINST_UP = _constants.ADMINST_UP
1323
ADMINST_DOWN = _constants.ADMINST_DOWN
1324
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1325
ADMINST_ALL = _constants.ADMINST_ALL
1326

    
1327
# Node roles
1328
NR_REGULAR = _constants.NR_REGULAR
1329
NR_MASTER = _constants.NR_MASTER
1330
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1331
NR_DRAINED = _constants.NR_DRAINED
1332
NR_OFFLINE = _constants.NR_OFFLINE
1333
NR_ALL = _constants.NR_ALL
1334

    
1335
# SSL certificate check constants (in days)
1336
SSL_CERT_EXPIRATION_WARN = 30
1337
SSL_CERT_EXPIRATION_ERROR = 7
1338

    
1339
# Allocator framework constants
1340
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1341
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1342
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1343
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1344

    
1345
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1346
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1347
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1348
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1349
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1350
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1351

    
1352
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1353
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1354

    
1355
# Node evacuation
1356
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1357
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1358
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1359
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1360

    
1361
# Job queue
1362
JOB_QUEUE_VERSION = 1
1363
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1364
JOB_QUEUE_FILES_PERMS = 0640
1365

    
1366
JOB_ID_TEMPLATE = r"\d+"
1367
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1368

    
1369
# unchanged job return
1370
JOB_NOTCHANGED = "nochange"
1371

    
1372
# Job status
1373
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1374
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1375
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1376
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1377
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1378
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1379
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1380
JOBS_PENDING = _constants.JOBS_PENDING
1381
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1382
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1383

    
1384
# OpCode status
1385
# not yet finalized
1386
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1387
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1388
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1389
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1390
# finalized
1391
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1392
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1393
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1394
OPS_FINALIZED = _constants.OPS_FINALIZED
1395

    
1396
# OpCode priority
1397
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1398
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1399
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1400
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1401
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1402
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1403
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1404

    
1405
# Lock recalculate mode
1406
LOCKS_REPLACE = "replace"
1407
LOCKS_APPEND = "append"
1408

    
1409
# Lock timeout (sum) before we should go into blocking acquire (still
1410
# can be reset by priority change); computed as max time (10 hours)
1411
# before we should actually go into blocking acquire given that we
1412
# start from default priority level; in seconds
1413
# TODO
1414
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1415
LOCK_ATTEMPTS_MAXWAIT = 15.0
1416
LOCK_ATTEMPTS_MINWAIT = 1.0
1417

    
1418
# Execution log types
1419
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1420
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1421
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1422

    
1423
# /etc/hosts modification
1424
ETC_HOSTS_ADD = "add"
1425
ETC_HOSTS_REMOVE = "remove"
1426

    
1427
# Job queue test
1428
JQT_MSGPREFIX = "TESTMSG="
1429
JQT_EXPANDNAMES = "expandnames"
1430
JQT_EXEC = "exec"
1431
JQT_LOGMSG = "logmsg"
1432
JQT_STARTMSG = "startmsg"
1433
JQT_ALL = compat.UniqueFrozenset([
1434
  JQT_EXPANDNAMES,
1435
  JQT_EXEC,
1436
  JQT_LOGMSG,
1437
  JQT_STARTMSG,
1438
  ])
1439

    
1440
# Query resources
1441
QR_CLUSTER = "cluster"
1442
QR_INSTANCE = "instance"
1443
QR_NODE = "node"
1444
QR_LOCK = "lock"
1445
QR_GROUP = "group"
1446
QR_OS = "os"
1447
QR_JOB = "job"
1448
QR_EXPORT = "export"
1449
QR_NETWORK = "network"
1450
QR_EXTSTORAGE = "extstorage"
1451

    
1452
#: List of resources which can be queried using L{opcodes.OpQuery}
1453
QR_VIA_OP = compat.UniqueFrozenset([
1454
  QR_CLUSTER,
1455
  QR_INSTANCE,
1456
  QR_NODE,
1457
  QR_GROUP,
1458
  QR_OS,
1459
  QR_EXPORT,
1460
  QR_NETWORK,
1461
  QR_EXTSTORAGE,
1462
  ])
1463

    
1464
#: List of resources which can be queried using Local UniX Interface
1465
QR_VIA_LUXI = QR_VIA_OP.union([
1466
  QR_LOCK,
1467
  QR_JOB,
1468
  ])
1469

    
1470
#: List of resources which can be queried using RAPI
1471
QR_VIA_RAPI = QR_VIA_LUXI
1472

    
1473
# Query field types
1474
QFT_UNKNOWN = "unknown"
1475
QFT_TEXT = "text"
1476
QFT_BOOL = "bool"
1477
QFT_NUMBER = "number"
1478
QFT_UNIT = "unit"
1479
QFT_TIMESTAMP = "timestamp"
1480
QFT_OTHER = "other"
1481

    
1482
#: All query field types
1483
QFT_ALL = compat.UniqueFrozenset([
1484
  QFT_UNKNOWN,
1485
  QFT_TEXT,
1486
  QFT_BOOL,
1487
  QFT_NUMBER,
1488
  QFT_UNIT,
1489
  QFT_TIMESTAMP,
1490
  QFT_OTHER,
1491
  ])
1492

    
1493
# Query result field status (don't change or reuse values as they're used by
1494
# clients)
1495
#: Normal field status
1496
RS_NORMAL = 0
1497
#: Unknown field
1498
RS_UNKNOWN = 1
1499
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1500
RS_NODATA = 2
1501
#: Value unavailable/unsupported for item; if this field is supported
1502
#: but we cannot get the data for the moment, RS_NODATA or
1503
#: RS_OFFLINE should be used
1504
RS_UNAVAIL = 3
1505
#: Resource marked offline
1506
RS_OFFLINE = 4
1507

    
1508
RS_ALL = compat.UniqueFrozenset([
1509
  RS_NORMAL,
1510
  RS_UNKNOWN,
1511
  RS_NODATA,
1512
  RS_UNAVAIL,
1513
  RS_OFFLINE,
1514
  ])
1515

    
1516
#: Dictionary with special field cases and their verbose/terse formatting
1517
RSS_DESCRIPTION = {
1518
  RS_UNKNOWN: ("(unknown)", "??"),
1519
  RS_NODATA: ("(nodata)", "?"),
1520
  RS_OFFLINE: ("(offline)", "*"),
1521
  RS_UNAVAIL: ("(unavail)", "-"),
1522
  }
1523

    
1524
# max dynamic devices
1525
MAX_NICS = 8
1526
MAX_DISKS = 16
1527

    
1528
# SSCONF file prefix
1529
SSCONF_FILEPREFIX = "ssconf_"
1530
# SSCONF keys
1531
SS_CLUSTER_NAME = "cluster_name"
1532
SS_CLUSTER_TAGS = "cluster_tags"
1533
SS_FILE_STORAGE_DIR = "file_storage_dir"
1534
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
1535
SS_MASTER_CANDIDATES = "master_candidates"
1536
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
1537
SS_MASTER_IP = "master_ip"
1538
SS_MASTER_NETDEV = "master_netdev"
1539
SS_MASTER_NETMASK = "master_netmask"
1540
SS_MASTER_NODE = "master_node"
1541
SS_NODE_LIST = "node_list"
1542
SS_NODE_PRIMARY_IPS = "node_primary_ips"
1543
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
1544
SS_OFFLINE_NODES = "offline_nodes"
1545
SS_ONLINE_NODES = "online_nodes"
1546
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
1547
SS_INSTANCE_LIST = "instance_list"
1548
SS_RELEASE_VERSION = "release_version"
1549
SS_HYPERVISOR_LIST = "hypervisor_list"
1550
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
1551
SS_UID_POOL = "uid_pool"
1552
SS_NODEGROUPS = "nodegroups"
1553
SS_NETWORKS = "networks"
1554

    
1555
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1556
SS_HVPARAMS_PREF = "hvparams_"
1557

    
1558
# Hvparams keys:
1559
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1560
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1561
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1562
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1563
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1564
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1565

    
1566
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1567
  SS_HVPARAMS_XEN_PVM,
1568
  SS_HVPARAMS_XEN_FAKE,
1569
  SS_HVPARAMS_XEN_HVM,
1570
  SS_HVPARAMS_XEN_KVM,
1571
  SS_HVPARAMS_XEN_CHROOT,
1572
  SS_HVPARAMS_XEN_LXC,
1573
  ])
1574

    
1575
SS_FILE_PERMS = 0444
1576

    
1577
# cluster wide default parameters
1578
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1579

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

    
1698
HVC_GLOBALS = compat.UniqueFrozenset([
1699
  HV_MIGRATION_PORT,
1700
  HV_MIGRATION_BANDWIDTH,
1701
  HV_MIGRATION_MODE,
1702
  HV_XEN_CMD,
1703
  ])
1704

    
1705
BEC_DEFAULTS = {
1706
  BE_MINMEM: 128,
1707
  BE_MAXMEM: 128,
1708
  BE_VCPUS: 1,
1709
  BE_AUTO_BALANCE: True,
1710
  BE_ALWAYS_FAILOVER: False,
1711
  BE_SPINDLE_USE: 1,
1712
  }
1713

    
1714
NDC_DEFAULTS = {
1715
  ND_OOB_PROGRAM: "",
1716
  ND_SPINDLE_COUNT: 1,
1717
  ND_EXCLUSIVE_STORAGE: False,
1718
  ND_OVS: False,
1719
  ND_OVS_NAME: DEFAULT_OVS,
1720
  ND_OVS_LINK: ""
1721
  }
1722

    
1723
NDC_GLOBALS = compat.UniqueFrozenset([
1724
  ND_EXCLUSIVE_STORAGE,
1725
  ])
1726

    
1727
DISK_LD_DEFAULTS = {
1728
  DT_DRBD8: {
1729
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1730
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1731
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1732
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1733
    LDP_DISK_CUSTOM: "",
1734
    LDP_NET_CUSTOM: "",
1735
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1736
    LDP_DYNAMIC_RESYNC: False,
1737

    
1738
    # The default values for the DRBD dynamic resync speed algorithm
1739
    # are taken from the drbsetup 8.3.11 man page, except for
1740
    # c-plan-ahead (that we don't need to set to 0, because we have a
1741
    # separate option to enable it) and for c-max-rate, that we cap to
1742
    # the default value for the static resync rate.
1743
    LDP_PLAN_AHEAD: 20, # ds
1744
    LDP_FILL_TARGET: 0, # sectors
1745
    LDP_DELAY_TARGET: 1, # ds
1746
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
1747
    LDP_MIN_RATE: 4 * 1024, # KiB/s
1748
    },
1749
  DT_PLAIN: {
1750
    LDP_STRIPES: _constants.LVM_STRIPECOUNT
1751
    },
1752
  DT_FILE: {},
1753
  DT_SHARED_FILE: {},
1754
  DT_BLOCK: {},
1755
  DT_RBD: {
1756
    LDP_POOL: "rbd",
1757
    LDP_ACCESS: DISK_KERNELSPACE,
1758
    },
1759
  DT_EXT: {},
1760
  }
1761

    
1762
# readability shortcuts
1763
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1764
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1765

    
1766
DISK_DT_DEFAULTS = {
1767
  DT_PLAIN: {
1768
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1769
    },
1770
  DT_DRBD8: {
1771
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1772
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1773
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1774
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1775
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1776
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1777
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1778
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1779
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1780
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1781
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1782
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1783
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1784
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1785
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1786
    },
1787
  DT_DISKLESS: {},
1788
  DT_FILE: {},
1789
  DT_SHARED_FILE: {},
1790
  DT_BLOCK: {},
1791
  DT_RBD: {
1792
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
1793
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
1794
    },
1795
  DT_EXT: {},
1796
  }
1797

    
1798
# we don't want to export the shortcuts
1799
del _LV_DEFAULTS, _DRBD_DEFAULTS
1800

    
1801
NICC_DEFAULTS = {
1802
  NIC_MODE: NIC_MODE_BRIDGED,
1803
  NIC_LINK: DEFAULT_BRIDGE,
1804
  NIC_VLAN: VALUE_HS_NOTHING,
1805
  }
1806

    
1807
# All of the following values are quite arbitrarily - there are no
1808
# "good" defaults, these must be customised per-site
1809
ISPECS_MINMAX_DEFAULTS = {
1810
  ISPECS_MIN: {
1811
    ISPEC_MEM_SIZE: 128,
1812
    ISPEC_CPU_COUNT: 1,
1813
    ISPEC_DISK_COUNT: 1,
1814
    ISPEC_DISK_SIZE: 1024,
1815
    ISPEC_NIC_COUNT: 1,
1816
    ISPEC_SPINDLE_USE: 1,
1817
    },
1818
  ISPECS_MAX: {
1819
    ISPEC_MEM_SIZE: 32768,
1820
    ISPEC_CPU_COUNT: 8,
1821
    ISPEC_DISK_COUNT: MAX_DISKS,
1822
    ISPEC_DISK_SIZE: 1024 * 1024,
1823
    ISPEC_NIC_COUNT: MAX_NICS,
1824
    ISPEC_SPINDLE_USE: 12,
1825
    },
1826
  }
1827
IPOLICY_DEFAULTS = {
1828
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
1829
  ISPECS_STD: {
1830
    ISPEC_MEM_SIZE: 128,
1831
    ISPEC_CPU_COUNT: 1,
1832
    ISPEC_DISK_COUNT: 1,
1833
    ISPEC_DISK_SIZE: 1024,
1834
    ISPEC_NIC_COUNT: 1,
1835
    ISPEC_SPINDLE_USE: 1,
1836
    },
1837
  IPOLICY_DTS: list(DISK_TEMPLATES),
1838
  IPOLICY_VCPU_RATIO: 4.0,
1839
  IPOLICY_SPINDLE_RATIO: 32.0,
1840
  }
1841

    
1842
MASTER_POOL_SIZE_DEFAULT = 10
1843

    
1844
# Exclusive storage:
1845
# Error margin used to compare physical disks
1846
PART_MARGIN = .01
1847
# Space reserved when creating instance disks
1848
PART_RESERVED = .02
1849

    
1850
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
1851

    
1852
CONFD_REQ_PING = _constants.CONFD_REQ_PING
1853
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
1854
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
1855
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
1856
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
1857
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
1858
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
1859
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
1860
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
1861
CONFD_REQS = _constants.CONFD_REQS
1862

    
1863
# Confd request query fields. These are used to narrow down queries.
1864
# These must be strings rather than integers, because json-encoding
1865
# converts them to strings anyway, as they're used as dict-keys.
1866
CONFD_REQQ_LINK = _constants.CONFD_REQQ_LINK
1867
CONFD_REQQ_IP = _constants.CONFD_REQQ_IP
1868
CONFD_REQQ_IPLIST = _constants.CONFD_REQQ_IPLIST
1869
CONFD_REQQ_FIELDS = _constants.CONFD_REQQ_FIELDS
1870

    
1871
# FIXME: perhaps update code that uses these constants to deal with
1872
# integers instead of strings
1873
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
1874
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
1875
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
1876

    
1877
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
1878
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
1879
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
1880
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
1881

    
1882
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
1883
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
1884
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
1885
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
1886
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
1887

    
1888
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
1889
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
1890
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
1891

    
1892
# Each request is "salted" by the current timestamp.
1893
# This constants decides how many seconds of skew to accept.
1894
# TODO: make this a default and allow the value to be more configurable
1895
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
1896

    
1897
# When we haven't reloaded the config for more than this amount of
1898
# seconds, we force a test to see if inotify is betraying us. Using a
1899
# prime number to ensure we get less chance of 'same wakeup' with
1900
# other processes.
1901
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
1902

    
1903
# If we receive more than one update in this amount of microseconds,
1904
# we move to polling every RATELIMIT seconds, rather than relying on
1905
# inotify, to be able to serve more requests.
1906
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
1907

    
1908
# Magic number prepended to all confd queries.
1909
# This allows us to distinguish different types of confd protocols and handle
1910
# them. For example by changing this we can move the whole payload to be
1911
# compressed, or move away from json.
1912
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
1913

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

    
1919
# Timeout in seconds to expire pending query request in the confd client
1920
# library. We don't actually expect any answer more than 10 seconds after we
1921
# sent a request.
1922
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
1923

    
1924
# Maximum UDP datagram size.
1925
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
1926
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
1927
#   (assuming we can't use jumbo frames)
1928
# We just set this to 60K, which should be enough
1929
MAX_UDP_DATA_SIZE = 61440
1930

    
1931
# User-id pool minimum/maximum acceptable user-ids.
1932
UIDPOOL_UID_MIN = 0
1933
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
1934

    
1935
# Name or path of the pgrep command
1936
PGREP = "pgrep"
1937

    
1938
# Name of the node group that gets created at cluster init or upgrade
1939
INITIAL_NODE_GROUP_NAME = "default"
1940

    
1941
# Possible values for NodeGroup.alloc_policy
1942
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
1943
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
1944
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
1945
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
1946

    
1947
# Temporary external/shared storage parameters
1948
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
1949

    
1950
# qemu-img path, required for ovfconverter
1951
QEMUIMG_PATH = _constants.QEMUIMG_PATH
1952

    
1953
# Whether htools was enabled at compilation time
1954
HTOOLS = _constants.HTOOLS
1955
# The hail iallocator
1956
IALLOC_HAIL = "hail"
1957

    
1958
# Fake opcodes for functions that have hooks attached to them via
1959
# backend.RunLocalHooks
1960
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
1961
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
1962

    
1963
# SSH key types
1964
SSHK_RSA = "rsa"
1965
SSHK_DSA = "dsa"
1966
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
1967

    
1968
# SSH authorized key types
1969
SSHAK_RSA = "ssh-rsa"
1970
SSHAK_DSS = "ssh-dss"
1971
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
1972

    
1973
# SSH setup
1974
SSHS_CLUSTER_NAME = "cluster_name"
1975
SSHS_SSH_HOST_KEY = "ssh_host_key"
1976
SSHS_SSH_ROOT_KEY = "ssh_root_key"
1977
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
1978

    
1979
#: Key files for SSH daemon
1980
SSH_DAEMON_KEYFILES = {
1981
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
1982
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
1983
  }
1984

    
1985
# Node daemon setup
1986
NDS_CLUSTER_NAME = "cluster_name"
1987
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
1988
NDS_SSCONF = "ssconf"
1989
NDS_START_NODE_DAEMON = "start_node_daemon"
1990

    
1991
# Path generating random UUID
1992
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
1993

    
1994
# Regex string for verifying a UUID
1995
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
1996

    
1997
# Auto-repair tag prefixes
1998
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
1999
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2000
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2001
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2002
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2003

    
2004
# Auto-repair levels
2005
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2006
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2007
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2008
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2009
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2010

    
2011
# Auto-repair results
2012
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2013
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2014
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2015
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2016

    
2017
# The version identifier for builtin data collectors
2018
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2019

    
2020
# The reason trail opcode parameter name
2021
OPCODE_REASON = _constants.OPCODE_REASON
2022

    
2023
# The source reasons for the execution of an OpCode
2024
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2025
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2026
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2027
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2028
OPCODE_REASON_SRC_USER = "gnt:user"
2029

    
2030
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2031
  OPCODE_REASON_SRC_CLIENT,
2032
  OPCODE_REASON_SRC_NODED,
2033
  OPCODE_REASON_SRC_OPCODE,
2034
  OPCODE_REASON_SRC_RLIB2,
2035
  OPCODE_REASON_SRC_USER,
2036
  ])
2037

    
2038
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2039

    
2040
# CPU load collector variables
2041
STAT_FILE = _constants.STAT_FILE
2042
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2043
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2044

    
2045
# Mond's variable for periodical data collection
2046
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2047

    
2048
# MonD's latest API version
2049
MOND_LATEST_API_VERSION = 1
2050

    
2051
# Timeouts for upgrades
2052

    
2053
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2054
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2055

    
2056
# Do not re-export imported modules
2057
del re, _vcsversion, _constants, socket, pathutils, compat
2058

    
2059

    
2060
ALLOCATABLE_KEY = "allocatable"
2061
FAILED_KEY = "failed"