constants.py 23.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"
93
94
SECURE_DIR_MODE = 0700
SOCKET_DIR_MODE = SECURE_DIR_MODE
95
96
97
# 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
98
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
99
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
100
101
102
# 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
103
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
104
NODED_CERT_FILE = DATA_DIR + "/server.pem"
105
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
106
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
107
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
108
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
109
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
110
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
111
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
112
QUEUE_DIR = DATA_DIR + "/queue"
113
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
114
ETC_HOSTS = "/etc/hosts"
115
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
116
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
117
SYSCONFDIR = _autoconf.SYSCONFDIR
118
TOOLSDIR = _autoconf.TOOLSDIR
119
CONF_DIR = SYSCONFDIR + "/ganeti"
120

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

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

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

132
133
MULTITHREADED_DAEMONS = frozenset([MASTERD])

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

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

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

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

Luca Bigliardi's avatar
Luca Bigliardi committed
173
174
DEV_CONSOLE = "/dev/console"

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

182
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
183
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
184
185
186

EXPORT_CONF_FILE = "config.ini"

187
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
188
189
190
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

191
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
192
SOCAT_PATH = _autoconf.SOCAT_PATH
193
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
194
SOCAT_ESCAPE_CODE = "0x1d"
195

196
VALUE_DEFAULT = "default"
197
198
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
199
VALUE_NONE = "none"
200
201
VALUE_TRUE = "true"
VALUE_FALSE = "false"
202

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

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

# 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

223
224
225
226
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
227
228

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

239
240
241
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

242
# Available fields per storage type
243
244
245
246
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
247

248
249
250
251
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

252
VALID_STORAGE_OPERATIONS = {
253
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
254
255
  }

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

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

271
272
273
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

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

277
278
# logical disk types
LD_LV = "lvm"
279
LD_DRBD8 = "drbd8"
280
LD_FILE = "file"
281
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
282

Iustin Pop's avatar
Iustin Pop committed
283
284
# drbd constants
DRBD_HMAC_ALG = "md5"
285
DRBD_NET_PROTOCOL = "C"
286
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
287

288
289
290
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
291
292

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

295
# disk access mode
296
297
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
298
299
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

300
# disk replacement mode
301
302
303
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
304
REPLACE_DISK_AUTO = "replace_auto"
305

306
307
# lock recalculate mode
LOCKS_REPLACE = 'replace'
308
LOCKS_APPEND = 'append'
309

310
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
311
312
313
314
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
315
316
317
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
318
319
320
321

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
322
323
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
324

325
326
327
328
329
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

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

338
339
340
341
342
343
344
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

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

360
361
362
363
364
365
366
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

367
368
369
370
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

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

379
OS_API_FILE = 'ganeti_api_version'
380
OS_VARIANTS_FILE = 'variants.list'
381

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

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

396
397
398
399
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

400
401
402
403
404
405
406
407
408
409
410
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,
                      ])

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
475

476
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
477
BE_MEMORY = "memory"
478
BE_VCPUS = "vcpus"
479
BE_AUTO_BALANCE = "auto_balance"
480

481
482
483
484
485
486
487
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
488

489
490
# Instance Parameters Profile
PP_DEFAULT = "default"
491

Guido Trotter's avatar
Guido Trotter committed
492
493
494
495
496
497
498
499
500
501
502
503
504
505
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())
506

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

516
VNC_BASE_PORT = 5900
517
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
518
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
519

520
# NIC types
521
522
523
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
524
525
526
527
528
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
529
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
530

531
532
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
533
534
535
536
537
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])
538
539
540
541
542
543
544
545
# 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"

546
547
548
549
550
551
552
553
554
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])

555
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
556
557
558
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
559

560
561
562
563
564
565
566
567
568
569
570
571
572
# 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])

573
574
575
576
577
578
579
# 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
580
581
582
583
584
585
# Kvm flag values
HT_KVM_ENABLED = "enabled"
HT_KVM_DISABLED = "disabled"

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

586
587
588
589
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

590
591
592
593
594
595
596
597
598
# 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"
599
600
NV_LVLIST = "lvlist"
NV_PVLIST = "pvlist"
601
NV_DRBDLIST = "drbd-list"
602
NV_NODESETUP = "nodesetup"
603
NV_TIME = "time"
604
NV_MASTERIP = "master-ip"
605

606
607
608
609
# SSL certificate check constants (in days)
SSL_CERT_EXPIRATION_WARN = 30
SSL_CERT_EXPIRATION_ERROR = 7

610
# Allocator framework constants
611
IALLOCATOR_VERSION = 2
612
613
614
615
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
616
IALLOCATOR_MODE_MEVAC = "multi-evacuate"
617
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
618

619
620
621
622
623
# 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"
624
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
625
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
626
627
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
628
JOB_QUEUE_DIRS = [QUEUE_DIR, JOB_QUEUE_ARCHIVE_DIR]
629
JOB_QUEUE_DIRS_MODE = SECURE_DIR_MODE
630

631
632
JOB_ID_TEMPLATE = r"\d+"

633
634
635
# unchanged job return
JOB_NOTCHANGED = "nochange"

636
637
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
638
JOB_STATUS_WAITLOCK = "waiting"
639
JOB_STATUS_CANCELING = "canceling"
640
641
642
643
644
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

645
646
# OpCode status
# not yet finalized
647
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
648
OP_STATUS_WAITLOCK = "waiting"
649
OP_STATUS_CANCELING = "canceling"
650
OP_STATUS_RUNNING = "running"
651
# finalized
652
OP_STATUS_CANCELED = "canceled"
653
654
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
655
656
657
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
658
659
660
661

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

663
# max dynamic devices
664
665
666
MAX_NICS = 8
MAX_DISKS = 16

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

687
688
689
690
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

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

747
748
749
750
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

751
BEC_DEFAULTS = {
752
753
754
755
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
756

Guido Trotter's avatar
Guido Trotter committed
757
758
759
760
761
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

762
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
763
764
765

CONFD_PROTOCOL_VERSION = 1

766
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
767
768
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
769
CONFD_REQ_CLUSTER_MASTER = 3
770
771
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
772
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
773

774
775
776
777
778
779
# 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"
780
781
782
783
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
784
CONFD_REQFIELD_MNODE_PIP = "2"
785

Guido Trotter's avatar
Guido Trotter committed
786
CONFD_REQS = frozenset([
787
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
788
789
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
790
  CONFD_REQ_CLUSTER_MASTER,
791
792
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
793
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
794
795
  ])

796
797
798
799
800
801
802
803
804
805
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
806
807
808
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
809
810
811
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
812

813
814
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
815
CONFD_ERROR_INTERNAL = 2
816
CONFD_ERROR_ARGUMENT = 3
817

Guido Trotter's avatar
Guido Trotter committed
818
819
820
# 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
821
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
822
823
824
825
826
827
828
829
830

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

832
833
834
835
836
837
# 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
838
839
840
841
842
843
844
845
846
847
# 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

848
849
850
851
852
853
# 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
854
855
856
857

# User-id pool minimum/maximum acceptable user-ids.
UIDPOOL_UID_MIN = 0
UIDPOOL_UID_MAX = 2**32-1 # Assuming 32 bit user-ids
858
859
860

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