Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 6dc364f9

History | View | Annotate | Download (63.2 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
CONFIG_MAJOR = _constants.CONFIG_MAJOR
48
CONFIG_MINOR = _constants.CONFIG_MINOR
49
CONFIG_REVISION = _constants.CONFIG_REVISION
50
CONFIG_VERSION = _constants.CONFIG_VERSION
51

    
52
#: RPC protocol version
53
PROTOCOL_VERSION = _constants.PROTOCOL_VERSION
54

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

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

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

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

    
96
# Wipe
97
DD_CMD = "dd"
98
MAX_WIPE_CHUNK = 1024 # 1GB
99
MIN_WIPE_CHUNK_PERCENT = 10
100

    
101
RUN_DIRS_MODE = 0775
102
SECURE_DIR_MODE = 0700
103
SECURE_FILE_MODE = 0600
104
ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/"
105
ENABLE_CONFD = _constants.ENABLE_CONFD
106
ENABLE_MOND = _constants.ENABLE_MOND
107
ENABLE_SPLIT_QUERY = _constants.ENABLE_SPLIT_QUERY
108
ENABLE_RESTRICTED_COMMANDS = _constants.ENABLE_RESTRICTED_COMMANDS
109

    
110
# SSH constants
111
SSH = _constants.SSH
112
SCP = _constants.SCP
113

    
114
NODED = _constants.NODED
115
CONFD = _constants.CONFD
116
LUXID = _constants.LUXID
117
RAPI = _constants.RAPI
118
MASTERD = _constants.MASTERD
119
MOND = _constants.MOND
120

    
121
DAEMONS = _constants.DAEMONS
122

    
123
DAEMONS_PORTS = _constants.DAEMONS_PORTS
124

    
125
DEFAULT_NODED_PORT = _constants.DEFAULT_NODED_PORT
126
DEFAULT_CONFD_PORT = _constants.DEFAULT_CONFD_PORT
127
DEFAULT_MOND_PORT = _constants.DEFAULT_MOND_PORT
128
DEFAULT_RAPI_PORT = _constants.DEFAULT_RAPI_PORT
129

    
130
FIRST_DRBD_PORT = 11000
131
LAST_DRBD_PORT = 14999
132

    
133
DAEMONS_LOGBASE = _constants.DAEMONS_LOGBASE
134

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

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

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

    
147
VALID_EXTRA_LOGREASONS = compat.UniqueFrozenset([
148
  EXTRA_LOGREASON_ACCESS,
149
  EXTRA_LOGREASON_ERROR,
150
  ])
151

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

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

    
166
DEV_CONSOLE = _constants.DEV_CONSOLE
167

    
168
PROC_MOUNTS = "/proc/mounts"
169

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

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

    
185
EXPORT_CONF_FILE = "config.ini"
186

    
187
XEN_BOOTLOADER = _constants.XEN_BOOTLOADER
188
XEN_KERNEL = _constants.XEN_KERNEL
189
XEN_INITRD = _constants.XEN_INITRD
190
XEN_CMD_XM = _constants.XEN_CMD_XM
191
XEN_CMD_XL = _constants.XEN_CMD_XL
192
KNOWN_XEN_COMMANDS = _constants.KNOWN_XEN_COMMANDS
193

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

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

    
212
#: Console as SSH command
213
CONS_SSH = "ssh"
214

    
215
#: Console as VNC server
216
CONS_VNC = "vnc"
217

    
218
#: Console as SPICE server
219
CONS_SPICE = "spice"
220

    
221
#: Display a message for console access
222
CONS_MESSAGE = "msg"
223

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

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

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

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

    
248
# Default validity of certificates in days
249
X509_CERT_DEFAULT_VALIDITY = 365 * 5
250

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

    
254
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
255

    
256
# Import/export daemon mode
257
IEM_IMPORT = "import"
258
IEM_EXPORT = "export"
259

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

    
268
IE_CUSTOM_SIZE = "fd"
269

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

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

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

    
288

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

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

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

    
307
HKR_SKIP = 0
308
HKR_FAIL = 1
309
HKR_SUCCESS = 2
310

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

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

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

    
336
# Storage operations
337
SO_FIX_CONSISTENCY = "fix-consistency"
338

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

    
350
MODIFIABLE_STORAGE_FIELDS = {
351
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
352
  }
353

    
354
VALID_STORAGE_OPERATIONS = {
355
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
356
  }
357

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
487
#: Size of DRBD meta block device
488
DRBD_META_SIZE = 128
489

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

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

    
508
# rbd tool command
509
RBD_CMD = "rbd"
510

    
511
# file backend driver
512
FD_BLKTAP = _constants.FD_BLKTAP
513
FD_LOOP = _constants.FD_LOOP
514

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

    
518
# disk access mode
519
DISK_RDONLY = _constants.DISK_RDONLY
520
DISK_RDWR = _constants.DISK_RDWR
521
DISK_ACCESS_SET = _constants.DISK_ACCESS_SET
522

    
523
# disk replacement mode
524
REPLACE_DISK_PRI = "replace_on_primary"    # replace disks on primary
525
REPLACE_DISK_SEC = "replace_on_secondary"  # replace disks on secondary
526
REPLACE_DISK_CHG = "replace_new_secondary" # change secondary node
527
REPLACE_DISK_AUTO = "replace_auto"
528
REPLACE_MODES = compat.UniqueFrozenset([
529
  REPLACE_DISK_PRI,
530
  REPLACE_DISK_SEC,
531
  REPLACE_DISK_CHG,
532
  REPLACE_DISK_AUTO,
533
  ])
534

    
535
# Instance export mode
536
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
537
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
538
EXPORT_MODES = _constants.EXPORT_MODES
539

    
540
# instance creation modes
541
INSTANCE_CREATE = _constants.INSTANCE_CREATE
542
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
543
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
544
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
545

    
546
# Remote import/export handshake message and version
547
RIE_VERSION = 0
548
RIE_HANDSHAKE = "Hi, I'm Ganeti"
549

    
550
# Remote import/export certificate validity in seconds
551
RIE_CERT_VALIDITY = 24 * 60 * 60
552

    
553
# Overall timeout for establishing connection
554
RIE_CONNECT_TIMEOUT = 180
555

    
556
# Export only: how long to wait per connection attempt (seconds)
557
RIE_CONNECT_ATTEMPT_TIMEOUT = 20
558

    
559
# Export only: number of attempts to connect
560
RIE_CONNECT_RETRIES = 10
561

    
562
#: Give child process up to 5 seconds to exit after sending a signal
563
CHILD_LINGER_TIMEOUT = 5.0
564

    
565
FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP])
566

    
567
# import/export config options
568
INISECT_EXP = "export"
569
INISECT_INS = "instance"
570
INISECT_HYP = "hypervisor"
571
INISECT_BEP = "backend"
572
INISECT_OSP = "os"
573

    
574
# dynamic device modification
575
DDM_ADD = _constants.DDM_ADD
576
DDM_MODIFY = _constants.DDM_MODIFY
577
DDM_REMOVE = _constants.DDM_REMOVE
578
DDMS_VALUES = _constants.DDMS_VALUES
579
DDMS_VALUES_WITH_MODIFY = _constants.DDMS_VALUES_WITH_MODIFY
580
# TODO: DDM_SWAP, DDM_MOVE?
581

    
582
# common exit codes
583
EXIT_SUCCESS = _constants.EXIT_SUCCESS
584
EXIT_FAILURE = _constants.EXIT_FAILURE
585
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
586
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
587
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
588
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
589

    
590
#: Exit code for query operations with unknown fields
591
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
592

    
593
# tags
594
TAG_CLUSTER = _constants.TAG_CLUSTER
595
TAG_NODEGROUP = _constants.TAG_NODEGROUP
596
TAG_NODE = _constants.TAG_NODE
597
TAG_INSTANCE = _constants.TAG_INSTANCE
598
TAG_NETWORK = _constants.TAG_NETWORK
599
VALID_TAG_TYPES = _constants.VALID_TAG_TYPES
600

    
601
MAX_TAG_LEN = _constants.MAX_TAG_LEN
602
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
603

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

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

    
633
#: Key for job IDs in opcode result
634
JOB_IDS_KEY = "jobs"
635

    
636
# runparts results
637
(RUNPARTS_SKIP,
638
 RUNPARTS_RUN,
639
 RUNPARTS_ERR) = range(3)
640

    
641
RUNPARTS_STATUS = compat.UniqueFrozenset([
642
  RUNPARTS_SKIP,
643
  RUNPARTS_RUN,
644
  RUNPARTS_ERR,
645
  ])
646

    
647
# RPC constants
648
(RPC_ENCODING_NONE,
649
 RPC_ENCODING_ZLIB_BASE64) = range(2)
650

    
651
# Various time constants for the timeout table
652
RPC_TMO_URGENT = 60 # one minute
653
RPC_TMO_FAST = 5 * 60 # five minutes
654
RPC_TMO_NORMAL = 15 * 60 # 15 minutes
655
RPC_TMO_SLOW = 3600 # one hour
656
RPC_TMO_4HRS = 4 * 3600
657
RPC_TMO_1DAY = 86400
658

    
659
# Timeout for connecting to nodes (seconds)
660
RPC_CONNECT_TIMEOUT = 5
661

    
662
# os related constants
663
OS_SCRIPT_CREATE = "create"
664
OS_SCRIPT_IMPORT = "import"
665
OS_SCRIPT_EXPORT = "export"
666
OS_SCRIPT_RENAME = "rename"
667
OS_SCRIPT_VERIFY = "verify"
668
OS_SCRIPTS = compat.UniqueFrozenset([
669
  OS_SCRIPT_CREATE,
670
  OS_SCRIPT_IMPORT,
671
  OS_SCRIPT_EXPORT,
672
  OS_SCRIPT_RENAME,
673
  OS_SCRIPT_VERIFY,
674
  ])
675

    
676
OS_API_FILE = "ganeti_api_version"
677
OS_VARIANTS_FILE = "variants.list"
678
OS_PARAMETERS_FILE = "parameters.list"
679

    
680
OS_VALIDATE_PARAMETERS = "parameters"
681
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
682

    
683
# External Storage (ES) related constants
684
ES_ACTION_CREATE = "create"
685
ES_ACTION_REMOVE = "remove"
686
ES_ACTION_GROW = "grow"
687
ES_ACTION_ATTACH = "attach"
688
ES_ACTION_DETACH = "detach"
689
ES_ACTION_SETINFO = "setinfo"
690
ES_ACTION_VERIFY = "verify"
691

    
692
ES_SCRIPT_CREATE = ES_ACTION_CREATE
693
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
694
ES_SCRIPT_GROW = ES_ACTION_GROW
695
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
696
ES_SCRIPT_DETACH = ES_ACTION_DETACH
697
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
698
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
699
ES_SCRIPTS = frozenset([
700
  ES_SCRIPT_CREATE,
701
  ES_SCRIPT_REMOVE,
702
  ES_SCRIPT_GROW,
703
  ES_SCRIPT_ATTACH,
704
  ES_SCRIPT_DETACH,
705
  ES_SCRIPT_SETINFO,
706
  ES_SCRIPT_VERIFY
707
  ])
708

    
709
ES_PARAMETERS_FILE = "parameters.list"
710

    
711
# reboot types
712
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
713
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
714
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
715
REBOOT_TYPES = _constants.REBOOT_TYPES
716

    
717
# instance reboot behaviors
718
INSTANCE_REBOOT_ALLOWED = "reboot"
719
INSTANCE_REBOOT_EXIT = "exit"
720

    
721
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
722
  INSTANCE_REBOOT_ALLOWED,
723
  INSTANCE_REBOOT_EXIT,
724
  ])
725

    
726
VTYPE_STRING = _constants.VTYPE_STRING
727
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
728
VTYPE_BOOL = _constants.VTYPE_BOOL
729
VTYPE_SIZE = _constants.VTYPE_SIZE
730
VTYPE_INT = _constants.VTYPE_INT
731
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
732

    
733
# Constant representing that the user does not specify any IP version
734
IFACE_NO_IP_VERSION_SPECIFIED = 0
735

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

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

    
831

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

    
907
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
908

    
909
HVS_PARAMETER_TITLES = {
910
  HV_ACPI: "ACPI",
911
  HV_BOOT_ORDER: "Boot_order",
912
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
913
  HV_DISK_TYPE: "Disk_type",
914
  HV_INITRD_PATH: "Initrd_path",
915
  HV_KERNEL_PATH: "Kernel_path",
916
  HV_NIC_TYPE: "NIC_type",
917
  HV_PAE: "PAE",
918
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
919
  HV_PASSTHROUGH: "pci_pass",
920
  HV_CPU_TYPE: "cpu_type",
921
  }
922

    
923
# Migration statuses
924
HV_MIGRATION_COMPLETED = "completed"
925
HV_MIGRATION_ACTIVE = "active"
926
HV_MIGRATION_FAILED = "failed"
927
HV_MIGRATION_CANCELLED = "cancelled"
928

    
929
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
930
  HV_MIGRATION_COMPLETED,
931
  HV_MIGRATION_ACTIVE,
932
  HV_MIGRATION_FAILED,
933
  HV_MIGRATION_CANCELLED,
934
  ])
935

    
936
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
937
  HV_MIGRATION_FAILED,
938
  HV_MIGRATION_CANCELLED,
939
  ])
940

    
941
# KVM-specific statuses
942
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
943

    
944
# Node info keys
945
HV_NODEINFO_KEY_VERSION = "hv_version"
946

    
947
# Hypervisor state
948
HVST_MEMORY_TOTAL = "mem_total"
949
HVST_MEMORY_NODE = "mem_node"
950
HVST_MEMORY_HV = "mem_hv"
951
HVST_CPU_TOTAL = "cpu_total"
952
HVST_CPU_NODE = "cpu_node"
953

    
954
HVST_DEFAULTS = {
955
  HVST_MEMORY_TOTAL: 0,
956
  HVST_MEMORY_NODE: 0,
957
  HVST_MEMORY_HV: 0,
958
  HVST_CPU_TOTAL: 1,
959
  HVST_CPU_NODE: 1,
960
  }
961

    
962
HVSTS_PARAMETER_TYPES = {
963
  HVST_MEMORY_TOTAL: VTYPE_INT,
964
  HVST_MEMORY_NODE: VTYPE_INT,
965
  HVST_MEMORY_HV: VTYPE_INT,
966
  HVST_CPU_TOTAL: VTYPE_INT,
967
  HVST_CPU_NODE: VTYPE_INT,
968
  }
969

    
970
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
971

    
972
# Disk state
973
DS_DISK_TOTAL = "disk_total"
974
DS_DISK_RESERVED = "disk_reserved"
975
DS_DISK_OVERHEAD = "disk_overhead"
976

    
977
DS_DEFAULTS = {
978
  DS_DISK_TOTAL: 0,
979
  DS_DISK_RESERVED: 0,
980
  DS_DISK_OVERHEAD: 0,
981
  }
982

    
983
DSS_PARAMETER_TYPES = {
984
  DS_DISK_TOTAL: VTYPE_INT,
985
  DS_DISK_RESERVED: VTYPE_INT,
986
  DS_DISK_OVERHEAD: VTYPE_INT,
987
  }
988

    
989
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
990
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
991

    
992
# Backend parameter names
993
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
994
BE_MAXMEM = "maxmem"
995
BE_MINMEM = "minmem"
996
BE_VCPUS = "vcpus"
997
BE_AUTO_BALANCE = "auto_balance"
998
BE_ALWAYS_FAILOVER = "always_failover"
999
BE_SPINDLE_USE = "spindle_use"
1000

    
1001
BES_PARAMETER_TYPES = {
1002
  BE_MAXMEM: VTYPE_SIZE,
1003
  BE_MINMEM: VTYPE_SIZE,
1004
  BE_VCPUS: VTYPE_INT,
1005
  BE_AUTO_BALANCE: VTYPE_BOOL,
1006
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
1007
  BE_SPINDLE_USE: VTYPE_INT,
1008
  }
1009

    
1010
BES_PARAMETER_TITLES = {
1011
  BE_AUTO_BALANCE: "Auto_balance",
1012
  BE_MAXMEM: "ConfigMaxMem",
1013
  BE_MINMEM: "ConfigMinMem",
1014
  BE_VCPUS: "ConfigVCPUs",
1015
  }
1016

    
1017
BES_PARAMETER_COMPAT = {
1018
  BE_MEMORY: VTYPE_SIZE,
1019
  }
1020
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
1021

    
1022
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1023

    
1024
# instance specs
1025
ISPEC_MEM_SIZE = "memory-size"
1026
ISPEC_CPU_COUNT = "cpu-count"
1027
ISPEC_DISK_COUNT = "disk-count"
1028
ISPEC_DISK_SIZE = "disk-size"
1029
ISPEC_NIC_COUNT = "nic-count"
1030
ISPEC_SPINDLE_USE = "spindle-use"
1031

    
1032
ISPECS_PARAMETER_TYPES = {
1033
  ISPEC_MEM_SIZE: VTYPE_INT,
1034
  ISPEC_CPU_COUNT: VTYPE_INT,
1035
  ISPEC_DISK_COUNT: VTYPE_INT,
1036
  ISPEC_DISK_SIZE: VTYPE_INT,
1037
  ISPEC_NIC_COUNT: VTYPE_INT,
1038
  ISPEC_SPINDLE_USE: VTYPE_INT,
1039
  }
1040

    
1041
ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys())
1042

    
1043
ISPECS_MINMAX = "minmax"
1044
ISPECS_MIN = "min"
1045
ISPECS_MAX = "max"
1046
ISPECS_STD = "std"
1047
IPOLICY_DTS = "disk-templates"
1048
IPOLICY_VCPU_RATIO = "vcpu-ratio"
1049
IPOLICY_SPINDLE_RATIO = "spindle-ratio"
1050

    
1051
ISPECS_MINMAX_KEYS = compat.UniqueFrozenset([
1052
  ISPECS_MIN,
1053
  ISPECS_MAX,
1054
  ])
1055

    
1056
IPOLICY_PARAMETERS = compat.UniqueFrozenset([
1057
  IPOLICY_VCPU_RATIO,
1058
  IPOLICY_SPINDLE_RATIO,
1059
  ])
1060

    
1061
IPOLICY_ALL_KEYS = (IPOLICY_PARAMETERS |
1062
                    frozenset([ISPECS_MINMAX, ISPECS_STD, IPOLICY_DTS]))
1063

    
1064
# Node parameter names
1065
ND_OOB_PROGRAM = "oob_program"
1066
ND_SPINDLE_COUNT = "spindle_count"
1067
ND_EXCLUSIVE_STORAGE = "exclusive_storage"
1068
ND_OVS = "ovs"
1069
ND_OVS_NAME = "ovs_name"
1070
ND_OVS_LINK = "ovs_link"
1071

    
1072
NDS_PARAMETER_TYPES = {
1073
  ND_OOB_PROGRAM: VTYPE_STRING,
1074
  ND_SPINDLE_COUNT: VTYPE_INT,
1075
  ND_EXCLUSIVE_STORAGE: VTYPE_BOOL,
1076
  ND_OVS: VTYPE_BOOL,
1077
  ND_OVS_NAME: VTYPE_MAYBE_STRING,
1078
  ND_OVS_LINK: VTYPE_MAYBE_STRING,
1079
  }
1080

    
1081
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
1082

    
1083
NDS_PARAMETER_TITLES = {
1084
  ND_OOB_PROGRAM: "OutOfBandProgram",
1085
  ND_SPINDLE_COUNT: "SpindleCount",
1086
  ND_EXCLUSIVE_STORAGE: "ExclusiveStorage",
1087
  ND_OVS: "OpenvSwitch",
1088
  ND_OVS_NAME: "OpenvSwitchName",
1089
  ND_OVS_LINK: "OpenvSwitchLink",
1090
  }
1091

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

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

    
1166
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1167

    
1168
# dynamic disk parameters
1169
DDP_LOCAL_IP = "local-ip"
1170
DDP_REMOTE_IP = "remote-ip"
1171
DDP_PORT = "port"
1172
DDP_LOCAL_MINOR = "local-minor"
1173
DDP_REMOTE_MINOR = "remote-minor"
1174

    
1175
# OOB supported commands
1176
OOB_POWER_ON = _constants.OOB_POWER_ON
1177
OOB_POWER_OFF = _constants.OOB_POWER_OFF
1178
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
1179
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
1180
OOB_HEALTH = _constants.OOB_HEALTH
1181
OOB_COMMANDS = _constants.OOB_COMMANDS
1182

    
1183
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1184

    
1185
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1186
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1187

    
1188
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1189
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1190
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1191
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1192
OOB_STATUSES = _constants.OOB_STATUSES
1193

    
1194
# Instance Parameters Profile
1195
PP_DEFAULT = "default"
1196

    
1197
# NIC_* constants are used inside the ganeti config
1198
NIC_MODE = _constants.NIC_MODE
1199
NIC_LINK = _constants.NIC_LINK
1200
NIC_VLAN = _constants.NIC_VLAN
1201

    
1202
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1203
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1204
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1205
NIC_IP_POOL = _constants.NIC_IP_POOL
1206
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1207

    
1208
RESERVE_ACTION = "reserve"
1209
RELEASE_ACTION = "release"
1210

    
1211
NICS_PARAMETER_TYPES = {
1212
  NIC_MODE: VTYPE_STRING,
1213
  NIC_LINK: VTYPE_STRING,
1214
  NIC_VLAN: VTYPE_MAYBE_STRING,
1215
  }
1216

    
1217
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1218

    
1219
# IDISK_* constants are used in opcodes, to create/change disks
1220
IDISK_SIZE = "size"
1221
IDISK_SPINDLES = "spindles"
1222
IDISK_MODE = "mode"
1223
IDISK_ADOPT = "adopt"
1224
IDISK_VG = "vg"
1225
IDISK_METAVG = "metavg"
1226
IDISK_PROVIDER = "provider"
1227
IDISK_NAME = "name"
1228
IDISK_PARAMS_TYPES = {
1229
  IDISK_SIZE: VTYPE_SIZE,
1230
  IDISK_SPINDLES: VTYPE_INT,
1231
  IDISK_MODE: VTYPE_STRING,
1232
  IDISK_ADOPT: VTYPE_STRING,
1233
  IDISK_VG: VTYPE_STRING,
1234
  IDISK_METAVG: VTYPE_STRING,
1235
  IDISK_PROVIDER: VTYPE_STRING,
1236
  IDISK_NAME: VTYPE_MAYBE_STRING,
1237
  }
1238
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1239

    
1240
# INIC_* constants are used in opcodes, to create/change nics
1241
INIC_MAC = "mac"
1242
INIC_IP = "ip"
1243
INIC_MODE = "mode"
1244
INIC_LINK = "link"
1245
INIC_NETWORK = "network"
1246
INIC_NAME = "name"
1247
INIC_VLAN = "vlan"
1248
INIC_BRIDGE = "bridge"
1249
INIC_PARAMS_TYPES = {
1250
  INIC_IP: VTYPE_MAYBE_STRING,
1251
  INIC_LINK: VTYPE_STRING,
1252
  INIC_MAC: VTYPE_STRING,
1253
  INIC_MODE: VTYPE_STRING,
1254
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1255
  INIC_NAME: VTYPE_MAYBE_STRING,
1256
  INIC_VLAN: VTYPE_MAYBE_STRING,
1257
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1258
  }
1259
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1260

    
1261
# Hypervisor constants
1262
HT_XEN_PVM = _constants.HT_XEN_PVM
1263
HT_FAKE = _constants.HT_FAKE
1264
HT_XEN_HVM = _constants.HT_XEN_HVM
1265
HT_KVM = _constants.HT_KVM
1266
HT_CHROOT = _constants.HT_CHROOT
1267
HT_LXC = _constants.HT_LXC
1268
HYPER_TYPES = _constants.HYPER_TYPES
1269
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1270

    
1271
VNC_BASE_PORT = 5900
1272
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1273

    
1274
# NIC types
1275
HT_NIC_RTL8139 = "rtl8139"
1276
HT_NIC_NE2K_PCI = "ne2k_pci"
1277
HT_NIC_NE2K_ISA = "ne2k_isa"
1278
HT_NIC_I82551 = "i82551"
1279
HT_NIC_I85557B = "i82557b"
1280
HT_NIC_I8259ER = "i82559er"
1281
HT_NIC_PCNET = "pcnet"
1282
HT_NIC_E1000 = "e1000"
1283
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1284

    
1285
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1286
  HT_NIC_RTL8139,
1287
  HT_NIC_NE2K_PCI,
1288
  HT_NIC_E1000,
1289
  HT_NIC_NE2K_ISA,
1290
  HT_NIC_PARAVIRTUAL,
1291
  ])
1292
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1293
  HT_NIC_RTL8139,
1294
  HT_NIC_NE2K_PCI,
1295
  HT_NIC_NE2K_ISA,
1296
  HT_NIC_I82551,
1297
  HT_NIC_I85557B,
1298
  HT_NIC_I8259ER,
1299
  HT_NIC_PCNET,
1300
  HT_NIC_E1000,
1301
  HT_NIC_PARAVIRTUAL,
1302
  ])
1303

    
1304
# Vif types
1305
# default vif type in xen-hvm
1306
HT_HVM_VIF_IOEMU = "ioemu"
1307
HT_HVM_VIF_VIF = "vif"
1308
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1309
  HT_HVM_VIF_IOEMU,
1310
  HT_HVM_VIF_VIF,
1311
  ])
1312

    
1313
# Disk types
1314
HT_DISK_IOEMU = "ioemu"
1315
HT_DISK_IDE = "ide"
1316
HT_DISK_SCSI = "scsi"
1317
HT_DISK_SD = "sd"
1318
HT_DISK_MTD = "mtd"
1319
HT_DISK_PFLASH = "pflash"
1320

    
1321
HT_CACHE_DEFAULT = "default"
1322
HT_CACHE_NONE = "none"
1323
HT_CACHE_WTHROUGH = "writethrough"
1324
HT_CACHE_WBACK = "writeback"
1325
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1326
  HT_CACHE_DEFAULT,
1327
  HT_CACHE_NONE,
1328
  HT_CACHE_WTHROUGH,
1329
  HT_CACHE_WBACK,
1330
  ])
1331

    
1332
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1333
  HT_DISK_PARAVIRTUAL,
1334
  HT_DISK_IOEMU,
1335
  ])
1336
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1337
  HT_DISK_PARAVIRTUAL,
1338
  HT_DISK_IDE,
1339
  HT_DISK_SCSI,
1340
  HT_DISK_SD,
1341
  HT_DISK_MTD,
1342
  HT_DISK_PFLASH,
1343
  ])
1344

    
1345
# Mouse types:
1346
HT_MOUSE_MOUSE = "mouse"
1347
HT_MOUSE_TABLET = "tablet"
1348

    
1349
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1350
  HT_MOUSE_MOUSE,
1351
  HT_MOUSE_TABLET,
1352
  ])
1353

    
1354
# Boot order
1355
HT_BO_FLOPPY = "floppy"
1356
HT_BO_CDROM = "cdrom"
1357
HT_BO_DISK = "disk"
1358
HT_BO_NETWORK = "network"
1359

    
1360
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1361
  HT_BO_FLOPPY,
1362
  HT_BO_CDROM,
1363
  HT_BO_DISK,
1364
  HT_BO_NETWORK,
1365
  ])
1366

    
1367
# SPICE lossless image compression options
1368
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1369
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1370
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1371
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1372
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1373
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1374

    
1375
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1376
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1377
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1378
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1379
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1380
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1381
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1382
  ])
1383

    
1384
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1385
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1386
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1387
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1388

    
1389
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1390
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1391
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1392
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1393
  ])
1394

    
1395
# SPICE video stream detection
1396
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1397
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1398
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1399

    
1400
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1401
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1402
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1403
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1404
  ])
1405

    
1406
# Security models
1407
HT_SM_NONE = "none"
1408
HT_SM_USER = "user"
1409
HT_SM_POOL = "pool"
1410

    
1411
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1412
  HT_SM_NONE,
1413
  HT_SM_USER,
1414
  HT_SM_POOL,
1415
  ])
1416

    
1417
# Kvm flag values
1418
HT_KVM_ENABLED = "enabled"
1419
HT_KVM_DISABLED = "disabled"
1420

    
1421
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1422

    
1423
# Migration type
1424
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1425
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1426
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1427

    
1428
# Cluster Verify steps
1429
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1430
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1431

    
1432
# Cluster Verify error classes
1433
CV_TCLUSTER = _constants.CV_TCLUSTER
1434
CV_TGROUP = _constants.CV_TGROUP
1435
CV_TNODE = _constants.CV_TNODE
1436
CV_TINSTANCE = _constants.CV_TINSTANCE
1437

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

    
1479
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1480
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1481

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

    
1510
# Instance status
1511
INSTST_RUNNING = _constants.INSTST_RUNNING
1512
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1513
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1514
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1515
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1516
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1517
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1518
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1519
INSTST_ALL = _constants.INSTST_ALL
1520

    
1521
# Admin states
1522
ADMINST_UP = _constants.ADMINST_UP
1523
ADMINST_DOWN = _constants.ADMINST_DOWN
1524
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1525
ADMINST_ALL = _constants.ADMINST_ALL
1526

    
1527
# Node roles
1528
NR_REGULAR = _constants.NR_REGULAR
1529
NR_MASTER = _constants.NR_MASTER
1530
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1531
NR_DRAINED = _constants.NR_DRAINED
1532
NR_OFFLINE = _constants.NR_OFFLINE
1533
NR_ALL = _constants.NR_ALL
1534

    
1535
# SSL certificate check constants (in days)
1536
SSL_CERT_EXPIRATION_WARN = 30
1537
SSL_CERT_EXPIRATION_ERROR = 7
1538

    
1539
# Allocator framework constants
1540
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1541
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1542
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1543
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1544

    
1545
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1546
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1547
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1548
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1549
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1550
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1551

    
1552
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1553
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1554

    
1555
# Node evacuation
1556
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1557
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1558
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1559
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1560

    
1561
# Job queue
1562
JOB_QUEUE_VERSION = 1
1563
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1564
JOB_QUEUE_FILES_PERMS = 0640
1565

    
1566
JOB_ID_TEMPLATE = r"\d+"
1567
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1568

    
1569
# unchanged job return
1570
JOB_NOTCHANGED = "nochange"
1571

    
1572
# Job status
1573
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1574
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1575
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1576
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1577
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1578
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1579
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1580
JOBS_PENDING = _constants.JOBS_PENDING
1581
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1582
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1583

    
1584
# OpCode status
1585
# not yet finalized
1586
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1587
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1588
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1589
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1590
# finalized
1591
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1592
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1593
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1594
OPS_FINALIZED = _constants.OPS_FINALIZED
1595

    
1596
# OpCode priority
1597
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1598
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1599
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1600
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1601
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1602
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1603
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1604

    
1605
# Lock recalculate mode
1606
LOCKS_REPLACE = "replace"
1607
LOCKS_APPEND = "append"
1608

    
1609
# Lock timeout (sum) before we should go into blocking acquire (still
1610
# can be reset by priority change); computed as max time (10 hours)
1611
# before we should actually go into blocking acquire given that we
1612
# start from default priority level; in seconds
1613
# TODO
1614
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1615
LOCK_ATTEMPTS_MAXWAIT = 15.0
1616
LOCK_ATTEMPTS_MINWAIT = 1.0
1617

    
1618
# Execution log types
1619
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1620
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1621
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1622

    
1623
# /etc/hosts modification
1624
ETC_HOSTS_ADD = "add"
1625
ETC_HOSTS_REMOVE = "remove"
1626

    
1627
# Job queue test
1628
JQT_MSGPREFIX = "TESTMSG="
1629
JQT_EXPANDNAMES = "expandnames"
1630
JQT_EXEC = "exec"
1631
JQT_LOGMSG = "logmsg"
1632
JQT_STARTMSG = "startmsg"
1633
JQT_ALL = compat.UniqueFrozenset([
1634
  JQT_EXPANDNAMES,
1635
  JQT_EXEC,
1636
  JQT_LOGMSG,
1637
  JQT_STARTMSG,
1638
  ])
1639

    
1640
# Query resources
1641
QR_CLUSTER = "cluster"
1642
QR_INSTANCE = "instance"
1643
QR_NODE = "node"
1644
QR_LOCK = "lock"
1645
QR_GROUP = "group"
1646
QR_OS = "os"
1647
QR_JOB = "job"
1648
QR_EXPORT = "export"
1649
QR_NETWORK = "network"
1650
QR_EXTSTORAGE = "extstorage"
1651

    
1652
#: List of resources which can be queried using L{opcodes.OpQuery}
1653
QR_VIA_OP = compat.UniqueFrozenset([
1654
  QR_CLUSTER,
1655
  QR_INSTANCE,
1656
  QR_NODE,
1657
  QR_GROUP,
1658
  QR_OS,
1659
  QR_EXPORT,
1660
  QR_NETWORK,
1661
  QR_EXTSTORAGE,
1662
  ])
1663

    
1664
#: List of resources which can be queried using Local UniX Interface
1665
QR_VIA_LUXI = QR_VIA_OP.union([
1666
  QR_LOCK,
1667
  QR_JOB,
1668
  ])
1669

    
1670
#: List of resources which can be queried using RAPI
1671
QR_VIA_RAPI = QR_VIA_LUXI
1672

    
1673
# Query field types
1674
QFT_UNKNOWN = "unknown"
1675
QFT_TEXT = "text"
1676
QFT_BOOL = "bool"
1677
QFT_NUMBER = "number"
1678
QFT_UNIT = "unit"
1679
QFT_TIMESTAMP = "timestamp"
1680
QFT_OTHER = "other"
1681

    
1682
#: All query field types
1683
QFT_ALL = compat.UniqueFrozenset([
1684
  QFT_UNKNOWN,
1685
  QFT_TEXT,
1686
  QFT_BOOL,
1687
  QFT_NUMBER,
1688
  QFT_UNIT,
1689
  QFT_TIMESTAMP,
1690
  QFT_OTHER,
1691
  ])
1692

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

    
1708
RS_ALL = compat.UniqueFrozenset([
1709
  RS_NORMAL,
1710
  RS_UNKNOWN,
1711
  RS_NODATA,
1712
  RS_UNAVAIL,
1713
  RS_OFFLINE,
1714
  ])
1715

    
1716
#: Dictionary with special field cases and their verbose/terse formatting
1717
RSS_DESCRIPTION = {
1718
  RS_UNKNOWN: ("(unknown)", "??"),
1719
  RS_NODATA: ("(nodata)", "?"),
1720
  RS_OFFLINE: ("(offline)", "*"),
1721
  RS_UNAVAIL: ("(unavail)", "-"),
1722
  }
1723

    
1724
# max dynamic devices
1725
MAX_NICS = 8
1726
MAX_DISKS = 16
1727

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

    
1755
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1756
SS_HVPARAMS_PREF = "hvparams_"
1757

    
1758
# Hvparams keys:
1759
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1760
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1761
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1762
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1763
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1764
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1765

    
1766
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1767
  SS_HVPARAMS_XEN_PVM,
1768
  SS_HVPARAMS_XEN_FAKE,
1769
  SS_HVPARAMS_XEN_HVM,
1770
  SS_HVPARAMS_XEN_KVM,
1771
  SS_HVPARAMS_XEN_CHROOT,
1772
  SS_HVPARAMS_XEN_LXC,
1773
  ])
1774

    
1775
SS_FILE_PERMS = 0444
1776

    
1777
# cluster wide default parameters
1778
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1779

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

    
1898
HVC_GLOBALS = compat.UniqueFrozenset([
1899
  HV_MIGRATION_PORT,
1900
  HV_MIGRATION_BANDWIDTH,
1901
  HV_MIGRATION_MODE,
1902
  HV_XEN_CMD,
1903
  ])
1904

    
1905
BEC_DEFAULTS = {
1906
  BE_MINMEM: 128,
1907
  BE_MAXMEM: 128,
1908
  BE_VCPUS: 1,
1909
  BE_AUTO_BALANCE: True,
1910
  BE_ALWAYS_FAILOVER: False,
1911
  BE_SPINDLE_USE: 1,
1912
  }
1913

    
1914
NDC_DEFAULTS = {
1915
  ND_OOB_PROGRAM: "",
1916
  ND_SPINDLE_COUNT: 1,
1917
  ND_EXCLUSIVE_STORAGE: False,
1918
  ND_OVS: False,
1919
  ND_OVS_NAME: DEFAULT_OVS,
1920
  ND_OVS_LINK: ""
1921
  }
1922

    
1923
NDC_GLOBALS = compat.UniqueFrozenset([
1924
  ND_EXCLUSIVE_STORAGE,
1925
  ])
1926

    
1927
DISK_LD_DEFAULTS = {
1928
  DT_DRBD8: {
1929
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1930
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1931
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1932
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1933
    LDP_DISK_CUSTOM: "",
1934
    LDP_NET_CUSTOM: "",
1935
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1936
    LDP_DYNAMIC_RESYNC: False,
1937

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

    
1961
# readability shortcuts
1962
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1963
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1964

    
1965
DISK_DT_DEFAULTS = {
1966
  DT_PLAIN: {
1967
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1968
    },
1969
  DT_DRBD8: {
1970
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1971
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1972
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1973
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1974
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1975
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1976
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1977
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1978
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1979
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1980
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1981
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1982
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1983
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1984
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1985
    },
1986
  DT_DISKLESS: {},
1987
  DT_FILE: {},
1988
  DT_SHARED_FILE: {},
1989
  DT_BLOCK: {},
1990
  DT_RBD: {
1991
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL]
1992
    },
1993
  DT_EXT: {},
1994
  }
1995

    
1996
# we don't want to export the shortcuts
1997
del _LV_DEFAULTS, _DRBD_DEFAULTS
1998

    
1999
NICC_DEFAULTS = {
2000
  NIC_MODE: NIC_MODE_BRIDGED,
2001
  NIC_LINK: DEFAULT_BRIDGE,
2002
  NIC_VLAN: VALUE_HS_NOTHING,
2003
  }
2004

    
2005
# All of the following values are quite arbitrarily - there are no
2006
# "good" defaults, these must be customised per-site
2007
ISPECS_MINMAX_DEFAULTS = {
2008
  ISPECS_MIN: {
2009
    ISPEC_MEM_SIZE: 128,
2010
    ISPEC_CPU_COUNT: 1,
2011
    ISPEC_DISK_COUNT: 1,
2012
    ISPEC_DISK_SIZE: 1024,
2013
    ISPEC_NIC_COUNT: 1,
2014
    ISPEC_SPINDLE_USE: 1,
2015
    },
2016
  ISPECS_MAX: {
2017
    ISPEC_MEM_SIZE: 32768,
2018
    ISPEC_CPU_COUNT: 8,
2019
    ISPEC_DISK_COUNT: MAX_DISKS,
2020
    ISPEC_DISK_SIZE: 1024 * 1024,
2021
    ISPEC_NIC_COUNT: MAX_NICS,
2022
    ISPEC_SPINDLE_USE: 12,
2023
    },
2024
  }
2025
IPOLICY_DEFAULTS = {
2026
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
2027
  ISPECS_STD: {
2028
    ISPEC_MEM_SIZE: 128,
2029
    ISPEC_CPU_COUNT: 1,
2030
    ISPEC_DISK_COUNT: 1,
2031
    ISPEC_DISK_SIZE: 1024,
2032
    ISPEC_NIC_COUNT: 1,
2033
    ISPEC_SPINDLE_USE: 1,
2034
    },
2035
  IPOLICY_DTS: list(DISK_TEMPLATES),
2036
  IPOLICY_VCPU_RATIO: 4.0,
2037
  IPOLICY_SPINDLE_RATIO: 32.0,
2038
  }
2039

    
2040
MASTER_POOL_SIZE_DEFAULT = 10
2041

    
2042
# Exclusive storage:
2043
# Error margin used to compare physical disks
2044
PART_MARGIN = .01
2045
# Space reserved when creating instance disks
2046
PART_RESERVED = .02
2047

    
2048
CONFD_PROTOCOL_VERSION = 1
2049

    
2050
CONFD_REQ_PING = 0
2051
CONFD_REQ_NODE_ROLE_BYNAME = 1
2052
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
2053
CONFD_REQ_CLUSTER_MASTER = 3
2054
CONFD_REQ_NODE_PIP_LIST = 4
2055
CONFD_REQ_MC_PIP_LIST = 5
2056
CONFD_REQ_INSTANCES_IPS_LIST = 6
2057
CONFD_REQ_NODE_DRBD = 7
2058
CONFD_REQ_NODE_INSTANCES = 8
2059

    
2060
# Confd request query fields. These are used to narrow down queries.
2061
# These must be strings rather than integers, because json-encoding
2062
# converts them to strings anyway, as they're used as dict-keys.
2063
CONFD_REQQ_LINK = "0"
2064
CONFD_REQQ_IP = "1"
2065
CONFD_REQQ_IPLIST = "2"
2066
CONFD_REQQ_FIELDS = "3"
2067

    
2068
CONFD_REQFIELD_NAME = "0"
2069
CONFD_REQFIELD_IP = "1"
2070
CONFD_REQFIELD_MNODE_PIP = "2"
2071

    
2072
CONFD_REQS = compat.UniqueFrozenset([
2073
  CONFD_REQ_PING,
2074
  CONFD_REQ_NODE_ROLE_BYNAME,
2075
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
2076
  CONFD_REQ_CLUSTER_MASTER,
2077
  CONFD_REQ_NODE_PIP_LIST,
2078
  CONFD_REQ_MC_PIP_LIST,
2079
  CONFD_REQ_INSTANCES_IPS_LIST,
2080
  CONFD_REQ_NODE_DRBD,
2081
  ])
2082

    
2083
CONFD_REPL_STATUS_OK = 0
2084
CONFD_REPL_STATUS_ERROR = 1
2085
CONFD_REPL_STATUS_NOTIMPLEMENTED = 2
2086

    
2087
CONFD_REPL_STATUSES = compat.UniqueFrozenset([
2088
  CONFD_REPL_STATUS_OK,
2089
  CONFD_REPL_STATUS_ERROR,
2090
  CONFD_REPL_STATUS_NOTIMPLEMENTED,
2091
  ])
2092

    
2093
(CONFD_NODE_ROLE_MASTER,
2094
 CONFD_NODE_ROLE_CANDIDATE,
2095
 CONFD_NODE_ROLE_OFFLINE,
2096
 CONFD_NODE_ROLE_DRAINED,
2097
 CONFD_NODE_ROLE_REGULAR,
2098
 ) = range(5)
2099

    
2100
# A few common errors for confd
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 = 150
2256
CPUAVGLOAD_WINDOW_SIZE = 600
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
# Do not re-export imported modules
2265
del re, _vcsversion, _constants, socket, pathutils, compat
2266

    
2267

    
2268
ALLOCATABLE_KEY = "allocatable"
2269
FAILED_KEY = "failed"