constants.py 23.1 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"
99
100
101
# User-id pool lock directory
# The user-ids that are in use have a corresponding lock file in this directory
UIDPOOL_LOCKDIR = RUN_GANETI_DIR + "/uid-pool"
Iustin Pop's avatar
Iustin Pop committed
102
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
103
NODED_CERT_FILE = DATA_DIR + "/server.pem"
104
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
105
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
106
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
107
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
108
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
109
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
110
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
111
QUEUE_DIR = DATA_DIR + "/queue"
112
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
113
ETC_HOSTS = "/etc/hosts"
114
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
115
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
116
SYSCONFDIR = _autoconf.SYSCONFDIR
117
TOOLSDIR = _autoconf.TOOLSDIR
118
CONF_DIR = SYSCONFDIR + "/ganeti"
119

120
ALL_CERT_FILES = frozenset([NODED_CERT_FILE, RAPI_CERT_FILE])
121

122
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
123

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

131
132
MULTITHREADED_DAEMONS = frozenset([MASTERD])

133
134
DAEMONS_SSL = {
  # daemon-name: (default-cert-path, default-key-path)
135
  NODED: (NODED_CERT_FILE, NODED_CERT_FILE),
136
137
138
  RAPI: (RAPI_CERT_FILE, RAPI_CERT_FILE),
}

139
140
141
DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
142
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
143
  RAPI: ("tcp", 5080),
Guido Trotter's avatar
Guido Trotter committed
144
145
  # used in the ganeti-nbma project
  NLD: ("udp", 1816),
146
147
}
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
148
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
149
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
Guido Trotter's avatar
Guido Trotter committed
150
151
# used in the ganeti-nbma project
DEFAULT_NLD_PORT = DAEMONS_PORTS[NLD][1]
152

Iustin Pop's avatar
Iustin Pop committed
153
154
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
155
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
156

157
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
158
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
159
160
161
162
163
  # "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
164
165
  # used in the ganeti-nbma project
  NLD: LOG_DIR + "nl-daemon.log",
Michael Hanselmann's avatar
Michael Hanselmann committed
166
  }
167
168
169
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
170
LOG_BURNIN = LOG_DIR + "burnin.log"
Iustin Pop's avatar
Iustin Pop committed
171

172
173
174
175
176
177
178
# one of 'no', 'yes', 'only'
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

179
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
180
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
181
182
183

EXPORT_CONF_FILE = "config.ini"

184
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
185
186
187
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

188
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
189
SOCAT_PATH = _autoconf.SOCAT_PATH
190
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
191
SOCAT_ESCAPE_CODE = "0x1d"
192

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

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

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

# 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

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

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

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

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

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

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

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

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

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

271
# the set of disk templates which can be grown
Guido Trotter's avatar
Guido Trotter committed
272
DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE])
273

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

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

285
286
287
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
288
289

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

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

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

303
304
# lock recalculate mode
LOCKS_REPLACE = 'replace'
305
LOCKS_APPEND = 'append'
306

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

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
312
313
314
                            DT_DRBD8, DT_FILE])

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

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
319
320
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
321

322
323
324
325
326
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

327
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
328
EXIT_SUCCESS = 0
329
EXIT_FAILURE = 1
330
EXIT_NOTCLUSTER = 5
331
EXIT_NOTMASTER = 11
332
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
333
EXIT_CONFIRMATION = 13 # need user confirmation
334

335
336
337
338
339
340
341
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

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

357
358
359
360
361
362
363
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

364
365
366
367
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

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

376
OS_API_FILE = 'ganeti_api_version'
377
OS_VARIANTS_FILE = 'variants.list'
378

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

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

393
394
395
396
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

397
398
399
400
401
402
403
404
405
406
407
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,
                      ])

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
470

471
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
472
BE_MEMORY = "memory"
473
BE_VCPUS = "vcpus"
474
BE_AUTO_BALANCE = "auto_balance"
475

476
477
478
479
480
481
482
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
483

484
485
# Instance Parameters Profile
PP_DEFAULT = "default"
486

Guido Trotter's avatar
Guido Trotter committed
487
488
489
490
491
492
493
494
495
496
497
498
499
500
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())
501

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

511
VNC_BASE_PORT = 5900
512
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
513
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
514

515
# NIC types
516
517
518
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
519
520
521
522
523
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
524
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
525

526
527
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
528
529
530
531
532
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])
533
534
535
536
537
538
539
540
# 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"

541
542
543
544
545
546
547
548
549
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])

550
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
551
552
553
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
554

555
556
557
558
559
560
561
562
563
564
565
566
567
# 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])

568
569
570
571
572
573
574
# 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])

Guido Trotter's avatar
Guido Trotter committed
575
576
577
578
579
580
# Kvm flag values
HT_KVM_ENABLED = "enabled"
HT_KVM_DISABLED = "disabled"

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

581
582
583
584
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

585
586
587
588
589
590
591
592
593
# 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"
594
595
NV_LVLIST = "lvlist"
NV_PVLIST = "pvlist"
596
NV_DRBDLIST = "drbd-list"
597
NV_NODESETUP = "nodesetup"
598
NV_TIME = "time"
599

600
601
602
603
# SSL certificate check constants (in days)
SSL_CERT_EXPIRATION_WARN = 30
SSL_CERT_EXPIRATION_ERROR = 7

604
# Allocator framework constants
605
IALLOCATOR_VERSION = 2
606
607
608
609
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
610
IALLOCATOR_MODE_MEVAC = "multi-evacuate"
611
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
612

613
614
615
616
617
# 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"
618
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
619
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
620
621
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
622
623
JOB_QUEUE_DIRS = [QUEUE_DIR, JOB_QUEUE_ARCHIVE_DIR]
JOB_QUEUE_DIRS_MODE = 0700
624

625
626
JOB_ID_TEMPLATE = r"\d+"

627
628
629
# unchanged job return
JOB_NOTCHANGED = "nochange"

630
631
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
632
JOB_STATUS_WAITLOCK = "waiting"
633
JOB_STATUS_CANCELING = "canceling"
634
635
636
637
638
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

639
640
# OpCode status
# not yet finalized
641
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
642
OP_STATUS_WAITLOCK = "waiting"
643
OP_STATUS_CANCELING = "canceling"
644
OP_STATUS_RUNNING = "running"
645
# finalized
646
OP_STATUS_CANCELED = "canceled"
647
648
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
649
650
651
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
652
653
654
655

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

657
# max dynamic devices
658
659
660
MAX_NICS = 8
MAX_DISKS = 16

Iustin Pop's avatar
Iustin Pop committed
661
662
# SSCONF keys
SS_CLUSTER_NAME = "cluster_name"
663
SS_CLUSTER_TAGS = "cluster_tags"
Iustin Pop's avatar
Iustin Pop committed
664
SS_FILE_STORAGE_DIR = "file_storage_dir"
665
SS_MASTER_CANDIDATES = "master_candidates"
666
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
Iustin Pop's avatar
Iustin Pop committed
667
668
669
670
SS_MASTER_IP = "master_ip"
SS_MASTER_NETDEV = "master_netdev"
SS_MASTER_NODE = "master_node"
SS_NODE_LIST = "node_list"
671
672
SS_NODE_PRIMARY_IPS = "node_primary_ips"
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
673
SS_OFFLINE_NODES = "offline_nodes"
674
675
SS_ONLINE_NODES = "online_nodes"
SS_INSTANCE_LIST = "instance_list"
676
SS_RELEASE_VERSION = "release_version"
677
SS_HYPERVISOR_LIST = "hypervisor_list"
678
SS_MAINTAIN_NODE_HEALTH = "maintain_node_health"
Balazs Lecz's avatar
Balazs Lecz committed
679
SS_UID_POOL = "uid_pool"
Iustin Pop's avatar
Iustin Pop committed
680

681
682
683
684
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

HVC_DEFAULTS = {
685
  HT_XEN_PVM: {
686
687
688
    HV_USE_BOOTLOADER: False,
    HV_BOOTLOADER_PATH: XEN_BOOTLOADER,
    HV_BOOTLOADER_ARGS: '',
689
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-xenU",
690
    HV_INITRD_PATH: '',
691
    HV_ROOT_PATH: '/dev/sda1',
692
    HV_KERNEL_ARGS: 'ro',
693
    HV_MIGRATION_PORT: 8002,
694
695
696
    },
  HT_XEN_HVM: {
    HV_BOOT_ORDER: "cd",
697
    HV_CDROM_IMAGE_PATH: '',
698
    HV_NIC_TYPE: HT_NIC_RTL8139,
699
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
700
    HV_VNC_BIND_ADDRESS: '0.0.0.0',
701
    HV_VNC_PASSWORD_FILE: VNC_PASSWORD_FILE,
702
703
    HV_ACPI: True,
    HV_PAE: True,
704
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
705
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
706
    HV_MIGRATION_PORT: 8002,
707
    HV_USE_LOCALTIME: False,
708
709
710
    },
  HT_KVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
711
    HV_INITRD_PATH: '',
712
    HV_KERNEL_ARGS: 'ro',
713
    HV_ROOT_PATH: '/dev/vda1',
714
715
    HV_ACPI: True,
    HV_SERIAL_CONSOLE: True,
716
    HV_VNC_BIND_ADDRESS: '',
717
718
719
    HV_VNC_TLS: False,
    HV_VNC_X509: '',
    HV_VNC_X509_VERIFY: False,
720
    HV_VNC_PASSWORD_FILE: '',
721
    HV_CDROM_IMAGE_PATH: '',
722
    HV_BOOT_ORDER: HT_BO_DISK,
723
724
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
725
    HV_USB_MOUSE: '',
726
    HV_MIGRATION_PORT: 8102,
727
    HV_USE_LOCALTIME: False,
728
    HV_DISK_CACHE: HT_CACHE_DEFAULT,
729
730
    HV_SECURITY_MODEL: HT_SM_NONE,
    HV_SECURITY_DOMAIN: '',
Guido Trotter's avatar
Guido Trotter committed
731
    HV_KVM_FLAG: "",
732
733
734
    },
  HT_FAKE: {
    },
735
736
737
  HT_CHROOT: {
    HV_INIT_SCRIPT: "/ganeti-chroot",
    },
738
  }
739

740
741
742
743
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

744
BEC_DEFAULTS = {
745
746
747
748
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
749

Guido Trotter's avatar
Guido Trotter committed
750
751
752
753
754
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

755
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
756
757
758

CONFD_PROTOCOL_VERSION = 1

759
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
760
761
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
762
CONFD_REQ_CLUSTER_MASTER = 3
763
764
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
765
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
766

767
768
769
770
771
772
# 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"
773
774
775
776
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
777
CONFD_REQFIELD_MNODE_PIP = "2"
778

Guido Trotter's avatar
Guido Trotter committed
779
CONFD_REQS = frozenset([
780
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
781
782
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
783
  CONFD_REQ_CLUSTER_MASTER,
784
785
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
786
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
787
788
  ])

789
790
791
792
793
794
795
796
797
798
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
799
800
801
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
802
803
804
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
805

806
807
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
808
CONFD_ERROR_INTERNAL = 2
809
CONFD_ERROR_ARGUMENT = 3
810

Guido Trotter's avatar
Guido Trotter committed
811
812
813
# 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
814
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
815
816
817
818
819
820
821
822
823

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

825
826
827
828
829
830
# 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
831
832
833
834
835
836
837
838
839
840
# 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

841
842
843
844
845
846
# 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
Balazs Lecz's avatar
Balazs Lecz committed
847
848
849
850

# User-id pool minimum/maximum acceptable user-ids.
UIDPOOL_UID_MIN = 0
UIDPOOL_UID_MAX = 2**32-1 # Assuming 32 bit user-ids
851
852
853

# Name or path of the pgrep command
PGREP = "pgrep"