constants.py 23.2 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

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

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

EXPORT_CONF_FILE = "config.ini"

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

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

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

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

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

# 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

323
324
325
326
327
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
471

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

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

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

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

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

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

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

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

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

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

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

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

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

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

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

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

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

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

626
627
JOB_ID_TEMPLATE = r"\d+"

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

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

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

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

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

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

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

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