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

118
ALL_CERT_FILES = frozenset([NODED_CERT_FILE, RAPI_CERT_FILE])
119

120
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
121

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

DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
132
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
133
  RAPI: ("tcp", 5080),
Guido Trotter's avatar
Guido Trotter committed
134
135
  # used in the ganeti-nbma project
  NLD: ("udp", 1816),
136
137
}
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
138
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
139
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
Guido Trotter's avatar
Guido Trotter committed
140
141
# used in the ganeti-nbma project
DEFAULT_NLD_PORT = DAEMONS_PORTS[NLD][1]
142

Iustin Pop's avatar
Iustin Pop committed
143
144
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
145
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
146

147
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
148
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
149
150
151
152
153
  # "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
154
155
  # used in the ganeti-nbma project
  NLD: LOG_DIR + "nl-daemon.log",
Michael Hanselmann's avatar
Michael Hanselmann committed
156
  }
Michael Hanselmann's avatar
Michael Hanselmann committed
157

158
159
160
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
161
LOG_BURNIN = LOG_DIR + "burnin.log"
Iustin Pop's avatar
Iustin Pop committed
162

163
164
165
166
167
168
169
# one of 'no', 'yes', 'only'
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

170
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
171
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
172
173
174

EXPORT_CONF_FILE = "config.ini"

175
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
176
177
178
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

179
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
180
SOCAT_PATH = _autoconf.SOCAT_PATH
181
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
182
SOCAT_ESCAPE_CODE = "0x1d"
183

184
185
186
187
188
189
190
191
# 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"

192
193
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

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

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

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

# 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

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

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

237
238
239
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

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

246
247
248
249
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

250
VALID_STORAGE_OPERATIONS = {
251
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
252
253
  }

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

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

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

272
273
# logical disk types
LD_LV = "lvm"
274
LD_DRBD8 = "drbd8"
275
LD_FILE = "file"
276
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
277

Iustin Pop's avatar
Iustin Pop committed
278
279
# drbd constants
DRBD_HMAC_ALG = "md5"
280
DRBD_NET_PROTOCOL = "C"
281
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
282

283
284
285
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
286
287

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

290
# disk access mode
291
292
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
293
294
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

295
# disk replacement mode
296
297
298
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
299
REPLACE_DISK_AUTO = "replace_auto"
300

301
302
# lock recalculate mode
LOCKS_REPLACE = 'replace'
303
LOCKS_APPEND = 'append'
304

305
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
306
307
308
309
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
310
311
312
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
313
314
315
316

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
317

318
319
320
321
322
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

323
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
324
EXIT_SUCCESS = 0
325
EXIT_FAILURE = 1
326
EXIT_NOTCLUSTER = 5
327
EXIT_NOTMASTER = 11
328
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
329
EXIT_CONFIRMATION = 13 # need user confirmation
Guido Trotter's avatar
Guido Trotter committed
330
EXIT_NOTCANDIDATE = 14
331

332
333
334
335
336
337
338
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

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

354
355
356
357
358
359
360
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

361
362
363
364
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

365
366
367
368
369
# 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
370
OS_SCRIPTS = frozenset([OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT,
371
                        OS_SCRIPT_EXPORT, OS_SCRIPT_RENAME])
372

373
OS_API_FILE = 'ganeti_api_version'
374
OS_VARIANTS_FILE = 'variants.list'
375

376
# ssh constants
377
378
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
379
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
380
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
381
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
382
383
SSH = "ssh"
SCP = "scp"
384
385
386
387
388

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

390
391
392
393
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

394
395
396
397
398
399
400
401
402
403
404
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,
                      ])

405
406
407
408
409
410
# 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"
411
HV_VNC_PASSWORD_FILE = "vnc_password_file"
412
413
414
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
415
416
HV_ACPI = "acpi"
HV_PAE = "pae"
417
418
419
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
420
HV_KERNEL_ARGS = "kernel_args"
421
422
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
423
HV_ROOT_PATH = "root_path"
424
HV_SERIAL_CONSOLE = "serial_console"
425
HV_USB_MOUSE = "usb_mouse"
426
HV_DEVICE_MODEL = "device_model"
427
HV_INIT_SCRIPT = "init_script"
428
HV_MIGRATION_PORT = "migration_port"
429
HV_USE_LOCALTIME = "use_localtime"
430
HV_DISK_CACHE = "disk_cache"
431
432
HV_SECURITY_MODEL = "security_model"
HV_SECURITY_DOMAIN = "security_domain"
433

434
435
436
437
438
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
439
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
440
441
442
443
444
445
  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,
446
447
448
  HV_USE_BOOTLOADER: VTYPE_BOOL,
  HV_BOOTLOADER_PATH: VTYPE_STRING,
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
449
  HV_KERNEL_PATH: VTYPE_STRING,
450
  HV_KERNEL_ARGS: VTYPE_STRING,
451
452
453
454
  HV_INITRD_PATH: VTYPE_STRING,
  HV_ROOT_PATH: VTYPE_STRING,
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
455
  HV_DEVICE_MODEL: VTYPE_STRING,
456
  HV_INIT_SCRIPT: VTYPE_STRING,
457
  HV_MIGRATION_PORT: VTYPE_INT,
458
  HV_USE_LOCALTIME: VTYPE_BOOL,
459
  HV_DISK_CACHE: VTYPE_STRING,
460
461
  HV_SECURITY_MODEL: VTYPE_STRING,
  HV_SECURITY_DOMAIN: VTYPE_STRING,
462
463
464
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
465

466
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
467
BE_MEMORY = "memory"
468
BE_VCPUS = "vcpus"
469
BE_AUTO_BALANCE = "auto_balance"
470

471
472
473
474
475
476
477
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
478

479
480
# Instance Parameters Profile
PP_DEFAULT = "default"
481

Guido Trotter's avatar
Guido Trotter committed
482
483
484
485
486
487
488
489
490
491
492
493
494
495
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())
496

497
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
498
HT_XEN_PVM = "xen-pvm"
499
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
500
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
501
HT_KVM = "kvm"
502
503
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
504
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
505

506
VNC_BASE_PORT = 5900
507
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
508
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
509

510
# NIC types
511
512
513
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
514
515
516
517
518
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
519
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
520

521
522
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
523
524
525
526
527
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])
528
529
530
531
532
533
534
535
# 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"

536
537
538
539
540
541
542
543
544
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])

545
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
546
547
548
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
549

550
551
552
553
554
555
556
557
558
559
560
561
562
# 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])

563
564
565
566
567
568
569
# 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])

570
571
572
573
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

574
575
576
577
578
579
580
581
582
# 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"
583
584
NV_LVLIST = "lvlist"
NV_PVLIST = "pvlist"
585
NV_DRBDLIST = "drbd-list"
586
NV_NODESETUP = "nodesetup"
587
NV_TIME = "time"
588

589
590
591
592
# SSL certificate check constants (in days)
SSL_CERT_EXPIRATION_WARN = 30
SSL_CERT_EXPIRATION_ERROR = 7

593
# Allocator framework constants
594
IALLOCATOR_VERSION = 2
595
596
597
598
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
599
IALLOCATOR_MODE_MEVAC = "multi-evacuate"
600
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
601

602
603
604
605
606
# 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"
607
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
608
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
609
610
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
611

612
613
JOB_ID_TEMPLATE = r"\d+"

614
615
616
# unchanged job return
JOB_NOTCHANGED = "nochange"

617
618
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
619
JOB_STATUS_WAITLOCK = "waiting"
620
JOB_STATUS_CANCELING = "canceling"
621
622
623
624
625
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

626
627
# OpCode status
# not yet finalized
628
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
629
OP_STATUS_WAITLOCK = "waiting"
630
OP_STATUS_CANCELING = "canceling"
631
OP_STATUS_RUNNING = "running"
632
# finalized
633
OP_STATUS_CANCELED = "canceled"
634
635
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
636
637
638
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
639
640
641
642

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

644
# max dynamic devices
645
646
647
MAX_NICS = 8
MAX_DISKS = 16

Iustin Pop's avatar
Iustin Pop committed
648
649
# SSCONF keys
SS_CLUSTER_NAME = "cluster_name"
650
SS_CLUSTER_TAGS = "cluster_tags"
Iustin Pop's avatar
Iustin Pop committed
651
SS_FILE_STORAGE_DIR = "file_storage_dir"
652
SS_MASTER_CANDIDATES = "master_candidates"
653
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
Iustin Pop's avatar
Iustin Pop committed
654
655
656
657
SS_MASTER_IP = "master_ip"
SS_MASTER_NETDEV = "master_netdev"
SS_MASTER_NODE = "master_node"
SS_NODE_LIST = "node_list"
658
659
SS_NODE_PRIMARY_IPS = "node_primary_ips"
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
660
SS_OFFLINE_NODES = "offline_nodes"
661
662
SS_ONLINE_NODES = "online_nodes"
SS_INSTANCE_LIST = "instance_list"
663
SS_RELEASE_VERSION = "release_version"
Iustin Pop's avatar
Iustin Pop committed
664

665
666
667
668
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

HVC_DEFAULTS = {
669
  HT_XEN_PVM: {
670
671
672
    HV_USE_BOOTLOADER: False,
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
    HV_BOOTLOADER_ARGS: '',
673
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-xenU",
674
    HV_INITRD_PATH: '',
675
    HV_ROOT_PATH: '/dev/sda1',
676
    HV_KERNEL_ARGS: 'ro',
677
    HV_MIGRATION_PORT: 8002,
678
679
680
    },
  HT_XEN_HVM: {
    HV_BOOT_ORDER: "cd",
681
    HV_CDROM_IMAGE_PATH: '',
682
    HV_NIC_TYPE: HT_NIC_RTL8139,
683
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
684
    HV_VNC_BIND_ADDRESS: '0.0.0.0',
685
    HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE,
686
687
    HV_ACPI: True,
    HV_PAE: True,
688
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
689
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
690
    HV_MIGRATION_PORT: 8002,
691
    HV_USE_LOCALTIME: False,
692
693
694
    },
  HT_KVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
695
    HV_INITRD_PATH: '',
696
    HV_KERNEL_ARGS: 'ro',
697
    HV_ROOT_PATH: '/dev/vda1',
698
699
    HV_ACPI: True,
    HV_SERIAL_CONSOLE: True,
700
    HV_VNC_BIND_ADDRESS: '',
701
702
703
    HV_VNC_TLS: False,
    HV_VNC_X509: '',
    HV_VNC_X509_VERIFY: False,
704
    HV_VNC_PASSWORD_FILE: '',
705
    HV_CDROM_IMAGE_PATH: '',
706
    HV_BOOT_ORDER: HT_BO_DISK,
707
708
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
709
    HV_USB_MOUSE: '',
710
    HV_MIGRATION_PORT: 8102,
711
    HV_USE_LOCALTIME: False,
712
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
713
714
    HV_SECURITY_MODEL: HT_SM_NONE,
    HV_SECURITY_DOMAIN: '',
715
716
717
    },
  HT_FAKE: {
    },
718
719
720
  HT_CHROOT: {
    HV_INIT_SCRIPT: "/ganeti-chroot",
    },
721
  }
722

723
724
725
726
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

727
BEC_DEFAULTS = {
728
729
730
731
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
732

Guido Trotter's avatar
Guido Trotter committed
733
734
735
736
737
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

738
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
739
740
741

CONFD_PROTOCOL_VERSION = 1

742
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
743
744
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
745
CONFD_REQ_CLUSTER_MASTER = 3
746
747
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
748
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
749

750
751
752
753
754
755
# 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"
756
757
758
759
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
760
CONFD_REQFIELD_MNODE_PIP = "2"
761

Guido Trotter's avatar
Guido Trotter committed
762
CONFD_REQS = frozenset([
763
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
764
765
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
766
  CONFD_REQ_CLUSTER_MASTER,
767
768
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
769
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
770
771
  ])

772
773
774
775
776
777
778
779
780
781
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
782
783
784
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
785
786
787
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
788

789
790
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
791
CONFD_ERROR_INTERNAL = 2
792
CONFD_ERROR_ARGUMENT = 3
793

Guido Trotter's avatar
Guido Trotter committed
794
795
796
# 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
797
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
798
799
800
801
802
803
804
805
806

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

808
809
810
811
812
813
# 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
814
815
816
817
818
819
820
821
822
823
# 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

824
825
826
827
828
829
# 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