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

# Copyright (C) 2006, 2007 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.


"""Module holding different constants."""

24
25
import re

26
from ganeti import _autoconf
27

Iustin Pop's avatar
Iustin Pop committed
28
# various versions
29
PROTOCOL_VERSION = 30
30
RELEASE_VERSION = _autoconf.PACKAGE_VERSION
Guido Trotter's avatar
Guido Trotter committed
31
32
33
OS_API_V10 = 10
OS_API_V15 = 15
OS_API_VERSIONS = frozenset([OS_API_V10, OS_API_V15])
Iustin Pop's avatar
Iustin Pop committed
34
EXPORT_VERSION = 0
35
RAPI_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
36

37

38
39
40
41
42
43
44
45
# Format for CONFIG_VERSION:
#   01 03 0123 = 01030123
#   ^^ ^^ ^^^^
#   |  |  + Configuration version/revision
#   |  + Minor version
#   + Major version
#
# It stored as an integer. Make sure not to write an octal number.
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

# BuildVersion and SplitVersion must be in here because we can't import other
# modules. The cfgupgrade tool must be able to read and write version numbers
# and thus requires these functions. To avoid code duplication, they're kept in
# here.

def BuildVersion(major, minor, revision):
  """Calculates int version number from major, minor and revision numbers.

  Returns: int representing version number

  """
  assert isinstance(major, int)
  assert isinstance(minor, int)
  assert isinstance(revision, int)
  return (1000000 * major +
            10000 * minor +
                1 * revision)


def SplitVersion(version):
  """Splits version number stored in an int.

  Returns: tuple; (major, minor, revision)

  """
  assert isinstance(version, int)

  (major, remainder) = divmod(version, 1000000)
  (minor, revision) = divmod(remainder, 10000)

  return (major, minor, revision)


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

# 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"
103
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
104
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
105
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
106
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
107
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
108
QUEUE_DIR = DATA_DIR + "/queue"
109
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
110
ETC_HOSTS = "/etc/hosts"
111
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
112
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
113
SYSCONFDIR = _autoconf.SYSCONFDIR
114
TOOLSDIR = _autoconf.TOOLSDIR
115
CONF_DIR = SYSCONFDIR + "/ganeti"
116

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

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

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

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

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

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

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

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

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

EXPORT_CONF_FILE = "config.ini"

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

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

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

191
VALUE_DEFAULT = "default"
192
193
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
194
VALUE_NONE = "none"
195
196
VALUE_TRUE = "true"
VALUE_FALSE = "false"
197

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

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

# 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

315
316
317
318
319
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
462

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

609
610
JOB_ID_TEMPLATE = r"\d+"

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

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

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

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

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

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

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

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

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

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

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

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

CONFD_PROTOCOL_VERSION = 1

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

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

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

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

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

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

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

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

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

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