Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 55f0626b

History | View | Annotate | Download (63.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 = 10
36
OS_API_V15 = 15
37
OS_API_V20 = 20
38
OS_API_VERSIONS = compat.UniqueFrozenset([
39
  OS_API_V10,
40
  OS_API_V15,
41
  OS_API_V20,
42
  ])
43
VCS_VERSION = _vcsversion.VCS_VERSION
44
EXPORT_VERSION = 0
45
RAPI_VERSION = 2
46

    
47
VERSION_MAJOR = _constants.VERSION_MAJOR
48
VERSION_MINOR = _constants.VERSION_MINOR
49
VERSION_REVISION = _constants.VERSION_REVISION
50

    
51
CONFIG_MAJOR = _constants.CONFIG_MAJOR
52
CONFIG_MINOR = _constants.CONFIG_MINOR
53
CONFIG_REVISION = _constants.CONFIG_REVISION
54
CONFIG_VERSION = _constants.CONFIG_VERSION
55

    
56
#: RPC protocol version
57
PROTOCOL_VERSION = _constants.PROTOCOL_VERSION
58

    
59
# user separation
60
DAEMONS_GROUP = _constants.DAEMONS_GROUP
61
ADMIN_GROUP = _constants.ADMIN_GROUP
62
MASTERD_USER = _constants.MASTERD_USER
63
MASTERD_GROUP = _constants.MASTERD_GROUP
64
RAPI_USER = _constants.RAPI_USER
65
RAPI_GROUP = _constants.RAPI_GROUP
66
CONFD_USER = _constants.CONFD_USER
67
CONFD_GROUP = _constants.CONFD_GROUP
68
LUXID_USER = _constants.LUXID_USER
69
LUXID_GROUP = _constants.LUXID_GROUP
70
NODED_USER = _constants.NODED_USER
71
NODED_GROUP = _constants.NODED_GROUP
72
MOND_USER = _constants.MOND_USER
73
MOND_GROUP = _constants.MOND_GROUP
74
SSH_LOGIN_USER = _constants.SSH_LOGIN_USER
75
SSH_CONSOLE_USER = _constants.SSH_CONSOLE_USER
76

    
77
# cpu pinning separators and constants
78
CPU_PINNING_SEP = ":"
79
CPU_PINNING_ALL = "all"
80
# internal representation of "all"
81
CPU_PINNING_ALL_VAL = -1
82
# one "all" entry in a CPU list means CPU pinning is off
83
CPU_PINNING_OFF = [CPU_PINNING_ALL_VAL]
84

    
85
# A Xen-specific implementation detail - there is no way to actually say
86
# "use any cpu for pinning" in a Xen configuration file, as opposed to the
87
# command line, where you can say "xm vcpu-pin <domain> <vcpu> all".
88
# The workaround used in Xen is "0-63" (see source code function
89
# xm_vcpu_pin in <xen-source>/tools/python/xen/xm/main.py).
90
# To support future changes, the following constant is treated as a
91
# blackbox string that simply means use-any-cpu-for-pinning-under-xen.
92
CPU_PINNING_ALL_XEN = "0-63"
93

    
94
# A KVM-specific implementation detail - the following value is used
95
# to set CPU affinity to all processors (#0 through #31), per taskset
96
# man page.
97
# FIXME: This only works for machines with up to 32 CPU cores
98
CPU_PINNING_ALL_KVM = 0xFFFFFFFF
99

    
100
# Wipe
101
DD_CMD = "dd"
102
MAX_WIPE_CHUNK = 1024 # 1GB
103
MIN_WIPE_CHUNK_PERCENT = 10
104

    
105
RUN_DIRS_MODE = 0775
106
SECURE_DIR_MODE = 0700
107
SECURE_FILE_MODE = 0600
108
ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/"
109
ENABLE_CONFD = _constants.ENABLE_CONFD
110
ENABLE_MOND = _constants.ENABLE_MOND
111
ENABLE_SPLIT_QUERY = _constants.ENABLE_SPLIT_QUERY
112
ENABLE_RESTRICTED_COMMANDS = _constants.ENABLE_RESTRICTED_COMMANDS
113

    
114
# SSH constants
115
SSH = _constants.SSH
116
SCP = _constants.SCP
117

    
118
NODED = _constants.NODED
119
CONFD = _constants.CONFD
120
LUXID = _constants.LUXID
121
RAPI = _constants.RAPI
122
MASTERD = _constants.MASTERD
123
MOND = _constants.MOND
124

    
125
DAEMONS = _constants.DAEMONS
126

    
127
DAEMONS_PORTS = _constants.DAEMONS_PORTS
128

    
129
DEFAULT_NODED_PORT = _constants.DEFAULT_NODED_PORT
130
DEFAULT_CONFD_PORT = _constants.DEFAULT_CONFD_PORT
131
DEFAULT_MOND_PORT = _constants.DEFAULT_MOND_PORT
132
DEFAULT_RAPI_PORT = _constants.DEFAULT_RAPI_PORT
133

    
134
FIRST_DRBD_PORT = 11000
135
LAST_DRBD_PORT = 14999
136

    
137
DAEMONS_LOGBASE = _constants.DAEMONS_LOGBASE
138

    
139
DAEMONS_LOGFILES = \
140
    dict((daemon, pathutils.GetLogFilename(DAEMONS_LOGBASE[daemon]))
141
         for daemon in DAEMONS_LOGBASE)
142

    
143
# Some daemons might require more than one logfile.
144
# Specifically, right now only the Haskell http library "snap", used by the
145
# monitoring daemon, requires multiple log files.
146

    
147
# These are the only valid reasons for having an extra logfile
148
EXTRA_LOGREASON_ACCESS = "access"
149
EXTRA_LOGREASON_ERROR = "error"
150

    
151
VALID_EXTRA_LOGREASONS = compat.UniqueFrozenset([
152
  EXTRA_LOGREASON_ACCESS,
153
  EXTRA_LOGREASON_ERROR,
154
  ])
155

    
156
# These are the extra logfiles, grouped by daemon
157
DAEMONS_EXTRA_LOGBASE = {
158
  MOND: {
159
    EXTRA_LOGREASON_ACCESS: _constants.EXTRA_LOGREASON_ACCESS,
160
    EXTRA_LOGREASON_ERROR: _constants.EXTRA_LOGREASON_ERROR,
161
    }
162
  }
163

    
164
DAEMONS_EXTRA_LOGFILES = \
165
  dict((daemon, dict((extra,
166
       pathutils.GetLogFilename(DAEMONS_EXTRA_LOGBASE[daemon][extra]))
167
       for extra in DAEMONS_EXTRA_LOGBASE[daemon]))
168
         for daemon in DAEMONS_EXTRA_LOGBASE)
169

    
170
DEV_CONSOLE = _constants.DEV_CONSOLE
171

    
172
PROC_MOUNTS = "/proc/mounts"
173

    
174
# Local UniX Interface related constants
175
LUXI_EOM = chr(3)
176
LUXI_VERSION = CONFIG_VERSION
177
#: Environment variable for the luxi override socket
178
LUXI_OVERRIDE = "FORCE_LUXI_SOCKET"
179
LUXI_OVERRIDE_MASTER = "master"
180
LUXI_OVERRIDE_QUERY = "query"
181

    
182
# one of "no", "yes", "only"
183
SYSLOG_USAGE = _constants.SYSLOG_USAGE
184
SYSLOG_NO = _constants.SYSLOG_NO
185
SYSLOG_YES = _constants.SYSLOG_YES
186
SYSLOG_ONLY = _constants.SYSLOG_ONLY
187
SYSLOG_SOCKET = _constants.SYSLOG_SOCKET
188

    
189
EXPORT_CONF_FILE = "config.ini"
190

    
191
XEN_BOOTLOADER = _constants.XEN_BOOTLOADER
192
XEN_KERNEL = _constants.XEN_KERNEL
193
XEN_INITRD = _constants.XEN_INITRD
194
XEN_CMD_XM = _constants.XEN_CMD_XM
195
XEN_CMD_XL = _constants.XEN_CMD_XL
196
KNOWN_XEN_COMMANDS = _constants.KNOWN_XEN_COMMANDS
197

    
198
# When the Xen toolstack used is "xl", live migration requires the source host
199
# to connect to the target host via ssh (xl runs this command). We need to pass
200
# the command xl runs some extra info so that it can use Ganeti's key
201
# verification and not fail. Note that this string is incomplete: it must be
202
# filled with the cluster name before being used.
203
XL_SSH_CMD = ("ssh -l %s -oGlobalKnownHostsFile=%s"
204
              " -oUserKnownHostsFile=/dev/null"
205
              " -oCheckHostIp=no -oStrictHostKeyChecking=yes"
206
              " -oHostKeyAlias=%%s") % (SSH_LOGIN_USER,
207
                                        pathutils.SSH_KNOWN_HOSTS_FILE)
208

    
209
KVM_PATH = _constants.KVM_PATH
210
KVM_KERNEL = _constants.KVM_KERNEL
211
SOCAT_PATH = _constants.SOCAT_PATH
212
SOCAT_USE_ESCAPE = _constants.SOCAT_USE_ESCAPE
213
SOCAT_USE_COMPRESS = _constants.SOCAT_USE_COMPRESS
214
SOCAT_ESCAPE_CODE = "0x1d"
215

    
216
#: Console as SSH command
217
CONS_SSH = "ssh"
218

    
219
#: Console as VNC server
220
CONS_VNC = "vnc"
221

    
222
#: Console as SPICE server
223
CONS_SPICE = "spice"
224

    
225
#: Display a message for console access
226
CONS_MESSAGE = "msg"
227

    
228
#: All console types
229
CONS_ALL = compat.UniqueFrozenset([
230
  CONS_SSH,
231
  CONS_VNC,
232
  CONS_SPICE,
233
  CONS_MESSAGE,
234
  ])
235

    
236
# For RSA keys more bits are better, but they also make operations more
237
# expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year
238
# 2010 on.
239
RSA_KEY_BITS = 2048
240

    
241
# Ciphers allowed for SSL connections. For the format, see ciphers(1). A better
242
# way to disable ciphers would be to use the exclamation mark (!), but socat
243
# versions below 1.5 can't parse exclamation marks in options properly. When
244
# modifying the ciphers, ensure not to accidentially add something after it's
245
# been removed. Use the "openssl" utility to check the allowed ciphers, e.g.
246
# "openssl ciphers -v HIGH:-DES".
247
OPENSSL_CIPHERS = "HIGH:-DES:-3DES:-EXPORT:-ADH"
248

    
249
# Digest used to sign certificates ("openssl x509" uses SHA1 by default)
250
X509_CERT_SIGN_DIGEST = "SHA1"
251

    
252
# Default validity of certificates in days
253
X509_CERT_DEFAULT_VALIDITY = 365 * 5
254

    
255
# commonName (CN) used in certificates
256
X509_CERT_CN = "ganeti.example.com"
257

    
258
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
259

    
260
# Import/export daemon mode
261
IEM_IMPORT = "import"
262
IEM_EXPORT = "export"
263

    
264
# Import/export transport compression
265
IEC_NONE = "none"
266
IEC_GZIP = "gzip"
267
IEC_ALL = compat.UniqueFrozenset([
268
  IEC_NONE,
269
  IEC_GZIP,
270
  ])
271

    
272
IE_CUSTOM_SIZE = "fd"
273

    
274
IE_MAGIC_RE = re.compile(r"^[-_.a-zA-Z0-9]{5,100}$")
275

    
276
# Import/export I/O
277
# Direct file I/O, equivalent to a shell's I/O redirection using '<' or '>'
278
IEIO_FILE = "file"
279
# Raw block device I/O using "dd"
280
IEIO_RAW_DISK = "raw"
281
# OS definition import/export script
282
IEIO_SCRIPT = "script"
283

    
284
VALUE_DEFAULT = "default"
285
VALUE_AUTO = "auto"
286
VALUE_GENERATE = "generate"
287
VALUE_NONE = "none"
288
VALUE_TRUE = "true"
289
VALUE_FALSE = "false"
290
VALUE_HS_NOTHING = {"Nothing": None}
291

    
292

    
293
# External script validation mask
294
EXT_PLUGIN_MASK = re.compile("^[a-zA-Z0-9_-]+$")
295

    
296
# hooks-related constants
297
HOOKS_PHASE_PRE = "pre"
298
HOOKS_PHASE_POST = "post"
299
HOOKS_NAME_CFGUPDATE = "config-update"
300
HOOKS_NAME_WATCHER = "watcher"
301
HOOKS_VERSION = 2
302
HOOKS_PATH = "/sbin:/bin:/usr/sbin:/usr/bin"
303

    
304
# hooks subject type (what object type does the LU deal with)
305
HTYPE_CLUSTER = "CLUSTER"
306
HTYPE_NODE = "NODE"
307
HTYPE_GROUP = "GROUP"
308
HTYPE_INSTANCE = "INSTANCE"
309
HTYPE_NETWORK = "NETWORK"
310

    
311
HKR_SKIP = 0
312
HKR_FAIL = 1
313
HKR_SUCCESS = 2
314

    
315
# Storage types
316
ST_BLOCK = _constants.ST_BLOCK
317
ST_DISKLESS = _constants.ST_DISKLESS
318
ST_EXT = _constants.ST_EXT
319
ST_FILE = _constants.ST_FILE
320
ST_LVM_PV = _constants.ST_LVM_PV
321
ST_LVM_VG = _constants.ST_LVM_VG
322
ST_RADOS = _constants.ST_RADOS
323
STORAGE_TYPES = _constants.STORAGE_TYPES
324

    
325
# the set of storage types for which storage reporting is available
326
# FIXME: Remove this, once storage reporting is available for all types.
327
STS_REPORT = compat.UniqueFrozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG])
328

    
329
# Storage fields
330
# first two are valid in LU context only, not passed to backend
331
SF_NODE = _constants.SF_NODE
332
SF_TYPE = _constants.SF_TYPE
333
# and the rest are valid in backend
334
SF_NAME = _constants.SF_NAME
335
SF_SIZE = _constants.SF_SIZE
336
SF_FREE = _constants.SF_FREE
337
SF_USED = _constants.SF_USED
338
SF_ALLOCATABLE = _constants.SF_ALLOCATABLE
339

    
340
# Storage operations
341
SO_FIX_CONSISTENCY = "fix-consistency"
342

    
343
# Available fields per storage type
344
VALID_STORAGE_FIELDS = compat.UniqueFrozenset([
345
  SF_NODE,
346
  SF_NAME,
347
  SF_TYPE,
348
  SF_SIZE,
349
  SF_USED,
350
  SF_FREE,
351
  SF_ALLOCATABLE,
352
  ])
353

    
354
MODIFIABLE_STORAGE_FIELDS = {
355
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
356
  }
357

    
358
VALID_STORAGE_OPERATIONS = {
359
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
360
  }
361

    
362
# Volume fields
363
VF_DEV = "dev"
364
VF_INSTANCE = "instance"
365
VF_NAME = "name"
366
VF_NODE = "node"
367
VF_PHYS = "phys"
368
VF_SIZE = "size"
369
VF_VG = "vg"
370

    
371
# Local disk status
372
# Note: Code depends on LDS_OKAY < LDS_UNKNOWN < LDS_FAULTY
373
(LDS_OKAY,
374
 LDS_UNKNOWN,
375
 LDS_FAULTY) = range(1, 4)
376

    
377
LDS_NAMES = {
378
  LDS_OKAY: "ok",
379
  LDS_UNKNOWN: "unknown",
380
  LDS_FAULTY: "faulty",
381
}
382

    
383
# disk template types
384
DT_BLOCK = _constants.DT_BLOCK
385
DT_DISKLESS = _constants.DT_DISKLESS
386
DT_DRBD8 = _constants.DT_DRBD8
387
DT_EXT = _constants.DT_EXT
388
DT_FILE = _constants.DT_FILE
389
DT_PLAIN = _constants.DT_PLAIN
390
DT_RBD = _constants.DT_RBD
391
DT_SHARED_FILE = _constants.DT_SHARED_FILE
392
DISK_TEMPLATE_PREFERENCE = _constants.DISK_TEMPLATE_PREFERENCE
393
DISK_TEMPLATES = _constants.DISK_TEMPLATES
394
DEFAULT_ENABLED_DISK_TEMPLATES = _constants.DEFAULT_ENABLED_DISK_TEMPLATES
395

    
396
# mapping of disk templates to storage types
397
MAP_DISK_TEMPLATE_STORAGE_TYPE = {
398
  DT_BLOCK: ST_BLOCK,
399
  DT_DISKLESS: ST_DISKLESS,
400
  DT_DRBD8: ST_LVM_VG,
401
  DT_EXT: ST_EXT,
402
  DT_FILE: ST_FILE,
403
  DT_PLAIN: ST_LVM_VG,
404
  DT_RBD: ST_RADOS,
405
  DT_SHARED_FILE: ST_FILE,
406
  }
407

    
408
# the set of network-mirrored disk templates
409
DTS_INT_MIRROR = compat.UniqueFrozenset([DT_DRBD8])
410

    
411
# the set of externally-mirrored disk templates (e.g. SAN, NAS)
412
DTS_EXT_MIRROR = compat.UniqueFrozenset([
413
  DT_DISKLESS, # 'trivially' externally mirrored
414
  DT_SHARED_FILE,
415
  DT_BLOCK,
416
  DT_RBD,
417
  DT_EXT,
418
  ])
419

    
420
# the set of non-lvm-based disk templates
421
DTS_NOT_LVM = compat.UniqueFrozenset([
422
  DT_DISKLESS,
423
  DT_FILE,
424
  DT_SHARED_FILE,
425
  DT_BLOCK,
426
  DT_RBD,
427
  DT_EXT,
428
  ])
429

    
430
# the set of disk templates which can be grown
431
DTS_GROWABLE = compat.UniqueFrozenset([
432
  DT_PLAIN,
433
  DT_DRBD8,
434
  DT_FILE,
435
  DT_SHARED_FILE,
436
  DT_RBD,
437
  DT_EXT,
438
  ])
439

    
440
# the set of disk templates that allow adoption
441
DTS_MAY_ADOPT = compat.UniqueFrozenset([
442
  DT_PLAIN,
443
  DT_BLOCK,
444
  ])
445

    
446
# the set of disk templates that *must* use adoption
447
DTS_MUST_ADOPT = compat.UniqueFrozenset([DT_BLOCK])
448

    
449
# the set of disk templates that allow migrations
450
DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR)
451

    
452
# the set of file based disk templates
453
DTS_FILEBASED = compat.UniqueFrozenset([
454
  DT_FILE,
455
  DT_SHARED_FILE,
456
  ])
457

    
458
# the set of disk templates that can be moved by copying
459
# Note: a requirement is that they're not accessed externally or shared between
460
# nodes; in particular, sharedfile is not suitable.
461
DTS_COPYABLE = compat.UniqueFrozenset([
462
  DT_FILE,
463
  DT_PLAIN,
464
  ])
465

    
466
# the set of disk templates that are supported by exclusive_storage
467
DTS_EXCL_STORAGE = compat.UniqueFrozenset([DT_PLAIN])
468

    
469
# templates for which we don't perform checks on free space
470
DTS_NO_FREE_SPACE_CHECK = compat.UniqueFrozenset([
471
  DT_FILE,
472
  DT_SHARED_FILE,
473
  DT_RBD,
474
  DT_EXT,
475
  ])
476

    
477
DTS_BLOCK = compat.UniqueFrozenset([
478
  DT_PLAIN,
479
  DT_DRBD8,
480
  DT_BLOCK,
481
  DT_RBD,
482
  DT_EXT,
483
  ])
484

    
485
# drbd constants
486
DRBD_HMAC_ALG = "md5"
487
DRBD_DEFAULT_NET_PROTOCOL = "C"
488
DRBD_MIGRATION_NET_PROTOCOL = "C"
489
DRBD_STATUS_FILE = "/proc/drbd"
490

    
491
#: Size of DRBD meta block device
492
DRBD_META_SIZE = 128
493

    
494
# drbd barrier types
495
DRBD_B_NONE = "n"
496
DRBD_B_DISK_BARRIERS = "b"
497
DRBD_B_DISK_DRAIN = "d"
498
DRBD_B_DISK_FLUSH = "f"
499

    
500
# Valid barrier combinations: "n" or any non-null subset of "bfd"
501
DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([
502
  frozenset([DRBD_B_NONE]),
503
  frozenset([DRBD_B_DISK_BARRIERS]),
504
  frozenset([DRBD_B_DISK_DRAIN]),
505
  frozenset([DRBD_B_DISK_FLUSH]),
506
  frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]),
507
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]),
508
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]),
509
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]),
510
  ])
511

    
512
# rbd tool command
513
RBD_CMD = "rbd"
514

    
515
# file backend driver
516
FD_BLKTAP = _constants.FD_BLKTAP
517
FD_LOOP = _constants.FD_LOOP
518

    
519
# the set of drbd-like disk types
520
LDS_DRBD = compat.UniqueFrozenset([DT_DRBD8])
521

    
522
# disk access mode
523
DISK_RDONLY = _constants.DISK_RDONLY
524
DISK_RDWR = _constants.DISK_RDWR
525
DISK_ACCESS_SET = _constants.DISK_ACCESS_SET
526
DISK_USERSPACE = _constants.DISK_USERSPACE
527
DISK_KERNELSPACE = _constants.DISK_KERNELSPACE
528
DISK_VALID_ACCESS_MODES = _constants.DISK_VALID_ACCESS_MODES
529

    
530
# disk replacement mode
531
REPLACE_DISK_PRI = "replace_on_primary"    # replace disks on primary
532
REPLACE_DISK_SEC = "replace_on_secondary"  # replace disks on secondary
533
REPLACE_DISK_CHG = "replace_new_secondary" # change secondary node
534
REPLACE_DISK_AUTO = "replace_auto"
535
REPLACE_MODES = compat.UniqueFrozenset([
536
  REPLACE_DISK_PRI,
537
  REPLACE_DISK_SEC,
538
  REPLACE_DISK_CHG,
539
  REPLACE_DISK_AUTO,
540
  ])
541

    
542
# Instance export mode
543
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
544
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
545
EXPORT_MODES = _constants.EXPORT_MODES
546

    
547
# instance creation modes
548
INSTANCE_CREATE = _constants.INSTANCE_CREATE
549
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
550
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
551
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
552

    
553
# Remote import/export handshake message and version
554
RIE_VERSION = 0
555
RIE_HANDSHAKE = "Hi, I'm Ganeti"
556

    
557
# Remote import/export certificate validity in seconds
558
RIE_CERT_VALIDITY = 24 * 60 * 60
559

    
560
# Overall timeout for establishing connection
561
RIE_CONNECT_TIMEOUT = 180
562

    
563
# Export only: how long to wait per connection attempt (seconds)
564
RIE_CONNECT_ATTEMPT_TIMEOUT = 20
565

    
566
# Export only: number of attempts to connect
567
RIE_CONNECT_RETRIES = 10
568

    
569
#: Give child process up to 5 seconds to exit after sending a signal
570
CHILD_LINGER_TIMEOUT = 5.0
571

    
572
FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP])
573

    
574
# import/export config options
575
INISECT_EXP = "export"
576
INISECT_INS = "instance"
577
INISECT_HYP = "hypervisor"
578
INISECT_BEP = "backend"
579
INISECT_OSP = "os"
580

    
581
# dynamic device modification
582
DDM_ADD = _constants.DDM_ADD
583
DDM_MODIFY = _constants.DDM_MODIFY
584
DDM_REMOVE = _constants.DDM_REMOVE
585
DDMS_VALUES = _constants.DDMS_VALUES
586
DDMS_VALUES_WITH_MODIFY = _constants.DDMS_VALUES_WITH_MODIFY
587
# TODO: DDM_SWAP, DDM_MOVE?
588

    
589
# common exit codes
590
EXIT_SUCCESS = _constants.EXIT_SUCCESS
591
EXIT_FAILURE = _constants.EXIT_FAILURE
592
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
593
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
594
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
595
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
596

    
597
#: Exit code for query operations with unknown fields
598
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
599

    
600
# tags
601
TAG_CLUSTER = _constants.TAG_CLUSTER
602
TAG_NODEGROUP = _constants.TAG_NODEGROUP
603
TAG_NODE = _constants.TAG_NODE
604
TAG_INSTANCE = _constants.TAG_INSTANCE
605
TAG_NETWORK = _constants.TAG_NETWORK
606
VALID_TAG_TYPES = _constants.VALID_TAG_TYPES
607

    
608
MAX_TAG_LEN = _constants.MAX_TAG_LEN
609
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
610

    
611
# others
612
DEFAULT_BRIDGE = "xen-br0"
613
DEFAULT_OVS = "switch1"
614
CLASSIC_DRBD_SYNC_SPEED = 60 * 1024  # 60 MiB, expressed in KiB
615
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
616
IP4_ADDRESS_ANY = "0.0.0.0"
617
IP6_ADDRESS_LOCALHOST = "::1"
618
IP6_ADDRESS_ANY = "::"
619
IP4_VERSION = 4
620
IP6_VERSION = 6
621
VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
622
# for export to htools
623
IP4_FAMILY = socket.AF_INET
624
IP6_FAMILY = socket.AF_INET6
625

    
626
TCP_PING_TIMEOUT = 10
627
DEFAULT_VG = "xenvg"
628
DEFAULT_DRBD_HELPER = "/bin/true"
629
MIN_VG_SIZE = 20480
630
DEFAULT_MAC_PREFIX = "aa:00:00"
631
# default maximum instance wait time, in seconds.
632
DEFAULT_SHUTDOWN_TIMEOUT = 120
633
NODE_MAX_CLOCK_SKEW = _constants.NODE_MAX_CLOCK_SKEW
634
# Time for an intra-cluster disk transfer to wait for a connection
635
DISK_TRANSFER_CONNECT_TIMEOUT = 60
636
# Disk index separator
637
DISK_SEPARATOR = _constants.DISK_SEPARATOR
638
IP_COMMAND_PATH = _constants.IP_COMMAND_PATH
639

    
640
#: Key for job IDs in opcode result
641
JOB_IDS_KEY = "jobs"
642

    
643
# runparts results
644
(RUNPARTS_SKIP,
645
 RUNPARTS_RUN,
646
 RUNPARTS_ERR) = range(3)
647

    
648
RUNPARTS_STATUS = compat.UniqueFrozenset([
649
  RUNPARTS_SKIP,
650
  RUNPARTS_RUN,
651
  RUNPARTS_ERR,
652
  ])
653

    
654
# RPC constants
655
(RPC_ENCODING_NONE,
656
 RPC_ENCODING_ZLIB_BASE64) = range(2)
657

    
658
# Various time constants for the timeout table
659
RPC_TMO_URGENT = 60 # one minute
660
RPC_TMO_FAST = 5 * 60 # five minutes
661
RPC_TMO_NORMAL = 15 * 60 # 15 minutes
662
RPC_TMO_SLOW = 3600 # one hour
663
RPC_TMO_4HRS = 4 * 3600
664
RPC_TMO_1DAY = 86400
665

    
666
# Timeout for connecting to nodes (seconds)
667
RPC_CONNECT_TIMEOUT = 5
668

    
669
# os related constants
670
OS_SCRIPT_CREATE = "create"
671
OS_SCRIPT_IMPORT = "import"
672
OS_SCRIPT_EXPORT = "export"
673
OS_SCRIPT_RENAME = "rename"
674
OS_SCRIPT_VERIFY = "verify"
675
OS_SCRIPTS = compat.UniqueFrozenset([
676
  OS_SCRIPT_CREATE,
677
  OS_SCRIPT_IMPORT,
678
  OS_SCRIPT_EXPORT,
679
  OS_SCRIPT_RENAME,
680
  OS_SCRIPT_VERIFY,
681
  ])
682

    
683
OS_API_FILE = "ganeti_api_version"
684
OS_VARIANTS_FILE = "variants.list"
685
OS_PARAMETERS_FILE = "parameters.list"
686

    
687
OS_VALIDATE_PARAMETERS = "parameters"
688
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
689

    
690
# External Storage (ES) related constants
691
ES_ACTION_CREATE = "create"
692
ES_ACTION_REMOVE = "remove"
693
ES_ACTION_GROW = "grow"
694
ES_ACTION_ATTACH = "attach"
695
ES_ACTION_DETACH = "detach"
696
ES_ACTION_SETINFO = "setinfo"
697
ES_ACTION_VERIFY = "verify"
698

    
699
ES_SCRIPT_CREATE = ES_ACTION_CREATE
700
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
701
ES_SCRIPT_GROW = ES_ACTION_GROW
702
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
703
ES_SCRIPT_DETACH = ES_ACTION_DETACH
704
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
705
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
706
ES_SCRIPTS = frozenset([
707
  ES_SCRIPT_CREATE,
708
  ES_SCRIPT_REMOVE,
709
  ES_SCRIPT_GROW,
710
  ES_SCRIPT_ATTACH,
711
  ES_SCRIPT_DETACH,
712
  ES_SCRIPT_SETINFO,
713
  ES_SCRIPT_VERIFY
714
  ])
715

    
716
ES_PARAMETERS_FILE = "parameters.list"
717

    
718
# reboot types
719
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
720
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
721
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
722
REBOOT_TYPES = _constants.REBOOT_TYPES
723

    
724
# instance reboot behaviors
725
INSTANCE_REBOOT_ALLOWED = "reboot"
726
INSTANCE_REBOOT_EXIT = "exit"
727

    
728
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
729
  INSTANCE_REBOOT_ALLOWED,
730
  INSTANCE_REBOOT_EXIT,
731
  ])
732

    
733
VTYPE_STRING = _constants.VTYPE_STRING
734
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
735
VTYPE_BOOL = _constants.VTYPE_BOOL
736
VTYPE_SIZE = _constants.VTYPE_SIZE
737
VTYPE_INT = _constants.VTYPE_INT
738
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
739

    
740
# Constant representing that the user does not specify any IP version
741
IFACE_NO_IP_VERSION_SPECIFIED = 0
742

    
743
VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
744
  75,
745
  110,
746
  300,
747
  600,
748
  1200,
749
  1800,
750
  2400,
751
  4800,
752
  9600,
753
  14400,
754
  19200,
755
  28800,
756
  38400,
757
  57600,
758
  115200,
759
  230400,
760
  345600,
761
  460800,
762
  ])
763

    
764
# HV parameter names (global namespace)
765
HV_BOOT_ORDER = "boot_order"
766
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
767
HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
768
HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
769
HV_NIC_TYPE = "nic_type"
770
HV_DISK_TYPE = "disk_type"
771
HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
772
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
773
HV_VNC_PASSWORD_FILE = "vnc_password_file"
774
HV_VNC_TLS = "vnc_tls"
775
HV_VNC_X509 = "vnc_x509_path"
776
HV_VNC_X509_VERIFY = "vnc_x509_verify"
777
HV_KVM_SPICE_BIND = "spice_bind"
778
HV_KVM_SPICE_IP_VERSION = "spice_ip_version"
779
HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file"
780
HV_KVM_SPICE_LOSSLESS_IMG_COMPR = "spice_image_compression"
781
HV_KVM_SPICE_JPEG_IMG_COMPR = "spice_jpeg_wan_compression"
782
HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR = "spice_zlib_glz_wan_compression"
783
HV_KVM_SPICE_STREAMING_VIDEO_DETECTION = "spice_streaming_video"
784
HV_KVM_SPICE_AUDIO_COMPR = "spice_playback_compression"
785
HV_KVM_SPICE_USE_TLS = "spice_use_tls"
786
HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers"
787
HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent"
788
HV_ACPI = "acpi"
789
HV_PAE = "pae"
790
HV_USE_BOOTLOADER = "use_bootloader"
791
HV_BOOTLOADER_ARGS = "bootloader_args"
792
HV_BOOTLOADER_PATH = "bootloader_path"
793
HV_KERNEL_ARGS = "kernel_args"
794
HV_KERNEL_PATH = "kernel_path"
795
HV_INITRD_PATH = "initrd_path"
796
HV_ROOT_PATH = "root_path"
797
HV_SERIAL_CONSOLE = "serial_console"
798
HV_SERIAL_SPEED = "serial_speed"
799
HV_USB_MOUSE = "usb_mouse"
800
HV_KEYMAP = "keymap"
801
HV_DEVICE_MODEL = "device_model"
802
HV_INIT_SCRIPT = "init_script"
803
HV_MIGRATION_PORT = "migration_port"
804
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
805
HV_MIGRATION_DOWNTIME = "migration_downtime"
806
HV_MIGRATION_MODE = "migration_mode"
807
HV_USE_LOCALTIME = "use_localtime"
808
HV_DISK_CACHE = "disk_cache"
809
HV_SECURITY_MODEL = "security_model"
810
HV_SECURITY_DOMAIN = "security_domain"
811
HV_KVM_FLAG = "kvm_flag"
812
HV_VHOST_NET = "vhost_net"
813
HV_KVM_USE_CHROOT = "use_chroot"
814
HV_CPU_MASK = "cpu_mask"
815
HV_MEM_PATH = "mem_path"
816
HV_PASSTHROUGH = "pci_pass"
817
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
818
HV_REBOOT_BEHAVIOR = "reboot_behavior"
819
HV_CPU_TYPE = "cpu_type"
820
HV_CPU_CAP = "cpu_cap"
821
HV_CPU_WEIGHT = "cpu_weight"
822
HV_CPU_CORES = "cpu_cores"
823
HV_CPU_THREADS = "cpu_threads"
824
HV_CPU_SOCKETS = "cpu_sockets"
825
HV_SOUNDHW = "soundhw"
826
HV_USB_DEVICES = "usb_devices"
827
HV_VGA = "vga"
828
HV_KVM_EXTRA = "kvm_extra"
829
HV_KVM_MACHINE_VERSION = "machine_version"
830
HV_KVM_PATH = "kvm_path"
831
HV_VIF_TYPE = "vif_type"
832
HV_VIF_SCRIPT = "vif_script"
833
HV_XEN_CMD = "xen_cmd"
834
HV_XEN_CPUID = "cpuid"
835
HV_VNET_HDR = "vnet_hdr"
836
HV_VIRIDIAN = "viridian"
837

    
838

    
839
HVS_PARAMETER_TYPES = {
840
  HV_KVM_PATH: VTYPE_STRING,
841
  HV_BOOT_ORDER: VTYPE_STRING,
842
  HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
843
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
844
  HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
845
  HV_NIC_TYPE: VTYPE_STRING,
846
  HV_DISK_TYPE: VTYPE_STRING,
847
  HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
848
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
849
  HV_VNC_BIND_ADDRESS: VTYPE_STRING,
850
  HV_VNC_TLS: VTYPE_BOOL,
851
  HV_VNC_X509: VTYPE_STRING,
852
  HV_VNC_X509_VERIFY: VTYPE_BOOL,
853
  HV_KVM_SPICE_BIND: VTYPE_STRING,
854
  HV_KVM_SPICE_IP_VERSION: VTYPE_INT,
855
  HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING,
856
  HV_KVM_SPICE_LOSSLESS_IMG_COMPR: VTYPE_STRING,
857
  HV_KVM_SPICE_JPEG_IMG_COMPR: VTYPE_STRING,
858
  HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: VTYPE_STRING,
859
  HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: VTYPE_STRING,
860
  HV_KVM_SPICE_AUDIO_COMPR: VTYPE_BOOL,
861
  HV_KVM_SPICE_USE_TLS: VTYPE_BOOL,
862
  HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING,
863
  HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL,
864
  HV_ACPI: VTYPE_BOOL,
865
  HV_PAE: VTYPE_BOOL,
866
  HV_USE_BOOTLOADER: VTYPE_BOOL,
867
  HV_BOOTLOADER_PATH: VTYPE_STRING,
868
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
869
  HV_KERNEL_PATH: VTYPE_STRING,
870
  HV_KERNEL_ARGS: VTYPE_STRING,
871
  HV_INITRD_PATH: VTYPE_STRING,
872
  HV_ROOT_PATH: VTYPE_MAYBE_STRING,
873
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
874
  HV_SERIAL_SPEED: VTYPE_INT,
875
  HV_USB_MOUSE: VTYPE_STRING,
876
  HV_KEYMAP: VTYPE_STRING,
877
  HV_DEVICE_MODEL: VTYPE_STRING,
878
  HV_INIT_SCRIPT: VTYPE_STRING,
879
  HV_MIGRATION_PORT: VTYPE_INT,
880
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
881
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
882
  HV_MIGRATION_MODE: VTYPE_STRING,
883
  HV_USE_LOCALTIME: VTYPE_BOOL,
884
  HV_DISK_CACHE: VTYPE_STRING,
885
  HV_SECURITY_MODEL: VTYPE_STRING,
886
  HV_SECURITY_DOMAIN: VTYPE_STRING,
887
  HV_KVM_FLAG: VTYPE_STRING,
888
  HV_VHOST_NET: VTYPE_BOOL,
889
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
890
  HV_CPU_MASK: VTYPE_STRING,
891
  HV_MEM_PATH: VTYPE_STRING,
892
  HV_PASSTHROUGH: VTYPE_STRING,
893
  HV_BLOCKDEV_PREFIX: VTYPE_STRING,
894
  HV_REBOOT_BEHAVIOR: VTYPE_STRING,
895
  HV_CPU_TYPE: VTYPE_STRING,
896
  HV_CPU_CAP: VTYPE_INT,
897
  HV_CPU_WEIGHT: VTYPE_INT,
898
  HV_CPU_CORES: VTYPE_INT,
899
  HV_CPU_THREADS: VTYPE_INT,
900
  HV_CPU_SOCKETS: VTYPE_INT,
901
  HV_SOUNDHW: VTYPE_STRING,
902
  HV_USB_DEVICES: VTYPE_STRING,
903
  HV_VGA: VTYPE_STRING,
904
  HV_KVM_EXTRA: VTYPE_STRING,
905
  HV_KVM_MACHINE_VERSION: VTYPE_STRING,
906
  HV_VIF_TYPE: VTYPE_STRING,
907
  HV_VIF_SCRIPT: VTYPE_STRING,
908
  HV_XEN_CMD: VTYPE_STRING,
909
  HV_XEN_CPUID: VTYPE_STRING,
910
  HV_VNET_HDR: VTYPE_BOOL,
911
  HV_VIRIDIAN: VTYPE_BOOL,
912
  }
913

    
914
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
915

    
916
HVS_PARAMETER_TITLES = {
917
  HV_ACPI: "ACPI",
918
  HV_BOOT_ORDER: "Boot_order",
919
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
920
  HV_DISK_TYPE: "Disk_type",
921
  HV_INITRD_PATH: "Initrd_path",
922
  HV_KERNEL_PATH: "Kernel_path",
923
  HV_NIC_TYPE: "NIC_type",
924
  HV_PAE: "PAE",
925
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
926
  HV_PASSTHROUGH: "pci_pass",
927
  HV_CPU_TYPE: "cpu_type",
928
  }
929

    
930
# Migration statuses
931
HV_MIGRATION_COMPLETED = "completed"
932
HV_MIGRATION_ACTIVE = "active"
933
HV_MIGRATION_FAILED = "failed"
934
HV_MIGRATION_CANCELLED = "cancelled"
935

    
936
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
937
  HV_MIGRATION_COMPLETED,
938
  HV_MIGRATION_ACTIVE,
939
  HV_MIGRATION_FAILED,
940
  HV_MIGRATION_CANCELLED,
941
  ])
942

    
943
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
944
  HV_MIGRATION_FAILED,
945
  HV_MIGRATION_CANCELLED,
946
  ])
947

    
948
# KVM-specific statuses
949
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
950

    
951
# Node info keys
952
HV_NODEINFO_KEY_VERSION = "hv_version"
953

    
954
# Hypervisor state
955
HVST_MEMORY_TOTAL = "mem_total"
956
HVST_MEMORY_NODE = "mem_node"
957
HVST_MEMORY_HV = "mem_hv"
958
HVST_CPU_TOTAL = "cpu_total"
959
HVST_CPU_NODE = "cpu_node"
960

    
961
HVST_DEFAULTS = {
962
  HVST_MEMORY_TOTAL: 0,
963
  HVST_MEMORY_NODE: 0,
964
  HVST_MEMORY_HV: 0,
965
  HVST_CPU_TOTAL: 1,
966
  HVST_CPU_NODE: 1,
967
  }
968

    
969
HVSTS_PARAMETER_TYPES = {
970
  HVST_MEMORY_TOTAL: VTYPE_INT,
971
  HVST_MEMORY_NODE: VTYPE_INT,
972
  HVST_MEMORY_HV: VTYPE_INT,
973
  HVST_CPU_TOTAL: VTYPE_INT,
974
  HVST_CPU_NODE: VTYPE_INT,
975
  }
976

    
977
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
978

    
979
# Disk state
980
DS_DISK_TOTAL = "disk_total"
981
DS_DISK_RESERVED = "disk_reserved"
982
DS_DISK_OVERHEAD = "disk_overhead"
983

    
984
DS_DEFAULTS = {
985
  DS_DISK_TOTAL: 0,
986
  DS_DISK_RESERVED: 0,
987
  DS_DISK_OVERHEAD: 0,
988
  }
989

    
990
DSS_PARAMETER_TYPES = {
991
  DS_DISK_TOTAL: VTYPE_INT,
992
  DS_DISK_RESERVED: VTYPE_INT,
993
  DS_DISK_OVERHEAD: VTYPE_INT,
994
  }
995

    
996
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
997
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
998

    
999
# Backend parameter names
1000
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
1001
BE_MAXMEM = "maxmem"
1002
BE_MINMEM = "minmem"
1003
BE_VCPUS = "vcpus"
1004
BE_AUTO_BALANCE = "auto_balance"
1005
BE_ALWAYS_FAILOVER = "always_failover"
1006
BE_SPINDLE_USE = "spindle_use"
1007

    
1008
BES_PARAMETER_TYPES = {
1009
  BE_MAXMEM: VTYPE_SIZE,
1010
  BE_MINMEM: VTYPE_SIZE,
1011
  BE_VCPUS: VTYPE_INT,
1012
  BE_AUTO_BALANCE: VTYPE_BOOL,
1013
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
1014
  BE_SPINDLE_USE: VTYPE_INT,
1015
  }
1016

    
1017
BES_PARAMETER_TITLES = {
1018
  BE_AUTO_BALANCE: "Auto_balance",
1019
  BE_MAXMEM: "ConfigMaxMem",
1020
  BE_MINMEM: "ConfigMinMem",
1021
  BE_VCPUS: "ConfigVCPUs",
1022
  }
1023

    
1024
BES_PARAMETER_COMPAT = {
1025
  BE_MEMORY: VTYPE_SIZE,
1026
  }
1027
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
1028

    
1029
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1030

    
1031
# instance specs
1032
ISPEC_MEM_SIZE = "memory-size"
1033
ISPEC_CPU_COUNT = "cpu-count"
1034
ISPEC_DISK_COUNT = "disk-count"
1035
ISPEC_DISK_SIZE = "disk-size"
1036
ISPEC_NIC_COUNT = "nic-count"
1037
ISPEC_SPINDLE_USE = "spindle-use"
1038

    
1039
ISPECS_PARAMETER_TYPES = {
1040
  ISPEC_MEM_SIZE: VTYPE_INT,
1041
  ISPEC_CPU_COUNT: VTYPE_INT,
1042
  ISPEC_DISK_COUNT: VTYPE_INT,
1043
  ISPEC_DISK_SIZE: VTYPE_INT,
1044
  ISPEC_NIC_COUNT: VTYPE_INT,
1045
  ISPEC_SPINDLE_USE: VTYPE_INT,
1046
  }
1047

    
1048
ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys())
1049

    
1050
ISPECS_MINMAX = "minmax"
1051
ISPECS_MIN = "min"
1052
ISPECS_MAX = "max"
1053
ISPECS_STD = "std"
1054
IPOLICY_DTS = "disk-templates"
1055
IPOLICY_VCPU_RATIO = "vcpu-ratio"
1056
IPOLICY_SPINDLE_RATIO = "spindle-ratio"
1057

    
1058
ISPECS_MINMAX_KEYS = compat.UniqueFrozenset([
1059
  ISPECS_MIN,
1060
  ISPECS_MAX,
1061
  ])
1062

    
1063
IPOLICY_PARAMETERS = compat.UniqueFrozenset([
1064
  IPOLICY_VCPU_RATIO,
1065
  IPOLICY_SPINDLE_RATIO,
1066
  ])
1067

    
1068
IPOLICY_ALL_KEYS = (IPOLICY_PARAMETERS |
1069
                    frozenset([ISPECS_MINMAX, ISPECS_STD, IPOLICY_DTS]))
1070

    
1071
# Node parameter names
1072
ND_OOB_PROGRAM = "oob_program"
1073
ND_SPINDLE_COUNT = "spindle_count"
1074
ND_EXCLUSIVE_STORAGE = "exclusive_storage"
1075
ND_OVS = "ovs"
1076
ND_OVS_NAME = "ovs_name"
1077
ND_OVS_LINK = "ovs_link"
1078

    
1079
NDS_PARAMETER_TYPES = {
1080
  ND_OOB_PROGRAM: VTYPE_STRING,
1081
  ND_SPINDLE_COUNT: VTYPE_INT,
1082
  ND_EXCLUSIVE_STORAGE: VTYPE_BOOL,
1083
  ND_OVS: VTYPE_BOOL,
1084
  ND_OVS_NAME: VTYPE_MAYBE_STRING,
1085
  ND_OVS_LINK: VTYPE_MAYBE_STRING,
1086
  }
1087

    
1088
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
1089

    
1090
NDS_PARAMETER_TITLES = {
1091
  ND_OOB_PROGRAM: "OutOfBandProgram",
1092
  ND_SPINDLE_COUNT: "SpindleCount",
1093
  ND_EXCLUSIVE_STORAGE: "ExclusiveStorage",
1094
  ND_OVS: "OpenvSwitch",
1095
  ND_OVS_NAME: "OpenvSwitchName",
1096
  ND_OVS_LINK: "OpenvSwitchLink",
1097
  }
1098

    
1099
# Logical Disks parameters
1100
LDP_RESYNC_RATE = "resync-rate"
1101
LDP_STRIPES = "stripes"
1102
LDP_BARRIERS = "disabled-barriers"
1103
LDP_NO_META_FLUSH = "disable-meta-flush"
1104
LDP_DEFAULT_METAVG = "default-metavg"
1105
LDP_DISK_CUSTOM = "disk-custom"
1106
LDP_NET_CUSTOM = "net-custom"
1107
LDP_PROTOCOL = "protocol"
1108
LDP_DYNAMIC_RESYNC = "dynamic-resync"
1109
LDP_PLAN_AHEAD = "c-plan-ahead"
1110
LDP_FILL_TARGET = "c-fill-target"
1111
LDP_DELAY_TARGET = "c-delay-target"
1112
LDP_MAX_RATE = "c-max-rate"
1113
LDP_MIN_RATE = "c-min-rate"
1114
LDP_POOL = "pool"
1115
LDP_ACCESS = "access"
1116
DISK_LD_TYPES = {
1117
  LDP_RESYNC_RATE: VTYPE_INT,
1118
  LDP_STRIPES: VTYPE_INT,
1119
  LDP_BARRIERS: VTYPE_STRING,
1120
  LDP_NO_META_FLUSH: VTYPE_BOOL,
1121
  LDP_DEFAULT_METAVG: VTYPE_STRING,
1122
  LDP_DISK_CUSTOM: VTYPE_STRING,
1123
  LDP_NET_CUSTOM: VTYPE_STRING,
1124
  LDP_PROTOCOL: VTYPE_STRING,
1125
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
1126
  LDP_PLAN_AHEAD: VTYPE_INT,
1127
  LDP_FILL_TARGET: VTYPE_INT,
1128
  LDP_DELAY_TARGET: VTYPE_INT,
1129
  LDP_MAX_RATE: VTYPE_INT,
1130
  LDP_MIN_RATE: VTYPE_INT,
1131
  LDP_POOL: VTYPE_STRING,
1132
  LDP_ACCESS: VTYPE_STRING,
1133
  }
1134
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
1135

    
1136
# Disk template parameters (can be set/changed by the user via gnt-cluster and
1137
# gnt-group)
1138
DRBD_RESYNC_RATE = "resync-rate"
1139
DRBD_DATA_STRIPES = "data-stripes"
1140
DRBD_META_STRIPES = "meta-stripes"
1141
DRBD_DISK_BARRIERS = "disk-barriers"
1142
DRBD_META_BARRIERS = "meta-barriers"
1143
DRBD_DEFAULT_METAVG = "metavg"
1144
DRBD_DISK_CUSTOM = "disk-custom"
1145
DRBD_NET_CUSTOM = "net-custom"
1146
DRBD_PROTOCOL = "protocol"
1147
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
1148
DRBD_PLAN_AHEAD = "c-plan-ahead"
1149
DRBD_FILL_TARGET = "c-fill-target"
1150
DRBD_DELAY_TARGET = "c-delay-target"
1151
DRBD_MAX_RATE = "c-max-rate"
1152
DRBD_MIN_RATE = "c-min-rate"
1153
LV_STRIPES = "stripes"
1154
RBD_POOL = "pool"
1155
RBD_ACCESS = "access"
1156
DISK_DT_TYPES = {
1157
  DRBD_RESYNC_RATE: VTYPE_INT,
1158
  DRBD_DATA_STRIPES: VTYPE_INT,
1159
  DRBD_META_STRIPES: VTYPE_INT,
1160
  DRBD_DISK_BARRIERS: VTYPE_STRING,
1161
  DRBD_META_BARRIERS: VTYPE_BOOL,
1162
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
1163
  DRBD_DISK_CUSTOM: VTYPE_STRING,
1164
  DRBD_NET_CUSTOM: VTYPE_STRING,
1165
  DRBD_PROTOCOL: VTYPE_STRING,
1166
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
1167
  DRBD_PLAN_AHEAD: VTYPE_INT,
1168
  DRBD_FILL_TARGET: VTYPE_INT,
1169
  DRBD_DELAY_TARGET: VTYPE_INT,
1170
  DRBD_MAX_RATE: VTYPE_INT,
1171
  DRBD_MIN_RATE: VTYPE_INT,
1172
  LV_STRIPES: VTYPE_INT,
1173
  RBD_POOL: VTYPE_STRING,
1174
  RBD_ACCESS: VTYPE_STRING,
1175
  }
1176

    
1177
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1178

    
1179
# dynamic disk parameters
1180
DDP_LOCAL_IP = "local-ip"
1181
DDP_REMOTE_IP = "remote-ip"
1182
DDP_PORT = "port"
1183
DDP_LOCAL_MINOR = "local-minor"
1184
DDP_REMOTE_MINOR = "remote-minor"
1185

    
1186
# OOB supported commands
1187
OOB_POWER_ON = _constants.OOB_POWER_ON
1188
OOB_POWER_OFF = _constants.OOB_POWER_OFF
1189
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
1190
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
1191
OOB_HEALTH = _constants.OOB_HEALTH
1192
OOB_COMMANDS = _constants.OOB_COMMANDS
1193

    
1194
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1195

    
1196
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1197
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1198

    
1199
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1200
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1201
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1202
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1203
OOB_STATUSES = _constants.OOB_STATUSES
1204

    
1205
# Instance Parameters Profile
1206
PP_DEFAULT = "default"
1207

    
1208
# NIC_* constants are used inside the ganeti config
1209
NIC_MODE = _constants.NIC_MODE
1210
NIC_LINK = _constants.NIC_LINK
1211
NIC_VLAN = _constants.NIC_VLAN
1212

    
1213
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1214
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1215
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1216
NIC_IP_POOL = _constants.NIC_IP_POOL
1217
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1218

    
1219
RESERVE_ACTION = "reserve"
1220
RELEASE_ACTION = "release"
1221

    
1222
NICS_PARAMETER_TYPES = {
1223
  NIC_MODE: VTYPE_STRING,
1224
  NIC_LINK: VTYPE_STRING,
1225
  NIC_VLAN: VTYPE_MAYBE_STRING,
1226
  }
1227

    
1228
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1229

    
1230
# IDISK_* constants are used in opcodes, to create/change disks
1231
IDISK_SIZE = "size"
1232
IDISK_SPINDLES = "spindles"
1233
IDISK_MODE = "mode"
1234
IDISK_ADOPT = "adopt"
1235
IDISK_VG = "vg"
1236
IDISK_METAVG = "metavg"
1237
IDISK_PROVIDER = "provider"
1238
IDISK_NAME = "name"
1239
IDISK_PARAMS_TYPES = {
1240
  IDISK_SIZE: VTYPE_SIZE,
1241
  IDISK_SPINDLES: VTYPE_INT,
1242
  IDISK_MODE: VTYPE_STRING,
1243
  IDISK_ADOPT: VTYPE_STRING,
1244
  IDISK_VG: VTYPE_STRING,
1245
  IDISK_METAVG: VTYPE_STRING,
1246
  IDISK_PROVIDER: VTYPE_STRING,
1247
  IDISK_NAME: VTYPE_MAYBE_STRING,
1248
  }
1249
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1250

    
1251
# INIC_* constants are used in opcodes, to create/change nics
1252
INIC_MAC = "mac"
1253
INIC_IP = "ip"
1254
INIC_MODE = "mode"
1255
INIC_LINK = "link"
1256
INIC_NETWORK = "network"
1257
INIC_NAME = "name"
1258
INIC_VLAN = "vlan"
1259
INIC_BRIDGE = "bridge"
1260
INIC_PARAMS_TYPES = {
1261
  INIC_IP: VTYPE_MAYBE_STRING,
1262
  INIC_LINK: VTYPE_STRING,
1263
  INIC_MAC: VTYPE_STRING,
1264
  INIC_MODE: VTYPE_STRING,
1265
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1266
  INIC_NAME: VTYPE_MAYBE_STRING,
1267
  INIC_VLAN: VTYPE_MAYBE_STRING,
1268
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1269
  }
1270
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1271

    
1272
# Hypervisor constants
1273
HT_XEN_PVM = _constants.HT_XEN_PVM
1274
HT_FAKE = _constants.HT_FAKE
1275
HT_XEN_HVM = _constants.HT_XEN_HVM
1276
HT_KVM = _constants.HT_KVM
1277
HT_CHROOT = _constants.HT_CHROOT
1278
HT_LXC = _constants.HT_LXC
1279
HYPER_TYPES = _constants.HYPER_TYPES
1280
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1281

    
1282
VNC_BASE_PORT = 5900
1283
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1284

    
1285
# NIC types
1286
HT_NIC_RTL8139 = "rtl8139"
1287
HT_NIC_NE2K_PCI = "ne2k_pci"
1288
HT_NIC_NE2K_ISA = "ne2k_isa"
1289
HT_NIC_I82551 = "i82551"
1290
HT_NIC_I85557B = "i82557b"
1291
HT_NIC_I8259ER = "i82559er"
1292
HT_NIC_PCNET = "pcnet"
1293
HT_NIC_E1000 = "e1000"
1294
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1295

    
1296
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1297
  HT_NIC_RTL8139,
1298
  HT_NIC_NE2K_PCI,
1299
  HT_NIC_E1000,
1300
  HT_NIC_NE2K_ISA,
1301
  HT_NIC_PARAVIRTUAL,
1302
  ])
1303
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1304
  HT_NIC_RTL8139,
1305
  HT_NIC_NE2K_PCI,
1306
  HT_NIC_NE2K_ISA,
1307
  HT_NIC_I82551,
1308
  HT_NIC_I85557B,
1309
  HT_NIC_I8259ER,
1310
  HT_NIC_PCNET,
1311
  HT_NIC_E1000,
1312
  HT_NIC_PARAVIRTUAL,
1313
  ])
1314

    
1315
# Vif types
1316
# default vif type in xen-hvm
1317
HT_HVM_VIF_IOEMU = "ioemu"
1318
HT_HVM_VIF_VIF = "vif"
1319
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1320
  HT_HVM_VIF_IOEMU,
1321
  HT_HVM_VIF_VIF,
1322
  ])
1323

    
1324
# Disk types
1325
HT_DISK_IOEMU = "ioemu"
1326
HT_DISK_IDE = "ide"
1327
HT_DISK_SCSI = "scsi"
1328
HT_DISK_SD = "sd"
1329
HT_DISK_MTD = "mtd"
1330
HT_DISK_PFLASH = "pflash"
1331

    
1332
HT_CACHE_DEFAULT = "default"
1333
HT_CACHE_NONE = "none"
1334
HT_CACHE_WTHROUGH = "writethrough"
1335
HT_CACHE_WBACK = "writeback"
1336
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1337
  HT_CACHE_DEFAULT,
1338
  HT_CACHE_NONE,
1339
  HT_CACHE_WTHROUGH,
1340
  HT_CACHE_WBACK,
1341
  ])
1342

    
1343
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1344
  HT_DISK_PARAVIRTUAL,
1345
  HT_DISK_IOEMU,
1346
  ])
1347
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1348
  HT_DISK_PARAVIRTUAL,
1349
  HT_DISK_IDE,
1350
  HT_DISK_SCSI,
1351
  HT_DISK_SD,
1352
  HT_DISK_MTD,
1353
  HT_DISK_PFLASH,
1354
  ])
1355

    
1356
# Mouse types:
1357
HT_MOUSE_MOUSE = "mouse"
1358
HT_MOUSE_TABLET = "tablet"
1359

    
1360
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1361
  HT_MOUSE_MOUSE,
1362
  HT_MOUSE_TABLET,
1363
  ])
1364

    
1365
# Boot order
1366
HT_BO_FLOPPY = "floppy"
1367
HT_BO_CDROM = "cdrom"
1368
HT_BO_DISK = "disk"
1369
HT_BO_NETWORK = "network"
1370

    
1371
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1372
  HT_BO_FLOPPY,
1373
  HT_BO_CDROM,
1374
  HT_BO_DISK,
1375
  HT_BO_NETWORK,
1376
  ])
1377

    
1378
# SPICE lossless image compression options
1379
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1380
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1381
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1382
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1383
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1384
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1385

    
1386
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1387
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1388
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1389
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1390
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1391
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1392
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1393
  ])
1394

    
1395
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1396
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1397
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1398
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1399

    
1400
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1401
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1402
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1403
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1404
  ])
1405

    
1406
# SPICE video stream detection
1407
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1408
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1409
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1410

    
1411
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1412
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1413
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1414
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1415
  ])
1416

    
1417
# Security models
1418
HT_SM_NONE = "none"
1419
HT_SM_USER = "user"
1420
HT_SM_POOL = "pool"
1421

    
1422
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1423
  HT_SM_NONE,
1424
  HT_SM_USER,
1425
  HT_SM_POOL,
1426
  ])
1427

    
1428
# Kvm flag values
1429
HT_KVM_ENABLED = "enabled"
1430
HT_KVM_DISABLED = "disabled"
1431

    
1432
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1433

    
1434
# Migration type
1435
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1436
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1437
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1438

    
1439
# Cluster Verify steps
1440
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1441
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1442

    
1443
# Cluster Verify error classes
1444
CV_TCLUSTER = _constants.CV_TCLUSTER
1445
CV_TGROUP = _constants.CV_TGROUP
1446
CV_TNODE = _constants.CV_TNODE
1447
CV_TINSTANCE = _constants.CV_TINSTANCE
1448

    
1449
# Cluster Verify error codes and documentation
1450
CV_ECLUSTERCFG = _constants.CV_ECLUSTERCFG
1451
CV_ECLUSTERCERT = _constants.CV_ECLUSTERCERT
1452
CV_ECLUSTERFILECHECK = _constants.CV_ECLUSTERFILECHECK
1453
CV_ECLUSTERDANGLINGNODES = _constants.CV_ECLUSTERDANGLINGNODES
1454
CV_ECLUSTERDANGLINGINST = _constants.CV_ECLUSTERDANGLINGINST
1455
CV_EGROUPDIFFERENTPVSIZE = _constants.CV_EGROUPDIFFERENTPVSIZE
1456
CV_EINSTANCEBADNODE = _constants.CV_EINSTANCEBADNODE
1457
CV_EINSTANCEDOWN = _constants.CV_EINSTANCEDOWN
1458
CV_EINSTANCELAYOUT = _constants.CV_EINSTANCELAYOUT
1459
CV_EINSTANCEMISSINGDISK = _constants.CV_EINSTANCEMISSINGDISK
1460
CV_EINSTANCEFAULTYDISK = _constants.CV_EINSTANCEFAULTYDISK
1461
CV_EINSTANCEWRONGNODE = _constants.CV_EINSTANCEWRONGNODE
1462
CV_EINSTANCESPLITGROUPS = _constants.CV_EINSTANCESPLITGROUPS
1463
CV_EINSTANCEPOLICY = _constants.CV_EINSTANCEPOLICY
1464
CV_EINSTANCEUNSUITABLENODE = _constants.CV_EINSTANCEUNSUITABLENODE
1465
CV_EINSTANCEMISSINGCFGPARAMETER = _constants.CV_EINSTANCEMISSINGCFGPARAMETER
1466
CV_ENODEDRBD = _constants.CV_ENODEDRBD
1467
CV_ENODEDRBDVERSION = _constants.CV_ENODEDRBDVERSION
1468
CV_ENODEDRBDHELPER = _constants.CV_ENODEDRBDHELPER
1469
CV_ENODEFILECHECK = _constants.CV_ENODEFILECHECK
1470
CV_ENODEHOOKS = _constants.CV_ENODEHOOKS
1471
CV_ENODEHV = _constants.CV_ENODEHV
1472
CV_ENODELVM = _constants.CV_ENODELVM
1473
CV_ENODEN1 = _constants.CV_ENODEN1
1474
CV_ENODENET = _constants.CV_ENODENET
1475
CV_ENODEOS = _constants.CV_ENODEOS
1476
CV_ENODEORPHANINSTANCE = _constants.CV_ENODEORPHANINSTANCE
1477
CV_ENODEORPHANLV = _constants.CV_ENODEORPHANLV
1478
CV_ENODERPC = _constants.CV_ENODERPC
1479
CV_ENODESSH = _constants.CV_ENODESSH
1480
CV_ENODEVERSION = _constants.CV_ENODEVERSION
1481
CV_ENODESETUP = _constants.CV_ENODESETUP
1482
CV_ENODETIME = _constants.CV_ENODETIME
1483
CV_ENODEOOBPATH = _constants.CV_ENODEOOBPATH
1484
CV_ENODEUSERSCRIPTS = _constants.CV_ENODEUSERSCRIPTS
1485
CV_ENODEFILESTORAGEPATHS = _constants.CV_ENODEFILESTORAGEPATHS
1486
CV_ENODEFILESTORAGEPATHUNUSABLE = _constants.CV_ENODEFILESTORAGEPATHUNUSABLE
1487
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1488
  _constants.CV_ENODESHAREDFILESTORAGEPATHUNUSABLE
1489

    
1490
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1491
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1492

    
1493
# Node verify constants
1494
NV_BRIDGES = "bridges"
1495
NV_DRBDHELPER = "drbd-helper"
1496
NV_DRBDVERSION = "drbd-version"
1497
NV_DRBDLIST = "drbd-list"
1498
NV_EXCLUSIVEPVS = "exclusive-pvs"
1499
NV_FILELIST = "filelist"
1500
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1501
NV_FILE_STORAGE_PATH = "file-storage-path"
1502
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1503
NV_HVINFO = "hvinfo"
1504
NV_HVPARAMS = "hvparms"
1505
NV_HYPERVISOR = "hypervisor"
1506
NV_INSTANCELIST = "instancelist"
1507
NV_LVLIST = "lvlist"
1508
NV_MASTERIP = "master-ip"
1509
NV_NODELIST = "nodelist"
1510
NV_NODENETTEST = "node-net-test"
1511
NV_NODESETUP = "nodesetup"
1512
NV_OOB_PATHS = "oob-paths"
1513
NV_OSLIST = "oslist"
1514
NV_PVLIST = "pvlist"
1515
NV_TIME = "time"
1516
NV_USERSCRIPTS = "user-scripts"
1517
NV_VERSION = "version"
1518
NV_VGLIST = "vglist"
1519
NV_VMNODES = "vmnodes"
1520

    
1521
# Instance status
1522
INSTST_RUNNING = _constants.INSTST_RUNNING
1523
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1524
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1525
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1526
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1527
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1528
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1529
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1530
INSTST_ALL = _constants.INSTST_ALL
1531

    
1532
# Admin states
1533
ADMINST_UP = _constants.ADMINST_UP
1534
ADMINST_DOWN = _constants.ADMINST_DOWN
1535
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1536
ADMINST_ALL = _constants.ADMINST_ALL
1537

    
1538
# Node roles
1539
NR_REGULAR = _constants.NR_REGULAR
1540
NR_MASTER = _constants.NR_MASTER
1541
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1542
NR_DRAINED = _constants.NR_DRAINED
1543
NR_OFFLINE = _constants.NR_OFFLINE
1544
NR_ALL = _constants.NR_ALL
1545

    
1546
# SSL certificate check constants (in days)
1547
SSL_CERT_EXPIRATION_WARN = 30
1548
SSL_CERT_EXPIRATION_ERROR = 7
1549

    
1550
# Allocator framework constants
1551
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1552
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1553
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1554
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1555

    
1556
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1557
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1558
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1559
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1560
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1561
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1562

    
1563
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1564
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1565

    
1566
# Node evacuation
1567
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1568
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1569
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1570
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1571

    
1572
# Job queue
1573
JOB_QUEUE_VERSION = 1
1574
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1575
JOB_QUEUE_FILES_PERMS = 0640
1576

    
1577
JOB_ID_TEMPLATE = r"\d+"
1578
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1579

    
1580
# unchanged job return
1581
JOB_NOTCHANGED = "nochange"
1582

    
1583
# Job status
1584
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1585
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1586
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1587
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1588
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1589
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1590
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1591
JOBS_PENDING = _constants.JOBS_PENDING
1592
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1593
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1594

    
1595
# OpCode status
1596
# not yet finalized
1597
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1598
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1599
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1600
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1601
# finalized
1602
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1603
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1604
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1605
OPS_FINALIZED = _constants.OPS_FINALIZED
1606

    
1607
# OpCode priority
1608
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1609
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1610
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1611
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1612
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1613
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1614
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1615

    
1616
# Lock recalculate mode
1617
LOCKS_REPLACE = "replace"
1618
LOCKS_APPEND = "append"
1619

    
1620
# Lock timeout (sum) before we should go into blocking acquire (still
1621
# can be reset by priority change); computed as max time (10 hours)
1622
# before we should actually go into blocking acquire given that we
1623
# start from default priority level; in seconds
1624
# TODO
1625
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1626
LOCK_ATTEMPTS_MAXWAIT = 15.0
1627
LOCK_ATTEMPTS_MINWAIT = 1.0
1628

    
1629
# Execution log types
1630
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1631
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1632
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1633

    
1634
# /etc/hosts modification
1635
ETC_HOSTS_ADD = "add"
1636
ETC_HOSTS_REMOVE = "remove"
1637

    
1638
# Job queue test
1639
JQT_MSGPREFIX = "TESTMSG="
1640
JQT_EXPANDNAMES = "expandnames"
1641
JQT_EXEC = "exec"
1642
JQT_LOGMSG = "logmsg"
1643
JQT_STARTMSG = "startmsg"
1644
JQT_ALL = compat.UniqueFrozenset([
1645
  JQT_EXPANDNAMES,
1646
  JQT_EXEC,
1647
  JQT_LOGMSG,
1648
  JQT_STARTMSG,
1649
  ])
1650

    
1651
# Query resources
1652
QR_CLUSTER = "cluster"
1653
QR_INSTANCE = "instance"
1654
QR_NODE = "node"
1655
QR_LOCK = "lock"
1656
QR_GROUP = "group"
1657
QR_OS = "os"
1658
QR_JOB = "job"
1659
QR_EXPORT = "export"
1660
QR_NETWORK = "network"
1661
QR_EXTSTORAGE = "extstorage"
1662

    
1663
#: List of resources which can be queried using L{opcodes.OpQuery}
1664
QR_VIA_OP = compat.UniqueFrozenset([
1665
  QR_CLUSTER,
1666
  QR_INSTANCE,
1667
  QR_NODE,
1668
  QR_GROUP,
1669
  QR_OS,
1670
  QR_EXPORT,
1671
  QR_NETWORK,
1672
  QR_EXTSTORAGE,
1673
  ])
1674

    
1675
#: List of resources which can be queried using Local UniX Interface
1676
QR_VIA_LUXI = QR_VIA_OP.union([
1677
  QR_LOCK,
1678
  QR_JOB,
1679
  ])
1680

    
1681
#: List of resources which can be queried using RAPI
1682
QR_VIA_RAPI = QR_VIA_LUXI
1683

    
1684
# Query field types
1685
QFT_UNKNOWN = "unknown"
1686
QFT_TEXT = "text"
1687
QFT_BOOL = "bool"
1688
QFT_NUMBER = "number"
1689
QFT_UNIT = "unit"
1690
QFT_TIMESTAMP = "timestamp"
1691
QFT_OTHER = "other"
1692

    
1693
#: All query field types
1694
QFT_ALL = compat.UniqueFrozenset([
1695
  QFT_UNKNOWN,
1696
  QFT_TEXT,
1697
  QFT_BOOL,
1698
  QFT_NUMBER,
1699
  QFT_UNIT,
1700
  QFT_TIMESTAMP,
1701
  QFT_OTHER,
1702
  ])
1703

    
1704
# Query result field status (don't change or reuse values as they're used by
1705
# clients)
1706
#: Normal field status
1707
RS_NORMAL = 0
1708
#: Unknown field
1709
RS_UNKNOWN = 1
1710
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1711
RS_NODATA = 2
1712
#: Value unavailable/unsupported for item; if this field is supported
1713
#: but we cannot get the data for the moment, RS_NODATA or
1714
#: RS_OFFLINE should be used
1715
RS_UNAVAIL = 3
1716
#: Resource marked offline
1717
RS_OFFLINE = 4
1718

    
1719
RS_ALL = compat.UniqueFrozenset([
1720
  RS_NORMAL,
1721
  RS_UNKNOWN,
1722
  RS_NODATA,
1723
  RS_UNAVAIL,
1724
  RS_OFFLINE,
1725
  ])
1726

    
1727
#: Dictionary with special field cases and their verbose/terse formatting
1728
RSS_DESCRIPTION = {
1729
  RS_UNKNOWN: ("(unknown)", "??"),
1730
  RS_NODATA: ("(nodata)", "?"),
1731
  RS_OFFLINE: ("(offline)", "*"),
1732
  RS_UNAVAIL: ("(unavail)", "-"),
1733
  }
1734

    
1735
# max dynamic devices
1736
MAX_NICS = 8
1737
MAX_DISKS = 16
1738

    
1739
# SSCONF file prefix
1740
SSCONF_FILEPREFIX = "ssconf_"
1741
# SSCONF keys
1742
SS_CLUSTER_NAME = "cluster_name"
1743
SS_CLUSTER_TAGS = "cluster_tags"
1744
SS_FILE_STORAGE_DIR = "file_storage_dir"
1745
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
1746
SS_MASTER_CANDIDATES = "master_candidates"
1747
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
1748
SS_MASTER_IP = "master_ip"
1749
SS_MASTER_NETDEV = "master_netdev"
1750
SS_MASTER_NETMASK = "master_netmask"
1751
SS_MASTER_NODE = "master_node"
1752
SS_NODE_LIST = "node_list"
1753
SS_NODE_PRIMARY_IPS = "node_primary_ips"
1754
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
1755
SS_OFFLINE_NODES = "offline_nodes"
1756
SS_ONLINE_NODES = "online_nodes"
1757
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
1758
SS_INSTANCE_LIST = "instance_list"
1759
SS_RELEASE_VERSION = "release_version"
1760
SS_HYPERVISOR_LIST = "hypervisor_list"
1761
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
1762
SS_UID_POOL = "uid_pool"
1763
SS_NODEGROUPS = "nodegroups"
1764
SS_NETWORKS = "networks"
1765

    
1766
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1767
SS_HVPARAMS_PREF = "hvparams_"
1768

    
1769
# Hvparams keys:
1770
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1771
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1772
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1773
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1774
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1775
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1776

    
1777
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1778
  SS_HVPARAMS_XEN_PVM,
1779
  SS_HVPARAMS_XEN_FAKE,
1780
  SS_HVPARAMS_XEN_HVM,
1781
  SS_HVPARAMS_XEN_KVM,
1782
  SS_HVPARAMS_XEN_CHROOT,
1783
  SS_HVPARAMS_XEN_LXC,
1784
  ])
1785

    
1786
SS_FILE_PERMS = 0444
1787

    
1788
# cluster wide default parameters
1789
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1790

    
1791
HVC_DEFAULTS = {
1792
  HT_XEN_PVM: {
1793
    HV_USE_BOOTLOADER: False,
1794
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
1795
    HV_BOOTLOADER_ARGS: "",
1796
    HV_KERNEL_PATH: XEN_KERNEL,
1797
    HV_INITRD_PATH: "",
1798
    HV_ROOT_PATH: "/dev/xvda1",
1799
    HV_KERNEL_ARGS: "ro",
1800
    HV_MIGRATION_PORT: 8002,
1801
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1802
    HV_BLOCKDEV_PREFIX: "sd",
1803
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1804
    HV_CPU_MASK: CPU_PINNING_ALL,
1805
    HV_CPU_CAP: 0,
1806
    HV_CPU_WEIGHT: 256,
1807
    HV_VIF_SCRIPT: "",
1808
    HV_XEN_CMD: XEN_CMD_XM,
1809
    HV_XEN_CPUID: "",
1810
    HV_SOUNDHW: "",
1811
    },
1812
  HT_XEN_HVM: {
1813
    HV_BOOT_ORDER: "cd",
1814
    HV_CDROM_IMAGE_PATH: "",
1815
    HV_NIC_TYPE: HT_NIC_RTL8139,
1816
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1817
    HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY,
1818
    HV_VNC_PASSWORD_FILE: pathutils.VNC_PASSWORD_FILE,
1819
    HV_ACPI: True,
1820
    HV_PAE: True,
1821
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
1822
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
1823
    HV_MIGRATION_PORT: 8002,
1824
    HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
1825
    HV_USE_LOCALTIME: False,
1826
    HV_BLOCKDEV_PREFIX: "hd",
1827
    HV_PASSTHROUGH: "",
1828
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1829
    HV_CPU_MASK: CPU_PINNING_ALL,
1830
    HV_CPU_CAP: 0,
1831
    HV_CPU_WEIGHT: 256,
1832
    HV_VIF_TYPE: HT_HVM_VIF_IOEMU,
1833
    HV_VIF_SCRIPT: "",
1834
    HV_VIRIDIAN: False,
1835
    HV_XEN_CMD: XEN_CMD_XM,
1836
    HV_XEN_CPUID: "",
1837
    HV_SOUNDHW: "",
1838
    },
1839
  HT_KVM: {
1840
    HV_KVM_PATH: KVM_PATH,
1841
    HV_KERNEL_PATH: KVM_KERNEL,
1842
    HV_INITRD_PATH: "",
1843
    HV_KERNEL_ARGS: "ro",
1844
    HV_ROOT_PATH: "/dev/vda1",
1845
    HV_ACPI: True,
1846
    HV_SERIAL_CONSOLE: True,
1847
    HV_SERIAL_SPEED: 38400,
1848
    HV_VNC_BIND_ADDRESS: "",
1849
    HV_VNC_TLS: False,
1850
    HV_VNC_X509: "",
1851
    HV_VNC_X509_VERIFY: False,
1852
    HV_VNC_PASSWORD_FILE: "",
1853
    HV_KVM_SPICE_BIND: "",
1854
    HV_KVM_SPICE_IP_VERSION: IFACE_NO_IP_VERSION_SPECIFIED,
1855
    HV_KVM_SPICE_PASSWORD_FILE: "",
1856
    HV_KVM_SPICE_LOSSLESS_IMG_COMPR: "",
1857
    HV_KVM_SPICE_JPEG_IMG_COMPR: "",
1858
    HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: "",
1859
    HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: "",
1860
    HV_KVM_SPICE_AUDIO_COMPR: True,
1861
    HV_KVM_SPICE_USE_TLS: False,
1862
    HV_KVM_SPICE_TLS_CIPHERS: OPENSSL_CIPHERS,
1863
    HV_KVM_SPICE_USE_VDAGENT: True,
1864
    HV_KVM_FLOPPY_IMAGE_PATH: "",
1865
    HV_CDROM_IMAGE_PATH: "",
1866
    HV_KVM_CDROM2_IMAGE_PATH: "",
1867
    HV_BOOT_ORDER: HT_BO_DISK,
1868
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
1869
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1870
    HV_KVM_CDROM_DISK_TYPE: "",
1871
    HV_USB_MOUSE: "",
1872
    HV_KEYMAP: "",
1873
    HV_MIGRATION_PORT: 8102,
1874
    HV_MIGRATION_BANDWIDTH: 32, # MiB/s
1875
    HV_MIGRATION_DOWNTIME: 30,  # ms
1876
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1877
    HV_USE_LOCALTIME: False,
1878
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
1879
    HV_SECURITY_MODEL: HT_SM_NONE,
1880
    HV_SECURITY_DOMAIN: "",
1881
    HV_KVM_FLAG: "",
1882
    HV_VHOST_NET: False,
1883
    HV_KVM_USE_CHROOT: False,
1884
    HV_MEM_PATH: "",
1885
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1886
    HV_CPU_MASK: CPU_PINNING_ALL,
1887
    HV_CPU_TYPE: "",
1888
    HV_CPU_CORES: 0,
1889
    HV_CPU_THREADS: 0,
1890
    HV_CPU_SOCKETS: 0,
1891
    HV_SOUNDHW: "",
1892
    HV_USB_DEVICES: "",
1893
    HV_VGA: "",
1894
    HV_KVM_EXTRA: "",
1895
    HV_KVM_MACHINE_VERSION: "",
1896
    HV_VNET_HDR: True,
1897
    },
1898
  HT_FAKE: {
1899
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1900
  },
1901
  HT_CHROOT: {
1902
    HV_INIT_SCRIPT: "/ganeti-chroot",
1903
    },
1904
  HT_LXC: {
1905
    HV_CPU_MASK: "",
1906
    },
1907
  }
1908

    
1909
HVC_GLOBALS = compat.UniqueFrozenset([
1910
  HV_MIGRATION_PORT,
1911
  HV_MIGRATION_BANDWIDTH,
1912
  HV_MIGRATION_MODE,
1913
  HV_XEN_CMD,
1914
  ])
1915

    
1916
BEC_DEFAULTS = {
1917
  BE_MINMEM: 128,
1918
  BE_MAXMEM: 128,
1919
  BE_VCPUS: 1,
1920
  BE_AUTO_BALANCE: True,
1921
  BE_ALWAYS_FAILOVER: False,
1922
  BE_SPINDLE_USE: 1,
1923
  }
1924

    
1925
NDC_DEFAULTS = {
1926
  ND_OOB_PROGRAM: "",
1927
  ND_SPINDLE_COUNT: 1,
1928
  ND_EXCLUSIVE_STORAGE: False,
1929
  ND_OVS: False,
1930
  ND_OVS_NAME: DEFAULT_OVS,
1931
  ND_OVS_LINK: ""
1932
  }
1933

    
1934
NDC_GLOBALS = compat.UniqueFrozenset([
1935
  ND_EXCLUSIVE_STORAGE,
1936
  ])
1937

    
1938
DISK_LD_DEFAULTS = {
1939
  DT_DRBD8: {
1940
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1941
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1942
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1943
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1944
    LDP_DISK_CUSTOM: "",
1945
    LDP_NET_CUSTOM: "",
1946
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1947
    LDP_DYNAMIC_RESYNC: False,
1948

    
1949
    # The default values for the DRBD dynamic resync speed algorithm
1950
    # are taken from the drbsetup 8.3.11 man page, except for
1951
    # c-plan-ahead (that we don't need to set to 0, because we have a
1952
    # separate option to enable it) and for c-max-rate, that we cap to
1953
    # the default value for the static resync rate.
1954
    LDP_PLAN_AHEAD: 20, # ds
1955
    LDP_FILL_TARGET: 0, # sectors
1956
    LDP_DELAY_TARGET: 1, # ds
1957
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
1958
    LDP_MIN_RATE: 4 * 1024, # KiB/s
1959
    },
1960
  DT_PLAIN: {
1961
    LDP_STRIPES: _constants.LVM_STRIPECOUNT
1962
    },
1963
  DT_FILE: {},
1964
  DT_SHARED_FILE: {},
1965
  DT_BLOCK: {},
1966
  DT_RBD: {
1967
    LDP_POOL: "rbd",
1968
    LDP_ACCESS: DISK_KERNELSPACE,
1969
    },
1970
  DT_EXT: {},
1971
  }
1972

    
1973
# readability shortcuts
1974
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1975
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1976

    
1977
DISK_DT_DEFAULTS = {
1978
  DT_PLAIN: {
1979
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1980
    },
1981
  DT_DRBD8: {
1982
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1983
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1984
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1985
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1986
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1987
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1988
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1989
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1990
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1991
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1992
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1993
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1994
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1995
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1996
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1997
    },
1998
  DT_DISKLESS: {},
1999
  DT_FILE: {},
2000
  DT_SHARED_FILE: {},
2001
  DT_BLOCK: {},
2002
  DT_RBD: {
2003
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
2004
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
2005
    },
2006
  DT_EXT: {},
2007
  }
2008

    
2009
# we don't want to export the shortcuts
2010
del _LV_DEFAULTS, _DRBD_DEFAULTS
2011

    
2012
NICC_DEFAULTS = {
2013
  NIC_MODE: NIC_MODE_BRIDGED,
2014
  NIC_LINK: DEFAULT_BRIDGE,
2015
  NIC_VLAN: VALUE_HS_NOTHING,
2016
  }
2017

    
2018
# All of the following values are quite arbitrarily - there are no
2019
# "good" defaults, these must be customised per-site
2020
ISPECS_MINMAX_DEFAULTS = {
2021
  ISPECS_MIN: {
2022
    ISPEC_MEM_SIZE: 128,
2023
    ISPEC_CPU_COUNT: 1,
2024
    ISPEC_DISK_COUNT: 1,
2025
    ISPEC_DISK_SIZE: 1024,
2026
    ISPEC_NIC_COUNT: 1,
2027
    ISPEC_SPINDLE_USE: 1,
2028
    },
2029
  ISPECS_MAX: {
2030
    ISPEC_MEM_SIZE: 32768,
2031
    ISPEC_CPU_COUNT: 8,
2032
    ISPEC_DISK_COUNT: MAX_DISKS,
2033
    ISPEC_DISK_SIZE: 1024 * 1024,
2034
    ISPEC_NIC_COUNT: MAX_NICS,
2035
    ISPEC_SPINDLE_USE: 12,
2036
    },
2037
  }
2038
IPOLICY_DEFAULTS = {
2039
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
2040
  ISPECS_STD: {
2041
    ISPEC_MEM_SIZE: 128,
2042
    ISPEC_CPU_COUNT: 1,
2043
    ISPEC_DISK_COUNT: 1,
2044
    ISPEC_DISK_SIZE: 1024,
2045
    ISPEC_NIC_COUNT: 1,
2046
    ISPEC_SPINDLE_USE: 1,
2047
    },
2048
  IPOLICY_DTS: list(DISK_TEMPLATES),
2049
  IPOLICY_VCPU_RATIO: 4.0,
2050
  IPOLICY_SPINDLE_RATIO: 32.0,
2051
  }
2052

    
2053
MASTER_POOL_SIZE_DEFAULT = 10
2054

    
2055
# Exclusive storage:
2056
# Error margin used to compare physical disks
2057
PART_MARGIN = .01
2058
# Space reserved when creating instance disks
2059
PART_RESERVED = .02
2060

    
2061
CONFD_PROTOCOL_VERSION = 1
2062

    
2063
CONFD_REQ_PING = 0
2064
CONFD_REQ_NODE_ROLE_BYNAME = 1
2065
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
2066
CONFD_REQ_CLUSTER_MASTER = 3
2067
CONFD_REQ_NODE_PIP_LIST = 4
2068
CONFD_REQ_MC_PIP_LIST = 5
2069
CONFD_REQ_INSTANCES_IPS_LIST = 6
2070
CONFD_REQ_NODE_DRBD = 7
2071
CONFD_REQ_NODE_INSTANCES = 8
2072

    
2073
# Confd request query fields. These are used to narrow down queries.
2074
# These must be strings rather than integers, because json-encoding
2075
# converts them to strings anyway, as they're used as dict-keys.
2076
CONFD_REQQ_LINK = "0"
2077
CONFD_REQQ_IP = "1"
2078
CONFD_REQQ_IPLIST = "2"
2079
CONFD_REQQ_FIELDS = "3"
2080

    
2081
CONFD_REQFIELD_NAME = "0"
2082
CONFD_REQFIELD_IP = "1"
2083
CONFD_REQFIELD_MNODE_PIP = "2"
2084

    
2085
CONFD_REQS = compat.UniqueFrozenset([
2086
  CONFD_REQ_PING,
2087
  CONFD_REQ_NODE_ROLE_BYNAME,
2088
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
2089
  CONFD_REQ_CLUSTER_MASTER,
2090
  CONFD_REQ_NODE_PIP_LIST,
2091
  CONFD_REQ_MC_PIP_LIST,
2092
  CONFD_REQ_INSTANCES_IPS_LIST,
2093
  CONFD_REQ_NODE_DRBD,
2094
  ])
2095

    
2096
CONFD_REPL_STATUS_OK = 0
2097
CONFD_REPL_STATUS_ERROR = 1
2098
CONFD_REPL_STATUS_NOTIMPLEMENTED = 2
2099

    
2100
CONFD_REPL_STATUSES = compat.UniqueFrozenset([
2101
  CONFD_REPL_STATUS_OK,
2102
  CONFD_REPL_STATUS_ERROR,
2103
  CONFD_REPL_STATUS_NOTIMPLEMENTED,
2104
  ])
2105

    
2106
(CONFD_NODE_ROLE_MASTER,
2107
 CONFD_NODE_ROLE_CANDIDATE,
2108
 CONFD_NODE_ROLE_OFFLINE,
2109
 CONFD_NODE_ROLE_DRAINED,
2110
 CONFD_NODE_ROLE_REGULAR,
2111
 ) = range(5)
2112

    
2113
# A few common errors for confd
2114
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
2115
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
2116
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
2117

    
2118
# Each request is "salted" by the current timestamp.
2119
# This constants decides how many seconds of skew to accept.
2120
# TODO: make this a default and allow the value to be more configurable
2121
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
2122

    
2123
# When we haven't reloaded the config for more than this amount of
2124
# seconds, we force a test to see if inotify is betraying us. Using a
2125
# prime number to ensure we get less chance of 'same wakeup' with
2126
# other processes.
2127
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
2128

    
2129
# If we receive more than one update in this amount of microseconds,
2130
# we move to polling every RATELIMIT seconds, rather than relying on
2131
# inotify, to be able to serve more requests.
2132
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
2133

    
2134
# Magic number prepended to all confd queries.
2135
# This allows us to distinguish different types of confd protocols and handle
2136
# them. For example by changing this we can move the whole payload to be
2137
# compressed, or move away from json.
2138
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
2139

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

    
2145
# Timeout in seconds to expire pending query request in the confd client
2146
# library. We don't actually expect any answer more than 10 seconds after we
2147
# sent a request.
2148
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
2149

    
2150
# Maximum UDP datagram size.
2151
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
2152
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
2153
#   (assuming we can't use jumbo frames)
2154
# We just set this to 60K, which should be enough
2155
MAX_UDP_DATA_SIZE = 61440
2156

    
2157
# User-id pool minimum/maximum acceptable user-ids.
2158
UIDPOOL_UID_MIN = 0
2159
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2160

    
2161
# Name or path of the pgrep command
2162
PGREP = "pgrep"
2163

    
2164
# Name of the node group that gets created at cluster init or upgrade
2165
INITIAL_NODE_GROUP_NAME = "default"
2166

    
2167
# Possible values for NodeGroup.alloc_policy
2168
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2169
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2170
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2171
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2172

    
2173
# Temporary external/shared storage parameters
2174
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2175

    
2176
# qemu-img path, required for ovfconverter
2177
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2178

    
2179
# Whether htools was enabled at compilation time
2180
HTOOLS = _constants.HTOOLS
2181
# The hail iallocator
2182
IALLOC_HAIL = "hail"
2183

    
2184
# Fake opcodes for functions that have hooks attached to them via
2185
# backend.RunLocalHooks
2186
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2187
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2188

    
2189
# SSH key types
2190
SSHK_RSA = "rsa"
2191
SSHK_DSA = "dsa"
2192
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2193

    
2194
# SSH authorized key types
2195
SSHAK_RSA = "ssh-rsa"
2196
SSHAK_DSS = "ssh-dss"
2197
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2198

    
2199
# SSH setup
2200
SSHS_CLUSTER_NAME = "cluster_name"
2201
SSHS_SSH_HOST_KEY = "ssh_host_key"
2202
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2203
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2204

    
2205
#: Key files for SSH daemon
2206
SSH_DAEMON_KEYFILES = {
2207
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2208
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2209
  }
2210

    
2211
# Node daemon setup
2212
NDS_CLUSTER_NAME = "cluster_name"
2213
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2214
NDS_SSCONF = "ssconf"
2215
NDS_START_NODE_DAEMON = "start_node_daemon"
2216

    
2217
# Path generating random UUID
2218
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2219

    
2220
# Regex string for verifying a UUID
2221
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2222

    
2223
# Auto-repair tag prefixes
2224
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2225
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2226
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2227
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2228
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2229

    
2230
# Auto-repair levels
2231
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2232
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2233
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2234
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2235
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2236

    
2237
# Auto-repair results
2238
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2239
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2240
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2241
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2242

    
2243
# The version identifier for builtin data collectors
2244
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2245

    
2246
# The reason trail opcode parameter name
2247
OPCODE_REASON = _constants.OPCODE_REASON
2248

    
2249
# The source reasons for the execution of an OpCode
2250
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2251
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2252
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2253
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2254
OPCODE_REASON_SRC_USER = "gnt:user"
2255

    
2256
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2257
  OPCODE_REASON_SRC_CLIENT,
2258
  OPCODE_REASON_SRC_NODED,
2259
  OPCODE_REASON_SRC_OPCODE,
2260
  OPCODE_REASON_SRC_RLIB2,
2261
  OPCODE_REASON_SRC_USER,
2262
  ])
2263

    
2264
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2265

    
2266
# CPU load collector variables
2267
STAT_FILE = _constants.STAT_FILE
2268
CPUAVGLOAD_BUFFER_SIZE = 150
2269
CPUAVGLOAD_WINDOW_SIZE = 600
2270

    
2271
# Mond's variable for periodical data collection
2272
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2273

    
2274
# MonD's latest API version
2275
MOND_LATEST_API_VERSION = 1
2276

    
2277
# Timeouts for upgrades
2278

    
2279
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2280
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2281

    
2282
# Do not re-export imported modules
2283
del re, _vcsversion, _constants, socket, pathutils, compat
2284

    
2285

    
2286
ALLOCATABLE_KEY = "allocatable"
2287
FAILED_KEY = "failed"