Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ c87997d2

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 = _constants.OS_API_V10
36
OS_API_V15 = _constants.OS_API_V15
37
OS_API_V20 = _constants.OS_API_V20
38
OS_API_VERSIONS = _constants.OS_API_VERSIONS
39
VCS_VERSION = _vcsversion.VCS_VERSION
40
EXPORT_VERSION = 0
41
RAPI_VERSION = 2
42

    
43
VERSION_MAJOR = _constants.VERSION_MAJOR
44
VERSION_MINOR = _constants.VERSION_MINOR
45
VERSION_REVISION = _constants.VERSION_REVISION
46

    
47
DIR_VERSION = _constants.DIR_VERSION
48

    
49
CONFIG_MAJOR = _constants.CONFIG_MAJOR
50
CONFIG_MINOR = _constants.CONFIG_MINOR
51
CONFIG_REVISION = _constants.CONFIG_REVISION
52
CONFIG_VERSION = _constants.CONFIG_VERSION
53

    
54
#: RPC protocol version
55
PROTOCOL_VERSION = _constants.PROTOCOL_VERSION
56

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

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

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

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

    
98
# Wipe
99
DD_CMD = _constants.DD_CMD
100
MAX_WIPE_CHUNK = _constants.MAX_WIPE_CHUNK
101
MIN_WIPE_CHUNK_PERCENT = _constants.MIN_WIPE_CHUNK_PERCENT
102

    
103
RUN_DIRS_MODE = _constants.RUN_DIRS_MODE
104
SECURE_DIR_MODE = _constants.SECURE_DIR_MODE
105
SECURE_FILE_MODE = _constants.SECURE_FILE_MODE
106
ADOPTABLE_BLOCKDEV_ROOT = _constants.ADOPTABLE_BLOCKDEV_ROOT
107
ENABLE_CONFD = _constants.ENABLE_CONFD
108
ENABLE_MOND = _constants.ENABLE_MOND
109
ENABLE_SPLIT_QUERY = _constants.ENABLE_SPLIT_QUERY
110
ENABLE_RESTRICTED_COMMANDS = _constants.ENABLE_RESTRICTED_COMMANDS
111

    
112
# SSH constants
113
SSH = _constants.SSH
114
SCP = _constants.SCP
115

    
116
NODED = _constants.NODED
117
CONFD = _constants.CONFD
118
LUXID = _constants.LUXID
119
RAPI = _constants.RAPI
120
MASTERD = _constants.MASTERD
121
MOND = _constants.MOND
122

    
123
DAEMONS = _constants.DAEMONS
124

    
125
DAEMONS_PORTS = _constants.DAEMONS_PORTS
126

    
127
DEFAULT_NODED_PORT = _constants.DEFAULT_NODED_PORT
128
DEFAULT_CONFD_PORT = _constants.DEFAULT_CONFD_PORT
129
DEFAULT_MOND_PORT = _constants.DEFAULT_MOND_PORT
130
DEFAULT_RAPI_PORT = _constants.DEFAULT_RAPI_PORT
131

    
132
FIRST_DRBD_PORT = _constants.FIRST_DRBD_PORT
133
LAST_DRBD_PORT = _constants.LAST_DRBD_PORT
134

    
135
DAEMONS_LOGBASE = _constants.DAEMONS_LOGBASE
136

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

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

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

    
149
VALID_EXTRA_LOGREASONS = compat.UniqueFrozenset([
150
  EXTRA_LOGREASON_ACCESS,
151
  EXTRA_LOGREASON_ERROR,
152
  ])
153

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

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

    
168
DEV_CONSOLE = _constants.DEV_CONSOLE
169

    
170
PROC_MOUNTS = "/proc/mounts"
171

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

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

    
187
EXPORT_CONF_FILE = "config.ini"
188

    
189
XEN_BOOTLOADER = _constants.XEN_BOOTLOADER
190
XEN_KERNEL = _constants.XEN_KERNEL
191
XEN_INITRD = _constants.XEN_INITRD
192
XEN_CMD_XM = _constants.XEN_CMD_XM
193
XEN_CMD_XL = _constants.XEN_CMD_XL
194
KNOWN_XEN_COMMANDS = _constants.KNOWN_XEN_COMMANDS
195

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

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

    
214
#: Console as SSH command
215
CONS_SSH = "ssh"
216

    
217
#: Console as VNC server
218
CONS_VNC = "vnc"
219

    
220
#: Console as SPICE server
221
CONS_SPICE = "spice"
222

    
223
#: Display a message for console access
224
CONS_MESSAGE = "msg"
225

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

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

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

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

    
250
# Default validity of certificates in days
251
X509_CERT_DEFAULT_VALIDITY = 365 * 5
252

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

    
256
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
257

    
258
# Import/export daemon mode
259
IEM_IMPORT = "import"
260
IEM_EXPORT = "export"
261

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

    
270
IE_CUSTOM_SIZE = "fd"
271

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

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

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

    
290

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

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

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

    
309
HKR_SKIP = 0
310
HKR_FAIL = 1
311
HKR_SUCCESS = 2
312

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

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

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

    
338
# Storage operations
339
SO_FIX_CONSISTENCY = "fix-consistency"
340

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

    
352
MODIFIABLE_STORAGE_FIELDS = {
353
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
354
  }
355

    
356
VALID_STORAGE_OPERATIONS = {
357
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
358
  }
359

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
489
#: Size of DRBD meta block device
490
DRBD_META_SIZE = 128
491

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

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

    
510
# rbd tool command
511
RBD_CMD = "rbd"
512

    
513
# file backend driver
514
FD_BLKTAP = _constants.FD_BLKTAP
515
FD_LOOP = _constants.FD_LOOP
516

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

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

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

    
540
# Instance export mode
541
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
542
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
543
EXPORT_MODES = _constants.EXPORT_MODES
544

    
545
# instance creation modes
546
INSTANCE_CREATE = _constants.INSTANCE_CREATE
547
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
548
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
549
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
550

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

    
555
# Remote import/export certificate validity in seconds
556
RIE_CERT_VALIDITY = 24 * 60 * 60
557

    
558
# Overall timeout for establishing connection
559
RIE_CONNECT_TIMEOUT = 180
560

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

    
564
# Export only: number of attempts to connect
565
RIE_CONNECT_RETRIES = 10
566

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

    
570
FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP])
571

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

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

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

    
595
#: Exit code for query operations with unknown fields
596
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
597

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

    
606
MAX_TAG_LEN = _constants.MAX_TAG_LEN
607
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
608

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

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

    
638
#: Key for job IDs in opcode result
639
JOB_IDS_KEY = "jobs"
640

    
641
# runparts results
642
(RUNPARTS_SKIP,
643
 RUNPARTS_RUN,
644
 RUNPARTS_ERR) = range(3)
645

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

    
652
# RPC constants
653
(RPC_ENCODING_NONE,
654
 RPC_ENCODING_ZLIB_BASE64) = range(2)
655

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

    
664
# Timeout for connecting to nodes (seconds)
665
RPC_CONNECT_TIMEOUT = 5
666

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

    
681
OS_API_FILE = "ganeti_api_version"
682
OS_VARIANTS_FILE = "variants.list"
683
OS_PARAMETERS_FILE = "parameters.list"
684

    
685
OS_VALIDATE_PARAMETERS = "parameters"
686
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
687

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

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

    
714
ES_PARAMETERS_FILE = "parameters.list"
715

    
716
# reboot types
717
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
718
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
719
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
720
REBOOT_TYPES = _constants.REBOOT_TYPES
721

    
722
# instance reboot behaviors
723
INSTANCE_REBOOT_ALLOWED = "reboot"
724
INSTANCE_REBOOT_EXIT = "exit"
725

    
726
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
727
  INSTANCE_REBOOT_ALLOWED,
728
  INSTANCE_REBOOT_EXIT,
729
  ])
730

    
731
VTYPE_STRING = _constants.VTYPE_STRING
732
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
733
VTYPE_BOOL = _constants.VTYPE_BOOL
734
VTYPE_SIZE = _constants.VTYPE_SIZE
735
VTYPE_INT = _constants.VTYPE_INT
736
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
737

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

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

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

    
836

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

    
912
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
913

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

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

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

    
941
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
942
  HV_MIGRATION_FAILED,
943
  HV_MIGRATION_CANCELLED,
944
  ])
945

    
946
# KVM-specific statuses
947
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
948

    
949
# Node info keys
950
HV_NODEINFO_KEY_VERSION = "hv_version"
951

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

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

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

    
975
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
976

    
977
# Disk state
978
DS_DISK_TOTAL = "disk_total"
979
DS_DISK_RESERVED = "disk_reserved"
980
DS_DISK_OVERHEAD = "disk_overhead"
981

    
982
DS_DEFAULTS = {
983
  DS_DISK_TOTAL: 0,
984
  DS_DISK_RESERVED: 0,
985
  DS_DISK_OVERHEAD: 0,
986
  }
987

    
988
DSS_PARAMETER_TYPES = {
989
  DS_DISK_TOTAL: VTYPE_INT,
990
  DS_DISK_RESERVED: VTYPE_INT,
991
  DS_DISK_OVERHEAD: VTYPE_INT,
992
  }
993

    
994
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
995
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
996

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

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

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

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

    
1027
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1028

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

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

    
1046
ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys())
1047

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

    
1056
ISPECS_MINMAX_KEYS = compat.UniqueFrozenset([
1057
  ISPECS_MIN,
1058
  ISPECS_MAX,
1059
  ])
1060

    
1061
IPOLICY_PARAMETERS = compat.UniqueFrozenset([
1062
  IPOLICY_VCPU_RATIO,
1063
  IPOLICY_SPINDLE_RATIO,
1064
  ])
1065

    
1066
IPOLICY_ALL_KEYS = (IPOLICY_PARAMETERS |
1067
                    frozenset([ISPECS_MINMAX, ISPECS_STD, IPOLICY_DTS]))
1068

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

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

    
1086
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
1087

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

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

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

    
1175
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1176

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

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

    
1192
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1193

    
1194
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1195
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1196

    
1197
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1198
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1199
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1200
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1201
OOB_STATUSES = _constants.OOB_STATUSES
1202

    
1203
# Instance Parameters Profile
1204
PP_DEFAULT = "default"
1205

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

    
1211
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1212
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1213
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1214
NIC_IP_POOL = _constants.NIC_IP_POOL
1215
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1216

    
1217
RESERVE_ACTION = "reserve"
1218
RELEASE_ACTION = "release"
1219

    
1220
NICS_PARAMETER_TYPES = {
1221
  NIC_MODE: VTYPE_STRING,
1222
  NIC_LINK: VTYPE_STRING,
1223
  NIC_VLAN: VTYPE_MAYBE_STRING,
1224
  }
1225

    
1226
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1227

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

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

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

    
1280
VNC_BASE_PORT = 5900
1281
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1282

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

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

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

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

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

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

    
1354
# Mouse types:
1355
HT_MOUSE_MOUSE = "mouse"
1356
HT_MOUSE_TABLET = "tablet"
1357

    
1358
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1359
  HT_MOUSE_MOUSE,
1360
  HT_MOUSE_TABLET,
1361
  ])
1362

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

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

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

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

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

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

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

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

    
1415
# Security models
1416
HT_SM_NONE = "none"
1417
HT_SM_USER = "user"
1418
HT_SM_POOL = "pool"
1419

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

    
1426
# Kvm flag values
1427
HT_KVM_ENABLED = "enabled"
1428
HT_KVM_DISABLED = "disabled"
1429

    
1430
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1431

    
1432
# Migration type
1433
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1434
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1435
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1436

    
1437
# Cluster Verify steps
1438
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1439
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1440

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

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

    
1488
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1489
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1490

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

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

    
1530
# Admin states
1531
ADMINST_UP = _constants.ADMINST_UP
1532
ADMINST_DOWN = _constants.ADMINST_DOWN
1533
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1534
ADMINST_ALL = _constants.ADMINST_ALL
1535

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

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

    
1548
# Allocator framework constants
1549
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1550
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1551
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1552
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1553

    
1554
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1555
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1556
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1557
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1558
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1559
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1560

    
1561
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1562
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1563

    
1564
# Node evacuation
1565
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1566
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1567
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1568
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1569

    
1570
# Job queue
1571
JOB_QUEUE_VERSION = 1
1572
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1573
JOB_QUEUE_FILES_PERMS = 0640
1574

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

    
1578
# unchanged job return
1579
JOB_NOTCHANGED = "nochange"
1580

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

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

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

    
1614
# Lock recalculate mode
1615
LOCKS_REPLACE = "replace"
1616
LOCKS_APPEND = "append"
1617

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

    
1627
# Execution log types
1628
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1629
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1630
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1631

    
1632
# /etc/hosts modification
1633
ETC_HOSTS_ADD = "add"
1634
ETC_HOSTS_REMOVE = "remove"
1635

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

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

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

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

    
1679
#: List of resources which can be queried using RAPI
1680
QR_VIA_RAPI = QR_VIA_LUXI
1681

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

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

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

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

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

    
1733
# max dynamic devices
1734
MAX_NICS = 8
1735
MAX_DISKS = 16
1736

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

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

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

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

    
1784
SS_FILE_PERMS = 0444
1785

    
1786
# cluster wide default parameters
1787
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1788

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

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

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

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

    
1932
NDC_GLOBALS = compat.UniqueFrozenset([
1933
  ND_EXCLUSIVE_STORAGE,
1934
  ])
1935

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

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

    
1971
# readability shortcuts
1972
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1973
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1974

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

    
2007
# we don't want to export the shortcuts
2008
del _LV_DEFAULTS, _DRBD_DEFAULTS
2009

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

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

    
2051
MASTER_POOL_SIZE_DEFAULT = 10
2052

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

    
2059
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
2060

    
2061
CONFD_REQ_PING = _constants.CONFD_REQ_PING
2062
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
2063
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
2064
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
2065
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
2066
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
2067
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
2068
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
2069
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
2070
CONFD_REQS = _constants.CONFD_REQS
2071

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

    
2080
# FIXME: perhaps update code that uses these constants to deal with
2081
# integers instead of strings
2082
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
2083
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
2084
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
2085

    
2086
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
2087
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
2088
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
2089
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
2090

    
2091
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
2092
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
2093
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
2094
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
2095
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
2096

    
2097
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
2098
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
2099
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
2100

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

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

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

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

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

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

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

    
2140
# User-id pool minimum/maximum acceptable user-ids.
2141
UIDPOOL_UID_MIN = 0
2142
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2143

    
2144
# Name or path of the pgrep command
2145
PGREP = "pgrep"
2146

    
2147
# Name of the node group that gets created at cluster init or upgrade
2148
INITIAL_NODE_GROUP_NAME = "default"
2149

    
2150
# Possible values for NodeGroup.alloc_policy
2151
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2152
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2153
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2154
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2155

    
2156
# Temporary external/shared storage parameters
2157
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2158

    
2159
# qemu-img path, required for ovfconverter
2160
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2161

    
2162
# Whether htools was enabled at compilation time
2163
HTOOLS = _constants.HTOOLS
2164
# The hail iallocator
2165
IALLOC_HAIL = "hail"
2166

    
2167
# Fake opcodes for functions that have hooks attached to them via
2168
# backend.RunLocalHooks
2169
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2170
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2171

    
2172
# SSH key types
2173
SSHK_RSA = "rsa"
2174
SSHK_DSA = "dsa"
2175
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2176

    
2177
# SSH authorized key types
2178
SSHAK_RSA = "ssh-rsa"
2179
SSHAK_DSS = "ssh-dss"
2180
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2181

    
2182
# SSH setup
2183
SSHS_CLUSTER_NAME = "cluster_name"
2184
SSHS_SSH_HOST_KEY = "ssh_host_key"
2185
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2186
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2187

    
2188
#: Key files for SSH daemon
2189
SSH_DAEMON_KEYFILES = {
2190
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2191
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2192
  }
2193

    
2194
# Node daemon setup
2195
NDS_CLUSTER_NAME = "cluster_name"
2196
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2197
NDS_SSCONF = "ssconf"
2198
NDS_START_NODE_DAEMON = "start_node_daemon"
2199

    
2200
# Path generating random UUID
2201
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2202

    
2203
# Regex string for verifying a UUID
2204
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2205

    
2206
# Auto-repair tag prefixes
2207
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2208
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2209
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2210
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2211
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2212

    
2213
# Auto-repair levels
2214
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2215
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2216
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2217
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2218
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2219

    
2220
# Auto-repair results
2221
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2222
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2223
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2224
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2225

    
2226
# The version identifier for builtin data collectors
2227
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2228

    
2229
# The reason trail opcode parameter name
2230
OPCODE_REASON = _constants.OPCODE_REASON
2231

    
2232
# The source reasons for the execution of an OpCode
2233
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2234
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2235
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2236
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2237
OPCODE_REASON_SRC_USER = "gnt:user"
2238

    
2239
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2240
  OPCODE_REASON_SRC_CLIENT,
2241
  OPCODE_REASON_SRC_NODED,
2242
  OPCODE_REASON_SRC_OPCODE,
2243
  OPCODE_REASON_SRC_RLIB2,
2244
  OPCODE_REASON_SRC_USER,
2245
  ])
2246

    
2247
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2248

    
2249
# CPU load collector variables
2250
STAT_FILE = _constants.STAT_FILE
2251
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2252
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2253

    
2254
# Mond's variable for periodical data collection
2255
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2256

    
2257
# MonD's latest API version
2258
MOND_LATEST_API_VERSION = 1
2259

    
2260
# Timeouts for upgrades
2261

    
2262
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2263
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2264

    
2265
# Do not re-export imported modules
2266
del re, _vcsversion, _constants, socket, pathutils, compat
2267

    
2268

    
2269
ALLOCATABLE_KEY = "allocatable"
2270
FAILED_KEY = "failed"