constants.py 45.6 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
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD
273
XEN_CMD = "xm"
274

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

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

#: Console as VNC server
CONS_VNC = "vnc"

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

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

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

296
297
298
299
300
# 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

301
302
303
# 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
304
# modifying the ciphers, ensure not to accidentially add something after it's
305
306
307
308
# 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"

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

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

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

318
319
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

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

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

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

334
335
IE_CUSTOM_SIZE = "fd"

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

338
339
340
341
342
343
344
345
# 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"

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

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

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

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

HKR_SKIP = 0
HKR_FAIL = 1
HKR_SUCCESS = 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

499
500
501
502
503
504
505
506
# 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

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

517
518
519
520
521
522
523
# 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

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

527
528
529
530
531
532
# 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
533
534
#: Give child process up to 5 seconds to exit after sending a signal
CHILD_LINGER_TIMEOUT = 5.0
535

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

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

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

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

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

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

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

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

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

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

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

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

624
# os related constants
Iustin Pop's avatar
Iustin Pop committed
625
626
627
628
629
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
630
631
632
633
634
635
636
OS_SCRIPTS = frozenset([
  OS_SCRIPT_CREATE,
  OS_SCRIPT_IMPORT,
  OS_SCRIPT_EXPORT,
  OS_SCRIPT_RENAME,
  OS_SCRIPT_VERIFY
  ])
637

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

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

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

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

659
660
661
662
663
664
665
666
667
668
669
670
671
672
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
  ])
673

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

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

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

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
800

801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
# Migration statuses
HV_MIGRATION_COMPLETED = "completed"
HV_MIGRATION_ACTIVE = "active"
HV_MIGRATION_FAILED = "failed"
HV_MIGRATION_CANCELLED = "cancelled"

HV_MIGRATION_VALID_STATUSES = frozenset([
  HV_MIGRATION_COMPLETED,
  HV_MIGRATION_ACTIVE,
  HV_MIGRATION_FAILED,
  HV_MIGRATION_CANCELLED,
  ])

HV_MIGRATION_FAILED_STATUSES = frozenset([
  HV_MIGRATION_FAILED,
  HV_MIGRATION_CANCELLED,
  ])

# KVM-specific statuses
HV_KVM_MIGRATION_VALID_STATUSES = HV_MIGRATION_VALID_STATUSES

822
823
824
# Node info keys
HV_NODEINFO_KEY_VERSION = "hv_version"

825
# Backend parameter names
Iustin Pop's avatar
Iustin Pop committed
826
BE_MEMORY = "memory"
827
BE_VCPUS = "vcpus"
828
BE_AUTO_BALANCE = "auto_balance"
829

830
831
832
833
834
835
836
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
837

838
839
840
841
842
843
844
845
846
# Node parameter names
ND_OOB_PROGRAM = "oob_program"

NDS_PARAMETER_TYPES = {
    ND_OOB_PROGRAM: VTYPE_MAYBE_STRING,
    }

NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())

847
848
849
850
851
852
853
# 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
854
855
856
857
858
859
860
OOB_COMMANDS = frozenset([
  OOB_POWER_ON,
  OOB_POWER_OFF,
  OOB_POWER_CYCLE,
  OOB_POWER_STATUS,
  OOB_HEALTH
  ])
861

862
863
OOB_POWER_STATUS_POWERED = "powered"

864
OOB_TIMEOUT = 60 # 60 seconds
865
OOB_POWER_DELAY = 2.0 # 2 seconds
866
867
868
869
870
871
872
873
874
875
876
877
878

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,
  ])

879
880
# Instance Parameters Profile
PP_DEFAULT = "default"
881

882
# NIC_* constants are used inside the ganeti config
Guido Trotter's avatar
Guido Trotter committed
883
884
885
886
887
888
889
890
891
892
893
894
895
896
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())
897

898
# IDISK_* constants are used in opcodes, to create/change disks
899
900
IDISK_SIZE = "size"
IDISK_MODE = "mode"
901
IDISK_ADOPT = "adopt"
902
IDISK_VG = "vg"
903
IDISK_METAVG = "metavg"
904
905
906
907
IDISK_PARAMS_TYPES = {
  IDISK_SIZE: VTYPE_SIZE,
  IDISK_MODE: VTYPE_STRING,
  IDISK_ADOPT: VTYPE_STRING,
908
  IDISK_VG: VTYPE_STRING,
909
  IDISK_METAVG: VTYPE_STRING,
910
  }
911
912
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())

913
# INIC_* constants are used in opcodes, to create/change nics
914
915
916
917
INIC_MAC = "mac"
INIC_IP = "ip"
INIC_MODE = "mode"
INIC_LINK = "link"
918
919
920
921
922
923
924
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())
925

926
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
927
HT_XEN_PVM = "xen-pvm"
928
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
929
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
930
HT_KVM = "kvm"
931
HT_CHROOT = "chroot"
Iustin Pop's avatar
Iustin Pop committed
932
933
934
935
936
937
938
939
940
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
941
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
942

943
VNC_BASE_PORT = 5900
944
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
Manuel Franceschini's avatar
Manuel Franceschini committed
945
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
946

947
# NIC types
948
949
950
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
951
952
953
954
955
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
956
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
957

Stephen Shirley's avatar
Stephen Shirley committed
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
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
  ])

977
978
979
980
981
982
983
984
# 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"

985
986
987
988
HT_CACHE_DEFAULT = "default"
HT_CACHE_NONE = "none"
HT_CACHE_WTHROUGH = "writethrough"
HT_CACHE_WBACK = "writeback"
Stephen Shirley's avatar
Stephen Shirley committed
989
990
991
992
993
994
HT_VALID_CACHE_TYPES = frozenset([
  HT_CACHE_DEFAULT,
  HT_CACHE_NONE,
  HT_CACHE_WTHROUGH,
  HT_CACHE_WBACK
  ])
995

996
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
Stephen Shirley's avatar
Stephen Shirley committed
997
998
999
1000
1001
1002
1003
1004
HT_KVM_VALID_DISK_TYPES = frozenset([
  HT_DISK_PARAVIRTUAL,
  HT_DISK_IDE,
  HT_DISK_SCSI,
  HT_DISK_SD,
  HT_DISK_MTD,
  HT_DISK_PFLASH
  ])
1005

<