Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 9b9e088c

History | View | Annotate | Download (63.5 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
DISK_USERSPACE = _constants.DISK_USERSPACE
523
DISK_KERNELSPACE = _constants.DISK_KERNELSPACE
524
DISK_VALID_ACCESS_MODES = _constants.DISK_VALID_ACCESS_MODES
525

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

    
538
# Instance export mode
539
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
540
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
541
EXPORT_MODES = _constants.EXPORT_MODES
542

    
543
# instance creation modes
544
INSTANCE_CREATE = _constants.INSTANCE_CREATE
545
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
546
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
547
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
548

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

    
553
# Remote import/export certificate validity in seconds
554
RIE_CERT_VALIDITY = 24 * 60 * 60
555

    
556
# Overall timeout for establishing connection
557
RIE_CONNECT_TIMEOUT = 180
558

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

    
562
# Export only: number of attempts to connect
563
RIE_CONNECT_RETRIES = 10
564

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

    
568
FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP])
569

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

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

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

    
593
#: Exit code for query operations with unknown fields
594
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
595

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

    
604
MAX_TAG_LEN = _constants.MAX_TAG_LEN
605
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
606

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

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

    
636
#: Key for job IDs in opcode result
637
JOB_IDS_KEY = "jobs"
638

    
639
# runparts results
640
(RUNPARTS_SKIP,
641
 RUNPARTS_RUN,
642
 RUNPARTS_ERR) = range(3)
643

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

    
650
# RPC constants
651
(RPC_ENCODING_NONE,
652
 RPC_ENCODING_ZLIB_BASE64) = range(2)
653

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

    
662
# Timeout for connecting to nodes (seconds)
663
RPC_CONNECT_TIMEOUT = 5
664

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

    
679
OS_API_FILE = "ganeti_api_version"
680
OS_VARIANTS_FILE = "variants.list"
681
OS_PARAMETERS_FILE = "parameters.list"
682

    
683
OS_VALIDATE_PARAMETERS = "parameters"
684
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
685

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

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

    
712
ES_PARAMETERS_FILE = "parameters.list"
713

    
714
# reboot types
715
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
716
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
717
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
718
REBOOT_TYPES = _constants.REBOOT_TYPES
719

    
720
# instance reboot behaviors
721
INSTANCE_REBOOT_ALLOWED = "reboot"
722
INSTANCE_REBOOT_EXIT = "exit"
723

    
724
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
725
  INSTANCE_REBOOT_ALLOWED,
726
  INSTANCE_REBOOT_EXIT,
727
  ])
728

    
729
VTYPE_STRING = _constants.VTYPE_STRING
730
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
731
VTYPE_BOOL = _constants.VTYPE_BOOL
732
VTYPE_SIZE = _constants.VTYPE_SIZE
733
VTYPE_INT = _constants.VTYPE_INT
734
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
735

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

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

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

    
834

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

    
910
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
911

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

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

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

    
939
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
940
  HV_MIGRATION_FAILED,
941
  HV_MIGRATION_CANCELLED,
942
  ])
943

    
944
# KVM-specific statuses
945
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
946

    
947
# Node info keys
948
HV_NODEINFO_KEY_VERSION = "hv_version"
949

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

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

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

    
973
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
974

    
975
# Disk state
976
DS_DISK_TOTAL = "disk_total"
977
DS_DISK_RESERVED = "disk_reserved"
978
DS_DISK_OVERHEAD = "disk_overhead"
979

    
980
DS_DEFAULTS = {
981
  DS_DISK_TOTAL: 0,
982
  DS_DISK_RESERVED: 0,
983
  DS_DISK_OVERHEAD: 0,
984
  }
985

    
986
DSS_PARAMETER_TYPES = {
987
  DS_DISK_TOTAL: VTYPE_INT,
988
  DS_DISK_RESERVED: VTYPE_INT,
989
  DS_DISK_OVERHEAD: VTYPE_INT,
990
  }
991

    
992
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
993
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
994

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

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

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

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

    
1025
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1026

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

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

    
1044
ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys())
1045

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

    
1054
ISPECS_MINMAX_KEYS = compat.UniqueFrozenset([
1055
  ISPECS_MIN,
1056
  ISPECS_MAX,
1057
  ])
1058

    
1059
IPOLICY_PARAMETERS = compat.UniqueFrozenset([
1060
  IPOLICY_VCPU_RATIO,
1061
  IPOLICY_SPINDLE_RATIO,
1062
  ])
1063

    
1064
IPOLICY_ALL_KEYS = (IPOLICY_PARAMETERS |
1065
                    frozenset([ISPECS_MINMAX, ISPECS_STD, IPOLICY_DTS]))
1066

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

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

    
1084
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
1085

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

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

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

    
1173
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1174

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

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

    
1190
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1191

    
1192
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1193
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1194

    
1195
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1196
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1197
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1198
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1199
OOB_STATUSES = _constants.OOB_STATUSES
1200

    
1201
# Instance Parameters Profile
1202
PP_DEFAULT = "default"
1203

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

    
1209
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1210
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1211
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1212
NIC_IP_POOL = _constants.NIC_IP_POOL
1213
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1214

    
1215
RESERVE_ACTION = "reserve"
1216
RELEASE_ACTION = "release"
1217

    
1218
NICS_PARAMETER_TYPES = {
1219
  NIC_MODE: VTYPE_STRING,
1220
  NIC_LINK: VTYPE_STRING,
1221
  NIC_VLAN: VTYPE_MAYBE_STRING,
1222
  }
1223

    
1224
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1225

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

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

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

    
1278
VNC_BASE_PORT = 5900
1279
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1280

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

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

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

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

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

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

    
1352
# Mouse types:
1353
HT_MOUSE_MOUSE = "mouse"
1354
HT_MOUSE_TABLET = "tablet"
1355

    
1356
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1357
  HT_MOUSE_MOUSE,
1358
  HT_MOUSE_TABLET,
1359
  ])
1360

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

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

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

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

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

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

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

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

    
1413
# Security models
1414
HT_SM_NONE = "none"
1415
HT_SM_USER = "user"
1416
HT_SM_POOL = "pool"
1417

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

    
1424
# Kvm flag values
1425
HT_KVM_ENABLED = "enabled"
1426
HT_KVM_DISABLED = "disabled"
1427

    
1428
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1429

    
1430
# Migration type
1431
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1432
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1433
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1434

    
1435
# Cluster Verify steps
1436
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1437
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1438

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

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

    
1486
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1487
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1488

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

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

    
1528
# Admin states
1529
ADMINST_UP = _constants.ADMINST_UP
1530
ADMINST_DOWN = _constants.ADMINST_DOWN
1531
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1532
ADMINST_ALL = _constants.ADMINST_ALL
1533

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

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

    
1546
# Allocator framework constants
1547
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1548
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1549
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1550
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1551

    
1552
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1553
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1554
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1555
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1556
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1557
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1558

    
1559
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1560
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1561

    
1562
# Node evacuation
1563
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1564
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1565
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1566
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1567

    
1568
# Job queue
1569
JOB_QUEUE_VERSION = 1
1570
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1571
JOB_QUEUE_FILES_PERMS = 0640
1572

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

    
1576
# unchanged job return
1577
JOB_NOTCHANGED = "nochange"
1578

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

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

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

    
1612
# Lock recalculate mode
1613
LOCKS_REPLACE = "replace"
1614
LOCKS_APPEND = "append"
1615

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

    
1625
# Execution log types
1626
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1627
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1628
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1629

    
1630
# /etc/hosts modification
1631
ETC_HOSTS_ADD = "add"
1632
ETC_HOSTS_REMOVE = "remove"
1633

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

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

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

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

    
1677
#: List of resources which can be queried using RAPI
1678
QR_VIA_RAPI = QR_VIA_LUXI
1679

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

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

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

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

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

    
1731
# max dynamic devices
1732
MAX_NICS = 8
1733
MAX_DISKS = 16
1734

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

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

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

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

    
1782
SS_FILE_PERMS = 0444
1783

    
1784
# cluster wide default parameters
1785
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1786

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

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

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

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

    
1930
NDC_GLOBALS = compat.UniqueFrozenset([
1931
  ND_EXCLUSIVE_STORAGE,
1932
  ])
1933

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

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

    
1969
# readability shortcuts
1970
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1971
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1972

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

    
2005
# we don't want to export the shortcuts
2006
del _LV_DEFAULTS, _DRBD_DEFAULTS
2007

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

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

    
2049
MASTER_POOL_SIZE_DEFAULT = 10
2050

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

    
2057
CONFD_PROTOCOL_VERSION = 1
2058

    
2059
CONFD_REQ_PING = 0
2060
CONFD_REQ_NODE_ROLE_BYNAME = 1
2061
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
2062
CONFD_REQ_CLUSTER_MASTER = 3
2063
CONFD_REQ_NODE_PIP_LIST = 4
2064
CONFD_REQ_MC_PIP_LIST = 5
2065
CONFD_REQ_INSTANCES_IPS_LIST = 6
2066
CONFD_REQ_NODE_DRBD = 7
2067
CONFD_REQ_NODE_INSTANCES = 8
2068

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

    
2077
CONFD_REQFIELD_NAME = "0"
2078
CONFD_REQFIELD_IP = "1"
2079
CONFD_REQFIELD_MNODE_PIP = "2"
2080

    
2081
CONFD_REQS = compat.UniqueFrozenset([
2082
  CONFD_REQ_PING,
2083
  CONFD_REQ_NODE_ROLE_BYNAME,
2084
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
2085
  CONFD_REQ_CLUSTER_MASTER,
2086
  CONFD_REQ_NODE_PIP_LIST,
2087
  CONFD_REQ_MC_PIP_LIST,
2088
  CONFD_REQ_INSTANCES_IPS_LIST,
2089
  CONFD_REQ_NODE_DRBD,
2090
  ])
2091

    
2092
CONFD_REPL_STATUS_OK = 0
2093
CONFD_REPL_STATUS_ERROR = 1
2094
CONFD_REPL_STATUS_NOTIMPLEMENTED = 2
2095

    
2096
CONFD_REPL_STATUSES = compat.UniqueFrozenset([
2097
  CONFD_REPL_STATUS_OK,
2098
  CONFD_REPL_STATUS_ERROR,
2099
  CONFD_REPL_STATUS_NOTIMPLEMENTED,
2100
  ])
2101

    
2102
(CONFD_NODE_ROLE_MASTER,
2103
 CONFD_NODE_ROLE_CANDIDATE,
2104
 CONFD_NODE_ROLE_OFFLINE,
2105
 CONFD_NODE_ROLE_DRAINED,
2106
 CONFD_NODE_ROLE_REGULAR,
2107
 ) = range(5)
2108

    
2109
# A few common errors for confd
2110
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
2111
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
2112
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
2113

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

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

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

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

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

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

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

    
2153
# User-id pool minimum/maximum acceptable user-ids.
2154
UIDPOOL_UID_MIN = 0
2155
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2156

    
2157
# Name or path of the pgrep command
2158
PGREP = "pgrep"
2159

    
2160
# Name of the node group that gets created at cluster init or upgrade
2161
INITIAL_NODE_GROUP_NAME = "default"
2162

    
2163
# Possible values for NodeGroup.alloc_policy
2164
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2165
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2166
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2167
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2168

    
2169
# Temporary external/shared storage parameters
2170
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2171

    
2172
# qemu-img path, required for ovfconverter
2173
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2174

    
2175
# Whether htools was enabled at compilation time
2176
HTOOLS = _constants.HTOOLS
2177
# The hail iallocator
2178
IALLOC_HAIL = "hail"
2179

    
2180
# Fake opcodes for functions that have hooks attached to them via
2181
# backend.RunLocalHooks
2182
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2183
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2184

    
2185
# SSH key types
2186
SSHK_RSA = "rsa"
2187
SSHK_DSA = "dsa"
2188
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2189

    
2190
# SSH authorized key types
2191
SSHAK_RSA = "ssh-rsa"
2192
SSHAK_DSS = "ssh-dss"
2193
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2194

    
2195
# SSH setup
2196
SSHS_CLUSTER_NAME = "cluster_name"
2197
SSHS_SSH_HOST_KEY = "ssh_host_key"
2198
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2199
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2200

    
2201
#: Key files for SSH daemon
2202
SSH_DAEMON_KEYFILES = {
2203
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2204
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2205
  }
2206

    
2207
# Node daemon setup
2208
NDS_CLUSTER_NAME = "cluster_name"
2209
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2210
NDS_SSCONF = "ssconf"
2211
NDS_START_NODE_DAEMON = "start_node_daemon"
2212

    
2213
# Path generating random UUID
2214
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2215

    
2216
# Regex string for verifying a UUID
2217
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2218

    
2219
# Auto-repair tag prefixes
2220
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2221
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2222
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2223
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2224
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2225

    
2226
# Auto-repair levels
2227
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2228
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2229
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2230
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2231
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2232

    
2233
# Auto-repair results
2234
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2235
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2236
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2237
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2238

    
2239
# The version identifier for builtin data collectors
2240
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2241

    
2242
# The reason trail opcode parameter name
2243
OPCODE_REASON = _constants.OPCODE_REASON
2244

    
2245
# The source reasons for the execution of an OpCode
2246
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2247
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2248
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2249
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2250
OPCODE_REASON_SRC_USER = "gnt:user"
2251

    
2252
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2253
  OPCODE_REASON_SRC_CLIENT,
2254
  OPCODE_REASON_SRC_NODED,
2255
  OPCODE_REASON_SRC_OPCODE,
2256
  OPCODE_REASON_SRC_RLIB2,
2257
  OPCODE_REASON_SRC_USER,
2258
  ])
2259

    
2260
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2261

    
2262
# CPU load collector variables
2263
STAT_FILE = _constants.STAT_FILE
2264
CPUAVGLOAD_BUFFER_SIZE = 150
2265
CPUAVGLOAD_WINDOW_SIZE = 600
2266

    
2267
# Mond's variable for periodical data collection
2268
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2269

    
2270
# MonD's latest API version
2271
MOND_LATEST_API_VERSION = 1
2272

    
2273
# Do not re-export imported modules
2274
del re, _vcsversion, _constants, socket, pathutils, compat
2275

    
2276

    
2277
ALLOCATABLE_KEY = "allocatable"
2278
FAILED_KEY = "failed"