constants.py 25.2 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

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

126
ALL_CERT_FILES = frozenset([NODED_CERT_FILE, RAPI_CERT_FILE])
127

128
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
129

130
NODED = "ganeti-noded"
Guido Trotter's avatar
Guido Trotter committed
131
CONFD = "ganeti-confd"
Guido Trotter's avatar
Guido Trotter committed
132
RAPI = "ganeti-rapi"
133
MASTERD = "ganeti-masterd"
Guido Trotter's avatar
Guido Trotter committed
134
135
# used in the ganeti-nbma project
NLD = "ganeti-nld"
136
137
138
139

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

Iustin Pop's avatar
Iustin Pop committed
151
152
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
153
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
154

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

166
167
168
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
169
LOG_BURNIN = LOG_DIR + "burnin.log"
Iustin Pop's avatar
Iustin Pop committed
170

Luca Bigliardi's avatar
Luca Bigliardi committed
171
172
DEV_CONSOLE = "/dev/console"

173
174
175
# luxi related constants
LUXI_EOM = "\3"

176
177
178
179
180
181
182
# one of 'no', 'yes', 'only'
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

183
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
184
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
185
186
187

EXPORT_CONF_FILE = "config.ini"

188
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
189
190
191
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

192
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
193
SOCAT_PATH = _autoconf.SOCAT_PATH
194
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
195
SOCAT_ESCAPE_CODE = "0x1d"
196

197
198
199
200
201
202
203
204
# 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"

205
206
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

207
208
209
210
211
212
IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"

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

213
214
215
216
217
218
219
220
# Import/export transport compression
IEC_NONE = "none"
IEC_GZIP = "gzip"
IEC_ALL = frozenset([
  IEC_NONE,
  IEC_GZIP,
  ])

221
222
223
224
225
226
227
228
# 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"

229
VALUE_DEFAULT = "default"
230
231
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
232
VALUE_NONE = "none"
233
234
VALUE_TRUE = "true"
VALUE_FALSE = "false"
235

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

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

# 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

256
257
258
259
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
260
261

# Storage fields
262
263
264
265
# 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
266
267
268
269
270
271
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

272
273
274
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

275
# Available fields per storage type
276
277
278
279
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
280

281
282
283
284
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

285
VALID_STORAGE_OPERATIONS = {
286
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
287
288
  }

289
290
291
292
293
294
# 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
295
296
297
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
298
DT_DRBD8 = "drbd"
299
DT_FILE = "file"
300
301

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

304
305
306
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

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

310
311
# logical disk types
LD_LV = "lvm"
312
LD_DRBD8 = "drbd8"
313
LD_FILE = "file"
314
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
315

Iustin Pop's avatar
Iustin Pop committed
316
317
# drbd constants
DRBD_HMAC_ALG = "md5"
318
DRBD_NET_PROTOCOL = "C"
319
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
320

321
322
323
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
324
325

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

328
# disk access mode
329
330
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
331
332
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

333
# disk replacement mode
334
335
336
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
337
REPLACE_DISK_AUTO = "replace_auto"
338

339
340
341
342
343
344
345
346
# Instance export mode
EXPORT_MODE_LOCAL = "local"
EXPORT_MODE_REMOTE = "remote"
EXPORT_MODES = frozenset([
  EXPORT_MODE_LOCAL,
  EXPORT_MODE_REMOTE,
  ])

347
348
# lock recalculate mode
LOCKS_REPLACE = 'replace'
349
LOCKS_APPEND = 'append'
350

351
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
352
353
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"
354
355
356
357
358
359
INSTANCE_REMOTE_IMPORT = "remote-import"
INSTANCE_CREATE_MODES = frozenset([
  INSTANCE_CREATE,
  INSTANCE_IMPORT,
  INSTANCE_REMOTE_IMPORT,
  ])
Iustin Pop's avatar
Iustin Pop committed
360

361
362
363
364
365
366
367
# 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

368
369
370
# Remote import/export connect timeout for socat
RIE_CONNECT_TIMEOUT = 60

Iustin Pop's avatar
Iustin Pop committed
371
DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
372
373
374
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
375
376
377
378

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
379
380
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
381

382
383
384
385
# dynamic device modification
DDM_ADD = 'add'
DDM_REMOVE = 'remove'

386
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
387
EXIT_SUCCESS = 0
388
EXIT_FAILURE = 1
389
EXIT_NOTCLUSTER = 5
390
EXIT_NOTMASTER = 11
391
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
392
EXIT_CONFIRMATION = 13 # need user confirmation
393

394
395
396
397
398
399
400
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

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

418
419
420
421
422
423
424
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

425
426
427
428
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

429
430
431
432
433
# 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
434
OS_SCRIPTS = frozenset([OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT,
435
                        OS_SCRIPT_EXPORT, OS_SCRIPT_RENAME])
436

437
OS_API_FILE = 'ganeti_api_version'
438
OS_VARIANTS_FILE = 'variants.list'
439

440
# ssh constants
441
442
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
443
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
444
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
445
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
446
447
SSH = "ssh"
SCP = "scp"
448
449
450
451
452

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

454
455
456
457
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

458
459
460
461
462
463
464
465
466
467
468
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,
                      ])

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
539

540
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
541
BE_MEMORY = "memory"
542
BE_VCPUS = "vcpus"
543
BE_AUTO_BALANCE = "auto_balance"
544

545
546
547
548
549
550
551
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
552

553
554
# Instance Parameters Profile
PP_DEFAULT = "default"
555

Guido Trotter's avatar
Guido Trotter committed
556
557
558
559
560
561
562
563
564
565
566
567
568
569
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())
570

571
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
572
HT_XEN_PVM = "xen-pvm"
573
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
574
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
575
HT_KVM = "kvm"
576
577
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
578
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
579

580
VNC_BASE_PORT = 5900
581
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
582
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
583

584
# NIC types
585
586
587
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
588
589
590
591
592
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
593
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
594

595
596
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
597
598
599
600
601
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])
602
603
604
605
606
607
608
609
# 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"

610
611
612
613
614
615
616
617
618
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])

619
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
620
621
622
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
623

624
625
626
627
628
629
630
631
632
633
634
635
636
# 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])

637
638
639
640
641
642
643
# 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
644
645
646
647
648
649
# Kvm flag values
HT_KVM_ENABLED = "enabled"
HT_KVM_DISABLED = "disabled"

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

650
651
652
653
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

654
655
656
657
658
659
660
661
662
# 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"
663
664
NV_LVLIST = "lvlist"
NV_PVLIST = "pvlist"
665
NV_DRBDLIST = "drbd-list"
666
NV_NODESETUP = "nodesetup"
667
NV_TIME = "time"
668
NV_MASTERIP = "master-ip"
669

670
671
672
673
# SSL certificate check constants (in days)
SSL_CERT_EXPIRATION_WARN = 30
SSL_CERT_EXPIRATION_ERROR = 7

674
# Allocator framework constants
675
IALLOCATOR_VERSION = 2
676
677
678
679
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
680
IALLOCATOR_MODE_MEVAC = "multi-evacuate"
681
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
682

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

695
696
JOB_ID_TEMPLATE = r"\d+"

697
698
699
# unchanged job return
JOB_NOTCHANGED = "nochange"

700
701
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
702
JOB_STATUS_WAITLOCK = "waiting"
703
JOB_STATUS_CANCELING = "canceling"
704
705
706
707
708
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

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

# Execution log types
ELOG_MESSAGE = "message"
ELOG_PROGRESS = "progress"
726
ELOG_REMOTE_IMPORT = "remote-import"
727

728
# max dynamic devices
729
730
731
MAX_NICS = 8
MAX_DISKS = 16

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

752
753
754
755
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

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

815
816
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
817
  HV_MIGRATION_BANDWIDTH,
818
819
  ])

820
BEC_DEFAULTS = {
821
822
823
824
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
825

Guido Trotter's avatar
Guido Trotter committed
826
827
828
829
830
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

831
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
832
833
834

CONFD_PROTOCOL_VERSION = 1

835
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
836
837
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
838
CONFD_REQ_CLUSTER_MASTER = 3
839
840
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
841
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
842

843
844
845
846
847
848
# 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"
849
850
851
852
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
853
CONFD_REQFIELD_MNODE_PIP = "2"
854

Guido Trotter's avatar
Guido Trotter committed
855
CONFD_REQS = frozenset([
856
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
857
858
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
859
  CONFD_REQ_CLUSTER_MASTER,
860
861
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
862
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
863
864
  ])

865
866
867
868
869
870
871
872
873
874
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
875
876
877
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
878
879
880
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
881

882
883
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
884
CONFD_ERROR_INTERNAL = 2
885
CONFD_ERROR_ARGUMENT = 3
886

Guido Trotter's avatar
Guido Trotter committed
887
888
889
# 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
890
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
891
892
893
894
895
896
897
898
899

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

901
902
903
904
905
906
# 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
907
908
909
910
911
912
913
914
915
916
# 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

917
918
919
920
921
922
# 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
923
924
925
926

# User-id pool minimum/maximum acceptable user-ids.
UIDPOOL_UID_MIN = 0
UIDPOOL_UID_MAX = 2**32-1 # Assuming 32 bit user-ids
927
928
929

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