Statistics
| Branch: | Tag: | Revision:

root / lib / constants.py @ 0412a686

History | View | Annotate | Download (62 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_SEP = _constants.CPU_PINNING_SEP
76
CPU_PINNING_ALL = _constants.CPU_PINNING_ALL
77
CPU_PINNING_ALL_VAL = _constants.CPU_PINNING_ALL_VAL
78
CPU_PINNING_OFF = _constants.CPU_PINNING_OFF
79

    
80
CPU_PINNING_ALL_XEN = _constants.CPU_PINNING_ALL_XEN
81

    
82
CPU_PINNING_ALL_KVM = _constants.CPU_PINNING_ALL_KVM
83

    
84
DD_CMD = _constants.DD_CMD
85
MAX_WIPE_CHUNK = _constants.MAX_WIPE_CHUNK
86
MIN_WIPE_CHUNK_PERCENT = _constants.MIN_WIPE_CHUNK_PERCENT
87

    
88
RUN_DIRS_MODE = _constants.RUN_DIRS_MODE
89
SECURE_DIR_MODE = _constants.SECURE_DIR_MODE
90
SECURE_FILE_MODE = _constants.SECURE_FILE_MODE
91
ADOPTABLE_BLOCKDEV_ROOT = _constants.ADOPTABLE_BLOCKDEV_ROOT
92
ENABLE_CONFD = _constants.ENABLE_CONFD
93
ENABLE_MOND = _constants.ENABLE_MOND
94
ENABLE_SPLIT_QUERY = _constants.ENABLE_SPLIT_QUERY
95
ENABLE_RESTRICTED_COMMANDS = _constants.ENABLE_RESTRICTED_COMMANDS
96

    
97
# SSH constants
98
SSH = _constants.SSH
99
SCP = _constants.SCP
100

    
101
NODED = _constants.NODED
102
CONFD = _constants.CONFD
103
LUXID = _constants.LUXID
104
RAPI = _constants.RAPI
105
MASTERD = _constants.MASTERD
106
MOND = _constants.MOND
107

    
108
DAEMONS = _constants.DAEMONS
109

    
110
DAEMONS_PORTS = _constants.DAEMONS_PORTS
111

    
112
DEFAULT_NODED_PORT = _constants.DEFAULT_NODED_PORT
113
DEFAULT_CONFD_PORT = _constants.DEFAULT_CONFD_PORT
114
DEFAULT_MOND_PORT = _constants.DEFAULT_MOND_PORT
115
DEFAULT_RAPI_PORT = _constants.DEFAULT_RAPI_PORT
116

    
117
FIRST_DRBD_PORT = _constants.FIRST_DRBD_PORT
118
LAST_DRBD_PORT = _constants.LAST_DRBD_PORT
119

    
120
DAEMONS_LOGBASE = _constants.DAEMONS_LOGBASE
121

    
122
DAEMONS_LOGFILES = \
123
    dict((daemon, pathutils.GetLogFilename(DAEMONS_LOGBASE[daemon]))
124
         for daemon in DAEMONS_LOGBASE)
125

    
126
# Some daemons might require more than one logfile.
127
# Specifically, right now only the Haskell http library "snap", used by the
128
# monitoring daemon, requires multiple log files.
129

    
130
# These are the only valid reasons for having an extra logfile
131
EXTRA_LOGREASON_ACCESS = "access"
132
EXTRA_LOGREASON_ERROR = "error"
133

    
134
VALID_EXTRA_LOGREASONS = compat.UniqueFrozenset([
135
  EXTRA_LOGREASON_ACCESS,
136
  EXTRA_LOGREASON_ERROR,
137
  ])
138

    
139
# These are the extra logfiles, grouped by daemon
140
DAEMONS_EXTRA_LOGBASE = {
141
  MOND: {
142
    EXTRA_LOGREASON_ACCESS: _constants.EXTRA_LOGREASON_ACCESS,
143
    EXTRA_LOGREASON_ERROR: _constants.EXTRA_LOGREASON_ERROR,
144
    }
145
  }
146

    
147
DAEMONS_EXTRA_LOGFILES = \
148
  dict((daemon, dict((extra,
149
       pathutils.GetLogFilename(DAEMONS_EXTRA_LOGBASE[daemon][extra]))
150
       for extra in DAEMONS_EXTRA_LOGBASE[daemon]))
151
         for daemon in DAEMONS_EXTRA_LOGBASE)
152

    
153
DEV_CONSOLE = _constants.DEV_CONSOLE
154

    
155
PROC_MOUNTS = _constants.PROC_MOUNTS
156

    
157
LUXI_EOM = _constants.LUXI_EOM
158
LUXI_VERSION = _constants.LUXI_VERSION
159
LUXI_OVERRIDE = _constants.LUXI_OVERRIDE
160
LUXI_OVERRIDE_MASTER = _constants.LUXI_OVERRIDE_MASTER
161
LUXI_OVERRIDE_QUERY = _constants.LUXI_OVERRIDE_QUERY
162
# one of "no", "yes", "only"
163
SYSLOG_USAGE = _constants.SYSLOG_USAGE
164
SYSLOG_NO = _constants.SYSLOG_NO
165
SYSLOG_YES = _constants.SYSLOG_YES
166
SYSLOG_ONLY = _constants.SYSLOG_ONLY
167
SYSLOG_SOCKET = _constants.SYSLOG_SOCKET
168

    
169
EXPORT_CONF_FILE = _constants.EXPORT_CONF_FILE
170

    
171
XEN_BOOTLOADER = _constants.XEN_BOOTLOADER
172
XEN_KERNEL = _constants.XEN_KERNEL
173
XEN_INITRD = _constants.XEN_INITRD
174
XEN_CMD_XM = _constants.XEN_CMD_XM
175
XEN_CMD_XL = _constants.XEN_CMD_XL
176
KNOWN_XEN_COMMANDS = _constants.KNOWN_XEN_COMMANDS
177

    
178
# When the Xen toolstack used is "xl", live migration requires the source host
179
# to connect to the target host via ssh (xl runs this command). We need to pass
180
# the command xl runs some extra info so that it can use Ganeti's key
181
# verification and not fail. Note that this string is incomplete: it must be
182
# filled with the cluster name before being used.
183
XL_SSH_CMD = ("ssh -l %s -oGlobalKnownHostsFile=%s"
184
              " -oUserKnownHostsFile=/dev/null"
185
              " -oCheckHostIp=no -oStrictHostKeyChecking=yes"
186
              " -oHostKeyAlias=%%s") % (SSH_LOGIN_USER,
187
                                        pathutils.SSH_KNOWN_HOSTS_FILE)
188

    
189
KVM_PATH = _constants.KVM_PATH
190
KVM_KERNEL = _constants.KVM_KERNEL
191
SOCAT_PATH = _constants.SOCAT_PATH
192
SOCAT_USE_ESCAPE = _constants.SOCAT_USE_ESCAPE
193
SOCAT_USE_COMPRESS = _constants.SOCAT_USE_COMPRESS
194
SOCAT_ESCAPE_CODE = _constants.SOCAT_ESCAPE_CODE
195

    
196
#: Console as SSH command
197
CONS_SSH = "ssh"
198

    
199
#: Console as VNC server
200
CONS_VNC = "vnc"
201

    
202
#: Console as SPICE server
203
CONS_SPICE = "spice"
204

    
205
#: Display a message for console access
206
CONS_MESSAGE = "msg"
207

    
208
#: All console types
209
CONS_ALL = compat.UniqueFrozenset([
210
  CONS_SSH,
211
  CONS_VNC,
212
  CONS_SPICE,
213
  CONS_MESSAGE,
214
  ])
215

    
216
# For RSA keys more bits are better, but they also make operations more
217
# expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year
218
# 2010 on.
219
RSA_KEY_BITS = 2048
220

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

    
229
# Digest used to sign certificates ("openssl x509" uses SHA1 by default)
230
X509_CERT_SIGN_DIGEST = "SHA1"
231

    
232
# Default validity of certificates in days
233
X509_CERT_DEFAULT_VALIDITY = 365 * 5
234

    
235
# commonName (CN) used in certificates
236
X509_CERT_CN = "ganeti.example.com"
237

    
238
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"
239

    
240
# Import/export daemon mode
241
IEM_IMPORT = "import"
242
IEM_EXPORT = "export"
243

    
244
# Import/export transport compression
245
IEC_NONE = "none"
246
IEC_GZIP = "gzip"
247
IEC_ALL = compat.UniqueFrozenset([
248
  IEC_NONE,
249
  IEC_GZIP,
250
  ])
251

    
252
IE_CUSTOM_SIZE = "fd"
253

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

    
256
# Import/export I/O
257
# Direct file I/O, equivalent to a shell's I/O redirection using '<' or '>'
258
IEIO_FILE = "file"
259
# Raw block device I/O using "dd"
260
IEIO_RAW_DISK = "raw"
261
# OS definition import/export script
262
IEIO_SCRIPT = "script"
263

    
264
VALUE_DEFAULT = "default"
265
VALUE_AUTO = "auto"
266
VALUE_GENERATE = "generate"
267
VALUE_NONE = "none"
268
VALUE_TRUE = "true"
269
VALUE_FALSE = "false"
270
VALUE_HS_NOTHING = {"Nothing": None}
271

    
272

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

    
276
# hooks-related constants
277
HOOKS_PHASE_PRE = "pre"
278
HOOKS_PHASE_POST = "post"
279
HOOKS_NAME_CFGUPDATE = "config-update"
280
HOOKS_NAME_WATCHER = "watcher"
281
HOOKS_VERSION = 2
282
HOOKS_PATH = "/sbin:/bin:/usr/sbin:/usr/bin"
283

    
284
# hooks subject type (what object type does the LU deal with)
285
HTYPE_CLUSTER = "CLUSTER"
286
HTYPE_NODE = "NODE"
287
HTYPE_GROUP = "GROUP"
288
HTYPE_INSTANCE = "INSTANCE"
289
HTYPE_NETWORK = "NETWORK"
290

    
291
HKR_SKIP = 0
292
HKR_FAIL = 1
293
HKR_SUCCESS = 2
294

    
295
# Storage types
296
ST_BLOCK = _constants.ST_BLOCK
297
ST_DISKLESS = _constants.ST_DISKLESS
298
ST_EXT = _constants.ST_EXT
299
ST_FILE = _constants.ST_FILE
300
ST_LVM_PV = _constants.ST_LVM_PV
301
ST_LVM_VG = _constants.ST_LVM_VG
302
ST_RADOS = _constants.ST_RADOS
303
STORAGE_TYPES = _constants.STORAGE_TYPES
304

    
305
# the set of storage types for which storage reporting is available
306
# FIXME: Remove this, once storage reporting is available for all types.
307
STS_REPORT = compat.UniqueFrozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG])
308

    
309
# Storage fields
310
# first two are valid in LU context only, not passed to backend
311
SF_NODE = _constants.SF_NODE
312
SF_TYPE = _constants.SF_TYPE
313
# and the rest are valid in backend
314
SF_NAME = _constants.SF_NAME
315
SF_SIZE = _constants.SF_SIZE
316
SF_FREE = _constants.SF_FREE
317
SF_USED = _constants.SF_USED
318
SF_ALLOCATABLE = _constants.SF_ALLOCATABLE
319

    
320
# Storage operations
321
SO_FIX_CONSISTENCY = "fix-consistency"
322

    
323
# Available fields per storage type
324
VALID_STORAGE_FIELDS = compat.UniqueFrozenset([
325
  SF_NODE,
326
  SF_NAME,
327
  SF_TYPE,
328
  SF_SIZE,
329
  SF_USED,
330
  SF_FREE,
331
  SF_ALLOCATABLE,
332
  ])
333

    
334
MODIFIABLE_STORAGE_FIELDS = {
335
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
336
  }
337

    
338
LDS_OKAY = _constants.LDS_OKAY
339
LDS_UNKNOWN = _constants.LDS_UNKNOWN
340
LDS_FAULTY = _constants.LDS_FAULTY
341
LDS_NAMES = _constants.LDS_NAMES
342
VALID_STORAGE_OPERATIONS = {
343
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
344
  }
345

    
346
# Volume fields
347
VF_DEV = "dev"
348
VF_INSTANCE = "instance"
349
VF_NAME = "name"
350
VF_NODE = "node"
351
VF_PHYS = "phys"
352
VF_SIZE = "size"
353
VF_VG = "vg"
354

    
355
# disk template types
356
DT_BLOCK = _constants.DT_BLOCK
357
DT_DISKLESS = _constants.DT_DISKLESS
358
DT_DRBD8 = _constants.DT_DRBD8
359
DT_EXT = _constants.DT_EXT
360
DT_FILE = _constants.DT_FILE
361
DT_PLAIN = _constants.DT_PLAIN
362
DT_RBD = _constants.DT_RBD
363
DT_SHARED_FILE = _constants.DT_SHARED_FILE
364
DISK_TEMPLATE_PREFERENCE = _constants.DISK_TEMPLATE_PREFERENCE
365
DISK_TEMPLATES = _constants.DISK_TEMPLATES
366
DEFAULT_ENABLED_DISK_TEMPLATES = _constants.DEFAULT_ENABLED_DISK_TEMPLATES
367

    
368
# mapping of disk templates to storage types
369
MAP_DISK_TEMPLATE_STORAGE_TYPE = {
370
  DT_BLOCK: ST_BLOCK,
371
  DT_DISKLESS: ST_DISKLESS,
372
  DT_DRBD8: ST_LVM_VG,
373
  DT_EXT: ST_EXT,
374
  DT_FILE: ST_FILE,
375
  DT_PLAIN: ST_LVM_VG,
376
  DT_RBD: ST_RADOS,
377
  DT_SHARED_FILE: ST_FILE,
378
  }
379

    
380

    
381
# drbd constants
382
DRBD_HMAC_ALG = "md5"
383
DRBD_DEFAULT_NET_PROTOCOL = "C"
384
DRBD_MIGRATION_NET_PROTOCOL = "C"
385
DRBD_STATUS_FILE = "/proc/drbd"
386

    
387
#: Size of DRBD meta block device
388
DRBD_META_SIZE = 128
389

    
390
DTS_INT_MIRROR = _constants.DTS_INT_MIRROR
391
DTS_EXT_MIRROR = _constants.DTS_EXT_MIRROR
392
DTS_NOT_LVM = _constants.DTS_NOT_LVM
393
DTS_GROWABLE = _constants.DTS_GROWABLE
394
DTS_MAY_ADOPT = _constants.DTS_MAY_ADOPT
395
DTS_MUST_ADOPT = _constants.DTS_MUST_ADOPT
396
DTS_MIRRORED = _constants.DTS_MIRRORED
397
DTS_FILEBASED = _constants.DTS_FILEBASED
398
DTS_COPYABLE = _constants.DTS_COPYABLE
399
DTS_EXCL_STORAGE = _constants.DTS_EXCL_STORAGE
400
DTS_NO_FREE_SPACE_CHECK = _constants.DTS_NO_FREE_SPACE_CHECK
401
DTS_BLOCK = _constants.DTS_BLOCK
402
# drbd barrier types
403
DRBD_B_NONE = "n"
404
DRBD_B_DISK_BARRIERS = "b"
405
DRBD_B_DISK_DRAIN = "d"
406
DRBD_B_DISK_FLUSH = "f"
407

    
408
# Valid barrier combinations: "n" or any non-null subset of "bfd"
409
DRBD_VALID_BARRIER_OPT = compat.UniqueFrozenset([
410
  frozenset([DRBD_B_NONE]),
411
  frozenset([DRBD_B_DISK_BARRIERS]),
412
  frozenset([DRBD_B_DISK_DRAIN]),
413
  frozenset([DRBD_B_DISK_FLUSH]),
414
  frozenset([DRBD_B_DISK_DRAIN, DRBD_B_DISK_FLUSH]),
415
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_DRAIN]),
416
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH]),
417
  frozenset([DRBD_B_DISK_BARRIERS, DRBD_B_DISK_FLUSH, DRBD_B_DISK_DRAIN]),
418
  ])
419

    
420
# rbd tool command
421
RBD_CMD = "rbd"
422

    
423
FD_BLKTAP = _constants.FD_BLKTAP
424
FD_LOOP = _constants.FD_LOOP
425
FILE_DRIVER = _constants.FILE_DRIVER
426

    
427
LDS_DRBD = _constants.LDS_DRBD
428

    
429
# disk access mode
430
DISK_RDONLY = _constants.DISK_RDONLY
431
DISK_RDWR = _constants.DISK_RDWR
432
DISK_ACCESS_SET = _constants.DISK_ACCESS_SET
433
DISK_USERSPACE = _constants.DISK_USERSPACE
434
DISK_KERNELSPACE = _constants.DISK_KERNELSPACE
435
DISK_VALID_ACCESS_MODES = _constants.DISK_VALID_ACCESS_MODES
436

    
437
REPLACE_DISK_PRI = _constants.REPLACE_DISK_PRI
438
REPLACE_DISK_SEC = _constants.REPLACE_DISK_SEC
439
REPLACE_DISK_CHG = _constants.REPLACE_DISK_CHG
440
REPLACE_DISK_AUTO = _constants.REPLACE_DISK_AUTO
441
REPLACE_MODES = _constants.REPLACE_MODES
442

    
443
# Instance export mode
444
EXPORT_MODE_LOCAL = _constants.EXPORT_MODE_LOCAL
445
EXPORT_MODE_REMOTE = _constants.EXPORT_MODE_REMOTE
446
EXPORT_MODES = _constants.EXPORT_MODES
447

    
448
# instance creation modes
449
INSTANCE_CREATE = _constants.INSTANCE_CREATE
450
INSTANCE_IMPORT = _constants.INSTANCE_IMPORT
451
INSTANCE_REMOTE_IMPORT = _constants.INSTANCE_REMOTE_IMPORT
452
INSTANCE_CREATE_MODES = _constants.INSTANCE_CREATE_MODES
453

    
454
# Remote import/export handshake message and version
455
RIE_VERSION = 0
456
RIE_HANDSHAKE = "Hi, I'm Ganeti"
457

    
458
# Remote import/export certificate validity in seconds
459
RIE_CERT_VALIDITY = 24 * 60 * 60
460

    
461
# Overall timeout for establishing connection
462
RIE_CONNECT_TIMEOUT = 180
463

    
464
# Export only: how long to wait per connection attempt (seconds)
465
RIE_CONNECT_ATTEMPT_TIMEOUT = 20
466

    
467
# Export only: number of attempts to connect
468
RIE_CONNECT_RETRIES = 10
469

    
470
#: Give child process up to 5 seconds to exit after sending a signal
471
CHILD_LINGER_TIMEOUT = 5.0
472

    
473

    
474
# import/export config options
475
INISECT_EXP = "export"
476
INISECT_INS = "instance"
477
INISECT_HYP = "hypervisor"
478
INISECT_BEP = "backend"
479
INISECT_OSP = "os"
480

    
481
# dynamic device modification
482
DDM_ADD = _constants.DDM_ADD
483
DDM_MODIFY = _constants.DDM_MODIFY
484
DDM_REMOVE = _constants.DDM_REMOVE
485
DDMS_VALUES = _constants.DDMS_VALUES
486
DDMS_VALUES_WITH_MODIFY = _constants.DDMS_VALUES_WITH_MODIFY
487
# TODO: DDM_SWAP, DDM_MOVE?
488

    
489
# common exit codes
490
EXIT_SUCCESS = _constants.EXIT_SUCCESS
491
EXIT_FAILURE = _constants.EXIT_FAILURE
492
EXIT_NOTCLUSTER = _constants.EXIT_NOTCLUSTER
493
EXIT_NOTMASTER = _constants.EXIT_NOTMASTER
494
EXIT_NODESETUP_ERROR = _constants.EXIT_NODESETUP_ERROR
495
EXIT_CONFIRMATION = _constants.EXIT_CONFIRMATION # need user confirmation
496

    
497
#: Exit code for query operations with unknown fields
498
EXIT_UNKNOWN_FIELD = _constants.EXIT_UNKNOWN_FIELD
499

    
500
# tags
501
TAG_CLUSTER = _constants.TAG_CLUSTER
502
TAG_NODEGROUP = _constants.TAG_NODEGROUP
503
TAG_NODE = _constants.TAG_NODE
504
TAG_INSTANCE = _constants.TAG_INSTANCE
505
TAG_NETWORK = _constants.TAG_NETWORK
506
VALID_TAG_TYPES = _constants.VALID_TAG_TYPES
507

    
508
MAX_TAG_LEN = _constants.MAX_TAG_LEN
509
MAX_TAGS_PER_OBJ = _constants.MAX_TAGS_PER_OBJ
510

    
511
# others
512
DEFAULT_BRIDGE = "xen-br0"
513
DEFAULT_OVS = "switch1"
514
CLASSIC_DRBD_SYNC_SPEED = 60 * 1024  # 60 MiB, expressed in KiB
515
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
516
IP4_ADDRESS_ANY = "0.0.0.0"
517
IP6_ADDRESS_LOCALHOST = "::1"
518
IP6_ADDRESS_ANY = "::"
519
IP4_VERSION = 4
520
IP6_VERSION = 6
521
VALID_IP_VERSIONS = compat.UniqueFrozenset([IP4_VERSION, IP6_VERSION])
522
# for export to htools
523
IP4_FAMILY = socket.AF_INET
524
IP6_FAMILY = socket.AF_INET6
525

    
526
TCP_PING_TIMEOUT = 10
527
DEFAULT_VG = "xenvg"
528
DEFAULT_DRBD_HELPER = "/bin/true"
529
MIN_VG_SIZE = 20480
530
DEFAULT_MAC_PREFIX = "aa:00:00"
531
# default maximum instance wait time, in seconds.
532
DEFAULT_SHUTDOWN_TIMEOUT = 120
533
NODE_MAX_CLOCK_SKEW = _constants.NODE_MAX_CLOCK_SKEW
534
# Time for an intra-cluster disk transfer to wait for a connection
535
DISK_TRANSFER_CONNECT_TIMEOUT = 60
536
# Disk index separator
537
DISK_SEPARATOR = _constants.DISK_SEPARATOR
538
IP_COMMAND_PATH = _constants.IP_COMMAND_PATH
539

    
540
RPC_TMO_URGENT = _constants.RPC_TMO_URGENT
541
RPC_TMO_FAST = _constants.RPC_TMO_FAST
542
RPC_TMO_NORMAL = _constants.RPC_TMO_NORMAL
543
RPC_TMO_SLOW = _constants.RPC_TMO_SLOW
544
RPC_TMO_4HRS = _constants.RPC_TMO_4HRS
545
RPC_TMO_1DAY = _constants.RPC_TMO_1DAY
546
RPC_CONNECT_TIMEOUT = _constants.RPC_CONNECT_TIMEOUT
547

    
548
#: Key for job IDs in opcode result
549
JOB_IDS_KEY = "jobs"
550

    
551
# runparts results
552
(RUNPARTS_SKIP,
553
 RUNPARTS_RUN,
554
 RUNPARTS_ERR) = range(3)
555

    
556
RUNPARTS_STATUS = compat.UniqueFrozenset([
557
  RUNPARTS_SKIP,
558
  RUNPARTS_RUN,
559
  RUNPARTS_ERR,
560
  ])
561

    
562
# RPC constants
563
(RPC_ENCODING_NONE,
564
 RPC_ENCODING_ZLIB_BASE64) = range(2)
565

    
566
# os related constants
567
OS_SCRIPT_CREATE = "create"
568
OS_SCRIPT_IMPORT = "import"
569
OS_SCRIPT_EXPORT = "export"
570
OS_SCRIPT_RENAME = "rename"
571
OS_SCRIPT_VERIFY = "verify"
572
OS_SCRIPTS = compat.UniqueFrozenset([
573
  OS_SCRIPT_CREATE,
574
  OS_SCRIPT_IMPORT,
575
  OS_SCRIPT_EXPORT,
576
  OS_SCRIPT_RENAME,
577
  OS_SCRIPT_VERIFY,
578
  ])
579

    
580
OS_API_FILE = "ganeti_api_version"
581
OS_VARIANTS_FILE = "variants.list"
582
OS_PARAMETERS_FILE = "parameters.list"
583

    
584
OS_VALIDATE_PARAMETERS = "parameters"
585
OS_VALIDATE_CALLS = compat.UniqueFrozenset([OS_VALIDATE_PARAMETERS])
586

    
587
# External Storage (ES) related constants
588
ES_ACTION_CREATE = "create"
589
ES_ACTION_REMOVE = "remove"
590
ES_ACTION_GROW = "grow"
591
ES_ACTION_ATTACH = "attach"
592
ES_ACTION_DETACH = "detach"
593
ES_ACTION_SETINFO = "setinfo"
594
ES_ACTION_VERIFY = "verify"
595

    
596
ES_SCRIPT_CREATE = ES_ACTION_CREATE
597
ES_SCRIPT_REMOVE = ES_ACTION_REMOVE
598
ES_SCRIPT_GROW = ES_ACTION_GROW
599
ES_SCRIPT_ATTACH = ES_ACTION_ATTACH
600
ES_SCRIPT_DETACH = ES_ACTION_DETACH
601
ES_SCRIPT_SETINFO = ES_ACTION_SETINFO
602
ES_SCRIPT_VERIFY = ES_ACTION_VERIFY
603
ES_SCRIPTS = frozenset([
604
  ES_SCRIPT_CREATE,
605
  ES_SCRIPT_REMOVE,
606
  ES_SCRIPT_GROW,
607
  ES_SCRIPT_ATTACH,
608
  ES_SCRIPT_DETACH,
609
  ES_SCRIPT_SETINFO,
610
  ES_SCRIPT_VERIFY
611
  ])
612

    
613
ES_PARAMETERS_FILE = "parameters.list"
614

    
615
# reboot types
616
INSTANCE_REBOOT_SOFT = _constants.INSTANCE_REBOOT_SOFT
617
INSTANCE_REBOOT_HARD = _constants.INSTANCE_REBOOT_HARD
618
INSTANCE_REBOOT_FULL = _constants.INSTANCE_REBOOT_FULL
619
REBOOT_TYPES = _constants.REBOOT_TYPES
620

    
621
# instance reboot behaviors
622
INSTANCE_REBOOT_ALLOWED = "reboot"
623
INSTANCE_REBOOT_EXIT = "exit"
624

    
625
REBOOT_BEHAVIORS = compat.UniqueFrozenset([
626
  INSTANCE_REBOOT_ALLOWED,
627
  INSTANCE_REBOOT_EXIT,
628
  ])
629

    
630
VTYPE_STRING = _constants.VTYPE_STRING
631
VTYPE_MAYBE_STRING = _constants.VTYPE_MAYBE_STRING
632
VTYPE_BOOL = _constants.VTYPE_BOOL
633
VTYPE_SIZE = _constants.VTYPE_SIZE
634
VTYPE_INT = _constants.VTYPE_INT
635
ENFORCEABLE_TYPES = _constants.ENFORCEABLE_TYPES
636

    
637
# Constant representing that the user does not specify any IP version
638
IFACE_NO_IP_VERSION_SPECIFIED = 0
639

    
640
VALID_SERIAL_SPEEDS = compat.UniqueFrozenset([
641
  75,
642
  110,
643
  300,
644
  600,
645
  1200,
646
  1800,
647
  2400,
648
  4800,
649
  9600,
650
  14400,
651
  19200,
652
  28800,
653
  38400,
654
  57600,
655
  115200,
656
  230400,
657
  345600,
658
  460800,
659
  ])
660

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

    
735

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

    
811
HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
812

    
813
HVS_PARAMETER_TITLES = {
814
  HV_ACPI: "ACPI",
815
  HV_BOOT_ORDER: "Boot_order",
816
  HV_CDROM_IMAGE_PATH: "CDROM_image_path",
817
  HV_DISK_TYPE: "Disk_type",
818
  HV_INITRD_PATH: "Initrd_path",
819
  HV_KERNEL_PATH: "Kernel_path",
820
  HV_NIC_TYPE: "NIC_type",
821
  HV_PAE: "PAE",
822
  HV_VNC_BIND_ADDRESS: "VNC_bind_address",
823
  HV_PASSTHROUGH: "pci_pass",
824
  HV_CPU_TYPE: "cpu_type",
825
  }
826

    
827
# Migration statuses
828
HV_MIGRATION_COMPLETED = "completed"
829
HV_MIGRATION_ACTIVE = "active"
830
HV_MIGRATION_FAILED = "failed"
831
HV_MIGRATION_CANCELLED = "cancelled"
832

    
833
HV_MIGRATION_VALID_STATUSES = compat.UniqueFrozenset([
834
  HV_MIGRATION_COMPLETED,
835
  HV_MIGRATION_ACTIVE,
836
  HV_MIGRATION_FAILED,
837
  HV_MIGRATION_CANCELLED,
838
  ])
839

    
840
HV_MIGRATION_FAILED_STATUSES = compat.UniqueFrozenset([
841
  HV_MIGRATION_FAILED,
842
  HV_MIGRATION_CANCELLED,
843
  ])
844

    
845
# KVM-specific statuses
846
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES
847

    
848
# Node info keys
849
HV_NODEINFO_KEY_VERSION = "hv_version"
850

    
851
# Hypervisor state
852
HVST_MEMORY_TOTAL = "mem_total"
853
HVST_MEMORY_NODE = "mem_node"
854
HVST_MEMORY_HV = "mem_hv"
855
HVST_CPU_TOTAL = "cpu_total"
856
HVST_CPU_NODE = "cpu_node"
857

    
858
HVST_DEFAULTS = {
859
  HVST_MEMORY_TOTAL: 0,
860
  HVST_MEMORY_NODE: 0,
861
  HVST_MEMORY_HV: 0,
862
  HVST_CPU_TOTAL: 1,
863
  HVST_CPU_NODE: 1,
864
  }
865

    
866
HVSTS_PARAMETER_TYPES = {
867
  HVST_MEMORY_TOTAL: VTYPE_INT,
868
  HVST_MEMORY_NODE: VTYPE_INT,
869
  HVST_MEMORY_HV: VTYPE_INT,
870
  HVST_CPU_TOTAL: VTYPE_INT,
871
  HVST_CPU_NODE: VTYPE_INT,
872
  }
873

    
874
HVSTS_PARAMETERS = frozenset(HVSTS_PARAMETER_TYPES.keys())
875

    
876
# Disk state
877
DS_DISK_TOTAL = "disk_total"
878
DS_DISK_RESERVED = "disk_reserved"
879
DS_DISK_OVERHEAD = "disk_overhead"
880

    
881
DS_DEFAULTS = {
882
  DS_DISK_TOTAL: 0,
883
  DS_DISK_RESERVED: 0,
884
  DS_DISK_OVERHEAD: 0,
885
  }
886

    
887
ISPEC_MEM_SIZE = _constants.ISPEC_MEM_SIZE
888
ISPEC_CPU_COUNT = _constants.ISPEC_CPU_COUNT
889
ISPEC_DISK_COUNT = _constants.ISPEC_DISK_COUNT
890
ISPEC_DISK_SIZE = _constants.ISPEC_DISK_SIZE
891
ISPEC_NIC_COUNT = _constants.ISPEC_NIC_COUNT
892
ISPEC_SPINDLE_USE = _constants.ISPEC_SPINDLE_USE
893
ISPECS_PARAMETER_TYPES = _constants.ISPECS_PARAMETER_TYPES
894
ISPECS_PARAMETERS = _constants.ISPECS_PARAMETERS
895

    
896
ISPECS_MINMAX = _constants.ISPECS_MINMAX
897
ISPECS_MIN = _constants.ISPECS_MIN
898
ISPECS_MAX = _constants.ISPECS_MAX
899
ISPECS_STD = _constants.ISPECS_STD
900
IPOLICY_DTS = _constants.IPOLICY_DTS
901
IPOLICY_VCPU_RATIO = _constants.IPOLICY_VCPU_RATIO
902
IPOLICY_SPINDLE_RATIO = _constants.IPOLICY_SPINDLE_RATIO
903
ISPECS_MINMAX_KEYS = _constants.ISPECS_MINMAX_KEYS
904
IPOLICY_PARAMETERS = _constants.IPOLICY_PARAMETERS
905
IPOLICY_ALL_KEYS = _constants.IPOLICY_ALL_KEYS
906

    
907
ND_OOB_PROGRAM = _constants.ND_OOB_PROGRAM
908
ND_SPINDLE_COUNT = _constants.ND_SPINDLE_COUNT
909
ND_EXCLUSIVE_STORAGE = _constants.ND_EXCLUSIVE_STORAGE
910
ND_OVS = _constants.ND_OVS
911
ND_OVS_NAME = _constants.ND_OVS_NAME
912
ND_OVS_LINK = _constants.ND_OVS_LINK
913

    
914
NDS_PARAMETER_TYPES = _constants.NDS_PARAMETER_TYPES
915
NDS_PARAMETERS = _constants.NDS_PARAMETERS
916
NDS_PARAMETER_TITLES = _constants.NDS_PARAMETER_TITLES
917
DSS_PARAMETER_TYPES = {
918
  DS_DISK_TOTAL: VTYPE_INT,
919
  DS_DISK_RESERVED: VTYPE_INT,
920
  DS_DISK_OVERHEAD: VTYPE_INT,
921
  }
922

    
923
DSS_PARAMETERS = frozenset(DSS_PARAMETER_TYPES.keys())
924
DS_VALID_TYPES = compat.UniqueFrozenset([DT_PLAIN])
925

    
926
# Backend parameter names
927
BE_MEMORY = "memory" # deprecated and replaced by max and min mem
928
BE_MAXMEM = "maxmem"
929
BE_MINMEM = "minmem"
930
BE_VCPUS = "vcpus"
931
BE_AUTO_BALANCE = "auto_balance"
932
BE_ALWAYS_FAILOVER = "always_failover"
933
BE_SPINDLE_USE = "spindle_use"
934

    
935
BES_PARAMETER_TYPES = {
936
  BE_MAXMEM: VTYPE_SIZE,
937
  BE_MINMEM: VTYPE_SIZE,
938
  BE_VCPUS: VTYPE_INT,
939
  BE_AUTO_BALANCE: VTYPE_BOOL,
940
  BE_ALWAYS_FAILOVER: VTYPE_BOOL,
941
  BE_SPINDLE_USE: VTYPE_INT,
942
  }
943

    
944
BES_PARAMETER_TITLES = {
945
  BE_AUTO_BALANCE: "Auto_balance",
946
  BE_MAXMEM: "ConfigMaxMem",
947
  BE_MINMEM: "ConfigMinMem",
948
  BE_VCPUS: "ConfigVCPUs",
949
  }
950

    
951
BES_PARAMETER_COMPAT = {
952
  BE_MEMORY: VTYPE_SIZE,
953
  }
954
BES_PARAMETER_COMPAT.update(BES_PARAMETER_TYPES)
955

    
956
BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
957

    
958
# Logical Disks parameters
959
LDP_RESYNC_RATE = "resync-rate"
960
LDP_STRIPES = "stripes"
961
LDP_BARRIERS = "disabled-barriers"
962
LDP_NO_META_FLUSH = "disable-meta-flush"
963
LDP_DEFAULT_METAVG = "default-metavg"
964
LDP_DISK_CUSTOM = "disk-custom"
965
LDP_NET_CUSTOM = "net-custom"
966
LDP_PROTOCOL = "protocol"
967
LDP_DYNAMIC_RESYNC = "dynamic-resync"
968
LDP_PLAN_AHEAD = "c-plan-ahead"
969
LDP_FILL_TARGET = "c-fill-target"
970
LDP_DELAY_TARGET = "c-delay-target"
971
LDP_MAX_RATE = "c-max-rate"
972
LDP_MIN_RATE = "c-min-rate"
973
LDP_POOL = "pool"
974
LDP_ACCESS = "access"
975
DISK_LD_TYPES = {
976
  LDP_RESYNC_RATE: VTYPE_INT,
977
  LDP_STRIPES: VTYPE_INT,
978
  LDP_BARRIERS: VTYPE_STRING,
979
  LDP_NO_META_FLUSH: VTYPE_BOOL,
980
  LDP_DEFAULT_METAVG: VTYPE_STRING,
981
  LDP_DISK_CUSTOM: VTYPE_STRING,
982
  LDP_NET_CUSTOM: VTYPE_STRING,
983
  LDP_PROTOCOL: VTYPE_STRING,
984
  LDP_DYNAMIC_RESYNC: VTYPE_BOOL,
985
  LDP_PLAN_AHEAD: VTYPE_INT,
986
  LDP_FILL_TARGET: VTYPE_INT,
987
  LDP_DELAY_TARGET: VTYPE_INT,
988
  LDP_MAX_RATE: VTYPE_INT,
989
  LDP_MIN_RATE: VTYPE_INT,
990
  LDP_POOL: VTYPE_STRING,
991
  LDP_ACCESS: VTYPE_STRING,
992
  }
993
DISK_LD_PARAMETERS = frozenset(DISK_LD_TYPES.keys())
994

    
995
# Disk template parameters (can be set/changed by the user via gnt-cluster and
996
# gnt-group)
997
DRBD_RESYNC_RATE = "resync-rate"
998
DRBD_DATA_STRIPES = "data-stripes"
999
DRBD_META_STRIPES = "meta-stripes"
1000
DRBD_DISK_BARRIERS = "disk-barriers"
1001
DRBD_META_BARRIERS = "meta-barriers"
1002
DRBD_DEFAULT_METAVG = "metavg"
1003
DRBD_DISK_CUSTOM = "disk-custom"
1004
DRBD_NET_CUSTOM = "net-custom"
1005
DRBD_PROTOCOL = "protocol"
1006
DRBD_DYNAMIC_RESYNC = "dynamic-resync"
1007
DRBD_PLAN_AHEAD = "c-plan-ahead"
1008
DRBD_FILL_TARGET = "c-fill-target"
1009
DRBD_DELAY_TARGET = "c-delay-target"
1010
DRBD_MAX_RATE = "c-max-rate"
1011
DRBD_MIN_RATE = "c-min-rate"
1012
LV_STRIPES = "stripes"
1013
RBD_POOL = "pool"
1014
RBD_ACCESS = "access"
1015
DISK_DT_TYPES = {
1016
  DRBD_RESYNC_RATE: VTYPE_INT,
1017
  DRBD_DATA_STRIPES: VTYPE_INT,
1018
  DRBD_META_STRIPES: VTYPE_INT,
1019
  DRBD_DISK_BARRIERS: VTYPE_STRING,
1020
  DRBD_META_BARRIERS: VTYPE_BOOL,
1021
  DRBD_DEFAULT_METAVG: VTYPE_STRING,
1022
  DRBD_DISK_CUSTOM: VTYPE_STRING,
1023
  DRBD_NET_CUSTOM: VTYPE_STRING,
1024
  DRBD_PROTOCOL: VTYPE_STRING,
1025
  DRBD_DYNAMIC_RESYNC: VTYPE_BOOL,
1026
  DRBD_PLAN_AHEAD: VTYPE_INT,
1027
  DRBD_FILL_TARGET: VTYPE_INT,
1028
  DRBD_DELAY_TARGET: VTYPE_INT,
1029
  DRBD_MAX_RATE: VTYPE_INT,
1030
  DRBD_MIN_RATE: VTYPE_INT,
1031
  LV_STRIPES: VTYPE_INT,
1032
  RBD_POOL: VTYPE_STRING,
1033
  RBD_ACCESS: VTYPE_STRING,
1034
  }
1035

    
1036
DISK_DT_PARAMETERS = frozenset(DISK_DT_TYPES.keys())
1037

    
1038
# dynamic disk parameters
1039
DDP_LOCAL_IP = "local-ip"
1040
DDP_REMOTE_IP = "remote-ip"
1041
DDP_PORT = "port"
1042
DDP_LOCAL_MINOR = "local-minor"
1043
DDP_REMOTE_MINOR = "remote-minor"
1044

    
1045
# OOB supported commands
1046
OOB_POWER_ON = _constants.OOB_POWER_ON
1047
OOB_POWER_OFF = _constants.OOB_POWER_OFF
1048
OOB_POWER_CYCLE = _constants.OOB_POWER_CYCLE
1049
OOB_POWER_STATUS = _constants.OOB_POWER_STATUS
1050
OOB_HEALTH = _constants.OOB_HEALTH
1051
OOB_COMMANDS = _constants.OOB_COMMANDS
1052

    
1053
OOB_POWER_STATUS_POWERED = _constants.OOB_POWER_STATUS_POWERED
1054

    
1055
OOB_TIMEOUT = _constants.OOB_TIMEOUT
1056
OOB_POWER_DELAY = _constants.OOB_POWER_DELAY
1057

    
1058
OOB_STATUS_OK = _constants.OOB_STATUS_OK
1059
OOB_STATUS_WARNING = _constants.OOB_STATUS_WARNING
1060
OOB_STATUS_CRITICAL = _constants.OOB_STATUS_CRITICAL
1061
OOB_STATUS_UNKNOWN = _constants.OOB_STATUS_UNKNOWN
1062
OOB_STATUSES = _constants.OOB_STATUSES
1063

    
1064
# Instance Parameters Profile
1065
PP_DEFAULT = "default"
1066

    
1067
# NIC_* constants are used inside the ganeti config
1068
NIC_MODE = _constants.NIC_MODE
1069
NIC_LINK = _constants.NIC_LINK
1070
NIC_VLAN = _constants.NIC_VLAN
1071

    
1072
NIC_MODE_BRIDGED = _constants.NIC_MODE_BRIDGED
1073
NIC_MODE_ROUTED = _constants.NIC_MODE_ROUTED
1074
NIC_MODE_OVS = _constants.NIC_MODE_OVS
1075
NIC_IP_POOL = _constants.NIC_IP_POOL
1076
NIC_VALID_MODES = _constants.NIC_VALID_MODES
1077

    
1078
RESERVE_ACTION = "reserve"
1079
RELEASE_ACTION = "release"
1080

    
1081
NICS_PARAMETER_TYPES = {
1082
  NIC_MODE: VTYPE_STRING,
1083
  NIC_LINK: VTYPE_STRING,
1084
  NIC_VLAN: VTYPE_MAYBE_STRING,
1085
  }
1086

    
1087
NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
1088

    
1089
# IDISK_* constants are used in opcodes, to create/change disks
1090
IDISK_SIZE = "size"
1091
IDISK_SPINDLES = "spindles"
1092
IDISK_MODE = "mode"
1093
IDISK_ADOPT = "adopt"
1094
IDISK_VG = "vg"
1095
IDISK_METAVG = "metavg"
1096
IDISK_PROVIDER = "provider"
1097
IDISK_NAME = "name"
1098
IDISK_PARAMS_TYPES = {
1099
  IDISK_SIZE: VTYPE_SIZE,
1100
  IDISK_SPINDLES: VTYPE_INT,
1101
  IDISK_MODE: VTYPE_STRING,
1102
  IDISK_ADOPT: VTYPE_STRING,
1103
  IDISK_VG: VTYPE_STRING,
1104
  IDISK_METAVG: VTYPE_STRING,
1105
  IDISK_PROVIDER: VTYPE_STRING,
1106
  IDISK_NAME: VTYPE_MAYBE_STRING,
1107
  }
1108
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())
1109

    
1110
# INIC_* constants are used in opcodes, to create/change nics
1111
INIC_MAC = "mac"
1112
INIC_IP = "ip"
1113
INIC_MODE = "mode"
1114
INIC_LINK = "link"
1115
INIC_NETWORK = "network"
1116
INIC_NAME = "name"
1117
INIC_VLAN = "vlan"
1118
INIC_BRIDGE = "bridge"
1119
INIC_PARAMS_TYPES = {
1120
  INIC_IP: VTYPE_MAYBE_STRING,
1121
  INIC_LINK: VTYPE_STRING,
1122
  INIC_MAC: VTYPE_STRING,
1123
  INIC_MODE: VTYPE_STRING,
1124
  INIC_NETWORK: VTYPE_MAYBE_STRING,
1125
  INIC_NAME: VTYPE_MAYBE_STRING,
1126
  INIC_VLAN: VTYPE_MAYBE_STRING,
1127
  INIC_BRIDGE: VTYPE_MAYBE_STRING
1128
  }
1129
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
1130

    
1131
# Hypervisor constants
1132
HT_XEN_PVM = _constants.HT_XEN_PVM
1133
HT_FAKE = _constants.HT_FAKE
1134
HT_XEN_HVM = _constants.HT_XEN_HVM
1135
HT_KVM = _constants.HT_KVM
1136
HT_CHROOT = _constants.HT_CHROOT
1137
HT_LXC = _constants.HT_LXC
1138
HYPER_TYPES = _constants.HYPER_TYPES
1139
HTS_REQ_PORT = _constants.HTS_REQ_PORT
1140

    
1141
VNC_BASE_PORT = 5900
1142
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
1143

    
1144
# NIC types
1145
HT_NIC_RTL8139 = "rtl8139"
1146
HT_NIC_NE2K_PCI = "ne2k_pci"
1147
HT_NIC_NE2K_ISA = "ne2k_isa"
1148
HT_NIC_I82551 = "i82551"
1149
HT_NIC_I85557B = "i82557b"
1150
HT_NIC_I8259ER = "i82559er"
1151
HT_NIC_PCNET = "pcnet"
1152
HT_NIC_E1000 = "e1000"
1153
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
1154

    
1155
HT_HVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1156
  HT_NIC_RTL8139,
1157
  HT_NIC_NE2K_PCI,
1158
  HT_NIC_E1000,
1159
  HT_NIC_NE2K_ISA,
1160
  HT_NIC_PARAVIRTUAL,
1161
  ])
1162
HT_KVM_VALID_NIC_TYPES = compat.UniqueFrozenset([
1163
  HT_NIC_RTL8139,
1164
  HT_NIC_NE2K_PCI,
1165
  HT_NIC_NE2K_ISA,
1166
  HT_NIC_I82551,
1167
  HT_NIC_I85557B,
1168
  HT_NIC_I8259ER,
1169
  HT_NIC_PCNET,
1170
  HT_NIC_E1000,
1171
  HT_NIC_PARAVIRTUAL,
1172
  ])
1173

    
1174
# Vif types
1175
# default vif type in xen-hvm
1176
HT_HVM_VIF_IOEMU = "ioemu"
1177
HT_HVM_VIF_VIF = "vif"
1178
HT_HVM_VALID_VIF_TYPES = compat.UniqueFrozenset([
1179
  HT_HVM_VIF_IOEMU,
1180
  HT_HVM_VIF_VIF,
1181
  ])
1182

    
1183
# Disk types
1184
HT_DISK_IOEMU = "ioemu"
1185
HT_DISK_IDE = "ide"
1186
HT_DISK_SCSI = "scsi"
1187
HT_DISK_SD = "sd"
1188
HT_DISK_MTD = "mtd"
1189
HT_DISK_PFLASH = "pflash"
1190

    
1191
HT_CACHE_DEFAULT = "default"
1192
HT_CACHE_NONE = "none"
1193
HT_CACHE_WTHROUGH = "writethrough"
1194
HT_CACHE_WBACK = "writeback"
1195
HT_VALID_CACHE_TYPES = compat.UniqueFrozenset([
1196
  HT_CACHE_DEFAULT,
1197
  HT_CACHE_NONE,
1198
  HT_CACHE_WTHROUGH,
1199
  HT_CACHE_WBACK,
1200
  ])
1201

    
1202
HT_HVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1203
  HT_DISK_PARAVIRTUAL,
1204
  HT_DISK_IOEMU,
1205
  ])
1206
HT_KVM_VALID_DISK_TYPES = compat.UniqueFrozenset([
1207
  HT_DISK_PARAVIRTUAL,
1208
  HT_DISK_IDE,
1209
  HT_DISK_SCSI,
1210
  HT_DISK_SD,
1211
  HT_DISK_MTD,
1212
  HT_DISK_PFLASH,
1213
  ])
1214

    
1215
# Mouse types:
1216
HT_MOUSE_MOUSE = "mouse"
1217
HT_MOUSE_TABLET = "tablet"
1218

    
1219
HT_KVM_VALID_MOUSE_TYPES = compat.UniqueFrozenset([
1220
  HT_MOUSE_MOUSE,
1221
  HT_MOUSE_TABLET,
1222
  ])
1223

    
1224
# Boot order
1225
HT_BO_FLOPPY = "floppy"
1226
HT_BO_CDROM = "cdrom"
1227
HT_BO_DISK = "disk"
1228
HT_BO_NETWORK = "network"
1229

    
1230
HT_KVM_VALID_BO_TYPES = compat.UniqueFrozenset([
1231
  HT_BO_FLOPPY,
1232
  HT_BO_CDROM,
1233
  HT_BO_DISK,
1234
  HT_BO_NETWORK,
1235
  ])
1236

    
1237
# SPICE lossless image compression options
1238
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
1239
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
1240
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
1241
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
1242
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
1243
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"
1244

    
1245
HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1246
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
1247
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
1248
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
1249
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
1250
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
1251
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
1252
  ])
1253

    
1254
# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1255
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
1256
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
1257
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"
1258

    
1259
HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = compat.UniqueFrozenset([
1260
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
1261
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
1262
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
1263
  ])
1264

    
1265
# SPICE video stream detection
1266
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
1267
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
1268
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"
1269

    
1270
HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = compat.UniqueFrozenset([
1271
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF,
1272
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
1273
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
1274
  ])
1275

    
1276
# Security models
1277
HT_SM_NONE = "none"
1278
HT_SM_USER = "user"
1279
HT_SM_POOL = "pool"
1280

    
1281
HT_KVM_VALID_SM_TYPES = compat.UniqueFrozenset([
1282
  HT_SM_NONE,
1283
  HT_SM_USER,
1284
  HT_SM_POOL,
1285
  ])
1286

    
1287
# Kvm flag values
1288
HT_KVM_ENABLED = "enabled"
1289
HT_KVM_DISABLED = "disabled"
1290

    
1291
HT_KVM_FLAG_VALUES = compat.UniqueFrozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])
1292

    
1293
# Migration type
1294
HT_MIGRATION_LIVE = _constants.HT_MIGRATION_LIVE
1295
HT_MIGRATION_NONLIVE = _constants.HT_MIGRATION_NONLIVE
1296
HT_MIGRATION_MODES = _constants.HT_MIGRATION_MODES
1297

    
1298
# Cluster Verify steps
1299
VERIFY_NPLUSONE_MEM = _constants.VERIFY_NPLUSONE_MEM
1300
VERIFY_OPTIONAL_CHECKS = _constants.VERIFY_OPTIONAL_CHECKS
1301

    
1302
# Cluster Verify error classes
1303
CV_TCLUSTER = _constants.CV_TCLUSTER
1304
CV_TGROUP = _constants.CV_TGROUP
1305
CV_TNODE = _constants.CV_TNODE
1306
CV_TINSTANCE = _constants.CV_TINSTANCE
1307

    
1308
# Cluster Verify error codes and documentation
1309
CV_ECLUSTERCFG = _constants.CV_ECLUSTERCFG
1310
CV_ECLUSTERCERT = _constants.CV_ECLUSTERCERT
1311
CV_ECLUSTERFILECHECK = _constants.CV_ECLUSTERFILECHECK
1312
CV_ECLUSTERDANGLINGNODES = _constants.CV_ECLUSTERDANGLINGNODES
1313
CV_ECLUSTERDANGLINGINST = _constants.CV_ECLUSTERDANGLINGINST
1314
CV_EGROUPDIFFERENTPVSIZE = _constants.CV_EGROUPDIFFERENTPVSIZE
1315
CV_EINSTANCEBADNODE = _constants.CV_EINSTANCEBADNODE
1316
CV_EINSTANCEDOWN = _constants.CV_EINSTANCEDOWN
1317
CV_EINSTANCELAYOUT = _constants.CV_EINSTANCELAYOUT
1318
CV_EINSTANCEMISSINGDISK = _constants.CV_EINSTANCEMISSINGDISK
1319
CV_EINSTANCEFAULTYDISK = _constants.CV_EINSTANCEFAULTYDISK
1320
CV_EINSTANCEWRONGNODE = _constants.CV_EINSTANCEWRONGNODE
1321
CV_EINSTANCESPLITGROUPS = _constants.CV_EINSTANCESPLITGROUPS
1322
CV_EINSTANCEPOLICY = _constants.CV_EINSTANCEPOLICY
1323
CV_EINSTANCEUNSUITABLENODE = _constants.CV_EINSTANCEUNSUITABLENODE
1324
CV_EINSTANCEMISSINGCFGPARAMETER = _constants.CV_EINSTANCEMISSINGCFGPARAMETER
1325
CV_ENODEDRBD = _constants.CV_ENODEDRBD
1326
CV_ENODEDRBDVERSION = _constants.CV_ENODEDRBDVERSION
1327
CV_ENODEDRBDHELPER = _constants.CV_ENODEDRBDHELPER
1328
CV_ENODEFILECHECK = _constants.CV_ENODEFILECHECK
1329
CV_ENODEHOOKS = _constants.CV_ENODEHOOKS
1330
CV_ENODEHV = _constants.CV_ENODEHV
1331
CV_ENODELVM = _constants.CV_ENODELVM
1332
CV_ENODEN1 = _constants.CV_ENODEN1
1333
CV_ENODENET = _constants.CV_ENODENET
1334
CV_ENODEOS = _constants.CV_ENODEOS
1335
CV_ENODEORPHANINSTANCE = _constants.CV_ENODEORPHANINSTANCE
1336
CV_ENODEORPHANLV = _constants.CV_ENODEORPHANLV
1337
CV_ENODERPC = _constants.CV_ENODERPC
1338
CV_ENODESSH = _constants.CV_ENODESSH
1339
CV_ENODEVERSION = _constants.CV_ENODEVERSION
1340
CV_ENODESETUP = _constants.CV_ENODESETUP
1341
CV_ENODETIME = _constants.CV_ENODETIME
1342
CV_ENODEOOBPATH = _constants.CV_ENODEOOBPATH
1343
CV_ENODEUSERSCRIPTS = _constants.CV_ENODEUSERSCRIPTS
1344
CV_ENODEFILESTORAGEPATHS = _constants.CV_ENODEFILESTORAGEPATHS
1345
CV_ENODEFILESTORAGEPATHUNUSABLE = _constants.CV_ENODEFILESTORAGEPATHUNUSABLE
1346
CV_ENODESHAREDFILESTORAGEPATHUNUSABLE = \
1347
  _constants.CV_ENODESHAREDFILESTORAGEPATHUNUSABLE
1348

    
1349
CV_ALL_ECODES = _constants.CV_ALL_ECODES
1350
CV_ALL_ECODES_STRINGS = _constants.CV_ALL_ECODES_STRINGS
1351

    
1352
# Node verify constants
1353
NV_BRIDGES = "bridges"
1354
NV_DRBDHELPER = "drbd-helper"
1355
NV_DRBDVERSION = "drbd-version"
1356
NV_DRBDLIST = "drbd-list"
1357
NV_EXCLUSIVEPVS = "exclusive-pvs"
1358
NV_FILELIST = "filelist"
1359
NV_ACCEPTED_STORAGE_PATHS = "allowed-file-storage-paths"
1360
NV_FILE_STORAGE_PATH = "file-storage-path"
1361
NV_SHARED_FILE_STORAGE_PATH = "shared-file-storage-path"
1362
NV_HVINFO = "hvinfo"
1363
NV_HVPARAMS = "hvparms"
1364
NV_HYPERVISOR = "hypervisor"
1365
NV_INSTANCELIST = "instancelist"
1366
NV_LVLIST = "lvlist"
1367
NV_MASTERIP = "master-ip"
1368
NV_NODELIST = "nodelist"
1369
NV_NODENETTEST = "node-net-test"
1370
NV_NODESETUP = "nodesetup"
1371
NV_OOB_PATHS = "oob-paths"
1372
NV_OSLIST = "oslist"
1373
NV_PVLIST = "pvlist"
1374
NV_TIME = "time"
1375
NV_USERSCRIPTS = "user-scripts"
1376
NV_VERSION = "version"
1377
NV_VGLIST = "vglist"
1378
NV_VMNODES = "vmnodes"
1379

    
1380
# Instance status
1381
INSTST_RUNNING = _constants.INSTST_RUNNING
1382
INSTST_ADMINDOWN = _constants.INSTST_ADMINDOWN
1383
INSTST_ADMINOFFLINE = _constants.INSTST_ADMINOFFLINE
1384
INSTST_NODEOFFLINE = _constants.INSTST_NODEOFFLINE
1385
INSTST_NODEDOWN = _constants.INSTST_NODEDOWN
1386
INSTST_WRONGNODE = _constants.INSTST_WRONGNODE
1387
INSTST_ERRORUP = _constants.INSTST_ERRORUP
1388
INSTST_ERRORDOWN = _constants.INSTST_ERRORDOWN
1389
INSTST_ALL = _constants.INSTST_ALL
1390

    
1391
# Admin states
1392
ADMINST_UP = _constants.ADMINST_UP
1393
ADMINST_DOWN = _constants.ADMINST_DOWN
1394
ADMINST_OFFLINE = _constants.ADMINST_OFFLINE
1395
ADMINST_ALL = _constants.ADMINST_ALL
1396

    
1397
# Node roles
1398
NR_REGULAR = _constants.NR_REGULAR
1399
NR_MASTER = _constants.NR_MASTER
1400
NR_MCANDIDATE = _constants.NR_MCANDIDATE
1401
NR_DRAINED = _constants.NR_DRAINED
1402
NR_OFFLINE = _constants.NR_OFFLINE
1403
NR_ALL = _constants.NR_ALL
1404

    
1405
# SSL certificate check constants (in days)
1406
SSL_CERT_EXPIRATION_WARN = 30
1407
SSL_CERT_EXPIRATION_ERROR = 7
1408

    
1409
# Allocator framework constants
1410
IALLOCATOR_VERSION = _constants.IALLOCATOR_VERSION
1411
IALLOCATOR_DIR_IN = _constants.IALLOCATOR_DIR_IN
1412
IALLOCATOR_DIR_OUT = _constants.IALLOCATOR_DIR_OUT
1413
VALID_IALLOCATOR_DIRECTIONS = _constants.VALID_IALLOCATOR_DIRECTIONS
1414

    
1415
IALLOCATOR_MODE_ALLOC = _constants.IALLOCATOR_MODE_ALLOC
1416
IALLOCATOR_MODE_RELOC = _constants.IALLOCATOR_MODE_RELOC
1417
IALLOCATOR_MODE_CHG_GROUP = _constants.IALLOCATOR_MODE_CHG_GROUP
1418
IALLOCATOR_MODE_NODE_EVAC = _constants.IALLOCATOR_MODE_NODE_EVAC
1419
IALLOCATOR_MODE_MULTI_ALLOC = _constants.IALLOCATOR_MODE_MULTI_ALLOC
1420
VALID_IALLOCATOR_MODES = _constants.VALID_IALLOCATOR_MODES
1421

    
1422
IALLOCATOR_SEARCH_PATH = _constants.IALLOCATOR_SEARCH_PATH
1423
DEFAULT_IALLOCATOR_SHORTCUT = _constants.DEFAULT_IALLOCATOR_SHORTCUT
1424

    
1425
# Node evacuation
1426
NODE_EVAC_PRI = _constants.NODE_EVAC_PRI
1427
NODE_EVAC_SEC = _constants.NODE_EVAC_SEC
1428
NODE_EVAC_ALL = _constants.NODE_EVAC_ALL
1429
NODE_EVAC_MODES = _constants.NODE_EVAC_MODES
1430

    
1431
# Job queue
1432
JOB_QUEUE_VERSION = 1
1433
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
1434
JOB_QUEUE_FILES_PERMS = 0640
1435

    
1436
JOB_ID_TEMPLATE = r"\d+"
1437
JOB_FILE_RE = re.compile(r"^job-(%s)$" % JOB_ID_TEMPLATE)
1438

    
1439
# unchanged job return
1440
JOB_NOTCHANGED = "nochange"
1441

    
1442
# Job status
1443
JOB_STATUS_QUEUED = _constants.JOB_STATUS_QUEUED
1444
JOB_STATUS_WAITING = _constants.JOB_STATUS_WAITING
1445
JOB_STATUS_CANCELING = _constants.JOB_STATUS_CANCELING
1446
JOB_STATUS_RUNNING = _constants.JOB_STATUS_RUNNING
1447
JOB_STATUS_CANCELED = _constants.JOB_STATUS_CANCELED
1448
JOB_STATUS_SUCCESS = _constants.JOB_STATUS_SUCCESS
1449
JOB_STATUS_ERROR = _constants.JOB_STATUS_ERROR
1450
JOBS_PENDING = _constants.JOBS_PENDING
1451
JOBS_FINALIZED = _constants.JOBS_FINALIZED
1452
JOB_STATUS_ALL = _constants.JOB_STATUS_ALL
1453

    
1454
# OpCode status
1455
# not yet finalized
1456
OP_STATUS_QUEUED = _constants.OP_STATUS_QUEUED
1457
OP_STATUS_WAITING = _constants.OP_STATUS_WAITING
1458
OP_STATUS_CANCELING = _constants.OP_STATUS_CANCELING
1459
OP_STATUS_RUNNING = _constants.OP_STATUS_RUNNING
1460
# finalized
1461
OP_STATUS_CANCELED = _constants.OP_STATUS_CANCELED
1462
OP_STATUS_SUCCESS = _constants.OP_STATUS_SUCCESS
1463
OP_STATUS_ERROR = _constants.OP_STATUS_ERROR
1464
OPS_FINALIZED = _constants.OPS_FINALIZED
1465

    
1466
# OpCode priority
1467
OP_PRIO_LOWEST = _constants.OP_PRIO_LOWEST
1468
OP_PRIO_HIGHEST = _constants.OP_PRIO_HIGHEST
1469
OP_PRIO_LOW = _constants.OP_PRIO_LOW
1470
OP_PRIO_NORMAL = _constants.OP_PRIO_NORMAL
1471
OP_PRIO_HIGH = _constants.OP_PRIO_HIGH
1472
OP_PRIO_SUBMIT_VALID = _constants.OP_PRIO_SUBMIT_VALID
1473
OP_PRIO_DEFAULT = _constants.OP_PRIO_DEFAULT
1474

    
1475
# Lock recalculate mode
1476
LOCKS_REPLACE = "replace"
1477
LOCKS_APPEND = "append"
1478

    
1479
# Lock timeout (sum) before we should go into blocking acquire (still
1480
# can be reset by priority change); computed as max time (10 hours)
1481
# before we should actually go into blocking acquire given that we
1482
# start from default priority level; in seconds
1483
# TODO
1484
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / (OP_PRIO_DEFAULT - OP_PRIO_HIGHEST)
1485
LOCK_ATTEMPTS_MAXWAIT = 15.0
1486
LOCK_ATTEMPTS_MINWAIT = 1.0
1487

    
1488
# Execution log types
1489
ELOG_MESSAGE = _constants.ELOG_MESSAGE
1490
ELOG_REMOTE_IMPORT = _constants.ELOG_REMOTE_IMPORT
1491
ELOG_JQUEUE_TEST = _constants.ELOG_JQUEUE_TEST
1492

    
1493
# /etc/hosts modification
1494
ETC_HOSTS_ADD = "add"
1495
ETC_HOSTS_REMOVE = "remove"
1496

    
1497
# Job queue test
1498
JQT_MSGPREFIX = "TESTMSG="
1499
JQT_EXPANDNAMES = "expandnames"
1500
JQT_EXEC = "exec"
1501
JQT_LOGMSG = "logmsg"
1502
JQT_STARTMSG = "startmsg"
1503
JQT_ALL = compat.UniqueFrozenset([
1504
  JQT_EXPANDNAMES,
1505
  JQT_EXEC,
1506
  JQT_LOGMSG,
1507
  JQT_STARTMSG,
1508
  ])
1509

    
1510
# Query resources
1511
QR_CLUSTER = "cluster"
1512
QR_INSTANCE = "instance"
1513
QR_NODE = "node"
1514
QR_LOCK = "lock"
1515
QR_GROUP = "group"
1516
QR_OS = "os"
1517
QR_JOB = "job"
1518
QR_EXPORT = "export"
1519
QR_NETWORK = "network"
1520
QR_EXTSTORAGE = "extstorage"
1521

    
1522
#: List of resources which can be queried using L{opcodes.OpQuery}
1523
QR_VIA_OP = compat.UniqueFrozenset([
1524
  QR_CLUSTER,
1525
  QR_INSTANCE,
1526
  QR_NODE,
1527
  QR_GROUP,
1528
  QR_OS,
1529
  QR_EXPORT,
1530
  QR_NETWORK,
1531
  QR_EXTSTORAGE,
1532
  ])
1533

    
1534
#: List of resources which can be queried using Local UniX Interface
1535
QR_VIA_LUXI = QR_VIA_OP.union([
1536
  QR_LOCK,
1537
  QR_JOB,
1538
  ])
1539

    
1540
#: List of resources which can be queried using RAPI
1541
QR_VIA_RAPI = QR_VIA_LUXI
1542

    
1543
# Query field types
1544
QFT_UNKNOWN = "unknown"
1545
QFT_TEXT = "text"
1546
QFT_BOOL = "bool"
1547
QFT_NUMBER = "number"
1548
QFT_UNIT = "unit"
1549
QFT_TIMESTAMP = "timestamp"
1550
QFT_OTHER = "other"
1551

    
1552
#: All query field types
1553
QFT_ALL = compat.UniqueFrozenset([
1554
  QFT_UNKNOWN,
1555
  QFT_TEXT,
1556
  QFT_BOOL,
1557
  QFT_NUMBER,
1558
  QFT_UNIT,
1559
  QFT_TIMESTAMP,
1560
  QFT_OTHER,
1561
  ])
1562

    
1563
# Query result field status (don't change or reuse values as they're used by
1564
# clients)
1565
#: Normal field status
1566
RS_NORMAL = 0
1567
#: Unknown field
1568
RS_UNKNOWN = 1
1569
#: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1570
RS_NODATA = 2
1571
#: Value unavailable/unsupported for item; if this field is supported
1572
#: but we cannot get the data for the moment, RS_NODATA or
1573
#: RS_OFFLINE should be used
1574
RS_UNAVAIL = 3
1575
#: Resource marked offline
1576
RS_OFFLINE = 4
1577

    
1578
RS_ALL = compat.UniqueFrozenset([
1579
  RS_NORMAL,
1580
  RS_UNKNOWN,
1581
  RS_NODATA,
1582
  RS_UNAVAIL,
1583
  RS_OFFLINE,
1584
  ])
1585

    
1586
#: Dictionary with special field cases and their verbose/terse formatting
1587
RSS_DESCRIPTION = {
1588
  RS_UNKNOWN: ("(unknown)", "??"),
1589
  RS_NODATA: ("(nodata)", "?"),
1590
  RS_OFFLINE: ("(offline)", "*"),
1591
  RS_UNAVAIL: ("(unavail)", "-"),
1592
  }
1593

    
1594
# max dynamic devices
1595
MAX_NICS = 8
1596
MAX_DISKS = 16
1597

    
1598
# SSCONF file prefix
1599
SSCONF_FILEPREFIX = "ssconf_"
1600
# SSCONF keys
1601
SS_CLUSTER_NAME = "cluster_name"
1602
SS_CLUSTER_TAGS = "cluster_tags"
1603
SS_FILE_STORAGE_DIR = "file_storage_dir"
1604
SS_SHARED_FILE_STORAGE_DIR = "shared_file_storage_dir"
1605
SS_MASTER_CANDIDATES = "master_candidates"
1606
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
1607
SS_MASTER_IP = "master_ip"
1608
SS_MASTER_NETDEV = "master_netdev"
1609
SS_MASTER_NETMASK = "master_netmask"
1610
SS_MASTER_NODE = "master_node"
1611
SS_NODE_LIST = "node_list"
1612
SS_NODE_PRIMARY_IPS = "node_primary_ips"
1613
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
1614
SS_OFFLINE_NODES = "offline_nodes"
1615
SS_ONLINE_NODES = "online_nodes"
1616
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
1617
SS_INSTANCE_LIST = "instance_list"
1618
SS_RELEASE_VERSION = "release_version"
1619
SS_HYPERVISOR_LIST = "hypervisor_list"
1620
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
1621
SS_UID_POOL = "uid_pool"
1622
SS_NODEGROUPS = "nodegroups"
1623
SS_NETWORKS = "networks"
1624

    
1625
# This is not a complete SSCONF key, but the prefix for the hypervisor keys
1626
SS_HVPARAMS_PREF = "hvparams_"
1627

    
1628
# Hvparams keys:
1629
SS_HVPARAMS_XEN_PVM = SS_HVPARAMS_PREF + HT_XEN_PVM
1630
SS_HVPARAMS_XEN_FAKE = SS_HVPARAMS_PREF + HT_FAKE
1631
SS_HVPARAMS_XEN_HVM = SS_HVPARAMS_PREF + HT_XEN_HVM
1632
SS_HVPARAMS_XEN_KVM = SS_HVPARAMS_PREF + HT_KVM
1633
SS_HVPARAMS_XEN_CHROOT = SS_HVPARAMS_PREF + HT_CHROOT
1634
SS_HVPARAMS_XEN_LXC = SS_HVPARAMS_PREF + HT_LXC
1635

    
1636
VALID_SS_HVPARAMS_KEYS = compat.UniqueFrozenset([
1637
  SS_HVPARAMS_XEN_PVM,
1638
  SS_HVPARAMS_XEN_FAKE,
1639
  SS_HVPARAMS_XEN_HVM,
1640
  SS_HVPARAMS_XEN_KVM,
1641
  SS_HVPARAMS_XEN_CHROOT,
1642
  SS_HVPARAMS_XEN_LXC,
1643
  ])
1644

    
1645
SS_FILE_PERMS = 0444
1646

    
1647
# cluster wide default parameters
1648
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM
1649

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

    
1768
HVC_GLOBALS = compat.UniqueFrozenset([
1769
  HV_MIGRATION_PORT,
1770
  HV_MIGRATION_BANDWIDTH,
1771
  HV_MIGRATION_MODE,
1772
  HV_XEN_CMD,
1773
  ])
1774

    
1775
BEC_DEFAULTS = {
1776
  BE_MINMEM: 128,
1777
  BE_MAXMEM: 128,
1778
  BE_VCPUS: 1,
1779
  BE_AUTO_BALANCE: True,
1780
  BE_ALWAYS_FAILOVER: False,
1781
  BE_SPINDLE_USE: 1,
1782
  }
1783

    
1784
NDC_DEFAULTS = {
1785
  ND_OOB_PROGRAM: "",
1786
  ND_SPINDLE_COUNT: 1,
1787
  ND_EXCLUSIVE_STORAGE: False,
1788
  ND_OVS: False,
1789
  ND_OVS_NAME: DEFAULT_OVS,
1790
  ND_OVS_LINK: ""
1791
  }
1792

    
1793
NDC_GLOBALS = compat.UniqueFrozenset([
1794
  ND_EXCLUSIVE_STORAGE,
1795
  ])
1796

    
1797
DISK_LD_DEFAULTS = {
1798
  DT_DRBD8: {
1799
    LDP_RESYNC_RATE: CLASSIC_DRBD_SYNC_SPEED,
1800
    LDP_BARRIERS: _constants.DRBD_BARRIERS,
1801
    LDP_NO_META_FLUSH: _constants.DRBD_NO_META_FLUSH,
1802
    LDP_DEFAULT_METAVG: DEFAULT_VG,
1803
    LDP_DISK_CUSTOM: "",
1804
    LDP_NET_CUSTOM: "",
1805
    LDP_PROTOCOL: DRBD_DEFAULT_NET_PROTOCOL,
1806
    LDP_DYNAMIC_RESYNC: False,
1807

    
1808
    # The default values for the DRBD dynamic resync speed algorithm
1809
    # are taken from the drbsetup 8.3.11 man page, except for
1810
    # c-plan-ahead (that we don't need to set to 0, because we have a
1811
    # separate option to enable it) and for c-max-rate, that we cap to
1812
    # the default value for the static resync rate.
1813
    LDP_PLAN_AHEAD: 20, # ds
1814
    LDP_FILL_TARGET: 0, # sectors
1815
    LDP_DELAY_TARGET: 1, # ds
1816
    LDP_MAX_RATE: CLASSIC_DRBD_SYNC_SPEED, # KiB/s
1817
    LDP_MIN_RATE: 4 * 1024, # KiB/s
1818
    },
1819
  DT_PLAIN: {
1820
    LDP_STRIPES: _constants.LVM_STRIPECOUNT
1821
    },
1822
  DT_FILE: {},
1823
  DT_SHARED_FILE: {},
1824
  DT_BLOCK: {},
1825
  DT_RBD: {
1826
    LDP_POOL: "rbd",
1827
    LDP_ACCESS: DISK_KERNELSPACE,
1828
    },
1829
  DT_EXT: {},
1830
  }
1831

    
1832
# readability shortcuts
1833
_LV_DEFAULTS = DISK_LD_DEFAULTS[DT_PLAIN]
1834
_DRBD_DEFAULTS = DISK_LD_DEFAULTS[DT_DRBD8]
1835

    
1836
DISK_DT_DEFAULTS = {
1837
  DT_PLAIN: {
1838
    LV_STRIPES: DISK_LD_DEFAULTS[DT_PLAIN][LDP_STRIPES],
1839
    },
1840
  DT_DRBD8: {
1841
    DRBD_RESYNC_RATE: _DRBD_DEFAULTS[LDP_RESYNC_RATE],
1842
    DRBD_DATA_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1843
    DRBD_META_STRIPES: _LV_DEFAULTS[LDP_STRIPES],
1844
    DRBD_DISK_BARRIERS: _DRBD_DEFAULTS[LDP_BARRIERS],
1845
    DRBD_META_BARRIERS: _DRBD_DEFAULTS[LDP_NO_META_FLUSH],
1846
    DRBD_DEFAULT_METAVG: _DRBD_DEFAULTS[LDP_DEFAULT_METAVG],
1847
    DRBD_DISK_CUSTOM: _DRBD_DEFAULTS[LDP_DISK_CUSTOM],
1848
    DRBD_NET_CUSTOM: _DRBD_DEFAULTS[LDP_NET_CUSTOM],
1849
    DRBD_PROTOCOL: _DRBD_DEFAULTS[LDP_PROTOCOL],
1850
    DRBD_DYNAMIC_RESYNC: _DRBD_DEFAULTS[LDP_DYNAMIC_RESYNC],
1851
    DRBD_PLAN_AHEAD: _DRBD_DEFAULTS[LDP_PLAN_AHEAD],
1852
    DRBD_FILL_TARGET: _DRBD_DEFAULTS[LDP_FILL_TARGET],
1853
    DRBD_DELAY_TARGET: _DRBD_DEFAULTS[LDP_DELAY_TARGET],
1854
    DRBD_MAX_RATE: _DRBD_DEFAULTS[LDP_MAX_RATE],
1855
    DRBD_MIN_RATE: _DRBD_DEFAULTS[LDP_MIN_RATE],
1856
    },
1857
  DT_DISKLESS: {},
1858
  DT_FILE: {},
1859
  DT_SHARED_FILE: {},
1860
  DT_BLOCK: {},
1861
  DT_RBD: {
1862
    RBD_POOL: DISK_LD_DEFAULTS[DT_RBD][LDP_POOL],
1863
    RBD_ACCESS: DISK_LD_DEFAULTS[DT_RBD][LDP_ACCESS],
1864
    },
1865
  DT_EXT: {},
1866
  }
1867

    
1868
# we don't want to export the shortcuts
1869
del _LV_DEFAULTS, _DRBD_DEFAULTS
1870

    
1871
NICC_DEFAULTS = {
1872
  NIC_MODE: NIC_MODE_BRIDGED,
1873
  NIC_LINK: DEFAULT_BRIDGE,
1874
  NIC_VLAN: VALUE_HS_NOTHING,
1875
  }
1876

    
1877
# All of the following values are quite arbitrarily - there are no
1878
# "good" defaults, these must be customised per-site
1879
ISPECS_MINMAX_DEFAULTS = {
1880
  ISPECS_MIN: {
1881
    ISPEC_MEM_SIZE: 128,
1882
    ISPEC_CPU_COUNT: 1,
1883
    ISPEC_DISK_COUNT: 1,
1884
    ISPEC_DISK_SIZE: 1024,
1885
    ISPEC_NIC_COUNT: 1,
1886
    ISPEC_SPINDLE_USE: 1,
1887
    },
1888
  ISPECS_MAX: {
1889
    ISPEC_MEM_SIZE: 32768,
1890
    ISPEC_CPU_COUNT: 8,
1891
    ISPEC_DISK_COUNT: MAX_DISKS,
1892
    ISPEC_DISK_SIZE: 1024 * 1024,
1893
    ISPEC_NIC_COUNT: MAX_NICS,
1894
    ISPEC_SPINDLE_USE: 12,
1895
    },
1896
  }
1897
IPOLICY_DEFAULTS = {
1898
  ISPECS_MINMAX: [ISPECS_MINMAX_DEFAULTS],
1899
  ISPECS_STD: {
1900
    ISPEC_MEM_SIZE: 128,
1901
    ISPEC_CPU_COUNT: 1,
1902
    ISPEC_DISK_COUNT: 1,
1903
    ISPEC_DISK_SIZE: 1024,
1904
    ISPEC_NIC_COUNT: 1,
1905
    ISPEC_SPINDLE_USE: 1,
1906
    },
1907
  IPOLICY_DTS: list(DISK_TEMPLATES),
1908
  IPOLICY_VCPU_RATIO: 4.0,
1909
  IPOLICY_SPINDLE_RATIO: 32.0,
1910
  }
1911

    
1912
MASTER_POOL_SIZE_DEFAULT = 10
1913

    
1914
# Exclusive storage:
1915
# Error margin used to compare physical disks
1916
PART_MARGIN = .01
1917
# Space reserved when creating instance disks
1918
PART_RESERVED = .02
1919

    
1920
CONFD_PROTOCOL_VERSION = _constants.CONFD_PROTOCOL_VERSION
1921

    
1922
CONFD_REQ_PING = _constants.CONFD_REQ_PING
1923
CONFD_REQ_NODE_ROLE_BYNAME = _constants.CONFD_REQ_NODE_ROLE_BYNAME
1924
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = _constants.CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
1925
CONFD_REQ_CLUSTER_MASTER = _constants.CONFD_REQ_CLUSTER_MASTER
1926
CONFD_REQ_NODE_PIP_LIST = _constants.CONFD_REQ_NODE_PIP_LIST
1927
CONFD_REQ_MC_PIP_LIST = _constants.CONFD_REQ_MC_PIP_LIST
1928
CONFD_REQ_INSTANCES_IPS_LIST = _constants.CONFD_REQ_INSTANCES_IPS_LIST
1929
CONFD_REQ_NODE_DRBD = _constants.CONFD_REQ_NODE_DRBD
1930
CONFD_REQ_NODE_INSTANCES = _constants.CONFD_REQ_NODE_INSTANCES
1931
CONFD_REQS = _constants.CONFD_REQS
1932

    
1933
# Confd request query fields. These are used to narrow down queries.
1934
# These must be strings rather than integers, because json-encoding
1935
# converts them to strings anyway, as they're used as dict-keys.
1936
CONFD_REQQ_LINK = _constants.CONFD_REQQ_LINK
1937
CONFD_REQQ_IP = _constants.CONFD_REQQ_IP
1938
CONFD_REQQ_IPLIST = _constants.CONFD_REQQ_IPLIST
1939
CONFD_REQQ_FIELDS = _constants.CONFD_REQQ_FIELDS
1940

    
1941
# FIXME: perhaps update code that uses these constants to deal with
1942
# integers instead of strings
1943
CONFD_REQFIELD_NAME = str(_constants.CONFD_REQFIELD_NAME)
1944
CONFD_REQFIELD_IP = str(_constants.CONFD_REQFIELD_IP)
1945
CONFD_REQFIELD_MNODE_PIP = str(_constants.CONFD_REQFIELD_MNODE_PIP)
1946

    
1947
CONFD_REPL_STATUS_OK = _constants.CONFD_REPL_STATUS_OK
1948
CONFD_REPL_STATUS_ERROR = _constants.CONFD_REPL_STATUS_ERROR
1949
CONFD_REPL_STATUS_NOTIMPLEMENTED = _constants.CONFD_REPL_STATUS_NOTIMPLEMENTED
1950
CONFD_REPL_STATUSES = _constants.CONFD_REPL_STATUSES
1951

    
1952
CONFD_NODE_ROLE_MASTER = _constants.CONFD_NODE_ROLE_MASTER
1953
CONFD_NODE_ROLE_CANDIDATE = _constants.CONFD_NODE_ROLE_CANDIDATE
1954
CONFD_NODE_ROLE_OFFLINE = _constants.CONFD_NODE_ROLE_OFFLINE
1955
CONFD_NODE_ROLE_DRAINED = _constants.CONFD_NODE_ROLE_DRAINED
1956
CONFD_NODE_ROLE_REGULAR = _constants.CONFD_NODE_ROLE_REGULAR
1957

    
1958
CONFD_ERROR_UNKNOWN_ENTRY = _constants.CONFD_ERROR_UNKNOWN_ENTRY
1959
CONFD_ERROR_INTERNAL = _constants.CONFD_ERROR_INTERNAL
1960
CONFD_ERROR_ARGUMENT = _constants.CONFD_ERROR_ARGUMENT
1961

    
1962
# Each request is "salted" by the current timestamp.
1963
# This constants decides how many seconds of skew to accept.
1964
# TODO: make this a default and allow the value to be more configurable
1965
CONFD_MAX_CLOCK_SKEW = _constants.CONFD_MAX_CLOCK_SKEW
1966

    
1967
# When we haven't reloaded the config for more than this amount of
1968
# seconds, we force a test to see if inotify is betraying us. Using a
1969
# prime number to ensure we get less chance of 'same wakeup' with
1970
# other processes.
1971
CONFD_CONFIG_RELOAD_TIMEOUT = _constants.CONFD_CONFIG_RELOAD_TIMEOUT
1972

    
1973
# If we receive more than one update in this amount of microseconds,
1974
# we move to polling every RATELIMIT seconds, rather than relying on
1975
# inotify, to be able to serve more requests.
1976
CONFD_CONFIG_RELOAD_RATELIMIT = _constants.CONFD_CONFIG_RELOAD_RATELIMIT
1977

    
1978
# Magic number prepended to all confd queries.
1979
# This allows us to distinguish different types of confd protocols and handle
1980
# them. For example by changing this we can move the whole payload to be
1981
# compressed, or move away from json.
1982
CONFD_MAGIC_FOURCC = _constants.CONFD_MAGIC_FOURCC
1983

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

    
1989
# Timeout in seconds to expire pending query request in the confd client
1990
# library. We don't actually expect any answer more than 10 seconds after we
1991
# sent a request.
1992
CONFD_CLIENT_EXPIRE_TIMEOUT = _constants.CONFD_CLIENT_EXPIRE_TIMEOUT
1993

    
1994
# Maximum UDP datagram size.
1995
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
1996
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
1997
#   (assuming we can't use jumbo frames)
1998
# We just set this to 60K, which should be enough
1999
MAX_UDP_DATA_SIZE = 61440
2000

    
2001
# User-id pool minimum/maximum acceptable user-ids.
2002
UIDPOOL_UID_MIN = 0
2003
UIDPOOL_UID_MAX = 2 ** 32 - 1 # Assuming 32 bit user-ids
2004

    
2005
# Name or path of the pgrep command
2006
PGREP = "pgrep"
2007

    
2008
# Name of the node group that gets created at cluster init or upgrade
2009
INITIAL_NODE_GROUP_NAME = "default"
2010

    
2011
# Possible values for NodeGroup.alloc_policy
2012
ALLOC_POLICY_PREFERRED = _constants.ALLOC_POLICY_PREFERRED
2013
ALLOC_POLICY_LAST_RESORT = _constants.ALLOC_POLICY_LAST_RESORT
2014
ALLOC_POLICY_UNALLOCABLE = _constants.ALLOC_POLICY_UNALLOCABLE
2015
VALID_ALLOC_POLICIES = _constants.VALID_ALLOC_POLICIES
2016

    
2017
# Temporary external/shared storage parameters
2018
BLOCKDEV_DRIVER_MANUAL = _constants.BLOCKDEV_DRIVER_MANUAL
2019

    
2020
# qemu-img path, required for ovfconverter
2021
QEMUIMG_PATH = _constants.QEMUIMG_PATH
2022

    
2023
# Whether htools was enabled at compilation time
2024
HTOOLS = _constants.HTOOLS
2025
# The hail iallocator
2026
IALLOC_HAIL = "hail"
2027

    
2028
# Fake opcodes for functions that have hooks attached to them via
2029
# backend.RunLocalHooks
2030
FAKE_OP_MASTER_TURNUP = "OP_CLUSTER_IP_TURNUP"
2031
FAKE_OP_MASTER_TURNDOWN = "OP_CLUSTER_IP_TURNDOWN"
2032

    
2033
# SSH key types
2034
SSHK_RSA = "rsa"
2035
SSHK_DSA = "dsa"
2036
SSHK_ALL = compat.UniqueFrozenset([SSHK_RSA, SSHK_DSA])
2037

    
2038
# SSH authorized key types
2039
SSHAK_RSA = "ssh-rsa"
2040
SSHAK_DSS = "ssh-dss"
2041
SSHAK_ALL = compat.UniqueFrozenset([SSHAK_RSA, SSHAK_DSS])
2042

    
2043
# SSH setup
2044
SSHS_CLUSTER_NAME = "cluster_name"
2045
SSHS_SSH_HOST_KEY = "ssh_host_key"
2046
SSHS_SSH_ROOT_KEY = "ssh_root_key"
2047
SSHS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2048

    
2049
#: Key files for SSH daemon
2050
SSH_DAEMON_KEYFILES = {
2051
  SSHK_RSA: (pathutils.SSH_HOST_RSA_PRIV, pathutils.SSH_HOST_RSA_PUB),
2052
  SSHK_DSA: (pathutils.SSH_HOST_DSA_PRIV, pathutils.SSH_HOST_DSA_PUB),
2053
  }
2054

    
2055
# Node daemon setup
2056
NDS_CLUSTER_NAME = "cluster_name"
2057
NDS_NODE_DAEMON_CERTIFICATE = "node_daemon_certificate"
2058
NDS_SSCONF = "ssconf"
2059
NDS_START_NODE_DAEMON = "start_node_daemon"
2060

    
2061
# Path generating random UUID
2062
RANDOM_UUID_FILE = _constants.RANDOM_UUID_FILE
2063

    
2064
# Regex string for verifying a UUID
2065
UUID_REGEX = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2066

    
2067
# Auto-repair tag prefixes
2068
AUTO_REPAIR_TAG_PREFIX = _constants.AUTO_REPAIR_TAG_PREFIX
2069
AUTO_REPAIR_TAG_ENABLED = _constants.AUTO_REPAIR_TAG_ENABLED
2070
AUTO_REPAIR_TAG_SUSPENDED = _constants.AUTO_REPAIR_TAG_SUSPENDED
2071
AUTO_REPAIR_TAG_PENDING = _constants.AUTO_REPAIR_TAG_PENDING
2072
AUTO_REPAIR_TAG_RESULT = _constants.AUTO_REPAIR_TAG_RESULT
2073

    
2074
# Auto-repair levels
2075
AUTO_REPAIR_FIX_STORAGE = _constants.AUTO_REPAIR_FIX_STORAGE
2076
AUTO_REPAIR_MIGRATE = _constants.AUTO_REPAIR_MIGRATE
2077
AUTO_REPAIR_FAILOVER = _constants.AUTO_REPAIR_FAILOVER
2078
AUTO_REPAIR_REINSTALL = _constants.AUTO_REPAIR_REINSTALL
2079
AUTO_REPAIR_ALL_TYPES = _constants.AUTO_REPAIR_ALL_TYPES
2080

    
2081
# Auto-repair results
2082
AUTO_REPAIR_SUCCESS = _constants.AUTO_REPAIR_SUCCESS
2083
AUTO_REPAIR_FAILURE = _constants.AUTO_REPAIR_FAILURE
2084
AUTO_REPAIR_ENOPERM = _constants.AUTO_REPAIR_ENOPERM
2085
AUTO_REPAIR_ALL_RESULTS = _constants.AUTO_REPAIR_ALL_RESULTS
2086

    
2087
# The version identifier for builtin data collectors
2088
BUILTIN_DATA_COLLECTOR_VERSION = _constants.BUILTIN_DATA_COLLECTOR_VERSION
2089

    
2090
# The reason trail opcode parameter name
2091
OPCODE_REASON = _constants.OPCODE_REASON
2092

    
2093
# The source reasons for the execution of an OpCode
2094
OPCODE_REASON_SRC_CLIENT = "gnt:client"
2095
OPCODE_REASON_SRC_NODED = "gnt:daemon:noded"
2096
OPCODE_REASON_SRC_OPCODE = "gnt:opcode"
2097
OPCODE_REASON_SRC_RLIB2 = "gnt:library:rlib2"
2098
OPCODE_REASON_SRC_USER = "gnt:user"
2099

    
2100
OPCODE_REASON_SOURCES = compat.UniqueFrozenset([
2101
  OPCODE_REASON_SRC_CLIENT,
2102
  OPCODE_REASON_SRC_NODED,
2103
  OPCODE_REASON_SRC_OPCODE,
2104
  OPCODE_REASON_SRC_RLIB2,
2105
  OPCODE_REASON_SRC_USER,
2106
  ])
2107

    
2108
DISKSTATS_FILE = _constants.DISKSTATS_FILE
2109

    
2110
# CPU load collector variables
2111
STAT_FILE = _constants.STAT_FILE
2112
CPUAVGLOAD_BUFFER_SIZE = _constants.CPUAVGLOAD_BUFFER_SIZE
2113
CPUAVGLOAD_WINDOW_SIZE = _constants.CPUAVGLOAD_WINDOW_SIZE
2114

    
2115
# Mond's variable for periodical data collection
2116
MOND_TIME_INTERVAL = _constants.MOND_TIME_INTERVAL
2117

    
2118
# MonD's latest API version
2119
MOND_LATEST_API_VERSION = 1
2120

    
2121
# Timeouts for upgrades
2122

    
2123
UPGRADE_QUEUE_DRAIN_TIMEOUT = _constants.UPGRADE_QUEUE_DRAIN_TIMEOUT
2124
UPGRADE_QUEUE_POLL_INTERVAL = _constants.UPGRADE_QUEUE_POLL_INTERVAL
2125

    
2126
# Do not re-export imported modules
2127
del re, _vcsversion, _constants, socket, pathutils, compat
2128

    
2129

    
2130
ALLOCATABLE_KEY = "allocatable"
2131
FAILED_KEY = "failed"