constants.py 41.2 KB
Newer Older
Iustin Pop's avatar
Iustin Pop committed
1
#
Iustin Pop's avatar
Iustin Pop committed
2
3
#

4
# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Google Inc.
Iustin Pop's avatar
Iustin Pop committed
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#
# 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
from ganeti import _vcsversion
28

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

39

40
41
42
43
44
45
46
47
# 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.
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
80
81

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


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

87
88
89
#: RPC protocol version
PROTOCOL_VERSION = BuildVersion(CONFIG_MAJOR, CONFIG_MINOR, 0)

90
91
# user separation
DAEMONS_GROUP = _autoconf.DAEMONS_GROUP
92
ADMIN_GROUP = _autoconf.ADMIN_GROUP
93
MASTERD_USER = _autoconf.MASTERD_USER
94
MASTERD_GROUP = _autoconf.MASTERD_GROUP
95
RAPI_USER = _autoconf.RAPI_USER
96
97
98
99
RAPI_GROUP = _autoconf.RAPI_GROUP
CONFD_USER = _autoconf.CONFD_USER
CONFD_GROUP = _autoconf.CONFD_GROUP
NODED_USER = _autoconf.NODED_USER
René Nussbaumer's avatar
René Nussbaumer committed
100
NODED_GROUP = _autoconf.NODED_GROUP
101

Tsachy Shacham's avatar
Tsachy Shacham committed
102
103
104
105
106
# cpu pinning separators and constants
CPU_PINNING_SEP = ":"
CPU_PINNING_ALL = "all"
# internal representation of "all"
CPU_PINNING_ALL_VAL = -1
107
108
# one "all" entry in a CPU list means CPU pinning is off
CPU_PINNING_OFF = [CPU_PINNING_ALL_VAL]
Tsachy Shacham's avatar
Tsachy Shacham committed
109
110
111
112
113
114
115
116
117

# A Xen-specific implementation detail - there is no way to actually say
# "use any cpu for pinning" in a Xen configuration file, as opposed to the
# command line, where you can say "xm vcpu-pin <domain> <vcpu> all".
# The workaround used in Xen is "0-63" (see source code function
# xm_vcpu_pin in <xen-source>/tools/python/xen/xm/main.py).
# To support future changes, the following constant is treated as a
# blackbox string that simply means use-any-cpu-for-pinning-under-xen.
CPU_PINNING_ALL_XEN = "0-63"
118

119
120
121
122
123
# A KVM-specific implementation detail - the following value is used
# to set CPU affinity to all processors (#0 through #31), per taskset
# man page.
CPU_PINNING_ALL_KVM = 0xFFFFFFFF

124
# Wipe
125
DD_CMD = "dd"
Michael Hanselmann's avatar
Michael Hanselmann committed
126
WIPE_BLOCK_SIZE = 1024 ** 2
127
128
129
MAX_WIPE_CHUNK = 1024 # 1GB
MIN_WIPE_CHUNK_PERCENT = 10

130

Iustin Pop's avatar
Iustin Pop committed
131
# file paths
132
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
133
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run"
134
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
135
BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache"
136
DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks"
137
RUN_DIRS_MODE = 0775
Guido Trotter's avatar
Guido Trotter committed
138
SOCKET_DIR = RUN_GANETI_DIR + "/socket"
139
SECURE_DIR_MODE = 0700
140
SECURE_FILE_MODE = 0600
141
SOCKET_DIR_MODE = 0750
142
CRYPTO_KEYS_DIR = RUN_GANETI_DIR + "/crypto"
Guido Trotter's avatar
Guido Trotter committed
143
CRYPTO_KEYS_DIR_MODE = SECURE_DIR_MODE
144
145
IMPORT_EXPORT_DIR = RUN_GANETI_DIR + "/import-export"
IMPORT_EXPORT_DIR_MODE = 0755
146
ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/"
147
148
# 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)
Michael Hanselmann's avatar
Michael Hanselmann committed
149
150
151
152
153
SUB_RUN_DIRS = [
  RUN_GANETI_DIR,
  BDEV_CACHE_DIR,
  DISK_LINKS_DIR,
  ]
Iustin Pop's avatar
Iustin Pop committed
154
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
155
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
156
157
158
# 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
159
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
160
NODED_CERT_FILE = DATA_DIR + "/server.pem"
161
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
162
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
163
164
SPICE_CERT_FILE = DATA_DIR + "/spice.pem"
SPICE_CACERT_FILE = DATA_DIR + "/spice-ca.pem"
Michael Hanselmann's avatar
Michael Hanselmann committed
165
CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret"
166
INSTANCE_STATUS_FILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
167
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
168
RAPI_USERS_FILE = DATA_DIR + "/rapi/users"
169
QUEUE_DIR = DATA_DIR + "/queue"
170
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
171
SETUP_SSH = _autoconf.TOOLSDIR + "/setup-ssh"
172
KVM_IFUP = _autoconf.PKGLIBDIR + "/kvm-ifup"
173
KVM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/kvm-console-wrapper"
174
XM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/xm-console-wrapper"
175
ETC_HOSTS = "/etc/hosts"
176
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
177
DEFAULT_SHARED_FILE_STORAGE_DIR = _autoconf.SHARED_FILE_STORAGE_DIR
178
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
179
ENABLE_SHARED_FILE_STORAGE = _autoconf.ENABLE_SHARED_FILE_STORAGE
180
SYSCONFDIR = _autoconf.SYSCONFDIR
181
TOOLSDIR = _autoconf.TOOLSDIR
182
CONF_DIR = SYSCONFDIR + "/ganeti"
183

Michael Hanselmann's avatar
Michael Hanselmann committed
184
185
186
187
188
189
190
#: Lock file for watcher, locked in shared mode by watcher; lock in exclusive
# mode to block watcher (see L{cli._RunWhileClusterStoppedHelper.Call}
WATCHER_LOCK_FILE = LOCK_DIR + "/ganeti-watcher.lock"

#: Status file for per-group watcher, locked in exclusive mode by watcher
WATCHER_GROUP_STATE_FILE = DATA_DIR + "/watcher.%s.data"

191
192
193
194
#: File for per-group instance status, merged into L{INSTANCE_STATUS_FILE} by
#: per-group processes
WATCHER_GROUP_INSTANCE_STATUS_FILE = DATA_DIR + "/watcher.%s.instance-status"

Michael Hanselmann's avatar
Michael Hanselmann committed
195
196
197
#: File containing Unix timestamp until which watcher should be paused
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"

198
199
200
201
202
203
ALL_CERT_FILES = frozenset([
  NODED_CERT_FILE,
  RAPI_CERT_FILE,
  SPICE_CERT_FILE,
  SPICE_CACERT_FILE,
  ])
204

205
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
206

207
NODED = "ganeti-noded"
Guido Trotter's avatar
Guido Trotter committed
208
CONFD = "ganeti-confd"
Guido Trotter's avatar
Guido Trotter committed
209
RAPI = "ganeti-rapi"
210
MASTERD = "ganeti-masterd"
Guido Trotter's avatar
Guido Trotter committed
211
212
# used in the ganeti-nbma project
NLD = "ganeti-nld"
213
214
215
216

DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
217
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
218
  RAPI: ("tcp", 5080),
219
  "ssh": ("tcp", 22),
Guido Trotter's avatar
Guido Trotter committed
220
221
  # used in the ganeti-nbma project
  NLD: ("udp", 1816),
222
223
}
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
224
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
225
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
Guido Trotter's avatar
Guido Trotter committed
226
227
# used in the ganeti-nbma project
DEFAULT_NLD_PORT = DAEMONS_PORTS[NLD][1]
228

Iustin Pop's avatar
Iustin Pop committed
229
230
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
231
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
232

233
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
234
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
235
236
237
238
239
  # "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
240
241
  # used in the ganeti-nbma project
  NLD: LOG_DIR + "nl-daemon.log",
Michael Hanselmann's avatar
Michael Hanselmann committed
242
  }
Michael Hanselmann's avatar
Michael Hanselmann committed
243

244
245
246
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
247
LOG_BURNIN = LOG_DIR + "burnin.log"
248
LOG_SETUP_SSH = LOG_DIR + "setup-ssh.log"
Iustin Pop's avatar
Iustin Pop committed
249

Luca Bigliardi's avatar
Luca Bigliardi committed
250
251
DEV_CONSOLE = "/dev/console"

Balazs Lecz's avatar
Balazs Lecz committed
252
253
PROC_MOUNTS = "/proc/mounts"

254
# Local UniX Interface related constants
255
LUXI_EOM = "\3"
256
LUXI_VERSION = CONFIG_VERSION
257

Iustin Pop's avatar
Iustin Pop committed
258
# one of "no", "yes", "only"
259
260
261
262
263
264
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

265
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
266
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
267
268
269

EXPORT_CONF_FILE = "config.ini"

270
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
271
272
273
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

274
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
275
SOCAT_PATH = _autoconf.SOCAT_PATH
276
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
277
SOCAT_USE_COMPRESS = _autoconf.SOCAT_USE_COMPRESS
278
SOCAT_ESCAPE_CODE = "0x1d"
279

280
281
282
283
284
285
#: Console as SSH command
CONS_SSH = "ssh"

#: Console as VNC server
CONS_VNC = "vnc"

286
287
288
#: Console as SPICE server
CONS_SPICE = "spice"

289
290
291
292
#: Display a message for console access
CONS_MESSAGE = "msg"

#: All console types
293
CONS_ALL = frozenset([CONS_SSH, CONS_VNC, CONS_SPICE, CONS_MESSAGE])
294

295
296
297
298
299
# For RSA keys more bits are better, but they also make operations more
# expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year
# 2010 on.
RSA_KEY_BITS = 2048

300
301
302
# Ciphers allowed for SSL connections. For the format, see ciphers(1). A better
# way to disable ciphers would be to use the exclamation mark (!), but socat
# versions below 1.5 can't parse exclamation marks in options properly. When
303
# modifying the ciphers, ensure not to accidentially add something after it's
304
305
306
307
# been removed. Use the "openssl" utility to check the allowed ciphers, e.g.
# "openssl ciphers -v HIGH:-DES".
OPENSSL_CIPHERS = "HIGH:-DES:-3DES:-EXPORT:-ADH"

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

311
312
313
314
315
316
# Default validity of certificates in days
X509_CERT_DEFAULT_VALIDITY = 365 * 5

# commonName (CN) used in certificates
X509_CERT_CN = "ganeti.example.com"

317
318
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

319
320
321
322
323
324
IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"

# Import/export daemon mode
IEM_IMPORT = "import"
IEM_EXPORT = "export"

325
326
327
328
329
330
331
332
# Import/export transport compression
IEC_NONE = "none"
IEC_GZIP = "gzip"
IEC_ALL = frozenset([
  IEC_NONE,
  IEC_GZIP,
  ])

333
334
IE_CUSTOM_SIZE = "fd"

335
336
IE_MAGIC_RE = re.compile(r"^[-_.a-zA-Z0-9]{5,100}$")

337
338
339
340
341
342
343
344
# Import/export I/O
# Direct file I/O, equivalent to a shell's I/O redirection using '<' or '>'
IEIO_FILE = "file"
# Raw block device I/O using "dd"
IEIO_RAW_DISK = "raw"
# OS definition import/export script
IEIO_SCRIPT = "script"

345
VALUE_DEFAULT = "default"
346
347
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
348
VALUE_NONE = "none"
349
350
VALUE_TRUE = "true"
VALUE_FALSE = "false"
351

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

Iustin Pop's avatar
Iustin Pop committed
355
# hooks-related constants
356
HOOKS_BASE_DIR = CONF_DIR + "/hooks"
Iustin Pop's avatar
Iustin Pop committed
357
358
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
359
HOOKS_NAME_CFGUPDATE = "config-update"
Guido Trotter's avatar
Guido Trotter committed
360
HOOKS_NAME_WATCHER = "watcher"
361
HOOKS_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
362
363
364
365

# hooks subject type (what object type does the LU deal with)
HTYPE_CLUSTER = "CLUSTER"
HTYPE_NODE = "NODE"
366
HTYPE_GROUP = "GROUP"
Iustin Pop's avatar
Iustin Pop committed
367
368
369
370
371
372
HTYPE_INSTANCE = "INSTANCE"

HKR_SKIP = 0
HKR_FAIL = 1
HKR_SUCCESS = 2

373
374
375
376
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
377
378

# Storage fields
379
380
381
382
# 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
383
384
385
386
387
388
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

389
390
391
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

392
# Available fields per storage type
Stephen Shirley's avatar
Stephen Shirley committed
393
394
395
396
397
398
399
400
VALID_STORAGE_FIELDS = frozenset([
  SF_NAME,
  SF_TYPE,
  SF_SIZE,
  SF_USED,
  SF_FREE,
  SF_ALLOCATABLE
  ])
401
402

VALID_STORAGE_TYPES = frozenset([ST_FILE, ST_LVM_PV, ST_LVM_VG])
Iustin Pop's avatar
Iustin Pop committed
403

404
405
406
407
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

408
VALID_STORAGE_OPERATIONS = {
409
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
410
411
  }

412
413
414
415
416
417
# 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
418
419
420
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
421
DT_DRBD8 = "drbd"
422
DT_FILE = "file"
423
DT_SHARED_FILE = "sharedfile"
424
DT_BLOCK = "blockdev"
425
426

# the set of network-mirrored disk templates
427
DTS_INT_MIRROR = frozenset([DT_DRBD8])
Iustin Pop's avatar
Iustin Pop committed
428

429
430
# the set of externally-mirrored disk templates (e.g. SAN, NAS)
DTS_EXT_MIRROR = frozenset([DT_SHARED_FILE, DT_BLOCK])
431

432
# the set of non-lvm-based disk templates
433
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE, DT_SHARED_FILE, DT_BLOCK])
434

435
# the set of disk templates which can be grown
436
DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE, DT_SHARED_FILE])
437

438
# the set of disk templates that allow adoption
439
440
441
442
DTS_MAY_ADOPT = frozenset([DT_PLAIN, DT_BLOCK])

# the set of disk templates that *must* use adoption
DTS_MUST_ADOPT = frozenset([DT_BLOCK])
443

444
# the set of disk templates that allow migrations
445
DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR)
446

Guido Trotter's avatar
Guido Trotter committed
447
448
# the set of file based disk templates
DTS_FILEBASED = frozenset([DT_FILE, DT_SHARED_FILE])
449

450
451
# logical disk types
LD_LV = "lvm"
452
LD_DRBD8 = "drbd8"
453
LD_FILE = "file"
454
455
LD_BLOCKDEV = "blockdev"
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8, LD_BLOCKDEV])
456

Iustin Pop's avatar
Iustin Pop committed
457
458
# drbd constants
DRBD_HMAC_ALG = "md5"
459
DRBD_NET_PROTOCOL = "C"
460
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
461

462
463
464
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
465
466

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

469
# disk access mode
470
471
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
472
473
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

474
# disk replacement mode
475
476
477
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
478
REPLACE_DISK_AUTO = "replace_auto"
479
480
481
482
483
484
REPLACE_MODES = frozenset([
  REPLACE_DISK_PRI,
  REPLACE_DISK_SEC,
  REPLACE_DISK_CHG,
  REPLACE_DISK_AUTO,
  ])
485

486
487
488
489
490
491
492
493
# Instance export mode
EXPORT_MODE_LOCAL = "local"
EXPORT_MODE_REMOTE = "remote"
EXPORT_MODES = frozenset([
  EXPORT_MODE_LOCAL,
  EXPORT_MODE_REMOTE,
  ])

494
# Lock recalculate mode
Iustin Pop's avatar
Iustin Pop committed
495
496
LOCKS_REPLACE = "replace"
LOCKS_APPEND = "append"
497

498
499
500
501
502
503
504
505
# Lock timeout (sum) before we should go into blocking acquire (still
# can be reset by priority change); computed as max time (10 hours)
# before we should actually go into blocking acquire given that we
# start from default priority level; in seconds
LOCK_ATTEMPTS_TIMEOUT = 10 * 3600 / 20.0
LOCK_ATTEMPTS_MAXWAIT = 15.0
LOCK_ATTEMPTS_MINWAIT = 1.0

506
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
507
508
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"
509
510
511
512
513
514
INSTANCE_REMOTE_IMPORT = "remote-import"
INSTANCE_CREATE_MODES = frozenset([
  INSTANCE_CREATE,
  INSTANCE_IMPORT,
  INSTANCE_REMOTE_IMPORT,
  ])
Iustin Pop's avatar
Iustin Pop committed
515

516
517
518
519
520
521
522
# Remote import/export handshake message and version
RIE_VERSION = 0
RIE_HANDSHAKE = "Hi, I'm Ganeti"

# Remote import/export certificate validity in seconds
RIE_CERT_VALIDITY = 24 * 60 * 60

523
# Overall timeout for establishing connection
524
RIE_CONNECT_TIMEOUT = 180
525

526
527
528
529
530
531
# Export only: how long to wait per connection attempt (seconds)
RIE_CONNECT_ATTEMPT_TIMEOUT = 20

# Export only: number of attempts to connect
RIE_CONNECT_RETRIES = 10

René Nussbaumer's avatar
René Nussbaumer committed
532
533
#: Give child process up to 5 seconds to exit after sending a signal
CHILD_LINGER_TIMEOUT = 5.0
534

Stephen Shirley's avatar
Stephen Shirley committed
535
536
537
538
539
540
541
542
DISK_TEMPLATES = frozenset([
  DT_DISKLESS,
  DT_PLAIN,
  DT_DRBD8,
  DT_FILE,
  DT_SHARED_FILE,
  DT_BLOCK
  ])
543
544

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
545
546
547
548

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
549
550
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
551
INISECT_OSP = "os"
552

553
# dynamic device modification
554
555
556
DDM_ADD = "add"
DDM_REMOVE = "remove"
DDMS_VALUES = frozenset([DDM_ADD, DDM_REMOVE])
557

558
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
559
EXIT_SUCCESS = 0
560
EXIT_FAILURE = 1
561
EXIT_NOTCLUSTER = 5
562
EXIT_NOTMASTER = 11
563
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
564
EXIT_CONFIRMATION = 13 # need user confirmation
565

566
567
568
#: Exit code for query operations with unknown fields
EXIT_UNKNOWN_FIELD = 14

569
570
# tags
TAG_CLUSTER = "cluster"
571
TAG_NODEGROUP = "nodegroup"
572
573
TAG_NODE = "node"
TAG_INSTANCE = "instance"
574
575
VALID_TAG_TYPES = frozenset([
  TAG_CLUSTER,
576
  TAG_NODEGROUP,
577
578
579
  TAG_NODE,
  TAG_INSTANCE,
  ])
580
581
582
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

583
584
# others
DEFAULT_BRIDGE = "xen-br0"
Iustin Pop's avatar
Iustin Pop committed
585
SYNC_SPEED = 60 * 1024
586
587
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
IP4_ADDRESS_ANY = "0.0.0.0"
Manuel Franceschini's avatar
Manuel Franceschini committed
588
589
IP6_ADDRESS_LOCALHOST = "::1"
IP6_ADDRESS_ANY = "::"
590
591
IP4_VERSION = 4
IP6_VERSION = 6
592
VALID_IP_VERSIONS = frozenset([IP4_VERSION, IP6_VERSION])
593
TCP_PING_TIMEOUT = 10
594
GANETI_RUNAS = "root"
595
DEFAULT_VG = "xenvg"
596
DEFAULT_DRBD_HELPER = "/bin/true"
597
MIN_VG_SIZE = 20480
598
DEFAULT_MAC_PREFIX = "aa:00:00"
599
LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT
600
601
# default maximum instance wait time, in seconds.
DEFAULT_SHUTDOWN_TIMEOUT = 120
602
NODE_MAX_CLOCK_SKEW = 150
603
# Time for an intra-cluster disk transfer to wait for a connection
604
DISK_TRANSFER_CONNECT_TIMEOUT = 60
605
606
# Disk index separator
DISK_SEPARATOR = _autoconf.DISK_SEPARATOR
607
IP_COMMAND_PATH = _autoconf.IP_PATH
608

609
610
611
#: Key for job IDs in opcode result
JOB_IDS_KEY = "jobs"

612
613
614
615
616
617
618
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

619
620
621
622
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

623
# os related constants
Iustin Pop's avatar
Iustin Pop committed
624
625
626
627
628
OS_SCRIPT_CREATE = "create"
OS_SCRIPT_IMPORT = "import"
OS_SCRIPT_EXPORT = "export"
OS_SCRIPT_RENAME = "rename"
OS_SCRIPT_VERIFY = "verify"
Stephen Shirley's avatar
Stephen Shirley committed
629
630
631
632
633
634
635
OS_SCRIPTS = frozenset([
  OS_SCRIPT_CREATE,
  OS_SCRIPT_IMPORT,
  OS_SCRIPT_EXPORT,
  OS_SCRIPT_RENAME,
  OS_SCRIPT_VERIFY
  ])
636

Iustin Pop's avatar
Iustin Pop committed
637
638
639
OS_API_FILE = "ganeti_api_version"
OS_VARIANTS_FILE = "variants.list"
OS_PARAMETERS_FILE = "parameters.list"
640

Iustin Pop's avatar
Iustin Pop committed
641
OS_VALIDATE_PARAMETERS = "parameters"
642
OS_VALIDATE_CALLS = frozenset([OS_VALIDATE_PARAMETERS])
643

644
# ssh constants
645
646
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
647
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
648
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
649
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
650
651
SSH = "ssh"
SCP = "scp"
652
653
654
655
656

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

658
659
660
661
662
663
664
665
666
667
668
669
670
671
REBOOT_TYPES = frozenset([
  INSTANCE_REBOOT_SOFT,
  INSTANCE_REBOOT_HARD,
  INSTANCE_REBOOT_FULL
  ])

# instance reboot behaviors
INSTANCE_REBOOT_ALLOWED = "reboot"
INSTANCE_REBOOT_EXIT = "exit"

REBOOT_BEHAVIORS = frozenset([
  INSTANCE_REBOOT_ALLOWED,
  INSTANCE_REBOOT_EXIT
  ])
672

Iustin Pop's avatar
Iustin Pop committed
673
VTYPE_STRING = "string"
674
VTYPE_MAYBE_STRING = "maybe-string"
Iustin Pop's avatar
Iustin Pop committed
675
676
677
VTYPE_BOOL = "bool"
VTYPE_SIZE = "size" # size, in MiBs
VTYPE_INT = "int"
678
ENFORCEABLE_TYPES = frozenset([
Stephen Shirley's avatar
Stephen Shirley committed
679
680
681
682
683
684
  VTYPE_STRING,
  VTYPE_MAYBE_STRING,
  VTYPE_BOOL,
  VTYPE_SIZE,
  VTYPE_INT,
  ])
685

686
687
688
# Constant representing that the user does not specify any IP version
IFACE_NO_IP_VERSION_SPECIFIED = 0

689
690
691
# HV parameter names (global namespace)
HV_BOOT_ORDER = "boot_order"
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
692
693
HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
694
695
HV_NIC_TYPE = "nic_type"
HV_DISK_TYPE = "disk_type"
696
HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
697
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
698
HV_VNC_PASSWORD_FILE = "vnc_password_file"
699
700
701
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
702
703
HV_KVM_SPICE_BIND = "spice_bind"
HV_KVM_SPICE_IP_VERSION = "spice_ip_version"
704
HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file"
705
706
707
708
709
HV_KVM_SPICE_LOSSLESS_IMG_COMPR = "spice_image_compression"
HV_KVM_SPICE_JPEG_IMG_COMPR = "spice_jpeg_wan_compression"
HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR = "spice_zlib_glz_wan_compression"
HV_KVM_SPICE_STREAMING_VIDEO_DETECTION = "spice_streaming_video"
HV_KVM_SPICE_AUDIO_COMPR = "spice_playback_compression"
710
HV_KVM_SPICE_USE_TLS = "spice_use_tls"
711
712
HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers"
HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent"
713
714
HV_ACPI = "acpi"
HV_PAE = "pae"
715
716
717
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
718
HV_KERNEL_ARGS = "kernel_args"
719
720
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
721
HV_ROOT_PATH = "root_path"
722
HV_SERIAL_CONSOLE = "serial_console"
723
HV_USB_MOUSE = "usb_mouse"
724
HV_KEYMAP = "keymap"
725
HV_DEVICE_MODEL = "device_model"
726
HV_INIT_SCRIPT = "init_script"
727
HV_MIGRATION_PORT = "migration_port"
728
729
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
HV_MIGRATION_DOWNTIME = "migration_downtime"
730
HV_MIGRATION_MODE = "migration_mode"
731
HV_USE_LOCALTIME = "use_localtime"
732
HV_DISK_CACHE = "disk_cache"
733
734
HV_SECURITY_MODEL = "security_model"
HV_SECURITY_DOMAIN = "security_domain"
Guido Trotter's avatar
Guido Trotter committed
735
HV_KVM_FLAG = "kvm_flag"
736
HV_VHOST_NET = "vhost_net"
Balazs Lecz's avatar
Balazs Lecz committed
737
HV_KVM_USE_CHROOT = "use_chroot"
738
HV_CPU_MASK = "cpu_mask"
739
HV_MEM_PATH = "mem_path"
740
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
741
HV_REBOOT_BEHAVIOR = "reboot_behavior"
742

743
744
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
745
  HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
746
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
747
  HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
748
749
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
750
  HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
751
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
752
753
754
755
  HV_VNC_BIND_ADDRESS: VTYPE_STRING,
  HV_VNC_TLS: VTYPE_BOOL,
  HV_VNC_X509: VTYPE_STRING,
  HV_VNC_X509_VERIFY: VTYPE_BOOL,
756
757
  HV_KVM_SPICE_BIND: VTYPE_STRING,
  HV_KVM_SPICE_IP_VERSION: VTYPE_INT,
758
  HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING,
759
760
761
762
763
  HV_KVM_SPICE_LOSSLESS_IMG_COMPR: VTYPE_STRING,
  HV_KVM_SPICE_JPEG_IMG_COMPR: VTYPE_STRING,
  HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR: VTYPE_STRING,
  HV_KVM_SPICE_STREAMING_VIDEO_DETECTION: VTYPE_STRING,
  HV_KVM_SPICE_AUDIO_COMPR: VTYPE_BOOL,
764
  HV_KVM_SPICE_USE_TLS: VTYPE_BOOL,
765
766
  HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING,
  HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL,
767
768
  HV_ACPI: VTYPE_BOOL,
  HV_PAE: VTYPE_BOOL,
769
770
771
  HV_USE_BOOTLOADER: VTYPE_BOOL,
  HV_BOOTLOADER_PATH: VTYPE_STRING,
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
772
  HV_KERNEL_PATH: VTYPE_STRING,
773
  HV_KERNEL_ARGS: VTYPE_STRING,
774
  HV_INITRD_PATH: VTYPE_STRING,
775
  HV_ROOT_PATH: VTYPE_MAYBE_STRING,
776
777
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
778
  HV_KEYMAP: VTYPE_STRING,
779
  HV_DEVICE_MODEL: VTYPE_STRING,
780
  HV_INIT_SCRIPT: VTYPE_STRING,
781
  HV_MIGRATION_PORT: VTYPE_INT,
782
783
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
784
  HV_MIGRATION_MODE: VTYPE_STRING,
785
  HV_USE_LOCALTIME: VTYPE_BOOL,
786
  HV_DISK_CACHE: VTYPE_STRING,
787
788
  HV_SECURITY_MODEL: VTYPE_STRING,
  HV_SECURITY_DOMAIN: VTYPE_STRING,
Guido Trotter's avatar
Guido Trotter committed
789
  HV_KVM_FLAG: VTYPE_STRING,
790
  HV_VHOST_NET: VTYPE_BOOL,
Balazs Lecz's avatar
Balazs Lecz committed
791
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
792
  HV_CPU_MASK: VTYPE_STRING,
793
  HV_MEM_PATH: VTYPE_STRING,
794
  HV_BLOCKDEV_PREFIX: VTYPE_STRING,
795
  HV_REBOOT_BEHAVIOR: VTYPE_STRING,
796
797
798
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
799

800
# Backend parameter names
Iustin Pop's avatar
Iustin Pop committed
801
BE_MEMORY = "memory"
802
BE_VCPUS = "vcpus"
803
BE_AUTO_BALANCE = "auto_balance"
804

805
806
807
808
809
810
811
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
812

813
814
815
816
817
818
819
820
821
# Node parameter names
ND_OOB_PROGRAM = "oob_program"

NDS_PARAMETER_TYPES = {
    ND_OOB_PROGRAM: VTYPE_MAYBE_STRING,
    }

NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())

822
823
824
825
826
827
828
# OOB supported commands
OOB_POWER_ON = "power-on"
OOB_POWER_OFF = "power-off"
OOB_POWER_CYCLE = "power-cycle"
OOB_POWER_STATUS = "power-status"
OOB_HEALTH = "health"

Stephen Shirley's avatar
Stephen Shirley committed
829
830
831
832
833
834
835
OOB_COMMANDS = frozenset([
  OOB_POWER_ON,
  OOB_POWER_OFF,
  OOB_POWER_CYCLE,
  OOB_POWER_STATUS,
  OOB_HEALTH
  ])
836

837
838
OOB_POWER_STATUS_POWERED = "powered"

839
OOB_TIMEOUT = 60 # 60 seconds
840
OOB_POWER_DELAY = 2.0 # 2 seconds
841
842
843
844
845
846
847
848
849
850
851
852
853

OOB_STATUS_OK = "OK"
OOB_STATUS_WARNING = "WARNING"
OOB_STATUS_CRITICAL = "CRITICAL"
OOB_STATUS_UNKNOWN = "UNKNOWN"

OOB_STATUSES = frozenset([
  OOB_STATUS_OK,
  OOB_STATUS_WARNING,
  OOB_STATUS_CRITICAL,
  OOB_STATUS_UNKNOWN,
  ])

854
855
# Instance Parameters Profile
PP_DEFAULT = "default"
856

857
# NIC_* constants are used inside the ganeti config
Guido Trotter's avatar
Guido Trotter committed
858
859
860
861
862
863
864
865
866
867
868
869
870
871
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())
872

873
# IDISK_* constants are used in opcodes, to create/change disks
874
875
IDISK_SIZE = "size"
IDISK_MODE = "mode"
876
IDISK_ADOPT = "adopt"
877
IDISK_VG = "vg"
878
IDISK_METAVG = "metavg"
879
880
881
882
IDISK_PARAMS_TYPES = {
  IDISK_SIZE: VTYPE_SIZE,
  IDISK_MODE: VTYPE_STRING,
  IDISK_ADOPT: VTYPE_STRING,
883
  IDISK_VG: VTYPE_STRING,
884
  IDISK_METAVG: VTYPE_STRING,
885
  }
886
887
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())

888
# INIC_* constants are used in opcodes, to create/change nics
889
890
891
892
INIC_MAC = "mac"
INIC_IP = "ip"
INIC_MODE = "mode"
INIC_LINK = "link"
893
894
895
896
897
898
899
INIC_PARAMS_TYPES = {
  INIC_IP: VTYPE_MAYBE_STRING,
  INIC_LINK: VTYPE_STRING,
  INIC_MAC: VTYPE_STRING,
  INIC_MODE: VTYPE_STRING,
  }
INIC_PARAMS = frozenset(INIC_PARAMS_TYPES.keys())
900

901
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
902
HT_XEN_PVM = "xen-pvm"
903
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
904
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
905
HT_KVM = "kvm"
906
HT_CHROOT = "chroot"
Iustin Pop's avatar
Iustin Pop committed
907
908
909
910
911
912
913
914
915
HT_LXC = "lxc"
HYPER_TYPES = frozenset([
  HT_XEN_PVM,
  HT_FAKE,
  HT_XEN_HVM,
  HT_KVM,
  HT_CHROOT,
  HT_LXC,
  ])
Guido Trotter's avatar
Guido Trotter committed
916
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
917

918
VNC_BASE_PORT = 5900
919
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
Manuel Franceschini's avatar
Manuel Franceschini committed
920
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
921

922
# NIC types
923
924
925
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
926
927
928
929
930
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
931
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
932

Stephen Shirley's avatar
Stephen Shirley committed
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
HT_HVM_VALID_NIC_TYPES = frozenset([
  HT_NIC_RTL8139,
  HT_NIC_NE2K_PCI,
  HT_NIC_E1000,
  HT_NIC_NE2K_ISA,
  HT_NIC_PARAVIRTUAL
  ])
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
  ])

952
953
954
955
956
957
958
959
# 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"

960
961
962
963
HT_CACHE_DEFAULT = "default"
HT_CACHE_NONE = "none"
HT_CACHE_WTHROUGH = "writethrough"
HT_CACHE_WBACK = "writeback"
Stephen Shirley's avatar
Stephen Shirley committed
964
965
966
967
968
969
HT_VALID_CACHE_TYPES = frozenset([
  HT_CACHE_DEFAULT,
  HT_CACHE_NONE,
  HT_CACHE_WTHROUGH,
  HT_CACHE_WBACK
  ])
970

971
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
Stephen Shirley's avatar
Stephen Shirley committed
972
973
974
975
976
977
978
979
HT_KVM_VALID_DISK_TYPES = frozenset([
  HT_DISK_PARAVIRTUAL,
  HT_DISK_IDE,
  HT_DISK_SCSI,
  HT_DISK_SD,
  HT_DISK_MTD,
  HT_DISK_PFLASH
  ])
980

981
982
983
984
985
986
987
# Mouse types:
HT_MOUSE_MOUSE = "mouse"
HT_MOUSE_TABLET = "tablet"

HT_KVM_VALID_MOUSE_TYPES = frozenset([HT_MOUSE_MOUSE, HT_MOUSE_TABLET])

# Boot order
988
HT_BO_FLOPPY = "floppy"
989
990
991
992
HT_BO_CDROM = "cdrom"
HT_BO_DISK = "disk"
HT_BO_NETWORK = "network"

Stephen Shirley's avatar
Stephen Shirley committed
993
994
995
996
997
998
HT_KVM_VALID_BO_TYPES = frozenset([
  HT_BO_FLOPPY,
  HT_BO_CDROM,
  HT_BO_DISK,
  HT_BO_NETWORK
  ])
999