Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ ecf43dcb

History | View | Annotate | Download (64.2 kB)

1
#
2
#
3

    
4
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
5
#
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 2 of the License, or
9
# (at your option) any later version.
10
#
11
# This program is distributed in the hope that it will be useful, but
12
# WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
# General Public License for more details.
15
#
16
# You should have received a copy of the GNU General Public License
17
# along with this program; if not, write to the Free Software
18
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19
# 02110-1301, USA.
20

    
21

    
22
"""Module holding different constants."""
23

    
24
import re
25
import socket
26

    
27
from ganeti import _constants
28
from ganeti import _vcsversion
29
from ganeti import compat
30
from ganeti import pathutils
31

    
32

    
33
# various versions
34
RELEASE_VERSION = _constants.RELEASE_VERSION
35
OS_API_V10 = _constants.OS_API_V10
36
OS_API_V15 = _constants.OS_API_V15
37
OS_API_V20 = _constants.OS_API_V20
38
OS_API_VERSIONS = _constants.OS_API_VERSIONS
39
VCS_VERSION = _vcsversion.VCS_VERSION
40
EXPORT_VERSION = 0
41
RAPI_VERSION = 2
42

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

    
47
DIR_VERSION = _constants.DIR_VERSION
48

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

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

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

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

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

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

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

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

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

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

    
123
DAEMONS = _constants.DAEMONS
124

    
125
DAEMONS_PORTS = _constants.DAEMONS_PORTS
126

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

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

    
135
DAEMONS_LOGBASE = _constants.DAEMONS_LOGBASE
136

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

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

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

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

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

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

    
168
DEV_CONSOLE = _constants.DEV_CONSOLE
169

    
170
PROC_MOUNTS = "/proc/mounts"
171

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

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

    
187
EXPORT_CONF_FILE = "config.ini"
188

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

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

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

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

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

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

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

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

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

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

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

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

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

    
256
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
257

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

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

    
270
IE_CUSTOM_SIZE = "fd"
271

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

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

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

    
290

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
528
REPLACE_DISK_PRI = _constants.REPLACE_DISK_PRI
529
REPLACE_DISK_SEC = _constants.REPLACE_DISK_SEC
530
REPLACE_DISK_CHG = _constants.REPLACE_DISK_CHG
531
REPLACE_DISK_AUTO = _constants.REPLACE_DISK_AUTO
532
REPLACE_MODES = _constants.REPLACE_MODES
533

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
600
MAX_TAG_LEN = _constants.MAX_TAG_LEN
601
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
602

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

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

    
632
RPC_TMO_URGENT = _constants.RPC_TMO_URGENT
633
RPC_TMO_FAST = _constants.RPC_TMO_FAST
634
RPC_TMO_NORMAL = _constants.RPC_TMO_NORMAL
635
RPC_TMO_SLOW = _constants.RPC_TMO_SLOW
636
RPC_TMO_4HRS = _constants.RPC_TMO_4HRS
637
RPC_TMO_1DAY = _constants.RPC_TMO_1DAY
638
RPC_CONNECT_TIMEOUT = _constants.RPC_CONNECT_TIMEOUT
639

    
640
#: Key for job IDs in opcode result
641
JOB_IDS_KEY = "jobs"
642

    
643
# runparts results
644
(RUNPARTS_SKIP,
645
 RUNPARTS_RUN,
646
 RUNPARTS_ERR) = range(3)
647

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

    
654
# RPC constants
655
(RPC_ENCODING_NONE,
656
 RPC_ENCODING_ZLIB_BASE64) = range(2)
657

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

    
672
OS_API_FILE = "ganeti_api_version"
673
OS_VARIANTS_FILE = "variants.list"
674
OS_PARAMETERS_FILE = "parameters.list"
675

    
676
OS_VALIDATE_PARAMETERS = "parameters"
677
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
678

    
679
# External Storage (ES) related constants
680
ES_ACTION_CREATE = "create"
681
ES_ACTION_REMOVE = "remove"
682
ES_ACTION_GROW = "grow"
683
ES_ACTION_ATTACH = "attach"
684
ES_ACTION_DETACH = "detach"
685
ES_ACTION_SETINFO = "setinfo"
686
ES_ACTION_VERIFY = "verify"
687

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

    
705
ES_PARAMETERS_FILE = "parameters.list"
706

    
707
# reboot types
708
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
709
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
710
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
711
REBOOT_TYPES = _constants.REBOOT_TYPES
712

    
713
# instance reboot behaviors
714
INSTANCE_REBOOT_ALLOWED = "reboot"
715
INSTANCE_REBOOT_EXIT = "exit"
716

    
717
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
718
  INSTANCE_REBOOT_ALLOWED,
719
  INSTANCE_REBOOT_EXIT,
720
  ])
721

    
722
VTYPE_STRING = _constants.VTYPE_STRING
723
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
724
VTYPE_BOOL = _constants.VTYPE_BOOL
725
VTYPE_SIZE = _constants.VTYPE_SIZE
726
VTYPE_INT = _constants.VTYPE_INT
727
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
728

    
729
# Constant representing that the user does not specify any IP version
730
IFACE_NO_IP_VERSION_SPECIFIED = 0
731

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

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

    
827

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

    
903
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
904

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

    
919
# Migration statuses
920
HV_MIGRATION_COMPLETED = "completed"
921
HV_MIGRATION_ACTIVE = "active"
922
HV_MIGRATION_FAILED = "failed"
923
HV_MIGRATION_CANCELLED = "cancelled"
924

    
925
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
926
  HV_MIGRATION_COMPLETED,
927
  HV_MIGRATION_ACTIVE,
928
  HV_MIGRATION_FAILED,
929
  HV_MIGRATION_CANCELLED,
930
  ])
931

    
932
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
933
  HV_MIGRATION_FAILED,
934
  HV_MIGRATION_CANCELLED,
935
  ])
936

    
937
# KVM-specific statuses
938
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
939

    
940
# Node info keys
941
HV_NODEINFO_KEY_VERSION = "hv_version"
942

    
943
# Hypervisor state
944
HVST_MEMORY_TOTAL = "mem_total"
945
HVST_MEMORY_NODE = "mem_node"
946
HVST_MEMORY_HV = "mem_hv"
947
HVST_CPU_TOTAL = "cpu_total"
948
HVST_CPU_NODE = "cpu_node"
949

    
950
HVST_DEFAULTS = {
951
  HVST_MEMORY_TOTAL: 0,
952
  HVST_MEMORY_NODE: 0,
953
  HVST_MEMORY_HV: 0,
954
  HVST_CPU_TOTAL: 1,
955
  HVST_CPU_NODE: 1,
956
  }
957

    
958
HVSTS_PARAMETER_TYPES = {
959
  HVST_MEMORY_TOTAL: VTYPE_INT,
960
  HVST_MEMORY_NODE: VTYPE_INT,
961
  HVST_MEMORY_HV: VTYPE_INT,
962
  HVST_CPU_TOTAL: VTYPE_INT,
963
  HVST_CPU_NODE: VTYPE_INT,
964
  }
965

    
966
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
967

    
968
# Disk state
969
DS_DISK_TOTAL = "disk_total"
970
DS_DISK_RESERVED = "disk_reserved"
971
DS_DISK_OVERHEAD = "disk_overhead"
972

    
973
DS_DEFAULTS = {
974
  DS_DISK_TOTAL: 0,
975
  DS_DISK_RESERVED: 0,
976
  DS_DISK_OVERHEAD: 0,
977
  }
978

    
979
ND_OOB_PROGRAM = _constants.ND_OOB_PROGRAM
980
ND_SPINDLE_COUNT = _constants.ND_SPINDLE_COUNT
981
ND_EXCLUSIVE_STORAGE = _constants.ND_EXCLUSIVE_STORAGE
982
ND_OVS = _constants.ND_OVS
983
ND_OVS_NAME = _constants.ND_OVS_NAME
984
ND_OVS_LINK = _constants.ND_OVS_LINK
985

    
986
NDS_PARAMETER_TYPES = _constants.NDS_PARAMETER_TYPES
987
NDS_PARAMETERS = _constants.NDS_PARAMETERS
988
NDS_PARAMETER_TITLES = _constants.NDS_PARAMETER_TITLES
989
DSS_PARAMETER_TYPES = {
990
  DS_DISK_TOTAL: VTYPE_INT,
991
  DS_DISK_RESERVED: VTYPE_INT,
992
  DS_DISK_OVERHEAD: VTYPE_INT,
993
  }
994

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1070
# Logical Disks parameters
1071
LDP_RESYNC_RATE = "resync-rate"
1072
LDP_STRIPES = "stripes"
1073
LDP_BARRIERS = "disabled-barriers"
1074
LDP_NO_META_FLUSH = "disable-meta-flush"
1075
LDP_DEFAULT_METAVG = "default-metavg"
1076
LDP_DISK_CUSTOM = "disk-custom"
1077
LDP_NET_CUSTOM = "net-custom"
1078
LDP_PROTOCOL = "protocol"
1079
LDP_DYNAMIC_RESYNC = "dynamic-resync"
1080
LDP_PLAN_AHEAD = "c-plan-ahead"
1081
LDP_FILL_TARGET = "c-fill-target"
1082
LDP_DELAY_TARGET = "c-delay-target"
1083
LDP_MAX_RATE = "c-max-rate"
1084
LDP_MIN_RATE = "c-min-rate"
1085
LDP_POOL = "pool"
1086
LDP_ACCESS = "access"
1087
DISK_LD_TYPES = {
1088
  LDP_RESYNC_RATE: VTYPE_INT,
1089
  LDP_STRIPES: VTYPE_INT,
1090
  LDP_BARRIERS: VTYPE_STRING,
1091
  LDP_NO_META_FLUSH: VTYPE_BOOL,
1092
  LDP_DEFAULT_METAVG: VTYPE_STRING,
1093
  LDP_DISK_CUSTOM: VTYPE_STRING,
1094
  LDP_NET_CUSTOM: VTYPE_STRING,
1095
  LDP_PROTOCOL: VTYPE_STRING,
1096
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
1097
  LDP_PLAN_AHEAD: VTYPE_INT,
1098
  LDP_FILL_TARGET: VTYPE_INT,
1099
  LDP_DELAY_TARGET: VTYPE_INT,
1100
  LDP_MAX_RATE: VTYPE_INT,
1101
  LDP_MIN_RATE: VTYPE_INT,
1102
  LDP_POOL: VTYPE_STRING,
1103
  LDP_ACCESS: VTYPE_STRING,
1104
  }
1105
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
1106

    
1107
# Disk template parameters (can be set/changed by the user via gnt-cluster and
1108
# gnt-group)
1109
DRBD_RESYNC_RATE = "resync-rate"
1110
DRBD_DATA_STRIPES = "data-stripes"
1111
DRBD_META_STRIPES = "meta-stripes"
1112
DRBD_DISK_BARRIERS = "disk-barriers"
1113
DRBD_META_BARRIERS = "meta-barriers"
1114
DRBD_DEFAULT_METAVG = "metavg"
1115
DRBD_DISK_CUSTOM = "disk-custom"
1116
DRBD_NET_CUSTOM = "net-custom"
1117
DRBD_PROTOCOL = "protocol"
1118
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
1119
DRBD_PLAN_AHEAD = "c-plan-ahead"
1120
DRBD_FILL_TARGET = "c-fill-target"
1121
DRBD_DELAY_TARGET = "c-delay-target"
1122
DRBD_MAX_RATE = "c-max-rate"
1123
DRBD_MIN_RATE = "c-min-rate"
1124
LV_STRIPES = "stripes"
1125
RBD_POOL = "pool"
1126
RBD_ACCESS = "access"
1127
DISK_DT_TYPES = {
1128
  DRBD_RESYNC_RATE: VTYPE_INT,
1129
  DRBD_DATA_STRIPES: VTYPE_INT,
1130
  DRBD_META_STRIPES: VTYPE_INT,
1131
  DRBD_DISK_BARRIERS: VTYPE_STRING,
1132
  DRBD_META_BARRIERS: VTYPE_BOOL,
1133
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
1134
  DRBD_DISK_CUSTOM: VTYPE_STRING,
1135
  DRBD_NET_CUSTOM: VTYPE_STRING,
1136
  DRBD_PROTOCOL: VTYPE_STRING,
1137
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
1138
  DRBD_PLAN_AHEAD: VTYPE_INT,
1139
  DRBD_FILL_TARGET: VTYPE_INT,
1140
  DRBD_DELAY_TARGET: VTYPE_INT,
1141
  DRBD_MAX_RATE: VTYPE_INT,
1142
  DRBD_MIN_RATE: VTYPE_INT,
1143
  LV_STRIPES: VTYPE_INT,
1144
  RBD_POOL: VTYPE_STRING,
1145
  RBD_ACCESS: VTYPE_STRING,
1146
  }
1147

    
1148
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1149

    
1150
# dynamic disk parameters
1151
DDP_LOCAL_IP = "local-ip"
1152
DDP_REMOTE_IP = "remote-ip"
1153
DDP_PORT = "port"
1154
DDP_LOCAL_MINOR = "local-minor"
1155
DDP_REMOTE_MINOR = "remote-minor"
1156

    
1157
# OOB supported commands
1158
OOB_POWER_ON = _constants.OOB_POWER_ON
1159
OOB_POWER_OFF = _constants.OOB_POWER_OFF
1160
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
1161
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
1162
OOB_HEALTH = _constants.OOB_HEALTH
1163
OOB_COMMANDS = _constants.OOB_COMMANDS
1164

    
1165
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1166

    
1167
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1168
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1169

    
1170
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1171
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1172
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1173
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1174
OOB_STATUSES = _constants.OOB_STATUSES
1175

    
1176
# Instance Parameters Profile
1177
PP_DEFAULT = "default"
1178

    
1179
# NIC_* constants are used inside the ganeti config
1180
NIC_MODE = _constants.NIC_MODE
1181
NIC_LINK = _constants.NIC_LINK
1182
NIC_VLAN = _constants.NIC_VLAN
1183

    
1184
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1185
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1186
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1187
NIC_IP_POOL = _constants.NIC_IP_POOL
1188
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1189

    
1190
RESERVE_ACTION = "reserve"
1191
RELEASE_ACTION = "release"
1192

    
1193
NICS_PARAMETER_TYPES = {
1194
  NIC_MODE: VTYPE_STRING,
1195
  NIC_LINK: VTYPE_STRING,
1196
  NIC_VLAN: VTYPE_MAYBE_STRING,
1197
  }
1198

    
1199
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1200

    
1201
# IDISK_* constants are used in opcodes, to create/change disks
1202
IDISK_SIZE = "size"
1203
IDISK_SPINDLES = "spindles"
1204
IDISK_MODE = "mode"
1205
IDISK_ADOPT = "adopt"
1206
IDISK_VG = "vg"
1207
IDISK_METAVG = "metavg"
1208
IDISK_PROVIDER = "provider"
1209
IDISK_NAME = "name"
1210
IDISK_PARAMS_TYPES = {
1211
  IDISK_SIZE: VTYPE_SIZE,
1212
  IDISK_SPINDLES: VTYPE_INT,
1213
  IDISK_MODE: VTYPE_STRING,
1214
  IDISK_ADOPT: VTYPE_STRING,
1215
  IDISK_VG: VTYPE_STRING,
1216
  IDISK_METAVG: VTYPE_STRING,
1217
  IDISK_PROVIDER: VTYPE_STRING,
1218
  IDISK_NAME: VTYPE_MAYBE_STRING,
1219
  }
1220
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1221

    
1222
# INIC_* constants are used in opcodes, to create/change nics
1223
INIC_MAC = "mac"
1224
INIC_IP = "ip"
1225
INIC_MODE = "mode"
1226
INIC_LINK = "link"
1227
INIC_NETWORK = "network"
1228
INIC_NAME = "name"
1229
INIC_VLAN = "vlan"
1230
INIC_BRIDGE = "bridge"
1231
INIC_PARAMS_TYPES = {
1232
  INIC_IP: VTYPE_MAYBE_STRING,
1233
  INIC_LINK: VTYPE_STRING,
1234
  INIC_MAC: VTYPE_STRING,
1235
  INIC_MODE: VTYPE_STRING,
1236
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1237
  INIC_NAME: VTYPE_MAYBE_STRING,
1238
  INIC_VLAN: VTYPE_MAYBE_STRING,
1239
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1240
  }
1241
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1242

    
1243
# Hypervisor constants
1244
HT_XEN_PVM = _constants.HT_XEN_PVM
1245
HT_FAKE = _constants.HT_FAKE
1246
HT_XEN_HVM = _constants.HT_XEN_HVM
1247
HT_KVM = _constants.HT_KVM
1248
HT_CHROOT = _constants.HT_CHROOT
1249
HT_LXC = _constants.HT_LXC
1250
HYPER_TYPES = _constants.HYPER_TYPES
1251
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1252

    
1253
VNC_BASE_PORT = 5900
1254
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1255

    
1256
# NIC types
1257
HT_NIC_RTL8139 = "rtl8139"
1258
HT_NIC_NE2K_PCI = "ne2k_pci"
1259
HT_NIC_NE2K_ISA = "ne2k_isa"
1260
HT_NIC_I82551 = "i82551"
1261
HT_NIC_I85557B = "i82557b"
1262
HT_NIC_I8259ER = "i82559er"
1263
HT_NIC_PCNET = "pcnet"
1264
HT_NIC_E1000 = "e1000"
1265
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1266

    
1267
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1268
  HT_NIC_RTL8139,
1269
  HT_NIC_NE2K_PCI,
1270
  HT_NIC_E1000,
1271
  HT_NIC_NE2K_ISA,
1272
  HT_NIC_PARAVIRTUAL,
1273
  ])
1274
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1275
  HT_NIC_RTL8139,
1276
  HT_NIC_NE2K_PCI,
1277
  HT_NIC_NE2K_ISA,
1278
  HT_NIC_I82551,
1279
  HT_NIC_I85557B,
1280
  HT_NIC_I8259ER,
1281
  HT_NIC_PCNET,
1282
  HT_NIC_E1000,
1283
  HT_NIC_PARAVIRTUAL,
1284
  ])
1285

    
1286
# Vif types
1287
# default vif type in xen-hvm
1288
HT_HVM_VIF_IOEMU = "ioemu"
1289
HT_HVM_VIF_VIF = "vif"
1290
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1291
  HT_HVM_VIF_IOEMU,
1292
  HT_HVM_VIF_VIF,
1293
  ])
1294

    
1295
# Disk types
1296
HT_DISK_IOEMU = "ioemu"
1297
HT_DISK_IDE = "ide"
1298
HT_DISK_SCSI = "scsi"
1299
HT_DISK_SD = "sd"
1300
HT_DISK_MTD = "mtd"
1301
HT_DISK_PFLASH = "pflash"
1302

    
1303
HT_CACHE_DEFAULT = "default"
1304
HT_CACHE_NONE = "none"
1305
HT_CACHE_WTHROUGH = "writethrough"
1306
HT_CACHE_WBACK = "writeback"
1307
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1308
  HT_CACHE_DEFAULT,
1309
  HT_CACHE_NONE,
1310
  HT_CACHE_WTHROUGH,
1311
  HT_CACHE_WBACK,
1312
  ])
1313

    
1314
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1315
  HT_DISK_PARAVIRTUAL,
1316
  HT_DISK_IOEMU,
1317
  ])
1318
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1319
  HT_DISK_PARAVIRTUAL,
1320
  HT_DISK_IDE,
1321
  HT_DISK_SCSI,
1322
  HT_DISK_SD,
1323
  HT_DISK_MTD,
1324
  HT_DISK_PFLASH,
1325
  ])
1326

    
1327
# Mouse types:
1328
HT_MOUSE_MOUSE = "mouse"
1329
HT_MOUSE_TABLET = "tablet"
1330

    
1331
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1332
  HT_MOUSE_MOUSE,
1333
  HT_MOUSE_TABLET,
1334
  ])
1335

    
1336
# Boot order
1337
HT_BO_FLOPPY = "floppy"
1338
HT_BO_CDROM = "cdrom"
1339
HT_BO_DISK = "disk"
1340
HT_BO_NETWORK = "network"
1341

    
1342
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1343
  HT_BO_FLOPPY,
1344
  HT_BO_CDROM,
1345
  HT_BO_DISK,
1346
  HT_BO_NETWORK,
1347
  ])
1348

    
1349
# SPICE lossless image compression options
1350
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1351
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1352
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1353
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1354
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1355
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1356

    
1357
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1358
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1359
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1360
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1361
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1362
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1363
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1364
  ])
1365

    
1366
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1367
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1368
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1369
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1370

    
1371
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1372
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1373
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1374
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1375
  ])
1376

    
1377
# SPICE video stream detection
1378
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1379
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1380
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1381

    
1382
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1383
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1384
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1385
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1386
  ])
1387

    
1388
# Security models
1389
HT_SM_NONE = "none"
1390
HT_SM_USER = "user"
1391
HT_SM_POOL = "pool"
1392

    
1393
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1394
  HT_SM_NONE,
1395
  HT_SM_USER,
1396
  HT_SM_POOL,
1397
  ])
1398

    
1399
# Kvm flag values
1400
HT_KVM_ENABLED = "enabled"
1401
HT_KVM_DISABLED = "disabled"
1402

    
1403
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1404

    
1405
# Migration type
1406
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1407
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1408
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1409

    
1410
# Cluster Verify steps
1411
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1412
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1413

    
1414
# Cluster Verify error classes
1415
CV_TCLUSTER = _constants.CV_TCLUSTER
1416
CV_TGROUP = _constants.CV_TGROUP
1417
CV_TNODE = _constants.CV_TNODE
1418
CV_TINSTANCE = _constants.CV_TINSTANCE
1419

    
1420
# Cluster Verify error codes and documentation
1421
CV_ECLUSTERCFG = _constants.CV_ECLUSTERCFG
1422
CV_ECLUSTERCERT = _constants.CV_ECLUSTERCERT
1423
CV_ECLUSTERFILECHECK = _constants.CV_ECLUSTERFILECHECK
1424
CV_ECLUSTERDANGLINGNODES = _constants.CV_ECLUSTERDANGLINGNODES
1425
CV_ECLUSTERDANGLINGINST = _constants.CV_ECLUSTERDANGLINGINST
1426
CV_EGROUPDIFFERENTPVSIZE = _constants.CV_EGROUPDIFFERENTPVSIZE
1427
CV_EINSTANCEBADNODE = _constants.CV_EINSTANCEBADNODE
1428
CV_EINSTANCEDOWN = _constants.CV_EINSTANCEDOWN
1429
CV_EINSTANCELAYOUT = _constants.CV_EINSTANCELAYOUT
1430
CV_EINSTANCEMISSINGDISK = _constants.CV_EINSTANCEMISSINGDISK
1431
CV_EINSTANCEFAULTYDISK = _constants.CV_EINSTANCEFAULTYDISK
1432
CV_EINSTANCEWRONGNODE = _constants.CV_EINSTANCEWRONGNODE
1433
CV_EINSTANCESPLITGROUPS = _constants.CV_EINSTANCESPLITGROUPS
1434
CV_EINSTANCEPOLICY = _constants.CV_EINSTANCEPOLICY
1435
CV_EINSTANCEUNSUITABLENODE = _constants.CV_EINSTANCEUNSUITABLENODE
1436
CV_EINSTANCEMISSINGCFGPARAMETER = _constants.CV_EINSTANCEMISSINGCFGPARAMETER
1437
CV_ENODEDRBD = _constants.CV_ENODEDRBD
1438
CV_ENODEDRBDVERSION = _constants.CV_ENODEDRBDVERSION
1439
CV_ENODEDRBDHELPER = _constants.CV_ENODEDRBDHELPER
1440
CV_ENODEFILECHECK = _constants.CV_ENODEFILECHECK
1441
CV_ENODEHOOKS = _constants.CV_ENODEHOOKS
1442
CV_ENODEHV = _constants.CV_ENODEHV
1443
CV_ENODELVM = _constants.CV_ENODELVM
1444
CV_ENODEN1 = _constants.CV_ENODEN1
1445
CV_ENODENET = _constants.CV_ENODENET
1446
CV_ENODEOS = _constants.CV_ENODEOS
1447
CV_ENODEORPHANINSTANCE = _constants.CV_ENODEORPHANINSTANCE
1448
CV_ENODEORPHANLV = _constants.CV_ENODEORPHANLV
1449
CV_ENODERPC = _constants.CV_ENODERPC
1450
CV_ENODESSH = _constants.CV_ENODESSH
1451
CV_ENODEVERSION = _constants.CV_ENODEVERSION
1452
CV_ENODESETUP = _constants.CV_ENODESETUP
1453
CV_ENODETIME = _constants.CV_ENODETIME
1454
CV_ENODEOOBPATH = _constants.CV_ENODEOOBPATH
1455
CV_ENODEUSERSCRIPTS = _constants.CV_ENODEUSERSCRIPTS
1456
CV_ENODEFILESTORAGEPATHS = _constants.CV_ENODEFILESTORAGEPATHS
1457
CV_ENODEFILESTORAGEPATHUNUSABLE = _constants.CV_ENODEFILESTORAGEPATHUNUSABLE
1458
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1459
  _constants.CV_ENODESHAREDFILESTORAGEPATHUNUSABLE
1460

    
1461
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1462
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1463

    
1464
# Node verify constants
1465
NV_BRIDGES = "bridges"
1466
NV_DRBDHELPER = "drbd-helper"
1467
NV_DRBDVERSION = "drbd-version"
1468
NV_DRBDLIST = "drbd-list"
1469
NV_EXCLUSIVEPVS = "exclusive-pvs"
1470
NV_FILELIST = "filelist"
1471
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1472
NV_FILE_STORAGE_PATH = "file-storage-path"
1473
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1474
NV_HVINFO = "hvinfo"
1475
NV_HVPARAMS = "hvparms"
1476
NV_HYPERVISOR = "hypervisor"
1477
NV_INSTANCELIST = "instancelist"
1478
NV_LVLIST = "lvlist"
1479
NV_MASTERIP = "master-ip"
1480
NV_NODELIST = "nodelist"
1481
NV_NODENETTEST = "node-net-test"
1482
NV_NODESETUP = "nodesetup"
1483
NV_OOB_PATHS = "oob-paths"
1484
NV_OSLIST = "oslist"
1485
NV_PVLIST = "pvlist"
1486
NV_TIME = "time"
1487
NV_USERSCRIPTS = "user-scripts"
1488
NV_VERSION = "version"
1489
NV_VGLIST = "vglist"
1490
NV_VMNODES = "vmnodes"
1491

    
1492
# Instance status
1493
INSTST_RUNNING = _constants.INSTST_RUNNING
1494
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1495
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1496
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1497
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1498
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1499
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1500
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1501
INSTST_ALL = _constants.INSTST_ALL
1502

    
1503
# Admin states
1504
ADMINST_UP = _constants.ADMINST_UP
1505
ADMINST_DOWN = _constants.ADMINST_DOWN
1506
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1507
ADMINST_ALL = _constants.ADMINST_ALL
1508

    
1509
# Node roles
1510
NR_REGULAR = _constants.NR_REGULAR
1511
NR_MASTER = _constants.NR_MASTER
1512
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1513
NR_DRAINED = _constants.NR_DRAINED
1514
NR_OFFLINE = _constants.NR_OFFLINE
1515
NR_ALL = _constants.NR_ALL
1516

    
1517
# SSL certificate check constants (in days)
1518
SSL_CERT_EXPIRATION_WARN = 30
1519
SSL_CERT_EXPIRATION_ERROR = 7
1520

    
1521
# Allocator framework constants
1522
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1523
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1524
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1525
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1526

    
1527
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1528
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1529
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1530
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1531
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1532
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1533

    
1534
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1535
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1536

    
1537
# Node evacuation
1538
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1539
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1540
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1541
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1542

    
1543
# Job queue
1544
JOB_QUEUE_VERSION = 1
1545
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1546
JOB_QUEUE_FILES_PERMS = 0640
1547

    
1548
JOB_ID_TEMPLATE = r"\d+"
1549
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1550

    
1551
# unchanged job return
1552
JOB_NOTCHANGED = "nochange"
1553

    
1554
# Job status
1555
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1556
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1557
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1558
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1559
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1560
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1561
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1562
JOBS_PENDING = _constants.JOBS_PENDING
1563
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1564
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1565

    
1566
# OpCode status
1567
# not yet finalized
1568
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1569
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1570
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1571
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1572
# finalized
1573
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1574
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1575
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1576
OPS_FINALIZED = _constants.OPS_FINALIZED
1577

    
1578
# OpCode priority
1579
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1580
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1581
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1582
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1583
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1584
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1585
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1586

    
1587
# Lock recalculate mode
1588
LOCKS_REPLACE = "replace"
1589
LOCKS_APPEND = "append"
1590

    
1591
# Lock timeout (sum) before we should go into blocking acquire (still
1592
# can be reset by priority change); computed as max time (10 hours)
1593
# before we should actually go into blocking acquire given that we
1594
# start from default priority level; in seconds
1595
# TODO
1596
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1597
LOCK_ATTEMPTS_MAXWAIT = 15.0
1598
LOCK_ATTEMPTS_MINWAIT = 1.0
1599

    
1600
# Execution log types
1601
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1602
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1603
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1604

    
1605
# /etc/hosts modification
1606
ETC_HOSTS_ADD = "add"
1607
ETC_HOSTS_REMOVE = "remove"
1608

    
1609
# Job queue test
1610
JQT_MSGPREFIX = "TESTMSG="
1611
JQT_EXPANDNAMES = "expandnames"
1612
JQT_EXEC = "exec"
1613
JQT_LOGMSG = "logmsg"
1614
JQT_STARTMSG = "startmsg"
1615
JQT_ALL = compat.UniqueFrozenset([
1616
  JQT_EXPANDNAMES,
1617
  JQT_EXEC,
1618
  JQT_LOGMSG,
1619
  JQT_STARTMSG,
1620
  ])
1621

    
1622
# Query resources
1623
QR_CLUSTER = "cluster"
1624
QR_INSTANCE = "instance"
1625
QR_NODE = "node"
1626
QR_LOCK = "lock"
1627
QR_GROUP = "group"
1628
QR_OS = "os"
1629
QR_JOB = "job"
1630
QR_EXPORT = "export"
1631
QR_NETWORK = "network"
1632
QR_EXTSTORAGE = "extstorage"
1633

    
1634
#: List of resources which can be queried using L{opcodes.OpQuery}
1635
QR_VIA_OP = compat.UniqueFrozenset([
1636
  QR_CLUSTER,
1637
  QR_INSTANCE,
1638
  QR_NODE,
1639
  QR_GROUP,
1640
  QR_OS,
1641
  QR_EXPORT,
1642
  QR_NETWORK,
1643
  QR_EXTSTORAGE,
1644
  ])
1645

    
1646
#: List of resources which can be queried using Local UniX Interface
1647
QR_VIA_LUXI = QR_VIA_OP.union([
1648
  QR_LOCK,
1649
  QR_JOB,
1650
  ])
1651

    
1652
#: List of resources which can be queried using RAPI
1653
QR_VIA_RAPI = QR_VIA_LUXI
1654

    
1655
# Query field types
1656
QFT_UNKNOWN = "unknown"
1657
QFT_TEXT = "text"
1658
QFT_BOOL = "bool"
1659
QFT_NUMBER = "number"
1660
QFT_UNIT = "unit"
1661
QFT_TIMESTAMP = "timestamp"
1662
QFT_OTHER = "other"
1663

    
1664
#: All query field types
1665
QFT_ALL = compat.UniqueFrozenset([
1666
  QFT_UNKNOWN,
1667
  QFT_TEXT,
1668
  QFT_BOOL,
1669
  QFT_NUMBER,
1670
  QFT_UNIT,
1671
  QFT_TIMESTAMP,
1672
  QFT_OTHER,
1673
  ])
1674

    
1675
# Query result field status (don't change or reuse values as they're used by
1676
# clients)
1677
#: Normal field status
1678
RS_NORMAL = 0
1679
#: Unknown field
1680
RS_UNKNOWN = 1
1681
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1682
RS_NODATA = 2
1683
#: Value unavailable/unsupported for item; if this field is supported
1684
#: but we cannot get the data for the moment, RS_NODATA or
1685
#: RS_OFFLINE should be used
1686
RS_UNAVAIL = 3
1687
#: Resource marked offline
1688
RS_OFFLINE = 4
1689

    
1690
RS_ALL = compat.UniqueFrozenset([
1691
  RS_NORMAL,
1692
  RS_UNKNOWN,
1693
  RS_NODATA,
1694
  RS_UNAVAIL,
1695
  RS_OFFLINE,
1696
  ])
1697

    
1698
#: Dictionary with special field cases and their verbose/terse formatting
1699
RSS_DESCRIPTION = {
1700
  RS_UNKNOWN: ("(unknown)", "??"),
1701
  RS_NODATA: ("(nodata)", "?"),
1702
  RS_OFFLINE: ("(offline)", "*"),
1703
  RS_UNAVAIL: ("(unavail)", "-"),
1704
  }
1705

    
1706
# max dynamic devices
1707
MAX_NICS = 8
1708
MAX_DISKS = 16
1709

    
1710
# SSCONF file prefix
1711
SSCONF_FILEPREFIX = "ssconf_"
1712
# SSCONF keys
1713
SS_CLUSTER_NAME = "cluster_name"
1714
SS_CLUSTER_TAGS = "cluster_tags"
1715
SS_FILE_STORAGE_DIR = "file_storage_dir"
1716
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
1717
SS_MASTER_CANDIDATES = "master_candidates"
1718
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
1719
SS_MASTER_IP = "master_ip"
1720
SS_MASTER_NETDEV = "master_netdev"
1721
SS_MASTER_NETMASK = "master_netmask"
1722
SS_MASTER_NODE = "master_node"
1723
SS_NODE_LIST = "node_list"
1724
SS_NODE_PRIMARY_IPS = "node_primary_ips"
1725
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
1726
SS_OFFLINE_NODES = "offline_nodes"
1727
SS_ONLINE_NODES = "online_nodes"
1728
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
1729
SS_INSTANCE_LIST = "instance_list"
1730
SS_RELEASE_VERSION = "release_version"
1731
SS_HYPERVISOR_LIST = "hypervisor_list"
1732
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
1733
SS_UID_POOL = "uid_pool"
1734
SS_NODEGROUPS = "nodegroups"
1735
SS_NETWORKS = "networks"
1736

    
1737
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1738
SS_HVPARAMS_PREF = "hvparams_"
1739

    
1740
# Hvparams keys:
1741
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1742
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1743
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1744
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1745
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1746
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1747

    
1748
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1749
  SS_HVPARAMS_XEN_PVM,
1750
  SS_HVPARAMS_XEN_FAKE,
1751
  SS_HVPARAMS_XEN_HVM,
1752
  SS_HVPARAMS_XEN_KVM,
1753
  SS_HVPARAMS_XEN_CHROOT,
1754
  SS_HVPARAMS_XEN_LXC,
1755
  ])
1756

    
1757
SS_FILE_PERMS = 0444
1758

    
1759
# cluster wide default parameters
1760
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1761

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

    
1880
HVC_GLOBALS = compat.UniqueFrozenset([
1881
  HV_MIGRATION_PORT,
1882
  HV_MIGRATION_BANDWIDTH,
1883
  HV_MIGRATION_MODE,
1884
  HV_XEN_CMD,
1885
  ])
1886

    
1887
BEC_DEFAULTS = {
1888
  BE_MINMEM: 128,
1889
  BE_MAXMEM: 128,
1890
  BE_VCPUS: 1,
1891
  BE_AUTO_BALANCE: True,
1892
  BE_ALWAYS_FAILOVER: False,
1893
  BE_SPINDLE_USE: 1,
1894
  }
1895

    
1896
NDC_DEFAULTS = {
1897
  ND_OOB_PROGRAM: "",
1898
  ND_SPINDLE_COUNT: 1,
1899
  ND_EXCLUSIVE_STORAGE: False,
1900
  ND_OVS: False,
1901
  ND_OVS_NAME: DEFAULT_OVS,
1902
  ND_OVS_LINK: ""
1903
  }
1904

    
1905
NDC_GLOBALS = compat.UniqueFrozenset([
1906
  ND_EXCLUSIVE_STORAGE,
1907
  ])
1908

    
1909
DISK_LD_DEFAULTS = {
1910
  DT_DRBD8: {
1911
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1912
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1913
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1914
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1915
    LDP_DISK_CUSTOM: "",
1916
    LDP_NET_CUSTOM: "",
1917
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1918
    LDP_DYNAMIC_RESYNC: False,
1919

    
1920
    # The default values for the DRBD dynamic resync speed algorithm
1921
    # are taken from the drbsetup 8.3.11 man page, except for
1922
    # c-plan-ahead (that we don't need to set to 0, because we have a
1923
    # separate option to enable it) and for c-max-rate, that we cap to
1924
    # the default value for the static resync rate.
1925
    LDP_PLAN_AHEAD: 20, # ds
1926
    LDP_FILL_TARGET: 0, # sectors
1927
    LDP_DELAY_TARGET: 1, # ds
1928
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
1929
    LDP_MIN_RATE: 4 * 1024, # KiB/s
1930
    },
1931
  DT_PLAIN: {
1932
    LDP_STRIPES: _constants.LVM_STRIPECOUNT
1933
    },
1934
  DT_FILE: {},
1935
  DT_SHARED_FILE: {},
1936
  DT_BLOCK: {},
1937
  DT_RBD: {
1938
    LDP_POOL: "rbd",
1939
    LDP_ACCESS: DISK_KERNELSPACE,
1940
    },
1941
  DT_EXT: {},
1942
  }
1943

    
1944
# readability shortcuts
1945
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1946
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1947

    
1948
DISK_DT_DEFAULTS = {
1949
  DT_PLAIN: {
1950
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1951
    },
1952
  DT_DRBD8: {
1953
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1954
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1955
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1956
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1957
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1958
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1959
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1960
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1961
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1962
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1963
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1964
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1965
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1966
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1967
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1968
    },
1969
  DT_DISKLESS: {},
1970
  DT_FILE: {},
1971
  DT_SHARED_FILE: {},
1972
  DT_BLOCK: {},
1973
  DT_RBD: {
1974
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
1975
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
1976
    },
1977
  DT_EXT: {},
1978
  }
1979

    
1980
# we don't want to export the shortcuts
1981
del _LV_DEFAULTS, _DRBD_DEFAULTS
1982

    
1983
NICC_DEFAULTS = {
1984
  NIC_MODE: NIC_MODE_BRIDGED,
1985
  NIC_LINK: DEFAULT_BRIDGE,
1986
  NIC_VLAN: VALUE_HS_NOTHING,
1987
  }
1988

    
1989
# All of the following values are quite arbitrarily - there are no
1990
# "good" defaults, these must be customised per-site
1991
ISPECS_MINMAX_DEFAULTS = {
1992
  ISPECS_MIN: {
1993
    ISPEC_MEM_SIZE: 128,
1994
    ISPEC_CPU_COUNT: 1,
1995
    ISPEC_DISK_COUNT: 1,
1996
    ISPEC_DISK_SIZE: 1024,
1997
    ISPEC_NIC_COUNT: 1,
1998
    ISPEC_SPINDLE_USE: 1,
1999
    },
2000
  ISPECS_MAX: {
2001
    ISPEC_MEM_SIZE: 32768,
2002
    ISPEC_CPU_COUNT: 8,
2003
    ISPEC_DISK_COUNT: MAX_DISKS,
2004
    ISPEC_DISK_SIZE: 1024 * 1024,
2005
    ISPEC_NIC_COUNT: MAX_NICS,
2006
    ISPEC_SPINDLE_USE: 12,
2007
    },
2008
  }
2009
IPOLICY_DEFAULTS = {
2010
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
2011
  ISPECS_STD: {
2012
    ISPEC_MEM_SIZE: 128,
2013
    ISPEC_CPU_COUNT: 1,
2014
    ISPEC_DISK_COUNT: 1,
2015
    ISPEC_DISK_SIZE: 1024,
2016
    ISPEC_NIC_COUNT: 1,
2017
    ISPEC_SPINDLE_USE: 1,
2018
    },
2019
  IPOLICY_DTS: list(DISK_TEMPLATES),
2020
  IPOLICY_VCPU_RATIO: 4.0,
2021
  IPOLICY_SPINDLE_RATIO: 32.0,
2022
  }
2023

    
2024
MASTER_POOL_SIZE_DEFAULT = 10
2025

    
2026
# Exclusive storage:
2027
# Error margin used to compare physical disks
2028
PART_MARGIN = .01
2029
# Space reserved when creating instance disks
2030
PART_RESERVED = .02
2031

    
2032
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
2033

    
2034
CONFD_REQ_PING = _constants.CONFD_REQ_PING
2035
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
2036
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
2037
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
2038
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
2039
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
2040
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
2041
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
2042
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
2043
CONFD_REQS = _constants.CONFD_REQS
2044

    
2045
# Confd request query fields. These are used to narrow down queries.
2046
# These must be strings rather than integers, because json-encoding
2047
# converts them to strings anyway, as they're used as dict-keys.
2048
CONFD_REQQ_LINK = _constants.CONFD_REQQ_LINK
2049
CONFD_REQQ_IP = _constants.CONFD_REQQ_IP
2050
CONFD_REQQ_IPLIST = _constants.CONFD_REQQ_IPLIST
2051
CONFD_REQQ_FIELDS = _constants.CONFD_REQQ_FIELDS
2052

    
2053
# FIXME: perhaps update code that uses these constants to deal with
2054
# integers instead of strings
2055
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
2056
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
2057
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
2058

    
2059
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
2060
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
2061
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
2062
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
2063

    
2064
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
2065
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
2066
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
2067
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
2068
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
2069

    
2070
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
2071
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
2072
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
2073

    
2074
# Each request is "salted" by the current timestamp.
2075
# This constants decides how many seconds of skew to accept.
2076
# TODO: make this a default and allow the value to be more configurable
2077
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
2078

    
2079
# When we haven't reloaded the config for more than this amount of
2080
# seconds, we force a test to see if inotify is betraying us. Using a
2081
# prime number to ensure we get less chance of 'same wakeup' with
2082
# other processes.
2083
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
2084

    
2085
# If we receive more than one update in this amount of microseconds,
2086
# we move to polling every RATELIMIT seconds, rather than relying on
2087
# inotify, to be able to serve more requests.
2088
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
2089

    
2090
# Magic number prepended to all confd queries.
2091
# This allows us to distinguish different types of confd protocols and handle
2092
# them. For example by changing this we can move the whole payload to be
2093
# compressed, or move away from json.
2094
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
2095

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

    
2101
# Timeout in seconds to expire pending query request in the confd client
2102
# library. We don't actually expect any answer more than 10 seconds after we
2103
# sent a request.
2104
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
2105

    
2106
# Maximum UDP datagram size.
2107
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
2108
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
2109
#   (assuming we can't use jumbo frames)
2110
# We just set this to 60K, which should be enough
2111
MAX_UDP_DATA_SIZE = 61440
2112

    
2113
# User-id pool minimum/maximum acceptable user-ids.
2114
UIDPOOL_UID_MIN = 0
2115
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2116

    
2117
# Name or path of the pgrep command
2118
PGREP = "pgrep"
2119

    
2120
# Name of the node group that gets created at cluster init or upgrade
2121
INITIAL_NODE_GROUP_NAME = "default"
2122

    
2123
# Possible values for NodeGroup.alloc_policy
2124
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2125
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2126
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2127
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2128

    
2129
# Temporary external/shared storage parameters
2130
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2131

    
2132
# qemu-img path, required for ovfconverter
2133
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2134

    
2135
# Whether htools was enabled at compilation time
2136
HTOOLS = _constants.HTOOLS
2137
# The hail iallocator
2138
IALLOC_HAIL = "hail"
2139

    
2140
# Fake opcodes for functions that have hooks attached to them via
2141
# backend.RunLocalHooks
2142
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2143
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2144

    
2145
# SSH key types
2146
SSHK_RSA = "rsa"
2147
SSHK_DSA = "dsa"
2148
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2149

    
2150
# SSH authorized key types
2151
SSHAK_RSA = "ssh-rsa"
2152
SSHAK_DSS = "ssh-dss"
2153
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2154

    
2155
# SSH setup
2156
SSHS_CLUSTER_NAME = "cluster_name"
2157
SSHS_SSH_HOST_KEY = "ssh_host_key"
2158
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2159
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2160

    
2161
#: Key files for SSH daemon
2162
SSH_DAEMON_KEYFILES = {
2163
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2164
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2165
  }
2166

    
2167
# Node daemon setup
2168
NDS_CLUSTER_NAME = "cluster_name"
2169
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2170
NDS_SSCONF = "ssconf"
2171
NDS_START_NODE_DAEMON = "start_node_daemon"
2172

    
2173
# Path generating random UUID
2174
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2175

    
2176
# Regex string for verifying a UUID
2177
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2178

    
2179
# Auto-repair tag prefixes
2180
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2181
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2182
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2183
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2184
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2185

    
2186
# Auto-repair levels
2187
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2188
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2189
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2190
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2191
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2192

    
2193
# Auto-repair results
2194
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2195
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2196
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2197
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2198

    
2199
# The version identifier for builtin data collectors
2200
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2201

    
2202
# The reason trail opcode parameter name
2203
OPCODE_REASON = _constants.OPCODE_REASON
2204

    
2205
# The source reasons for the execution of an OpCode
2206
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2207
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2208
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2209
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2210
OPCODE_REASON_SRC_USER = "gnt:user"
2211

    
2212
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2213
  OPCODE_REASON_SRC_CLIENT,
2214
  OPCODE_REASON_SRC_NODED,
2215
  OPCODE_REASON_SRC_OPCODE,
2216
  OPCODE_REASON_SRC_RLIB2,
2217
  OPCODE_REASON_SRC_USER,
2218
  ])
2219

    
2220
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2221

    
2222
# CPU load collector variables
2223
STAT_FILE = _constants.STAT_FILE
2224
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2225
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2226

    
2227
# Mond's variable for periodical data collection
2228
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2229

    
2230
# MonD's latest API version
2231
MOND_LATEST_API_VERSION = 1
2232

    
2233
# Timeouts for upgrades
2234

    
2235
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2236
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2237

    
2238
# Do not re-export imported modules
2239
del re, _vcsversion, _constants, socket, pathutils, compat
2240

    
2241

    
2242
ALLOCATABLE_KEY = "allocatable"
2243
FAILED_KEY = "failed"