Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 2355ac23

History | View | Annotate | Download (63.9 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
LUXI_EOM = _constants.LUXI_EOM
173
LUXI_VERSION = _constants.LUXI_VERSION
174
LUXI_OVERRIDE = _constants.LUXI_OVERRIDE
175
LUXI_OVERRIDE_MASTER = _constants.LUXI_OVERRIDE_MASTER
176
LUXI_OVERRIDE_QUERY = _constants.LUXI_OVERRIDE_QUERY
177
# one of "no", "yes", "only"
178
SYSLOG_USAGE = _constants.SYSLOG_USAGE
179
SYSLOG_NO = _constants.SYSLOG_NO
180
SYSLOG_YES = _constants.SYSLOG_YES
181
SYSLOG_ONLY = _constants.SYSLOG_ONLY
182
SYSLOG_SOCKET = _constants.SYSLOG_SOCKET
183

    
184
EXPORT_CONF_FILE = "config.ini"
185

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

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

    
204
KVM_PATH = _constants.KVM_PATH
205
KVM_KERNEL = _constants.KVM_KERNEL
206
SOCAT_PATH = _constants.SOCAT_PATH
207
SOCAT_USE_ESCAPE = _constants.SOCAT_USE_ESCAPE
208
SOCAT_USE_COMPRESS = _constants.SOCAT_USE_COMPRESS
209
SOCAT_ESCAPE_CODE = _constants.SOCAT_ESCAPE_CODE
210

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

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

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

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

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

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

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

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

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

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

    
253
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
254

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

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

    
267
IE_CUSTOM_SIZE = "fd"
268

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

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

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

    
287

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

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

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

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

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

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

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

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

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

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

    
353
LDS_OKAY = _constants.LDS_OKAY
354
LDS_UNKNOWN = _constants.LDS_UNKNOWN
355
LDS_FAULTY = _constants.LDS_FAULTY
356
LDS_NAMES = _constants.LDS_NAMES
357
VALID_STORAGE_OPERATIONS = {
358
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
359
  }
360

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

    
370
# disk template types
371
DT_BLOCK = _constants.DT_BLOCK
372
DT_DISKLESS = _constants.DT_DISKLESS
373
DT_DRBD8 = _constants.DT_DRBD8
374
DT_EXT = _constants.DT_EXT
375
DT_FILE = _constants.DT_FILE
376
DT_PLAIN = _constants.DT_PLAIN
377
DT_RBD = _constants.DT_RBD
378
DT_SHARED_FILE = _constants.DT_SHARED_FILE
379
DISK_TEMPLATE_PREFERENCE = _constants.DISK_TEMPLATE_PREFERENCE
380
DISK_TEMPLATES = _constants.DISK_TEMPLATES
381
DEFAULT_ENABLED_DISK_TEMPLATES = _constants.DEFAULT_ENABLED_DISK_TEMPLATES
382

    
383
# mapping of disk templates to storage types
384
MAP_DISK_TEMPLATE_STORAGE_TYPE = {
385
  DT_BLOCK: ST_BLOCK,
386
  DT_DISKLESS: ST_DISKLESS,
387
  DT_DRBD8: ST_LVM_VG,
388
  DT_EXT: ST_EXT,
389
  DT_FILE: ST_FILE,
390
  DT_PLAIN: ST_LVM_VG,
391
  DT_RBD: ST_RADOS,
392
  DT_SHARED_FILE: ST_FILE,
393
  }
394

    
395
# the set of network-mirrored disk templates
396
DTS_INT_MIRROR = compat.UniqueFrozenset([DT_DRBD8])
397

    
398
# the set of externally-mirrored disk templates (e.g. SAN, NAS)
399
DTS_EXT_MIRROR = compat.UniqueFrozenset([
400
  DT_DISKLESS, # 'trivially' externally mirrored
401
  DT_SHARED_FILE,
402
  DT_BLOCK,
403
  DT_RBD,
404
  DT_EXT,
405
  ])
406

    
407
# the set of non-lvm-based disk templates
408
DTS_NOT_LVM = compat.UniqueFrozenset([
409
  DT_DISKLESS,
410
  DT_FILE,
411
  DT_SHARED_FILE,
412
  DT_BLOCK,
413
  DT_RBD,
414
  DT_EXT,
415
  ])
416

    
417
# the set of disk templates which can be grown
418
DTS_GROWABLE = compat.UniqueFrozenset([
419
  DT_PLAIN,
420
  DT_DRBD8,
421
  DT_FILE,
422
  DT_SHARED_FILE,
423
  DT_RBD,
424
  DT_EXT,
425
  ])
426

    
427
# the set of disk templates that allow adoption
428
DTS_MAY_ADOPT = compat.UniqueFrozenset([
429
  DT_PLAIN,
430
  DT_BLOCK,
431
  ])
432

    
433
# the set of disk templates that *must* use adoption
434
DTS_MUST_ADOPT = compat.UniqueFrozenset([DT_BLOCK])
435

    
436
# the set of disk templates that allow migrations
437
DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR)
438

    
439
# the set of file based disk templates
440
DTS_FILEBASED = compat.UniqueFrozenset([
441
  DT_FILE,
442
  DT_SHARED_FILE,
443
  ])
444

    
445
# the set of disk templates that can be moved by copying
446
# Note: a requirement is that they're not accessed externally or shared between
447
# nodes; in particular, sharedfile is not suitable.
448
DTS_COPYABLE = compat.UniqueFrozenset([
449
  DT_FILE,
450
  DT_PLAIN,
451
  ])
452

    
453
# the set of disk templates that are supported by exclusive_storage
454
DTS_EXCL_STORAGE = compat.UniqueFrozenset([DT_PLAIN])
455

    
456
# templates for which we don't perform checks on free space
457
DTS_NO_FREE_SPACE_CHECK = compat.UniqueFrozenset([
458
  DT_FILE,
459
  DT_SHARED_FILE,
460
  DT_RBD,
461
  DT_EXT,
462
  ])
463

    
464
DTS_BLOCK = compat.UniqueFrozenset([
465
  DT_PLAIN,
466
  DT_DRBD8,
467
  DT_BLOCK,
468
  DT_RBD,
469
  DT_EXT,
470
  ])
471

    
472
# drbd constants
473
DRBD_HMAC_ALG = "md5"
474
DRBD_DEFAULT_NET_PROTOCOL = "C"
475
DRBD_MIGRATION_NET_PROTOCOL = "C"
476
DRBD_STATUS_FILE = "/proc/drbd"
477

    
478
#: Size of DRBD meta block device
479
DRBD_META_SIZE = 128
480

    
481
# drbd barrier types
482
DRBD_B_NONE = "n"
483
DRBD_B_DISK_BARRIERS = "b"
484
DRBD_B_DISK_DRAIN = "d"
485
DRBD_B_DISK_FLUSH = "f"
486

    
487
# Valid barrier combinations: "n" or any non-null subset of "bfd"
488
DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([
489
  frozenset([DRBD_B_NONE]),
490
  frozenset([DRBD_B_DISK_BARRIERS]),
491
  frozenset([DRBD_B_DISK_DRAIN]),
492
  frozenset([DRBD_B_DISK_FLUSH]),
493
  frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]),
494
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]),
495
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]),
496
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]),
497
  ])
498

    
499
# rbd tool command
500
RBD_CMD = "rbd"
501

    
502
FD_BLKTAP = _constants.FD_BLKTAP
503
FD_LOOP = _constants.FD_LOOP
504
FILE_DRIVER = _constants.FILE_DRIVER
505

    
506
LDS_DRBD = _constants.LDS_DRBD
507

    
508
# disk access mode
509
DISK_RDONLY = _constants.DISK_RDONLY
510
DISK_RDWR = _constants.DISK_RDWR
511
DISK_ACCESS_SET = _constants.DISK_ACCESS_SET
512
DISK_USERSPACE = _constants.DISK_USERSPACE
513
DISK_KERNELSPACE = _constants.DISK_KERNELSPACE
514
DISK_VALID_ACCESS_MODES = _constants.DISK_VALID_ACCESS_MODES
515

    
516
REPLACE_DISK_PRI = _constants.REPLACE_DISK_PRI
517
REPLACE_DISK_SEC = _constants.REPLACE_DISK_SEC
518
REPLACE_DISK_CHG = _constants.REPLACE_DISK_CHG
519
REPLACE_DISK_AUTO = _constants.REPLACE_DISK_AUTO
520
REPLACE_MODES = _constants.REPLACE_MODES
521

    
522
# Instance export mode
523
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
524
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
525
EXPORT_MODES = _constants.EXPORT_MODES
526

    
527
# instance creation modes
528
INSTANCE_CREATE = _constants.INSTANCE_CREATE
529
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
530
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
531
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
532

    
533
# Remote import/export handshake message and version
534
RIE_VERSION = 0
535
RIE_HANDSHAKE = "Hi, I'm Ganeti"
536

    
537
# Remote import/export certificate validity in seconds
538
RIE_CERT_VALIDITY = 24 * 60 * 60
539

    
540
# Overall timeout for establishing connection
541
RIE_CONNECT_TIMEOUT = 180
542

    
543
# Export only: how long to wait per connection attempt (seconds)
544
RIE_CONNECT_ATTEMPT_TIMEOUT = 20
545

    
546
# Export only: number of attempts to connect
547
RIE_CONNECT_RETRIES = 10
548

    
549
#: Give child process up to 5 seconds to exit after sending a signal
550
CHILD_LINGER_TIMEOUT = 5.0
551

    
552

    
553
# import/export config options
554
INISECT_EXP = "export"
555
INISECT_INS = "instance"
556
INISECT_HYP = "hypervisor"
557
INISECT_BEP = "backend"
558
INISECT_OSP = "os"
559

    
560
# dynamic device modification
561
DDM_ADD = _constants.DDM_ADD
562
DDM_MODIFY = _constants.DDM_MODIFY
563
DDM_REMOVE = _constants.DDM_REMOVE
564
DDMS_VALUES = _constants.DDMS_VALUES
565
DDMS_VALUES_WITH_MODIFY = _constants.DDMS_VALUES_WITH_MODIFY
566
# TODO: DDM_SWAP, DDM_MOVE?
567

    
568
# common exit codes
569
EXIT_SUCCESS = _constants.EXIT_SUCCESS
570
EXIT_FAILURE = _constants.EXIT_FAILURE
571
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
572
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
573
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
574
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
575

    
576
#: Exit code for query operations with unknown fields
577
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
578

    
579
# tags
580
TAG_CLUSTER = _constants.TAG_CLUSTER
581
TAG_NODEGROUP = _constants.TAG_NODEGROUP
582
TAG_NODE = _constants.TAG_NODE
583
TAG_INSTANCE = _constants.TAG_INSTANCE
584
TAG_NETWORK = _constants.TAG_NETWORK
585
VALID_TAG_TYPES = _constants.VALID_TAG_TYPES
586

    
587
MAX_TAG_LEN = _constants.MAX_TAG_LEN
588
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
589

    
590
# others
591
DEFAULT_BRIDGE = "xen-br0"
592
DEFAULT_OVS = "switch1"
593
CLASSIC_DRBD_SYNC_SPEED = 60 * 1024  # 60 MiB, expressed in KiB
594
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
595
IP4_ADDRESS_ANY = "0.0.0.0"
596
IP6_ADDRESS_LOCALHOST = "::1"
597
IP6_ADDRESS_ANY = "::"
598
IP4_VERSION = 4
599
IP6_VERSION = 6
600
VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
601
# for export to htools
602
IP4_FAMILY = socket.AF_INET
603
IP6_FAMILY = socket.AF_INET6
604

    
605
TCP_PING_TIMEOUT = 10
606
DEFAULT_VG = "xenvg"
607
DEFAULT_DRBD_HELPER = "/bin/true"
608
MIN_VG_SIZE = 20480
609
DEFAULT_MAC_PREFIX = "aa:00:00"
610
# default maximum instance wait time, in seconds.
611
DEFAULT_SHUTDOWN_TIMEOUT = 120
612
NODE_MAX_CLOCK_SKEW = _constants.NODE_MAX_CLOCK_SKEW
613
# Time for an intra-cluster disk transfer to wait for a connection
614
DISK_TRANSFER_CONNECT_TIMEOUT = 60
615
# Disk index separator
616
DISK_SEPARATOR = _constants.DISK_SEPARATOR
617
IP_COMMAND_PATH = _constants.IP_COMMAND_PATH
618

    
619
RPC_TMO_URGENT = _constants.RPC_TMO_URGENT
620
RPC_TMO_FAST = _constants.RPC_TMO_FAST
621
RPC_TMO_NORMAL = _constants.RPC_TMO_NORMAL
622
RPC_TMO_SLOW = _constants.RPC_TMO_SLOW
623
RPC_TMO_4HRS = _constants.RPC_TMO_4HRS
624
RPC_TMO_1DAY = _constants.RPC_TMO_1DAY
625
RPC_CONNECT_TIMEOUT = _constants.RPC_CONNECT_TIMEOUT
626

    
627
#: Key for job IDs in opcode result
628
JOB_IDS_KEY = "jobs"
629

    
630
# runparts results
631
(RUNPARTS_SKIP,
632
 RUNPARTS_RUN,
633
 RUNPARTS_ERR) = range(3)
634

    
635
RUNPARTS_STATUS = compat.UniqueFrozenset([
636
  RUNPARTS_SKIP,
637
  RUNPARTS_RUN,
638
  RUNPARTS_ERR,
639
  ])
640

    
641
# RPC constants
642
(RPC_ENCODING_NONE,
643
 RPC_ENCODING_ZLIB_BASE64) = range(2)
644

    
645
# os related constants
646
OS_SCRIPT_CREATE = "create"
647
OS_SCRIPT_IMPORT = "import"
648
OS_SCRIPT_EXPORT = "export"
649
OS_SCRIPT_RENAME = "rename"
650
OS_SCRIPT_VERIFY = "verify"
651
OS_SCRIPTS = compat.UniqueFrozenset([
652
  OS_SCRIPT_CREATE,
653
  OS_SCRIPT_IMPORT,
654
  OS_SCRIPT_EXPORT,
655
  OS_SCRIPT_RENAME,
656
  OS_SCRIPT_VERIFY,
657
  ])
658

    
659
OS_API_FILE = "ganeti_api_version"
660
OS_VARIANTS_FILE = "variants.list"
661
OS_PARAMETERS_FILE = "parameters.list"
662

    
663
OS_VALIDATE_PARAMETERS = "parameters"
664
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
665

    
666
# External Storage (ES) related constants
667
ES_ACTION_CREATE = "create"
668
ES_ACTION_REMOVE = "remove"
669
ES_ACTION_GROW = "grow"
670
ES_ACTION_ATTACH = "attach"
671
ES_ACTION_DETACH = "detach"
672
ES_ACTION_SETINFO = "setinfo"
673
ES_ACTION_VERIFY = "verify"
674

    
675
ES_SCRIPT_CREATE = ES_ACTION_CREATE
676
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
677
ES_SCRIPT_GROW = ES_ACTION_GROW
678
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
679
ES_SCRIPT_DETACH = ES_ACTION_DETACH
680
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
681
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
682
ES_SCRIPTS = frozenset([
683
  ES_SCRIPT_CREATE,
684
  ES_SCRIPT_REMOVE,
685
  ES_SCRIPT_GROW,
686
  ES_SCRIPT_ATTACH,
687
  ES_SCRIPT_DETACH,
688
  ES_SCRIPT_SETINFO,
689
  ES_SCRIPT_VERIFY
690
  ])
691

    
692
ES_PARAMETERS_FILE = "parameters.list"
693

    
694
# reboot types
695
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
696
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
697
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
698
REBOOT_TYPES = _constants.REBOOT_TYPES
699

    
700
# instance reboot behaviors
701
INSTANCE_REBOOT_ALLOWED = "reboot"
702
INSTANCE_REBOOT_EXIT = "exit"
703

    
704
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
705
  INSTANCE_REBOOT_ALLOWED,
706
  INSTANCE_REBOOT_EXIT,
707
  ])
708

    
709
VTYPE_STRING = _constants.VTYPE_STRING
710
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
711
VTYPE_BOOL = _constants.VTYPE_BOOL
712
VTYPE_SIZE = _constants.VTYPE_SIZE
713
VTYPE_INT = _constants.VTYPE_INT
714
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
715

    
716
# Constant representing that the user does not specify any IP version
717
IFACE_NO_IP_VERSION_SPECIFIED = 0
718

    
719
VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
720
  75,
721
  110,
722
  300,
723
  600,
724
  1200,
725
  1800,
726
  2400,
727
  4800,
728
  9600,
729
  14400,
730
  19200,
731
  28800,
732
  38400,
733
  57600,
734
  115200,
735
  230400,
736
  345600,
737
  460800,
738
  ])
739

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

    
814

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

    
890
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
891

    
892
HVS_PARAMETER_TITLES = {
893
  HV_ACPI: "ACPI",
894
  HV_BOOT_ORDER: "Boot_order",
895
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
896
  HV_DISK_TYPE: "Disk_type",
897
  HV_INITRD_PATH: "Initrd_path",
898
  HV_KERNEL_PATH: "Kernel_path",
899
  HV_NIC_TYPE: "NIC_type",
900
  HV_PAE: "PAE",
901
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
902
  HV_PASSTHROUGH: "pci_pass",
903
  HV_CPU_TYPE: "cpu_type",
904
  }
905

    
906
# Migration statuses
907
HV_MIGRATION_COMPLETED = "completed"
908
HV_MIGRATION_ACTIVE = "active"
909
HV_MIGRATION_FAILED = "failed"
910
HV_MIGRATION_CANCELLED = "cancelled"
911

    
912
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
913
  HV_MIGRATION_COMPLETED,
914
  HV_MIGRATION_ACTIVE,
915
  HV_MIGRATION_FAILED,
916
  HV_MIGRATION_CANCELLED,
917
  ])
918

    
919
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
920
  HV_MIGRATION_FAILED,
921
  HV_MIGRATION_CANCELLED,
922
  ])
923

    
924
# KVM-specific statuses
925
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
926

    
927
# Node info keys
928
HV_NODEINFO_KEY_VERSION = "hv_version"
929

    
930
# Hypervisor state
931
HVST_MEMORY_TOTAL = "mem_total"
932
HVST_MEMORY_NODE = "mem_node"
933
HVST_MEMORY_HV = "mem_hv"
934
HVST_CPU_TOTAL = "cpu_total"
935
HVST_CPU_NODE = "cpu_node"
936

    
937
HVST_DEFAULTS = {
938
  HVST_MEMORY_TOTAL: 0,
939
  HVST_MEMORY_NODE: 0,
940
  HVST_MEMORY_HV: 0,
941
  HVST_CPU_TOTAL: 1,
942
  HVST_CPU_NODE: 1,
943
  }
944

    
945
HVSTS_PARAMETER_TYPES = {
946
  HVST_MEMORY_TOTAL: VTYPE_INT,
947
  HVST_MEMORY_NODE: VTYPE_INT,
948
  HVST_MEMORY_HV: VTYPE_INT,
949
  HVST_CPU_TOTAL: VTYPE_INT,
950
  HVST_CPU_NODE: VTYPE_INT,
951
  }
952

    
953
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
954

    
955
# Disk state
956
DS_DISK_TOTAL = "disk_total"
957
DS_DISK_RESERVED = "disk_reserved"
958
DS_DISK_OVERHEAD = "disk_overhead"
959

    
960
DS_DEFAULTS = {
961
  DS_DISK_TOTAL: 0,
962
  DS_DISK_RESERVED: 0,
963
  DS_DISK_OVERHEAD: 0,
964
  }
965

    
966
ISPEC_MEM_SIZE = _constants.ISPEC_MEM_SIZE
967
ISPEC_CPU_COUNT = _constants.ISPEC_CPU_COUNT
968
ISPEC_DISK_COUNT = _constants.ISPEC_DISK_COUNT
969
ISPEC_DISK_SIZE = _constants.ISPEC_DISK_SIZE
970
ISPEC_NIC_COUNT = _constants.ISPEC_NIC_COUNT
971
ISPEC_SPINDLE_USE = _constants.ISPEC_SPINDLE_USE
972
ISPECS_PARAMETER_TYPES = _constants.ISPECS_PARAMETER_TYPES
973
ISPECS_PARAMETERS = _constants.ISPECS_PARAMETERS
974

    
975
ISPECS_MINMAX = _constants.ISPECS_MINMAX
976
ISPECS_MIN = _constants.ISPECS_MIN
977
ISPECS_MAX = _constants.ISPECS_MAX
978
ISPECS_STD = _constants.ISPECS_STD
979
IPOLICY_DTS = _constants.IPOLICY_DTS
980
IPOLICY_VCPU_RATIO = _constants.IPOLICY_VCPU_RATIO
981
IPOLICY_SPINDLE_RATIO = _constants.IPOLICY_SPINDLE_RATIO
982
ISPECS_MINMAX_KEYS = _constants.ISPECS_MINMAX_KEYS
983
IPOLICY_PARAMETERS = _constants.IPOLICY_PARAMETERS
984
IPOLICY_ALL_KEYS = _constants.IPOLICY_ALL_KEYS
985

    
986
ND_OOB_PROGRAM = _constants.ND_OOB_PROGRAM
987
ND_SPINDLE_COUNT = _constants.ND_SPINDLE_COUNT
988
ND_EXCLUSIVE_STORAGE = _constants.ND_EXCLUSIVE_STORAGE
989
ND_OVS = _constants.ND_OVS
990
ND_OVS_NAME = _constants.ND_OVS_NAME
991
ND_OVS_LINK = _constants.ND_OVS_LINK
992

    
993
NDS_PARAMETER_TYPES = _constants.NDS_PARAMETER_TYPES
994
NDS_PARAMETERS = _constants.NDS_PARAMETERS
995
NDS_PARAMETER_TITLES = _constants.NDS_PARAMETER_TITLES
996
DSS_PARAMETER_TYPES = {
997
  DS_DISK_TOTAL: VTYPE_INT,
998
  DS_DISK_RESERVED: VTYPE_INT,
999
  DS_DISK_OVERHEAD: VTYPE_INT,
1000
  }
1001

    
1002
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
1003
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
1004

    
1005
# Backend parameter names
1006
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
1007
BE_MAXMEM = "maxmem"
1008
BE_MINMEM = "minmem"
1009
BE_VCPUS = "vcpus"
1010
BE_AUTO_BALANCE = "auto_balance"
1011
BE_ALWAYS_FAILOVER = "always_failover"
1012
BE_SPINDLE_USE = "spindle_use"
1013

    
1014
BES_PARAMETER_TYPES = {
1015
  BE_MAXMEM: VTYPE_SIZE,
1016
  BE_MINMEM: VTYPE_SIZE,
1017
  BE_VCPUS: VTYPE_INT,
1018
  BE_AUTO_BALANCE: VTYPE_BOOL,
1019
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
1020
  BE_SPINDLE_USE: VTYPE_INT,
1021
  }
1022

    
1023
BES_PARAMETER_TITLES = {
1024
  BE_AUTO_BALANCE: "Auto_balance",
1025
  BE_MAXMEM: "ConfigMaxMem",
1026
  BE_MINMEM: "ConfigMinMem",
1027
  BE_VCPUS: "ConfigVCPUs",
1028
  }
1029

    
1030
BES_PARAMETER_COMPAT = {
1031
  BE_MEMORY: VTYPE_SIZE,
1032
  }
1033
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
1034

    
1035
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
1036

    
1037
# Logical Disks parameters
1038
LDP_RESYNC_RATE = "resync-rate"
1039
LDP_STRIPES = "stripes"
1040
LDP_BARRIERS = "disabled-barriers"
1041
LDP_NO_META_FLUSH = "disable-meta-flush"
1042
LDP_DEFAULT_METAVG = "default-metavg"
1043
LDP_DISK_CUSTOM = "disk-custom"
1044
LDP_NET_CUSTOM = "net-custom"
1045
LDP_PROTOCOL = "protocol"
1046
LDP_DYNAMIC_RESYNC = "dynamic-resync"
1047
LDP_PLAN_AHEAD = "c-plan-ahead"
1048
LDP_FILL_TARGET = "c-fill-target"
1049
LDP_DELAY_TARGET = "c-delay-target"
1050
LDP_MAX_RATE = "c-max-rate"
1051
LDP_MIN_RATE = "c-min-rate"
1052
LDP_POOL = "pool"
1053
LDP_ACCESS = "access"
1054
DISK_LD_TYPES = {
1055
  LDP_RESYNC_RATE: VTYPE_INT,
1056
  LDP_STRIPES: VTYPE_INT,
1057
  LDP_BARRIERS: VTYPE_STRING,
1058
  LDP_NO_META_FLUSH: VTYPE_BOOL,
1059
  LDP_DEFAULT_METAVG: VTYPE_STRING,
1060
  LDP_DISK_CUSTOM: VTYPE_STRING,
1061
  LDP_NET_CUSTOM: VTYPE_STRING,
1062
  LDP_PROTOCOL: VTYPE_STRING,
1063
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
1064
  LDP_PLAN_AHEAD: VTYPE_INT,
1065
  LDP_FILL_TARGET: VTYPE_INT,
1066
  LDP_DELAY_TARGET: VTYPE_INT,
1067
  LDP_MAX_RATE: VTYPE_INT,
1068
  LDP_MIN_RATE: VTYPE_INT,
1069
  LDP_POOL: VTYPE_STRING,
1070
  LDP_ACCESS: VTYPE_STRING,
1071
  }
1072
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
1073

    
1074
# Disk template parameters (can be set/changed by the user via gnt-cluster and
1075
# gnt-group)
1076
DRBD_RESYNC_RATE = "resync-rate"
1077
DRBD_DATA_STRIPES = "data-stripes"
1078
DRBD_META_STRIPES = "meta-stripes"
1079
DRBD_DISK_BARRIERS = "disk-barriers"
1080
DRBD_META_BARRIERS = "meta-barriers"
1081
DRBD_DEFAULT_METAVG = "metavg"
1082
DRBD_DISK_CUSTOM = "disk-custom"
1083
DRBD_NET_CUSTOM = "net-custom"
1084
DRBD_PROTOCOL = "protocol"
1085
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
1086
DRBD_PLAN_AHEAD = "c-plan-ahead"
1087
DRBD_FILL_TARGET = "c-fill-target"
1088
DRBD_DELAY_TARGET = "c-delay-target"
1089
DRBD_MAX_RATE = "c-max-rate"
1090
DRBD_MIN_RATE = "c-min-rate"
1091
LV_STRIPES = "stripes"
1092
RBD_POOL = "pool"
1093
RBD_ACCESS = "access"
1094
DISK_DT_TYPES = {
1095
  DRBD_RESYNC_RATE: VTYPE_INT,
1096
  DRBD_DATA_STRIPES: VTYPE_INT,
1097
  DRBD_META_STRIPES: VTYPE_INT,
1098
  DRBD_DISK_BARRIERS: VTYPE_STRING,
1099
  DRBD_META_BARRIERS: VTYPE_BOOL,
1100
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
1101
  DRBD_DISK_CUSTOM: VTYPE_STRING,
1102
  DRBD_NET_CUSTOM: VTYPE_STRING,
1103
  DRBD_PROTOCOL: VTYPE_STRING,
1104
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
1105
  DRBD_PLAN_AHEAD: VTYPE_INT,
1106
  DRBD_FILL_TARGET: VTYPE_INT,
1107
  DRBD_DELAY_TARGET: VTYPE_INT,
1108
  DRBD_MAX_RATE: VTYPE_INT,
1109
  DRBD_MIN_RATE: VTYPE_INT,
1110
  LV_STRIPES: VTYPE_INT,
1111
  RBD_POOL: VTYPE_STRING,
1112
  RBD_ACCESS: VTYPE_STRING,
1113
  }
1114

    
1115
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1116

    
1117
# dynamic disk parameters
1118
DDP_LOCAL_IP = "local-ip"
1119
DDP_REMOTE_IP = "remote-ip"
1120
DDP_PORT = "port"
1121
DDP_LOCAL_MINOR = "local-minor"
1122
DDP_REMOTE_MINOR = "remote-minor"
1123

    
1124
# OOB supported commands
1125
OOB_POWER_ON = _constants.OOB_POWER_ON
1126
OOB_POWER_OFF = _constants.OOB_POWER_OFF
1127
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
1128
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
1129
OOB_HEALTH = _constants.OOB_HEALTH
1130
OOB_COMMANDS = _constants.OOB_COMMANDS
1131

    
1132
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1133

    
1134
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1135
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1136

    
1137
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1138
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1139
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1140
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1141
OOB_STATUSES = _constants.OOB_STATUSES
1142

    
1143
# Instance Parameters Profile
1144
PP_DEFAULT = "default"
1145

    
1146
# NIC_* constants are used inside the ganeti config
1147
NIC_MODE = _constants.NIC_MODE
1148
NIC_LINK = _constants.NIC_LINK
1149
NIC_VLAN = _constants.NIC_VLAN
1150

    
1151
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1152
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1153
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1154
NIC_IP_POOL = _constants.NIC_IP_POOL
1155
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1156

    
1157
RESERVE_ACTION = "reserve"
1158
RELEASE_ACTION = "release"
1159

    
1160
NICS_PARAMETER_TYPES = {
1161
  NIC_MODE: VTYPE_STRING,
1162
  NIC_LINK: VTYPE_STRING,
1163
  NIC_VLAN: VTYPE_MAYBE_STRING,
1164
  }
1165

    
1166
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1167

    
1168
# IDISK_* constants are used in opcodes, to create/change disks
1169
IDISK_SIZE = "size"
1170
IDISK_SPINDLES = "spindles"
1171
IDISK_MODE = "mode"
1172
IDISK_ADOPT = "adopt"
1173
IDISK_VG = "vg"
1174
IDISK_METAVG = "metavg"
1175
IDISK_PROVIDER = "provider"
1176
IDISK_NAME = "name"
1177
IDISK_PARAMS_TYPES = {
1178
  IDISK_SIZE: VTYPE_SIZE,
1179
  IDISK_SPINDLES: VTYPE_INT,
1180
  IDISK_MODE: VTYPE_STRING,
1181
  IDISK_ADOPT: VTYPE_STRING,
1182
  IDISK_VG: VTYPE_STRING,
1183
  IDISK_METAVG: VTYPE_STRING,
1184
  IDISK_PROVIDER: VTYPE_STRING,
1185
  IDISK_NAME: VTYPE_MAYBE_STRING,
1186
  }
1187
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1188

    
1189
# INIC_* constants are used in opcodes, to create/change nics
1190
INIC_MAC = "mac"
1191
INIC_IP = "ip"
1192
INIC_MODE = "mode"
1193
INIC_LINK = "link"
1194
INIC_NETWORK = "network"
1195
INIC_NAME = "name"
1196
INIC_VLAN = "vlan"
1197
INIC_BRIDGE = "bridge"
1198
INIC_PARAMS_TYPES = {
1199
  INIC_IP: VTYPE_MAYBE_STRING,
1200
  INIC_LINK: VTYPE_STRING,
1201
  INIC_MAC: VTYPE_STRING,
1202
  INIC_MODE: VTYPE_STRING,
1203
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1204
  INIC_NAME: VTYPE_MAYBE_STRING,
1205
  INIC_VLAN: VTYPE_MAYBE_STRING,
1206
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1207
  }
1208
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1209

    
1210
# Hypervisor constants
1211
HT_XEN_PVM = _constants.HT_XEN_PVM
1212
HT_FAKE = _constants.HT_FAKE
1213
HT_XEN_HVM = _constants.HT_XEN_HVM
1214
HT_KVM = _constants.HT_KVM
1215
HT_CHROOT = _constants.HT_CHROOT
1216
HT_LXC = _constants.HT_LXC
1217
HYPER_TYPES = _constants.HYPER_TYPES
1218
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1219

    
1220
VNC_BASE_PORT = 5900
1221
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1222

    
1223
# NIC types
1224
HT_NIC_RTL8139 = "rtl8139"
1225
HT_NIC_NE2K_PCI = "ne2k_pci"
1226
HT_NIC_NE2K_ISA = "ne2k_isa"
1227
HT_NIC_I82551 = "i82551"
1228
HT_NIC_I85557B = "i82557b"
1229
HT_NIC_I8259ER = "i82559er"
1230
HT_NIC_PCNET = "pcnet"
1231
HT_NIC_E1000 = "e1000"
1232
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1233

    
1234
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1235
  HT_NIC_RTL8139,
1236
  HT_NIC_NE2K_PCI,
1237
  HT_NIC_E1000,
1238
  HT_NIC_NE2K_ISA,
1239
  HT_NIC_PARAVIRTUAL,
1240
  ])
1241
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1242
  HT_NIC_RTL8139,
1243
  HT_NIC_NE2K_PCI,
1244
  HT_NIC_NE2K_ISA,
1245
  HT_NIC_I82551,
1246
  HT_NIC_I85557B,
1247
  HT_NIC_I8259ER,
1248
  HT_NIC_PCNET,
1249
  HT_NIC_E1000,
1250
  HT_NIC_PARAVIRTUAL,
1251
  ])
1252

    
1253
# Vif types
1254
# default vif type in xen-hvm
1255
HT_HVM_VIF_IOEMU = "ioemu"
1256
HT_HVM_VIF_VIF = "vif"
1257
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1258
  HT_HVM_VIF_IOEMU,
1259
  HT_HVM_VIF_VIF,
1260
  ])
1261

    
1262
# Disk types
1263
HT_DISK_IOEMU = "ioemu"
1264
HT_DISK_IDE = "ide"
1265
HT_DISK_SCSI = "scsi"
1266
HT_DISK_SD = "sd"
1267
HT_DISK_MTD = "mtd"
1268
HT_DISK_PFLASH = "pflash"
1269

    
1270
HT_CACHE_DEFAULT = "default"
1271
HT_CACHE_NONE = "none"
1272
HT_CACHE_WTHROUGH = "writethrough"
1273
HT_CACHE_WBACK = "writeback"
1274
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1275
  HT_CACHE_DEFAULT,
1276
  HT_CACHE_NONE,
1277
  HT_CACHE_WTHROUGH,
1278
  HT_CACHE_WBACK,
1279
  ])
1280

    
1281
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1282
  HT_DISK_PARAVIRTUAL,
1283
  HT_DISK_IOEMU,
1284
  ])
1285
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1286
  HT_DISK_PARAVIRTUAL,
1287
  HT_DISK_IDE,
1288
  HT_DISK_SCSI,
1289
  HT_DISK_SD,
1290
  HT_DISK_MTD,
1291
  HT_DISK_PFLASH,
1292
  ])
1293

    
1294
# Mouse types:
1295
HT_MOUSE_MOUSE = "mouse"
1296
HT_MOUSE_TABLET = "tablet"
1297

    
1298
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1299
  HT_MOUSE_MOUSE,
1300
  HT_MOUSE_TABLET,
1301
  ])
1302

    
1303
# Boot order
1304
HT_BO_FLOPPY = "floppy"
1305
HT_BO_CDROM = "cdrom"
1306
HT_BO_DISK = "disk"
1307
HT_BO_NETWORK = "network"
1308

    
1309
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1310
  HT_BO_FLOPPY,
1311
  HT_BO_CDROM,
1312
  HT_BO_DISK,
1313
  HT_BO_NETWORK,
1314
  ])
1315

    
1316
# SPICE lossless image compression options
1317
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1318
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1319
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1320
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1321
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1322
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1323

    
1324
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1325
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1326
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1327
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1328
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1329
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1330
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1331
  ])
1332

    
1333
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1334
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1335
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1336
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1337

    
1338
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1339
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1340
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1341
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1342
  ])
1343

    
1344
# SPICE video stream detection
1345
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1346
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1347
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1348

    
1349
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1350
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1351
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1352
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1353
  ])
1354

    
1355
# Security models
1356
HT_SM_NONE = "none"
1357
HT_SM_USER = "user"
1358
HT_SM_POOL = "pool"
1359

    
1360
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1361
  HT_SM_NONE,
1362
  HT_SM_USER,
1363
  HT_SM_POOL,
1364
  ])
1365

    
1366
# Kvm flag values
1367
HT_KVM_ENABLED = "enabled"
1368
HT_KVM_DISABLED = "disabled"
1369

    
1370
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1371

    
1372
# Migration type
1373
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1374
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1375
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1376

    
1377
# Cluster Verify steps
1378
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1379
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1380

    
1381
# Cluster Verify error classes
1382
CV_TCLUSTER = _constants.CV_TCLUSTER
1383
CV_TGROUP = _constants.CV_TGROUP
1384
CV_TNODE = _constants.CV_TNODE
1385
CV_TINSTANCE = _constants.CV_TINSTANCE
1386

    
1387
# Cluster Verify error codes and documentation
1388
CV_ECLUSTERCFG = _constants.CV_ECLUSTERCFG
1389
CV_ECLUSTERCERT = _constants.CV_ECLUSTERCERT
1390
CV_ECLUSTERFILECHECK = _constants.CV_ECLUSTERFILECHECK
1391
CV_ECLUSTERDANGLINGNODES = _constants.CV_ECLUSTERDANGLINGNODES
1392
CV_ECLUSTERDANGLINGINST = _constants.CV_ECLUSTERDANGLINGINST
1393
CV_EGROUPDIFFERENTPVSIZE = _constants.CV_EGROUPDIFFERENTPVSIZE
1394
CV_EINSTANCEBADNODE = _constants.CV_EINSTANCEBADNODE
1395
CV_EINSTANCEDOWN = _constants.CV_EINSTANCEDOWN
1396
CV_EINSTANCELAYOUT = _constants.CV_EINSTANCELAYOUT
1397
CV_EINSTANCEMISSINGDISK = _constants.CV_EINSTANCEMISSINGDISK
1398
CV_EINSTANCEFAULTYDISK = _constants.CV_EINSTANCEFAULTYDISK
1399
CV_EINSTANCEWRONGNODE = _constants.CV_EINSTANCEWRONGNODE
1400
CV_EINSTANCESPLITGROUPS = _constants.CV_EINSTANCESPLITGROUPS
1401
CV_EINSTANCEPOLICY = _constants.CV_EINSTANCEPOLICY
1402
CV_EINSTANCEUNSUITABLENODE = _constants.CV_EINSTANCEUNSUITABLENODE
1403
CV_EINSTANCEMISSINGCFGPARAMETER = _constants.CV_EINSTANCEMISSINGCFGPARAMETER
1404
CV_ENODEDRBD = _constants.CV_ENODEDRBD
1405
CV_ENODEDRBDVERSION = _constants.CV_ENODEDRBDVERSION
1406
CV_ENODEDRBDHELPER = _constants.CV_ENODEDRBDHELPER
1407
CV_ENODEFILECHECK = _constants.CV_ENODEFILECHECK
1408
CV_ENODEHOOKS = _constants.CV_ENODEHOOKS
1409
CV_ENODEHV = _constants.CV_ENODEHV
1410
CV_ENODELVM = _constants.CV_ENODELVM
1411
CV_ENODEN1 = _constants.CV_ENODEN1
1412
CV_ENODENET = _constants.CV_ENODENET
1413
CV_ENODEOS = _constants.CV_ENODEOS
1414
CV_ENODEORPHANINSTANCE = _constants.CV_ENODEORPHANINSTANCE
1415
CV_ENODEORPHANLV = _constants.CV_ENODEORPHANLV
1416
CV_ENODERPC = _constants.CV_ENODERPC
1417
CV_ENODESSH = _constants.CV_ENODESSH
1418
CV_ENODEVERSION = _constants.CV_ENODEVERSION
1419
CV_ENODESETUP = _constants.CV_ENODESETUP
1420
CV_ENODETIME = _constants.CV_ENODETIME
1421
CV_ENODEOOBPATH = _constants.CV_ENODEOOBPATH
1422
CV_ENODEUSERSCRIPTS = _constants.CV_ENODEUSERSCRIPTS
1423
CV_ENODEFILESTORAGEPATHS = _constants.CV_ENODEFILESTORAGEPATHS
1424
CV_ENODEFILESTORAGEPATHUNUSABLE = _constants.CV_ENODEFILESTORAGEPATHUNUSABLE
1425
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1426
  _constants.CV_ENODESHAREDFILESTORAGEPATHUNUSABLE
1427

    
1428
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1429
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1430

    
1431
# Node verify constants
1432
NV_BRIDGES = "bridges"
1433
NV_DRBDHELPER = "drbd-helper"
1434
NV_DRBDVERSION = "drbd-version"
1435
NV_DRBDLIST = "drbd-list"
1436
NV_EXCLUSIVEPVS = "exclusive-pvs"
1437
NV_FILELIST = "filelist"
1438
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1439
NV_FILE_STORAGE_PATH = "file-storage-path"
1440
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1441
NV_HVINFO = "hvinfo"
1442
NV_HVPARAMS = "hvparms"
1443
NV_HYPERVISOR = "hypervisor"
1444
NV_INSTANCELIST = "instancelist"
1445
NV_LVLIST = "lvlist"
1446
NV_MASTERIP = "master-ip"
1447
NV_NODELIST = "nodelist"
1448
NV_NODENETTEST = "node-net-test"
1449
NV_NODESETUP = "nodesetup"
1450
NV_OOB_PATHS = "oob-paths"
1451
NV_OSLIST = "oslist"
1452
NV_PVLIST = "pvlist"
1453
NV_TIME = "time"
1454
NV_USERSCRIPTS = "user-scripts"
1455
NV_VERSION = "version"
1456
NV_VGLIST = "vglist"
1457
NV_VMNODES = "vmnodes"
1458

    
1459
# Instance status
1460
INSTST_RUNNING = _constants.INSTST_RUNNING
1461
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1462
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1463
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1464
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1465
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1466
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1467
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1468
INSTST_ALL = _constants.INSTST_ALL
1469

    
1470
# Admin states
1471
ADMINST_UP = _constants.ADMINST_UP
1472
ADMINST_DOWN = _constants.ADMINST_DOWN
1473
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1474
ADMINST_ALL = _constants.ADMINST_ALL
1475

    
1476
# Node roles
1477
NR_REGULAR = _constants.NR_REGULAR
1478
NR_MASTER = _constants.NR_MASTER
1479
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1480
NR_DRAINED = _constants.NR_DRAINED
1481
NR_OFFLINE = _constants.NR_OFFLINE
1482
NR_ALL = _constants.NR_ALL
1483

    
1484
# SSL certificate check constants (in days)
1485
SSL_CERT_EXPIRATION_WARN = 30
1486
SSL_CERT_EXPIRATION_ERROR = 7
1487

    
1488
# Allocator framework constants
1489
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1490
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1491
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1492
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1493

    
1494
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1495
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1496
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1497
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1498
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1499
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1500

    
1501
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1502
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1503

    
1504
# Node evacuation
1505
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1506
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1507
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1508
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1509

    
1510
# Job queue
1511
JOB_QUEUE_VERSION = 1
1512
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1513
JOB_QUEUE_FILES_PERMS = 0640
1514

    
1515
JOB_ID_TEMPLATE = r"\d+"
1516
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1517

    
1518
# unchanged job return
1519
JOB_NOTCHANGED = "nochange"
1520

    
1521
# Job status
1522
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1523
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1524
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1525
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1526
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1527
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1528
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1529
JOBS_PENDING = _constants.JOBS_PENDING
1530
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1531
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1532

    
1533
# OpCode status
1534
# not yet finalized
1535
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1536
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1537
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1538
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1539
# finalized
1540
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1541
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1542
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1543
OPS_FINALIZED = _constants.OPS_FINALIZED
1544

    
1545
# OpCode priority
1546
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1547
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1548
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1549
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1550
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1551
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1552
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1553

    
1554
# Lock recalculate mode
1555
LOCKS_REPLACE = "replace"
1556
LOCKS_APPEND = "append"
1557

    
1558
# Lock timeout (sum) before we should go into blocking acquire (still
1559
# can be reset by priority change); computed as max time (10 hours)
1560
# before we should actually go into blocking acquire given that we
1561
# start from default priority level; in seconds
1562
# TODO
1563
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1564
LOCK_ATTEMPTS_MAXWAIT = 15.0
1565
LOCK_ATTEMPTS_MINWAIT = 1.0
1566

    
1567
# Execution log types
1568
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1569
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1570
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1571

    
1572
# /etc/hosts modification
1573
ETC_HOSTS_ADD = "add"
1574
ETC_HOSTS_REMOVE = "remove"
1575

    
1576
# Job queue test
1577
JQT_MSGPREFIX = "TESTMSG="
1578
JQT_EXPANDNAMES = "expandnames"
1579
JQT_EXEC = "exec"
1580
JQT_LOGMSG = "logmsg"
1581
JQT_STARTMSG = "startmsg"
1582
JQT_ALL = compat.UniqueFrozenset([
1583
  JQT_EXPANDNAMES,
1584
  JQT_EXEC,
1585
  JQT_LOGMSG,
1586
  JQT_STARTMSG,
1587
  ])
1588

    
1589
# Query resources
1590
QR_CLUSTER = "cluster"
1591
QR_INSTANCE = "instance"
1592
QR_NODE = "node"
1593
QR_LOCK = "lock"
1594
QR_GROUP = "group"
1595
QR_OS = "os"
1596
QR_JOB = "job"
1597
QR_EXPORT = "export"
1598
QR_NETWORK = "network"
1599
QR_EXTSTORAGE = "extstorage"
1600

    
1601
#: List of resources which can be queried using L{opcodes.OpQuery}
1602
QR_VIA_OP = compat.UniqueFrozenset([
1603
  QR_CLUSTER,
1604
  QR_INSTANCE,
1605
  QR_NODE,
1606
  QR_GROUP,
1607
  QR_OS,
1608
  QR_EXPORT,
1609
  QR_NETWORK,
1610
  QR_EXTSTORAGE,
1611
  ])
1612

    
1613
#: List of resources which can be queried using Local UniX Interface
1614
QR_VIA_LUXI = QR_VIA_OP.union([
1615
  QR_LOCK,
1616
  QR_JOB,
1617
  ])
1618

    
1619
#: List of resources which can be queried using RAPI
1620
QR_VIA_RAPI = QR_VIA_LUXI
1621

    
1622
# Query field types
1623
QFT_UNKNOWN = "unknown"
1624
QFT_TEXT = "text"
1625
QFT_BOOL = "bool"
1626
QFT_NUMBER = "number"
1627
QFT_UNIT = "unit"
1628
QFT_TIMESTAMP = "timestamp"
1629
QFT_OTHER = "other"
1630

    
1631
#: All query field types
1632
QFT_ALL = compat.UniqueFrozenset([
1633
  QFT_UNKNOWN,
1634
  QFT_TEXT,
1635
  QFT_BOOL,
1636
  QFT_NUMBER,
1637
  QFT_UNIT,
1638
  QFT_TIMESTAMP,
1639
  QFT_OTHER,
1640
  ])
1641

    
1642
# Query result field status (don't change or reuse values as they're used by
1643
# clients)
1644
#: Normal field status
1645
RS_NORMAL = 0
1646
#: Unknown field
1647
RS_UNKNOWN = 1
1648
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1649
RS_NODATA = 2
1650
#: Value unavailable/unsupported for item; if this field is supported
1651
#: but we cannot get the data for the moment, RS_NODATA or
1652
#: RS_OFFLINE should be used
1653
RS_UNAVAIL = 3
1654
#: Resource marked offline
1655
RS_OFFLINE = 4
1656

    
1657
RS_ALL = compat.UniqueFrozenset([
1658
  RS_NORMAL,
1659
  RS_UNKNOWN,
1660
  RS_NODATA,
1661
  RS_UNAVAIL,
1662
  RS_OFFLINE,
1663
  ])
1664

    
1665
#: Dictionary with special field cases and their verbose/terse formatting
1666
RSS_DESCRIPTION = {
1667
  RS_UNKNOWN: ("(unknown)", "??"),
1668
  RS_NODATA: ("(nodata)", "?"),
1669
  RS_OFFLINE: ("(offline)", "*"),
1670
  RS_UNAVAIL: ("(unavail)", "-"),
1671
  }
1672

    
1673
# max dynamic devices
1674
MAX_NICS = 8
1675
MAX_DISKS = 16
1676

    
1677
# SSCONF file prefix
1678
SSCONF_FILEPREFIX = "ssconf_"
1679
# SSCONF keys
1680
SS_CLUSTER_NAME = "cluster_name"
1681
SS_CLUSTER_TAGS = "cluster_tags"
1682
SS_FILE_STORAGE_DIR = "file_storage_dir"
1683
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
1684
SS_MASTER_CANDIDATES = "master_candidates"
1685
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
1686
SS_MASTER_IP = "master_ip"
1687
SS_MASTER_NETDEV = "master_netdev"
1688
SS_MASTER_NETMASK = "master_netmask"
1689
SS_MASTER_NODE = "master_node"
1690
SS_NODE_LIST = "node_list"
1691
SS_NODE_PRIMARY_IPS = "node_primary_ips"
1692
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
1693
SS_OFFLINE_NODES = "offline_nodes"
1694
SS_ONLINE_NODES = "online_nodes"
1695
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
1696
SS_INSTANCE_LIST = "instance_list"
1697
SS_RELEASE_VERSION = "release_version"
1698
SS_HYPERVISOR_LIST = "hypervisor_list"
1699
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
1700
SS_UID_POOL = "uid_pool"
1701
SS_NODEGROUPS = "nodegroups"
1702
SS_NETWORKS = "networks"
1703

    
1704
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1705
SS_HVPARAMS_PREF = "hvparams_"
1706

    
1707
# Hvparams keys:
1708
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1709
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1710
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1711
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1712
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1713
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1714

    
1715
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1716
  SS_HVPARAMS_XEN_PVM,
1717
  SS_HVPARAMS_XEN_FAKE,
1718
  SS_HVPARAMS_XEN_HVM,
1719
  SS_HVPARAMS_XEN_KVM,
1720
  SS_HVPARAMS_XEN_CHROOT,
1721
  SS_HVPARAMS_XEN_LXC,
1722
  ])
1723

    
1724
SS_FILE_PERMS = 0444
1725

    
1726
# cluster wide default parameters
1727
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1728

    
1729
HVC_DEFAULTS = {
1730
  HT_XEN_PVM: {
1731
    HV_USE_BOOTLOADER: False,
1732
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
1733
    HV_BOOTLOADER_ARGS: "",
1734
    HV_KERNEL_PATH: XEN_KERNEL,
1735
    HV_INITRD_PATH: "",
1736
    HV_ROOT_PATH: "/dev/xvda1",
1737
    HV_KERNEL_ARGS: "ro",
1738
    HV_MIGRATION_PORT: 8002,
1739
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1740
    HV_BLOCKDEV_PREFIX: "sd",
1741
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1742
    HV_CPU_MASK: CPU_PINNING_ALL,
1743
    HV_CPU_CAP: 0,
1744
    HV_CPU_WEIGHT: 256,
1745
    HV_VIF_SCRIPT: "",
1746
    HV_XEN_CMD: XEN_CMD_XM,
1747
    HV_XEN_CPUID: "",
1748
    HV_SOUNDHW: "",
1749
    },
1750
  HT_XEN_HVM: {
1751
    HV_BOOT_ORDER: "cd",
1752
    HV_CDROM_IMAGE_PATH: "",
1753
    HV_NIC_TYPE: HT_NIC_RTL8139,
1754
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1755
    HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY,
1756
    HV_VNC_PASSWORD_FILE: pathutils.VNC_PASSWORD_FILE,
1757
    HV_ACPI: True,
1758
    HV_PAE: True,
1759
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
1760
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
1761
    HV_MIGRATION_PORT: 8002,
1762
    HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
1763
    HV_USE_LOCALTIME: False,
1764
    HV_BLOCKDEV_PREFIX: "hd",
1765
    HV_PASSTHROUGH: "",
1766
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1767
    HV_CPU_MASK: CPU_PINNING_ALL,
1768
    HV_CPU_CAP: 0,
1769
    HV_CPU_WEIGHT: 256,
1770
    HV_VIF_TYPE: HT_HVM_VIF_IOEMU,
1771
    HV_VIF_SCRIPT: "",
1772
    HV_VIRIDIAN: False,
1773
    HV_XEN_CMD: XEN_CMD_XM,
1774
    HV_XEN_CPUID: "",
1775
    HV_SOUNDHW: "",
1776
    },
1777
  HT_KVM: {
1778
    HV_KVM_PATH: KVM_PATH,
1779
    HV_KERNEL_PATH: KVM_KERNEL,
1780
    HV_INITRD_PATH: "",
1781
    HV_KERNEL_ARGS: "ro",
1782
    HV_ROOT_PATH: "/dev/vda1",
1783
    HV_ACPI: True,
1784
    HV_SERIAL_CONSOLE: True,
1785
    HV_SERIAL_SPEED: 38400,
1786
    HV_VNC_BIND_ADDRESS: "",
1787
    HV_VNC_TLS: False,
1788
    HV_VNC_X509: "",
1789
    HV_VNC_X509_VERIFY: False,
1790
    HV_VNC_PASSWORD_FILE: "",
1791
    HV_KVM_SPICE_BIND: "",
1792
    HV_KVM_SPICE_IP_VERSION: IFACE_NO_IP_VERSION_SPECIFIED,
1793
    HV_KVM_SPICE_PASSWORD_FILE: "",
1794
    HV_KVM_SPICE_LOSSLESS_IMG_COMPR: "",
1795
    HV_KVM_SPICE_JPEG_IMG_COMPR: "",
1796
    HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: "",
1797
    HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: "",
1798
    HV_KVM_SPICE_AUDIO_COMPR: True,
1799
    HV_KVM_SPICE_USE_TLS: False,
1800
    HV_KVM_SPICE_TLS_CIPHERS: OPENSSL_CIPHERS,
1801
    HV_KVM_SPICE_USE_VDAGENT: True,
1802
    HV_KVM_FLOPPY_IMAGE_PATH: "",
1803
    HV_CDROM_IMAGE_PATH: "",
1804
    HV_KVM_CDROM2_IMAGE_PATH: "",
1805
    HV_BOOT_ORDER: HT_BO_DISK,
1806
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
1807
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1808
    HV_KVM_CDROM_DISK_TYPE: "",
1809
    HV_USB_MOUSE: "",
1810
    HV_KEYMAP: "",
1811
    HV_MIGRATION_PORT: 8102,
1812
    HV_MIGRATION_BANDWIDTH: 32, # MiB/s
1813
    HV_MIGRATION_DOWNTIME: 30,  # ms
1814
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1815
    HV_USE_LOCALTIME: False,
1816
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
1817
    HV_SECURITY_MODEL: HT_SM_NONE,
1818
    HV_SECURITY_DOMAIN: "",
1819
    HV_KVM_FLAG: "",
1820
    HV_VHOST_NET: False,
1821
    HV_KVM_USE_CHROOT: False,
1822
    HV_MEM_PATH: "",
1823
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1824
    HV_CPU_MASK: CPU_PINNING_ALL,
1825
    HV_CPU_TYPE: "",
1826
    HV_CPU_CORES: 0,
1827
    HV_CPU_THREADS: 0,
1828
    HV_CPU_SOCKETS: 0,
1829
    HV_SOUNDHW: "",
1830
    HV_USB_DEVICES: "",
1831
    HV_VGA: "",
1832
    HV_KVM_EXTRA: "",
1833
    HV_KVM_MACHINE_VERSION: "",
1834
    HV_VNET_HDR: True,
1835
    },
1836
  HT_FAKE: {
1837
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1838
  },
1839
  HT_CHROOT: {
1840
    HV_INIT_SCRIPT: "/ganeti-chroot",
1841
    },
1842
  HT_LXC: {
1843
    HV_CPU_MASK: "",
1844
    },
1845
  }
1846

    
1847
HVC_GLOBALS = compat.UniqueFrozenset([
1848
  HV_MIGRATION_PORT,
1849
  HV_MIGRATION_BANDWIDTH,
1850
  HV_MIGRATION_MODE,
1851
  HV_XEN_CMD,
1852
  ])
1853

    
1854
BEC_DEFAULTS = {
1855
  BE_MINMEM: 128,
1856
  BE_MAXMEM: 128,
1857
  BE_VCPUS: 1,
1858
  BE_AUTO_BALANCE: True,
1859
  BE_ALWAYS_FAILOVER: False,
1860
  BE_SPINDLE_USE: 1,
1861
  }
1862

    
1863
NDC_DEFAULTS = {
1864
  ND_OOB_PROGRAM: "",
1865
  ND_SPINDLE_COUNT: 1,
1866
  ND_EXCLUSIVE_STORAGE: False,
1867
  ND_OVS: False,
1868
  ND_OVS_NAME: DEFAULT_OVS,
1869
  ND_OVS_LINK: ""
1870
  }
1871

    
1872
NDC_GLOBALS = compat.UniqueFrozenset([
1873
  ND_EXCLUSIVE_STORAGE,
1874
  ])
1875

    
1876
DISK_LD_DEFAULTS = {
1877
  DT_DRBD8: {
1878
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1879
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1880
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1881
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1882
    LDP_DISK_CUSTOM: "",
1883
    LDP_NET_CUSTOM: "",
1884
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1885
    LDP_DYNAMIC_RESYNC: False,
1886

    
1887
    # The default values for the DRBD dynamic resync speed algorithm
1888
    # are taken from the drbsetup 8.3.11 man page, except for
1889
    # c-plan-ahead (that we don't need to set to 0, because we have a
1890
    # separate option to enable it) and for c-max-rate, that we cap to
1891
    # the default value for the static resync rate.
1892
    LDP_PLAN_AHEAD: 20, # ds
1893
    LDP_FILL_TARGET: 0, # sectors
1894
    LDP_DELAY_TARGET: 1, # ds
1895
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
1896
    LDP_MIN_RATE: 4 * 1024, # KiB/s
1897
    },
1898
  DT_PLAIN: {
1899
    LDP_STRIPES: _constants.LVM_STRIPECOUNT
1900
    },
1901
  DT_FILE: {},
1902
  DT_SHARED_FILE: {},
1903
  DT_BLOCK: {},
1904
  DT_RBD: {
1905
    LDP_POOL: "rbd",
1906
    LDP_ACCESS: DISK_KERNELSPACE,
1907
    },
1908
  DT_EXT: {},
1909
  }
1910

    
1911
# readability shortcuts
1912
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1913
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1914

    
1915
DISK_DT_DEFAULTS = {
1916
  DT_PLAIN: {
1917
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1918
    },
1919
  DT_DRBD8: {
1920
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1921
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1922
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1923
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1924
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1925
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1926
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1927
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1928
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1929
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1930
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1931
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1932
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1933
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1934
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1935
    },
1936
  DT_DISKLESS: {},
1937
  DT_FILE: {},
1938
  DT_SHARED_FILE: {},
1939
  DT_BLOCK: {},
1940
  DT_RBD: {
1941
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
1942
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
1943
    },
1944
  DT_EXT: {},
1945
  }
1946

    
1947
# we don't want to export the shortcuts
1948
del _LV_DEFAULTS, _DRBD_DEFAULTS
1949

    
1950
NICC_DEFAULTS = {
1951
  NIC_MODE: NIC_MODE_BRIDGED,
1952
  NIC_LINK: DEFAULT_BRIDGE,
1953
  NIC_VLAN: VALUE_HS_NOTHING,
1954
  }
1955

    
1956
# All of the following values are quite arbitrarily - there are no
1957
# "good" defaults, these must be customised per-site
1958
ISPECS_MINMAX_DEFAULTS = {
1959
  ISPECS_MIN: {
1960
    ISPEC_MEM_SIZE: 128,
1961
    ISPEC_CPU_COUNT: 1,
1962
    ISPEC_DISK_COUNT: 1,
1963
    ISPEC_DISK_SIZE: 1024,
1964
    ISPEC_NIC_COUNT: 1,
1965
    ISPEC_SPINDLE_USE: 1,
1966
    },
1967
  ISPECS_MAX: {
1968
    ISPEC_MEM_SIZE: 32768,
1969
    ISPEC_CPU_COUNT: 8,
1970
    ISPEC_DISK_COUNT: MAX_DISKS,
1971
    ISPEC_DISK_SIZE: 1024 * 1024,
1972
    ISPEC_NIC_COUNT: MAX_NICS,
1973
    ISPEC_SPINDLE_USE: 12,
1974
    },
1975
  }
1976
IPOLICY_DEFAULTS = {
1977
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
1978
  ISPECS_STD: {
1979
    ISPEC_MEM_SIZE: 128,
1980
    ISPEC_CPU_COUNT: 1,
1981
    ISPEC_DISK_COUNT: 1,
1982
    ISPEC_DISK_SIZE: 1024,
1983
    ISPEC_NIC_COUNT: 1,
1984
    ISPEC_SPINDLE_USE: 1,
1985
    },
1986
  IPOLICY_DTS: list(DISK_TEMPLATES),
1987
  IPOLICY_VCPU_RATIO: 4.0,
1988
  IPOLICY_SPINDLE_RATIO: 32.0,
1989
  }
1990

    
1991
MASTER_POOL_SIZE_DEFAULT = 10
1992

    
1993
# Exclusive storage:
1994
# Error margin used to compare physical disks
1995
PART_MARGIN = .01
1996
# Space reserved when creating instance disks
1997
PART_RESERVED = .02
1998

    
1999
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
2000

    
2001
CONFD_REQ_PING = _constants.CONFD_REQ_PING
2002
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
2003
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
2004
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
2005
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
2006
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
2007
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
2008
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
2009
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
2010
CONFD_REQS = _constants.CONFD_REQS
2011

    
2012
# Confd request query fields. These are used to narrow down queries.
2013
# These must be strings rather than integers, because json-encoding
2014
# converts them to strings anyway, as they're used as dict-keys.
2015
CONFD_REQQ_LINK = _constants.CONFD_REQQ_LINK
2016
CONFD_REQQ_IP = _constants.CONFD_REQQ_IP
2017
CONFD_REQQ_IPLIST = _constants.CONFD_REQQ_IPLIST
2018
CONFD_REQQ_FIELDS = _constants.CONFD_REQQ_FIELDS
2019

    
2020
# FIXME: perhaps update code that uses these constants to deal with
2021
# integers instead of strings
2022
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
2023
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
2024
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
2025

    
2026
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
2027
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
2028
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
2029
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
2030

    
2031
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
2032
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
2033
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
2034
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
2035
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
2036

    
2037
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
2038
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
2039
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
2040

    
2041
# Each request is "salted" by the current timestamp.
2042
# This constants decides how many seconds of skew to accept.
2043
# TODO: make this a default and allow the value to be more configurable
2044
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
2045

    
2046
# When we haven't reloaded the config for more than this amount of
2047
# seconds, we force a test to see if inotify is betraying us. Using a
2048
# prime number to ensure we get less chance of 'same wakeup' with
2049
# other processes.
2050
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
2051

    
2052
# If we receive more than one update in this amount of microseconds,
2053
# we move to polling every RATELIMIT seconds, rather than relying on
2054
# inotify, to be able to serve more requests.
2055
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
2056

    
2057
# Magic number prepended to all confd queries.
2058
# This allows us to distinguish different types of confd protocols and handle
2059
# them. For example by changing this we can move the whole payload to be
2060
# compressed, or move away from json.
2061
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
2062

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

    
2068
# Timeout in seconds to expire pending query request in the confd client
2069
# library. We don't actually expect any answer more than 10 seconds after we
2070
# sent a request.
2071
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
2072

    
2073
# Maximum UDP datagram size.
2074
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
2075
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
2076
#   (assuming we can't use jumbo frames)
2077
# We just set this to 60K, which should be enough
2078
MAX_UDP_DATA_SIZE = 61440
2079

    
2080
# User-id pool minimum/maximum acceptable user-ids.
2081
UIDPOOL_UID_MIN = 0
2082
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2083

    
2084
# Name or path of the pgrep command
2085
PGREP = "pgrep"
2086

    
2087
# Name of the node group that gets created at cluster init or upgrade
2088
INITIAL_NODE_GROUP_NAME = "default"
2089

    
2090
# Possible values for NodeGroup.alloc_policy
2091
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2092
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2093
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2094
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2095

    
2096
# Temporary external/shared storage parameters
2097
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2098

    
2099
# qemu-img path, required for ovfconverter
2100
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2101

    
2102
# Whether htools was enabled at compilation time
2103
HTOOLS = _constants.HTOOLS
2104
# The hail iallocator
2105
IALLOC_HAIL = "hail"
2106

    
2107
# Fake opcodes for functions that have hooks attached to them via
2108
# backend.RunLocalHooks
2109
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2110
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2111

    
2112
# SSH key types
2113
SSHK_RSA = "rsa"
2114
SSHK_DSA = "dsa"
2115
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2116

    
2117
# SSH authorized key types
2118
SSHAK_RSA = "ssh-rsa"
2119
SSHAK_DSS = "ssh-dss"
2120
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2121

    
2122
# SSH setup
2123
SSHS_CLUSTER_NAME = "cluster_name"
2124
SSHS_SSH_HOST_KEY = "ssh_host_key"
2125
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2126
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2127

    
2128
#: Key files for SSH daemon
2129
SSH_DAEMON_KEYFILES = {
2130
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2131
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2132
  }
2133

    
2134
# Node daemon setup
2135
NDS_CLUSTER_NAME = "cluster_name"
2136
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2137
NDS_SSCONF = "ssconf"
2138
NDS_START_NODE_DAEMON = "start_node_daemon"
2139

    
2140
# Path generating random UUID
2141
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2142

    
2143
# Regex string for verifying a UUID
2144
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2145

    
2146
# Auto-repair tag prefixes
2147
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2148
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2149
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2150
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2151
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2152

    
2153
# Auto-repair levels
2154
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2155
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2156
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2157
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2158
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2159

    
2160
# Auto-repair results
2161
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2162
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2163
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2164
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2165

    
2166
# The version identifier for builtin data collectors
2167
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2168

    
2169
# The reason trail opcode parameter name
2170
OPCODE_REASON = _constants.OPCODE_REASON
2171

    
2172
# The source reasons for the execution of an OpCode
2173
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2174
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2175
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2176
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2177
OPCODE_REASON_SRC_USER = "gnt:user"
2178

    
2179
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2180
  OPCODE_REASON_SRC_CLIENT,
2181
  OPCODE_REASON_SRC_NODED,
2182
  OPCODE_REASON_SRC_OPCODE,
2183
  OPCODE_REASON_SRC_RLIB2,
2184
  OPCODE_REASON_SRC_USER,
2185
  ])
2186

    
2187
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2188

    
2189
# CPU load collector variables
2190
STAT_FILE = _constants.STAT_FILE
2191
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2192
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2193

    
2194
# Mond's variable for periodical data collection
2195
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2196

    
2197
# MonD's latest API version
2198
MOND_LATEST_API_VERSION = 1
2199

    
2200
# Timeouts for upgrades
2201

    
2202
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2203
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2204

    
2205
# Do not re-export imported modules
2206
del re, _vcsversion, _constants, socket, pathutils, compat
2207

    
2208

    
2209
ALLOCATABLE_KEY = "allocatable"
2210
FAILED_KEY = "failed"