constants.py 23.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
96
97
# 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
98
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
99
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
100
101
102
# 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
103
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
104
NODED_CERT_FILE = DATA_DIR + "/server.pem"
105
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
106
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
107
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
108
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
109
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
110
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
111
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
112
QUEUE_DIR = DATA_DIR + "/queue"
113
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
114
ETC_HOSTS = "/etc/hosts"
115
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
116
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
117
SYSCONFDIR = _autoconf.SYSCONFDIR
118
TOOLSDIR = _autoconf.TOOLSDIR
119
CONF_DIR = SYSCONFDIR + "/ganeti"
120

121
ALL_CERT_FILES = frozenset([NODED_CERT_FILE, RAPI_CERT_FILE])
122

123
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
124

125
NODED = "ganeti-noded"
Guido Trotter's avatar
Guido Trotter committed
126
CONFD = "ganeti-confd"
Guido Trotter's avatar
Guido Trotter committed
127
RAPI = "ganeti-rapi"
128
MASTERD = "ganeti-masterd"
Guido Trotter's avatar
Guido Trotter committed
129
130
# used in the ganeti-nbma project
NLD = "ganeti-nld"
131

132
133
MULTITHREADED_DAEMONS = frozenset([MASTERD])

134
135
DAEMONS_SSL = {
  # daemon-name: (default-cert-path, default-key-path)
136
  NODED: (NODED_CERT_FILE, NODED_CERT_FILE),
137
138
139
  RAPI: (RAPI_CERT_FILE, RAPI_CERT_FILE),
}

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

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

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

Luca Bigliardi's avatar
Luca Bigliardi committed
173
174
DEV_CONSOLE = "/dev/console"

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

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

EXPORT_CONF_FILE = "config.ini"

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

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

196
VALUE_DEFAULT = "default"
197
198
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
199
VALUE_NONE = "none"
200
201
VALUE_TRUE = "true"
VALUE_FALSE = "false"
202

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

Iustin Pop's avatar
Iustin Pop committed
206
# hooks-related constants
207
HOOKS_BASE_DIR = CONF_DIR + "/hooks"
Iustin Pop's avatar
Iustin Pop committed
208
209
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
210
HOOKS_NAME_CFGUPDATE = "config-update"
Guido Trotter's avatar
Guido Trotter committed
211
HOOKS_NAME_WATCHER = "watcher"
212
HOOKS_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
213
214
215
216
217
218
219
220
221
222

# 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

223
224
225
226
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
227
228

# Storage fields
229
230
231
232
# 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
233
234
235
236
237
238
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

239
240
241
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

242
# Available fields per storage type
243
244
245
246
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
247

248
249
250
251
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

252
VALID_STORAGE_OPERATIONS = {
253
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
254
255
  }

256
257
258
259
260
261
# 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
262
263
264
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
265
DT_DRBD8 = "drbd"
266
DT_FILE = "file"
267
268

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

271
272
273
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

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

277
278
# logical disk types
LD_LV = "lvm"
279
LD_DRBD8 = "drbd8"
280
LD_FILE = "file"
281
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
282

Iustin Pop's avatar
Iustin Pop committed
283
284
# drbd constants
DRBD_HMAC_ALG = "md5"
285
DRBD_NET_PROTOCOL = "C"
286
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
287

288
289
290
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
291
292

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

295
# disk access mode
296
297
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
298
299
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

300
# disk replacement mode
301
302
303
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
304
REPLACE_DISK_AUTO = "replace_auto"
305

306
307
# lock recalculate mode
LOCKS_REPLACE = 'replace'
308
LOCKS_APPEND = 'append'
309

310
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
311
312
313
314
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
315
316
317
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
318
319
320
321

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
322
323
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
324

325
326
327
328
329
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

330
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
331
EXIT_SUCCESS = 0
332
EXIT_FAILURE = 1
333
EXIT_NOTCLUSTER = 5
334
EXIT_NOTMASTER = 11
335
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
336
EXIT_CONFIRMATION = 13 # need user confirmation
337

338
339
340
341
342
343
344
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

345
346
# others
DEFAULT_BRIDGE = "xen-br0"
Iustin Pop's avatar
Iustin Pop committed
347
SYNC_SPEED = 60 * 1024
Iustin Pop's avatar
Iustin Pop committed
348
LOCALHOST_IP_ADDRESS = "127.0.0.1"
349
TCP_PING_TIMEOUT = 10
350
GANETI_RUNAS = "root"
351
DEFAULT_VG = "xenvg"
352
BIND_ADDRESS_GLOBAL = "0.0.0.0"
353
MIN_VG_SIZE = 20480
354
DEFAULT_MAC_PREFIX = "aa:00:00"
355
LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT
356
357
# default maximum instance wait time, in seconds.
DEFAULT_SHUTDOWN_TIMEOUT = 120
358
NODE_MAX_CLOCK_SKEW = 150
359

360
361
362
363
364
365
366
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

367
368
369
370
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

371
372
373
374
375
# 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
376
OS_SCRIPTS = frozenset([OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT,
377
                        OS_SCRIPT_EXPORT, OS_SCRIPT_RENAME])
378

379
OS_API_FILE = 'ganeti_api_version'
380
OS_VARIANTS_FILE = 'variants.list'
381

382
# ssh constants
383
384
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
385
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
386
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
387
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
388
389
SSH = "ssh"
SCP = "scp"
390
391
392
393
394

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

396
397
398
399
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

400
401
402
403
404
405
406
407
408
409
410
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,
                      ])

411
412
413
414
415
416
# 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"
417
HV_VNC_PASSWORD_FILE = "vnc_password_file"
418
419
420
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
421
422
HV_ACPI = "acpi"
HV_PAE = "pae"
423
424
425
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
426
HV_KERNEL_ARGS = "kernel_args"
427
428
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
429
HV_ROOT_PATH = "root_path"
430
HV_SERIAL_CONSOLE = "serial_console"
431
HV_USB_MOUSE = "usb_mouse"
432
HV_DEVICE_MODEL = "device_model"
433
HV_INIT_SCRIPT = "init_script"
434
HV_MIGRATION_PORT = "migration_port"
435
HV_USE_LOCALTIME = "use_localtime"
436
HV_DISK_CACHE = "disk_cache"
437
438
HV_SECURITY_MODEL = "security_model"
HV_SECURITY_DOMAIN = "security_domain"
Guido Trotter's avatar
Guido Trotter committed
439
HV_KVM_FLAG = "kvm_flag"
440

441
442
443
444
445
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
446
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
447
448
449
450
451
452
  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,
453
454
455
  HV_USE_BOOTLOADER: VTYPE_BOOL,
  HV_BOOTLOADER_PATH: VTYPE_STRING,
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
456
  HV_KERNEL_PATH: VTYPE_STRING,
457
  HV_KERNEL_ARGS: VTYPE_STRING,
458
459
460
461
  HV_INITRD_PATH: VTYPE_STRING,
  HV_ROOT_PATH: VTYPE_STRING,
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
462
  HV_DEVICE_MODEL: VTYPE_STRING,
463
  HV_INIT_SCRIPT: VTYPE_STRING,
464
  HV_MIGRATION_PORT: VTYPE_INT,
465
  HV_USE_LOCALTIME: VTYPE_BOOL,
466
  HV_DISK_CACHE: VTYPE_STRING,
467
468
  HV_SECURITY_MODEL: VTYPE_STRING,
  HV_SECURITY_DOMAIN: VTYPE_STRING,
Guido Trotter's avatar
Guido Trotter committed
469
  HV_KVM_FLAG: VTYPE_STRING,
470
471
472
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
473

474
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
475
BE_MEMORY = "memory"
476
BE_VCPUS = "vcpus"
477
BE_AUTO_BALANCE = "auto_balance"
478

479
480
481
482
483
484
485
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
486

487
488
# Instance Parameters Profile
PP_DEFAULT = "default"
489

Guido Trotter's avatar
Guido Trotter committed
490
491
492
493
494
495
496
497
498
499
500
501
502
503
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())
504

505
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
506
HT_XEN_PVM = "xen-pvm"
507
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
508
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
509
HT_KVM = "kvm"
510
511
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
512
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
513

514
VNC_BASE_PORT = 5900
515
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
516
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
517

518
# NIC types
519
520
521
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
522
523
524
525
526
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
527
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
528

529
530
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
531
532
533
534
535
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])
536
537
538
539
540
541
542
543
# 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"

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

553
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
554
555
556
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
557

558
559
560
561
562
563
564
565
566
567
568
569
570
# 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])

571
572
573
574
575
576
577
# 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
578
579
580
581
582
583
# Kvm flag values
HT_KVM_ENABLED = "enabled"
HT_KVM_DISABLED = "disabled"

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

584
585
586
587
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

588
589
590
591
592
593
594
595
596
# 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"
597
598
NV_LVLIST = "lvlist"
NV_PVLIST = "pvlist"
599
NV_DRBDLIST = "drbd-list"
600
NV_NODESETUP = "nodesetup"
601
NV_TIME = "time"
602
NV_MASTERIP = "master-ip"
603

604
605
606
607
# SSL certificate check constants (in days)
SSL_CERT_EXPIRATION_WARN = 30
SSL_CERT_EXPIRATION_ERROR = 7

608
# Allocator framework constants
609
IALLOCATOR_VERSION = 2
610
611
612
613
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
614
IALLOCATOR_MODE_MEVAC = "multi-evacuate"
615
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
616

617
618
619
620
621
# 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"
622
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
623
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
624
625
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
626
JOB_QUEUE_DIRS = [QUEUE_DIR, JOB_QUEUE_ARCHIVE_DIR]
627
JOB_QUEUE_DIRS_MODE = SECURE_DIR_MODE
628

629
630
JOB_ID_TEMPLATE = r"\d+"

631
632
633
# unchanged job return
JOB_NOTCHANGED = "nochange"

634
635
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
636
JOB_STATUS_WAITLOCK = "waiting"
637
JOB_STATUS_CANCELING = "canceling"
638
639
640
641
642
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

643
644
# OpCode status
# not yet finalized
645
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
646
OP_STATUS_WAITLOCK = "waiting"
647
OP_STATUS_CANCELING = "canceling"
648
OP_STATUS_RUNNING = "running"
649
# finalized
650
OP_STATUS_CANCELED = "canceled"
651
652
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
653
654
655
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
656
657
658
659

# Execution log types
ELOG_MESSAGE = "message"
ELOG_PROGRESS = "progress"
660

661
# max dynamic devices
662
663
664
MAX_NICS = 8
MAX_DISKS = 16

Iustin Pop's avatar
Iustin Pop committed
665
666
# SSCONF keys
SS_CLUSTER_NAME = "cluster_name"
667
SS_CLUSTER_TAGS = "cluster_tags"
Iustin Pop's avatar
Iustin Pop committed
668
SS_FILE_STORAGE_DIR = "file_storage_dir"
669
SS_MASTER_CANDIDATES = "master_candidates"
670
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
Iustin Pop's avatar
Iustin Pop committed
671
672
673
674
SS_MASTER_IP = "master_ip"
SS_MASTER_NETDEV = "master_netdev"
SS_MASTER_NODE = "master_node"
SS_NODE_LIST = "node_list"
675
676
SS_NODE_PRIMARY_IPS = "node_primary_ips"
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
677
SS_OFFLINE_NODES = "offline_nodes"
678
679
SS_ONLINE_NODES = "online_nodes"
SS_INSTANCE_LIST = "instance_list"
680
SS_RELEASE_VERSION = "release_version"
681
SS_HYPERVISOR_LIST = "hypervisor_list"
682
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
Balazs Lecz's avatar
Balazs Lecz committed
683
SS_UID_POOL = "uid_pool"
Iustin Pop's avatar
Iustin Pop committed
684

685
686
687
688
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

HVC_DEFAULTS = {
689
  HT_XEN_PVM: {
690
691
692
    HV_USE_BOOTLOADER: False,
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
    HV_BOOTLOADER_ARGS: '',
693
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-xenU",
694
    HV_INITRD_PATH: '',
695
    HV_ROOT_PATH: '/dev/sda1',
696
    HV_KERNEL_ARGS: 'ro',
697
    HV_MIGRATION_PORT: 8002,
698
699
700
    },
  HT_XEN_HVM: {
    HV_BOOT_ORDER: "cd",
701
    HV_CDROM_IMAGE_PATH: '',
702
    HV_NIC_TYPE: HT_NIC_RTL8139,
703
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
704
    HV_VNC_BIND_ADDRESS: '0.0.0.0',
705
    HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE,
706
707
    HV_ACPI: True,
    HV_PAE: True,
708
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
709
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
710
    HV_MIGRATION_PORT: 8002,
711
    HV_USE_LOCALTIME: False,
712
713
714
    },
  HT_KVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
715
    HV_INITRD_PATH: '',
716
    HV_KERNEL_ARGS: 'ro',
717
    HV_ROOT_PATH: '/dev/vda1',
718
719
    HV_ACPI: True,
    HV_SERIAL_CONSOLE: True,
720
    HV_VNC_BIND_ADDRESS: '',
721
722
723
    HV_VNC_TLS: False,
    HV_VNC_X509: '',
    HV_VNC_X509_VERIFY: False,
724
    HV_VNC_PASSWORD_FILE: '',
725
    HV_CDROM_IMAGE_PATH: '',
726
    HV_BOOT_ORDER: HT_BO_DISK,
727
728
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
729
    HV_USB_MOUSE: '',
730
    HV_MIGRATION_PORT: 8102,
731
    HV_USE_LOCALTIME: False,
732
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
733
734
    HV_SECURITY_MODEL: HT_SM_NONE,
    HV_SECURITY_DOMAIN: '',
Guido Trotter's avatar
Guido Trotter committed
735
    HV_KVM_FLAG: "",
736
737
738
    },
  HT_FAKE: {
    },
739
740
741
  HT_CHROOT: {
    HV_INIT_SCRIPT: "/ganeti-chroot",
    },
742
  }
743

744
745
746
747
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

748
BEC_DEFAULTS = {
749
750
751
752
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
753

Guido Trotter's avatar
Guido Trotter committed
754
755
756
757
758
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

759
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
760
761
762

CONFD_PROTOCOL_VERSION = 1

763
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
764
765
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
766
CONFD_REQ_CLUSTER_MASTER = 3
767
768
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
769
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
770

771
772
773
774
775
776
# 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"
777
778
779
780
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
781
CONFD_REQFIELD_MNODE_PIP = "2"
782

Guido Trotter's avatar
Guido Trotter committed
783
CONFD_REQS = frozenset([
784
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
785
786
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
787
  CONFD_REQ_CLUSTER_MASTER,
788
789
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
790
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
791
792
  ])

793
794
795
796
797
798
799
800
801
802
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
803
804
805
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
806
807
808
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
809

810
811
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
812
CONFD_ERROR_INTERNAL = 2
813
CONFD_ERROR_ARGUMENT = 3
814

Guido Trotter's avatar
Guido Trotter committed
815
816
817
# 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
818
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
819
820
821
822
823
824
825
826
827

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

829
830
831
832
833
834
# 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
835
836
837
838
839
840
841
842
843
844
# 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

845
846
847
848
849
850
# 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
851
852
853
854

# User-id pool minimum/maximum acceptable user-ids.
UIDPOOL_UID_MIN = 0
UIDPOOL_UID_MAX = 2**32-1 # Assuming 32 bit user-ids
855
856
857

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