constants.py 28.6 KB
Newer Older
Iustin Pop's avatar
Iustin Pop committed
1
#
Iustin Pop's avatar
Iustin Pop committed
2
3
#

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


"""Module holding different constants."""

24
25
import re

26
from ganeti import _autoconf
27

Iustin Pop's avatar
Iustin Pop committed
28
# various versions
29
PROTOCOL_VERSION = 40
30
RELEASE_VERSION = _autoconf.PACKAGE_VERSION
Guido Trotter's avatar
Guido Trotter committed
31
32
OS_API_V10 = 10
OS_API_V15 = 15
33
34
OS_API_V20 = 20
OS_API_VERSIONS = frozenset([OS_API_V10, OS_API_V15, OS_API_V20])
35
VCS_VERSION = _autoconf.VCS_VERSION
Iustin Pop's avatar
Iustin Pop committed
36
EXPORT_VERSION = 0
37
RAPI_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
38

39

40
41
42
43
44
45
46
47
# Format for CONFIG_VERSION:
#   01 03 0123 = 01030123
#   ^^ ^^ ^^^^
#   |  |  + Configuration version/revision
#   |  + Minor version
#   + Major version
#
# It stored as an integer. Make sure not to write an octal number.
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

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

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

  Returns: int representing version number

  """
  assert isinstance(major, int)
  assert isinstance(minor, int)
  assert isinstance(revision, int)
  return (1000000 * major +
            10000 * minor +
                1 * revision)


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

  Returns: tuple; (major, minor, revision)

  """
  assert isinstance(version, int)

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

  return (major, minor, revision)


82
83
84
CONFIG_MAJOR = int(_autoconf.VERSION_MAJOR)
CONFIG_MINOR = int(_autoconf.VERSION_MINOR)
CONFIG_REVISION = 0
85
CONFIG_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, CONFIG_REVISION)
Iustin Pop's avatar
Iustin Pop committed
86

87
88
89
90
91
# user separation
DAEMONS_GROUP = _autoconf.DAEMONS_GROUP
MASTERD_USER = _autoconf.MASTERD_USER
RAPI_USER = _autoconf.RAPI_USER

Iustin Pop's avatar
Iustin Pop committed
92
# file paths
93
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
94
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run"
95
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
96
BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache"
97
DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks"
98
RUN_DIRS_MODE = 0775
Guido Trotter's avatar
Guido Trotter committed
99
SOCKET_DIR = RUN_GANETI_DIR + "/socket"
100
SECURE_DIR_MODE = 0700
101
SECURE_FILE_MODE = 0600
102
SOCKET_DIR_MODE = 0750
103
CRYPTO_KEYS_DIR = RUN_GANETI_DIR + "/crypto"
Guido Trotter's avatar
Guido Trotter committed
104
CRYPTO_KEYS_DIR_MODE = SECURE_DIR_MODE
105
106
IMPORT_EXPORT_DIR = RUN_GANETI_DIR + "/import-export"
IMPORT_EXPORT_DIR_MODE = 0755
107
108
109
# keep RUN_GANETI_DIR first here, to make sure all get created when the node
# daemon is started (this takes care of RUN_DIR being tmpfs)
SUB_RUN_DIRS = [ RUN_GANETI_DIR, BDEV_CACHE_DIR, DISK_LINKS_DIR ]
Iustin Pop's avatar
Iustin Pop committed
110
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
111
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
112
113
114
# User-id pool lock directory
# The user-ids that are in use have a corresponding lock file in this directory
UIDPOOL_LOCKDIR = RUN_GANETI_DIR + "/uid-pool"
Iustin Pop's avatar
Iustin Pop committed
115
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
116
NODED_CERT_FILE = DATA_DIR + "/server.pem"
117
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
118
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
Michael Hanselmann's avatar
Michael Hanselmann committed
119
CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret"
120
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
121
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
122
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
123
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
124
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
125
QUEUE_DIR = DATA_DIR + "/queue"
126
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
127
SETUP_SSH = _autoconf.TOOLSDIR + "/setup-ssh"
128
ETC_HOSTS = "/etc/hosts"
129
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
130
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
131
SYSCONFDIR = _autoconf.SYSCONFDIR
132
TOOLSDIR = _autoconf.TOOLSDIR
133
CONF_DIR = SYSCONFDIR + "/ganeti"
134

135
ALL_CERT_FILES = frozenset([NODED_CERT_FILE, RAPI_CERT_FILE])
136

137
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
138

139
NODED = "ganeti-noded"
Guido Trotter's avatar
Guido Trotter committed
140
CONFD = "ganeti-confd"
Guido Trotter's avatar
Guido Trotter committed
141
RAPI = "ganeti-rapi"
142
MASTERD = "ganeti-masterd"
Guido Trotter's avatar
Guido Trotter committed
143
144
# used in the ganeti-nbma project
NLD = "ganeti-nld"
145
146
147
148

DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
149
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
150
  RAPI: ("tcp", 5080),
151
  "ssh": ("tcp", 22),
Guido Trotter's avatar
Guido Trotter committed
152
153
  # used in the ganeti-nbma project
  NLD: ("udp", 1816),
154
155
}
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
156
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
157
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
Guido Trotter's avatar
Guido Trotter committed
158
159
# used in the ganeti-nbma project
DEFAULT_NLD_PORT = DAEMONS_PORTS[NLD][1]
160

Iustin Pop's avatar
Iustin Pop committed
161
162
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
163
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
164

165
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
166
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
167
168
169
170
171
  # "daemon-name": "logfile"
  NODED: LOG_DIR + "node-daemon.log",
  CONFD: LOG_DIR + "conf-daemon.log",
  RAPI: LOG_DIR + "rapi-daemon.log",
  MASTERD: LOG_DIR + "master-daemon.log",
Guido Trotter's avatar
Guido Trotter committed
172
173
  # used in the ganeti-nbma project
  NLD: LOG_DIR + "nl-daemon.log",
Michael Hanselmann's avatar
Michael Hanselmann committed
174
  }
Michael Hanselmann's avatar
Michael Hanselmann committed
175

176
177
178
LOG_OS_DIR = LOG_DIR + "os"
LOG_WATCHER = LOG_DIR + "watcher.log"
LOG_COMMANDS = LOG_DIR + "commands.log"
Iustin Pop's avatar
Iustin Pop committed
179
LOG_BURNIN = LOG_DIR + "burnin.log"
180
LOG_SETUP_SSH = LOG_DIR + "setup-ssh.log"
Iustin Pop's avatar
Iustin Pop committed
181

Luca Bigliardi's avatar
Luca Bigliardi committed
182
183
DEV_CONSOLE = "/dev/console"

Balazs Lecz's avatar
Balazs Lecz committed
184
185
PROC_MOUNTS = "/proc/mounts"

186
187
188
# luxi related constants
LUXI_EOM = "\3"

189
190
191
192
193
194
195
# one of 'no', 'yes', 'only'
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

196
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
197
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
198
199
200

EXPORT_CONF_FILE = "config.ini"

201
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
202
203
204
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

205
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
206
SOCAT_PATH = _autoconf.SOCAT_PATH
207
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
208
SOCAT_ESCAPE_CODE = "0x1d"
209

210
211
212
213
214
# For RSA keys more bits are better, but they also make operations more
# expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year
# 2010 on.
RSA_KEY_BITS = 2048

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

223
224
225
# Digest used to sign certificates ("openssl x509" uses SHA1 by default)
X509_CERT_SIGN_DIGEST = "SHA1"

226
227
228
229
230
231
# Default validity of certificates in days
X509_CERT_DEFAULT_VALIDITY = 365 * 5

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

232
233
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

234
235
236
237
238
239
IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"

# Import/export daemon mode
IEM_IMPORT = "import"
IEM_EXPORT = "export"

240
241
242
243
244
245
246
247
# Import/export transport compression
IEC_NONE = "none"
IEC_GZIP = "gzip"
IEC_ALL = frozenset([
  IEC_NONE,
  IEC_GZIP,
  ])

248
249
IE_CUSTOM_SIZE = "fd"

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

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

260
VALUE_DEFAULT = "default"
261
262
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
263
VALUE_NONE = "none"
264
265
VALUE_TRUE = "true"
VALUE_FALSE = "false"
266

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

Iustin Pop's avatar
Iustin Pop committed
270
# hooks-related constants
271
HOOKS_BASE_DIR = CONF_DIR + "/hooks"
Iustin Pop's avatar
Iustin Pop committed
272
273
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
274
HOOKS_NAME_CFGUPDATE = "config-update"
Guido Trotter's avatar
Guido Trotter committed
275
HOOKS_NAME_WATCHER = "watcher"
276
HOOKS_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
277
278
279
280
281
282
283
284
285
286

# hooks subject type (what object type does the LU deal with)
HTYPE_CLUSTER = "CLUSTER"
HTYPE_NODE = "NODE"
HTYPE_INSTANCE = "INSTANCE"

HKR_SKIP = 0
HKR_FAIL = 1
HKR_SUCCESS = 2

287
288
289
290
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
291
292

# Storage fields
293
294
295
296
# first two are valid in LU context only, not passed to backend
SF_NODE = "node"
SF_TYPE = "type"
# and the rest are valid in backend
297
298
299
300
301
302
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

303
304
305
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

306
# Available fields per storage type
307
308
309
310
VALID_STORAGE_FIELDS = frozenset([SF_NAME, SF_TYPE, SF_SIZE,
                                  SF_USED, SF_FREE, SF_ALLOCATABLE])

VALID_STORAGE_TYPES = frozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG])
Iustin Pop's avatar
Iustin Pop committed
311

312
313
314
315
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

316
VALID_STORAGE_OPERATIONS = {
317
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
318
319
  }

320
321
322
323
324
325
# Local disk status
# Note: Code depends on LDS_OKAY < LDS_UNKNOWN < LDS_FAULTY
(LDS_OKAY,
 LDS_UNKNOWN,
 LDS_FAULTY) = range(1, 4)

Iustin Pop's avatar
Iustin Pop committed
326
327
328
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
329
DT_DRBD8 = "drbd"
330
DT_FILE = "file"
331
332

# the set of network-mirrored disk templates
333
DTS_NET_MIRROR = frozenset([DT_DRBD8])
Iustin Pop's avatar
Iustin Pop committed
334

335
336
337
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

338
# the set of disk templates which can be grown
Guido Trotter's avatar
Guido Trotter committed
339
DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE])
340

341
342
343
# the set of disk templates that allow adoption
DTS_MAY_ADOPT = frozenset([DT_PLAIN])

344
345
# logical disk types
LD_LV = "lvm"
346
LD_DRBD8 = "drbd8"
347
LD_FILE = "file"
348
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
349

Iustin Pop's avatar
Iustin Pop committed
350
351
# drbd constants
DRBD_HMAC_ALG = "md5"
352
DRBD_NET_PROTOCOL = "C"
353
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
354

355
356
357
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
358
359

# the set of drbd-like disk types
360
LDS_DRBD = frozenset([LD_DRBD8])
361

362
# disk access mode
363
364
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
365
366
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

367
# disk replacement mode
368
369
370
REPLACE_DISK_PRI = "replace_on_primary"    # replace disks on primary
REPLACE_DISK_SEC = "replace_on_secondary"  # replace disks on secondary
REPLACE_DISK_CHG = "replace_new_secondary" # change secondary node
371
REPLACE_DISK_AUTO = "replace_auto"
372
373
374
375
376
377
REPLACE_MODES = frozenset([
  REPLACE_DISK_PRI,
  REPLACE_DISK_SEC,
  REPLACE_DISK_CHG,
  REPLACE_DISK_AUTO,
  ])
378

379
380
381
382
383
384
385
386
# Instance export mode
EXPORT_MODE_LOCAL = "local"
EXPORT_MODE_REMOTE = "remote"
EXPORT_MODES = frozenset([
  EXPORT_MODE_LOCAL,
  EXPORT_MODE_REMOTE,
  ])

387
388
# lock recalculate mode
LOCKS_REPLACE = 'replace'
389
LOCKS_APPEND = 'append'
390

391
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
392
393
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"
394
395
396
397
398
399
INSTANCE_REMOTE_IMPORT = "remote-import"
INSTANCE_CREATE_MODES = frozenset([
  INSTANCE_CREATE,
  INSTANCE_IMPORT,
  INSTANCE_REMOTE_IMPORT,
  ])
Iustin Pop's avatar
Iustin Pop committed
400

401
402
403
404
405
406
407
# Remote import/export handshake message and version
RIE_VERSION = 0
RIE_HANDSHAKE = "Hi, I'm Ganeti"

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

408
409
410
# Remote import/export connect timeout for socat
RIE_CONNECT_TIMEOUT = 60

Iustin Pop's avatar
Iustin Pop committed
411
DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
412
413
414
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
415
416
417
418

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
419
420
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
421
INISECT_OSP = "os"
422

423
424
425
426
# dynamic device modification
DDM_ADD = 'add'
DDM_REMOVE = 'remove'

427
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
428
EXIT_SUCCESS = 0
429
EXIT_FAILURE = 1
430
EXIT_NOTCLUSTER = 5
431
EXIT_NOTMASTER = 11
432
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
433
EXIT_CONFIRMATION = 13 # need user confirmation
434

435
436
437
438
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
439
440
441
442
443
VALID_TAG_TYPES = frozenset([
  TAG_CLUSTER,
  TAG_NODE,
  TAG_INSTANCE,
  ])
444
445
446
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

447
448
# others
DEFAULT_BRIDGE = "xen-br0"
Iustin Pop's avatar
Iustin Pop committed
449
SYNC_SPEED = 60 * 1024
450
451
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
IP4_ADDRESS_ANY = "0.0.0.0"
Manuel Franceschini's avatar
Manuel Franceschini committed
452
453
IP6_ADDRESS_LOCALHOST = "::1"
IP6_ADDRESS_ANY = "::"
454
455
IP4_VERSION = 4
IP6_VERSION = 6
456
TCP_PING_TIMEOUT = 10
457
GANETI_RUNAS = "root"
458
DEFAULT_VG = "xenvg"
459
DEFAULT_DRBD_HELPER = "/bin/true"
460
MIN_VG_SIZE = 20480
461
DEFAULT_MAC_PREFIX = "aa:00:00"
462
LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT
463
464
# default maximum instance wait time, in seconds.
DEFAULT_SHUTDOWN_TIMEOUT = 120
465
NODE_MAX_CLOCK_SKEW = 150
466
467
# Time for an intra-cluster disk transfer to wait for a connection
DISK_TRANSFER_CONNECT_TIMEOUT = 30
468

469
470
471
472
473
474
475
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

RUNPARTS_STATUS = frozenset([RUNPARTS_SKIP, RUNPARTS_RUN, RUNPARTS_ERR])

476
477
478
479
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

480
481
482
483
484
# os related constants
OS_SCRIPT_CREATE = 'create'
OS_SCRIPT_IMPORT = 'import'
OS_SCRIPT_EXPORT = 'export'
OS_SCRIPT_RENAME = 'rename'
485
OS_SCRIPT_VERIFY = 'verify'
Iustin Pop's avatar
Iustin Pop committed
486
OS_SCRIPTS = frozenset([OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT,
487
488
                        OS_SCRIPT_EXPORT, OS_SCRIPT_RENAME,
                        OS_SCRIPT_VERIFY])
489

490
OS_API_FILE = 'ganeti_api_version'
491
OS_VARIANTS_FILE = 'variants.list'
492
493
494
OS_PARAMETERS_FILE = 'parameters.list'

OS_VALIDATE_PARAMETERS = 'parameters'
495
OS_VALIDATE_CALLS = frozenset([OS_VALIDATE_PARAMETERS])
496

497
# ssh constants
498
499
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
500
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
501
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
502
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
503
504
SSH = "ssh"
SCP = "scp"
505
506
507
508
509

# reboot types
INSTANCE_REBOOT_SOFT = "soft"
INSTANCE_REBOOT_HARD = "hard"
INSTANCE_REBOOT_FULL = "full"
510

511
512
513
514
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

515
VTYPE_STRING = 'string'
516
VTYPE_MAYBE_STRING = "maybe-string"
517
518
519
520
521
VTYPE_BOOL = 'bool'
VTYPE_SIZE = 'size' # size, in MiBs
VTYPE_INT = 'int'
ENFORCEABLE_TYPES = frozenset([
                      VTYPE_STRING,
522
                      VTYPE_MAYBE_STRING,
523
524
525
526
527
                      VTYPE_BOOL,
                      VTYPE_SIZE,
                      VTYPE_INT,
                      ])

528
529
530
531
532
533
# HV parameter names (global namespace)
HV_BOOT_ORDER = "boot_order"
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
HV_NIC_TYPE = "nic_type"
HV_DISK_TYPE = "disk_type"
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
534
HV_VNC_PASSWORD_FILE = "vnc_password_file"
535
536
537
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
538
539
HV_ACPI = "acpi"
HV_PAE = "pae"
540
541
542
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
543
HV_KERNEL_ARGS = "kernel_args"
544
545
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
546
HV_ROOT_PATH = "root_path"
547
HV_SERIAL_CONSOLE = "serial_console"
548
HV_USB_MOUSE = "usb_mouse"
549
HV_DEVICE_MODEL = "device_model"
550
HV_INIT_SCRIPT = "init_script"
551
HV_MIGRATION_PORT = "migration_port"
552
553
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
HV_MIGRATION_DOWNTIME = "migration_downtime"
554
HV_MIGRATION_MODE = "migration_mode"
555
HV_USE_LOCALTIME = "use_localtime"
556
HV_DISK_CACHE = "disk_cache"
557
558
HV_SECURITY_MODEL = "security_model"
HV_SECURITY_DOMAIN = "security_domain"
Guido Trotter's avatar
Guido Trotter committed
559
HV_KVM_FLAG = "kvm_flag"
560
HV_VHOST_NET = "vhost_net"
Balazs Lecz's avatar
Balazs Lecz committed
561
HV_KVM_USE_CHROOT = "use_chroot"
562
HV_CPU_MASK = "cpu_mask"
563

564
565
566
567
568
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
569
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
570
571
572
573
574
575
  HV_VNC_BIND_ADDRESS: VTYPE_STRING,
  HV_VNC_TLS: VTYPE_BOOL,
  HV_VNC_X509: VTYPE_STRING,
  HV_VNC_X509_VERIFY: VTYPE_BOOL,
  HV_ACPI: VTYPE_BOOL,
  HV_PAE: VTYPE_BOOL,
576
577
578
  HV_USE_BOOTLOADER: VTYPE_BOOL,
  HV_BOOTLOADER_PATH: VTYPE_STRING,
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
579
  HV_KERNEL_PATH: VTYPE_STRING,
580
  HV_KERNEL_ARGS: VTYPE_STRING,
581
582
583
584
  HV_INITRD_PATH: VTYPE_STRING,
  HV_ROOT_PATH: VTYPE_STRING,
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
585
  HV_DEVICE_MODEL: VTYPE_STRING,
586
  HV_INIT_SCRIPT: VTYPE_STRING,
587
  HV_MIGRATION_PORT: VTYPE_INT,
588
589
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
590
  HV_MIGRATION_MODE: VTYPE_STRING,
591
  HV_USE_LOCALTIME: VTYPE_BOOL,
592
  HV_DISK_CACHE: VTYPE_STRING,
593
594
  HV_SECURITY_MODEL: VTYPE_STRING,
  HV_SECURITY_DOMAIN: VTYPE_STRING,
Guido Trotter's avatar
Guido Trotter committed
595
  HV_KVM_FLAG: VTYPE_STRING,
596
  HV_VHOST_NET: VTYPE_BOOL,
Balazs Lecz's avatar
Balazs Lecz committed
597
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
598
  HV_CPU_MASK: VTYPE_STRING,
599
600
601
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
602

603
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
604
BE_MEMORY = "memory"
605
BE_VCPUS = "vcpus"
606
BE_AUTO_BALANCE = "auto_balance"
607

608
609
610
611
612
613
614
BES_PARAMETER_TYPES = {
    BE_MEMORY: VTYPE_SIZE,
    BE_VCPUS: VTYPE_INT,
    BE_AUTO_BALANCE: VTYPE_BOOL,
    }

BES_PARAMETERS = frozenset(BES_PARAMETER_TYPES.keys())
Iustin Pop's avatar
Iustin Pop committed
615

616
617
# Instance Parameters Profile
PP_DEFAULT = "default"
618

Guido Trotter's avatar
Guido Trotter committed
619
620
621
622
623
624
625
626
627
628
629
630
631
632
NIC_MODE = "mode"
NIC_LINK = "link"

NIC_MODE_BRIDGED = "bridged"
NIC_MODE_ROUTED = "routed"

NIC_VALID_MODES = frozenset([NIC_MODE_BRIDGED, NIC_MODE_ROUTED])

NICS_PARAMETER_TYPES = {
    NIC_MODE: VTYPE_STRING,
    NIC_LINK: VTYPE_STRING,
    }

NICS_PARAMETERS = frozenset(NICS_PARAMETER_TYPES.keys())
633

634
635
IDISK_SIZE = "size"
IDISK_MODE = "mode"
636
637
638
639
640
641
IDISK_ADOPT = "adopt"
IDISK_PARAMS_TYPES = {
  IDISK_SIZE: VTYPE_SIZE,
  IDISK_MODE: VTYPE_STRING,
  IDISK_ADOPT: VTYPE_STRING,
  }
642
643
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())

644
645
646
647
648
INIC_MAC = "mac"
INIC_IP = "ip"
INIC_MODE = "mode"
INIC_LINK = "link"
INIC_BRIDGE = "bridge"
649
650
651
652
653
654
655
656
INIC_PARAMS_TYPES = {
  INIC_BRIDGE: VTYPE_STRING,
  INIC_IP: VTYPE_MAYBE_STRING,
  INIC_LINK: VTYPE_STRING,
  INIC_MAC: VTYPE_STRING,
  INIC_MODE: VTYPE_STRING,
  }
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
657

658
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
659
HT_XEN_PVM = "xen-pvm"
660
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
661
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
662
HT_KVM = "kvm"
663
HT_CHROOT = "chroot"
Iustin Pop's avatar
Iustin Pop committed
664
665
666
667
668
669
670
671
672
HT_LXC = "lxc"
HYPER_TYPES = frozenset([
  HT_XEN_PVM,
  HT_FAKE,
  HT_XEN_HVM,
  HT_KVM,
  HT_CHROOT,
  HT_LXC,
  ])
Guido Trotter's avatar
Guido Trotter committed
673
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
674

675
VNC_BASE_PORT = 5900
676
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
Manuel Franceschini's avatar
Manuel Franceschini committed
677
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
678

679
# NIC types
680
681
682
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
683
684
685
686
687
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
688
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
689

690
691
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
692
693
694
695
696
HT_KVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_I82551,
                                    HT_NIC_I85557B, HT_NIC_I8259ER,
                                    HT_NIC_PCNET, HT_NIC_E1000,
                                    HT_NIC_PARAVIRTUAL])
697
698
699
700
701
702
703
704
# Disk types
HT_DISK_IOEMU = "ioemu"
HT_DISK_IDE = "ide"
HT_DISK_SCSI = "scsi"
HT_DISK_SD = "sd"
HT_DISK_MTD = "mtd"
HT_DISK_PFLASH = "pflash"

705
706
707
708
709
710
711
712
713
HT_CACHE_DEFAULT = "default"
HT_CACHE_NONE = "none"
HT_CACHE_WTHROUGH = "writethrough"
HT_CACHE_WBACK = "writeback"
HT_VALID_CACHE_TYPES = frozenset([HT_CACHE_DEFAULT,
                                  HT_CACHE_NONE,
                                  HT_CACHE_WTHROUGH,
                                  HT_CACHE_WBACK])

714
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
715
716
717
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
718

719
720
721
722
723
724
725
726
727
728
729
730
731
# Mouse types:
HT_MOUSE_MOUSE = "mouse"
HT_MOUSE_TABLET = "tablet"

HT_KVM_VALID_MOUSE_TYPES = frozenset([HT_MOUSE_MOUSE, HT_MOUSE_TABLET])

# Boot order
HT_BO_CDROM = "cdrom"
HT_BO_DISK = "disk"
HT_BO_NETWORK = "network"

HT_KVM_VALID_BO_TYPES = frozenset([HT_BO_CDROM, HT_BO_DISK, HT_BO_NETWORK])

732
733
734
735
736
737
738
# Security models
HT_SM_NONE = "none"
HT_SM_USER = "user"
HT_SM_POOL = "pool"

HT_KVM_VALID_SM_TYPES = frozenset([HT_SM_NONE, HT_SM_USER, HT_SM_POOL])

Guido Trotter's avatar
Guido Trotter committed
739
740
741
742
743
744
# Kvm flag values
HT_KVM_ENABLED = "enabled"
HT_KVM_DISABLED = "disabled"

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

745
746
747
# Migration type
HT_MIGRATION_LIVE = "live"
HT_MIGRATION_NONLIVE = "non-live"
748
HT_MIGRATION_MODES = frozenset([HT_MIGRATION_LIVE, HT_MIGRATION_NONLIVE])
749

750
751
752
753
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

754
# Node verify constants
755
NV_DRBDHELPER = "drbd-helper"
756
NV_DRBDLIST = "drbd-list"
757
758
759
760
NV_FILELIST = "filelist"
NV_HVINFO = "hvinfo"
NV_HYPERVISOR = "hypervisor"
NV_INSTANCELIST = "instancelist"
761
762
NV_LVLIST = "lvlist"
NV_MASTERIP = "master-ip"
763
764
NV_NODELIST = "nodelist"
NV_NODENETTEST = "node-net-test"
765
NV_NODESETUP = "nodesetup"
766
767
NV_OSLIST = "oslist"
NV_PVLIST = "pvlist"
768
NV_TIME = "time"
769
770
NV_VERSION = "version"
NV_VGLIST = "vglist"
771

772
773
774
775
# SSL certificate check constants (in days)
SSL_CERT_EXPIRATION_WARN = 30
SSL_CERT_EXPIRATION_ERROR = 7

776
# Allocator framework constants
777
IALLOCATOR_VERSION = 2
778
779
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
780
781
782
783
VALID_IALLOCATOR_DIRECTIONS = frozenset([
  IALLOCATOR_DIR_IN,
  IALLOCATOR_DIR_OUT,
  ])
784
785
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
786
IALLOCATOR_MODE_MEVAC = "multi-evacuate"
787
788
789
790
791
VALID_IALLOCATOR_MODES = frozenset([
  IALLOCATOR_MODE_ALLOC,
  IALLOCATOR_MODE_RELOC,
  IALLOCATOR_MODE_MEVAC,
  ])
792
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
793

794
795
796
797
798
# Job queue
JOB_QUEUE_VERSION = 1
JOB_QUEUE_LOCK_FILE = QUEUE_DIR + "/lock"
JOB_QUEUE_VERSION_FILE = QUEUE_DIR + "/version"
JOB_QUEUE_SERIAL_FILE = QUEUE_DIR + "/serial"
799
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
800
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
801
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
802
JOB_QUEUE_DIRS = [QUEUE_DIR, JOB_QUEUE_ARCHIVE_DIR]
803
JOB_QUEUE_DIRS_MODE = SECURE_DIR_MODE
804

805
806
JOB_ID_TEMPLATE = r"\d+"

807
808
809
# unchanged job return
JOB_NOTCHANGED = "nochange"

810
811
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
812
JOB_STATUS_WAITLOCK = "waiting"
813
JOB_STATUS_CANCELING = "canceling"
814
815
816
817
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"
818
819
820
821
822
JOBS_FINALIZED = frozenset([
  JOB_STATUS_CANCELED,
  JOB_STATUS_SUCCESS,
  JOB_STATUS_ERROR,
  ])
823

824
825
# OpCode status
# not yet finalized
826
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
827
OP_STATUS_WAITLOCK = "waiting"
828
OP_STATUS_CANCELING = "canceling"
829
OP_STATUS_RUNNING = "running"
830
# finalized
831
OP_STATUS_CANCELED = "canceled"
832
833
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
834
835
836
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
837
838
839
840

# Execution log types
ELOG_MESSAGE = "message"
ELOG_PROGRESS = "progress"
841
ELOG_REMOTE_IMPORT = "remote-import"
842
843
844
845
846
847
848
ELOG_JQUEUE_TEST = "jqueue-test"

# Job queue test
JQT_MSGPREFIX = "TESTMSG="
JQT_EXPANDNAMES = "expandnames"
JQT_EXEC = "exec"
JQT_LOGMSG = "logmsg"
849
JQT_STARTMSG = "startmsg"
850
851
852
853
JQT_ALL = frozenset([
  JQT_EXPANDNAMES,
  JQT_EXEC,
  JQT_LOGMSG,
854
  JQT_STARTMSG,
855
  ])
856

857
# max dynamic devices
858
859
860
MAX_NICS = 8
MAX_DISKS = 16

Iustin Pop's avatar
Iustin Pop committed
861
862
# SSCONF keys
SS_CLUSTER_NAME = "cluster_name"
863
SS_CLUSTER_TAGS = "cluster_tags"
Iustin Pop's avatar
Iustin Pop committed
864
SS_FILE_STORAGE_DIR = "file_storage_dir"
865
SS_MASTER_CANDIDATES = "master_candidates"
866
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
Iustin Pop's avatar
Iustin Pop committed
867
868
869
870
SS_MASTER_IP = "master_ip"
SS_MASTER_NETDEV = "master_netdev"
SS_MASTER_NODE = "master_node"
SS_NODE_LIST = "node_list"
871
872
SS_NODE_PRIMARY_IPS = "node_primary_ips"
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
873
SS_OFFLINE_NODES = "offline_nodes"
874
SS_ONLINE_NODES = "online_nodes"
875
SS_PRIMARY_IP_FAMILY = "primary_ip_family"
876
SS_INSTANCE_LIST = "instance_list"
877
SS_RELEASE_VERSION = "release_version"
878
SS_HYPERVISOR_LIST = "hypervisor_list"
879
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
Balazs Lecz's avatar
Balazs Lecz committed
880
SS_UID_POOL = "uid_pool"
Iustin Pop's avatar
Iustin Pop committed
881

882
883
884
885
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

HVC_DEFAULTS = {
886
  HT_XEN_PVM: {
887
888
889
    HV_USE_BOOTLOADER: False,
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
    HV_BOOTLOADER_ARGS: '',
890
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-xenU",
891
    HV_INITRD_PATH: '',
892
    HV_ROOT_PATH: '/dev/sda1',
893
    HV_KERNEL_ARGS: 'ro',
894
    HV_MIGRATION_PORT: 8002,
895
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
896
897
898
    },
  HT_XEN_HVM: {
    HV_BOOT_ORDER: "cd",
899
    HV_CDROM_IMAGE_PATH: '',
900
    HV_NIC_TYPE: HT_NIC_RTL8139,
901
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
902
    HV_VNC_BIND_ADDRESS: IP4_ADDRESS_ANY,
903
    HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE,
904
905
    HV_ACPI: True,
    HV_PAE: True,
906
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
907
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
908
    HV_MIGRATION_PORT: 8002,
909
    HV_MIGRATION_MODE: HT_MIGRATION_NONLIVE,
910
    HV_USE_LOCALTIME: False,
911
912
913
    },
  HT_KVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
914
    HV_INITRD_PATH: '',
915
    HV_KERNEL_ARGS: 'ro',
916
    HV_ROOT_PATH: '/dev/vda1',
917
918
    HV_ACPI: True,
    HV_SERIAL_CONSOLE: True,
919
    HV_VNC_BIND_ADDRESS: '',
920
921
922
    HV_VNC_TLS: False,
    HV_VNC_X509: '',
    HV_VNC_X509_VERIFY: False,
923
    HV_VNC_PASSWORD_FILE: '',
924
    HV_CDROM_IMAGE_PATH: '',
925
    HV_BOOT_ORDER: HT_BO_DISK,
926
927
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
928
    HV_USB_MOUSE: '',
929
    HV_MIGRATION_PORT: 8102,
930
931
    HV_MIGRATION_BANDWIDTH: 32, # MiB/s
    HV_MIGRATION_DOWNTIME: 30,  # ms
932
    HV_MIGRATION_MODE: HT_MIGRATION_LIVE,
933
    HV_USE_LOCALTIME: False,
934
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
935
936
    HV_SECURITY_MODEL: HT_SM_NONE,
    HV_SECURITY_DOMAIN: '',
Guido Trotter's avatar
Guido Trotter committed
937
    HV_KVM_FLAG: "",
938
    HV_VHOST_NET: False,
Balazs Lecz's avatar
Balazs Lecz committed
939
    HV_KVM_USE_CHROOT: False,
940
941
942
    },
  HT_FAKE: {
    },
943
944
945
  HT_CHROOT: {
    HV_INIT_SCRIPT: "/ganeti-chroot",
    },
Iustin Pop's avatar
Iustin Pop committed
946
  HT_LXC: {
947
    HV_CPU_MASK: "",
Iustin Pop's avatar
Iustin Pop committed
948
    },
949
  }
950

951
952
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
953
  HV_MIGRATION_BANDWIDTH,
954
  HV_MIGRATION_MODE,
955
956
  ])

957
BEC_DEFAULTS = {
958
959
960
961
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }