Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 14795b58

History | View | Annotate | Download (62.7 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 = _constants.EXPORT_VERSION
41
RAPI_VERSION = _constants.RAPI_VERSION
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

    
396
# drbd constants
397
DRBD_HMAC_ALG = "md5"
398
DRBD_DEFAULT_NET_PROTOCOL = "C"
399
DRBD_MIGRATION_NET_PROTOCOL = "C"
400
DRBD_STATUS_FILE = "/proc/drbd"
401

    
402
#: Size of DRBD meta block device
403
DRBD_META_SIZE = 128
404

    
405
DTS_INT_MIRROR = _constants.DTS_INT_MIRROR
406
DTS_EXT_MIRROR = _constants.DTS_EXT_MIRROR
407
DTS_NOT_LVM = _constants.DTS_NOT_LVM
408
DTS_GROWABLE = _constants.DTS_GROWABLE
409
DTS_MAY_ADOPT = _constants.DTS_MAY_ADOPT
410
DTS_MUST_ADOPT = _constants.DTS_MUST_ADOPT
411
DTS_MIRRORED = _constants.DTS_MIRRORED
412
DTS_FILEBASED = _constants.DTS_FILEBASED
413
DTS_COPYABLE = _constants.DTS_COPYABLE
414
DTS_EXCL_STORAGE = _constants.DTS_EXCL_STORAGE
415
DTS_NO_FREE_SPACE_CHECK = _constants.DTS_NO_FREE_SPACE_CHECK
416
DTS_BLOCK = _constants.DTS_BLOCK
417
# drbd barrier types
418
DRBD_B_NONE = "n"
419
DRBD_B_DISK_BARRIERS = "b"
420
DRBD_B_DISK_DRAIN = "d"
421
DRBD_B_DISK_FLUSH = "f"
422

    
423
# Valid barrier combinations: "n" or any non-null subset of "bfd"
424
DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([
425
  frozenset([DRBD_B_NONE]),
426
  frozenset([DRBD_B_DISK_BARRIERS]),
427
  frozenset([DRBD_B_DISK_DRAIN]),
428
  frozenset([DRBD_B_DISK_FLUSH]),
429
  frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]),
430
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]),
431
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]),
432
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]),
433
  ])
434

    
435
# rbd tool command
436
RBD_CMD = "rbd"
437

    
438
FD_BLKTAP = _constants.FD_BLKTAP
439
FD_LOOP = _constants.FD_LOOP
440
FILE_DRIVER = _constants.FILE_DRIVER
441

    
442
LDS_DRBD = _constants.LDS_DRBD
443

    
444
# disk access mode
445
DISK_RDONLY = _constants.DISK_RDONLY
446
DISK_RDWR = _constants.DISK_RDWR
447
DISK_ACCESS_SET = _constants.DISK_ACCESS_SET
448
DISK_USERSPACE = _constants.DISK_USERSPACE
449
DISK_KERNELSPACE = _constants.DISK_KERNELSPACE
450
DISK_VALID_ACCESS_MODES = _constants.DISK_VALID_ACCESS_MODES
451

    
452
REPLACE_DISK_PRI = _constants.REPLACE_DISK_PRI
453
REPLACE_DISK_SEC = _constants.REPLACE_DISK_SEC
454
REPLACE_DISK_CHG = _constants.REPLACE_DISK_CHG
455
REPLACE_DISK_AUTO = _constants.REPLACE_DISK_AUTO
456
REPLACE_MODES = _constants.REPLACE_MODES
457

    
458
# Instance export mode
459
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
460
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
461
EXPORT_MODES = _constants.EXPORT_MODES
462

    
463
# instance creation modes
464
INSTANCE_CREATE = _constants.INSTANCE_CREATE
465
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
466
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
467
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
468

    
469
# Remote import/export handshake message and version
470
RIE_VERSION = 0
471
RIE_HANDSHAKE = "Hi, I'm Ganeti"
472

    
473
# Remote import/export certificate validity in seconds
474
RIE_CERT_VALIDITY = 24 * 60 * 60
475

    
476
# Overall timeout for establishing connection
477
RIE_CONNECT_TIMEOUT = 180
478

    
479
# Export only: how long to wait per connection attempt (seconds)
480
RIE_CONNECT_ATTEMPT_TIMEOUT = 20
481

    
482
# Export only: number of attempts to connect
483
RIE_CONNECT_RETRIES = 10
484

    
485
#: Give child process up to 5 seconds to exit after sending a signal
486
CHILD_LINGER_TIMEOUT = 5.0
487

    
488

    
489
# import/export config options
490
INISECT_EXP = "export"
491
INISECT_INS = "instance"
492
INISECT_HYP = "hypervisor"
493
INISECT_BEP = "backend"
494
INISECT_OSP = "os"
495

    
496
# dynamic device modification
497
DDM_ADD = _constants.DDM_ADD
498
DDM_MODIFY = _constants.DDM_MODIFY
499
DDM_REMOVE = _constants.DDM_REMOVE
500
DDMS_VALUES = _constants.DDMS_VALUES
501
DDMS_VALUES_WITH_MODIFY = _constants.DDMS_VALUES_WITH_MODIFY
502
# TODO: DDM_SWAP, DDM_MOVE?
503

    
504
# common exit codes
505
EXIT_SUCCESS = _constants.EXIT_SUCCESS
506
EXIT_FAILURE = _constants.EXIT_FAILURE
507
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
508
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
509
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
510
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
511

    
512
#: Exit code for query operations with unknown fields
513
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
514

    
515
# tags
516
TAG_CLUSTER = _constants.TAG_CLUSTER
517
TAG_NODEGROUP = _constants.TAG_NODEGROUP
518
TAG_NODE = _constants.TAG_NODE
519
TAG_INSTANCE = _constants.TAG_INSTANCE
520
TAG_NETWORK = _constants.TAG_NETWORK
521
VALID_TAG_TYPES = _constants.VALID_TAG_TYPES
522

    
523
MAX_TAG_LEN = _constants.MAX_TAG_LEN
524
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
525

    
526
# others
527
DEFAULT_BRIDGE = "xen-br0"
528
DEFAULT_OVS = "switch1"
529
CLASSIC_DRBD_SYNC_SPEED = 60 * 1024  # 60 MiB, expressed in KiB
530
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
531
IP4_ADDRESS_ANY = "0.0.0.0"
532
IP6_ADDRESS_LOCALHOST = "::1"
533
IP6_ADDRESS_ANY = "::"
534
IP4_VERSION = 4
535
IP6_VERSION = 6
536
VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
537
# for export to htools
538
IP4_FAMILY = socket.AF_INET
539
IP6_FAMILY = socket.AF_INET6
540

    
541
TCP_PING_TIMEOUT = 10
542
DEFAULT_VG = "xenvg"
543
DEFAULT_DRBD_HELPER = "/bin/true"
544
MIN_VG_SIZE = 20480
545
DEFAULT_MAC_PREFIX = "aa:00:00"
546
# default maximum instance wait time, in seconds.
547
DEFAULT_SHUTDOWN_TIMEOUT = 120
548
NODE_MAX_CLOCK_SKEW = _constants.NODE_MAX_CLOCK_SKEW
549
# Time for an intra-cluster disk transfer to wait for a connection
550
DISK_TRANSFER_CONNECT_TIMEOUT = 60
551
# Disk index separator
552
DISK_SEPARATOR = _constants.DISK_SEPARATOR
553
IP_COMMAND_PATH = _constants.IP_COMMAND_PATH
554

    
555
RPC_TMO_URGENT = _constants.RPC_TMO_URGENT
556
RPC_TMO_FAST = _constants.RPC_TMO_FAST
557
RPC_TMO_NORMAL = _constants.RPC_TMO_NORMAL
558
RPC_TMO_SLOW = _constants.RPC_TMO_SLOW
559
RPC_TMO_4HRS = _constants.RPC_TMO_4HRS
560
RPC_TMO_1DAY = _constants.RPC_TMO_1DAY
561
RPC_CONNECT_TIMEOUT = _constants.RPC_CONNECT_TIMEOUT
562

    
563
#: Key for job IDs in opcode result
564
JOB_IDS_KEY = "jobs"
565

    
566
# runparts results
567
(RUNPARTS_SKIP,
568
 RUNPARTS_RUN,
569
 RUNPARTS_ERR) = range(3)
570

    
571
RUNPARTS_STATUS = compat.UniqueFrozenset([
572
  RUNPARTS_SKIP,
573
  RUNPARTS_RUN,
574
  RUNPARTS_ERR,
575
  ])
576

    
577
# RPC constants
578
(RPC_ENCODING_NONE,
579
 RPC_ENCODING_ZLIB_BASE64) = range(2)
580

    
581
# os related constants
582
OS_SCRIPT_CREATE = "create"
583
OS_SCRIPT_IMPORT = "import"
584
OS_SCRIPT_EXPORT = "export"
585
OS_SCRIPT_RENAME = "rename"
586
OS_SCRIPT_VERIFY = "verify"
587
OS_SCRIPTS = compat.UniqueFrozenset([
588
  OS_SCRIPT_CREATE,
589
  OS_SCRIPT_IMPORT,
590
  OS_SCRIPT_EXPORT,
591
  OS_SCRIPT_RENAME,
592
  OS_SCRIPT_VERIFY,
593
  ])
594

    
595
OS_API_FILE = "ganeti_api_version"
596
OS_VARIANTS_FILE = "variants.list"
597
OS_PARAMETERS_FILE = "parameters.list"
598

    
599
OS_VALIDATE_PARAMETERS = "parameters"
600
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
601

    
602
# External Storage (ES) related constants
603
ES_ACTION_CREATE = "create"
604
ES_ACTION_REMOVE = "remove"
605
ES_ACTION_GROW = "grow"
606
ES_ACTION_ATTACH = "attach"
607
ES_ACTION_DETACH = "detach"
608
ES_ACTION_SETINFO = "setinfo"
609
ES_ACTION_VERIFY = "verify"
610

    
611
ES_SCRIPT_CREATE = ES_ACTION_CREATE
612
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
613
ES_SCRIPT_GROW = ES_ACTION_GROW
614
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
615
ES_SCRIPT_DETACH = ES_ACTION_DETACH
616
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
617
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
618
ES_SCRIPTS = frozenset([
619
  ES_SCRIPT_CREATE,
620
  ES_SCRIPT_REMOVE,
621
  ES_SCRIPT_GROW,
622
  ES_SCRIPT_ATTACH,
623
  ES_SCRIPT_DETACH,
624
  ES_SCRIPT_SETINFO,
625
  ES_SCRIPT_VERIFY
626
  ])
627

    
628
ES_PARAMETERS_FILE = "parameters.list"
629

    
630
# reboot types
631
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
632
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
633
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
634
REBOOT_TYPES = _constants.REBOOT_TYPES
635

    
636
# instance reboot behaviors
637
INSTANCE_REBOOT_ALLOWED = "reboot"
638
INSTANCE_REBOOT_EXIT = "exit"
639

    
640
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
641
  INSTANCE_REBOOT_ALLOWED,
642
  INSTANCE_REBOOT_EXIT,
643
  ])
644

    
645
VTYPE_STRING = _constants.VTYPE_STRING
646
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
647
VTYPE_BOOL = _constants.VTYPE_BOOL
648
VTYPE_SIZE = _constants.VTYPE_SIZE
649
VTYPE_INT = _constants.VTYPE_INT
650
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
651

    
652
# Constant representing that the user does not specify any IP version
653
IFACE_NO_IP_VERSION_SPECIFIED = 0
654

    
655
VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
656
  75,
657
  110,
658
  300,
659
  600,
660
  1200,
661
  1800,
662
  2400,
663
  4800,
664
  9600,
665
  14400,
666
  19200,
667
  28800,
668
  38400,
669
  57600,
670
  115200,
671
  230400,
672
  345600,
673
  460800,
674
  ])
675

    
676
# HV parameter names (global namespace)
677
HV_BOOT_ORDER = "boot_order"
678
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
679
HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
680
HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
681
HV_NIC_TYPE = "nic_type"
682
HV_DISK_TYPE = "disk_type"
683
HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
684
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
685
HV_VNC_PASSWORD_FILE = "vnc_password_file"
686
HV_VNC_TLS = "vnc_tls"
687
HV_VNC_X509 = "vnc_x509_path"
688
HV_VNC_X509_VERIFY = "vnc_x509_verify"
689
HV_KVM_SPICE_BIND = "spice_bind"
690
HV_KVM_SPICE_IP_VERSION = "spice_ip_version"
691
HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file"
692
HV_KVM_SPICE_LOSSLESS_IMG_COMPR = "spice_image_compression"
693
HV_KVM_SPICE_JPEG_IMG_COMPR = "spice_jpeg_wan_compression"
694
HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR = "spice_zlib_glz_wan_compression"
695
HV_KVM_SPICE_STREAMING_VIDEO_DETECTION = "spice_streaming_video"
696
HV_KVM_SPICE_AUDIO_COMPR = "spice_playback_compression"
697
HV_KVM_SPICE_USE_TLS = "spice_use_tls"
698
HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers"
699
HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent"
700
HV_ACPI = "acpi"
701
HV_PAE = "pae"
702
HV_USE_BOOTLOADER = "use_bootloader"
703
HV_BOOTLOADER_ARGS = "bootloader_args"
704
HV_BOOTLOADER_PATH = "bootloader_path"
705
HV_KERNEL_ARGS = "kernel_args"
706
HV_KERNEL_PATH = "kernel_path"
707
HV_INITRD_PATH = "initrd_path"
708
HV_ROOT_PATH = "root_path"
709
HV_SERIAL_CONSOLE = "serial_console"
710
HV_SERIAL_SPEED = "serial_speed"
711
HV_USB_MOUSE = "usb_mouse"
712
HV_KEYMAP = "keymap"
713
HV_DEVICE_MODEL = "device_model"
714
HV_INIT_SCRIPT = "init_script"
715
HV_MIGRATION_PORT = "migration_port"
716
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
717
HV_MIGRATION_DOWNTIME = "migration_downtime"
718
HV_MIGRATION_MODE = "migration_mode"
719
HV_USE_LOCALTIME = "use_localtime"
720
HV_DISK_CACHE = "disk_cache"
721
HV_SECURITY_MODEL = "security_model"
722
HV_SECURITY_DOMAIN = "security_domain"
723
HV_KVM_FLAG = "kvm_flag"
724
HV_VHOST_NET = "vhost_net"
725
HV_KVM_USE_CHROOT = "use_chroot"
726
HV_CPU_MASK = "cpu_mask"
727
HV_MEM_PATH = "mem_path"
728
HV_PASSTHROUGH = "pci_pass"
729
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
730
HV_REBOOT_BEHAVIOR = "reboot_behavior"
731
HV_CPU_TYPE = "cpu_type"
732
HV_CPU_CAP = "cpu_cap"
733
HV_CPU_WEIGHT = "cpu_weight"
734
HV_CPU_CORES = "cpu_cores"
735
HV_CPU_THREADS = "cpu_threads"
736
HV_CPU_SOCKETS = "cpu_sockets"
737
HV_SOUNDHW = "soundhw"
738
HV_USB_DEVICES = "usb_devices"
739
HV_VGA = "vga"
740
HV_KVM_EXTRA = "kvm_extra"
741
HV_KVM_MACHINE_VERSION = "machine_version"
742
HV_KVM_PATH = "kvm_path"
743
HV_VIF_TYPE = "vif_type"
744
HV_VIF_SCRIPT = "vif_script"
745
HV_XEN_CMD = "xen_cmd"
746
HV_XEN_CPUID = "cpuid"
747
HV_VNET_HDR = "vnet_hdr"
748
HV_VIRIDIAN = "viridian"
749

    
750

    
751
HVS_PARAMETER_TYPES = {
752
  HV_KVM_PATH: VTYPE_STRING,
753
  HV_BOOT_ORDER: VTYPE_STRING,
754
  HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
755
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
756
  HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
757
  HV_NIC_TYPE: VTYPE_STRING,
758
  HV_DISK_TYPE: VTYPE_STRING,
759
  HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
760
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
761
  HV_VNC_BIND_ADDRESS: VTYPE_STRING,
762
  HV_VNC_TLS: VTYPE_BOOL,
763
  HV_VNC_X509: VTYPE_STRING,
764
  HV_VNC_X509_VERIFY: VTYPE_BOOL,
765
  HV_KVM_SPICE_BIND: VTYPE_STRING,
766
  HV_KVM_SPICE_IP_VERSION: VTYPE_INT,
767
  HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING,
768
  HV_KVM_SPICE_LOSSLESS_IMG_COMPR: VTYPE_STRING,
769
  HV_KVM_SPICE_JPEG_IMG_COMPR: VTYPE_STRING,
770
  HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: VTYPE_STRING,
771
  HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: VTYPE_STRING,
772
  HV_KVM_SPICE_AUDIO_COMPR: VTYPE_BOOL,
773
  HV_KVM_SPICE_USE_TLS: VTYPE_BOOL,
774
  HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING,
775
  HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL,
776
  HV_ACPI: VTYPE_BOOL,
777
  HV_PAE: VTYPE_BOOL,
778
  HV_USE_BOOTLOADER: VTYPE_BOOL,
779
  HV_BOOTLOADER_PATH: VTYPE_STRING,
780
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
781
  HV_KERNEL_PATH: VTYPE_STRING,
782
  HV_KERNEL_ARGS: VTYPE_STRING,
783
  HV_INITRD_PATH: VTYPE_STRING,
784
  HV_ROOT_PATH: VTYPE_MAYBE_STRING,
785
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
786
  HV_SERIAL_SPEED: VTYPE_INT,
787
  HV_USB_MOUSE: VTYPE_STRING,
788
  HV_KEYMAP: VTYPE_STRING,
789
  HV_DEVICE_MODEL: VTYPE_STRING,
790
  HV_INIT_SCRIPT: VTYPE_STRING,
791
  HV_MIGRATION_PORT: VTYPE_INT,
792
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
793
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
794
  HV_MIGRATION_MODE: VTYPE_STRING,
795
  HV_USE_LOCALTIME: VTYPE_BOOL,
796
  HV_DISK_CACHE: VTYPE_STRING,
797
  HV_SECURITY_MODEL: VTYPE_STRING,
798
  HV_SECURITY_DOMAIN: VTYPE_STRING,
799
  HV_KVM_FLAG: VTYPE_STRING,
800
  HV_VHOST_NET: VTYPE_BOOL,
801
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
802
  HV_CPU_MASK: VTYPE_STRING,
803
  HV_MEM_PATH: VTYPE_STRING,
804
  HV_PASSTHROUGH: VTYPE_STRING,
805
  HV_BLOCKDEV_PREFIX: VTYPE_STRING,
806
  HV_REBOOT_BEHAVIOR: VTYPE_STRING,
807
  HV_CPU_TYPE: VTYPE_STRING,
808
  HV_CPU_CAP: VTYPE_INT,
809
  HV_CPU_WEIGHT: VTYPE_INT,
810
  HV_CPU_CORES: VTYPE_INT,
811
  HV_CPU_THREADS: VTYPE_INT,
812
  HV_CPU_SOCKETS: VTYPE_INT,
813
  HV_SOUNDHW: VTYPE_STRING,
814
  HV_USB_DEVICES: VTYPE_STRING,
815
  HV_VGA: VTYPE_STRING,
816
  HV_KVM_EXTRA: VTYPE_STRING,
817
  HV_KVM_MACHINE_VERSION: VTYPE_STRING,
818
  HV_VIF_TYPE: VTYPE_STRING,
819
  HV_VIF_SCRIPT: VTYPE_STRING,
820
  HV_XEN_CMD: VTYPE_STRING,
821
  HV_XEN_CPUID: VTYPE_STRING,
822
  HV_VNET_HDR: VTYPE_BOOL,
823
  HV_VIRIDIAN: VTYPE_BOOL,
824
  }
825

    
826
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
827

    
828
HVS_PARAMETER_TITLES = {
829
  HV_ACPI: "ACPI",
830
  HV_BOOT_ORDER: "Boot_order",
831
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
832
  HV_DISK_TYPE: "Disk_type",
833
  HV_INITRD_PATH: "Initrd_path",
834
  HV_KERNEL_PATH: "Kernel_path",
835
  HV_NIC_TYPE: "NIC_type",
836
  HV_PAE: "PAE",
837
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
838
  HV_PASSTHROUGH: "pci_pass",
839
  HV_CPU_TYPE: "cpu_type",
840
  }
841

    
842
# Migration statuses
843
HV_MIGRATION_COMPLETED = "completed"
844
HV_MIGRATION_ACTIVE = "active"
845
HV_MIGRATION_FAILED = "failed"
846
HV_MIGRATION_CANCELLED = "cancelled"
847

    
848
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
849
  HV_MIGRATION_COMPLETED,
850
  HV_MIGRATION_ACTIVE,
851
  HV_MIGRATION_FAILED,
852
  HV_MIGRATION_CANCELLED,
853
  ])
854

    
855
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
856
  HV_MIGRATION_FAILED,
857
  HV_MIGRATION_CANCELLED,
858
  ])
859

    
860
# KVM-specific statuses
861
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
862

    
863
# Node info keys
864
HV_NODEINFO_KEY_VERSION = "hv_version"
865

    
866
# Hypervisor state
867
HVST_MEMORY_TOTAL = "mem_total"
868
HVST_MEMORY_NODE = "mem_node"
869
HVST_MEMORY_HV = "mem_hv"
870
HVST_CPU_TOTAL = "cpu_total"
871
HVST_CPU_NODE = "cpu_node"
872

    
873
HVST_DEFAULTS = {
874
  HVST_MEMORY_TOTAL: 0,
875
  HVST_MEMORY_NODE: 0,
876
  HVST_MEMORY_HV: 0,
877
  HVST_CPU_TOTAL: 1,
878
  HVST_CPU_NODE: 1,
879
  }
880

    
881
HVSTS_PARAMETER_TYPES = {
882
  HVST_MEMORY_TOTAL: VTYPE_INT,
883
  HVST_MEMORY_NODE: VTYPE_INT,
884
  HVST_MEMORY_HV: VTYPE_INT,
885
  HVST_CPU_TOTAL: VTYPE_INT,
886
  HVST_CPU_NODE: VTYPE_INT,
887
  }
888

    
889
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
890

    
891
# Disk state
892
DS_DISK_TOTAL = "disk_total"
893
DS_DISK_RESERVED = "disk_reserved"
894
DS_DISK_OVERHEAD = "disk_overhead"
895

    
896
DS_DEFAULTS = {
897
  DS_DISK_TOTAL: 0,
898
  DS_DISK_RESERVED: 0,
899
  DS_DISK_OVERHEAD: 0,
900
  }
901

    
902
ISPEC_MEM_SIZE = _constants.ISPEC_MEM_SIZE
903
ISPEC_CPU_COUNT = _constants.ISPEC_CPU_COUNT
904
ISPEC_DISK_COUNT = _constants.ISPEC_DISK_COUNT
905
ISPEC_DISK_SIZE = _constants.ISPEC_DISK_SIZE
906
ISPEC_NIC_COUNT = _constants.ISPEC_NIC_COUNT
907
ISPEC_SPINDLE_USE = _constants.ISPEC_SPINDLE_USE
908
ISPECS_PARAMETER_TYPES = _constants.ISPECS_PARAMETER_TYPES
909
ISPECS_PARAMETERS = _constants.ISPECS_PARAMETERS
910

    
911
ISPECS_MINMAX = _constants.ISPECS_MINMAX
912
ISPECS_MIN = _constants.ISPECS_MIN
913
ISPECS_MAX = _constants.ISPECS_MAX
914
ISPECS_STD = _constants.ISPECS_STD
915
IPOLICY_DTS = _constants.IPOLICY_DTS
916
IPOLICY_VCPU_RATIO = _constants.IPOLICY_VCPU_RATIO
917
IPOLICY_SPINDLE_RATIO = _constants.IPOLICY_SPINDLE_RATIO
918
ISPECS_MINMAX_KEYS = _constants.ISPECS_MINMAX_KEYS
919
IPOLICY_PARAMETERS = _constants.IPOLICY_PARAMETERS
920
IPOLICY_ALL_KEYS = _constants.IPOLICY_ALL_KEYS
921

    
922
ND_OOB_PROGRAM = _constants.ND_OOB_PROGRAM
923
ND_SPINDLE_COUNT = _constants.ND_SPINDLE_COUNT
924
ND_EXCLUSIVE_STORAGE = _constants.ND_EXCLUSIVE_STORAGE
925
ND_OVS = _constants.ND_OVS
926
ND_OVS_NAME = _constants.ND_OVS_NAME
927
ND_OVS_LINK = _constants.ND_OVS_LINK
928

    
929
NDS_PARAMETER_TYPES = _constants.NDS_PARAMETER_TYPES
930
NDS_PARAMETERS = _constants.NDS_PARAMETERS
931
NDS_PARAMETER_TITLES = _constants.NDS_PARAMETER_TITLES
932
DSS_PARAMETER_TYPES = {
933
  DS_DISK_TOTAL: VTYPE_INT,
934
  DS_DISK_RESERVED: VTYPE_INT,
935
  DS_DISK_OVERHEAD: VTYPE_INT,
936
  }
937

    
938
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
939
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
940

    
941
# Backend parameter names
942
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
943
BE_MAXMEM = "maxmem"
944
BE_MINMEM = "minmem"
945
BE_VCPUS = "vcpus"
946
BE_AUTO_BALANCE = "auto_balance"
947
BE_ALWAYS_FAILOVER = "always_failover"
948
BE_SPINDLE_USE = "spindle_use"
949

    
950
BES_PARAMETER_TYPES = {
951
  BE_MAXMEM: VTYPE_SIZE,
952
  BE_MINMEM: VTYPE_SIZE,
953
  BE_VCPUS: VTYPE_INT,
954
  BE_AUTO_BALANCE: VTYPE_BOOL,
955
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
956
  BE_SPINDLE_USE: VTYPE_INT,
957
  }
958

    
959
BES_PARAMETER_TITLES = {
960
  BE_AUTO_BALANCE: "Auto_balance",
961
  BE_MAXMEM: "ConfigMaxMem",
962
  BE_MINMEM: "ConfigMinMem",
963
  BE_VCPUS: "ConfigVCPUs",
964
  }
965

    
966
BES_PARAMETER_COMPAT = {
967
  BE_MEMORY: VTYPE_SIZE,
968
  }
969
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
970

    
971
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
972

    
973
# Logical Disks parameters
974
LDP_RESYNC_RATE = "resync-rate"
975
LDP_STRIPES = "stripes"
976
LDP_BARRIERS = "disabled-barriers"
977
LDP_NO_META_FLUSH = "disable-meta-flush"
978
LDP_DEFAULT_METAVG = "default-metavg"
979
LDP_DISK_CUSTOM = "disk-custom"
980
LDP_NET_CUSTOM = "net-custom"
981
LDP_PROTOCOL = "protocol"
982
LDP_DYNAMIC_RESYNC = "dynamic-resync"
983
LDP_PLAN_AHEAD = "c-plan-ahead"
984
LDP_FILL_TARGET = "c-fill-target"
985
LDP_DELAY_TARGET = "c-delay-target"
986
LDP_MAX_RATE = "c-max-rate"
987
LDP_MIN_RATE = "c-min-rate"
988
LDP_POOL = "pool"
989
LDP_ACCESS = "access"
990
DISK_LD_TYPES = {
991
  LDP_RESYNC_RATE: VTYPE_INT,
992
  LDP_STRIPES: VTYPE_INT,
993
  LDP_BARRIERS: VTYPE_STRING,
994
  LDP_NO_META_FLUSH: VTYPE_BOOL,
995
  LDP_DEFAULT_METAVG: VTYPE_STRING,
996
  LDP_DISK_CUSTOM: VTYPE_STRING,
997
  LDP_NET_CUSTOM: VTYPE_STRING,
998
  LDP_PROTOCOL: VTYPE_STRING,
999
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
1000
  LDP_PLAN_AHEAD: VTYPE_INT,
1001
  LDP_FILL_TARGET: VTYPE_INT,
1002
  LDP_DELAY_TARGET: VTYPE_INT,
1003
  LDP_MAX_RATE: VTYPE_INT,
1004
  LDP_MIN_RATE: VTYPE_INT,
1005
  LDP_POOL: VTYPE_STRING,
1006
  LDP_ACCESS: VTYPE_STRING,
1007
  }
1008
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
1009

    
1010
# Disk template parameters (can be set/changed by the user via gnt-cluster and
1011
# gnt-group)
1012
DRBD_RESYNC_RATE = "resync-rate"
1013
DRBD_DATA_STRIPES = "data-stripes"
1014
DRBD_META_STRIPES = "meta-stripes"
1015
DRBD_DISK_BARRIERS = "disk-barriers"
1016
DRBD_META_BARRIERS = "meta-barriers"
1017
DRBD_DEFAULT_METAVG = "metavg"
1018
DRBD_DISK_CUSTOM = "disk-custom"
1019
DRBD_NET_CUSTOM = "net-custom"
1020
DRBD_PROTOCOL = "protocol"
1021
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
1022
DRBD_PLAN_AHEAD = "c-plan-ahead"
1023
DRBD_FILL_TARGET = "c-fill-target"
1024
DRBD_DELAY_TARGET = "c-delay-target"
1025
DRBD_MAX_RATE = "c-max-rate"
1026
DRBD_MIN_RATE = "c-min-rate"
1027
LV_STRIPES = "stripes"
1028
RBD_POOL = "pool"
1029
RBD_ACCESS = "access"
1030
DISK_DT_TYPES = {
1031
  DRBD_RESYNC_RATE: VTYPE_INT,
1032
  DRBD_DATA_STRIPES: VTYPE_INT,
1033
  DRBD_META_STRIPES: VTYPE_INT,
1034
  DRBD_DISK_BARRIERS: VTYPE_STRING,
1035
  DRBD_META_BARRIERS: VTYPE_BOOL,
1036
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
1037
  DRBD_DISK_CUSTOM: VTYPE_STRING,
1038
  DRBD_NET_CUSTOM: VTYPE_STRING,
1039
  DRBD_PROTOCOL: VTYPE_STRING,
1040
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
1041
  DRBD_PLAN_AHEAD: VTYPE_INT,
1042
  DRBD_FILL_TARGET: VTYPE_INT,
1043
  DRBD_DELAY_TARGET: VTYPE_INT,
1044
  DRBD_MAX_RATE: VTYPE_INT,
1045
  DRBD_MIN_RATE: VTYPE_INT,
1046
  LV_STRIPES: VTYPE_INT,
1047
  RBD_POOL: VTYPE_STRING,
1048
  RBD_ACCESS: VTYPE_STRING,
1049
  }
1050

    
1051
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1052

    
1053
# dynamic disk parameters
1054
DDP_LOCAL_IP = "local-ip"
1055
DDP_REMOTE_IP = "remote-ip"
1056
DDP_PORT = "port"
1057
DDP_LOCAL_MINOR = "local-minor"
1058
DDP_REMOTE_MINOR = "remote-minor"
1059

    
1060
# OOB supported commands
1061
OOB_POWER_ON = _constants.OOB_POWER_ON
1062
OOB_POWER_OFF = _constants.OOB_POWER_OFF
1063
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
1064
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
1065
OOB_HEALTH = _constants.OOB_HEALTH
1066
OOB_COMMANDS = _constants.OOB_COMMANDS
1067

    
1068
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1069

    
1070
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1071
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1072

    
1073
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1074
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1075
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1076
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1077
OOB_STATUSES = _constants.OOB_STATUSES
1078

    
1079
# Instance Parameters Profile
1080
PP_DEFAULT = "default"
1081

    
1082
# NIC_* constants are used inside the ganeti config
1083
NIC_MODE = _constants.NIC_MODE
1084
NIC_LINK = _constants.NIC_LINK
1085
NIC_VLAN = _constants.NIC_VLAN
1086

    
1087
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1088
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1089
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1090
NIC_IP_POOL = _constants.NIC_IP_POOL
1091
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1092

    
1093
RESERVE_ACTION = "reserve"
1094
RELEASE_ACTION = "release"
1095

    
1096
NICS_PARAMETER_TYPES = {
1097
  NIC_MODE: VTYPE_STRING,
1098
  NIC_LINK: VTYPE_STRING,
1099
  NIC_VLAN: VTYPE_MAYBE_STRING,
1100
  }
1101

    
1102
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1103

    
1104
# IDISK_* constants are used in opcodes, to create/change disks
1105
IDISK_SIZE = "size"
1106
IDISK_SPINDLES = "spindles"
1107
IDISK_MODE = "mode"
1108
IDISK_ADOPT = "adopt"
1109
IDISK_VG = "vg"
1110
IDISK_METAVG = "metavg"
1111
IDISK_PROVIDER = "provider"
1112
IDISK_NAME = "name"
1113
IDISK_PARAMS_TYPES = {
1114
  IDISK_SIZE: VTYPE_SIZE,
1115
  IDISK_SPINDLES: VTYPE_INT,
1116
  IDISK_MODE: VTYPE_STRING,
1117
  IDISK_ADOPT: VTYPE_STRING,
1118
  IDISK_VG: VTYPE_STRING,
1119
  IDISK_METAVG: VTYPE_STRING,
1120
  IDISK_PROVIDER: VTYPE_STRING,
1121
  IDISK_NAME: VTYPE_MAYBE_STRING,
1122
  }
1123
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1124

    
1125
# INIC_* constants are used in opcodes, to create/change nics
1126
INIC_MAC = "mac"
1127
INIC_IP = "ip"
1128
INIC_MODE = "mode"
1129
INIC_LINK = "link"
1130
INIC_NETWORK = "network"
1131
INIC_NAME = "name"
1132
INIC_VLAN = "vlan"
1133
INIC_BRIDGE = "bridge"
1134
INIC_PARAMS_TYPES = {
1135
  INIC_IP: VTYPE_MAYBE_STRING,
1136
  INIC_LINK: VTYPE_STRING,
1137
  INIC_MAC: VTYPE_STRING,
1138
  INIC_MODE: VTYPE_STRING,
1139
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1140
  INIC_NAME: VTYPE_MAYBE_STRING,
1141
  INIC_VLAN: VTYPE_MAYBE_STRING,
1142
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1143
  }
1144
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1145

    
1146
# Hypervisor constants
1147
HT_XEN_PVM = _constants.HT_XEN_PVM
1148
HT_FAKE = _constants.HT_FAKE
1149
HT_XEN_HVM = _constants.HT_XEN_HVM
1150
HT_KVM = _constants.HT_KVM
1151
HT_CHROOT = _constants.HT_CHROOT
1152
HT_LXC = _constants.HT_LXC
1153
HYPER_TYPES = _constants.HYPER_TYPES
1154
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1155

    
1156
VNC_BASE_PORT = 5900
1157
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1158

    
1159
# NIC types
1160
HT_NIC_RTL8139 = "rtl8139"
1161
HT_NIC_NE2K_PCI = "ne2k_pci"
1162
HT_NIC_NE2K_ISA = "ne2k_isa"
1163
HT_NIC_I82551 = "i82551"
1164
HT_NIC_I85557B = "i82557b"
1165
HT_NIC_I8259ER = "i82559er"
1166
HT_NIC_PCNET = "pcnet"
1167
HT_NIC_E1000 = "e1000"
1168
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1169

    
1170
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1171
  HT_NIC_RTL8139,
1172
  HT_NIC_NE2K_PCI,
1173
  HT_NIC_E1000,
1174
  HT_NIC_NE2K_ISA,
1175
  HT_NIC_PARAVIRTUAL,
1176
  ])
1177
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1178
  HT_NIC_RTL8139,
1179
  HT_NIC_NE2K_PCI,
1180
  HT_NIC_NE2K_ISA,
1181
  HT_NIC_I82551,
1182
  HT_NIC_I85557B,
1183
  HT_NIC_I8259ER,
1184
  HT_NIC_PCNET,
1185
  HT_NIC_E1000,
1186
  HT_NIC_PARAVIRTUAL,
1187
  ])
1188

    
1189
# Vif types
1190
# default vif type in xen-hvm
1191
HT_HVM_VIF_IOEMU = "ioemu"
1192
HT_HVM_VIF_VIF = "vif"
1193
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1194
  HT_HVM_VIF_IOEMU,
1195
  HT_HVM_VIF_VIF,
1196
  ])
1197

    
1198
# Disk types
1199
HT_DISK_IOEMU = "ioemu"
1200
HT_DISK_IDE = "ide"
1201
HT_DISK_SCSI = "scsi"
1202
HT_DISK_SD = "sd"
1203
HT_DISK_MTD = "mtd"
1204
HT_DISK_PFLASH = "pflash"
1205

    
1206
HT_CACHE_DEFAULT = "default"
1207
HT_CACHE_NONE = "none"
1208
HT_CACHE_WTHROUGH = "writethrough"
1209
HT_CACHE_WBACK = "writeback"
1210
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1211
  HT_CACHE_DEFAULT,
1212
  HT_CACHE_NONE,
1213
  HT_CACHE_WTHROUGH,
1214
  HT_CACHE_WBACK,
1215
  ])
1216

    
1217
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1218
  HT_DISK_PARAVIRTUAL,
1219
  HT_DISK_IOEMU,
1220
  ])
1221
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1222
  HT_DISK_PARAVIRTUAL,
1223
  HT_DISK_IDE,
1224
  HT_DISK_SCSI,
1225
  HT_DISK_SD,
1226
  HT_DISK_MTD,
1227
  HT_DISK_PFLASH,
1228
  ])
1229

    
1230
# Mouse types:
1231
HT_MOUSE_MOUSE = "mouse"
1232
HT_MOUSE_TABLET = "tablet"
1233

    
1234
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1235
  HT_MOUSE_MOUSE,
1236
  HT_MOUSE_TABLET,
1237
  ])
1238

    
1239
# Boot order
1240
HT_BO_FLOPPY = "floppy"
1241
HT_BO_CDROM = "cdrom"
1242
HT_BO_DISK = "disk"
1243
HT_BO_NETWORK = "network"
1244

    
1245
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1246
  HT_BO_FLOPPY,
1247
  HT_BO_CDROM,
1248
  HT_BO_DISK,
1249
  HT_BO_NETWORK,
1250
  ])
1251

    
1252
# SPICE lossless image compression options
1253
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1254
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1255
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1256
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1257
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1258
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1259

    
1260
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1261
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1262
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1263
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1264
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1265
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1266
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1267
  ])
1268

    
1269
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1270
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1271
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1272
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1273

    
1274
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1275
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1276
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1277
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1278
  ])
1279

    
1280
# SPICE video stream detection
1281
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1282
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1283
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1284

    
1285
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1286
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1287
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1288
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1289
  ])
1290

    
1291
# Security models
1292
HT_SM_NONE = "none"
1293
HT_SM_USER = "user"
1294
HT_SM_POOL = "pool"
1295

    
1296
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1297
  HT_SM_NONE,
1298
  HT_SM_USER,
1299
  HT_SM_POOL,
1300
  ])
1301

    
1302
# Kvm flag values
1303
HT_KVM_ENABLED = "enabled"
1304
HT_KVM_DISABLED = "disabled"
1305

    
1306
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1307

    
1308
# Migration type
1309
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1310
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1311
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1312

    
1313
# Cluster Verify steps
1314
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1315
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1316

    
1317
# Cluster Verify error classes
1318
CV_TCLUSTER = _constants.CV_TCLUSTER
1319
CV_TGROUP = _constants.CV_TGROUP
1320
CV_TNODE = _constants.CV_TNODE
1321
CV_TINSTANCE = _constants.CV_TINSTANCE
1322

    
1323
# Cluster Verify error codes and documentation
1324
CV_ECLUSTERCFG = _constants.CV_ECLUSTERCFG
1325
CV_ECLUSTERCERT = _constants.CV_ECLUSTERCERT
1326
CV_ECLUSTERFILECHECK = _constants.CV_ECLUSTERFILECHECK
1327
CV_ECLUSTERDANGLINGNODES = _constants.CV_ECLUSTERDANGLINGNODES
1328
CV_ECLUSTERDANGLINGINST = _constants.CV_ECLUSTERDANGLINGINST
1329
CV_EGROUPDIFFERENTPVSIZE = _constants.CV_EGROUPDIFFERENTPVSIZE
1330
CV_EINSTANCEBADNODE = _constants.CV_EINSTANCEBADNODE
1331
CV_EINSTANCEDOWN = _constants.CV_EINSTANCEDOWN
1332
CV_EINSTANCELAYOUT = _constants.CV_EINSTANCELAYOUT
1333
CV_EINSTANCEMISSINGDISK = _constants.CV_EINSTANCEMISSINGDISK
1334
CV_EINSTANCEFAULTYDISK = _constants.CV_EINSTANCEFAULTYDISK
1335
CV_EINSTANCEWRONGNODE = _constants.CV_EINSTANCEWRONGNODE
1336
CV_EINSTANCESPLITGROUPS = _constants.CV_EINSTANCESPLITGROUPS
1337
CV_EINSTANCEPOLICY = _constants.CV_EINSTANCEPOLICY
1338
CV_EINSTANCEUNSUITABLENODE = _constants.CV_EINSTANCEUNSUITABLENODE
1339
CV_EINSTANCEMISSINGCFGPARAMETER = _constants.CV_EINSTANCEMISSINGCFGPARAMETER
1340
CV_ENODEDRBD = _constants.CV_ENODEDRBD
1341
CV_ENODEDRBDVERSION = _constants.CV_ENODEDRBDVERSION
1342
CV_ENODEDRBDHELPER = _constants.CV_ENODEDRBDHELPER
1343
CV_ENODEFILECHECK = _constants.CV_ENODEFILECHECK
1344
CV_ENODEHOOKS = _constants.CV_ENODEHOOKS
1345
CV_ENODEHV = _constants.CV_ENODEHV
1346
CV_ENODELVM = _constants.CV_ENODELVM
1347
CV_ENODEN1 = _constants.CV_ENODEN1
1348
CV_ENODENET = _constants.CV_ENODENET
1349
CV_ENODEOS = _constants.CV_ENODEOS
1350
CV_ENODEORPHANINSTANCE = _constants.CV_ENODEORPHANINSTANCE
1351
CV_ENODEORPHANLV = _constants.CV_ENODEORPHANLV
1352
CV_ENODERPC = _constants.CV_ENODERPC
1353
CV_ENODESSH = _constants.CV_ENODESSH
1354
CV_ENODEVERSION = _constants.CV_ENODEVERSION
1355
CV_ENODESETUP = _constants.CV_ENODESETUP
1356
CV_ENODETIME = _constants.CV_ENODETIME
1357
CV_ENODEOOBPATH = _constants.CV_ENODEOOBPATH
1358
CV_ENODEUSERSCRIPTS = _constants.CV_ENODEUSERSCRIPTS
1359
CV_ENODEFILESTORAGEPATHS = _constants.CV_ENODEFILESTORAGEPATHS
1360
CV_ENODEFILESTORAGEPATHUNUSABLE = _constants.CV_ENODEFILESTORAGEPATHUNUSABLE
1361
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1362
  _constants.CV_ENODESHAREDFILESTORAGEPATHUNUSABLE
1363

    
1364
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1365
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1366

    
1367
# Node verify constants
1368
NV_BRIDGES = "bridges"
1369
NV_DRBDHELPER = "drbd-helper"
1370
NV_DRBDVERSION = "drbd-version"
1371
NV_DRBDLIST = "drbd-list"
1372
NV_EXCLUSIVEPVS = "exclusive-pvs"
1373
NV_FILELIST = "filelist"
1374
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1375
NV_FILE_STORAGE_PATH = "file-storage-path"
1376
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1377
NV_HVINFO = "hvinfo"
1378
NV_HVPARAMS = "hvparms"
1379
NV_HYPERVISOR = "hypervisor"
1380
NV_INSTANCELIST = "instancelist"
1381
NV_LVLIST = "lvlist"
1382
NV_MASTERIP = "master-ip"
1383
NV_NODELIST = "nodelist"
1384
NV_NODENETTEST = "node-net-test"
1385
NV_NODESETUP = "nodesetup"
1386
NV_OOB_PATHS = "oob-paths"
1387
NV_OSLIST = "oslist"
1388
NV_PVLIST = "pvlist"
1389
NV_TIME = "time"
1390
NV_USERSCRIPTS = "user-scripts"
1391
NV_VERSION = "version"
1392
NV_VGLIST = "vglist"
1393
NV_VMNODES = "vmnodes"
1394

    
1395
# Instance status
1396
INSTST_RUNNING = _constants.INSTST_RUNNING
1397
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1398
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1399
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1400
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1401
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1402
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1403
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1404
INSTST_ALL = _constants.INSTST_ALL
1405

    
1406
# Admin states
1407
ADMINST_UP = _constants.ADMINST_UP
1408
ADMINST_DOWN = _constants.ADMINST_DOWN
1409
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1410
ADMINST_ALL = _constants.ADMINST_ALL
1411

    
1412
# Node roles
1413
NR_REGULAR = _constants.NR_REGULAR
1414
NR_MASTER = _constants.NR_MASTER
1415
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1416
NR_DRAINED = _constants.NR_DRAINED
1417
NR_OFFLINE = _constants.NR_OFFLINE
1418
NR_ALL = _constants.NR_ALL
1419

    
1420
# SSL certificate check constants (in days)
1421
SSL_CERT_EXPIRATION_WARN = 30
1422
SSL_CERT_EXPIRATION_ERROR = 7
1423

    
1424
# Allocator framework constants
1425
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1426
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1427
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1428
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1429

    
1430
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1431
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1432
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1433
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1434
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1435
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1436

    
1437
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1438
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1439

    
1440
# Node evacuation
1441
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1442
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1443
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1444
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1445

    
1446
# Job queue
1447
JOB_QUEUE_VERSION = 1
1448
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1449
JOB_QUEUE_FILES_PERMS = 0640
1450

    
1451
JOB_ID_TEMPLATE = r"\d+"
1452
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1453

    
1454
# unchanged job return
1455
JOB_NOTCHANGED = "nochange"
1456

    
1457
# Job status
1458
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1459
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1460
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1461
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1462
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1463
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1464
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1465
JOBS_PENDING = _constants.JOBS_PENDING
1466
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1467
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1468

    
1469
# OpCode status
1470
# not yet finalized
1471
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1472
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1473
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1474
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1475
# finalized
1476
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1477
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1478
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1479
OPS_FINALIZED = _constants.OPS_FINALIZED
1480

    
1481
# OpCode priority
1482
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1483
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1484
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1485
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1486
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1487
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1488
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1489

    
1490
# Lock recalculate mode
1491
LOCKS_REPLACE = "replace"
1492
LOCKS_APPEND = "append"
1493

    
1494
# Lock timeout (sum) before we should go into blocking acquire (still
1495
# can be reset by priority change); computed as max time (10 hours)
1496
# before we should actually go into blocking acquire given that we
1497
# start from default priority level; in seconds
1498
# TODO
1499
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1500
LOCK_ATTEMPTS_MAXWAIT = 15.0
1501
LOCK_ATTEMPTS_MINWAIT = 1.0
1502

    
1503
# Execution log types
1504
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1505
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1506
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1507

    
1508
# /etc/hosts modification
1509
ETC_HOSTS_ADD = "add"
1510
ETC_HOSTS_REMOVE = "remove"
1511

    
1512
# Job queue test
1513
JQT_MSGPREFIX = "TESTMSG="
1514
JQT_EXPANDNAMES = "expandnames"
1515
JQT_EXEC = "exec"
1516
JQT_LOGMSG = "logmsg"
1517
JQT_STARTMSG = "startmsg"
1518
JQT_ALL = compat.UniqueFrozenset([
1519
  JQT_EXPANDNAMES,
1520
  JQT_EXEC,
1521
  JQT_LOGMSG,
1522
  JQT_STARTMSG,
1523
  ])
1524

    
1525
# Query resources
1526
QR_CLUSTER = "cluster"
1527
QR_INSTANCE = "instance"
1528
QR_NODE = "node"
1529
QR_LOCK = "lock"
1530
QR_GROUP = "group"
1531
QR_OS = "os"
1532
QR_JOB = "job"
1533
QR_EXPORT = "export"
1534
QR_NETWORK = "network"
1535
QR_EXTSTORAGE = "extstorage"
1536

    
1537
#: List of resources which can be queried using L{opcodes.OpQuery}
1538
QR_VIA_OP = compat.UniqueFrozenset([
1539
  QR_CLUSTER,
1540
  QR_INSTANCE,
1541
  QR_NODE,
1542
  QR_GROUP,
1543
  QR_OS,
1544
  QR_EXPORT,
1545
  QR_NETWORK,
1546
  QR_EXTSTORAGE,
1547
  ])
1548

    
1549
#: List of resources which can be queried using Local UniX Interface
1550
QR_VIA_LUXI = QR_VIA_OP.union([
1551
  QR_LOCK,
1552
  QR_JOB,
1553
  ])
1554

    
1555
#: List of resources which can be queried using RAPI
1556
QR_VIA_RAPI = QR_VIA_LUXI
1557

    
1558
# Query field types
1559
QFT_UNKNOWN = "unknown"
1560
QFT_TEXT = "text"
1561
QFT_BOOL = "bool"
1562
QFT_NUMBER = "number"
1563
QFT_UNIT = "unit"
1564
QFT_TIMESTAMP = "timestamp"
1565
QFT_OTHER = "other"
1566

    
1567
#: All query field types
1568
QFT_ALL = compat.UniqueFrozenset([
1569
  QFT_UNKNOWN,
1570
  QFT_TEXT,
1571
  QFT_BOOL,
1572
  QFT_NUMBER,
1573
  QFT_UNIT,
1574
  QFT_TIMESTAMP,
1575
  QFT_OTHER,
1576
  ])
1577

    
1578
# Query result field status (don't change or reuse values as they're used by
1579
# clients)
1580
#: Normal field status
1581
RS_NORMAL = 0
1582
#: Unknown field
1583
RS_UNKNOWN = 1
1584
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1585
RS_NODATA = 2
1586
#: Value unavailable/unsupported for item; if this field is supported
1587
#: but we cannot get the data for the moment, RS_NODATA or
1588
#: RS_OFFLINE should be used
1589
RS_UNAVAIL = 3
1590
#: Resource marked offline
1591
RS_OFFLINE = 4
1592

    
1593
RS_ALL = compat.UniqueFrozenset([
1594
  RS_NORMAL,
1595
  RS_UNKNOWN,
1596
  RS_NODATA,
1597
  RS_UNAVAIL,
1598
  RS_OFFLINE,
1599
  ])
1600

    
1601
#: Dictionary with special field cases and their verbose/terse formatting
1602
RSS_DESCRIPTION = {
1603
  RS_UNKNOWN: ("(unknown)", "??"),
1604
  RS_NODATA: ("(nodata)", "?"),
1605
  RS_OFFLINE: ("(offline)", "*"),
1606
  RS_UNAVAIL: ("(unavail)", "-"),
1607
  }
1608

    
1609
# max dynamic devices
1610
MAX_NICS = 8
1611
MAX_DISKS = 16
1612

    
1613
# SSCONF file prefix
1614
SSCONF_FILEPREFIX = "ssconf_"
1615
# SSCONF keys
1616
SS_CLUSTER_NAME = "cluster_name"
1617
SS_CLUSTER_TAGS = "cluster_tags"
1618
SS_FILE_STORAGE_DIR = "file_storage_dir"
1619
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
1620
SS_MASTER_CANDIDATES = "master_candidates"
1621
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
1622
SS_MASTER_IP = "master_ip"
1623
SS_MASTER_NETDEV = "master_netdev"
1624
SS_MASTER_NETMASK = "master_netmask"
1625
SS_MASTER_NODE = "master_node"
1626
SS_NODE_LIST = "node_list"
1627
SS_NODE_PRIMARY_IPS = "node_primary_ips"
1628
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
1629
SS_OFFLINE_NODES = "offline_nodes"
1630
SS_ONLINE_NODES = "online_nodes"
1631
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
1632
SS_INSTANCE_LIST = "instance_list"
1633
SS_RELEASE_VERSION = "release_version"
1634
SS_HYPERVISOR_LIST = "hypervisor_list"
1635
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
1636
SS_UID_POOL = "uid_pool"
1637
SS_NODEGROUPS = "nodegroups"
1638
SS_NETWORKS = "networks"
1639

    
1640
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1641
SS_HVPARAMS_PREF = "hvparams_"
1642

    
1643
# Hvparams keys:
1644
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1645
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1646
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1647
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1648
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1649
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1650

    
1651
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1652
  SS_HVPARAMS_XEN_PVM,
1653
  SS_HVPARAMS_XEN_FAKE,
1654
  SS_HVPARAMS_XEN_HVM,
1655
  SS_HVPARAMS_XEN_KVM,
1656
  SS_HVPARAMS_XEN_CHROOT,
1657
  SS_HVPARAMS_XEN_LXC,
1658
  ])
1659

    
1660
SS_FILE_PERMS = 0444
1661

    
1662
# cluster wide default parameters
1663
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1664

    
1665
HVC_DEFAULTS = {
1666
  HT_XEN_PVM: {
1667
    HV_USE_BOOTLOADER: False,
1668
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
1669
    HV_BOOTLOADER_ARGS: "",
1670
    HV_KERNEL_PATH: XEN_KERNEL,
1671
    HV_INITRD_PATH: "",
1672
    HV_ROOT_PATH: "/dev/xvda1",
1673
    HV_KERNEL_ARGS: "ro",
1674
    HV_MIGRATION_PORT: 8002,
1675
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1676
    HV_BLOCKDEV_PREFIX: "sd",
1677
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1678
    HV_CPU_MASK: CPU_PINNING_ALL,
1679
    HV_CPU_CAP: 0,
1680
    HV_CPU_WEIGHT: 256,
1681
    HV_VIF_SCRIPT: "",
1682
    HV_XEN_CMD: XEN_CMD_XM,
1683
    HV_XEN_CPUID: "",
1684
    HV_SOUNDHW: "",
1685
    },
1686
  HT_XEN_HVM: {
1687
    HV_BOOT_ORDER: "cd",
1688
    HV_CDROM_IMAGE_PATH: "",
1689
    HV_NIC_TYPE: HT_NIC_RTL8139,
1690
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1691
    HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY,
1692
    HV_VNC_PASSWORD_FILE: pathutils.VNC_PASSWORD_FILE,
1693
    HV_ACPI: True,
1694
    HV_PAE: True,
1695
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
1696
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
1697
    HV_MIGRATION_PORT: 8002,
1698
    HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
1699
    HV_USE_LOCALTIME: False,
1700
    HV_BLOCKDEV_PREFIX: "hd",
1701
    HV_PASSTHROUGH: "",
1702
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1703
    HV_CPU_MASK: CPU_PINNING_ALL,
1704
    HV_CPU_CAP: 0,
1705
    HV_CPU_WEIGHT: 256,
1706
    HV_VIF_TYPE: HT_HVM_VIF_IOEMU,
1707
    HV_VIF_SCRIPT: "",
1708
    HV_VIRIDIAN: False,
1709
    HV_XEN_CMD: XEN_CMD_XM,
1710
    HV_XEN_CPUID: "",
1711
    HV_SOUNDHW: "",
1712
    },
1713
  HT_KVM: {
1714
    HV_KVM_PATH: KVM_PATH,
1715
    HV_KERNEL_PATH: KVM_KERNEL,
1716
    HV_INITRD_PATH: "",
1717
    HV_KERNEL_ARGS: "ro",
1718
    HV_ROOT_PATH: "/dev/vda1",
1719
    HV_ACPI: True,
1720
    HV_SERIAL_CONSOLE: True,
1721
    HV_SERIAL_SPEED: 38400,
1722
    HV_VNC_BIND_ADDRESS: "",
1723
    HV_VNC_TLS: False,
1724
    HV_VNC_X509: "",
1725
    HV_VNC_X509_VERIFY: False,
1726
    HV_VNC_PASSWORD_FILE: "",
1727
    HV_KVM_SPICE_BIND: "",
1728
    HV_KVM_SPICE_IP_VERSION: IFACE_NO_IP_VERSION_SPECIFIED,
1729
    HV_KVM_SPICE_PASSWORD_FILE: "",
1730
    HV_KVM_SPICE_LOSSLESS_IMG_COMPR: "",
1731
    HV_KVM_SPICE_JPEG_IMG_COMPR: "",
1732
    HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: "",
1733
    HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: "",
1734
    HV_KVM_SPICE_AUDIO_COMPR: True,
1735
    HV_KVM_SPICE_USE_TLS: False,
1736
    HV_KVM_SPICE_TLS_CIPHERS: OPENSSL_CIPHERS,
1737
    HV_KVM_SPICE_USE_VDAGENT: True,
1738
    HV_KVM_FLOPPY_IMAGE_PATH: "",
1739
    HV_CDROM_IMAGE_PATH: "",
1740
    HV_KVM_CDROM2_IMAGE_PATH: "",
1741
    HV_BOOT_ORDER: HT_BO_DISK,
1742
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
1743
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
1744
    HV_KVM_CDROM_DISK_TYPE: "",
1745
    HV_USB_MOUSE: "",
1746
    HV_KEYMAP: "",
1747
    HV_MIGRATION_PORT: 8102,
1748
    HV_MIGRATION_BANDWIDTH: 32, # MiB/s
1749
    HV_MIGRATION_DOWNTIME: 30,  # ms
1750
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1751
    HV_USE_LOCALTIME: False,
1752
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
1753
    HV_SECURITY_MODEL: HT_SM_NONE,
1754
    HV_SECURITY_DOMAIN: "",
1755
    HV_KVM_FLAG: "",
1756
    HV_VHOST_NET: False,
1757
    HV_KVM_USE_CHROOT: False,
1758
    HV_MEM_PATH: "",
1759
    HV_REBOOT_BEHAVIOR: INSTANCE_REBOOT_ALLOWED,
1760
    HV_CPU_MASK: CPU_PINNING_ALL,
1761
    HV_CPU_TYPE: "",
1762
    HV_CPU_CORES: 0,
1763
    HV_CPU_THREADS: 0,
1764
    HV_CPU_SOCKETS: 0,
1765
    HV_SOUNDHW: "",
1766
    HV_USB_DEVICES: "",
1767
    HV_VGA: "",
1768
    HV_KVM_EXTRA: "",
1769
    HV_KVM_MACHINE_VERSION: "",
1770
    HV_VNET_HDR: True,
1771
    },
1772
  HT_FAKE: {
1773
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
1774
  },
1775
  HT_CHROOT: {
1776
    HV_INIT_SCRIPT: "/ganeti-chroot",
1777
    },
1778
  HT_LXC: {
1779
    HV_CPU_MASK: "",
1780
    },
1781
  }
1782

    
1783
HVC_GLOBALS = compat.UniqueFrozenset([
1784
  HV_MIGRATION_PORT,
1785
  HV_MIGRATION_BANDWIDTH,
1786
  HV_MIGRATION_MODE,
1787
  HV_XEN_CMD,
1788
  ])
1789

    
1790
BEC_DEFAULTS = {
1791
  BE_MINMEM: 128,
1792
  BE_MAXMEM: 128,
1793
  BE_VCPUS: 1,
1794
  BE_AUTO_BALANCE: True,
1795
  BE_ALWAYS_FAILOVER: False,
1796
  BE_SPINDLE_USE: 1,
1797
  }
1798

    
1799
NDC_DEFAULTS = {
1800
  ND_OOB_PROGRAM: "",
1801
  ND_SPINDLE_COUNT: 1,
1802
  ND_EXCLUSIVE_STORAGE: False,
1803
  ND_OVS: False,
1804
  ND_OVS_NAME: DEFAULT_OVS,
1805
  ND_OVS_LINK: ""
1806
  }
1807

    
1808
NDC_GLOBALS = compat.UniqueFrozenset([
1809
  ND_EXCLUSIVE_STORAGE,
1810
  ])
1811

    
1812
DISK_LD_DEFAULTS = {
1813
  DT_DRBD8: {
1814
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1815
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1816
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1817
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1818
    LDP_DISK_CUSTOM: "",
1819
    LDP_NET_CUSTOM: "",
1820
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1821
    LDP_DYNAMIC_RESYNC: False,
1822

    
1823
    # The default values for the DRBD dynamic resync speed algorithm
1824
    # are taken from the drbsetup 8.3.11 man page, except for
1825
    # c-plan-ahead (that we don't need to set to 0, because we have a
1826
    # separate option to enable it) and for c-max-rate, that we cap to
1827
    # the default value for the static resync rate.
1828
    LDP_PLAN_AHEAD: 20, # ds
1829
    LDP_FILL_TARGET: 0, # sectors
1830
    LDP_DELAY_TARGET: 1, # ds
1831
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
1832
    LDP_MIN_RATE: 4 * 1024, # KiB/s
1833
    },
1834
  DT_PLAIN: {
1835
    LDP_STRIPES: _constants.LVM_STRIPECOUNT
1836
    },
1837
  DT_FILE: {},
1838
  DT_SHARED_FILE: {},
1839
  DT_BLOCK: {},
1840
  DT_RBD: {
1841
    LDP_POOL: "rbd",
1842
    LDP_ACCESS: DISK_KERNELSPACE,
1843
    },
1844
  DT_EXT: {},
1845
  }
1846

    
1847
# readability shortcuts
1848
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1849
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1850

    
1851
DISK_DT_DEFAULTS = {
1852
  DT_PLAIN: {
1853
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1854
    },
1855
  DT_DRBD8: {
1856
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1857
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1858
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1859
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1860
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1861
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1862
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1863
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1864
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1865
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1866
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1867
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1868
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1869
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1870
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1871
    },
1872
  DT_DISKLESS: {},
1873
  DT_FILE: {},
1874
  DT_SHARED_FILE: {},
1875
  DT_BLOCK: {},
1876
  DT_RBD: {
1877
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
1878
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
1879
    },
1880
  DT_EXT: {},
1881
  }
1882

    
1883
# we don't want to export the shortcuts
1884
del _LV_DEFAULTS, _DRBD_DEFAULTS
1885

    
1886
NICC_DEFAULTS = {
1887
  NIC_MODE: NIC_MODE_BRIDGED,
1888
  NIC_LINK: DEFAULT_BRIDGE,
1889
  NIC_VLAN: VALUE_HS_NOTHING,
1890
  }
1891

    
1892
# All of the following values are quite arbitrarily - there are no
1893
# "good" defaults, these must be customised per-site
1894
ISPECS_MINMAX_DEFAULTS = {
1895
  ISPECS_MIN: {
1896
    ISPEC_MEM_SIZE: 128,
1897
    ISPEC_CPU_COUNT: 1,
1898
    ISPEC_DISK_COUNT: 1,
1899
    ISPEC_DISK_SIZE: 1024,
1900
    ISPEC_NIC_COUNT: 1,
1901
    ISPEC_SPINDLE_USE: 1,
1902
    },
1903
  ISPECS_MAX: {
1904
    ISPEC_MEM_SIZE: 32768,
1905
    ISPEC_CPU_COUNT: 8,
1906
    ISPEC_DISK_COUNT: MAX_DISKS,
1907
    ISPEC_DISK_SIZE: 1024 * 1024,
1908
    ISPEC_NIC_COUNT: MAX_NICS,
1909
    ISPEC_SPINDLE_USE: 12,
1910
    },
1911
  }
1912
IPOLICY_DEFAULTS = {
1913
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
1914
  ISPECS_STD: {
1915
    ISPEC_MEM_SIZE: 128,
1916
    ISPEC_CPU_COUNT: 1,
1917
    ISPEC_DISK_COUNT: 1,
1918
    ISPEC_DISK_SIZE: 1024,
1919
    ISPEC_NIC_COUNT: 1,
1920
    ISPEC_SPINDLE_USE: 1,
1921
    },
1922
  IPOLICY_DTS: list(DISK_TEMPLATES),
1923
  IPOLICY_VCPU_RATIO: 4.0,
1924
  IPOLICY_SPINDLE_RATIO: 32.0,
1925
  }
1926

    
1927
MASTER_POOL_SIZE_DEFAULT = 10
1928

    
1929
# Exclusive storage:
1930
# Error margin used to compare physical disks
1931
PART_MARGIN = .01
1932
# Space reserved when creating instance disks
1933
PART_RESERVED = .02
1934

    
1935
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
1936

    
1937
CONFD_REQ_PING = _constants.CONFD_REQ_PING
1938
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
1939
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
1940
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
1941
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
1942
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
1943
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
1944
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
1945
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
1946
CONFD_REQS = _constants.CONFD_REQS
1947

    
1948
# Confd request query fields. These are used to narrow down queries.
1949
# These must be strings rather than integers, because json-encoding
1950
# converts them to strings anyway, as they're used as dict-keys.
1951
CONFD_REQQ_LINK = _constants.CONFD_REQQ_LINK
1952
CONFD_REQQ_IP = _constants.CONFD_REQQ_IP
1953
CONFD_REQQ_IPLIST = _constants.CONFD_REQQ_IPLIST
1954
CONFD_REQQ_FIELDS = _constants.CONFD_REQQ_FIELDS
1955

    
1956
# FIXME: perhaps update code that uses these constants to deal with
1957
# integers instead of strings
1958
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
1959
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
1960
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
1961

    
1962
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
1963
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
1964
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
1965
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
1966

    
1967
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
1968
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
1969
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
1970
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
1971
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
1972

    
1973
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
1974
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
1975
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
1976

    
1977
# Each request is "salted" by the current timestamp.
1978
# This constants decides how many seconds of skew to accept.
1979
# TODO: make this a default and allow the value to be more configurable
1980
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
1981

    
1982
# When we haven't reloaded the config for more than this amount of
1983
# seconds, we force a test to see if inotify is betraying us. Using a
1984
# prime number to ensure we get less chance of 'same wakeup' with
1985
# other processes.
1986
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
1987

    
1988
# If we receive more than one update in this amount of microseconds,
1989
# we move to polling every RATELIMIT seconds, rather than relying on
1990
# inotify, to be able to serve more requests.
1991
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
1992

    
1993
# Magic number prepended to all confd queries.
1994
# This allows us to distinguish different types of confd protocols and handle
1995
# them. For example by changing this we can move the whole payload to be
1996
# compressed, or move away from json.
1997
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
1998

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

    
2004
# Timeout in seconds to expire pending query request in the confd client
2005
# library. We don't actually expect any answer more than 10 seconds after we
2006
# sent a request.
2007
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
2008

    
2009
# Maximum UDP datagram size.
2010
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
2011
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
2012
#   (assuming we can't use jumbo frames)
2013
# We just set this to 60K, which should be enough
2014
MAX_UDP_DATA_SIZE = 61440
2015

    
2016
# User-id pool minimum/maximum acceptable user-ids.
2017
UIDPOOL_UID_MIN = 0
2018
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2019

    
2020
# Name or path of the pgrep command
2021
PGREP = "pgrep"
2022

    
2023
# Name of the node group that gets created at cluster init or upgrade
2024
INITIAL_NODE_GROUP_NAME = "default"
2025

    
2026
# Possible values for NodeGroup.alloc_policy
2027
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2028
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2029
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2030
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2031

    
2032
# Temporary external/shared storage parameters
2033
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2034

    
2035
# qemu-img path, required for ovfconverter
2036
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2037

    
2038
# Whether htools was enabled at compilation time
2039
HTOOLS = _constants.HTOOLS
2040
# The hail iallocator
2041
IALLOC_HAIL = "hail"
2042

    
2043
# Fake opcodes for functions that have hooks attached to them via
2044
# backend.RunLocalHooks
2045
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2046
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2047

    
2048
# SSH key types
2049
SSHK_RSA = "rsa"
2050
SSHK_DSA = "dsa"
2051
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2052

    
2053
# SSH authorized key types
2054
SSHAK_RSA = "ssh-rsa"
2055
SSHAK_DSS = "ssh-dss"
2056
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2057

    
2058
# SSH setup
2059
SSHS_CLUSTER_NAME = "cluster_name"
2060
SSHS_SSH_HOST_KEY = "ssh_host_key"
2061
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2062
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2063

    
2064
#: Key files for SSH daemon
2065
SSH_DAEMON_KEYFILES = {
2066
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2067
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2068
  }
2069

    
2070
# Node daemon setup
2071
NDS_CLUSTER_NAME = "cluster_name"
2072
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2073
NDS_SSCONF = "ssconf"
2074
NDS_START_NODE_DAEMON = "start_node_daemon"
2075

    
2076
# Path generating random UUID
2077
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2078

    
2079
# Regex string for verifying a UUID
2080
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2081

    
2082
# Auto-repair tag prefixes
2083
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2084
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2085
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2086
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2087
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2088

    
2089
# Auto-repair levels
2090
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2091
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2092
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2093
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2094
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2095

    
2096
# Auto-repair results
2097
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2098
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2099
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2100
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2101

    
2102
# The version identifier for builtin data collectors
2103
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2104

    
2105
# The reason trail opcode parameter name
2106
OPCODE_REASON = _constants.OPCODE_REASON
2107

    
2108
# The source reasons for the execution of an OpCode
2109
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2110
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2111
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2112
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2113
OPCODE_REASON_SRC_USER = "gnt:user"
2114

    
2115
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2116
  OPCODE_REASON_SRC_CLIENT,
2117
  OPCODE_REASON_SRC_NODED,
2118
  OPCODE_REASON_SRC_OPCODE,
2119
  OPCODE_REASON_SRC_RLIB2,
2120
  OPCODE_REASON_SRC_USER,
2121
  ])
2122

    
2123
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2124

    
2125
# CPU load collector variables
2126
STAT_FILE = _constants.STAT_FILE
2127
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2128
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2129

    
2130
# Mond's variable for periodical data collection
2131
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2132

    
2133
# MonD's latest API version
2134
MOND_LATEST_API_VERSION = 1
2135

    
2136
# Timeouts for upgrades
2137

    
2138
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2139
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2140

    
2141
# Do not re-export imported modules
2142
del re, _vcsversion, _constants, socket, pathutils, compat
2143

    
2144

    
2145
ALLOCATABLE_KEY = "allocatable"
2146
FAILED_KEY = "failed"