constants.py 39.9 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_ACPI = "acpi"
HV_PAE = "pae"
692
693
694
HV_USE_BOOTLOADER = "use_bootloader"
HV_BOOTLOADER_ARGS = "bootloader_args"
HV_BOOTLOADER_PATH = "bootloader_path"
695
HV_KERNEL_ARGS = "kernel_args"
696
697
HV_KERNEL_PATH = "kernel_path"
HV_INITRD_PATH = "initrd_path"
698
HV_ROOT_PATH = "root_path"
699
HV_SERIAL_CONSOLE = "serial_console"
700
HV_USB_MOUSE = "usb_mouse"
701
HV_KEYMAP = "keymap"
702
HV_DEVICE_MODEL = "device_model"
703
HV_INIT_SCRIPT = "init_script"
704
HV_MIGRATION_PORT = "migration_port"
705
706
HV_MIGRATION_BANDWIDTH = "migration_bandwidth"
HV_MIGRATION_DOWNTIME = "migration_downtime"
707
HV_MIGRATION_MODE = "migration_mode"
708
HV_USE_LOCALTIME = "use_localtime"
709
HV_DISK_CACHE = "disk_cache"
710
711
HV_SECURITY_MODEL = "security_model"
HV_SECURITY_DOMAIN = "security_domain"
Guido Trotter's avatar
Guido Trotter committed
712
HV_KVM_FLAG = "kvm_flag"
713
HV_VHOST_NET = "vhost_net"
Balazs Lecz's avatar
Balazs Lecz committed
714
HV_KVM_USE_CHROOT = "use_chroot"
715
HV_CPU_MASK = "cpu_mask"
716
HV_MEM_PATH = "mem_path"
717
HV_BLOCKDEV_PREFIX = "blockdev_prefix"
718
HV_REBOOT_BEHAVIOR = "reboot_behavior"
719

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

HVS_PARAMETERS = frozenset(HVS_PARAMETER_TYPES.keys())
774

775
# Backend parameter names
Iustin Pop's avatar
Iustin Pop committed
776
BE_MEMORY = "memory"
777
BE_VCPUS = "vcpus"
778
BE_AUTO_BALANCE = "auto_balance"
779

780
781
782
783
784
785
786
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
787

788
789
790
791
792
793
794
795
796
# Node parameter names
ND_OOB_PROGRAM = "oob_program"

NDS_PARAMETER_TYPES = {
    ND_OOB_PROGRAM: VTYPE_MAYBE_STRING,
    }

NDS_PARAMETERS = frozenset(NDS_PARAMETER_TYPES.keys())

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

812
813
OOB_POWER_STATUS_POWERED = "powered"

814
OOB_TIMEOUT = 60 # 60 seconds
815
OOB_POWER_DELAY = 2.0 # 2 seconds
816
817
818
819
820
821
822
823
824
825
826
827
828

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

829
830
# Instance Parameters Profile
PP_DEFAULT = "default"
831

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

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

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

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

893
VNC_BASE_PORT = 5900
894
VNC_PASSWORD_FILE = CONF_DIR + "/vnc-cluster-password"
Manuel Franceschini's avatar
Manuel Franceschini committed
895
VNC_DEFAULT_BIND_ADDRESS = IP4_ADDRESS_ANY
896

897
# NIC types
898
899
900
HT_NIC_RTL8139 = "rtl8139"
HT_NIC_NE2K_PCI = "ne2k_pci"
HT_NIC_NE2K_ISA = "ne2k_isa"
901
902
903
904
905
HT_NIC_I82551 = "i82551"
HT_NIC_I85557B = "i82557b"
HT_NIC_I8259ER = "i82559er"
HT_NIC_PCNET = "pcnet"
HT_NIC_E1000 = "e1000"
906
HT_NIC_PARAVIRTUAL = HT_DISK_PARAVIRTUAL = "paravirtual"
907

Stephen Shirley's avatar
Stephen Shirley committed
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
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
  ])

927
928
929
930
931
932
933
934
# 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"

935
936
937
938
HT_CACHE_DEFAULT = "default"
HT_CACHE_NONE = "none"
HT_CACHE_WTHROUGH = "writethrough"
HT_CACHE_WBACK = "writeback"
Stephen Shirley's avatar
Stephen Shirley committed
939
940
941
942
943
944
HT_VALID_CACHE_TYPES = frozenset([
  HT_CACHE_DEFAULT,
  HT_CACHE_NONE,
  HT_CACHE_WTHROUGH,
  HT_CACHE_WBACK
  ])
945

946
HT_HVM_VALID_DISK_TYPES = frozenset([HT_DISK_PARAVIRTUAL, HT_DISK_IOEMU])
Stephen Shirley's avatar
Stephen Shirley committed
947
948
949
950
951
952
953
954
HT_KVM_VALID_DISK_TYPES = frozenset([
  HT_DISK_PARAVIRTUAL,
  HT_DISK_IDE,
  HT_DISK_SCSI,
  HT_DISK_SD,
  HT_DISK_MTD,
  HT_DISK_PFLASH
  ])
955

956
957
958
959
960
961
962
# Mouse types:
HT_MOUSE_MOUSE = "mouse"
HT_MOUSE_TABLET = "tablet"

HT_KVM_VALID_MOUSE_TYPES = frozenset([HT_MOUSE_MOUSE, HT_MOUSE_TABLET])

# Boot order
963
HT_BO_FLOPPY = "floppy"
964
965
966
967
HT_BO_CDROM = "cdrom"
HT_BO_DISK = "disk"
HT_BO_NETWORK = "network"

Stephen Shirley's avatar
Stephen Shirley committed
968
969
970
971
972
973
HT_KVM_VALID_BO_TYPES = frozenset([
  HT_BO_FLOPPY,
  HT_BO_CDROM,
  HT_BO_DISK,
  HT_BO_NETWORK
  ])
974

975
976
977
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
# 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,
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL,
  HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER,
  ])

1014
1015
1016
1017
1018
1019
1020
# Security models
HT_SM_NONE = "none"
HT_SM_USER = "user"
HT_SM_POOL = "pool"

HT_KVM_VALID_SM_TYPES = frozenset([HT_SM_NONE, HT_SM_USER, HT_SM_POOL])