Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 74129b52

History | View | Annotate | Download (64.6 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
DIR_VERSION = _constants.DIR_VERSION
52

    
53
CONFIG_MAJOR = _constants.CONFIG_MAJOR
54
CONFIG_MINOR = _constants.CONFIG_MINOR
55
CONFIG_REVISION = _constants.CONFIG_REVISION
56
CONFIG_VERSION = _constants.CONFIG_VERSION
57

    
58
#: RPC protocol version
59
PROTOCOL_VERSION = _constants.PROTOCOL_VERSION
60

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

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

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

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

    
102
# Wipe
103
DD_CMD = _constants.DD_CMD
104
MAX_WIPE_CHUNK = _constants.MAX_WIPE_CHUNK
105
MIN_WIPE_CHUNK_PERCENT = _constants.MIN_WIPE_CHUNK_PERCENT
106

    
107
RUN_DIRS_MODE = _constants.RUN_DIRS_MODE
108
SECURE_DIR_MODE = _constants.SECURE_DIR_MODE
109
SECURE_FILE_MODE = _constants.SECURE_FILE_MODE
110
ADOPTABLE_BLOCKDEV_ROOT = _constants.ADOPTABLE_BLOCKDEV_ROOT
111
ENABLE_CONFD = _constants.ENABLE_CONFD
112
ENABLE_MOND = _constants.ENABLE_MOND
113
ENABLE_SPLIT_QUERY = _constants.ENABLE_SPLIT_QUERY
114
ENABLE_RESTRICTED_COMMANDS = _constants.ENABLE_RESTRICTED_COMMANDS
115

    
116
# SSH constants
117
SSH = _constants.SSH
118
SCP = _constants.SCP
119

    
120
NODED = _constants.NODED
121
CONFD = _constants.CONFD
122
LUXID = _constants.LUXID
123
RAPI = _constants.RAPI
124
MASTERD = _constants.MASTERD
125
MOND = _constants.MOND
126

    
127
DAEMONS = _constants.DAEMONS
128

    
129
DAEMONS_PORTS = _constants.DAEMONS_PORTS
130

    
131
DEFAULT_NODED_PORT = _constants.DEFAULT_NODED_PORT
132
DEFAULT_CONFD_PORT = _constants.DEFAULT_CONFD_PORT
133
DEFAULT_MOND_PORT = _constants.DEFAULT_MOND_PORT
134
DEFAULT_RAPI_PORT = _constants.DEFAULT_RAPI_PORT
135

    
136
FIRST_DRBD_PORT = _constants.FIRST_DRBD_PORT
137
LAST_DRBD_PORT = _constants.LAST_DRBD_PORT
138

    
139
DAEMONS_LOGBASE = _constants.DAEMONS_LOGBASE
140

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

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

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

    
153
VALID_EXTRA_LOGREASONS = compat.UniqueFrozenset([
154
  EXTRA_LOGREASON_ACCESS,
155
  EXTRA_LOGREASON_ERROR,
156
  ])
157

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

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

    
172
DEV_CONSOLE = _constants.DEV_CONSOLE
173

    
174
PROC_MOUNTS = "/proc/mounts"
175

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

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

    
191
EXPORT_CONF_FILE = "config.ini"
192

    
193
XEN_BOOTLOADER = _constants.XEN_BOOTLOADER
194
XEN_KERNEL = _constants.XEN_KERNEL
195
XEN_INITRD = _constants.XEN_INITRD
196
XEN_CMD_XM = _constants.XEN_CMD_XM
197
XEN_CMD_XL = _constants.XEN_CMD_XL
198
KNOWN_XEN_COMMANDS = _constants.KNOWN_XEN_COMMANDS
199

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

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

    
218
#: Console as SSH command
219
CONS_SSH = "ssh"
220

    
221
#: Console as VNC server
222
CONS_VNC = "vnc"
223

    
224
#: Console as SPICE server
225
CONS_SPICE = "spice"
226

    
227
#: Display a message for console access
228
CONS_MESSAGE = "msg"
229

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

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

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

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

    
254
# Default validity of certificates in days
255
X509_CERT_DEFAULT_VALIDITY = 365 * 5
256

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

    
260
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
261

    
262
# Import/export daemon mode
263
IEM_IMPORT = "import"
264
IEM_EXPORT = "export"
265

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

    
274
IE_CUSTOM_SIZE = "fd"
275

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

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

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

    
294

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

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

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

    
313
HKR_SKIP = 0
314
HKR_FAIL = 1
315
HKR_SUCCESS = 2
316

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

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

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

    
342
# Storage operations
343
SO_FIX_CONSISTENCY = "fix-consistency"
344

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

    
356
MODIFIABLE_STORAGE_FIELDS = {
357
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
358
  }
359

    
360
VALID_STORAGE_OPERATIONS = {
361
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
362
  }
363

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
493
#: Size of DRBD meta block device
494
DRBD_META_SIZE = 128
495

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

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

    
514
# rbd tool command
515
RBD_CMD = "rbd"
516

    
517
# file backend driver
518
FD_BLKTAP = _constants.FD_BLKTAP
519
FD_LOOP = _constants.FD_LOOP
520

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

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

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

    
544
# Instance export mode
545
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
546
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
547
EXPORT_MODES = _constants.EXPORT_MODES
548

    
549
# instance creation modes
550
INSTANCE_CREATE = _constants.INSTANCE_CREATE
551
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
552
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
553
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
554

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

    
559
# Remote import/export certificate validity in seconds
560
RIE_CERT_VALIDITY = 24 * 60 * 60
561

    
562
# Overall timeout for establishing connection
563
RIE_CONNECT_TIMEOUT = 180
564

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

    
568
# Export only: number of attempts to connect
569
RIE_CONNECT_RETRIES = 10
570

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

    
574
FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP])
575

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

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

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

    
599
#: Exit code for query operations with unknown fields
600
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
601

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

    
610
MAX_TAG_LEN = _constants.MAX_TAG_LEN
611
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
612

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

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

    
642
#: Key for job IDs in opcode result
643
JOB_IDS_KEY = "jobs"
644

    
645
# runparts results
646
(RUNPARTS_SKIP,
647
 RUNPARTS_RUN,
648
 RUNPARTS_ERR) = range(3)
649

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

    
656
# RPC constants
657
(RPC_ENCODING_NONE,
658
 RPC_ENCODING_ZLIB_BASE64) = range(2)
659

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

    
668
# Timeout for connecting to nodes (seconds)
669
RPC_CONNECT_TIMEOUT = 5
670

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

    
685
OS_API_FILE = "ganeti_api_version"
686
OS_VARIANTS_FILE = "variants.list"
687
OS_PARAMETERS_FILE = "parameters.list"
688

    
689
OS_VALIDATE_PARAMETERS = "parameters"
690
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
691

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

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

    
718
ES_PARAMETERS_FILE = "parameters.list"
719

    
720
# reboot types
721
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
722
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
723
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
724
REBOOT_TYPES = _constants.REBOOT_TYPES
725

    
726
# instance reboot behaviors
727
INSTANCE_REBOOT_ALLOWED = "reboot"
728
INSTANCE_REBOOT_EXIT = "exit"
729

    
730
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
731
  INSTANCE_REBOOT_ALLOWED,
732
  INSTANCE_REBOOT_EXIT,
733
  ])
734

    
735
VTYPE_STRING = _constants.VTYPE_STRING
736
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
737
VTYPE_BOOL = _constants.VTYPE_BOOL
738
VTYPE_SIZE = _constants.VTYPE_SIZE
739
VTYPE_INT = _constants.VTYPE_INT
740
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
741

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

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

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

    
840

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

    
916
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
917

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

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

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

    
945
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
946
  HV_MIGRATION_FAILED,
947
  HV_MIGRATION_CANCELLED,
948
  ])
949

    
950
# KVM-specific statuses
951
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
952

    
953
# Node info keys
954
HV_NODEINFO_KEY_VERSION = "hv_version"
955

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

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

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

    
979
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
980

    
981
# Disk state
982
DS_DISK_TOTAL = "disk_total"
983
DS_DISK_RESERVED = "disk_reserved"
984
DS_DISK_OVERHEAD = "disk_overhead"
985

    
986
DS_DEFAULTS = {
987
  DS_DISK_TOTAL: 0,
988
  DS_DISK_RESERVED: 0,
989
  DS_DISK_OVERHEAD: 0,
990
  }
991

    
992
DSS_PARAMETER_TYPES = {
993
  DS_DISK_TOTAL: VTYPE_INT,
994
  DS_DISK_RESERVED: VTYPE_INT,
995
  DS_DISK_OVERHEAD: VTYPE_INT,
996
  }
997

    
998
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
999
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
1000

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

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

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

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

    
1031
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1032

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

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

    
1050
ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys())
1051

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

    
1060
ISPECS_MINMAX_KEYS = compat.UniqueFrozenset([
1061
  ISPECS_MIN,
1062
  ISPECS_MAX,
1063
  ])
1064

    
1065
IPOLICY_PARAMETERS = compat.UniqueFrozenset([
1066
  IPOLICY_VCPU_RATIO,
1067
  IPOLICY_SPINDLE_RATIO,
1068
  ])
1069

    
1070
IPOLICY_ALL_KEYS = (IPOLICY_PARAMETERS |
1071
                    frozenset([ISPECS_MINMAX, ISPECS_STD, IPOLICY_DTS]))
1072

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

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

    
1090
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
1091

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

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

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

    
1179
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1180

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

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

    
1196
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1197

    
1198
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1199
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1200

    
1201
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1202
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1203
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1204
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1205
OOB_STATUSES = _constants.OOB_STATUSES
1206

    
1207
# Instance Parameters Profile
1208
PP_DEFAULT = "default"
1209

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

    
1215
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1216
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1217
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1218
NIC_IP_POOL = _constants.NIC_IP_POOL
1219
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1220

    
1221
RESERVE_ACTION = "reserve"
1222
RELEASE_ACTION = "release"
1223

    
1224
NICS_PARAMETER_TYPES = {
1225
  NIC_MODE: VTYPE_STRING,
1226
  NIC_LINK: VTYPE_STRING,
1227
  NIC_VLAN: VTYPE_MAYBE_STRING,
1228
  }
1229

    
1230
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1231

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

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

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

    
1284
VNC_BASE_PORT = 5900
1285
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1286

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

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

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

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

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

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

    
1358
# Mouse types:
1359
HT_MOUSE_MOUSE = "mouse"
1360
HT_MOUSE_TABLET = "tablet"
1361

    
1362
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1363
  HT_MOUSE_MOUSE,
1364
  HT_MOUSE_TABLET,
1365
  ])
1366

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

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

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

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

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

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

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

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

    
1419
# Security models
1420
HT_SM_NONE = "none"
1421
HT_SM_USER = "user"
1422
HT_SM_POOL = "pool"
1423

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

    
1430
# Kvm flag values
1431
HT_KVM_ENABLED = "enabled"
1432
HT_KVM_DISABLED = "disabled"
1433

    
1434
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1435

    
1436
# Migration type
1437
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1438
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1439
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1440

    
1441
# Cluster Verify steps
1442
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1443
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1444

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

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

    
1492
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1493
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1494

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

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

    
1534
# Admin states
1535
ADMINST_UP = _constants.ADMINST_UP
1536
ADMINST_DOWN = _constants.ADMINST_DOWN
1537
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1538
ADMINST_ALL = _constants.ADMINST_ALL
1539

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

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

    
1552
# Allocator framework constants
1553
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1554
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1555
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1556
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1557

    
1558
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1559
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1560
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1561
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1562
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1563
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1564

    
1565
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1566
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1567

    
1568
# Node evacuation
1569
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1570
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1571
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1572
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1573

    
1574
# Job queue
1575
JOB_QUEUE_VERSION = 1
1576
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1577
JOB_QUEUE_FILES_PERMS = 0640
1578

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

    
1582
# unchanged job return
1583
JOB_NOTCHANGED = "nochange"
1584

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

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

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

    
1618
# Lock recalculate mode
1619
LOCKS_REPLACE = "replace"
1620
LOCKS_APPEND = "append"
1621

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

    
1631
# Execution log types
1632
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1633
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1634
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1635

    
1636
# /etc/hosts modification
1637
ETC_HOSTS_ADD = "add"
1638
ETC_HOSTS_REMOVE = "remove"
1639

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

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

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

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

    
1683
#: List of resources which can be queried using RAPI
1684
QR_VIA_RAPI = QR_VIA_LUXI
1685

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

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

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

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

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

    
1737
# max dynamic devices
1738
MAX_NICS = 8
1739
MAX_DISKS = 16
1740

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

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

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

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

    
1788
SS_FILE_PERMS = 0444
1789

    
1790
# cluster wide default parameters
1791
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1792

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

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

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

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

    
1936
NDC_GLOBALS = compat.UniqueFrozenset([
1937
  ND_EXCLUSIVE_STORAGE,
1938
  ])
1939

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

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

    
1975
# readability shortcuts
1976
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1977
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1978

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

    
2011
# we don't want to export the shortcuts
2012
del _LV_DEFAULTS, _DRBD_DEFAULTS
2013

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

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

    
2055
MASTER_POOL_SIZE_DEFAULT = 10
2056

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

    
2063
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
2064

    
2065
CONFD_REQ_PING = _constants.CONFD_REQ_PING
2066
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
2067
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
2068
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
2069
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
2070
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
2071
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
2072
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
2073
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
2074
CONFD_REQS = _constants.CONFD_REQS
2075

    
2076
# Confd request query fields. These are used to narrow down queries.
2077
# These must be strings rather than integers, because json-encoding
2078
# converts them to strings anyway, as they're used as dict-keys.
2079
CONFD_REQQ_LINK = _constants.CONFD_REQQ_LINK
2080
CONFD_REQQ_IP = _constants.CONFD_REQQ_IP
2081
CONFD_REQQ_IPLIST = _constants.CONFD_REQQ_IPLIST
2082
CONFD_REQQ_FIELDS = _constants.CONFD_REQQ_FIELDS
2083

    
2084
# FIXME: perhaps update code that uses these constants to deal with
2085
# integers instead of strings
2086
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
2087
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
2088
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
2089

    
2090
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
2091
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
2092
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
2093
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
2094

    
2095
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
2096
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
2097
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
2098
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
2099
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
2100

    
2101
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
2102
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
2103
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
2104

    
2105
# Each request is "salted" by the current timestamp.
2106
# This constants decides how many seconds of skew to accept.
2107
# TODO: make this a default and allow the value to be more configurable
2108
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
2109

    
2110
# When we haven't reloaded the config for more than this amount of
2111
# seconds, we force a test to see if inotify is betraying us. Using a
2112
# prime number to ensure we get less chance of 'same wakeup' with
2113
# other processes.
2114
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
2115

    
2116
# If we receive more than one update in this amount of microseconds,
2117
# we move to polling every RATELIMIT seconds, rather than relying on
2118
# inotify, to be able to serve more requests.
2119
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
2120

    
2121
# Magic number prepended to all confd queries.
2122
# This allows us to distinguish different types of confd protocols and handle
2123
# them. For example by changing this we can move the whole payload to be
2124
# compressed, or move away from json.
2125
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
2126

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

    
2132
# Timeout in seconds to expire pending query request in the confd client
2133
# library. We don't actually expect any answer more than 10 seconds after we
2134
# sent a request.
2135
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
2136

    
2137
# Maximum UDP datagram size.
2138
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
2139
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
2140
#   (assuming we can't use jumbo frames)
2141
# We just set this to 60K, which should be enough
2142
MAX_UDP_DATA_SIZE = 61440
2143

    
2144
# User-id pool minimum/maximum acceptable user-ids.
2145
UIDPOOL_UID_MIN = 0
2146
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2147

    
2148
# Name or path of the pgrep command
2149
PGREP = "pgrep"
2150

    
2151
# Name of the node group that gets created at cluster init or upgrade
2152
INITIAL_NODE_GROUP_NAME = "default"
2153

    
2154
# Possible values for NodeGroup.alloc_policy
2155
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2156
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2157
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2158
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2159

    
2160
# Temporary external/shared storage parameters
2161
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2162

    
2163
# qemu-img path, required for ovfconverter
2164
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2165

    
2166
# Whether htools was enabled at compilation time
2167
HTOOLS = _constants.HTOOLS
2168
# The hail iallocator
2169
IALLOC_HAIL = "hail"
2170

    
2171
# Fake opcodes for functions that have hooks attached to them via
2172
# backend.RunLocalHooks
2173
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2174
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2175

    
2176
# SSH key types
2177
SSHK_RSA = "rsa"
2178
SSHK_DSA = "dsa"
2179
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2180

    
2181
# SSH authorized key types
2182
SSHAK_RSA = "ssh-rsa"
2183
SSHAK_DSS = "ssh-dss"
2184
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2185

    
2186
# SSH setup
2187
SSHS_CLUSTER_NAME = "cluster_name"
2188
SSHS_SSH_HOST_KEY = "ssh_host_key"
2189
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2190
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2191

    
2192
#: Key files for SSH daemon
2193
SSH_DAEMON_KEYFILES = {
2194
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2195
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2196
  }
2197

    
2198
# Node daemon setup
2199
NDS_CLUSTER_NAME = "cluster_name"
2200
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2201
NDS_SSCONF = "ssconf"
2202
NDS_START_NODE_DAEMON = "start_node_daemon"
2203

    
2204
# Path generating random UUID
2205
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2206

    
2207
# Regex string for verifying a UUID
2208
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2209

    
2210
# Auto-repair tag prefixes
2211
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2212
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2213
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2214
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2215
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2216

    
2217
# Auto-repair levels
2218
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2219
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2220
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2221
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2222
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2223

    
2224
# Auto-repair results
2225
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2226
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2227
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2228
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2229

    
2230
# The version identifier for builtin data collectors
2231
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2232

    
2233
# The reason trail opcode parameter name
2234
OPCODE_REASON = _constants.OPCODE_REASON
2235

    
2236
# The source reasons for the execution of an OpCode
2237
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2238
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2239
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2240
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2241
OPCODE_REASON_SRC_USER = "gnt:user"
2242

    
2243
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2244
  OPCODE_REASON_SRC_CLIENT,
2245
  OPCODE_REASON_SRC_NODED,
2246
  OPCODE_REASON_SRC_OPCODE,
2247
  OPCODE_REASON_SRC_RLIB2,
2248
  OPCODE_REASON_SRC_USER,
2249
  ])
2250

    
2251
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2252

    
2253
# CPU load collector variables
2254
STAT_FILE = _constants.STAT_FILE
2255
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2256
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2257

    
2258
# Mond's variable for periodical data collection
2259
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2260

    
2261
# MonD's latest API version
2262
MOND_LATEST_API_VERSION = 1
2263

    
2264
# Timeouts for upgrades
2265

    
2266
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2267
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2268

    
2269
# Do not re-export imported modules
2270
del re, _vcsversion, _constants, socket, pathutils, compat
2271

    
2272

    
2273
ALLOCATABLE_KEY = "allocatable"
2274
FAILED_KEY = "failed"