constants.py 22.8 KB
Newer Older
Iustin Pop's avatar
Iustin Pop committed
1
#
Iustin Pop's avatar
Iustin Pop committed
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#

# Copyright (C) 2006, 2007 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.


"""Module holding different constants."""

24
25
import re

26
from ganeti import _autoconf
27

Iustin Pop's avatar
Iustin Pop committed
28
# various versions
29
PROTOCOL_VERSION = 30
30
RELEASE_VERSION = _autoconf.PACKAGE_VERSION
Guido Trotter's avatar
Guido Trotter committed
31
32
33
OS_API_V10 = 10
OS_API_V15 = 15
OS_API_VERSIONS = frozenset([OS_API_V10, OS_API_V15])
Iustin Pop's avatar
Iustin Pop committed
34
EXPORT_VERSION = 0
35
RAPI_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
36

37

38
39
40
41
42
43
44
45
# Format for CONFIG_VERSION:
#   01 03 0123 = 01030123
#   ^^ ^^ ^^^^
#   |  |  + Configuration version/revision
#   |  + Minor version
#   + Major version
#
# It stored as an integer. Make sure not to write an octal number.
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

# BuildVersion and SplitVersion must be in here because we can't import other
# modules. The cfgupgrade tool must be able to read and write version numbers
# and thus requires these functions. To avoid code duplication, they're kept in
# here.

def BuildVersion(major, minor, revision):
  """Calculates int version number from major, minor and revision numbers.

  Returns: int representing version number

  """
  assert isinstance(major, int)
  assert isinstance(minor, int)
  assert isinstance(revision, int)
  return (1000000 * major +
            10000 * minor +
                1 * revision)


def SplitVersion(version):
  """Splits version number stored in an int.

  Returns: tuple; (major, minor, revision)

  """
  assert isinstance(version, int)

  (major, remainder) = divmod(version, 1000000)
  (minor, revision) = divmod(remainder, 10000)

  return (major, minor, revision)


80
81
82
CONFIG_MAJOR = int(_autoconf.VERSION_MAJOR)
CONFIG_MINOR = int(_autoconf.VERSION_MINOR)
CONFIG_REVISION = 0
83
CONFIG_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, CONFIG_REVISION)
Iustin Pop's avatar
Iustin Pop committed
84
85

# file paths
86
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
87
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run"
88
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
89
BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache"
90
DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks"
91
RUN_DIRS_MODE = 0755
Guido Trotter's avatar
Guido Trotter committed
92
SOCKET_DIR = RUN_GANETI_DIR + "/socket"
Guido Trotter's avatar
Guido Trotter committed
93
SOCKET_DIR_MODE = 0700
94
95
96
# keep RUN_GANETI_DIR first here, to make sure all get created when the node
# daemon is started (this takes care of RUN_DIR being tmpfs)
SUB_RUN_DIRS = [ RUN_GANETI_DIR, BDEV_CACHE_DIR, DISK_LINKS_DIR ]
Iustin Pop's avatar
Iustin Pop committed
97
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
98
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
Iustin Pop's avatar
Iustin Pop committed
99
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
100
NODED_CERT_FILE = DATA_DIR + "/server.pem"
101
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
102
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
103
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
104
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"
105
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
106
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
107
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
108
QUEUE_DIR = DATA_DIR + "/queue"
109
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
110
ETC_HOSTS = "/etc/hosts"
111
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
112
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
113
SYSCONFDIR = _autoconf.SYSCONFDIR
114
TOOLSDIR = _autoconf.TOOLSDIR
115
CONF_DIR = SYSCONFDIR + "/ganeti"
116

117
ALL_CERT_FILES = frozenset([NODED_CERT_FILE, RAPI_CERT_FILE])
118

119
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
120

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

128
129
MULTITHREADED_DAEMONS = frozenset([MASTERD])

130
131
DAEMONS_SSL = {
  # daemon-name: (default-cert-path, default-key-path)
132
  NODED: (NODED_CERT_FILE, NODED_CERT_FILE),
133
134
135
  RAPI: (RAPI_CERT_FILE, RAPI_CERT_FILE),
}

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

Iustin Pop's avatar
Iustin Pop committed
150
151
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
152
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
153

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

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

176
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
177
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
178
179
180

EXPORT_CONF_FILE = "config.ini"

181
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
182
183
184
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

185
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
186
SOCAT_PATH = _autoconf.SOCAT_PATH
187
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
188
SOCAT_ESCAPE_CODE = "0x1d"
189

190
VALUE_DEFAULT = "default"
191
192
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
193
VALUE_NONE = "none"
194
195
VALUE_TRUE = "true"
VALUE_FALSE = "false"
196

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

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

# 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

217
218
219
220
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
221
222

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

233
234
235
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

236
# Available fields per storage type
237
238
239
240
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
241

242
243
244
245
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

246
VALID_STORAGE_OPERATIONS = {
247
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
248
249
  }

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

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

265
266
267
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

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

271
272
# logical disk types
LD_LV = "lvm"
273
LD_DRBD8 = "drbd8"
274
LD_FILE = "file"
275
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
276

Iustin Pop's avatar
Iustin Pop committed
277
278
# drbd constants
DRBD_HMAC_ALG = "md5"
279
DRBD_NET_PROTOCOL = "C"
280
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
281

282
283
284
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
285
286

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

289
# disk access mode
290
291
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
292
293
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

294
# disk replacement mode
295
296
297
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
298
REPLACE_DISK_AUTO = "replace_auto"
299

300
301
# lock recalculate mode
LOCKS_REPLACE = 'replace'
302
LOCKS_APPEND = 'append'
303

304
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
305
306
307
308
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
309
310
311
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
312
313
314
315

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
316
317
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
318

319
320
321
322
323
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

324
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
325
EXIT_SUCCESS = 0
326
EXIT_FAILURE = 1
327
EXIT_NOTCLUSTER = 5
328
EXIT_NOTMASTER = 11
329
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
330
EXIT_CONFIRMATION = 13 # need user confirmation
Guido Trotter's avatar
Guido Trotter committed
331
EXIT_NOTCANDIDATE = 14
332

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

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

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

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

362
363
364
365
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

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

374
OS_API_FILE = 'ganeti_api_version'
375
OS_VARIANTS_FILE = 'variants.list'
376

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

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

391
392
393
394
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
468

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

474
475
476
477
478
479
480
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
481

482
483
# Instance Parameters Profile
PP_DEFAULT = "default"
484

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

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

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

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

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

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

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

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

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

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

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

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

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

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

611
612
613
614
615
# 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"
616
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
617
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
618
619
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
620

621
622
JOB_ID_TEMPLATE = r"\d+"

623
624
625
# unchanged job return
JOB_NOTCHANGED = "nochange"

626
627
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
628
JOB_STATUS_WAITLOCK = "waiting"
629
JOB_STATUS_CANCELING = "canceling"
630
631
632
633
634
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

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

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

653
# max dynamic devices
654
655
656
MAX_NICS = 8
MAX_DISKS = 16

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

677
678
679
680
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

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

736
737
738
739
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

740
BEC_DEFAULTS = {
741
742
743
744
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
745

Guido Trotter's avatar
Guido Trotter committed
746
747
748
749
750
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

751
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
752
753
754

CONFD_PROTOCOL_VERSION = 1

755
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
756
757
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2
758
CONFD_REQ_CLUSTER_MASTER = 3
759
760
CONFD_REQ_NODE_PIP_LIST = 4
CONFD_REQ_MC_PIP_LIST = 5
761
CONFD_REQ_INSTANCES_IPS_LIST = 6
Guido Trotter's avatar
Guido Trotter committed
762

763
764
765
766
767
768
# 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"
769
770
771
772
CONFD_REQQ_FIELDS = "3"

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
773
CONFD_REQFIELD_MNODE_PIP = "2"
774

Guido Trotter's avatar
Guido Trotter committed
775
CONFD_REQS = frozenset([
776
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
777
778
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
779
  CONFD_REQ_CLUSTER_MASTER,
780
781
  CONFD_REQ_NODE_PIP_LIST,
  CONFD_REQ_MC_PIP_LIST,
782
  CONFD_REQ_INSTANCES_IPS_LIST,
Guido Trotter's avatar
Guido Trotter committed
783
784
  ])

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

802
803
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
804
CONFD_ERROR_INTERNAL = 2
805
CONFD_ERROR_ARGUMENT = 3
806

Guido Trotter's avatar
Guido Trotter committed
807
808
809
# 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
810
CONFD_MAX_CLOCK_SKEW = 2 * NODE_MAX_CLOCK_SKEW
811
812
813
814
815
816
817
818
819

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

821
822
823
824
825
826
# 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
827
828
829
830
831
832
833
834
835
836
# 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

837
838
839
840
841
842
# 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
843
844
845
846

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