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
# luxi related constants
LUXI_EOM = "\3"

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

185
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
186
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
187
188
189

EXPORT_CONF_FILE = "config.ini"

190
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
191
192
193
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

194
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
195
SOCAT_PATH = _autoconf.SOCAT_PATH
196
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
197
SOCAT_ESCAPE_CODE = "0x1d"
198

199
VALUE_DEFAULT = "default"
200
201
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
202
VALUE_NONE = "none"
203
204
VALUE_TRUE = "true"
VALUE_FALSE = "false"
205

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

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

# 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

226
227
228
229
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
230
231

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

242
243
244
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

245
# Available fields per storage type
246
247
248
249
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
250

251
252
253
254
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

255
VALID_STORAGE_OPERATIONS = {
256
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
257
258
  }

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

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

274
275
276
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

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

280
281
# logical disk types
LD_LV = "lvm"
282
LD_DRBD8 = "drbd8"
283
LD_FILE = "file"
284
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
285

Iustin Pop's avatar
Iustin Pop committed
286
287
# drbd constants
DRBD_HMAC_ALG = "md5"
288
DRBD_NET_PROTOCOL = "C"
289
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
290

291
292
293
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
294
295

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

298
# disk access mode
299
300
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
301
302
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

303
# disk replacement mode
304
305
306
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
307
REPLACE_DISK_AUTO = "replace_auto"
308

309
310
# lock recalculate mode
LOCKS_REPLACE = 'replace'
311
LOCKS_APPEND = 'append'
312

313
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
314
315
316
317
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
318
319
320
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
321
322
323
324

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
325
326
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
327

328
329
330
331
# dynamic device modification
DDM_ADD = 'add'
DDM_REMOVE = 'remove'

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
477

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

483
484
485
486
487
488
489
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
490

491
492
# Instance Parameters Profile
PP_DEFAULT = "default"
493

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

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

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

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

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

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

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

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

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

HT_KVM_FLAG_VALUES = frozenset([HT_KVM_ENABLED, HT_KVM_DISABLED])

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

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

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

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

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

633
634
JOB_ID_TEMPLATE = r"\d+"

635
636
637
# unchanged job return
JOB_NOTCHANGED = "nochange"

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

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

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

665
# max dynamic devices
666
667
668
MAX_NICS = 8
MAX_DISKS = 16

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

689
690
691
692
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

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

749
750
751
752
HVC_GLOBALS = frozenset([
  HV_MIGRATION_PORT,
  ])

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

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

764
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
765
766
767

CONFD_PROTOCOL_VERSION = 1

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

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

CONFD_REQFIELD_NAME = "0"
CONFD_REQFIELD_IP = "1"
786
CONFD_REQFIELD_MNODE_PIP = "2"
787

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

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

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

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

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

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

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

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

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