Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 06fd57e5

History | View | Annotate | Download (66.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 _autoconf
28
from ganeti import _constants
29
from ganeti import _vcsversion
30
from ganeti import compat
31
from ganeti import pathutils
32

    
33

    
34
# various versions
35
RELEASE_VERSION = _autoconf.PACKAGE_VERSION
36
OS_API_V10 = 10
37
OS_API_V15 = 15
38
OS_API_V20 = 20
39
OS_API_VERSIONS = compat.UniqueFrozenset([
40
  OS_API_V10,
41
  OS_API_V15,
42
  OS_API_V20,
43
  ])
44
VCS_VERSION = _vcsversion.VCS_VERSION
45
EXPORT_VERSION = 0
46
RAPI_VERSION = 2
47

    
48

    
49
# Format for CONFIG_VERSION:
50
#   01 03 0123 = 01030123
51
#   ^^ ^^ ^^^^
52
#   |  |  + Configuration version/revision
53
#   |  + Minor version
54
#   + Major version
55
#
56
# It is stored as an integer. Make sure not to write an octal number.
57

    
58
# BuildVersion and SplitVersion must be in here because we can't import other
59
# modules. The cfgupgrade tool must be able to read and write version numbers
60
# and thus requires these functions. To avoid code duplication, they're kept in
61
# here.
62

    
63
def BuildVersion(major, minor, revision):
64
  """Calculates int version number from major, minor and revision numbers.
65

66
  Returns: int representing version number
67

68
  """
69
  assert isinstance(major, int)
70
  assert isinstance(minor, int)
71
  assert isinstance(revision, int)
72
  return (1000000 * major +
73
            10000 * minor +
74
                1 * revision)
75

    
76

    
77
def SplitVersion(version):
78
  """Splits version number stored in an int.
79

80
  Returns: tuple; (major, minor, revision)
81

82
  """
83
  assert isinstance(version, int)
84

    
85
  (major, remainder) = divmod(version, 1000000)
86
  (minor, revision) = divmod(remainder, 10000)
87

    
88
  return (major, minor, revision)
89

    
90

    
91
CONFIG_MAJOR = int(_autoconf.VERSION_MAJOR)
92
CONFIG_MINOR = int(_autoconf.VERSION_MINOR)
93
CONFIG_REVISION = 0
94
CONFIG_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, CONFIG_REVISION)
95

    
96
#: RPC protocol version
97
PROTOCOL_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, 0)
98

    
99
# user separation
100
DAEMONS_GROUP = _constants.DAEMONS_GROUP
101
ADMIN_GROUP = _constants.ADMIN_GROUP
102
MASTERD_USER = _constants.MASTERD_USER
103
MASTERD_GROUP = _constants.MASTERD_GROUP
104
RAPI_USER = _constants.RAPI_USER
105
RAPI_GROUP = _constants.RAPI_GROUP
106
CONFD_USER = _constants.CONFD_USER
107
CONFD_GROUP = _constants.CONFD_GROUP
108
LUXID_USER = _constants.LUXID_USER
109
LUXID_GROUP = _constants.LUXID_GROUP
110
NODED_USER = _constants.NODED_USER
111
NODED_GROUP = _constants.NODED_GROUP
112
MOND_USER = _constants.MOND_USER
113
MOND_GROUP = _constants.MOND_GROUP
114
SSH_LOGIN_USER = _constants.SSH_LOGIN_USER
115
SSH_CONSOLE_USER = _constants.SSH_CONSOLE_USER
116

    
117
# cpu pinning separators and constants
118
CPU_PINNING_SEP = ":"
119
CPU_PINNING_ALL = "all"
120
# internal representation of "all"
121
CPU_PINNING_ALL_VAL = -1
122
# one "all" entry in a CPU list means CPU pinning is off
123
CPU_PINNING_OFF = [CPU_PINNING_ALL_VAL]
124

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

    
134
# A KVM-specific implementation detail - the following value is used
135
# to set CPU affinity to all processors (#0 through #31), per taskset
136
# man page.
137
# FIXME: This only works for machines with up to 32 CPU cores
138
CPU_PINNING_ALL_KVM = 0xFFFFFFFF
139

    
140
# Wipe
141
DD_CMD = "dd"
142
MAX_WIPE_CHUNK = 1024 # 1GB
143
MIN_WIPE_CHUNK_PERCENT = 10
144

    
145
RUN_DIRS_MODE = 0775
146
SECURE_DIR_MODE = 0700
147
SECURE_FILE_MODE = 0600
148
ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/"
149
ENABLE_CONFD = _autoconf.ENABLE_CONFD
150
ENABLE_MOND = _autoconf.ENABLE_MOND
151
ENABLE_SPLIT_QUERY = _autoconf.ENABLE_SPLIT_QUERY
152
ENABLE_RESTRICTED_COMMANDS = _autoconf.ENABLE_RESTRICTED_COMMANDS
153

    
154
# SSH constants
155
SSH = _constants.SSH
156
SCP = _constants.SCP
157

    
158
NODED = _constants.NODED
159
CONFD = _constants.CONFD
160
LUXID = _constants.LUXID
161
RAPI = _constants.RAPI
162
MASTERD = _constants.MASTERD
163
MOND = _constants.MOND
164

    
165
DAEMONS = _constants.DAEMONS
166

    
167
DAEMONS_PORTS = _constants.DAEMONS_PORTS
168

    
169
DEFAULT_NODED_PORT = _constants.DEFAULT_NODED_PORT
170
DEFAULT_CONFD_PORT = _constants.DEFAULT_CONFD_PORT
171
DEFAULT_MOND_PORT = _constants.DEFAULT_MOND_PORT
172
DEFAULT_RAPI_PORT = _constants.DEFAULT_RAPI_PORT
173

    
174
FIRST_DRBD_PORT = 11000
175
LAST_DRBD_PORT = 14999
176

    
177
DAEMONS_LOGBASE = _constants.DAEMONS_LOGBASE
178

    
179
DAEMONS_LOGFILES = \
180
    dict((daemon, pathutils.GetLogFilename(DAEMONS_LOGBASE[daemon]))
181
         for daemon in DAEMONS_LOGBASE)
182

    
183
# Some daemons might require more than one logfile.
184
# Specifically, right now only the Haskell http library "snap", used by the
185
# monitoring daemon, requires multiple log files.
186

    
187
# These are the only valid reasons for having an extra logfile
188
EXTRA_LOGREASON_ACCESS = "access"
189
EXTRA_LOGREASON_ERROR = "error"
190

    
191
VALID_EXTRA_LOGREASONS = compat.UniqueFrozenset([
192
  EXTRA_LOGREASON_ACCESS,
193
  EXTRA_LOGREASON_ERROR,
194
  ])
195

    
196
# These are the extra logfiles, grouped by daemon
197
DAEMONS_EXTRA_LOGBASE = {
198
  MOND: {
199
    EXTRA_LOGREASON_ACCESS: _constants.EXTRA_LOGREASON_ACCESS,
200
    EXTRA_LOGREASON_ERROR: _constants.EXTRA_LOGREASON_ERROR,
201
    }
202
  }
203

    
204
DAEMONS_EXTRA_LOGFILES = \
205
  dict((daemon, dict((extra,
206
       pathutils.GetLogFilename(DAEMONS_EXTRA_LOGBASE[daemon][extra]))
207
       for extra in DAEMONS_EXTRA_LOGBASE[daemon]))
208
         for daemon in DAEMONS_EXTRA_LOGBASE)
209

    
210
DEV_CONSOLE = _constants.DEV_CONSOLE
211

    
212
PROC_MOUNTS = "/proc/mounts"
213

    
214
# Local UniX Interface related constants
215
LUXI_EOM = "\3"
216
LUXI_VERSION = CONFIG_VERSION
217
#: Environment variable for the luxi override socket
218
LUXI_OVERRIDE = "FORCE_LUXI_SOCKET"
219
LUXI_OVERRIDE_MASTER = "master"
220
LUXI_OVERRIDE_QUERY = "query"
221

    
222
# one of "no", "yes", "only"
223
SYSLOG_USAGE = _constants.SYSLOG_USAGE
224
SYSLOG_NO = _constants.SYSLOG_NO
225
SYSLOG_YES = _constants.SYSLOG_YES
226
SYSLOG_ONLY = _constants.SYSLOG_ONLY
227
SYSLOG_SOCKET = _constants.SYSLOG_SOCKET
228

    
229
EXPORT_CONF_FILE = "config.ini"
230

    
231
XEN_BOOTLOADER = _constants.XEN_BOOTLOADER
232
XEN_KERNEL = _constants.XEN_KERNEL
233
XEN_INITRD = _constants.XEN_INITRD
234
XEN_CMD_XM = _constants.XEN_CMD_XM
235
XEN_CMD_XL = _constants.XEN_CMD_XL
236
KNOWN_XEN_COMMANDS = _constants.KNOWN_XEN_COMMANDS
237

    
238
# When the Xen toolstack used is "xl", live migration requires the source host
239
# to connect to the target host via ssh (xl runs this command). We need to pass
240
# the command xl runs some extra info so that it can use Ganeti's key
241
# verification and not fail. Note that this string is incomplete: it must be
242
# filled with the cluster name before being used.
243
XL_SSH_CMD = ("ssh -l %s -oGlobalKnownHostsFile=%s"
244
              " -oUserKnownHostsFile=/dev/null"
245
              " -oCheckHostIp=no -oStrictHostKeyChecking=yes"
246
              " -oHostKeyAlias=%%s") % (SSH_LOGIN_USER,
247
                                        pathutils.SSH_KNOWN_HOSTS_FILE)
248

    
249
KVM_PATH = _autoconf.KVM_PATH
250
KVM_KERNEL = _autoconf.KVM_KERNEL
251
SOCAT_PATH = _autoconf.SOCAT_PATH
252
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
253
SOCAT_USE_COMPRESS = _autoconf.SOCAT_USE_COMPRESS
254
SOCAT_ESCAPE_CODE = "0x1d"
255

    
256
#: Console as SSH command
257
CONS_SSH = "ssh"
258

    
259
#: Console as VNC server
260
CONS_VNC = "vnc"
261

    
262
#: Console as SPICE server
263
CONS_SPICE = "spice"
264

    
265
#: Display a message for console access
266
CONS_MESSAGE = "msg"
267

    
268
#: All console types
269
CONS_ALL = compat.UniqueFrozenset([
270
  CONS_SSH,
271
  CONS_VNC,
272
  CONS_SPICE,
273
  CONS_MESSAGE,
274
  ])
275

    
276
# For RSA keys more bits are better, but they also make operations more
277
# expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year
278
# 2010 on.
279
RSA_KEY_BITS = 2048
280

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

    
289
# Digest used to sign certificates ("openssl x509" uses SHA1 by default)
290
X509_CERT_SIGN_DIGEST = "SHA1"
291

    
292
# Default validity of certificates in days
293
X509_CERT_DEFAULT_VALIDITY = 365 * 5
294

    
295
# commonName (CN) used in certificates
296
X509_CERT_CN = "ganeti.example.com"
297

    
298
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
299

    
300
# Import/export daemon mode
301
IEM_IMPORT = "import"
302
IEM_EXPORT = "export"
303

    
304
# Import/export transport compression
305
IEC_NONE = "none"
306
IEC_GZIP = "gzip"
307
IEC_ALL = compat.UniqueFrozenset([
308
  IEC_NONE,
309
  IEC_GZIP,
310
  ])
311

    
312
IE_CUSTOM_SIZE = "fd"
313

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

    
316
# Import/export I/O
317
# Direct file I/O, equivalent to a shell's I/O redirection using '<' or '>'
318
IEIO_FILE = "file"
319
# Raw block device I/O using "dd"
320
IEIO_RAW_DISK = "raw"
321
# OS definition import/export script
322
IEIO_SCRIPT = "script"
323

    
324
VALUE_DEFAULT = "default"
325
VALUE_AUTO = "auto"
326
VALUE_GENERATE = "generate"
327
VALUE_NONE = "none"
328
VALUE_TRUE = "true"
329
VALUE_FALSE = "false"
330
VALUE_HS_NOTHING = {"Nothing": None}
331

    
332

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

    
336
# hooks-related constants
337
HOOKS_PHASE_PRE = "pre"
338
HOOKS_PHASE_POST = "post"
339
HOOKS_NAME_CFGUPDATE = "config-update"
340
HOOKS_NAME_WATCHER = "watcher"
341
HOOKS_VERSION = 2
342
HOOKS_PATH = "/sbin:/bin:/usr/sbin:/usr/bin"
343

    
344
# hooks subject type (what object type does the LU deal with)
345
HTYPE_CLUSTER = "CLUSTER"
346
HTYPE_NODE = "NODE"
347
HTYPE_GROUP = "GROUP"
348
HTYPE_INSTANCE = "INSTANCE"
349
HTYPE_NETWORK = "NETWORK"
350

    
351
HKR_SKIP = 0
352
HKR_FAIL = 1
353
HKR_SUCCESS = 2
354

    
355
# Storage types
356
ST_BLOCK = "blockdev"
357
ST_DISKLESS = "diskless"
358
ST_EXT = "ext"
359
ST_FILE = "file"
360
ST_LVM_PV = "lvm-pv"
361
ST_LVM_VG = "lvm-vg"
362
ST_RADOS = "rados"
363

    
364
STORAGE_TYPES = compat.UniqueFrozenset([
365
  ST_BLOCK,
366
  ST_DISKLESS,
367
  ST_EXT,
368
  ST_FILE,
369
  ST_LVM_PV,
370
  ST_LVM_VG,
371
  ST_RADOS,
372
  ])
373

    
374
# the set of storage types for which storage reporting is available
375
# FIXME: Remove this, once storage reporting is available for all types.
376
STS_REPORT = compat.UniqueFrozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG])
377

    
378
# Storage fields
379
# first two are valid in LU context only, not passed to backend
380
SF_NODE = "node"
381
SF_TYPE = "type"
382
# and the rest are valid in backend
383
SF_NAME = "name"
384
SF_SIZE = "size"
385
SF_FREE = "free"
386
SF_USED = "used"
387
SF_ALLOCATABLE = "allocatable"
388

    
389
# Storage operations
390
SO_FIX_CONSISTENCY = "fix-consistency"
391

    
392
# Available fields per storage type
393
VALID_STORAGE_FIELDS = compat.UniqueFrozenset([
394
  SF_NODE,
395
  SF_NAME,
396
  SF_TYPE,
397
  SF_SIZE,
398
  SF_USED,
399
  SF_FREE,
400
  SF_ALLOCATABLE,
401
  ])
402

    
403
MODIFIABLE_STORAGE_FIELDS = {
404
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
405
  }
406

    
407
VALID_STORAGE_OPERATIONS = {
408
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
409
  }
410

    
411
# Volume fields
412
VF_DEV = "dev"
413
VF_INSTANCE = "instance"
414
VF_NAME = "name"
415
VF_NODE = "node"
416
VF_PHYS = "phys"
417
VF_SIZE = "size"
418
VF_VG = "vg"
419

    
420
# Local disk status
421
# Note: Code depends on LDS_OKAY < LDS_UNKNOWN < LDS_FAULTY
422
(LDS_OKAY,
423
 LDS_UNKNOWN,
424
 LDS_FAULTY) = range(1, 4)
425

    
426
LDS_NAMES = {
427
  LDS_OKAY: "ok",
428
  LDS_UNKNOWN: "unknown",
429
  LDS_FAULTY: "faulty",
430
}
431

    
432
# disk template types
433
DT_BLOCK = "blockdev"
434
DT_DISKLESS = "diskless"
435
DT_DRBD8 = "drbd"
436
DT_EXT = "ext"
437
DT_FILE = "file"
438
DT_PLAIN = "plain"
439
DT_RBD = "rbd"
440
DT_SHARED_FILE = "sharedfile"
441

    
442
# This is used to order determine the default disk template when the list
443
# of enabled disk templates is inferred from the current state of the cluster.
444
# This only happens on an upgrade from a version of Ganeti that did not
445
# support the 'enabled_disk_templates' so far.
446
DISK_TEMPLATE_PREFERENCE = [
447
  DT_BLOCK,
448
  DT_DISKLESS,
449
  DT_DRBD8,
450
  DT_EXT,
451
  DT_FILE,
452
  DT_PLAIN,
453
  DT_RBD,
454
  DT_SHARED_FILE,
455
  ]
456

    
457
DISK_TEMPLATES = compat.UniqueFrozenset([
458
  DT_DISKLESS,
459
  DT_PLAIN,
460
  DT_DRBD8,
461
  DT_FILE,
462
  DT_SHARED_FILE,
463
  DT_BLOCK,
464
  DT_RBD,
465
  DT_EXT
466
  ])
467

    
468
# disk templates that are enabled by default
469
DEFAULT_ENABLED_DISK_TEMPLATES = [
470
  DT_DRBD8,
471
  DT_PLAIN,
472
  ]
473

    
474
# mapping of disk templates to storage types
475
MAP_DISK_TEMPLATE_STORAGE_TYPE = {
476
  DT_BLOCK: ST_BLOCK,
477
  DT_DISKLESS: ST_DISKLESS,
478
  DT_DRBD8: ST_LVM_VG,
479
  DT_EXT: ST_EXT,
480
  DT_FILE: ST_FILE,
481
  DT_PLAIN: ST_LVM_VG,
482
  DT_RBD: ST_RADOS,
483
  DT_SHARED_FILE: ST_FILE,
484
  }
485

    
486
# the set of network-mirrored disk templates
487
DTS_INT_MIRROR = compat.UniqueFrozenset([DT_DRBD8])
488

    
489
# the set of externally-mirrored disk templates (e.g. SAN, NAS)
490
DTS_EXT_MIRROR = compat.UniqueFrozenset([
491
  DT_DISKLESS, # 'trivially' externally mirrored
492
  DT_SHARED_FILE,
493
  DT_BLOCK,
494
  DT_RBD,
495
  DT_EXT,
496
  ])
497

    
498
# the set of non-lvm-based disk templates
499
DTS_NOT_LVM = compat.UniqueFrozenset([
500
  DT_DISKLESS,
501
  DT_FILE,
502
  DT_SHARED_FILE,
503
  DT_BLOCK,
504
  DT_RBD,
505
  DT_EXT,
506
  ])
507

    
508
# the set of disk templates which can be grown
509
DTS_GROWABLE = compat.UniqueFrozenset([
510
  DT_PLAIN,
511
  DT_DRBD8,
512
  DT_FILE,
513
  DT_SHARED_FILE,
514
  DT_RBD,
515
  DT_EXT,
516
  ])
517

    
518
# the set of disk templates that allow adoption
519
DTS_MAY_ADOPT = compat.UniqueFrozenset([
520
  DT_PLAIN,
521
  DT_BLOCK,
522
  ])
523

    
524
# the set of disk templates that *must* use adoption
525
DTS_MUST_ADOPT = compat.UniqueFrozenset([DT_BLOCK])
526

    
527
# the set of disk templates that allow migrations
528
DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR)
529

    
530
# the set of file based disk templates
531
DTS_FILEBASED = compat.UniqueFrozenset([
532
  DT_FILE,
533
  DT_SHARED_FILE,
534
  ])
535

    
536
# the set of disk templates that can be moved by copying
537
# Note: a requirement is that they're not accessed externally or shared between
538
# nodes; in particular, sharedfile is not suitable.
539
DTS_COPYABLE = compat.UniqueFrozenset([
540
  DT_FILE,
541
  DT_PLAIN,
542
  ])
543

    
544
# the set of disk templates that are supported by exclusive_storage
545
DTS_EXCL_STORAGE = compat.UniqueFrozenset([DT_PLAIN])
546

    
547
# templates for which we don't perform checks on free space
548
DTS_NO_FREE_SPACE_CHECK = compat.UniqueFrozenset([
549
  DT_FILE,
550
  DT_SHARED_FILE,
551
  DT_RBD,
552
  DT_EXT,
553
  ])
554

    
555
DTS_BLOCK = compat.UniqueFrozenset([
556
  DT_PLAIN,
557
  DT_DRBD8,
558
  DT_BLOCK,
559
  DT_RBD,
560
  DT_EXT,
561
  ])
562

    
563
# drbd constants
564
DRBD_HMAC_ALG = "md5"
565
DRBD_DEFAULT_NET_PROTOCOL = "C"
566
DRBD_MIGRATION_NET_PROTOCOL = "C"
567
DRBD_STATUS_FILE = "/proc/drbd"
568

    
569
#: Size of DRBD meta block device
570
DRBD_META_SIZE = 128
571

    
572
# drbd barrier types
573
DRBD_B_NONE = "n"
574
DRBD_B_DISK_BARRIERS = "b"
575
DRBD_B_DISK_DRAIN = "d"
576
DRBD_B_DISK_FLUSH = "f"
577

    
578
# Valid barrier combinations: "n" or any non-null subset of "bfd"
579
DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([
580
  frozenset([DRBD_B_NONE]),
581
  frozenset([DRBD_B_DISK_BARRIERS]),
582
  frozenset([DRBD_B_DISK_DRAIN]),
583
  frozenset([DRBD_B_DISK_FLUSH]),
584
  frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]),
585
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]),
586
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]),
587
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]),
588
  ])
589

    
590
# rbd tool command
591
RBD_CMD = "rbd"
592

    
593
# file backend driver
594
FD_LOOP = "loop"
595
FD_BLKTAP = "blktap"
596

    
597
# the set of drbd-like disk types
598
LDS_DRBD = compat.UniqueFrozenset([DT_DRBD8])
599

    
600
# disk access mode
601
DISK_RDONLY = "ro"
602
DISK_RDWR = "rw"
603
DISK_ACCESS_SET = compat.UniqueFrozenset([DISK_RDONLY, DISK_RDWR])
604

    
605
# disk replacement mode
606
REPLACE_DISK_PRI = "replace_on_primary"    # replace disks on primary
607
REPLACE_DISK_SEC = "replace_on_secondary"  # replace disks on secondary
608
REPLACE_DISK_CHG = "replace_new_secondary" # change secondary node
609
REPLACE_DISK_AUTO = "replace_auto"
610
REPLACE_MODES = compat.UniqueFrozenset([
611
  REPLACE_DISK_PRI,
612
  REPLACE_DISK_SEC,
613
  REPLACE_DISK_CHG,
614
  REPLACE_DISK_AUTO,
615
  ])
616

    
617
# Instance export mode
618
EXPORT_MODE_LOCAL = "local"
619
EXPORT_MODE_REMOTE = "remote"
620
EXPORT_MODES = compat.UniqueFrozenset([
621
  EXPORT_MODE_LOCAL,
622
  EXPORT_MODE_REMOTE,
623
  ])
624

    
625
# instance creation modes
626
INSTANCE_CREATE = "create"
627
INSTANCE_IMPORT = "import"
628
INSTANCE_REMOTE_IMPORT = "remote-import"
629
INSTANCE_CREATE_MODES = compat.UniqueFrozenset([
630
  INSTANCE_CREATE,
631
  INSTANCE_IMPORT,
632
  INSTANCE_REMOTE_IMPORT,
633
  ])
634

    
635
# Remote import/export handshake message and version
636
RIE_VERSION = 0
637
RIE_HANDSHAKE = "Hi, I'm Ganeti"
638

    
639
# Remote import/export certificate validity in seconds
640
RIE_CERT_VALIDITY = 24 * 60 * 60
641

    
642
# Overall timeout for establishing connection
643
RIE_CONNECT_TIMEOUT = 180
644

    
645
# Export only: how long to wait per connection attempt (seconds)
646
RIE_CONNECT_ATTEMPT_TIMEOUT = 20
647

    
648
# Export only: number of attempts to connect
649
RIE_CONNECT_RETRIES = 10
650

    
651
#: Give child process up to 5 seconds to exit after sending a signal
652
CHILD_LINGER_TIMEOUT = 5.0
653

    
654
FILE_DRIVER = compat.UniqueFrozenset([FD_LOOP, FD_BLKTAP])
655

    
656
# import/export config options
657
INISECT_EXP = "export"
658
INISECT_INS = "instance"
659
INISECT_HYP = "hypervisor"
660
INISECT_BEP = "backend"
661
INISECT_OSP = "os"
662

    
663
# dynamic device modification
664
DDM_ADD = "add"
665
DDM_MODIFY = "modify"
666
DDM_REMOVE = "remove"
667
DDMS_VALUES = compat.UniqueFrozenset([DDM_ADD, DDM_REMOVE])
668
DDMS_VALUES_WITH_MODIFY = (DDMS_VALUES | frozenset([
669
  DDM_MODIFY,
670
  ]))
671
# TODO: DDM_SWAP, DDM_MOVE?
672

    
673
# common exit codes
674
EXIT_SUCCESS = _constants.EXIT_SUCCESS
675
EXIT_FAILURE = _constants.EXIT_FAILURE
676
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
677
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
678
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
679
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
680

    
681
#: Exit code for query operations with unknown fields
682
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
683

    
684
# tags
685
TAG_CLUSTER = "cluster"
686
TAG_NODEGROUP = "nodegroup"
687
TAG_NODE = "node"
688
TAG_INSTANCE = "instance"
689
TAG_NETWORK = "network"
690
VALID_TAG_TYPES = compat.UniqueFrozenset([
691
  TAG_CLUSTER,
692
  TAG_NODEGROUP,
693
  TAG_NODE,
694
  TAG_INSTANCE,
695
  TAG_NETWORK,
696
  ])
697
MAX_TAG_LEN = 128
698
MAX_TAGS_PER_OBJ = 4096
699

    
700
# others
701
DEFAULT_BRIDGE = "xen-br0"
702
DEFAULT_OVS = "switch1"
703
CLASSIC_DRBD_SYNC_SPEED = 60 * 1024  # 60 MiB, expressed in KiB
704
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
705
IP4_ADDRESS_ANY = "0.0.0.0"
706
IP6_ADDRESS_LOCALHOST = "::1"
707
IP6_ADDRESS_ANY = "::"
708
IP4_VERSION = 4
709
IP6_VERSION = 6
710
VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
711
# for export to htools
712
IP4_FAMILY = socket.AF_INET
713
IP6_FAMILY = socket.AF_INET6
714

    
715
TCP_PING_TIMEOUT = 10
716
DEFAULT_VG = "xenvg"
717
DEFAULT_DRBD_HELPER = "/bin/true"
718
MIN_VG_SIZE = 20480
719
DEFAULT_MAC_PREFIX = "aa:00:00"
720
# default maximum instance wait time, in seconds.
721
DEFAULT_SHUTDOWN_TIMEOUT = 120
722
NODE_MAX_CLOCK_SKEW = 150
723
# Time for an intra-cluster disk transfer to wait for a connection
724
DISK_TRANSFER_CONNECT_TIMEOUT = 60
725
# Disk index separator
726
DISK_SEPARATOR = _autoconf.DISK_SEPARATOR
727
IP_COMMAND_PATH = _autoconf.IP_PATH
728

    
729
#: Key for job IDs in opcode result
730
JOB_IDS_KEY = "jobs"
731

    
732
# runparts results
733
(RUNPARTS_SKIP,
734
 RUNPARTS_RUN,
735
 RUNPARTS_ERR) = range(3)
736

    
737
RUNPARTS_STATUS = compat.UniqueFrozenset([
738
  RUNPARTS_SKIP,
739
  RUNPARTS_RUN,
740
  RUNPARTS_ERR,
741
  ])
742

    
743
# RPC constants
744
(RPC_ENCODING_NONE,
745
 RPC_ENCODING_ZLIB_BASE64) = range(2)
746

    
747
# Various time constants for the timeout table
748
RPC_TMO_URGENT = 60 # one minute
749
RPC_TMO_FAST = 5 * 60 # five minutes
750
RPC_TMO_NORMAL = 15 * 60 # 15 minutes
751
RPC_TMO_SLOW = 3600 # one hour
752
RPC_TMO_4HRS = 4 * 3600
753
RPC_TMO_1DAY = 86400
754

    
755
# Timeout for connecting to nodes (seconds)
756
RPC_CONNECT_TIMEOUT = 5
757

    
758
# os related constants
759
OS_SCRIPT_CREATE = "create"
760
OS_SCRIPT_IMPORT = "import"
761
OS_SCRIPT_EXPORT = "export"
762
OS_SCRIPT_RENAME = "rename"
763
OS_SCRIPT_VERIFY = "verify"
764
OS_SCRIPTS = compat.UniqueFrozenset([
765
  OS_SCRIPT_CREATE,
766
  OS_SCRIPT_IMPORT,
767
  OS_SCRIPT_EXPORT,
768
  OS_SCRIPT_RENAME,
769
  OS_SCRIPT_VERIFY,
770
  ])
771

    
772
OS_API_FILE = "ganeti_api_version"
773
OS_VARIANTS_FILE = "variants.list"
774
OS_PARAMETERS_FILE = "parameters.list"
775

    
776
OS_VALIDATE_PARAMETERS = "parameters"
777
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
778

    
779
# External Storage (ES) related constants
780
ES_ACTION_CREATE = "create"
781
ES_ACTION_REMOVE = "remove"
782
ES_ACTION_GROW = "grow"
783
ES_ACTION_ATTACH = "attach"
784
ES_ACTION_DETACH = "detach"
785
ES_ACTION_SETINFO = "setinfo"
786
ES_ACTION_VERIFY = "verify"
787

    
788
ES_SCRIPT_CREATE = ES_ACTION_CREATE
789
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
790
ES_SCRIPT_GROW = ES_ACTION_GROW
791
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
792
ES_SCRIPT_DETACH = ES_ACTION_DETACH
793
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
794
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
795
ES_SCRIPTS = frozenset([
796
  ES_SCRIPT_CREATE,
797
  ES_SCRIPT_REMOVE,
798
  ES_SCRIPT_GROW,
799
  ES_SCRIPT_ATTACH,
800
  ES_SCRIPT_DETACH,
801
  ES_SCRIPT_SETINFO,
802
  ES_SCRIPT_VERIFY
803
  ])
804

    
805
ES_PARAMETERS_FILE = "parameters.list"
806

    
807
# reboot types
808
INSTANCE_REBOOT_SOFT = "soft"
809
INSTANCE_REBOOT_HARD = "hard"
810
INSTANCE_REBOOT_FULL = "full"
811

    
812
REBOOT_TYPES = compat.UniqueFrozenset([
813
  INSTANCE_REBOOT_SOFT,
814
  INSTANCE_REBOOT_HARD,
815
  INSTANCE_REBOOT_FULL,
816
  ])
817

    
818
# instance reboot behaviors
819
INSTANCE_REBOOT_ALLOWED = "reboot"
820
INSTANCE_REBOOT_EXIT = "exit"
821

    
822
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
823
  INSTANCE_REBOOT_ALLOWED,
824
  INSTANCE_REBOOT_EXIT,
825
  ])
826

    
827
VTYPE_STRING = "string"
828
VTYPE_MAYBE_STRING = "maybe-string"
829
VTYPE_BOOL = "bool"
830
VTYPE_SIZE = "size" # size, in MiBs
831
VTYPE_INT = "int"
832
ENFORCEABLE_TYPES = compat.UniqueFrozenset([
833
  VTYPE_STRING,
834
  VTYPE_MAYBE_STRING,
835
  VTYPE_BOOL,
836
  VTYPE_SIZE,
837
  VTYPE_INT,
838
  ])
839

    
840
# Constant representing that the user does not specify any IP version
841
IFACE_NO_IP_VERSION_SPECIFIED = 0
842

    
843
VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
844
  75,
845
  110,
846
  300,
847
  600,
848
  1200,
849
  1800,
850
  2400,
851
  4800,
852
  9600,
853
  14400,
854
  19200,
855
  28800,
856
  38400,
857
  57600,
858
  115200,
859
  230400,
860
  345600,
861
  460800,
862
  ])
863

    
864
# HV parameter names (global namespace)
865
HV_BOOT_ORDER = "boot_order"
866
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
867
HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
868
HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
869
HV_NIC_TYPE = "nic_type"
870
HV_DISK_TYPE = "disk_type"
871
HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
872
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
873
HV_VNC_PASSWORD_FILE = "vnc_password_file"
874
HV_VNC_TLS = "vnc_tls"
875
HV_VNC_X509 = "vnc_x509_path"
876
HV_VNC_X509_VERIFY = "vnc_x509_verify"
877
HV_KVM_SPICE_BIND = "spice_bind"
878
HV_KVM_SPICE_IP_VERSION = "spice_ip_version"
879
HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file"
880
HV_KVM_SPICE_LOSSLESS_IMG_COMPR = "spice_image_compression"
881
HV_KVM_SPICE_JPEG_IMG_COMPR = "spice_jpeg_wan_compression"
882
HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR = "spice_zlib_glz_wan_compression"
883
HV_KVM_SPICE_STREAMING_VIDEO_DETECTION = "spice_streaming_video"
884
HV_KVM_SPICE_AUDIO_COMPR = "spice_playback_compression"
885
HV_KVM_SPICE_USE_TLS = "spice_use_tls"
886
HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers"
887
HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent"
888
HV_ACPI = "acpi"
889
HV_PAE = "pae"
890
HV_USE_BOOTLOADER = "use_bootloader"
891
HV_BOOTLOADER_ARGS = "bootloader_args"
892
HV_BOOTLOADER_PATH = "bootloader_path"
893
HV_KERNEL_ARGS = "kernel_args"
894
HV_KERNEL_PATH = "kernel_path"
895
HV_INITRD_PATH = "initrd_path"
896
HV_ROOT_PATH = "root_path"
897
HV_SERIAL_CONSOLE = "serial_console"
898
HV_SERIAL_SPEED = "serial_speed"
899
HV_USB_MOUSE = "usb_mouse"
900
HV_KEYMAP = "keymap"
901
HV_DEVICE_MODEL = "device_model"
902
HV_INIT_SCRIPT = "init_script"
903
HV_MIGRATION_PORT = "migration_port"
904
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
905
HV_MIGRATION_DOWNTIME = "migration_downtime"
906
HV_MIGRATION_MODE = "migration_mode"
907
HV_USE_LOCALTIME = "use_localtime"
908
HV_DISK_CACHE = "disk_cache"
909
HV_SECURITY_MODEL = "security_model"
910
HV_SECURITY_DOMAIN = "security_domain"
911
HV_KVM_FLAG = "kvm_flag"
912
HV_VHOST_NET = "vhost_net"
913
HV_KVM_USE_CHROOT = "use_chroot"
914
HV_CPU_MASK = "cpu_mask"
915
HV_MEM_PATH = "mem_path"
916
HV_PASSTHROUGH = "pci_pass"
917
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
918
HV_REBOOT_BEHAVIOR = "reboot_behavior"
919
HV_CPU_TYPE = "cpu_type"
920
HV_CPU_CAP = "cpu_cap"
921
HV_CPU_WEIGHT = "cpu_weight"
922
HV_CPU_CORES = "cpu_cores"
923
HV_CPU_THREADS = "cpu_threads"
924
HV_CPU_SOCKETS = "cpu_sockets"
925
HV_SOUNDHW = "soundhw"
926
HV_USB_DEVICES = "usb_devices"
927
HV_VGA = "vga"
928
HV_KVM_EXTRA = "kvm_extra"
929
HV_KVM_MACHINE_VERSION = "machine_version"
930
HV_KVM_PATH = "kvm_path"
931
HV_VIF_TYPE = "vif_type"
932
HV_VIF_SCRIPT = "vif_script"
933
HV_XEN_CMD = "xen_cmd"
934
HV_VNET_HDR = "vnet_hdr"
935
HV_VIRIDIAN = "viridian"
936

    
937

    
938
HVS_PARAMETER_TYPES = {
939
  HV_KVM_PATH: VTYPE_STRING,
940
  HV_BOOT_ORDER: VTYPE_STRING,
941
  HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
942
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
943
  HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
944
  HV_NIC_TYPE: VTYPE_STRING,
945
  HV_DISK_TYPE: VTYPE_STRING,
946
  HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
947
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
948
  HV_VNC_BIND_ADDRESS: VTYPE_STRING,
949
  HV_VNC_TLS: VTYPE_BOOL,
950
  HV_VNC_X509: VTYPE_STRING,
951
  HV_VNC_X509_VERIFY: VTYPE_BOOL,
952
  HV_KVM_SPICE_BIND: VTYPE_STRING,
953
  HV_KVM_SPICE_IP_VERSION: VTYPE_INT,
954
  HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING,
955
  HV_KVM_SPICE_LOSSLESS_IMG_COMPR: VTYPE_STRING,
956
  HV_KVM_SPICE_JPEG_IMG_COMPR: VTYPE_STRING,
957
  HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: VTYPE_STRING,
958
  HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: VTYPE_STRING,
959
  HV_KVM_SPICE_AUDIO_COMPR: VTYPE_BOOL,
960
  HV_KVM_SPICE_USE_TLS: VTYPE_BOOL,
961
  HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING,
962
  HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL,
963
  HV_ACPI: VTYPE_BOOL,
964
  HV_PAE: VTYPE_BOOL,
965
  HV_USE_BOOTLOADER: VTYPE_BOOL,
966
  HV_BOOTLOADER_PATH: VTYPE_STRING,
967
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
968
  HV_KERNEL_PATH: VTYPE_STRING,
969
  HV_KERNEL_ARGS: VTYPE_STRING,
970
  HV_INITRD_PATH: VTYPE_STRING,
971
  HV_ROOT_PATH: VTYPE_MAYBE_STRING,
972
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
973
  HV_SERIAL_SPEED: VTYPE_INT,
974
  HV_USB_MOUSE: VTYPE_STRING,
975
  HV_KEYMAP: VTYPE_STRING,
976
  HV_DEVICE_MODEL: VTYPE_STRING,
977
  HV_INIT_SCRIPT: VTYPE_STRING,
978
  HV_MIGRATION_PORT: VTYPE_INT,
979
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
980
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
981
  HV_MIGRATION_MODE: VTYPE_STRING,
982
  HV_USE_LOCALTIME: VTYPE_BOOL,
983
  HV_DISK_CACHE: VTYPE_STRING,
984
  HV_SECURITY_MODEL: VTYPE_STRING,
985
  HV_SECURITY_DOMAIN: VTYPE_STRING,
986
  HV_KVM_FLAG: VTYPE_STRING,
987
  HV_VHOST_NET: VTYPE_BOOL,
988
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
989
  HV_CPU_MASK: VTYPE_STRING,
990
  HV_MEM_PATH: VTYPE_STRING,
991
  HV_PASSTHROUGH: VTYPE_STRING,
992
  HV_BLOCKDEV_PREFIX: VTYPE_STRING,
993
  HV_REBOOT_BEHAVIOR: VTYPE_STRING,
994
  HV_CPU_TYPE: VTYPE_STRING,
995
  HV_CPU_CAP: VTYPE_INT,
996
  HV_CPU_WEIGHT: VTYPE_INT,
997
  HV_CPU_CORES: VTYPE_INT,
998
  HV_CPU_THREADS: VTYPE_INT,
999
  HV_CPU_SOCKETS: VTYPE_INT,
1000
  HV_SOUNDHW: VTYPE_STRING,
1001
  HV_USB_DEVICES: VTYPE_STRING,
1002
  HV_VGA: VTYPE_STRING,
1003
  HV_KVM_EXTRA: VTYPE_STRING,
1004
  HV_KVM_MACHINE_VERSION: VTYPE_STRING,
1005
  HV_VIF_TYPE: VTYPE_STRING,
1006
  HV_VIF_SCRIPT: VTYPE_STRING,
1007
  HV_XEN_CMD: VTYPE_STRING,
1008
  HV_VNET_HDR: VTYPE_BOOL,
1009
  HV_VIRIDIAN: VTYPE_BOOL,
1010
  }
1011

    
1012
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
1013

    
1014
HVS_PARAMETER_TITLES = {
1015
  HV_ACPI: "ACPI",
1016
  HV_BOOT_ORDER: "Boot_order",
1017
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
1018
  HV_DISK_TYPE: "Disk_type",
1019
  HV_INITRD_PATH: "Initrd_path",
1020
  HV_KERNEL_PATH: "Kernel_path",
1021
  HV_NIC_TYPE: "NIC_type",
1022
  HV_PAE: "PAE",
1023
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
1024
  HV_PASSTHROUGH: "pci_pass",
1025
  HV_CPU_TYPE: "cpu_type",
1026
  }
1027

    
1028
# Migration statuses
1029
HV_MIGRATION_COMPLETED = "completed"
1030
HV_MIGRATION_ACTIVE = "active"
1031
HV_MIGRATION_FAILED = "failed"
1032
HV_MIGRATION_CANCELLED = "cancelled"
1033

    
1034
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
1035
  HV_MIGRATION_COMPLETED,
1036
  HV_MIGRATION_ACTIVE,
1037
  HV_MIGRATION_FAILED,
1038
  HV_MIGRATION_CANCELLED,
1039
  ])
1040

    
1041
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
1042
  HV_MIGRATION_FAILED,
1043
  HV_MIGRATION_CANCELLED,
1044
  ])
1045

    
1046
# KVM-specific statuses
1047
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
1048

    
1049
# Node info keys
1050
HV_NODEINFO_KEY_VERSION = "hv_version"
1051

    
1052
# Hypervisor state
1053
HVST_MEMORY_TOTAL = "mem_total"
1054
HVST_MEMORY_NODE = "mem_node"
1055
HVST_MEMORY_HV = "mem_hv"
1056
HVST_CPU_TOTAL = "cpu_total"
1057
HVST_CPU_NODE = "cpu_node"
1058

    
1059
HVST_DEFAULTS = {
1060
  HVST_MEMORY_TOTAL: 0,
1061
  HVST_MEMORY_NODE: 0,
1062
  HVST_MEMORY_HV: 0,
1063
  HVST_CPU_TOTAL: 1,
1064
  HVST_CPU_NODE: 1,
1065
  }
1066

    
1067
HVSTS_PARAMETER_TYPES = {
1068
  HVST_MEMORY_TOTAL: VTYPE_INT,
1069
  HVST_MEMORY_NODE: VTYPE_INT,
1070
  HVST_MEMORY_HV: VTYPE_INT,
1071
  HVST_CPU_TOTAL: VTYPE_INT,
1072
  HVST_CPU_NODE: VTYPE_INT,
1073
  }
1074

    
1075
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
1076

    
1077
# Disk state
1078
DS_DISK_TOTAL = "disk_total"
1079
DS_DISK_RESERVED = "disk_reserved"
1080
DS_DISK_OVERHEAD = "disk_overhead"
1081

    
1082
DS_DEFAULTS = {
1083
  DS_DISK_TOTAL: 0,
1084
  DS_DISK_RESERVED: 0,
1085
  DS_DISK_OVERHEAD: 0,
1086
  }
1087

    
1088
DSS_PARAMETER_TYPES = {
1089
  DS_DISK_TOTAL: VTYPE_INT,
1090
  DS_DISK_RESERVED: VTYPE_INT,
1091
  DS_DISK_OVERHEAD: VTYPE_INT,
1092
  }
1093

    
1094
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
1095
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
1096

    
1097
# Backend parameter names
1098
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
1099
BE_MAXMEM = "maxmem"
1100
BE_MINMEM = "minmem"
1101
BE_VCPUS = "vcpus"
1102
BE_AUTO_BALANCE = "auto_balance"
1103
BE_ALWAYS_FAILOVER = "always_failover"
1104
BE_SPINDLE_USE = "spindle_use"
1105

    
1106
BES_PARAMETER_TYPES = {
1107
  BE_MAXMEM: VTYPE_SIZE,
1108
  BE_MINMEM: VTYPE_SIZE,
1109
  BE_VCPUS: VTYPE_INT,
1110
  BE_AUTO_BALANCE: VTYPE_BOOL,
1111
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
1112
  BE_SPINDLE_USE: VTYPE_INT,
1113
  }
1114

    
1115
BES_PARAMETER_TITLES = {
1116
  BE_AUTO_BALANCE: "Auto_balance",
1117
  BE_MAXMEM: "ConfigMaxMem",
1118
  BE_MINMEM: "ConfigMinMem",
1119
  BE_VCPUS: "ConfigVCPUs",
1120
  }
1121

    
1122
BES_PARAMETER_COMPAT = {
1123
  BE_MEMORY: VTYPE_SIZE,
1124
  }
1125
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
1126

    
1127
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1128

    
1129
# instance specs
1130
ISPEC_MEM_SIZE = "memory-size"
1131
ISPEC_CPU_COUNT = "cpu-count"
1132
ISPEC_DISK_COUNT = "disk-count"
1133
ISPEC_DISK_SIZE = "disk-size"
1134
ISPEC_NIC_COUNT = "nic-count"
1135
ISPEC_SPINDLE_USE = "spindle-use"
1136

    
1137
ISPECS_PARAMETER_TYPES = {
1138
  ISPEC_MEM_SIZE: VTYPE_INT,
1139
  ISPEC_CPU_COUNT: VTYPE_INT,
1140
  ISPEC_DISK_COUNT: VTYPE_INT,
1141
  ISPEC_DISK_SIZE: VTYPE_INT,
1142
  ISPEC_NIC_COUNT: VTYPE_INT,
1143
  ISPEC_SPINDLE_USE: VTYPE_INT,
1144
  }
1145

    
1146
ISPECS_PARAMETERS = frozenset(ISPECS_PARAMETER_TYPES.keys())
1147

    
1148
ISPECS_MINMAX = "minmax"
1149
ISPECS_MIN = "min"
1150
ISPECS_MAX = "max"
1151
ISPECS_STD = "std"
1152
IPOLICY_DTS = "disk-templates"
1153
IPOLICY_VCPU_RATIO = "vcpu-ratio"
1154
IPOLICY_SPINDLE_RATIO = "spindle-ratio"
1155

    
1156
ISPECS_MINMAX_KEYS = compat.UniqueFrozenset([
1157
  ISPECS_MIN,
1158
  ISPECS_MAX,
1159
  ])
1160

    
1161
IPOLICY_PARAMETERS = compat.UniqueFrozenset([
1162
  IPOLICY_VCPU_RATIO,
1163
  IPOLICY_SPINDLE_RATIO,
1164
  ])
1165

    
1166
IPOLICY_ALL_KEYS = (IPOLICY_PARAMETERS |
1167
                    frozenset([ISPECS_MINMAX, ISPECS_STD, IPOLICY_DTS]))
1168

    
1169
# Node parameter names
1170
ND_OOB_PROGRAM = "oob_program"
1171
ND_SPINDLE_COUNT = "spindle_count"
1172
ND_EXCLUSIVE_STORAGE = "exclusive_storage"
1173
ND_OVS = "ovs"
1174
ND_OVS_NAME = "ovs_name"
1175
ND_OVS_LINK = "ovs_link"
1176

    
1177
NDS_PARAMETER_TYPES = {
1178
  ND_OOB_PROGRAM: VTYPE_STRING,
1179
  ND_SPINDLE_COUNT: VTYPE_INT,
1180
  ND_EXCLUSIVE_STORAGE: VTYPE_BOOL,
1181
  ND_OVS: VTYPE_BOOL,
1182
  ND_OVS_NAME: VTYPE_MAYBE_STRING,
1183
  ND_OVS_LINK: VTYPE_MAYBE_STRING,
1184
  }
1185

    
1186
NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())
1187

    
1188
NDS_PARAMETER_TITLES = {
1189
  ND_OOB_PROGRAM: "OutOfBandProgram",
1190
  ND_SPINDLE_COUNT: "SpindleCount",
1191
  ND_EXCLUSIVE_STORAGE: "ExclusiveStorage",
1192
  ND_OVS: "OpenvSwitch",
1193
  ND_OVS_NAME: "OpenvSwitchName",
1194
  ND_OVS_LINK: "OpenvSwitchLink",
1195
  }
1196

    
1197
# Logical Disks parameters
1198
LDP_RESYNC_RATE = "resync-rate"
1199
LDP_STRIPES = "stripes"
1200
LDP_BARRIERS = "disabled-barriers"
1201
LDP_NO_META_FLUSH = "disable-meta-flush"
1202
LDP_DEFAULT_METAVG = "default-metavg"
1203
LDP_DISK_CUSTOM = "disk-custom"
1204
LDP_NET_CUSTOM = "net-custom"
1205
LDP_PROTOCOL = "protocol"
1206
LDP_DYNAMIC_RESYNC = "dynamic-resync"
1207
LDP_PLAN_AHEAD = "c-plan-ahead"
1208
LDP_FILL_TARGET = "c-fill-target"
1209
LDP_DELAY_TARGET = "c-delay-target"
1210
LDP_MAX_RATE = "c-max-rate"
1211
LDP_MIN_RATE = "c-min-rate"
1212
LDP_POOL = "pool"
1213
DISK_LD_TYPES = {
1214
  LDP_RESYNC_RATE: VTYPE_INT,
1215
  LDP_STRIPES: VTYPE_INT,
1216
  LDP_BARRIERS: VTYPE_STRING,
1217
  LDP_NO_META_FLUSH: VTYPE_BOOL,
1218
  LDP_DEFAULT_METAVG: VTYPE_STRING,
1219
  LDP_DISK_CUSTOM: VTYPE_STRING,
1220
  LDP_NET_CUSTOM: VTYPE_STRING,
1221
  LDP_PROTOCOL: VTYPE_STRING,
1222
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
1223
  LDP_PLAN_AHEAD: VTYPE_INT,
1224
  LDP_FILL_TARGET: VTYPE_INT,
1225
  LDP_DELAY_TARGET: VTYPE_INT,
1226
  LDP_MAX_RATE: VTYPE_INT,
1227
  LDP_MIN_RATE: VTYPE_INT,
1228
  LDP_POOL: VTYPE_STRING,
1229
  }
1230
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
1231

    
1232
# Disk template parameters (can be set/changed by the user via gnt-cluster and
1233
# gnt-group)
1234
DRBD_RESYNC_RATE = "resync-rate"
1235
DRBD_DATA_STRIPES = "data-stripes"
1236
DRBD_META_STRIPES = "meta-stripes"
1237
DRBD_DISK_BARRIERS = "disk-barriers"
1238
DRBD_META_BARRIERS = "meta-barriers"
1239
DRBD_DEFAULT_METAVG = "metavg"
1240
DRBD_DISK_CUSTOM = "disk-custom"
1241
DRBD_NET_CUSTOM = "net-custom"
1242
DRBD_PROTOCOL = "protocol"
1243
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
1244
DRBD_PLAN_AHEAD = "c-plan-ahead"
1245
DRBD_FILL_TARGET = "c-fill-target"
1246
DRBD_DELAY_TARGET = "c-delay-target"
1247
DRBD_MAX_RATE = "c-max-rate"
1248
DRBD_MIN_RATE = "c-min-rate"
1249
LV_STRIPES = "stripes"
1250
RBD_POOL = "pool"
1251
DISK_DT_TYPES = {
1252
  DRBD_RESYNC_RATE: VTYPE_INT,
1253
  DRBD_DATA_STRIPES: VTYPE_INT,
1254
  DRBD_META_STRIPES: VTYPE_INT,
1255
  DRBD_DISK_BARRIERS: VTYPE_STRING,
1256
  DRBD_META_BARRIERS: VTYPE_BOOL,
1257
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
1258
  DRBD_DISK_CUSTOM: VTYPE_STRING,
1259
  DRBD_NET_CUSTOM: VTYPE_STRING,
1260
  DRBD_PROTOCOL: VTYPE_STRING,
1261
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
1262
  DRBD_PLAN_AHEAD: VTYPE_INT,
1263
  DRBD_FILL_TARGET: VTYPE_INT,
1264
  DRBD_DELAY_TARGET: VTYPE_INT,
1265
  DRBD_MAX_RATE: VTYPE_INT,
1266
  DRBD_MIN_RATE: VTYPE_INT,
1267
  LV_STRIPES: VTYPE_INT,
1268
  RBD_POOL: VTYPE_STRING,
1269
  }
1270

    
1271
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1272

    
1273
# OOB supported commands
1274
OOB_POWER_ON = "power-on"
1275
OOB_POWER_OFF = "power-off"
1276
OOB_POWER_CYCLE = "power-cycle"
1277
OOB_POWER_STATUS = "power-status"
1278
OOB_HEALTH = "health"
1279

    
1280
OOB_COMMANDS = compat.UniqueFrozenset([
1281
  OOB_POWER_ON,
1282
  OOB_POWER_OFF,
1283
  OOB_POWER_CYCLE,
1284
  OOB_POWER_STATUS,
1285
  OOB_HEALTH,
1286
  ])
1287

    
1288
OOB_POWER_STATUS_POWERED = "powered"
1289

    
1290
OOB_TIMEOUT = 60 # 60 seconds
1291
OOB_POWER_DELAY = 2.0 # 2 seconds
1292

    
1293
OOB_STATUS_OK = "OK"
1294
OOB_STATUS_WARNING = "WARNING"
1295
OOB_STATUS_CRITICAL = "CRITICAL"
1296
OOB_STATUS_UNKNOWN = "UNKNOWN"
1297

    
1298
OOB_STATUSES = compat.UniqueFrozenset([
1299
  OOB_STATUS_OK,
1300
  OOB_STATUS_WARNING,
1301
  OOB_STATUS_CRITICAL,
1302
  OOB_STATUS_UNKNOWN,
1303
  ])
1304

    
1305
# Instance Parameters Profile
1306
PP_DEFAULT = "default"
1307

    
1308
# NIC_* constants are used inside the ganeti config
1309
NIC_MODE = "mode"
1310
NIC_LINK = "link"
1311
NIC_VLAN = "vlan"
1312

    
1313
NIC_MODE_BRIDGED = "bridged"
1314
NIC_MODE_ROUTED = "routed"
1315
NIC_MODE_OVS = "openvswitch"
1316
NIC_IP_POOL = "pool"
1317

    
1318
NIC_VALID_MODES = compat.UniqueFrozenset([
1319
  NIC_MODE_BRIDGED,
1320
  NIC_MODE_ROUTED,
1321
  NIC_MODE_OVS,
1322
  ])
1323

    
1324
RESERVE_ACTION = "reserve"
1325
RELEASE_ACTION = "release"
1326

    
1327
NICS_PARAMETER_TYPES = {
1328
  NIC_MODE: VTYPE_STRING,
1329
  NIC_LINK: VTYPE_STRING,
1330
  NIC_VLAN: VTYPE_MAYBE_STRING,
1331
  }
1332

    
1333
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1334

    
1335
# IDISK_* constants are used in opcodes, to create/change disks
1336
IDISK_SIZE = "size"
1337
IDISK_SPINDLES = "spindles"
1338
IDISK_MODE = "mode"
1339
IDISK_ADOPT = "adopt"
1340
IDISK_VG = "vg"
1341
IDISK_METAVG = "metavg"
1342
IDISK_PROVIDER = "provider"
1343
IDISK_NAME = "name"
1344
IDISK_PARAMS_TYPES = {
1345
  IDISK_SIZE: VTYPE_SIZE,
1346
  IDISK_SPINDLES: VTYPE_INT,
1347
  IDISK_MODE: VTYPE_STRING,
1348
  IDISK_ADOPT: VTYPE_STRING,
1349
  IDISK_VG: VTYPE_STRING,
1350
  IDISK_METAVG: VTYPE_STRING,
1351
  IDISK_PROVIDER: VTYPE_STRING,
1352
  IDISK_NAME: VTYPE_MAYBE_STRING,
1353
  }
1354
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1355

    
1356
# INIC_* constants are used in opcodes, to create/change nics
1357
INIC_MAC = "mac"
1358
INIC_IP = "ip"
1359
INIC_MODE = "mode"
1360
INIC_LINK = "link"
1361
INIC_NETWORK = "network"
1362
INIC_NAME = "name"
1363
INIC_VLAN = "vlan"
1364
INIC_BRIDGE = "bridge"
1365
INIC_PARAMS_TYPES = {
1366
  INIC_IP: VTYPE_MAYBE_STRING,
1367
  INIC_LINK: VTYPE_STRING,
1368
  INIC_MAC: VTYPE_STRING,
1369
  INIC_MODE: VTYPE_STRING,
1370
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1371
  INIC_NAME: VTYPE_MAYBE_STRING,
1372
  INIC_VLAN: VTYPE_MAYBE_STRING,
1373
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1374
  }
1375
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1376

    
1377
# Hypervisor constants
1378
HT_XEN_PVM = "xen-pvm"
1379
HT_FAKE = "fake"
1380
HT_XEN_HVM = "xen-hvm"
1381
HT_KVM = "kvm"
1382
HT_CHROOT = "chroot"
1383
HT_LXC = "lxc"
1384
HYPER_TYPES = compat.UniqueFrozenset([
1385
  HT_XEN_PVM,
1386
  HT_FAKE,
1387
  HT_XEN_HVM,
1388
  HT_KVM,
1389
  HT_CHROOT,
1390
  HT_LXC,
1391
  ])
1392
HTS_REQ_PORT = compat.UniqueFrozenset([HT_XEN_HVM, HT_KVM])
1393

    
1394
VNC_BASE_PORT = 5900
1395
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1396

    
1397
# NIC types
1398
HT_NIC_RTL8139 = "rtl8139"
1399
HT_NIC_NE2K_PCI = "ne2k_pci"
1400
HT_NIC_NE2K_ISA = "ne2k_isa"
1401
HT_NIC_I82551 = "i82551"
1402
HT_NIC_I85557B = "i82557b"
1403
HT_NIC_I8259ER = "i82559er"
1404
HT_NIC_PCNET = "pcnet"
1405
HT_NIC_E1000 = "e1000"
1406
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1407

    
1408
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1409
  HT_NIC_RTL8139,
1410
  HT_NIC_NE2K_PCI,
1411
  HT_NIC_E1000,
1412
  HT_NIC_NE2K_ISA,
1413
  HT_NIC_PARAVIRTUAL,
1414
  ])
1415
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1416
  HT_NIC_RTL8139,
1417
  HT_NIC_NE2K_PCI,
1418
  HT_NIC_NE2K_ISA,
1419
  HT_NIC_I82551,
1420
  HT_NIC_I85557B,
1421
  HT_NIC_I8259ER,
1422
  HT_NIC_PCNET,
1423
  HT_NIC_E1000,
1424
  HT_NIC_PARAVIRTUAL,
1425
  ])
1426

    
1427
# Vif types
1428
# default vif type in xen-hvm
1429
HT_HVM_VIF_IOEMU = "ioemu"
1430
HT_HVM_VIF_VIF = "vif"
1431
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1432
  HT_HVM_VIF_IOEMU,
1433
  HT_HVM_VIF_VIF,
1434
  ])
1435

    
1436
# Disk types
1437
HT_DISK_IOEMU = "ioemu"
1438
HT_DISK_IDE = "ide"
1439
HT_DISK_SCSI = "scsi"
1440
HT_DISK_SD = "sd"
1441
HT_DISK_MTD = "mtd"
1442
HT_DISK_PFLASH = "pflash"
1443

    
1444
HT_CACHE_DEFAULT = "default"
1445
HT_CACHE_NONE = "none"
1446
HT_CACHE_WTHROUGH = "writethrough"
1447
HT_CACHE_WBACK = "writeback"
1448
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1449
  HT_CACHE_DEFAULT,
1450
  HT_CACHE_NONE,
1451
  HT_CACHE_WTHROUGH,
1452
  HT_CACHE_WBACK,
1453
  ])
1454

    
1455
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1456
  HT_DISK_PARAVIRTUAL,
1457
  HT_DISK_IOEMU,
1458
  ])
1459
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1460
  HT_DISK_PARAVIRTUAL,
1461
  HT_DISK_IDE,
1462
  HT_DISK_SCSI,
1463
  HT_DISK_SD,
1464
  HT_DISK_MTD,
1465
  HT_DISK_PFLASH,
1466
  ])
1467

    
1468
# Mouse types:
1469
HT_MOUSE_MOUSE = "mouse"
1470
HT_MOUSE_TABLET = "tablet"
1471

    
1472
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1473
  HT_MOUSE_MOUSE,
1474
  HT_MOUSE_TABLET,
1475
  ])
1476

    
1477
# Boot order
1478
HT_BO_FLOPPY = "floppy"
1479
HT_BO_CDROM = "cdrom"
1480
HT_BO_DISK = "disk"
1481
HT_BO_NETWORK = "network"
1482

    
1483
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1484
  HT_BO_FLOPPY,
1485
  HT_BO_CDROM,
1486
  HT_BO_DISK,
1487
  HT_BO_NETWORK,
1488
  ])
1489

    
1490
# SPICE lossless image compression options
1491
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1492
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1493
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1494
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1495
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1496
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1497

    
1498
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1499
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1500
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1501
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1502
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1503
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1504
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1505
  ])
1506

    
1507
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1508
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1509
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1510
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1511

    
1512
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1513
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1514
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1515
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1516
  ])
1517

    
1518
# SPICE video stream detection
1519
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1520
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1521
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1522

    
1523
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1524
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1525
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1526
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1527
  ])
1528

    
1529
# Security models
1530
HT_SM_NONE = "none"
1531
HT_SM_USER = "user"
1532
HT_SM_POOL = "pool"
1533

    
1534
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1535
  HT_SM_NONE,
1536
  HT_SM_USER,
1537
  HT_SM_POOL,
1538
  ])
1539

    
1540
# Kvm flag values
1541
HT_KVM_ENABLED = "enabled"
1542
HT_KVM_DISABLED = "disabled"
1543

    
1544
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1545

    
1546
# Migration type
1547
HT_MIGRATION_LIVE = "live"
1548
HT_MIGRATION_NONLIVE = "non-live"
1549
HT_MIGRATION_MODES = compat.UniqueFrozenset([
1550
  HT_MIGRATION_LIVE,
1551
  HT_MIGRATION_NONLIVE,
1552
  ])
1553

    
1554
# Cluster Verify steps
1555
VERIFY_NPLUSONE_MEM = "nplusone_mem"
1556
VERIFY_OPTIONAL_CHECKS = compat.UniqueFrozenset([VERIFY_NPLUSONE_MEM])
1557

    
1558
# Cluster Verify error classes
1559
CV_TCLUSTER = "cluster"
1560
CV_TGROUP = "group"
1561
CV_TNODE = "node"
1562
CV_TINSTANCE = "instance"
1563

    
1564
# Cluster Verify error codes and documentation
1565
CV_ECLUSTERCFG = \
1566
  (CV_TCLUSTER, "ECLUSTERCFG", "Cluster configuration verification failure")
1567
CV_ECLUSTERCERT = \
1568
  (CV_TCLUSTER, "ECLUSTERCERT",
1569
   "Cluster certificate files verification failure")
1570
CV_ECLUSTERFILECHECK = \
1571
  (CV_TCLUSTER, "ECLUSTERFILECHECK",
1572
   "Cluster configuration verification failure")
1573
CV_ECLUSTERDANGLINGNODES = \
1574
  (CV_TNODE, "ECLUSTERDANGLINGNODES",
1575
   "Some nodes belong to non-existing groups")
1576
CV_ECLUSTERDANGLINGINST = \
1577
  (CV_TNODE, "ECLUSTERDANGLINGINST",
1578
   "Some instances have a non-existing primary node")
1579
CV_EGROUPDIFFERENTPVSIZE = \
1580
  (CV_TGROUP, "EGROUPDIFFERENTPVSIZE", "PVs in the group have different sizes")
1581
CV_EINSTANCEBADNODE = \
1582
  (CV_TINSTANCE, "EINSTANCEBADNODE",
1583
   "Instance marked as running lives on an offline node")
1584
CV_EINSTANCEDOWN = \
1585
  (CV_TINSTANCE, "EINSTANCEDOWN", "Instance not running on its primary node")
1586
CV_EINSTANCELAYOUT = \
1587
  (CV_TINSTANCE, "EINSTANCELAYOUT", "Instance has multiple secondary nodes")
1588
CV_EINSTANCEMISSINGDISK = \
1589
  (CV_TINSTANCE, "EINSTANCEMISSINGDISK", "Missing volume on an instance")
1590
CV_EINSTANCEFAULTYDISK = \
1591
  (CV_TINSTANCE, "EINSTANCEFAULTYDISK",
1592
   "Impossible to retrieve status for a disk")
1593
CV_EINSTANCEWRONGNODE = \
1594
  (CV_TINSTANCE, "EINSTANCEWRONGNODE", "Instance running on the wrong node")
1595
CV_EINSTANCESPLITGROUPS = \
1596
  (CV_TINSTANCE, "EINSTANCESPLITGROUPS",
1597
   "Instance with primary and secondary nodes in different groups")
1598
CV_EINSTANCEPOLICY = \
1599
  (CV_TINSTANCE, "EINSTANCEPOLICY",
1600
   "Instance does not meet policy")
1601
CV_EINSTANCEUNSUITABLENODE = \
1602
  (CV_TINSTANCE, "EINSTANCEUNSUITABLENODE",
1603
   "Instance running on nodes that are not suitable for it")
1604
CV_EINSTANCEMISSINGCFGPARAMETER = \
1605
  (CV_TINSTANCE, "EINSTANCEMISSINGCFGPARAMETER",
1606
   "A configuration parameter for an instance is missing")
1607
CV_ENODEDRBD = \
1608
  (CV_TNODE, "ENODEDRBD", "Error parsing the DRBD status file")
1609
CV_ENODEDRBDVERSION = \
1610
  (CV_TNODE, "ENODEDRBDVERSION", "DRBD version mismatch within a node group")
1611
CV_ENODEDRBDHELPER = \
1612
  (CV_TNODE, "ENODEDRBDHELPER", "Error caused by the DRBD helper")
1613
CV_ENODEFILECHECK = \
1614
  (CV_TNODE, "ENODEFILECHECK",
1615
   "Error retrieving the checksum of the node files")
1616
CV_ENODEHOOKS = \
1617
  (CV_TNODE, "ENODEHOOKS", "Communication failure in hooks execution")
1618
CV_ENODEHV = \
1619
  (CV_TNODE, "ENODEHV", "Hypervisor parameters verification failure")
1620
CV_ENODELVM = \
1621
  (CV_TNODE, "ENODELVM", "LVM-related node error")
1622
CV_ENODEN1 = \
1623
  (CV_TNODE, "ENODEN1", "Not enough memory to accommodate instance failovers")
1624
CV_ENODENET = \
1625
  (CV_TNODE, "ENODENET", "Network-related node error")
1626
CV_ENODEOS = \
1627
  (CV_TNODE, "ENODEOS", "OS-related node error")
1628
CV_ENODEORPHANINSTANCE = \
1629
  (CV_TNODE, "ENODEORPHANINSTANCE", "Unknown intance running on a node")
1630
CV_ENODEORPHANLV = \
1631
  (CV_TNODE, "ENODEORPHANLV", "Unknown LVM logical volume")
1632
CV_ENODERPC = \
1633
  (CV_TNODE, "ENODERPC",
1634
   "Error during connection to the primary node of an instance")
1635
CV_ENODESSH = \
1636
  (CV_TNODE, "ENODESSH", "SSH-related node error")
1637
CV_ENODEVERSION = \
1638
  (CV_TNODE, "ENODEVERSION",
1639
   "Protocol version mismatch or Ganeti version mismatch")
1640
CV_ENODESETUP = \
1641
  (CV_TNODE, "ENODESETUP", "Node setup error")
1642
CV_ENODETIME = \
1643
  (CV_TNODE, "ENODETIME", "Node returned invalid time")
1644
CV_ENODEOOBPATH = \
1645
  (CV_TNODE, "ENODEOOBPATH", "Invalid Out Of Band path")
1646
CV_ENODEUSERSCRIPTS = \
1647
  (CV_TNODE, "ENODEUSERSCRIPTS", "User scripts not present or not executable")
1648
CV_ENODEFILESTORAGEPATHS = \
1649
  (CV_TNODE, "ENODEFILESTORAGEPATHS", "Detected bad file storage paths")
1650
CV_ENODEFILESTORAGEPATHUNUSABLE = \
1651
  (CV_TNODE, "ENODEFILESTORAGEPATHUNUSABLE", "File storage path unusable")
1652
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1653
  (CV_TNODE, "ENODESHAREDFILESTORAGEPATHUNUSABLE",
1654
      "Shared file storage path unusable")
1655

    
1656
CV_ALL_ECODES = compat.UniqueFrozenset([
1657
  CV_ECLUSTERCFG,
1658
  CV_ECLUSTERCERT,
1659
  CV_ECLUSTERFILECHECK,
1660
  CV_ECLUSTERDANGLINGNODES,
1661
  CV_ECLUSTERDANGLINGINST,
1662
  CV_EINSTANCEBADNODE,
1663
  CV_EINSTANCEDOWN,
1664
  CV_EINSTANCELAYOUT,
1665
  CV_EINSTANCEMISSINGDISK,
1666
  CV_EINSTANCEFAULTYDISK,
1667
  CV_EINSTANCEWRONGNODE,
1668
  CV_EINSTANCESPLITGROUPS,
1669
  CV_EINSTANCEPOLICY,
1670
  CV_ENODEDRBD,
1671
  CV_ENODEDRBDHELPER,
1672
  CV_ENODEFILECHECK,
1673
  CV_ENODEHOOKS,
1674
  CV_ENODEHV,
1675
  CV_ENODELVM,
1676
  CV_ENODEN1,
1677
  CV_ENODENET,
1678
  CV_ENODEOS,
1679
  CV_ENODEORPHANINSTANCE,
1680
  CV_ENODEORPHANLV,
1681
  CV_ENODERPC,
1682
  CV_ENODESSH,
1683
  CV_ENODEVERSION,
1684
  CV_ENODESETUP,
1685
  CV_ENODETIME,
1686
  CV_ENODEOOBPATH,
1687
  CV_ENODEUSERSCRIPTS,
1688
  CV_ENODEFILESTORAGEPATHS,
1689
  CV_ENODEFILESTORAGEPATHUNUSABLE,
1690
  CV_ENODESHAREDFILESTORAGEPATHUNUSABLE,
1691
  ])
1692

    
1693
CV_ALL_ECODES_STRINGS = \
1694
  compat.UniqueFrozenset(estr for (_, estr, _) in CV_ALL_ECODES)
1695

    
1696
# Node verify constants
1697
NV_BRIDGES = "bridges"
1698
NV_DRBDHELPER = "drbd-helper"
1699
NV_DRBDVERSION = "drbd-version"
1700
NV_DRBDLIST = "drbd-list"
1701
NV_EXCLUSIVEPVS = "exclusive-pvs"
1702
NV_FILELIST = "filelist"
1703
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1704
NV_FILE_STORAGE_PATH = "file-storage-path"
1705
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1706
NV_HVINFO = "hvinfo"
1707
NV_HVPARAMS = "hvparms"
1708
NV_HYPERVISOR = "hypervisor"
1709
NV_INSTANCELIST = "instancelist"
1710
NV_LVLIST = "lvlist"
1711
NV_MASTERIP = "master-ip"
1712
NV_NODELIST = "nodelist"
1713
NV_NODENETTEST = "node-net-test"
1714
NV_NODESETUP = "nodesetup"
1715
NV_OOB_PATHS = "oob-paths"
1716
NV_OSLIST = "oslist"
1717
NV_PVLIST = "pvlist"
1718
NV_TIME = "time"
1719
NV_USERSCRIPTS = "user-scripts"
1720
NV_VERSION = "version"
1721
NV_VGLIST = "vglist"
1722
NV_VMNODES = "vmnodes"
1723

    
1724
# Instance status
1725
INSTST_RUNNING = "running"
1726
INSTST_ADMINDOWN = "ADMIN_down"
1727
INSTST_ADMINOFFLINE = "ADMIN_offline"
1728
INSTST_NODEOFFLINE = "ERROR_nodeoffline"
1729
INSTST_NODEDOWN = "ERROR_nodedown"
1730
INSTST_WRONGNODE = "ERROR_wrongnode"
1731
INSTST_ERRORUP = "ERROR_up"
1732
INSTST_ERRORDOWN = "ERROR_down"
1733
INSTST_ALL = compat.UniqueFrozenset([
1734
  INSTST_RUNNING,
1735
  INSTST_ADMINDOWN,
1736
  INSTST_ADMINOFFLINE,
1737
  INSTST_NODEOFFLINE,
1738
  INSTST_NODEDOWN,
1739
  INSTST_WRONGNODE,
1740
  INSTST_ERRORUP,
1741
  INSTST_ERRORDOWN,
1742
  ])
1743

    
1744
# Admin states
1745
ADMINST_UP = _constants.ADMINST_UP
1746
ADMINST_DOWN = _constants.ADMINST_DOWN
1747
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1748
ADMINST_ALL = _constants.ADMINST_ALL
1749

    
1750
# Node roles
1751
NR_REGULAR = "R"
1752
NR_MASTER = "M"
1753
NR_MCANDIDATE = "C"
1754
NR_DRAINED = "D"
1755
NR_OFFLINE = "O"
1756
NR_ALL = compat.UniqueFrozenset([
1757
  NR_REGULAR,
1758
  NR_MASTER,
1759
  NR_MCANDIDATE,
1760
  NR_DRAINED,
1761
  NR_OFFLINE,
1762
  ])
1763

    
1764
# SSL certificate check constants (in days)
1765
SSL_CERT_EXPIRATION_WARN = 30
1766
SSL_CERT_EXPIRATION_ERROR = 7
1767

    
1768
# Allocator framework constants
1769
IALLOCATOR_VERSION = 2
1770
IALLOCATOR_DIR_IN = "in"
1771
IALLOCATOR_DIR_OUT = "out"
1772
VALID_IALLOCATOR_DIRECTIONS = compat.UniqueFrozenset([
1773
  IALLOCATOR_DIR_IN,
1774
  IALLOCATOR_DIR_OUT,
1775
  ])
1776
IALLOCATOR_MODE_ALLOC = "allocate"
1777
IALLOCATOR_MODE_RELOC = "relocate"
1778
IALLOCATOR_MODE_CHG_GROUP = "change-group"
1779
IALLOCATOR_MODE_NODE_EVAC = "node-evacuate"
1780
IALLOCATOR_MODE_MULTI_ALLOC = "multi-allocate"
1781
VALID_IALLOCATOR_MODES = compat.UniqueFrozenset([
1782
  IALLOCATOR_MODE_ALLOC,
1783
  IALLOCATOR_MODE_RELOC,
1784
  IALLOCATOR_MODE_CHG_GROUP,
1785
  IALLOCATOR_MODE_NODE_EVAC,
1786
  IALLOCATOR_MODE_MULTI_ALLOC,
1787
  ])
1788
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
1789
DEFAULT_IALLOCATOR_SHORTCUT = "."
1790

    
1791
IALLOCATOR_NEVAC_PRI = "primary-only"
1792
IALLOCATOR_NEVAC_SEC = "secondary-only"
1793
IALLOCATOR_NEVAC_ALL = "all"
1794
IALLOCATOR_NEVAC_MODES = compat.UniqueFrozenset([
1795
  IALLOCATOR_NEVAC_PRI,
1796
  IALLOCATOR_NEVAC_SEC,
1797
  IALLOCATOR_NEVAC_ALL,
1798
  ])
1799

    
1800
# Node evacuation
1801
NODE_EVAC_PRI = "primary-only"
1802
NODE_EVAC_SEC = "secondary-only"
1803
NODE_EVAC_ALL = "all"
1804
NODE_EVAC_MODES = compat.UniqueFrozenset([
1805
  NODE_EVAC_PRI,
1806
  NODE_EVAC_SEC,
1807
  NODE_EVAC_ALL,
1808
  ])
1809

    
1810
# Job queue
1811
JOB_QUEUE_VERSION = 1
1812
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1813
JOB_QUEUE_FILES_PERMS = 0640
1814

    
1815
JOB_ID_TEMPLATE = r"\d+"
1816
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1817

    
1818
# unchanged job return
1819
JOB_NOTCHANGED = "nochange"
1820

    
1821
# Job status
1822
JOB_STATUS_QUEUED = "queued"
1823
JOB_STATUS_WAITING = "waiting"
1824
JOB_STATUS_CANCELING = "canceling"
1825
JOB_STATUS_RUNNING = "running"
1826
JOB_STATUS_CANCELED = "canceled"
1827
JOB_STATUS_SUCCESS = "success"
1828
JOB_STATUS_ERROR = "error"
1829
JOBS_PENDING = compat.UniqueFrozenset([
1830
  JOB_STATUS_QUEUED,
1831
  JOB_STATUS_WAITING,
1832
  JOB_STATUS_CANCELING,
1833
  ])
1834
JOBS_FINALIZED = compat.UniqueFrozenset([
1835
  JOB_STATUS_CANCELED,
1836
  JOB_STATUS_SUCCESS,
1837
  JOB_STATUS_ERROR,
1838
  ])
1839
JOB_STATUS_ALL = compat.UniqueFrozenset([
1840
  JOB_STATUS_RUNNING,
1841
  ]) | JOBS_PENDING | JOBS_FINALIZED
1842

    
1843
# OpCode status
1844
# not yet finalized
1845
OP_STATUS_QUEUED = "queued"
1846
OP_STATUS_WAITING = "waiting"
1847
OP_STATUS_CANCELING = "canceling"
1848
OP_STATUS_RUNNING = "running"
1849
# finalized
1850
OP_STATUS_CANCELED = "canceled"
1851
OP_STATUS_SUCCESS = "success"
1852
OP_STATUS_ERROR = "error"
1853
OPS_FINALIZED = compat.UniqueFrozenset([
1854
  OP_STATUS_CANCELED,
1855
  OP_STATUS_SUCCESS,
1856
  OP_STATUS_ERROR,
1857
  ])
1858

    
1859
# OpCode priority
1860
OP_PRIO_LOWEST = +19
1861
OP_PRIO_HIGHEST = -20
1862

    
1863
OP_PRIO_LOW = +10
1864
OP_PRIO_NORMAL = 0
1865
OP_PRIO_HIGH = -10
1866

    
1867
OP_PRIO_SUBMIT_VALID = compat.UniqueFrozenset([
1868
  OP_PRIO_LOW,
1869
  OP_PRIO_NORMAL,
1870
  OP_PRIO_HIGH,
1871
  ])
1872

    
1873
OP_PRIO_DEFAULT = OP_PRIO_NORMAL
1874

    
1875
# Lock recalculate mode
1876
LOCKS_REPLACE = "replace"
1877
LOCKS_APPEND = "append"
1878

    
1879
# Lock timeout (sum) before we should go into blocking acquire (still
1880
# can be reset by priority change); computed as max time (10 hours)
1881
# before we should actually go into blocking acquire given that we
1882
# start from default priority level; in seconds
1883
# TODO
1884
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1885
LOCK_ATTEMPTS_MAXWAIT = 15.0
1886
LOCK_ATTEMPTS_MINWAIT = 1.0
1887

    
1888
# Execution log types
1889
ELOG_MESSAGE = "message"
1890
ELOG_REMOTE_IMPORT = "remote-import"
1891
ELOG_JQUEUE_TEST = "jqueue-test"
1892

    
1893
# /etc/hosts modification
1894
ETC_HOSTS_ADD = "add"
1895
ETC_HOSTS_REMOVE = "remove"
1896

    
1897
# Job queue test
1898
JQT_MSGPREFIX = "TESTMSG="
1899
JQT_EXPANDNAMES = "expandnames"
1900
JQT_EXEC = "exec"
1901
JQT_LOGMSG = "logmsg"
1902
JQT_STARTMSG = "startmsg"
1903
JQT_ALL = compat.UniqueFrozenset([
1904
  JQT_EXPANDNAMES,
1905
  JQT_EXEC,
1906
  JQT_LOGMSG,
1907
  JQT_STARTMSG,
1908
  ])
1909

    
1910
# Query resources
1911
QR_CLUSTER = "cluster"
1912
QR_INSTANCE = "instance"
1913
QR_NODE = "node"
1914
QR_LOCK = "lock"
1915
QR_GROUP = "group"
1916
QR_OS = "os"
1917
QR_JOB = "job"
1918
QR_EXPORT = "export"
1919
QR_NETWORK = "network"
1920
QR_EXTSTORAGE = "extstorage"
1921

    
1922
#: List of resources which can be queried using L{opcodes.OpQuery}
1923
QR_VIA_OP = compat.UniqueFrozenset([
1924
  QR_CLUSTER,
1925
  QR_INSTANCE,
1926
  QR_NODE,
1927
  QR_GROUP,
1928
  QR_OS,
1929
  QR_EXPORT,
1930
  QR_NETWORK,
1931
  QR_EXTSTORAGE,
1932
  ])
1933

    
1934
#: List of resources which can be queried using Local UniX Interface
1935
QR_VIA_LUXI = QR_VIA_OP.union([
1936
  QR_LOCK,
1937
  QR_JOB,
1938
  ])
1939

    
1940
#: List of resources which can be queried using RAPI
1941
QR_VIA_RAPI = QR_VIA_LUXI
1942

    
1943
# Query field types
1944
QFT_UNKNOWN = "unknown"
1945
QFT_TEXT = "text"
1946
QFT_BOOL = "bool"
1947
QFT_NUMBER = "number"
1948
QFT_UNIT = "unit"
1949
QFT_TIMESTAMP = "timestamp"
1950
QFT_OTHER = "other"
1951

    
1952
#: All query field types
1953
QFT_ALL = compat.UniqueFrozenset([
1954
  QFT_UNKNOWN,
1955
  QFT_TEXT,
1956
  QFT_BOOL,
1957
  QFT_NUMBER,
1958
  QFT_UNIT,
1959
  QFT_TIMESTAMP,
1960
  QFT_OTHER,
1961
  ])
1962

    
1963
# Query result field status (don't change or reuse values as they're used by
1964
# clients)
1965
#: Normal field status
1966
RS_NORMAL = 0
1967
#: Unknown field
1968
RS_UNKNOWN = 1
1969
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1970
RS_NODATA = 2
1971
#: Value unavailable/unsupported for item; if this field is supported
1972
#: but we cannot get the data for the moment, RS_NODATA or
1973
#: RS_OFFLINE should be used
1974
RS_UNAVAIL = 3
1975
#: Resource marked offline
1976
RS_OFFLINE = 4
1977

    
1978
RS_ALL = compat.UniqueFrozenset([
1979
  RS_NORMAL,
1980
  RS_UNKNOWN,
1981
  RS_NODATA,
1982
  RS_UNAVAIL,
1983
  RS_OFFLINE,
1984
  ])
1985

    
1986
#: Dictionary with special field cases and their verbose/terse formatting
1987
RSS_DESCRIPTION = {
1988
  RS_UNKNOWN: ("(unknown)", "??"),
1989
  RS_NODATA: ("(nodata)", "?"),
1990
  RS_OFFLINE: ("(offline)", "*"),
1991
  RS_UNAVAIL: ("(unavail)", "-"),
1992
  }
1993

    
1994
# max dynamic devices
1995
MAX_NICS = 8
1996
MAX_DISKS = 16
1997

    
1998
# SSCONF file prefix
1999
SSCONF_FILEPREFIX = "ssconf_"
2000
# SSCONF keys
2001
SS_CLUSTER_NAME = "cluster_name"
2002
SS_CLUSTER_TAGS = "cluster_tags"
2003
SS_FILE_STORAGE_DIR = "file_storage_dir"
2004
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
2005
SS_MASTER_CANDIDATES = "master_candidates"
2006
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
2007
SS_MASTER_IP = "master_ip"
2008
SS_MASTER_NETDEV = "master_netdev"
2009
SS_MASTER_NETMASK = "master_netmask"
2010
SS_MASTER_NODE = "master_node"
2011
SS_NODE_LIST = "node_list"
2012
SS_NODE_PRIMARY_IPS = "node_primary_ips"
2013
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
2014
SS_OFFLINE_NODES = "offline_nodes"
2015
SS_ONLINE_NODES = "online_nodes"
2016
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
2017
SS_INSTANCE_LIST = "instance_list"
2018
SS_RELEASE_VERSION = "release_version"
2019
SS_HYPERVISOR_LIST = "hypervisor_list"
2020
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
2021
SS_UID_POOL = "uid_pool"
2022
SS_NODEGROUPS = "nodegroups"
2023
SS_NETWORKS = "networks"
2024

    
2025
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
2026
SS_HVPARAMS_PREF = "hvparams_"
2027

    
2028
# Hvparams keys:
2029
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
2030
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
2031
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
2032
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
2033
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
2034
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
2035

    
2036
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
2037
  SS_HVPARAMS_XEN_PVM,
2038
  SS_HVPARAMS_XEN_FAKE,
2039
  SS_HVPARAMS_XEN_HVM,
2040
  SS_HVPARAMS_XEN_KVM,
2041
  SS_HVPARAMS_XEN_CHROOT,
2042
  SS_HVPARAMS_XEN_LXC,
2043
  ])
2044

    
2045
SS_FILE_PERMS = 0444
2046

    
2047
# cluster wide default parameters
2048
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
2049

    
2050
HVC_DEFAULTS = {
2051
  HT_XEN_PVM: {
2052
    HV_USE_BOOTLOADER: False,
2053
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
2054
    HV_BOOTLOADER_ARGS: "",
2055
    HV_KERNEL_PATH: XEN_KERNEL,
2056
    HV_INITRD_PATH: "",
2057
    HV_ROOT_PATH: "/dev/xvda1",
2058
    HV_KERNEL_ARGS: "ro",
2059
    HV_MIGRATION_PORT: 8002,
2060
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
2061
    HV_BLOCKDEV_PREFIX: "sd",
2062
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
2063
    HV_CPU_MASK: CPU_PINNING_ALL,
2064
    HV_CPU_CAP: 0,
2065
    HV_CPU_WEIGHT: 256,
2066
    HV_VIF_SCRIPT: "",
2067
    HV_XEN_CMD: XEN_CMD_XM,
2068
    },
2069
  HT_XEN_HVM: {
2070
    HV_BOOT_ORDER: "cd",
2071
    HV_CDROM_IMAGE_PATH: "",
2072
    HV_NIC_TYPE: HT_NIC_RTL8139,
2073
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
2074
    HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY,
2075
    HV_VNC_PASSWORD_FILE: pathutils.VNC_PASSWORD_FILE,
2076
    HV_ACPI: True,
2077
    HV_PAE: True,
2078
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
2079
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
2080
    HV_MIGRATION_PORT: 8002,
2081
    HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
2082
    HV_USE_LOCALTIME: False,
2083
    HV_BLOCKDEV_PREFIX: "hd",
2084
    HV_PASSTHROUGH: "",
2085
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
2086
    HV_CPU_MASK: CPU_PINNING_ALL,
2087
    HV_CPU_CAP: 0,
2088
    HV_CPU_WEIGHT: 256,
2089
    HV_VIF_TYPE: HT_HVM_VIF_IOEMU,
2090
    HV_VIF_SCRIPT: "",
2091
    HV_VIRIDIAN: False,
2092
    HV_XEN_CMD: XEN_CMD_XM,
2093
    },
2094
  HT_KVM: {
2095
    HV_KVM_PATH: KVM_PATH,
2096
    HV_KERNEL_PATH: KVM_KERNEL,
2097
    HV_INITRD_PATH: "",
2098
    HV_KERNEL_ARGS: "ro",
2099
    HV_ROOT_PATH: "/dev/vda1",
2100
    HV_ACPI: True,
2101
    HV_SERIAL_CONSOLE: True,
2102
    HV_SERIAL_SPEED: 38400,
2103
    HV_VNC_BIND_ADDRESS: "",
2104
    HV_VNC_TLS: False,
2105
    HV_VNC_X509: "",
2106
    HV_VNC_X509_VERIFY: False,
2107
    HV_VNC_PASSWORD_FILE: "",
2108
    HV_KVM_SPICE_BIND: "",
2109
    HV_KVM_SPICE_IP_VERSION: IFACE_NO_IP_VERSION_SPECIFIED,
2110
    HV_KVM_SPICE_PASSWORD_FILE: "",
2111
    HV_KVM_SPICE_LOSSLESS_IMG_COMPR: "",
2112
    HV_KVM_SPICE_JPEG_IMG_COMPR: "",
2113
    HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: "",
2114
    HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: "",
2115
    HV_KVM_SPICE_AUDIO_COMPR: True,
2116
    HV_KVM_SPICE_USE_TLS: False,
2117
    HV_KVM_SPICE_TLS_CIPHERS: OPENSSL_CIPHERS,
2118
    HV_KVM_SPICE_USE_VDAGENT: True,
2119
    HV_KVM_FLOPPY_IMAGE_PATH: "",
2120
    HV_CDROM_IMAGE_PATH: "",
2121
    HV_KVM_CDROM2_IMAGE_PATH: "",
2122
    HV_BOOT_ORDER: HT_BO_DISK,
2123
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
2124
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
2125
    HV_KVM_CDROM_DISK_TYPE: "",
2126
    HV_USB_MOUSE: "",
2127
    HV_KEYMAP: "",
2128
    HV_MIGRATION_PORT: 8102,
2129
    HV_MIGRATION_BANDWIDTH: 32, # MiB/s
2130
    HV_MIGRATION_DOWNTIME: 30,  # ms
2131
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
2132
    HV_USE_LOCALTIME: False,
2133
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
2134
    HV_SECURITY_MODEL: HT_SM_NONE,
2135
    HV_SECURITY_DOMAIN: "",
2136
    HV_KVM_FLAG: "",
2137
    HV_VHOST_NET: False,
2138
    HV_KVM_USE_CHROOT: False,
2139
    HV_MEM_PATH: "",
2140
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
2141
    HV_CPU_MASK: CPU_PINNING_ALL,
2142
    HV_CPU_TYPE: "",
2143
    HV_CPU_CORES: 0,
2144
    HV_CPU_THREADS: 0,
2145
    HV_CPU_SOCKETS: 0,
2146
    HV_SOUNDHW: "",
2147
    HV_USB_DEVICES: "",
2148
    HV_VGA: "",
2149
    HV_KVM_EXTRA: "",
2150
    HV_KVM_MACHINE_VERSION: "",
2151
    HV_VNET_HDR: True,
2152
    },
2153
  HT_FAKE: {
2154
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
2155
  },
2156
  HT_CHROOT: {
2157
    HV_INIT_SCRIPT: "/ganeti-chroot",
2158
    },
2159
  HT_LXC: {
2160
    HV_CPU_MASK: "",
2161
    },
2162
  }
2163

    
2164
HVC_GLOBALS = compat.UniqueFrozenset([
2165
  HV_MIGRATION_PORT,
2166
  HV_MIGRATION_BANDWIDTH,
2167
  HV_MIGRATION_MODE,
2168
  HV_XEN_CMD,
2169
  ])
2170

    
2171
BEC_DEFAULTS = {
2172
  BE_MINMEM: 128,
2173
  BE_MAXMEM: 128,
2174
  BE_VCPUS: 1,
2175
  BE_AUTO_BALANCE: True,
2176
  BE_ALWAYS_FAILOVER: False,
2177
  BE_SPINDLE_USE: 1,
2178
  }
2179

    
2180
NDC_DEFAULTS = {
2181
  ND_OOB_PROGRAM: "",
2182
  ND_SPINDLE_COUNT: 1,
2183
  ND_EXCLUSIVE_STORAGE: False,
2184
  ND_OVS: False,
2185
  ND_OVS_NAME: DEFAULT_OVS,
2186
  ND_OVS_LINK: ""
2187
  }
2188

    
2189
NDC_GLOBALS = compat.UniqueFrozenset([
2190
  ND_EXCLUSIVE_STORAGE,
2191
  ])
2192

    
2193
DISK_LD_DEFAULTS = {
2194
  DT_DRBD8: {
2195
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
2196
    LDP_BARRIERS: _autoconf.DRBD_BARRIERS,
2197
    LDP_NO_META_FLUSH: _autoconf.DRBD_NO_META_FLUSH,
2198
    LDP_DEFAULT_METAVG: DEFAULT_VG,
2199
    LDP_DISK_CUSTOM: "",
2200
    LDP_NET_CUSTOM: "",
2201
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
2202
    LDP_DYNAMIC_RESYNC: False,
2203

    
2204
    # The default values for the DRBD dynamic resync speed algorithm
2205
    # are taken from the drbsetup 8.3.11 man page, except for
2206
    # c-plan-ahead (that we don't need to set to 0, because we have a
2207
    # separate option to enable it) and for c-max-rate, that we cap to
2208
    # the default value for the static resync rate.
2209
    LDP_PLAN_AHEAD: 20, # ds
2210
    LDP_FILL_TARGET: 0, # sectors
2211
    LDP_DELAY_TARGET: 1, # ds
2212
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
2213
    LDP_MIN_RATE: 4 * 1024, # KiB/s
2214
    },
2215
  DT_PLAIN: {
2216
    LDP_STRIPES: _autoconf.LVM_STRIPECOUNT
2217
    },
2218
  DT_FILE: {},
2219
  DT_SHARED_FILE: {},
2220
  DT_BLOCK: {},
2221
  DT_RBD: {
2222
    LDP_POOL: "rbd"
2223
    },
2224
  DT_EXT: {},
2225
  }
2226

    
2227
# readability shortcuts
2228
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
2229
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
2230

    
2231
DISK_DT_DEFAULTS = {
2232
  DT_PLAIN: {
2233
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
2234
    },
2235
  DT_DRBD8: {
2236
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
2237
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
2238
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
2239
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
2240
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
2241
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
2242
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
2243
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
2244
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
2245
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
2246
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
2247
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
2248
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
2249
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
2250
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
2251
    },
2252
  DT_DISKLESS: {},
2253
  DT_FILE: {},
2254
  DT_SHARED_FILE: {},
2255
  DT_BLOCK: {},
2256
  DT_RBD: {
2257
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL]
2258
    },
2259
  DT_EXT: {},
2260
  }
2261

    
2262
# we don't want to export the shortcuts
2263
del _LV_DEFAULTS, _DRBD_DEFAULTS
2264

    
2265
NICC_DEFAULTS = {
2266
  NIC_MODE: NIC_MODE_BRIDGED,
2267
  NIC_LINK: DEFAULT_BRIDGE,
2268
  NIC_VLAN: VALUE_HS_NOTHING,
2269
  }
2270

    
2271
# All of the following values are quite arbitrarily - there are no
2272
# "good" defaults, these must be customised per-site
2273
ISPECS_MINMAX_DEFAULTS = {
2274
  ISPECS_MIN: {
2275
    ISPEC_MEM_SIZE: 128,
2276
    ISPEC_CPU_COUNT: 1,
2277
    ISPEC_DISK_COUNT: 1,
2278
    ISPEC_DISK_SIZE: 1024,
2279
    ISPEC_NIC_COUNT: 1,
2280
    ISPEC_SPINDLE_USE: 1,
2281
    },
2282
  ISPECS_MAX: {
2283
    ISPEC_MEM_SIZE: 32768,
2284
    ISPEC_CPU_COUNT: 8,
2285
    ISPEC_DISK_COUNT: MAX_DISKS,
2286
    ISPEC_DISK_SIZE: 1024 * 1024,
2287
    ISPEC_NIC_COUNT: MAX_NICS,
2288
    ISPEC_SPINDLE_USE: 12,
2289
    },
2290
  }
2291
IPOLICY_DEFAULTS = {
2292
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
2293
  ISPECS_STD: {
2294
    ISPEC_MEM_SIZE: 128,
2295
    ISPEC_CPU_COUNT: 1,
2296
    ISPEC_DISK_COUNT: 1,
2297
    ISPEC_DISK_SIZE: 1024,
2298
    ISPEC_NIC_COUNT: 1,
2299
    ISPEC_SPINDLE_USE: 1,
2300
    },
2301
  IPOLICY_DTS: list(DISK_TEMPLATES),
2302
  IPOLICY_VCPU_RATIO: 4.0,
2303
  IPOLICY_SPINDLE_RATIO: 32.0,
2304
  }
2305

    
2306
MASTER_POOL_SIZE_DEFAULT = 10
2307

    
2308
# Exclusive storage:
2309
# Error margin used to compare physical disks
2310
PART_MARGIN = .01
2311
# Space reserved when creating instance disks
2312
PART_RESERVED = .02
2313

    
2314
CONFD_PROTOCOL_VERSION = 1
2315

    
2316
CONFD_REQ_PING = 0
2317
CONFD_REQ_NODE_ROLE_BYNAME = 1
2318
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
2319
CONFD_REQ_CLUSTER_MASTER = 3
2320
CONFD_REQ_NODE_PIP_LIST = 4
2321
CONFD_REQ_MC_PIP_LIST = 5
2322
CONFD_REQ_INSTANCES_IPS_LIST = 6
2323
CONFD_REQ_NODE_DRBD = 7
2324
CONFD_REQ_NODE_INSTANCES = 8
2325

    
2326
# Confd request query fields. These are used to narrow down queries.
2327
# These must be strings rather than integers, because json-encoding
2328
# converts them to strings anyway, as they're used as dict-keys.
2329
CONFD_REQQ_LINK = "0"
2330
CONFD_REQQ_IP = "1"
2331
CONFD_REQQ_IPLIST = "2"
2332
CONFD_REQQ_FIELDS = "3"
2333

    
2334
CONFD_REQFIELD_NAME = "0"
2335
CONFD_REQFIELD_IP = "1"
2336
CONFD_REQFIELD_MNODE_PIP = "2"
2337

    
2338
CONFD_REQS = compat.UniqueFrozenset([
2339
  CONFD_REQ_PING,
2340
  CONFD_REQ_NODE_ROLE_BYNAME,
2341
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
2342
  CONFD_REQ_CLUSTER_MASTER,
2343
  CONFD_REQ_NODE_PIP_LIST,
2344
  CONFD_REQ_MC_PIP_LIST,
2345
  CONFD_REQ_INSTANCES_IPS_LIST,
2346
  CONFD_REQ_NODE_DRBD,
2347
  ])
2348

    
2349
CONFD_REPL_STATUS_OK = 0
2350
CONFD_REPL_STATUS_ERROR = 1
2351
CONFD_REPL_STATUS_NOTIMPLEMENTED = 2
2352

    
2353
CONFD_REPL_STATUSES = compat.UniqueFrozenset([
2354
  CONFD_REPL_STATUS_OK,
2355
  CONFD_REPL_STATUS_ERROR,
2356
  CONFD_REPL_STATUS_NOTIMPLEMENTED,
2357
  ])
2358

    
2359
(CONFD_NODE_ROLE_MASTER,
2360
 CONFD_NODE_ROLE_CANDIDATE,
2361
 CONFD_NODE_ROLE_OFFLINE,
2362
 CONFD_NODE_ROLE_DRAINED,
2363
 CONFD_NODE_ROLE_REGULAR,
2364
 ) = range(5)
2365

    
2366
# A few common errors for confd
2367
CONFD_ERROR_UNKNOWN_ENTRY = 1
2368
CONFD_ERROR_INTERNAL = 2
2369
CONFD_ERROR_ARGUMENT = 3
2370

    
2371
# Each request is "salted" by the current timestamp.
2372
# This constants decides how many seconds of skew to accept.
2373
# TODO: make this a default and allow the value to be more configurable
2374
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
2375

    
2376
# When we haven't reloaded the config for more than this amount of
2377
# seconds, we force a test to see if inotify is betraying us. Using a
2378
# prime number to ensure we get less chance of 'same wakeup' with
2379
# other processes.
2380
CONFD_CONFIG_RELOAD_TIMEOUT = 17
2381

    
2382
# If we receive more than one update in this amount of microseconds,
2383
# we move to polling every RATELIMIT seconds, rather than relying on
2384
# inotify, to be able to serve more requests.
2385
CONFD_CONFIG_RELOAD_RATELIMIT = 250000
2386

    
2387
# Magic number prepended to all confd queries.
2388
# This allows us to distinguish different types of confd protocols and handle
2389
# them. For example by changing this we can move the whole payload to be
2390
# compressed, or move away from json.
2391
CONFD_MAGIC_FOURCC = "plj0"
2392

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

    
2398
# Timeout in seconds to expire pending query request in the confd client
2399
# library. We don't actually expect any answer more than 10 seconds after we
2400
# sent a request.
2401
CONFD_CLIENT_EXPIRE_TIMEOUT = 10
2402

    
2403
# Maximum UDP datagram size.
2404
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
2405
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
2406
#   (assuming we can't use jumbo frames)
2407
# We just set this to 60K, which should be enough
2408
MAX_UDP_DATA_SIZE = 61440
2409

    
2410
# User-id pool minimum/maximum acceptable user-ids.
2411
UIDPOOL_UID_MIN = 0
2412
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2413

    
2414
# Name or path of the pgrep command
2415
PGREP = "pgrep"
2416

    
2417
# Name of the node group that gets created at cluster init or upgrade
2418
INITIAL_NODE_GROUP_NAME = "default"
2419

    
2420
# Possible values for NodeGroup.alloc_policy
2421
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2422
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2423
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2424
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2425

    
2426
# Temporary external/shared storage parameters
2427
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2428

    
2429
# qemu-img path, required for ovfconverter
2430
QEMUIMG_PATH = _autoconf.QEMUIMG_PATH
2431

    
2432
# Whether htools was enabled at compilation time
2433
HTOOLS = _autoconf.HTOOLS
2434
# The hail iallocator
2435
IALLOC_HAIL = "hail"
2436

    
2437
# Fake opcodes for functions that have hooks attached to them via
2438
# backend.RunLocalHooks
2439
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2440
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2441

    
2442
# SSH key types
2443
SSHK_RSA = "rsa"
2444
SSHK_DSA = "dsa"
2445
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2446

    
2447
# SSH authorized key types
2448
SSHAK_RSA = "ssh-rsa"
2449
SSHAK_DSS = "ssh-dss"
2450
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2451

    
2452
# SSH setup
2453
SSHS_CLUSTER_NAME = "cluster_name"
2454
SSHS_SSH_HOST_KEY = "ssh_host_key"
2455
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2456
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2457

    
2458
#: Key files for SSH daemon
2459
SSH_DAEMON_KEYFILES = {
2460
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2461
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2462
  }
2463

    
2464
# Node daemon setup
2465
NDS_CLUSTER_NAME = "cluster_name"
2466
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2467
NDS_SSCONF = "ssconf"
2468
NDS_START_NODE_DAEMON = "start_node_daemon"
2469

    
2470
# Path generating random UUID
2471
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2472

    
2473
# Regex string for verifying a UUID
2474
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2475

    
2476
# Auto-repair tag prefixes
2477
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2478
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2479
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2480
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2481
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2482

    
2483
# Auto-repair levels
2484
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2485
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2486
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2487
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2488
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2489

    
2490
# Auto-repair results
2491
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2492
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2493
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2494
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2495

    
2496
# The version identifier for builtin data collectors
2497
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2498

    
2499
# The reason trail opcode parameter name
2500
OPCODE_REASON = "reason"
2501

    
2502
# The source reasons for the execution of an OpCode
2503
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2504
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2505
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2506
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2507
OPCODE_REASON_SRC_USER = "gnt:user"
2508

    
2509
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2510
  OPCODE_REASON_SRC_CLIENT,
2511
  OPCODE_REASON_SRC_NODED,
2512
  OPCODE_REASON_SRC_OPCODE,
2513
  OPCODE_REASON_SRC_RLIB2,
2514
  OPCODE_REASON_SRC_USER,
2515
  ])
2516

    
2517
DISKSTATS_FILE = "/proc/diskstats"
2518

    
2519
# CPU load collector variables
2520
STAT_FILE = "/proc/stat"
2521
CPUAVGLOAD_BUFFER_SIZE = 150
2522
CPUAVGLOAD_WINDOW_SIZE = 600
2523

    
2524
# Mond's variable for periodical data collection
2525
MOND_TIME_INTERVAL = 5
2526

    
2527
# Do not re-export imported modules
2528
del re, _vcsversion, _autoconf, _constants, socket, pathutils, compat
2529

    
2530

    
2531
ALLOCATABLE_KEY = "allocatable"
2532
FAILED_KEY = "failed"