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
VALUE_DEFAULT = "default"
193
194
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
195
VALUE_NONE = "none"
196
197
VALUE_TRUE = "true"
VALUE_FALSE = "false"
198

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

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

# 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

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

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

235
236
237
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

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

244
245
246
247
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

248
VALID_STORAGE_OPERATIONS = {
249
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
250
251
  }

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

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

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

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

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

281
282
283
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
284
285

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

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

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

299
300
# lock recalculate mode
LOCKS_REPLACE = 'replace'
301
LOCKS_APPEND = 'append'
302

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

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
308
309
310
                            DT_DRBD8, DT_FILE])

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

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

316
317
318
319
320
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

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

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

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

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

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

359
360
361
362
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

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

371
OS_API_FILE = 'ganeti_api_version'
372
OS_VARIANTS_FILE = 'variants.list'
373

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

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

388
389
390
391
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
463

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

469
470
471
472
473
474
475
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
476

477
478
# Instance Parameters Profile
PP_DEFAULT = "default"
479

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

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

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

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

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

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

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

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

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

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

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

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

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

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

610
611
JOB_ID_TEMPLATE = r"\d+"

612
613
614
# unchanged job return
JOB_NOTCHANGED = "nochange"

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

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

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

642
# max dynamic devices
643
644
645
MAX_NICS = 8
MAX_DISKS = 16

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

663
664
665
666
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

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

721
722
723
724
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

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

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

736
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
737
738
739

CONFD_PROTOCOL_VERSION = 1

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

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

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
758
CONFD_REQFIELD_MNODE_PIP = "2"
759

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

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

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

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

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

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

822
823
824
825
826
827
# 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