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 = 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
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
OPENSSL_PATH = _autoconf.OPENSSL_PATH
116

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

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

DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
127
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
128
  RAPI: ("tcp", 5080),
Michael Hanselmann's avatar
Michael Hanselmann committed
129
130
  }

131
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
132
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
133
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
134

Iustin Pop's avatar
Iustin Pop committed
135
136
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
137
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
138

139
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
140
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
141
142
143
144
145
146
  # "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",
  }
Michael Hanselmann's avatar
Michael Hanselmann committed
147

148
149
150
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
151
LOG_BURNIN = LOG_DIR + "burnin.log"
Iustin Pop's avatar
Iustin Pop committed
152

153
154
155
156
157
158
159
# one of 'no', 'yes', 'only'
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

160
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
161
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
162
163
164

EXPORT_CONF_FILE = "config.ini"

165
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
166
167
168
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

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

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

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

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

# 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

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

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

216
217
218
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

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

225
226
227
228
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

229
VALID_STORAGE_OPERATIONS = {
230
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
231
232
  }

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

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

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

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

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

262
263
264
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
265
266

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

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

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

280
281
# lock recalculate mode
LOCKS_REPLACE = 'replace'
282
LOCKS_APPEND = 'append'
283

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

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
289
290
291
                            DT_DRBD8, DT_FILE])

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

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

297
298
299
300
301
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

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

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

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

333
334
335
336
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

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

345
OS_API_FILE = 'ganeti_api_version'
346
OS_VARIANTS_FILE = 'variants.list'
347

348
349
350
351
352
353
# 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"
354
355
SSH = "ssh"
SCP = "scp"
356
357
358
359
360

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

362
363
364
365
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
433

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

439
440
441
442
443
444
445
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
446

447
448
# Instance Parameters Profile
PP_DEFAULT = "default"
449

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

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

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

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

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

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

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

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

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

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

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

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

568
569
JOB_ID_TEMPLATE = r"\d+"

570
571
572
# unchanged job return
JOB_NOTCHANGED = "nochange"

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

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

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

600
# max dynamic devices
601
602
603
MAX_NICS = 8
MAX_DISKS = 16

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

621
622
623
624
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

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

677
678
679
680
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

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

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

692
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
693
694
695

CONFD_PROTOCOL_VERSION = 1

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

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

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
714
CONFD_REQFIELD_MNODE_PIP = "2"
715

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

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

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

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

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

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

778
779
780
781
782
783
# 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