constants.py 21 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 = 20
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
100
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
SSL_CERT_FILE = DATA_DIR + "/server.pem"
101
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
102
HMAC_CLUSTER_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
SYSCONFDIR = _autoconf.SYSCONFDIR
113
TOOLSDIR = _autoconf.TOOLSDIR
114
CONF_DIR = SYSCONFDIR + "/ganeti"
115

116
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
117

118
NODED = "ganeti-noded"
Guido Trotter's avatar
Guido Trotter committed
119
CONFD = "ganeti-confd"
Guido Trotter's avatar
Guido Trotter committed
120
RAPI = "ganeti-rapi"
121
MASTERD = "ganeti-masterd"
122

123
124
MULTITHREADED_DAEMONS = frozenset([MASTERD])

125
126
127
128
129
130
DAEMONS_SSL = {
  # daemon-name: (default-cert-path, default-key-path)
  NODED: (SSL_CERT_FILE, SSL_CERT_FILE),
  RAPI: (RAPI_CERT_FILE, RAPI_CERT_FILE),
}

131
132
133
DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
134
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
135
  RAPI: ("tcp", 5080),
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]
140

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

145
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
146
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
147
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",
  }
153
154
155
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
156
LOG_BURNIN = LOG_DIR + "burnin.log"
Iustin Pop's avatar
Iustin Pop committed
157

158
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
159
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
160
161
162

EXPORT_CONF_FILE = "config.ini"

163
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
164
165
166
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

167
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
168
SOCAT_PATH = _autoconf.SOCAT_PATH
169
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
170
SOCAT_ESCAPE_CODE = "0x1d"
171

172
VALUE_DEFAULT = "default"
173
174
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
175
VALUE_NONE = "none"
176
177
VALUE_TRUE = "true"
VALUE_FALSE = "false"
178

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

Iustin Pop's avatar
Iustin Pop committed
182
# hooks-related constants
183
HOOKS_BASE_DIR = CONF_DIR + "/hooks"
Iustin Pop's avatar
Iustin Pop committed
184
185
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
186
HOOKS_NAME_CFGUPDATE = "config-update"
187
HOOKS_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
188
189
190
191
192
193
194
195
196
197

# 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

198
199
200
201
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
202
203

# Storage fields
204
205
206
207
# 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
208
209
210
211
212
213
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

214
215
216
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

217
# Available fields per storage type
218
219
220
221
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
222

223
224
225
226
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

227
VALID_STORAGE_OPERATIONS = {
228
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
229
230
  }

231
232
233
234
235
236
# 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
237
238
239
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
240
DT_DRBD8 = "drbd"
241
DT_FILE = "file"
242
243

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

246
247
248
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

249
250
# logical disk types
LD_LV = "lvm"
251
LD_DRBD8 = "drbd8"
252
LD_FILE = "file"
253
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
254

Iustin Pop's avatar
Iustin Pop committed
255
256
# drbd constants
DRBD_HMAC_ALG = "md5"
257
DRBD_NET_PROTOCOL = "C"
258
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
259

260
261
262
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
263
264

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

267
# disk access mode
268
269
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
270
271
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

272
# disk replacement mode
273
274
275
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
276
REPLACE_DISK_AUTO = "replace_auto"
277

278
279
# lock recalculate mode
LOCKS_REPLACE = 'replace'
280
LOCKS_APPEND = 'append'
281

282
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
283
284
285
286
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
287
288
289
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
290
291
292
293

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

295
296
297
298
299
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

300
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
301
EXIT_SUCCESS = 0
302
EXIT_FAILURE = 1
303
EXIT_NOTCLUSTER = 5
304
EXIT_NOTMASTER = 11
305
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
306
EXIT_CONFIRMATION = 13 # need user confirmation
Guido Trotter's avatar
Guido Trotter committed
307
EXIT_NOTCANDIDATE = 14
308

309
310
311
312
313
314
315
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

316
317
# others
DEFAULT_BRIDGE = "xen-br0"
Iustin Pop's avatar
Iustin Pop committed
318
SYNC_SPEED = 60 * 1024
Iustin Pop's avatar
Iustin Pop committed
319
LOCALHOST_IP_ADDRESS = "127.0.0.1"
320
TCP_PING_TIMEOUT = 10
321
GANETI_RUNAS = "root"
322
DEFAULT_VG = "xenvg"
323
BIND_ADDRESS_GLOBAL = "0.0.0.0"
324
MIN_VG_SIZE = 20480
325
DEFAULT_MAC_PREFIX = "aa:00:00"
326
LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT
327
328
# default maximum instance wait time, in seconds.
DEFAULT_SHUTDOWN_TIMEOUT = 120
329
NODE_MAX_CLOCK_SKEW = 150
330

331
332
333
334
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

335
336
337
338
339
# 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
340
OS_SCRIPTS = frozenset([OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT,
341
                        OS_SCRIPT_EXPORT, OS_SCRIPT_RENAME])
342

343
OS_API_FILE = 'ganeti_api_version'
344
OS_VARIANTS_FILE = 'variants.list'
345

346
347
348
349
350
351
# ssh constants
SSH_CONFIG_DIR = "/etc/ssh/"
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "ssh_host_dsa_key"
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "ssh_host_rsa_key"
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
352
353
SSH = "ssh"
SCP = "scp"
354
355
356
357
358

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

360
361
362
363
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

364
365
366
367
368
369
370
371
372
373
374
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,
                      ])

375
376
377
378
379
380
# 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"
381
HV_VNC_PASSWORD_FILE = "vnc_password_file"
382
383
384
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
385
386
HV_ACPI = "acpi"
HV_PAE = "pae"
387
388
389
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
390
HV_KERNEL_ARGS = "kernel_args"
391
392
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
393
HV_ROOT_PATH = "root_path"
394
HV_SERIAL_CONSOLE = "serial_console"
395
HV_USB_MOUSE = "usb_mouse"
396
HV_DEVICE_MODEL = "device_model"
397
HV_INIT_SCRIPT = "init_script"
398
HV_MIGRATION_PORT = "migration_port"
399
HV_USE_LOCALTIME = "use_localtime"
400
HV_DISK_CACHE = "disk_cache"
401

402
403
404
405
406
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
407
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
408
409
410
411
412
413
  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,
414
415
416
  HV_USE_BOOTLOADER: VTYPE_BOOL,
  HV_BOOTLOADER_PATH: VTYPE_STRING,
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
417
  HV_KERNEL_PATH: VTYPE_STRING,
418
  HV_KERNEL_ARGS: VTYPE_STRING,
419
420
421
422
  HV_INITRD_PATH: VTYPE_STRING,
  HV_ROOT_PATH: VTYPE_STRING,
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
423
  HV_DEVICE_MODEL: VTYPE_STRING,
424
  HV_INIT_SCRIPT: VTYPE_STRING,
425
  HV_MIGRATION_PORT: VTYPE_INT,
426
  HV_USE_LOCALTIME: VTYPE_BOOL,
427
  HV_DISK_CACHE: VTYPE_STRING,
428
429
430
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
431

432
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
433
BE_MEMORY = "memory"
434
BE_VCPUS = "vcpus"
435
BE_AUTO_BALANCE = "auto_balance"
436

437
438
439
440
441
442
443
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
444

445
446
# Instance Parameters Profile
PP_DEFAULT = "default"
447

Guido Trotter's avatar
Guido Trotter committed
448
449
450
451
452
453
454
455
456
457
458
459
460
461
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())
462

463
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
464
HT_XEN_PVM = "xen-pvm"
465
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
466
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
467
HT_KVM = "kvm"
468
469
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
470
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
471

472
VNC_BASE_PORT = 5900
473
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
474
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
475

476
# NIC types
477
478
479
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
480
481
482
483
484
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
485
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
486

487
488
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
489
490
491
492
493
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])
494
495
496
497
498
499
500
501
# 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"

502
503
504
505
506
507
508
509
510
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])

511
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
512
513
514
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
515

516
517
518
519
520
521
522
523
524
525
526
527
528
# 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])

529
530
531
532
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

533
534
535
536
537
538
539
540
541
# 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"
542
543
NV_LVLIST = "lvlist"
NV_PVLIST = "pvlist"
544
NV_DRBDLIST = "drbd-list"
545
NV_NODESETUP = "nodesetup"
546
NV_TIME = "time"
547

548
# Allocator framework constants
549
IALLOCATOR_VERSION = 2
550
551
552
553
554
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
555

556
557
558
559
560
# 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"
561
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
562
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
563
564
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
565

566
567
JOB_ID_TEMPLATE = r"\d+"

568
569
570
# unchanged job return
JOB_NOTCHANGED = "nochange"

571
572
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
573
JOB_STATUS_WAITLOCK = "waiting"
574
JOB_STATUS_CANCELING = "canceling"
575
576
577
578
579
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

580
581
# OpCode status
# not yet finalized
582
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
583
OP_STATUS_WAITLOCK = "waiting"
584
OP_STATUS_CANCELING = "canceling"
585
OP_STATUS_RUNNING = "running"
586
# finalized
587
OP_STATUS_CANCELED = "canceled"
588
589
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
590
591
592
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
593
594
595
596

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

598
# max dynamic devices
599
600
601
MAX_NICS = 8
MAX_DISKS = 16

Iustin Pop's avatar
Iustin Pop committed
602
603
# SSCONF keys
SS_CLUSTER_NAME = "cluster_name"
604
SS_CLUSTER_TAGS = "cluster_tags"
Iustin Pop's avatar
Iustin Pop committed
605
SS_FILE_STORAGE_DIR = "file_storage_dir"
606
SS_MASTER_CANDIDATES = "master_candidates"
607
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
Iustin Pop's avatar
Iustin Pop committed
608
609
610
611
SS_MASTER_IP = "master_ip"
SS_MASTER_NETDEV = "master_netdev"
SS_MASTER_NODE = "master_node"
SS_NODE_LIST = "node_list"
612
613
SS_NODE_PRIMARY_IPS = "node_primary_ips"
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
614
SS_OFFLINE_NODES = "offline_nodes"
615
616
SS_ONLINE_NODES = "online_nodes"
SS_INSTANCE_LIST = "instance_list"
617
SS_RELEASE_VERSION = "release_version"
Iustin Pop's avatar
Iustin Pop committed
618

619
620
621
622
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

HVC_DEFAULTS = {
623
  HT_XEN_PVM: {
624
625
626
    HV_USE_BOOTLOADER: False,
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
    HV_BOOTLOADER_ARGS: '',
627
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-xenU",
628
    HV_INITRD_PATH: '',
629
    HV_ROOT_PATH: '/dev/sda1',
630
    HV_KERNEL_ARGS: 'ro',
631
    HV_MIGRATION_PORT: 8002,
632
633
634
    },
  HT_XEN_HVM: {
    HV_BOOT_ORDER: "cd",
635
    HV_CDROM_IMAGE_PATH: '',
636
    HV_NIC_TYPE: HT_NIC_RTL8139,
637
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
638
    HV_VNC_BIND_ADDRESS: '0.0.0.0',
639
    HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE,
640
641
    HV_ACPI: True,
    HV_PAE: True,
642
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
643
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
644
    HV_MIGRATION_PORT: 8002,
645
    HV_USE_LOCALTIME: False,
646
647
648
    },
  HT_KVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
649
    HV_INITRD_PATH: '',
650
    HV_KERNEL_ARGS: 'ro',
651
    HV_ROOT_PATH: '/dev/vda1',
652
653
    HV_ACPI: True,
    HV_SERIAL_CONSOLE: True,
654
    HV_VNC_BIND_ADDRESS: '',
655
656
657
    HV_VNC_TLS: False,
    HV_VNC_X509: '',
    HV_VNC_X509_VERIFY: False,
658
    HV_VNC_PASSWORD_FILE: '',
659
    HV_CDROM_IMAGE_PATH: '',
660
    HV_BOOT_ORDER: HT_BO_DISK,
661
662
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
663
    HV_USB_MOUSE: '',
664
    HV_MIGRATION_PORT: 8102,
665
    HV_USE_LOCALTIME: False,
666
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
667
668
669
    },
  HT_FAKE: {
    },
670
671
672
  HT_CHROOT: {
    HV_INIT_SCRIPT: "/ganeti-chroot",
    },
673
  }
674

675
676
677
678
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

679
BEC_DEFAULTS = {
680
681
682
683
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
684

Guido Trotter's avatar
Guido Trotter committed
685
686
687
688
689
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

690
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
691
692
693

CONFD_PROTOCOL_VERSION = 1

694
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
695
696
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
697
CONFD_REQ_CLUSTER_MASTER = 3
698
699
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
700
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
701

702
703
704
705
706
707
# 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"
708
709
710
711
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
712
CONFD_REQFIELD_MNODE_PIP = "2"
713

Guido Trotter's avatar
Guido Trotter committed
714
CONFD_REQS = frozenset([
715
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
716
717
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
718
  CONFD_REQ_CLUSTER_MASTER,
719
720
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
721
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
722
723
  ])

724
725
726
727
728
729
730
731
732
733
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
734
735
736
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
737
738
739
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
740

741
742
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
743
CONFD_ERROR_INTERNAL = 2
744
CONFD_ERROR_ARGUMENT = 3
745

Guido Trotter's avatar
Guido Trotter committed
746
747
748
# 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
749
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
750
751
752
753
754
755
756
757
758

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

760
761
762
763
764
765
# 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
766
767
768
769
770
771
772
773
774
775
# 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

776
777
778
779
780
781
# 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