constants.py 17.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
from ganeti import _autoconf
25

Iustin Pop's avatar
Iustin Pop committed
26
# various versions
27
PROTOCOL_VERSION = 20
28
RELEASE_VERSION = _autoconf.PACKAGE_VERSION
Guido Trotter's avatar
Guido Trotter committed
29
30
31
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
32
EXPORT_VERSION = 0
33
RAPI_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
34

35

36
37
38
39
40
41
42
43
# 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.
44
45
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

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


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

# file paths
84
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
85
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run"
86
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
87
BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache"
88
DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks"
89
RUN_DIRS_MODE = 0755
Guido Trotter's avatar
Guido Trotter committed
90
SOCKET_DIR = RUN_GANETI_DIR + "/socket"
Guido Trotter's avatar
Guido Trotter committed
91
SOCKET_DIR_MODE = 0700
92
93
94
# 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
95
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
96
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
Iustin Pop's avatar
Iustin Pop committed
97
98
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
SSL_CERT_FILE = DATA_DIR + "/server.pem"
99
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
100
HMAC_CLUSTER_KEY = DATA_DIR + "/hmac.key"
101
WATCHER_STATEFILE = DATA_DIR + "/watcher.data"
102
INSTANCE_UPFILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
103
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
104
RAPI_USERS_FILE = DATA_DIR + "/rapi_users"
105
QUEUE_DIR = DATA_DIR + "/queue"
106
ETC_HOSTS = "/etc/hosts"
107
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
108
SYSCONFDIR = _autoconf.SYSCONFDIR
109
CONF_DIR = SYSCONFDIR + "/ganeti"
110

111
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
112

113
NODE_INITD_SCRIPT = SYSCONFDIR + "/init.d/ganeti"
114
115

NODED = "ganeti-noded"
Guido Trotter's avatar
Guido Trotter committed
116
CONFD = "ganeti-confd"
Guido Trotter's avatar
Guido Trotter committed
117
RAPI = "ganeti-rapi"
118
MASTERD = "ganeti-masterd"
119

120
121
MULTITHREADED_DAEMONS = frozenset([MASTERD])

122
123
124
125
126
127
DAEMONS_SSL = {
  # daemon-name: (default-cert-path, default-key-path)
  NODED: (SSL_CERT_FILE, SSL_CERT_FILE),
  RAPI: (RAPI_CERT_FILE, RAPI_CERT_FILE),
}

128
129
130
DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
131
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
132
  RAPI: ("tcp", 5080),
133
134
}
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
135
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
136
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
137

Iustin Pop's avatar
Iustin Pop committed
138
139
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
140
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
141

142
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
143
144
145
DAEMONS_LOGFILES = {
 # "daemon-name": "logfile"
 NODED: LOG_DIR + "node-daemon.log",
Guido Trotter's avatar
Guido Trotter committed
146
 CONFD: LOG_DIR + "conf-daemon.log",
147
148
149
 RAPI: LOG_DIR + "rapi-daemon.log",
 MASTERD: LOG_DIR + "master-daemon.log",
}
150
151
152
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
153
LOG_BURNIN = LOG_DIR + "burnin.log"
Iustin Pop's avatar
Iustin Pop committed
154

155
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
156
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
157
158
159

EXPORT_CONF_FILE = "config.ini"

160
161
162
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

163
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
164
SOCAT_PATH = _autoconf.SOCAT_PATH
Guido Trotter's avatar
Guido Trotter committed
165
KVM_MIGRATION_PORT = _autoconf.KVM_MIGRATION_PORT
166

167
VALUE_DEFAULT = "default"
168
169
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
170
VALUE_NONE = "none"
171
172
VALUE_TRUE = "true"
VALUE_FALSE = "false"
173

Iustin Pop's avatar
Iustin Pop committed
174
# hooks-related constants
175
HOOKS_BASE_DIR = CONF_DIR + "/hooks"
Iustin Pop's avatar
Iustin Pop committed
176
177
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
178
HOOKS_NAME_CFGUPDATE = "config-update"
179
HOOKS_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
180
181
182
183
184
185
186
187
188
189

# 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

190
191
192
193
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
194
195
196
197
198
199
200
201

# Storage fields
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

202
203
204
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

205
206
207
208
209
210
# Available fields per storage type
VALID_STORAGE_FIELDS = {
  ST_FILE: frozenset([SF_NAME, SF_USED, SF_FREE]),
  ST_LVM_PV: frozenset([SF_NAME, SF_SIZE, SF_USED, SF_FREE, SF_ALLOCATABLE]),
  ST_LVM_VG: frozenset([SF_NAME, SF_SIZE]),
  }
Iustin Pop's avatar
Iustin Pop committed
211

212
213
214
215
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

216
VALID_STORAGE_OPERATIONS = {
217
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
218
219
  }

220
221
222
223
224
225
# 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
226
227
228
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
229
DT_DRBD8 = "drbd"
230
DT_FILE = "file"
231
232

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

235
236
237
# the set of non-lvm-based disk templates
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE])

238
239
# logical disk types
LD_LV = "lvm"
240
LD_DRBD8 = "drbd8"
241
LD_FILE = "file"
242
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8])
243

Iustin Pop's avatar
Iustin Pop committed
244
245
# drbd constants
DRBD_HMAC_ALG = "md5"
246
DRBD_NET_PROTOCOL = "C"
Iustin Pop's avatar
Iustin Pop committed
247

248
249
250
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
251
252

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

255
# disk access mode
256
257
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
258
259
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

260
# disk replacement mode
261
262
263
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
264
REPLACE_DISK_AUTO = "replace_auto"
265

266
267
# lock recalculate mode
LOCKS_REPLACE = 'replace'
268
LOCKS_APPEND = 'append'
269

270
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
271
272
273
274
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"

DISK_TEMPLATES = frozenset([DT_DISKLESS, DT_PLAIN,
275
276
277
                            DT_DRBD8, DT_FILE])

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
278
279
280
281

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
282

283
284
285
286
287
# dynamic device modification

DDM_ADD = 'add'
DDM_REMOVE = 'remove'

288
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
289
EXIT_SUCCESS = 0
290
EXIT_FAILURE = 1
291
EXIT_NOTCLUSTER = 5
292
EXIT_NOTMASTER = 11
293
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
294
EXIT_CONFIRMATION = 13 # need user confirmation
Guido Trotter's avatar
Guido Trotter committed
295
EXIT_NOTCANDIDATE = 14
296

297
298
299
300
301
302
303
# tags
TAG_CLUSTER = "cluster"
TAG_NODE = "node"
TAG_INSTANCE = "instance"
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

304
305
# others
DEFAULT_BRIDGE = "xen-br0"
Iustin Pop's avatar
Iustin Pop committed
306
SYNC_SPEED = 60 * 1024
Iustin Pop's avatar
Iustin Pop committed
307
LOCALHOST_IP_ADDRESS = "127.0.0.1"
308
TCP_PING_TIMEOUT = 10
309
GANETI_RUNAS = "root"
310
DEFAULT_VG = "xenvg"
311
BIND_ADDRESS_GLOBAL = "0.0.0.0"
312
MIN_VG_SIZE = 20480
313
DEFAULT_MAC_PREFIX = "aa:00:00"
314
LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT
315

316
317
318
319
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

320
321
322
323
324
# 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
325
OS_SCRIPTS = frozenset([OS_SCRIPT_CREATE, OS_SCRIPT_IMPORT,
326
                        OS_SCRIPT_EXPORT, OS_SCRIPT_RENAME])
327

328
# ssh constants
329
SSH_INITD_SCRIPT = _autoconf.SSH_INITD_SCRIPT
330
331
332
333
334
SSH_CONFIG_DIR = "/etc/ssh/"
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "ssh_host_dsa_key"
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "ssh_host_rsa_key"
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
335
336
SSH = "ssh"
SCP = "scp"
337
338
339
340
341

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

343
344
345
346
REBOOT_TYPES = frozenset([INSTANCE_REBOOT_SOFT,
                          INSTANCE_REBOOT_HARD,
                          INSTANCE_REBOOT_FULL])

347
348
349
350
351
352
353
354
355
356
357
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,
                      ])

358
359
360
361
362
363
# 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"
364
365
366
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
367
368
HV_ACPI = "acpi"
HV_PAE = "pae"
369
HV_KERNEL_ARGS = "kernel_args"
370
371
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
372
HV_ROOT_PATH = "root_path"
373
HV_SERIAL_CONSOLE = "serial_console"
374
HV_USB_MOUSE = "usb_mouse"
375
HV_DEVICE_MODEL = "device_model"
376
HV_INIT_SCRIPT = "init_script"
377

378
379
380
381
382
383
384
385
386
387
388
389
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
  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,
  HV_KERNEL_PATH: VTYPE_STRING,
390
  HV_KERNEL_ARGS: VTYPE_STRING,
391
392
393
394
  HV_INITRD_PATH: VTYPE_STRING,
  HV_ROOT_PATH: VTYPE_STRING,
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
395
  HV_DEVICE_MODEL: VTYPE_STRING,
396
  HV_INIT_SCRIPT: VTYPE_STRING,
397
398
399
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
400

401
# BE parameter names
Iustin Pop's avatar
Iustin Pop committed
402
BE_MEMORY = "memory"
403
BE_VCPUS = "vcpus"
404
BE_AUTO_BALANCE = "auto_balance"
405

406
407
408
409
410
411
412
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
413

414
415
# Instance Parameters Profile
PP_DEFAULT = "default"
416

Guido Trotter's avatar
Guido Trotter committed
417
418
419
420
421
422
423
424
425
426
427
428
429
430
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())
431

432
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
433
HT_XEN_PVM = "xen-pvm"
434
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
435
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
436
HT_KVM = "kvm"
437
438
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
439
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
440

441
VNC_BASE_PORT = 5900
442
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
443
VNC_DEFAULT_BIND_ADDRESS = '0.0.0.0'
444

445
# NIC types
446
447
448
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
449
450
451
452
453
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
454
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
455

456
457
HT_HVM_VALID_NIC_TYPES = frozenset([HT_NIC_RTL8139, HT_NIC_NE2K_PCI,
                                    HT_NIC_NE2K_ISA, HT_NIC_PARAVIRTUAL])
458
459
460
461
462
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])
463
464
465
466
467
468
469
470
471
# 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"

HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
472
473
474
HT_KVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IDE,
                                     HT_DISK_SCSI, HT_DISK_SD, HT_DISK_MTD,
                                     HT_DISK_PFLASH])
475

476
477
478
479
480
481
482
483
484
485
486
487
488
# 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])

489
490
491
492
# Cluster Verify steps
VERIFY_NPLUSONE_MEM = 'nplusone_mem'
VERIFY_OPTIONAL_CHECKS = frozenset([VERIFY_NPLUSONE_MEM])

493
494
495
496
497
498
499
500
501
502
# Node verify constants
NV_FILELIST = "filelist"
NV_HVINFO = "hvinfo"
NV_HYPERVISOR = "hypervisor"
NV_INSTANCELIST = "instancelist"
NV_LVLIST = "lvlist"
NV_NODELIST = "nodelist"
NV_NODENETTEST = "node-net-test"
NV_VERSION = "version"
NV_VGLIST = "vglist"
503
NV_DRBDLIST = "drbd-list"
504

505
# Allocator framework constants
506
IALLOCATOR_VERSION = 2
507
508
509
510
511
IALLOCATOR_DIR_IN = "in"
IALLOCATOR_DIR_OUT = "out"
IALLOCATOR_MODE_ALLOC = "allocate"
IALLOCATOR_MODE_RELOC = "relocate"
IALLOCATOR_SEARCH_PATH = _autoconf.IALLOCATOR_SEARCH_PATH
512

513
514
515
516
517
# 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"
518
JOB_QUEUE_ARCHIVE_DIR = QUEUE_DIR + "/archive"
519
JOB_QUEUE_DRAIN_FILE = QUEUE_DIR + "/drain"
Michael Hanselmann's avatar
Michael Hanselmann committed
520
521
JOB_QUEUE_SIZE_HARD_LIMIT = 5000
JOB_QUEUE_SIZE_SOFT_LIMIT = JOB_QUEUE_SIZE_HARD_LIMIT * 0.8
522

523
524
JOB_ID_TEMPLATE = r"\d+"

525
526
527
# unchanged job return
JOB_NOTCHANGED = "nochange"

528
529
# Job status
JOB_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
530
JOB_STATUS_WAITLOCK = "waiting"
531
JOB_STATUS_CANCELING = "canceling"
532
533
534
535
536
JOB_STATUS_RUNNING = "running"
JOB_STATUS_CANCELED = "canceled"
JOB_STATUS_SUCCESS = "success"
JOB_STATUS_ERROR = "error"

537
538
# OpCode status
# not yet finalized
539
OP_STATUS_QUEUED = "queued"
Iustin Pop's avatar
Iustin Pop committed
540
OP_STATUS_WAITLOCK = "waiting"
541
OP_STATUS_CANCELING = "canceling"
542
OP_STATUS_RUNNING = "running"
543
# finalized
544
OP_STATUS_CANCELED = "canceled"
545
546
OP_STATUS_SUCCESS = "success"
OP_STATUS_ERROR = "error"
547
548
549
OPS_FINALIZED = frozenset([OP_STATUS_CANCELED,
                           OP_STATUS_SUCCESS,
                           OP_STATUS_ERROR])
550
551
552
553

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

555
# max dynamic devices
556
557
558
MAX_NICS = 8
MAX_DISKS = 16

Iustin Pop's avatar
Iustin Pop committed
559
560
# SSCONF keys
SS_CLUSTER_NAME = "cluster_name"
561
SS_CLUSTER_TAGS = "cluster_tags"
Iustin Pop's avatar
Iustin Pop committed
562
SS_FILE_STORAGE_DIR = "file_storage_dir"
563
SS_MASTER_CANDIDATES = "master_candidates"
564
SS_MASTER_CANDIDATES_IPS = "master_candidates_ips"
Iustin Pop's avatar
Iustin Pop committed
565
566
567
568
SS_MASTER_IP = "master_ip"
SS_MASTER_NETDEV = "master_netdev"
SS_MASTER_NODE = "master_node"
SS_NODE_LIST = "node_list"
569
570
SS_NODE_PRIMARY_IPS = "node_primary_ips"
SS_NODE_SECONDARY_IPS = "node_secondary_ips"
571
SS_OFFLINE_NODES = "offline_nodes"
572
573
SS_ONLINE_NODES = "online_nodes"
SS_INSTANCE_LIST = "instance_list"
574
SS_RELEASE_VERSION = "release_version"
Iustin Pop's avatar
Iustin Pop committed
575

576
577
578
579
# cluster wide default parameters
DEFAULT_ENABLED_HYPERVISOR = HT_XEN_PVM

HVC_DEFAULTS = {
580
581
  HT_XEN_PVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-xenU",
582
    HV_INITRD_PATH: '',
583
    HV_ROOT_PATH: '/dev/sda1',
584
    HV_KERNEL_ARGS: 'ro',
585
586
587
    },
  HT_XEN_HVM: {
    HV_BOOT_ORDER: "cd",
588
    HV_CDROM_IMAGE_PATH: '',
589
    HV_NIC_TYPE: HT_NIC_RTL8139,
590
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
591
592
593
    HV_VNC_BIND_ADDRESS: '0.0.0.0',
    HV_ACPI: True,
    HV_PAE: True,
594
    HV_KERNEL_PATH: "/usr/lib/xen/boot/hvmloader",
595
    HV_DEVICE_MODEL: "/usr/lib/xen/bin/qemu-dm",
596
597
598
    },
  HT_KVM: {
    HV_KERNEL_PATH: "/boot/vmlinuz-2.6-kvmU",
599
    HV_INITRD_PATH: '',
600
    HV_KERNEL_ARGS: 'ro',
601
    HV_ROOT_PATH: '/dev/vda1',
602
603
    HV_ACPI: True,
    HV_SERIAL_CONSOLE: True,
604
    HV_VNC_BIND_ADDRESS: '',
605
606
607
    HV_VNC_TLS: False,
    HV_VNC_X509: '',
    HV_VNC_X509_VERIFY: False,
608
    HV_CDROM_IMAGE_PATH: '',
609
    HV_BOOT_ORDER: HT_BO_DISK,
610
611
    HV_NIC_TYPE: HT_NIC_PARAVIRTUAL,
    HV_DISK_TYPE: HT_DISK_PARAVIRTUAL,
612
    HV_USB_MOUSE: '',
613
614
615
    },
  HT_FAKE: {
    },
616
617
618
  HT_CHROOT: {
    HV_INIT_SCRIPT: "/ganeti-chroot",
    },
619
  }
620
621

BEC_DEFAULTS = {
622
623
624
625
  BE_MEMORY: 128,
  BE_VCPUS: 1,
  BE_AUTO_BALANCE: True,
  }
626

Guido Trotter's avatar
Guido Trotter committed
627
628
629
630
631
NICC_DEFAULTS = {
  NIC_MODE: NIC_MODE_BRIDGED,
  NIC_LINK: DEFAULT_BRIDGE,
  }

632
MASTER_POOL_SIZE_DEFAULT = 10
Guido Trotter's avatar
Guido Trotter committed
633
634
635

CONFD_PROTOCOL_VERSION = 1

636
CONFD_REQ_PING = 0
Guido Trotter's avatar
Guido Trotter committed
637
638
639
640
CONFD_REQ_NODE_ROLE_BYNAME = 1
CONFD_REQ_NODE_PIP_BY_INSTANCE_IP = 2

CONFD_REQS = frozenset([
641
  CONFD_REQ_PING,
Guido Trotter's avatar
Guido Trotter committed
642
643
644
645
  CONFD_REQ_NODE_ROLE_BYNAME,
  CONFD_REQ_NODE_PIP_BY_INSTANCE_IP,
  ])

646
647
648
649
650
651
652
653
654
655
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
656
657
658
(CONFD_NODE_ROLE_MASTER,
 CONFD_NODE_ROLE_CANDIDATE,
 CONFD_NODE_ROLE_OFFLINE,
Guido Trotter's avatar
Guido Trotter committed
659
660
661
 CONFD_NODE_ROLE_DRAINED,
 CONFD_NODE_ROLE_REGULAR,
 ) = range(5)
Guido Trotter's avatar
Guido Trotter committed
662

663
664
# A few common errors for confd
CONFD_ERROR_UNKNOWN_ENTRY = 1
665
CONFD_ERROR_INTERNAL = 2
666

Guido Trotter's avatar
Guido Trotter committed
667
668
669
670
# 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
CONFD_MAX_CLOCK_SKEW = 300