constants.py 25.3 KB
Newer Older
Iustin Pop's avatar
Iustin Pop committed
1
#
Iustin Pop's avatar
Iustin Pop committed
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#

# Copyright (C) 2006, 2007 Google Inc.
#
# 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 = 30
30
RELEASE_VERSION = _autoconf.PACKAGE_VERSION
Guido Trotter's avatar
Guido Trotter committed
31
32
33
OS_API_V10 = 10
OS_API_V15 = 15
OS_API_VERSIONS = frozenset([OS_API_V10, OS_API_V15])
Iustin Pop's avatar
Iustin Pop committed
34
EXPORT_VERSION = 0
35
RAPI_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
36

37

38
39
40
41
42
43
44
45
# 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.
46
47
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

# 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)


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

85
86
87
88
89
# user separation
DAEMONS_GROUP = _autoconf.DAEMONS_GROUP
MASTERD_USER = _autoconf.MASTERD_USER
RAPI_USER = _autoconf.RAPI_USER

Iustin Pop's avatar
Iustin Pop committed
90
# file paths
91
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
92
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run"
93
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
94
BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache"
95
DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks"
96
RUN_DIRS_MODE = 0775
Guido Trotter's avatar
Guido Trotter committed
97
SOCKET_DIR = RUN_GANETI_DIR + "/socket"
98
SECURE_DIR_MODE = 0700
99
SOCKET_DIR_MODE = 0750
100
CRYPTO_KEYS_DIR = RUN_GANETI_DIR + "/crypto"
Guido Trotter's avatar
Guido Trotter committed
101
CRYPTO_KEYS_DIR_MODE = SECURE_DIR_MODE
102
103
IMPORT_EXPORT_DIR = RUN_GANETI_DIR + "/import-export"
IMPORT_EXPORT_DIR_MODE = 0755
104
105
106
# 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
107
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
108
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
109
110
111
# 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
112
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
113
NODED_CERT_FILE = DATA_DIR + "/server.pem"
114
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
115
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
Michael Hanselmann's avatar
Michael Hanselmann committed
116
CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret"
117
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
118
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
119
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
120
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
121
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
122
QUEUE_DIR = DATA_DIR + "/queue"
123
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
124
ETC_HOSTS = "/etc/hosts"
125
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
126
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
127
SYSCONFDIR = _autoconf.SYSCONFDIR
128
TOOLSDIR = _autoconf.TOOLSDIR
129
CONF_DIR = SYSCONFDIR + "/ganeti"
130

131
ALL_CERT_FILES = frozenset([NODED_CERT_FILE, RAPI_CERT_FILE])
132

133
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
134

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

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

Iustin Pop's avatar
Iustin Pop committed
156
157
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
158
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
159

160
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
161
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
162
163
164
165
166
  # "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
167
168
  # used in the ganeti-nbma project
  NLD: LOG_DIR + "nl-daemon.log",
Michael Hanselmann's avatar
Michael Hanselmann committed
169
  }
Michael Hanselmann's avatar
Michael Hanselmann committed
170

171
172
173
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
174
LOG_BURNIN = LOG_DIR + "burnin.log"
Iustin Pop's avatar
Iustin Pop committed
175

Luca Bigliardi's avatar
Luca Bigliardi committed
176
177
DEV_CONSOLE = "/dev/console"

178
179
180
# luxi related constants
LUXI_EOM = "\3"

181
182
183
184
185
186
187
# one of 'no', 'yes', 'only'
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

188
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
189
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
190
191
192

EXPORT_CONF_FILE = "config.ini"

193
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
194
195
196
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

197
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
198
SOCAT_PATH = _autoconf.SOCAT_PATH
199
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
200
SOCAT_ESCAPE_CODE = "0x1d"
201

202
203
204
205
206
207
208
209
# 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

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

210
211
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

212
213
214
215
216
217
IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"

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

218
219
220
221
222
223
224
225
# Import/export transport compression
IEC_NONE = "none"
IEC_GZIP = "gzip"
IEC_ALL = frozenset([
  IEC_NONE,
  IEC_GZIP,
  ])

226
227
228
229
230
231
232
233
# 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"

234
VALUE_DEFAULT = "default"
235
236
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
237
VALUE_NONE = "none"
238
239
VALUE_TRUE = "true"
VALUE_FALSE = "false"
240

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

Iustin Pop's avatar
Iustin Pop committed
244
# hooks-related constants
245
HOOKS_BASE_DIR = CONF_DIR + "/hooks"
Iustin Pop's avatar
Iustin Pop committed
246
247
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
248
HOOKS_NAME_CFGUPDATE = "config-update"
Guido Trotter's avatar
Guido Trotter committed
249
HOOKS_NAME_WATCHER = "watcher"
250
HOOKS_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
251
252
253
254
255
256
257
258
259
260

# 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

261
262
263
264
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
265
266

# Storage fields
267
268
269
270
# 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
271
272
273
274
275
276
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

277
278
279
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

280
# Available fields per storage type
281
282
283
284
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
285

286
287
288
289
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

290
VALID_STORAGE_OPERATIONS = {
291
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
292
293
  }

294
295
296
297
298
299
# 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
300
301
302
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
303
DT_DRBD8 = "drbd"
304
DT_FILE = "file"
305
306

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

309
310
311
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

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

315
316
# logical disk types
LD_LV = "lvm"
317
LD_DRBD8 = "drbd8"
318
LD_FILE = "file"
319
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
320

Iustin Pop's avatar
Iustin Pop committed
321
322
# drbd constants
DRBD_HMAC_ALG = "md5"
323
DRBD_NET_PROTOCOL = "C"
324
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
325

326
327
328
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
329
330

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

333
# disk access mode
334
335
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
336
337
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

338
# disk replacement mode
339
340
341
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
342
REPLACE_DISK_AUTO = "replace_auto"
343

344
345
346
347
348
349
350
351
# Instance export mode
EXPORT_MODE_LOCAL = "local"
EXPORT_MODE_REMOTE = "remote"
EXPORT_MODES = frozenset([
  EXPORT_MODE_LOCAL,
  EXPORT_MODE_REMOTE,
  ])

352
353
# lock recalculate mode
LOCKS_REPLACE = 'replace'
354
LOCKS_APPEND = 'append'
355

356
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
357
358
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"
359
360
361
362
363
364
INSTANCE_REMOTE_IMPORT = "remote-import"
INSTANCE_CREATE_MODES = frozenset([
  INSTANCE_CREATE,
  INSTANCE_IMPORT,
  INSTANCE_REMOTE_IMPORT,
  ])
Iustin Pop's avatar
Iustin Pop committed
365

366
367
368
369
370
371
372
# 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

373
374
375
# Remote import/export connect timeout for socat
RIE_CONNECT_TIMEOUT = 60

Iustin Pop's avatar
Iustin Pop committed
376
DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
377
378
379
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
380
381
382
383

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
384
385
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
386

387
388
389
390
# dynamic device modification
DDM_ADD = 'add'
DDM_REMOVE = 'remove'

391
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
392
EXIT_SUCCESS = 0
393
EXIT_FAILURE = 1
394
EXIT_NOTCLUSTER = 5
395
EXIT_NOTMASTER = 11
396
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
397
EXIT_CONFIRMATION = 13 # need user confirmation
398

399
400
401
402
403
404
405
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

406
407
# others
DEFAULT_BRIDGE = "xen-br0"
Iustin Pop's avatar
Iustin Pop committed
408
SYNC_SPEED = 60 * 1024
Iustin Pop's avatar
Iustin Pop committed
409
LOCALHOST_IP_ADDRESS = "127.0.0.1"
410
TCP_PING_TIMEOUT = 10
411
GANETI_RUNAS = "root"
412
DEFAULT_VG = "xenvg"
413
BIND_ADDRESS_GLOBAL = "0.0.0.0"
414
MIN_VG_SIZE = 20480
415
DEFAULT_MAC_PREFIX = "aa:00:00"
416
LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT
417
418
# default maximum instance wait time, in seconds.
DEFAULT_SHUTDOWN_TIMEOUT = 120
419
NODE_MAX_CLOCK_SKEW = 150
420
421
# Time for an intra-cluster disk transfer to wait for a connection
DISK_TRANSFER_CONNECT_TIMEOUT = 30
422

423
424
425
426
427
428
429
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

430
431
432
433
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

434
435
436
437
438
# os related constants
OS_SCRIPT_CREATE = 'create'
OS_SCRIPT_IMPORT = 'import'
OS_SCRIPT_EXPORT = 'export'
OS_SCRIPT_RENAME = 'rename'
Iustin Pop's avatar
Iustin Pop committed
439
OS_SCRIPTS = frozenset([OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT,
440
                        OS_SCRIPT_EXPORT, OS_SCRIPT_RENAME])
441

442
OS_API_FILE = 'ganeti_api_version'
443
OS_VARIANTS_FILE = 'variants.list'
444

445
# ssh constants
446
447
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
448
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
449
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
450
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
451
452
SSH = "ssh"
SCP = "scp"
453
454
455
456
457

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

459
460
461
462
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

463
464
465
466
467
468
469
470
471
472
473
VTYPE_STRING = 'string'
VTYPE_BOOL = 'bool'
VTYPE_SIZE = 'size' # size, in MiBs
VTYPE_INT = 'int'
ENFORCEABLE_TYPES = frozenset([
                      VTYPE_STRING,
                      VTYPE_BOOL,
                      VTYPE_SIZE,
                      VTYPE_INT,
                      ])

474
475
476
477
478
479
# 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"
480
HV_VNC_PASSWORD_FILE = "vnc_password_file"
481
482
483
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
484
485
HV_ACPI = "acpi"
HV_PAE = "pae"
486
487
488
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
489
HV_KERNEL_ARGS = "kernel_args"
490
491
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
492
HV_ROOT_PATH = "root_path"
493
HV_SERIAL_CONSOLE = "serial_console"
494
HV_USB_MOUSE = "usb_mouse"
495
HV_DEVICE_MODEL = "device_model"
496
HV_INIT_SCRIPT = "init_script"
497
HV_MIGRATION_PORT = "migration_port"
498
499
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
HV_MIGRATION_DOWNTIME = "migration_downtime"
500
HV_USE_LOCALTIME = "use_localtime"
501
HV_DISK_CACHE = "disk_cache"
502
503
HV_SECURITY_MODEL = "security_model"
HV_SECURITY_DOMAIN = "security_domain"
Guido Trotter's avatar
Guido Trotter committed
504
HV_KVM_FLAG = "kvm_flag"
505
HV_VHOST_NET = "vhost_net"
Balazs Lecz's avatar
Balazs Lecz committed
506
HV_KVM_USE_CHROOT = "use_chroot"
507

508
509
510
511
512
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
513
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
514
515
516
517
518
519
  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,
520
521
522
  HV_USE_BOOTLOADER: VTYPE_BOOL,
  HV_BOOTLOADER_PATH: VTYPE_STRING,
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
523
  HV_KERNEL_PATH: VTYPE_STRING,
524
  HV_KERNEL_ARGS: VTYPE_STRING,
525
526
527
528
  HV_INITRD_PATH: VTYPE_STRING,
  HV_ROOT_PATH: VTYPE_STRING,
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
529
  HV_DEVICE_MODEL: VTYPE_STRING,
530
  HV_INIT_SCRIPT: VTYPE_STRING,
531
  HV_MIGRATION_PORT: VTYPE_INT,
532
533
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
534
  HV_USE_LOCALTIME: VTYPE_BOOL,
535
  HV_DISK_CACHE: VTYPE_STRING,
536
537
  HV_SECURITY_MODEL: VTYPE_STRING,
  HV_SECURITY_DOMAIN: VTYPE_STRING,
Guido Trotter's avatar
Guido Trotter committed
538
  HV_KVM_FLAG: VTYPE_STRING,
539
  HV_VHOST_NET: VTYPE_BOOL,
Balazs Lecz's avatar
Balazs Lecz committed
540
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
541
542
543
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
544

545
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
546
BE_MEMORY = "memory"
547
BE_VCPUS = "vcpus"
548
BE_AUTO_BALANCE = "auto_balance"
549

550
551
552
553
554
555
556
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
557

558
559
# Instance Parameters Profile
PP_DEFAULT = "default"
560

Guido Trotter's avatar
Guido Trotter committed
561
562
563
564
565
566
567
568
569
570
571
572
573
574
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())
575

576
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
577
HT_XEN_PVM = "xen-pvm"
578
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
579
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
580
HT_KVM = "kvm"
581
582
HT_CHROOT = "chroot"
HYPER_TYPES = frozenset([HT_XEN_PVM, HT_FAKE, HT_XEN_HVM, HT_KVM, HT_CHROOT])
Guido Trotter's avatar
Guido Trotter committed
583
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
584

585
VNC_BASE_PORT = 5900
586
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
587
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
588

589
# NIC types
590
591
592
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
593
594
595
596
597
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
598
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
599

600
601
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
602
603
604
605
606
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])
607
608
609
610
611
612
613
614
# 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"

615
616
617
618
619
620
621
622
623
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])

624
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
625
626
627
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
628

629
630
631
632
633
634
635
636
637
638
639
640
641
# 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])

642
643
644
645
646
647
648
# 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
649
650
651
652
653
654
# Kvm flag values
HT_KVM_ENABLED = "enabled"
HT_KVM_DISABLED = "disabled"

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

655
656
657
658
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

659
660
661
662
663
664
665
666
667
# Node verify constants
NV_FILELIST = "filelist"
NV_HVINFO = "hvinfo"
NV_HYPERVISOR = "hypervisor"
NV_INSTANCELIST = "instancelist"
NV_NODELIST = "nodelist"
NV_NODENETTEST = "node-net-test"
NV_VERSION = "version"
NV_VGLIST = "vglist"
668
669
NV_LVLIST = "lvlist"
NV_PVLIST = "pvlist"
670
NV_DRBDLIST = "drbd-list"
671
NV_NODESETUP = "nodesetup"
672
NV_TIME = "time"
673
NV_MASTERIP = "master-ip"
674

675
676
677
678
# SSL certificate check constants (in days)
SSL_CERT_EXPIRATION_WARN = 30
SSL_CERT_EXPIRATION_ERROR = 7

679
# Allocator framework constants
680
IALLOCATOR_VERSION = 2
681
682
683
684
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
685
IALLOCATOR_MODE_MEVAC = "multi-evacuate"
686
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
687

688
689
690
691
692
# 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"
693
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
694
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
695
696
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
697
JOB_QUEUE_DIRS = [QUEUE_DIR, JOB_QUEUE_ARCHIVE_DIR]
698
JOB_QUEUE_DIRS_MODE = SECURE_DIR_MODE
699

700
701
JOB_ID_TEMPLATE = r"\d+"

702
703
704
# unchanged job return
JOB_NOTCHANGED = "nochange"

705
706
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
707
JOB_STATUS_WAITLOCK = "waiting"
708
JOB_STATUS_CANCELING = "canceling"
709
710
711
712
713
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

714
715
# OpCode status
# not yet finalized
716
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
717
OP_STATUS_WAITLOCK = "waiting"
718
OP_STATUS_CANCELING = "canceling"
719
OP_STATUS_RUNNING = "running"
720
# finalized
721
OP_STATUS_CANCELED = "canceled"
722
723
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
724
725
726
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
727
728
729
730

# Execution log types
ELOG_MESSAGE = "message"
ELOG_PROGRESS = "progress"
731
ELOG_REMOTE_IMPORT = "remote-import"
732

733
# max dynamic devices
734
735
736
MAX_NICS = 8
MAX_DISKS = 16

Iustin Pop's avatar
Iustin Pop committed
737
738
# SSCONF keys
SS_CLUSTER_NAME = "cluster_name"
739
SS_CLUSTER_TAGS = "cluster_tags"
Iustin Pop's avatar
Iustin Pop committed
740
SS_FILE_STORAGE_DIR = "file_storage_dir"
741
SS_MASTER_CANDIDATES = "master_candidates"
742
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
Iustin Pop's avatar
Iustin Pop committed
743
744
745
746
SS_MASTER_IP = "master_ip"
SS_MASTER_NETDEV = "master_netdev"
SS_MASTER_NODE = "master_node"
SS_NODE_LIST = "node_list"
747
748
SS_NODE_PRIMARY_IPS = "node_primary_ips"
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
749
SS_OFFLINE_NODES = "offline_nodes"
750
751
SS_ONLINE_NODES = "online_nodes"
SS_INSTANCE_LIST = "instance_list"
752
SS_RELEASE_VERSION = "release_version"
753
SS_HYPERVISOR_LIST = "hypervisor_list"
754
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
Balazs Lecz's avatar
Balazs Lecz committed
755
SS_UID_POOL = "uid_pool"
Iustin Pop's avatar
Iustin Pop committed
756

757
758
759
760
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

HVC_DEFAULTS = {
761
  HT_XEN_PVM: {
762
763
764
    HV_USE_BOOTLOADER: False,
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
    HV_BOOTLOADER_ARGS: '',
765
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-xenU",
766
    HV_INITRD_PATH: '',
767
    HV_ROOT_PATH: '/dev/sda1',
768
    HV_KERNEL_ARGS: 'ro',
769
    HV_MIGRATION_PORT: 8002,
770
771
772
    },
  HT_XEN_HVM: {
    HV_BOOT_ORDER: "cd",
773
    HV_CDROM_IMAGE_PATH: '',
774
    HV_NIC_TYPE: HT_NIC_RTL8139,
775
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
776
    HV_VNC_BIND_ADDRESS: '0.0.0.0',
777
    HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE,
778
779
    HV_ACPI: True,
    HV_PAE: True,
780
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
781
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
782
    HV_MIGRATION_PORT: 8002,
783
    HV_USE_LOCALTIME: False,
784
785
786
    },
  HT_KVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
787
    HV_INITRD_PATH: '',
788
    HV_KERNEL_ARGS: 'ro',
789
    HV_ROOT_PATH: '/dev/vda1',
790
791
    HV_ACPI: True,
    HV_SERIAL_CONSOLE: True,
792
    HV_VNC_BIND_ADDRESS: '',
793
794
795
    HV_VNC_TLS: False,
    HV_VNC_X509: '',
    HV_VNC_X509_VERIFY: False,
796
    HV_VNC_PASSWORD_FILE: '',
797
    HV_CDROM_IMAGE_PATH: '',
798
    HV_BOOT_ORDER: HT_BO_DISK,
799
800
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
801
    HV_USB_MOUSE: '',
802
    HV_MIGRATION_PORT: 8102,
803
804
    HV_MIGRATION_BANDWIDTH: 32, # MiB/s
    HV_MIGRATION_DOWNTIME: 30,  # ms
805
    HV_USE_LOCALTIME: False,
806
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
807
808
    HV_SECURITY_MODEL: HT_SM_NONE,
    HV_SECURITY_DOMAIN: '',
Guido Trotter's avatar
Guido Trotter committed
809
    HV_KVM_FLAG: "",
810
    HV_VHOST_NET: False,
Balazs Lecz's avatar
Balazs Lecz committed
811
    HV_KVM_USE_CHROOT: False,
812
813
814
    },
  HT_FAKE: {
    },
815
816
817
  HT_CHROOT: {
    HV_INIT_SCRIPT: "/ganeti-chroot",
    },
818
  }
819

820
821
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
822
  HV_MIGRATION_BANDWIDTH,
823
824
  ])

825
BEC_DEFAULTS = {
826
827
828
829
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
830

Guido Trotter's avatar
Guido Trotter committed
831
832
833
834
835
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

836
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
837
838
839

CONFD_PROTOCOL_VERSION = 1

840
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
841
842
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
843
CONFD_REQ_CLUSTER_MASTER = 3
844
845
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
846
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
847

848
849
850
851
852
853
# Confd request query fields. These are used to narrow down queries.
# These must be strings rather than integers, because json-encoding
# converts them to strings anyway, as they're used as dict-keys.
CONFD_REQQ_LINK = "0"
CONFD_REQQ_IP = "1"
CONFD_REQQ_IPLIST = "2"
854
855
856
857
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
858
CONFD_REQFIELD_MNODE_PIP = "2"
859

Guido Trotter's avatar
Guido Trotter committed
860
CONFD_REQS = frozenset([
861
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
862
863
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
864
  CONFD_REQ_CLUSTER_MASTER,
865
866
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
867
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
868
869
  ])

870
871
872
873
874
875
876
877
878
879
CONFD_REPL_STATUS_OK = 0
CONFD_REPL_STATUS_ERROR = 1
CONFD_REPL_STATUS_NOTIMPLEMENTED = 2

CONFD_REPL_STATUSES = frozenset([
  CONFD_REPL_STATUS_OK,
  CONFD_REPL_STATUS_ERROR,
  CONFD_REPL_STATUS_NOTIMPLEMENTED,
  ])

Guido Trotter's avatar
Guido Trotter committed
880
881
882
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
883
884
885
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
886

887
888
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
889
CONFD_ERROR_INTERNAL = 2
890
CONFD_ERROR_ARGUMENT = 3
891

Guido Trotter's avatar
Guido Trotter committed
892
893
894
# Each request is "salted" by the current timestamp.
# This constants decides how many seconds of skew to accept.
# TODO: make this a default and allow the value to be more configurable
895
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
896
897
898
899
900
901
902
903
904

# When we haven't reloaded the config for more than this amount of seconds, we
# force a test to see if inotify is betraying us.
CONFD_CONFIG_RELOAD_TIMEOUT = 60

# If we receive more than one update in this amount of seconds, we move to
# polling every RATELIMIT seconds, rather than relying on inotify, to be able
# to serve more requests.
CONFD_CONFIG_RELOAD_RATELIMIT = 2
905

906
907
908
909
910
911
# Magic number prepended to all confd queries.
# This allows us to distinguish different types of confd protocols and handle
# them. For example by changing this we can move the whole payload to be
# compressed, or move away from json.
CONFD_MAGIC_FOURCC = 'plj0'

Guido Trotter's avatar
Guido Trotter committed
912
913
914
915
916
917
918
919
920
921
# By default a confd request is sent to the minimum between this number and all
# MCs. 6 was chosen because even in the case of a disastrous 50% response rate,
# we should have enough answers to be able to compare more than one.
CONFD_DEFAULT_REQ_COVERAGE = 6

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

922
923
924
925
926
927
# Maximum UDP datagram size.
# On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
# On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
#   (assuming we can't use jumbo frames)
# We just set this to 60K, which should be enough
MAX_UDP_DATA_SIZE = 61440
Balazs Lecz's avatar
Balazs Lecz committed
928
929
930
931

# User-id pool minimum/maximum acceptable user-ids.
UIDPOOL_UID_MIN = 0
UIDPOOL_UID_MAX = 2**32-1 # Assuming 32 bit user-ids
932
933
934

# Name or path of the pgrep command
PGREP = "pgrep"