constants.py 23 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
CRYPTO_KEYS_DIR = RUN_GANETI_DIR + "/crypto"
CRYPTO_KEYS_DIR_MODE = 0700
96
97
98
# 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
99
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
100
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
Iustin Pop's avatar
Iustin Pop committed
101
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
102
NODED_CERT_FILE = DATA_DIR + "/server.pem"
103
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
104
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
Michael Hanselmann's avatar
Michael Hanselmann committed
105
CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret"
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
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),
Guido Trotter's avatar
Guido Trotter committed
136
137
  # used in the ganeti-nbma project
  NLD: ("udp", 1816),
138
139
}
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
140
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
141
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
Guido Trotter's avatar
Guido Trotter committed
142
143
# used in the ganeti-nbma project
DEFAULT_NLD_PORT = DAEMONS_PORTS[NLD][1]
144

Iustin Pop's avatar
Iustin Pop committed
145
146
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
147
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
148

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

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

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

172
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
173
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
174
175
176

EXPORT_CONF_FILE = "config.ini"

177
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
178
179
180
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

181
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
182
SOCAT_PATH = _autoconf.SOCAT_PATH
183
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
184
SOCAT_ESCAPE_CODE = "0x1d"
185

186
187
188
189
190
191
192
193
# For RSA keys more bits are better, but they also make operations more
# expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year
# 2010 on.
RSA_KEY_BITS = 2048

# Digest used to sign certificates ("openssl x509" uses SHA1 by default)
X509_CERT_SIGN_DIGEST = "SHA1"

194
195
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

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
Guido Trotter's avatar
Guido Trotter committed
337
EXIT_NOTCANDIDATE = 14
338

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

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

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

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

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

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

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

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

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

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
474

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

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

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

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

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

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

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

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

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

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

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

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

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

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

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

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

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

617
618
619
620
621
# 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"
622
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
623
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
624
625
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
626

627
628
JOB_ID_TEMPLATE = r"\d+"

629
630
631
# unchanged job return
JOB_NOTCHANGED = "nochange"

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

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

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

659
# max dynamic devices
660
661
662
MAX_NICS = 8
MAX_DISKS = 16

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

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

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

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

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

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

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

CONFD_PROTOCOL_VERSION = 1

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

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

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

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

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

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

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

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

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

842
843
844
845
846
847
# 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