constants.py 40.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

102

103
# Wipe
104
DD_CMD = "dd"
Michael Hanselmann's avatar
Michael Hanselmann committed
105
WIPE_BLOCK_SIZE = 1024 ** 2
106
107
108
MAX_WIPE_CHUNK = 1024 # 1GB
MIN_WIPE_CHUNK_PERCENT = 10

109

Iustin Pop's avatar
Iustin Pop committed
110
# file paths
111
DATA_DIR = _autoconf.LOCALSTATEDIR + "/lib/ganeti"
112
RUN_DIR = _autoconf.LOCALSTATEDIR + "/run"
113
RUN_GANETI_DIR = RUN_DIR + "/ganeti"
114
BDEV_CACHE_DIR = RUN_GANETI_DIR + "/bdev-cache"
115
DISK_LINKS_DIR = RUN_GANETI_DIR + "/instance-disks"
116
RUN_DIRS_MODE = 0775
Guido Trotter's avatar
Guido Trotter committed
117
SOCKET_DIR = RUN_GANETI_DIR + "/socket"
118
SECURE_DIR_MODE = 0700
119
SECURE_FILE_MODE = 0600
120
SOCKET_DIR_MODE = 0750
121
CRYPTO_KEYS_DIR = RUN_GANETI_DIR + "/crypto"
Guido Trotter's avatar
Guido Trotter committed
122
CRYPTO_KEYS_DIR_MODE = SECURE_DIR_MODE
123
124
IMPORT_EXPORT_DIR = RUN_GANETI_DIR + "/import-export"
IMPORT_EXPORT_DIR_MODE = 0755
125
ADOPTABLE_BLOCKDEV_ROOT = "/dev/disk/"
126
127
# 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
128
129
130
131
132
SUB_RUN_DIRS = [
  RUN_GANETI_DIR,
  BDEV_CACHE_DIR,
  DISK_LINKS_DIR,
  ]
Iustin Pop's avatar
Iustin Pop committed
133
LOCK_DIR = _autoconf.LOCALSTATEDIR + "/lock"
134
SSCONF_LOCK_FILE = LOCK_DIR + "/ganeti-ssconf.lock"
135
136
137
# 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
138
CLUSTER_CONF_FILE = DATA_DIR + "/config.data"
139
NODED_CERT_FILE = DATA_DIR + "/server.pem"
140
RAPI_CERT_FILE = DATA_DIR + "/rapi.pem"
141
CONFD_HMAC_KEY = DATA_DIR + "/hmac.key"
142
143
SPICE_CERT_FILE = DATA_DIR + "/spice.pem"
SPICE_CACERT_FILE = DATA_DIR + "/spice-ca.pem"
Michael Hanselmann's avatar
Michael Hanselmann committed
144
CLUSTER_DOMAIN_SECRET_FILE = DATA_DIR + "/cluster-domain-secret"
145
INSTANCE_STATUS_FILE = RUN_GANETI_DIR + "/instance-status"
Iustin Pop's avatar
Iustin Pop committed
146
SSH_KNOWN_HOSTS_FILE = DATA_DIR + "/known_hosts"
147
RAPI_USERS_FILE = DATA_DIR + "/rapi/users"
148
QUEUE_DIR = DATA_DIR + "/queue"
149
DAEMON_UTIL = _autoconf.PKGLIBDIR + "/daemon-util"
150
SETUP_SSH = _autoconf.TOOLSDIR + "/setup-ssh"
151
KVM_IFUP = _autoconf.PKGLIBDIR + "/kvm-ifup"
152
KVM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/kvm-console-wrapper"
153
XM_CONSOLE_WRAPPER = _autoconf.PKGLIBDIR + "/tools/xm-console-wrapper"
154
ETC_HOSTS = "/etc/hosts"
155
DEFAULT_FILE_STORAGE_DIR = _autoconf.FILE_STORAGE_DIR
156
DEFAULT_SHARED_FILE_STORAGE_DIR = _autoconf.SHARED_FILE_STORAGE_DIR
157
ENABLE_FILE_STORAGE = _autoconf.ENABLE_FILE_STORAGE
158
ENABLE_SHARED_FILE_STORAGE = _autoconf.ENABLE_SHARED_FILE_STORAGE
159
SYSCONFDIR = _autoconf.SYSCONFDIR
160
TOOLSDIR = _autoconf.TOOLSDIR
161
CONF_DIR = SYSCONFDIR + "/ganeti"
162

Michael Hanselmann's avatar
Michael Hanselmann committed
163
164
165
166
167
168
169
#: 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"

170
171
172
173
#: 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
174
175
176
#: File containing Unix timestamp until which watcher should be paused
WATCHER_PAUSEFILE = DATA_DIR + "/watcher.pause"

177
178
179
180
181
182
ALL_CERT_FILES = frozenset([
  NODED_CERT_FILE,
  RAPI_CERT_FILE,
  SPICE_CERT_FILE,
  SPICE_CACERT_FILE,
  ])
183

184
MASTER_SOCKET = SOCKET_DIR + "/ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
185

186
NODED = "ganeti-noded"
Guido Trotter's avatar
Guido Trotter committed
187
CONFD = "ganeti-confd"
Guido Trotter's avatar
Guido Trotter committed
188
RAPI = "ganeti-rapi"
189
MASTERD = "ganeti-masterd"
Guido Trotter's avatar
Guido Trotter committed
190
191
# used in the ganeti-nbma project
NLD = "ganeti-nld"
192
193
194
195

DAEMONS_PORTS = {
  # daemon-name: ("proto", "default-port")
  NODED: ("tcp", 1811),
Guido Trotter's avatar
Guido Trotter committed
196
  CONFD: ("udp", 1814),
Guido Trotter's avatar
Guido Trotter committed
197
  RAPI: ("tcp", 5080),
198
  "ssh": ("tcp", 22),
Guido Trotter's avatar
Guido Trotter committed
199
200
  # used in the ganeti-nbma project
  NLD: ("udp", 1816),
201
202
}
DEFAULT_NODED_PORT = DAEMONS_PORTS[NODED][1]
Guido Trotter's avatar
Guido Trotter committed
203
DEFAULT_CONFD_PORT = DAEMONS_PORTS[CONFD][1]
Guido Trotter's avatar
Guido Trotter committed
204
DEFAULT_RAPI_PORT = DAEMONS_PORTS[RAPI][1]
Guido Trotter's avatar
Guido Trotter committed
205
206
# used in the ganeti-nbma project
DEFAULT_NLD_PORT = DAEMONS_PORTS[NLD][1]
207

Iustin Pop's avatar
Iustin Pop committed
208
209
FIRST_DRBD_PORT = 11000
LAST_DRBD_PORT = 14999
210
MASTER_SCRIPT = "ganeti-master"
Iustin Pop's avatar
Iustin Pop committed
211

212
LOG_DIR = _autoconf.LOCALSTATEDIR + "/log/ganeti/"
213
DAEMONS_LOGFILES = {
Michael Hanselmann's avatar
Michael Hanselmann committed
214
215
216
217
218
  # "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
219
220
  # used in the ganeti-nbma project
  NLD: LOG_DIR + "nl-daemon.log",
Michael Hanselmann's avatar
Michael Hanselmann committed
221
  }
Michael Hanselmann's avatar
Michael Hanselmann committed
222

223
224
225
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
226
LOG_BURNIN = LOG_DIR + "burnin.log"
227
LOG_SETUP_SSH = LOG_DIR + "setup-ssh.log"
Iustin Pop's avatar
Iustin Pop committed
228

Luca Bigliardi's avatar
Luca Bigliardi committed
229
230
DEV_CONSOLE = "/dev/console"

Balazs Lecz's avatar
Balazs Lecz committed
231
232
PROC_MOUNTS = "/proc/mounts"

233
# Local UniX Interface related constants
234
LUXI_EOM = "\3"
235
LUXI_VERSION = CONFIG_VERSION
236

Iustin Pop's avatar
Iustin Pop committed
237
# one of "no", "yes", "only"
238
239
240
241
242
243
SYSLOG_USAGE = _autoconf.SYSLOG_USAGE
SYSLOG_NO = "no"
SYSLOG_YES = "yes"
SYSLOG_ONLY = "only"
SYSLOG_SOCKET = "/dev/log"

244
OS_SEARCH_PATH = _autoconf.OS_SEARCH_PATH
245
EXPORT_DIR = _autoconf.EXPORT_DIR
Iustin Pop's avatar
Iustin Pop committed
246
247
248

EXPORT_CONF_FILE = "config.ini"

249
XEN_BOOTLOADER = _autoconf.XEN_BOOTLOADER
250
251
252
XEN_KERNEL = _autoconf.XEN_KERNEL
XEN_INITRD = _autoconf.XEN_INITRD

253
KVM_PATH = _autoconf.KVM_PATH
Guido Trotter's avatar
Guido Trotter committed
254
SOCAT_PATH = _autoconf.SOCAT_PATH
255
SOCAT_USE_ESCAPE = _autoconf.SOCAT_USE_ESCAPE
256
SOCAT_USE_COMPRESS = _autoconf.SOCAT_USE_COMPRESS
257
SOCAT_ESCAPE_CODE = "0x1d"
258

259
260
261
262
263
264
#: Console as SSH command
CONS_SSH = "ssh"

#: Console as VNC server
CONS_VNC = "vnc"

265
266
267
#: Console as SPICE server
CONS_SPICE = "spice"

268
269
270
271
#: Display a message for console access
CONS_MESSAGE = "msg"

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

274
275
276
277
278
# 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

279
280
281
# 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
282
# modifying the ciphers, ensure not to accidentially add something after it's
283
284
285
286
# 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"

287
288
289
# Digest used to sign certificates ("openssl x509" uses SHA1 by default)
X509_CERT_SIGN_DIGEST = "SHA1"

290
291
292
293
294
295
# Default validity of certificates in days
X509_CERT_DEFAULT_VALIDITY = 365 * 5

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

296
297
X509_CERT_SIGNATURE_HEADER = "X-Ganeti-Signature"

298
299
300
301
302
303
IMPORT_EXPORT_DAEMON = _autoconf.PKGLIBDIR + "/import-export"

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

304
305
306
307
308
309
310
311
# Import/export transport compression
IEC_NONE = "none"
IEC_GZIP = "gzip"
IEC_ALL = frozenset([
  IEC_NONE,
  IEC_GZIP,
  ])

312
313
IE_CUSTOM_SIZE = "fd"

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

316
317
318
319
320
321
322
323
# 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"

324
VALUE_DEFAULT = "default"
325
326
VALUE_AUTO = "auto"
VALUE_GENERATE = "generate"
327
VALUE_NONE = "none"
328
329
VALUE_TRUE = "true"
VALUE_FALSE = "false"
330

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

Iustin Pop's avatar
Iustin Pop committed
334
# hooks-related constants
335
HOOKS_BASE_DIR = CONF_DIR + "/hooks"
Iustin Pop's avatar
Iustin Pop committed
336
337
HOOKS_PHASE_PRE = "pre"
HOOKS_PHASE_POST = "post"
338
HOOKS_NAME_CFGUPDATE = "config-update"
Guido Trotter's avatar
Guido Trotter committed
339
HOOKS_NAME_WATCHER = "watcher"
340
HOOKS_VERSION = 2
Iustin Pop's avatar
Iustin Pop committed
341
342
343
344

# hooks subject type (what object type does the LU deal with)
HTYPE_CLUSTER = "CLUSTER"
HTYPE_NODE = "NODE"
345
HTYPE_GROUP = "GROUP"
Iustin Pop's avatar
Iustin Pop committed
346
347
348
349
350
351
HTYPE_INSTANCE = "INSTANCE"

HKR_SKIP = 0
HKR_FAIL = 1
HKR_SUCCESS = 2

352
353
354
355
# Storage types
ST_FILE = "file"
ST_LVM_PV = "lvm-pv"
ST_LVM_VG = "lvm-vg"
356
357

# Storage fields
358
359
360
361
# 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
362
363
364
365
366
367
SF_NAME = "name"
SF_SIZE = "size"
SF_FREE = "free"
SF_USED = "used"
SF_ALLOCATABLE = "allocatable"

368
369
370
# Storage operations
SO_FIX_CONSISTENCY = "fix-consistency"

371
# Available fields per storage type
Stephen Shirley's avatar
Stephen Shirley committed
372
373
374
375
376
377
378
379
VALID_STORAGE_FIELDS = frozenset([
  SF_NAME,
  SF_TYPE,
  SF_SIZE,
  SF_USED,
  SF_FREE,
  SF_ALLOCATABLE
  ])
380
381

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

383
384
385
386
MODIFIABLE_STORAGE_FIELDS = {
  ST_LVM_PV: frozenset([SF_ALLOCATABLE]),
  }

387
VALID_STORAGE_OPERATIONS = {
388
  ST_LVM_VG: frozenset([SO_FIX_CONSISTENCY]),
389
390
  }

391
392
393
394
395
396
# 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
397
398
399
# disk template types
DT_DISKLESS = "diskless"
DT_PLAIN = "plain"
400
DT_DRBD8 = "drbd"
401
DT_FILE = "file"
402
DT_SHARED_FILE = "sharedfile"
403
DT_BLOCK = "blockdev"
404
405

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

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

411
# the set of non-lvm-based disk templates
412
DTS_NOT_LVM = frozenset([DT_DISKLESS, DT_FILE, DT_SHARED_FILE, DT_BLOCK])
413

414
# the set of disk templates which can be grown
415
DTS_GROWABLE = frozenset([DT_PLAIN, DT_DRBD8, DT_FILE, DT_SHARED_FILE])
416

417
# the set of disk templates that allow adoption
418
419
420
421
DTS_MAY_ADOPT = frozenset([DT_PLAIN, DT_BLOCK])

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

423
# the set of disk templates that allow migrations
424
DTS_MIRRORED = frozenset.union(DTS_INT_MIRROR, DTS_EXT_MIRROR)
425

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

429
430
# logical disk types
LD_LV = "lvm"
431
LD_DRBD8 = "drbd8"
432
LD_FILE = "file"
433
434
LD_BLOCKDEV = "blockdev"
LDS_BLOCK = frozenset([LD_LV, LD_DRBD8, LD_BLOCKDEV])
435

Iustin Pop's avatar
Iustin Pop committed
436
437
# drbd constants
DRBD_HMAC_ALG = "md5"
438
DRBD_NET_PROTOCOL = "C"
439
DRBD_BARRIERS = _autoconf.DRBD_BARRIERS
Iustin Pop's avatar
Iustin Pop committed
440

441
442
443
# file backend driver
FD_LOOP = "loop"
FD_BLKTAP = "blktap"
444
445

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

448
# disk access mode
449
450
DISK_RDONLY = "ro"
DISK_RDWR = "rw"
451
452
DISK_ACCESS_SET = frozenset([DISK_RDONLY, DISK_RDWR])

453
# disk replacement mode
454
455
456
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
457
REPLACE_DISK_AUTO = "replace_auto"
458
459
460
461
462
463
REPLACE_MODES = frozenset([
  REPLACE_DISK_PRI,
  REPLACE_DISK_SEC,
  REPLACE_DISK_CHG,
  REPLACE_DISK_AUTO,
  ])
464

465
466
467
468
469
470
471
472
# Instance export mode
EXPORT_MODE_LOCAL = "local"
EXPORT_MODE_REMOTE = "remote"
EXPORT_MODES = frozenset([
  EXPORT_MODE_LOCAL,
  EXPORT_MODE_REMOTE,
  ])

473
# Lock recalculate mode
Iustin Pop's avatar
Iustin Pop committed
474
475
LOCKS_REPLACE = "replace"
LOCKS_APPEND = "append"
476

477
478
479
480
481
482
483
484
# 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

485
# instance creation modes
Iustin Pop's avatar
Iustin Pop committed
486
487
INSTANCE_CREATE = "create"
INSTANCE_IMPORT = "import"
488
489
490
491
492
493
INSTANCE_REMOTE_IMPORT = "remote-import"
INSTANCE_CREATE_MODES = frozenset([
  INSTANCE_CREATE,
  INSTANCE_IMPORT,
  INSTANCE_REMOTE_IMPORT,
  ])
Iustin Pop's avatar
Iustin Pop committed
494

495
496
497
498
499
500
501
# 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

502
# Overall timeout for establishing connection
503
RIE_CONNECT_TIMEOUT = 180
504

505
506
507
508
509
510
# 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
511
512
#: Give child process up to 5 seconds to exit after sending a signal
CHILD_LINGER_TIMEOUT = 5.0
513

Stephen Shirley's avatar
Stephen Shirley committed
514
515
516
517
518
519
520
521
DISK_TEMPLATES = frozenset([
  DT_DISKLESS,
  DT_PLAIN,
  DT_DRBD8,
  DT_FILE,
  DT_SHARED_FILE,
  DT_BLOCK
  ])
522
523

FILE_DRIVER = frozenset([FD_LOOP, FD_BLKTAP])
Iustin Pop's avatar
Iustin Pop committed
524
525
526
527

# import/export config options
INISECT_EXP = "export"
INISECT_INS = "instance"
528
529
INISECT_HYP = "hypervisor"
INISECT_BEP = "backend"
530
INISECT_OSP = "os"
531

532
# dynamic device modification
533
534
535
DDM_ADD = "add"
DDM_REMOVE = "remove"
DDMS_VALUES = frozenset([DDM_ADD, DDM_REMOVE])
536

537
# common exit codes
Iustin Pop's avatar
Iustin Pop committed
538
EXIT_SUCCESS = 0
539
EXIT_FAILURE = 1
540
EXIT_NOTCLUSTER = 5
541
EXIT_NOTMASTER = 11
542
EXIT_NODESETUP_ERROR = 12
Iustin Pop's avatar
Iustin Pop committed
543
EXIT_CONFIRMATION = 13 # need user confirmation
544

545
546
547
#: Exit code for query operations with unknown fields
EXIT_UNKNOWN_FIELD = 14

548
549
# tags
TAG_CLUSTER = "cluster"
550
TAG_NODEGROUP = "nodegroup"
551
552
TAG_NODE = "node"
TAG_INSTANCE = "instance"
553
554
VALID_TAG_TYPES = frozenset([
  TAG_CLUSTER,
555
  TAG_NODEGROUP,
556
557
558
  TAG_NODE,
  TAG_INSTANCE,
  ])
559
560
561
MAX_TAG_LEN = 128
MAX_TAGS_PER_OBJ = 4096

562
563
# others
DEFAULT_BRIDGE = "xen-br0"
Iustin Pop's avatar
Iustin Pop committed
564
SYNC_SPEED = 60 * 1024
565
566
IP4_ADDRESS_LOCALHOST = "127.0.0.1"
IP4_ADDRESS_ANY = "0.0.0.0"
Manuel Franceschini's avatar
Manuel Franceschini committed
567
568
IP6_ADDRESS_LOCALHOST = "::1"
IP6_ADDRESS_ANY = "::"
569
570
IP4_VERSION = 4
IP6_VERSION = 6
571
VALID_IP_VERSIONS = frozenset([IP4_VERSION, IP6_VERSION])
572
TCP_PING_TIMEOUT = 10
573
GANETI_RUNAS = "root"
574
DEFAULT_VG = "xenvg"
575
DEFAULT_DRBD_HELPER = "/bin/true"
576
MIN_VG_SIZE = 20480
577
DEFAULT_MAC_PREFIX = "aa:00:00"
578
LVM_STRIPECOUNT = _autoconf.LVM_STRIPECOUNT
579
580
# default maximum instance wait time, in seconds.
DEFAULT_SHUTDOWN_TIMEOUT = 120
581
NODE_MAX_CLOCK_SKEW = 150
582
# Time for an intra-cluster disk transfer to wait for a connection
583
DISK_TRANSFER_CONNECT_TIMEOUT = 60
584
585
# Disk index separator
DISK_SEPARATOR = _autoconf.DISK_SEPARATOR
586
IP_COMMAND_PATH = _autoconf.IP_PATH
587

588
589
590
#: Key for job IDs in opcode result
JOB_IDS_KEY = "jobs"

591
592
593
594
595
596
597
# runparts results
(RUNPARTS_SKIP,
 RUNPARTS_RUN,
 RUNPARTS_ERR) = range(3)

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

598
599
600
601
# RPC constants
(RPC_ENCODING_NONE,
 RPC_ENCODING_ZLIB_BASE64) = range(2)

602
# os related constants
Iustin Pop's avatar
Iustin Pop committed
603
604
605
606
607
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
608
609
610
611
612
613
614
OS_SCRIPTS = frozenset([
  OS_SCRIPT_CREATE,
  OS_SCRIPT_IMPORT,
  OS_SCRIPT_EXPORT,
  OS_SCRIPT_RENAME,
  OS_SCRIPT_VERIFY
  ])
615

Iustin Pop's avatar
Iustin Pop committed
616
617
618
OS_API_FILE = "ganeti_api_version"
OS_VARIANTS_FILE = "variants.list"
OS_PARAMETERS_FILE = "parameters.list"
619

Iustin Pop's avatar
Iustin Pop committed
620
OS_VALIDATE_PARAMETERS = "parameters"
621
OS_VALIDATE_CALLS = frozenset([OS_VALIDATE_PARAMETERS])
622

623
# ssh constants
624
625
SSH_CONFIG_DIR = _autoconf.SSH_CONFIG_DIR
SSH_HOST_DSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_dsa_key"
626
SSH_HOST_DSA_PUB = SSH_HOST_DSA_PRIV + ".pub"
627
SSH_HOST_RSA_PRIV = SSH_CONFIG_DIR + "/ssh_host_rsa_key"
628
SSH_HOST_RSA_PUB = SSH_HOST_RSA_PRIV + ".pub"
629
630
SSH = "ssh"
SCP = "scp"
631
632
633
634
635

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

637
638
639
640
641
642
643
644
645
646
647
648
649
650
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
  ])
651

Iustin Pop's avatar
Iustin Pop committed
652
VTYPE_STRING = "string"
653
VTYPE_MAYBE_STRING = "maybe-string"
Iustin Pop's avatar
Iustin Pop committed
654
655
656
VTYPE_BOOL = "bool"
VTYPE_SIZE = "size" # size, in MiBs
VTYPE_INT = "int"
657
ENFORCEABLE_TYPES = frozenset([
Stephen Shirley's avatar
Stephen Shirley committed
658
659
660
661
662
663
  VTYPE_STRING,
  VTYPE_MAYBE_STRING,
  VTYPE_BOOL,
  VTYPE_SIZE,
  VTYPE_INT,
  ])
664

665
666
667
# Constant representing that the user does not specify any IP version
IFACE_NO_IP_VERSION_SPECIFIED = 0

668
669
670
# HV parameter names (global namespace)
HV_BOOT_ORDER = "boot_order"
HV_CDROM_IMAGE_PATH = "cdrom_image_path"
671
672
HV_KVM_CDROM2_IMAGE_PATH = "cdrom2_image_path"
HV_KVM_FLOPPY_IMAGE_PATH = "floppy_image_path"
673
674
HV_NIC_TYPE = "nic_type"
HV_DISK_TYPE = "disk_type"
675
HV_KVM_CDROM_DISK_TYPE = "cdrom_disk_type"
676
HV_VNC_BIND_ADDRESS = "vnc_bind_address"
677
HV_VNC_PASSWORD_FILE = "vnc_password_file"
678
679
680
HV_VNC_TLS = "vnc_tls"
HV_VNC_X509 = "vnc_x509_path"
HV_VNC_X509_VERIFY = "vnc_x509_verify"
681
682
HV_KVM_SPICE_BIND = "spice_bind"
HV_KVM_SPICE_IP_VERSION = "spice_ip_version"
683
HV_KVM_SPICE_PASSWORD_FILE = "spice_password_file"
684
685
686
687
688
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"
689
HV_KVM_SPICE_USE_TLS = "spice_use_tls"
690
691
HV_KVM_SPICE_TLS_CIPHERS = "spice_tls_ciphers"
HV_KVM_SPICE_USE_VDAGENT = "spice_use_vdagent"
692
693
HV_ACPI = "acpi"
HV_PAE = "pae"
694
695
696
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
697
HV_KERNEL_ARGS = "kernel_args"
698
699
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
700
HV_ROOT_PATH = "root_path"
701
HV_SERIAL_CONSOLE = "serial_console"
702
HV_USB_MOUSE = "usb_mouse"
703
HV_KEYMAP = "keymap"
704
HV_DEVICE_MODEL = "device_model"
705
HV_INIT_SCRIPT = "init_script"
706
HV_MIGRATION_PORT = "migration_port"
707
708
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
HV_MIGRATION_DOWNTIME = "migration_downtime"
709
HV_MIGRATION_MODE = "migration_mode"
710
HV_USE_LOCALTIME = "use_localtime"
711
HV_DISK_CACHE = "disk_cache"
712
713
HV_SECURITY_MODEL = "security_model"
HV_SECURITY_DOMAIN = "security_domain"
Guido Trotter's avatar
Guido Trotter committed
714
HV_KVM_FLAG = "kvm_flag"
715
HV_VHOST_NET = "vhost_net"
Balazs Lecz's avatar
Balazs Lecz committed
716
HV_KVM_USE_CHROOT = "use_chroot"
717
HV_CPU_MASK = "cpu_mask"
718
HV_MEM_PATH = "mem_path"
719
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
720
HV_REBOOT_BEHAVIOR = "reboot_behavior"
721

722
723
HVS_PARAMETER_TYPES = {
  HV_BOOT_ORDER: VTYPE_STRING,
724
  HV_KVM_FLOPPY_IMAGE_PATH: VTYPE_STRING,
725
  HV_CDROM_IMAGE_PATH: VTYPE_STRING,
726
  HV_KVM_CDROM2_IMAGE_PATH: VTYPE_STRING,
727
728
  HV_NIC_TYPE: VTYPE_STRING,
  HV_DISK_TYPE: VTYPE_STRING,
729
  HV_KVM_CDROM_DISK_TYPE: VTYPE_STRING,
730
  HV_VNC_PASSWORD_FILE: VTYPE_STRING,
731
732
733
734
  HV_VNC_BIND_ADDRESS: VTYPE_STRING,
  HV_VNC_TLS: VTYPE_BOOL,
  HV_VNC_X509: VTYPE_STRING,
  HV_VNC_X509_VERIFY: VTYPE_BOOL,
735
736
  HV_KVM_SPICE_BIND: VTYPE_STRING,
  HV_KVM_SPICE_IP_VERSION: VTYPE_INT,
737
  HV_KVM_SPICE_PASSWORD_FILE: VTYPE_STRING,
738
739
740
741
742
  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,
743
  HV_KVM_SPICE_USE_TLS: VTYPE_BOOL,
744
745
  HV_KVM_SPICE_TLS_CIPHERS: VTYPE_STRING,
  HV_KVM_SPICE_USE_VDAGENT: VTYPE_BOOL,
746
747
  HV_ACPI: VTYPE_BOOL,
  HV_PAE: VTYPE_BOOL,
748
749
750
  HV_USE_BOOTLOADER: VTYPE_BOOL,
  HV_BOOTLOADER_PATH: VTYPE_STRING,
  HV_BOOTLOADER_ARGS: VTYPE_STRING,
751
  HV_KERNEL_PATH: VTYPE_STRING,
752
  HV_KERNEL_ARGS: VTYPE_STRING,
753
  HV_INITRD_PATH: VTYPE_STRING,
754
  HV_ROOT_PATH: VTYPE_MAYBE_STRING,
755
756
  HV_SERIAL_CONSOLE: VTYPE_BOOL,
  HV_USB_MOUSE: VTYPE_STRING,
757
  HV_KEYMAP: VTYPE_STRING,
758
  HV_DEVICE_MODEL: VTYPE_STRING,
759
  HV_INIT_SCRIPT: VTYPE_STRING,
760
  HV_MIGRATION_PORT: VTYPE_INT,
761
762
  HV_MIGRATION_BANDWIDTH: VTYPE_INT,
  HV_MIGRATION_DOWNTIME: VTYPE_INT,
763
  HV_MIGRATION_MODE: VTYPE_STRING,
764
  HV_USE_LOCALTIME: VTYPE_BOOL,
765
  HV_DISK_CACHE: VTYPE_STRING,
766
767
  HV_SECURITY_MODEL: VTYPE_STRING,
  HV_SECURITY_DOMAIN: VTYPE_STRING,
Guido Trotter's avatar
Guido Trotter committed
768
  HV_KVM_FLAG: VTYPE_STRING,
769
  HV_VHOST_NET: VTYPE_BOOL,
Balazs Lecz's avatar
Balazs Lecz committed
770
  HV_KVM_USE_CHROOT: VTYPE_BOOL,
771
  HV_CPU_MASK: VTYPE_STRING,
772
  HV_MEM_PATH: VTYPE_STRING,
773
  HV_BLOCKDEV_PREFIX: VTYPE_STRING,
774
  HV_REBOOT_BEHAVIOR: VTYPE_STRING,
775
776
777
  }

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
778

779
# Backend parameter names
Iustin Pop's avatar
Iustin Pop committed
780
BE_MEMORY = "memory"
781
BE_VCPUS = "vcpus"
782
BE_AUTO_BALANCE = "auto_balance"
783

784
785
786
787
788
789
790
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
791

792
793
794
795
796
797
798
799
800
# Node parameter names
ND_OOB_PROGRAM = "oob_program"

NDS_PARAMETER_TYPES = {
    ND_OOB_PROGRAM: VTYPE_MAYBE_STRING,
    }

NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())

801
802
803
804
805
806
807
# 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
808
809
810
811
812
813
814
OOB_COMMANDS = frozenset([
  OOB_POWER_ON,
  OOB_POWER_OFF,
  OOB_POWER_CYCLE,
  OOB_POWER_STATUS,
  OOB_HEALTH
  ])
815

816
817
OOB_POWER_STATUS_POWERED = "powered"

818
OOB_TIMEOUT = 60 # 60 seconds
819
OOB_POWER_DELAY = 2.0 # 2 seconds
820
821
822
823
824
825
826
827
828
829
830
831
832

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

833
834
# Instance Parameters Profile
PP_DEFAULT = "default"
835

836
# NIC_* constants are used inside the ganeti config
Guido Trotter's avatar
Guido Trotter committed
837
838
839
840
841
842
843
844
845
846
847
848
849
850
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())
851

852
# IDISK_* constants are used in opcodes, to create/change disks
853
854
IDISK_SIZE = "size"
IDISK_MODE = "mode"
855
IDISK_ADOPT = "adopt"
856
IDISK_VG = "vg"
857
IDISK_METAVG = "metavg"
858
859
860
861
IDISK_PARAMS_TYPES = {
  IDISK_SIZE: VTYPE_SIZE,
  IDISK_MODE: VTYPE_STRING,
  IDISK_ADOPT: VTYPE_STRING,
862
  IDISK_VG: VTYPE_STRING,
863
  IDISK_METAVG: VTYPE_STRING,
864
  }
865
866
IDISK_PARAMS = frozenset(IDISK_PARAMS_TYPES.keys())

867
# INIC_* constants are used in opcodes, to create/change nics
868
869
870
871
INIC_MAC = "mac"
INIC_IP = "ip"
INIC_MODE = "mode"
INIC_LINK = "link"
872
873
874
875
876
877
878
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())
879

880
# Hypervisor constants
Iustin Pop's avatar
Iustin Pop committed
881
HT_XEN_PVM = "xen-pvm"
882
HT_FAKE = "fake"
Iustin Pop's avatar
Iustin Pop committed
883
HT_XEN_HVM = "xen-hvm"
Guido Trotter's avatar
Guido Trotter committed
884
HT_KVM = "kvm"
885
HT_CHROOT = "chroot"
Iustin Pop's avatar
Iustin Pop committed
886
887
888
889
890
891
892
893
894
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
895
HTS_REQ_PORT = frozenset([HT_XEN_HVM, HT_KVM])
896

897
VNC_BASE_PORT = 5900
898
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
Manuel Franceschini's avatar
Manuel Franceschini committed
899
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
900

901
# NIC types
902
903
904
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
905
906
907
908
909
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
910
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
911

Stephen Shirley's avatar
Stephen Shirley committed
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
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
  ])

931
932
933
934
935
936
937
938
# 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"

939
940
941
942
HT_CACHE_DEFAULT = "default"
HT_CACHE_NONE = "none"
HT_CACHE_WTHROUGH = "writethrough"
HT_CACHE_WBACK = "writeback"
Stephen Shirley's avatar
Stephen Shirley committed
943
944
945
946
947
948
HT_VALID_CACHE_TYPES = frozenset([
  HT_CACHE_DEFAULT,
  HT_CACHE_NONE,
  HT_CACHE_WTHROUGH,
  HT_CACHE_WBACK
  ])
949

950
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
Stephen Shirley's avatar
Stephen Shirley committed
951
952
953
954
955
956
957
958
HT_KVM_VALID_DISK_TYPES = frozenset([
  HT_DISK_PARAVIRTUAL,
  HT_DISK_IDE,
  HT_DISK_SCSI,
  HT_DISK_SD,
  HT_DISK_MTD,
  HT_DISK_PFLASH
  ])
959

960
961
962
963
964
965
966
# Mouse types:
HT_MOUSE_MOUSE = "mouse"
HT_MOUSE_TABLET = "tablet"

HT_KVM_VALID_MOUSE_TYPES = frozenset([HT_MOUSE_MOUSE, HT_MOUSE_TABLET])

# Boot order
967
HT_BO_FLOPPY = "floppy"
968
969
970
971
HT_BO_CDROM = "cdrom"
HT_BO_DISK = "disk"
HT_BO_NETWORK = "network"

Stephen Shirley's avatar
Stephen Shirley committed
972
973
974
975
976
977
HT_KVM_VALID_BO_TYPES = frozenset([
  HT_BO_FLOPPY,
  HT_BO_CDROM,
  HT_BO_DISK,
  HT_BO_NETWORK
  ])
978

979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
# SPICE lossless image compression options
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ = "auto_glz"
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ = "auto_lz"
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC = "quic"
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ = "glz"
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ = "lz"
HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF = "off"

HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS = frozenset([
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ,
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ,
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC,
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ,
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ,
  HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF,
  ])

# SPICE lossy image compression options (valid for both jpeg and zlib-glz)
HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO = "auto"
HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER = "never"
HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS = "always"

HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS = frozenset([
  HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO,
  HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER,
  HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS,
  ])

# SPICE video stream detection
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF = "off"
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL = "all"
HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER = "filter"

HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS = frozenset([
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF