4 # Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Google Inc.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 """Module holding different constants."""
27 from ganeti
import _autoconf
28 from ganeti
import _vcsversion
29 from ganeti
import compat
30 from ganeti
import pathutils
34 RELEASE_VERSION
= _autoconf
.PACKAGE_VERSION
38 OS_API_VERSIONS
= compat
.UniqueFrozenset([
43 VCS_VERSION
= _vcsversion
.VCS_VERSION
48 # Format for CONFIG_VERSION:
49 # 01 03 0123 = 01030123
51 # | | + Configuration version/revision
55 # It is stored as an integer. Make sure not to write an octal number.
57 # BuildVersion and SplitVersion must be in here because we can't import other
58 # modules. The cfgupgrade tool must be able to read and write version numbers
59 # and thus requires these functions. To avoid code duplication, they're kept in
62 def BuildVersion(major
, minor
, revision
):
63 """Calculates int version number from major, minor and revision numbers.
65 Returns: int representing version number
68 assert isinstance(major
, int)
69 assert isinstance(minor
, int)
70 assert isinstance(revision
, int)
71 return (1000000 * major
+
76 def SplitVersion(version
):
77 """Splits version number stored in an int.
79 Returns: tuple; (major, minor, revision)
82 assert isinstance(version
, int)
84 (major
, remainder
) = divmod(version
, 1000000)
85 (minor
, revision
) = divmod(remainder
, 10000)
87 return (major
, minor
, revision
)
90 CONFIG_MAJOR
= int(_autoconf
.VERSION_MAJOR
)
91 CONFIG_MINOR
= int(_autoconf
.VERSION_MINOR
)
93 CONFIG_VERSION
= BuildVersion(CONFIG_MAJOR
, CONFIG_MINOR
, CONFIG_REVISION
)
95 #: RPC protocol version
96 PROTOCOL_VERSION
= BuildVersion(CONFIG_MAJOR
, CONFIG_MINOR
, 0)
99 DAEMONS_GROUP
= _autoconf
.DAEMONS_GROUP
100 ADMIN_GROUP
= _autoconf
.ADMIN_GROUP
101 MASTERD_USER
= _autoconf
.MASTERD_USER
102 MASTERD_GROUP
= _autoconf
.MASTERD_GROUP
103 RAPI_USER
= _autoconf
.RAPI_USER
104 RAPI_GROUP
= _autoconf
.RAPI_GROUP
105 CONFD_USER
= _autoconf
.CONFD_USER
106 CONFD_GROUP
= _autoconf
.CONFD_GROUP
107 LUXID_USER
= _autoconf
.LUXID_USER
108 LUXID_GROUP
= _autoconf
.LUXID_GROUP
109 NODED_USER
= _autoconf
.NODED_USER
110 NODED_GROUP
= _autoconf
.NODED_GROUP
111 MOND_USER
= _autoconf
.MOND_USER
112 MOND_GROUP
= _autoconf
.MOND_GROUP
113 SSH_LOGIN_USER
= _autoconf
.SSH_LOGIN_USER
114 SSH_CONSOLE_USER
= _autoconf
.SSH_CONSOLE_USER
116 # cpu pinning separators and constants
117 CPU_PINNING_SEP
= ":"
118 CPU_PINNING_ALL
= "all"
119 # internal representation of "all"
120 CPU_PINNING_ALL_VAL
= -1
121 # one "all" entry in a CPU list means CPU pinning is off
122 CPU_PINNING_OFF
= [CPU_PINNING_ALL_VAL
]
124 # A Xen-specific implementation detail - there is no way to actually say
125 # "use any cpu for pinning" in a Xen configuration file, as opposed to the
126 # command line, where you can say "xm vcpu-pin <domain> <vcpu> all".
127 # The workaround used in Xen is "0-63" (see source code function
128 # xm_vcpu_pin in <xen-source>/tools/python/xen/xm/main.py).
129 # To support future changes, the following constant is treated as a
130 # blackbox string that simply means use-any-cpu-for-pinning-under-xen.
131 CPU_PINNING_ALL_XEN
= "0-63"
133 # A KVM-specific implementation detail - the following value is used
134 # to set CPU affinity to all processors (#0 through #31), per taskset
136 # FIXME: This only works for machines with up to 32 CPU cores
137 CPU_PINNING_ALL_KVM
= 0xFFFFFFFF
141 MAX_WIPE_CHUNK
= 1024 # 1GB
142 MIN_WIPE_CHUNK_PERCENT
= 10
145 SECURE_DIR_MODE
= 0700
146 SECURE_FILE_MODE
= 0600
147 ADOPTABLE_BLOCKDEV_ROOT
= "/dev/disk/"
148 ENABLE_FILE_STORAGE
= _autoconf
.ENABLE_FILE_STORAGE
149 ENABLE_SHARED_FILE_STORAGE
= _autoconf
.ENABLE_SHARED_FILE_STORAGE
150 ENABLE_CONFD
= _autoconf
.ENABLE_CONFD
151 ENABLE_MOND
= _autoconf
.ENABLE_MOND
152 ENABLE_SPLIT_QUERY
= _autoconf
.ENABLE_SPLIT_QUERY
153 ENABLE_RESTRICTED_COMMANDS
= _autoconf
.ENABLE_RESTRICTED_COMMANDS
159 NODED
= "ganeti-noded"
160 CONFD
= "ganeti-confd"
161 LUXID
= "ganeti-luxid"
163 MASTERD
= "ganeti-masterd"
166 DAEMONS
= compat
.UniqueFrozenset([
176 # daemon-name: ("proto", "default-port")
177 NODED
: ("tcp", 1811),
178 CONFD
: ("udp", 1814),
184 DEFAULT_NODED_PORT
= DAEMONS_PORTS
[NODED
][1]
185 DEFAULT_CONFD_PORT
= DAEMONS_PORTS
[CONFD
][1]
186 DEFAULT_MOND_PORT
= DAEMONS_PORTS
[MOND
][1]
187 DEFAULT_RAPI_PORT
= DAEMONS_PORTS
[RAPI
][1]
189 FIRST_DRBD_PORT
= 11000
190 LAST_DRBD_PORT
= 14999
193 NODED
: "node-daemon",
194 CONFD
: "conf-daemon",
195 LUXID
: "luxi-daemon",
197 MASTERD
: "master-daemon",
198 MOND
: "monitoring-daemon",
202 dict((daemon
, pathutils
.GetLogFilename(DAEMONS_LOGBASE
[daemon
]))
203 for daemon
in DAEMONS_LOGBASE
)
205 # Some daemons might require more than one logfile.
206 # Specifically, right now only the Haskell http library "snap", used by the
207 # monitoring daemon, requires multiple log files.
209 # These are the only valid reasons for having an extra logfile
210 EXTRA_LOGREASON_ACCESS
= "access"
211 EXTRA_LOGREASON_ERROR
= "error"
213 VALID_EXTRA_LOGREASONS
= compat
.UniqueFrozenset([
214 EXTRA_LOGREASON_ACCESS
,
215 EXTRA_LOGREASON_ERROR
,
218 # These are the extra logfiles, grouped by daemon
219 DAEMONS_EXTRA_LOGBASE
= {
221 EXTRA_LOGREASON_ACCESS
: "monitoring-daemon-access",
222 EXTRA_LOGREASON_ERROR
: "monitoring-daemon-error",
226 DAEMONS_EXTRA_LOGFILES
= \
227 dict((daemon
, dict((extra
,
228 pathutils
.GetLogFilename(DAEMONS_EXTRA_LOGBASE
[daemon
][extra
]))
229 for extra
in DAEMONS_EXTRA_LOGBASE
[daemon
]))
230 for daemon
in DAEMONS_EXTRA_LOGBASE
)
232 DEV_CONSOLE
= "/dev/console"
234 PROC_MOUNTS
= "/proc/mounts"
236 # Local UniX Interface related constants
238 LUXI_VERSION
= CONFIG_VERSION
239 #: Environment variable for the luxi override socket
240 LUXI_OVERRIDE
= "FORCE_LUXI_SOCKET"
241 LUXI_OVERRIDE_MASTER
= "master"
242 LUXI_OVERRIDE_QUERY
= "query"
243 LUXI_SOCKET_PERMS
= 0660
245 # one of "no", "yes", "only"
246 SYSLOG_USAGE
= _autoconf
.SYSLOG_USAGE
250 SYSLOG_SOCKET
= "/dev/log"
252 EXPORT_CONF_FILE
= "config.ini"
254 XEN_BOOTLOADER
= _autoconf
.XEN_BOOTLOADER
255 XEN_KERNEL
= _autoconf
.XEN_KERNEL
256 XEN_INITRD
= _autoconf
.XEN_INITRD
259 # FIXME: This will be made configurable using hvparams in Ganeti 2.7
260 XEN_CMD
= _autoconf
.XEN_CMD
262 KNOWN_XEN_COMMANDS
= compat
.UniqueFrozenset([
267 # When the Xen toolstack used is "xl", live migration requires the source host
268 # to connect to the target host via ssh (xl runs this command). We need to pass
269 # the command xl runs some extra info so that it can use Ganeti's key
270 # verification and not fail. Note that this string is incomplete: it must be
271 # filled with the cluster name before being used.
272 XL_SSH_CMD
= ("ssh -l %s -oGlobalKnownHostsFile=%s"
273 " -oUserKnownHostsFile=/dev/null"
274 " -oCheckHostIp=no -oStrictHostKeyChecking=yes"
275 " -oHostKeyAlias=%%s") % (SSH_LOGIN_USER
,
276 pathutils
.SSH_KNOWN_HOSTS_FILE
)
278 KVM_PATH
= _autoconf
.KVM_PATH
279 KVM_KERNEL
= _autoconf
.KVM_KERNEL
280 SOCAT_PATH
= _autoconf
.SOCAT_PATH
281 SOCAT_USE_ESCAPE
= _autoconf
.SOCAT_USE_ESCAPE
282 SOCAT_USE_COMPRESS
= _autoconf
.SOCAT_USE_COMPRESS
283 SOCAT_ESCAPE_CODE
= "0x1d"
285 #: Console as SSH command
288 #: Console as VNC server
291 #: Console as SPICE server
294 #: Display a message for console access
298 CONS_ALL
= compat
.UniqueFrozenset([
305 # For RSA keys more bits are better, but they also make operations more
306 # expensive. NIST SP 800-131 recommends a minimum of 2048 bits from the year
310 # Ciphers allowed for SSL connections. For the format, see ciphers(1). A better
311 # way to disable ciphers would be to use the exclamation mark (!), but socat
312 # versions below 1.5 can't parse exclamation marks in options properly. When
313 # modifying the ciphers, ensure not to accidentially add something after it's
314 # been removed. Use the "openssl" utility to check the allowed ciphers, e.g.
315 # "openssl ciphers -v HIGH:-DES".
316 OPENSSL_CIPHERS
= "HIGH:-DES:-3DES:-EXPORT:-ADH"
318 # Digest used to sign certificates ("openssl x509" uses SHA1 by default)
319 X509_CERT_SIGN_DIGEST
= "SHA1"
321 # Default validity of certificates in days
322 X509_CERT_DEFAULT_VALIDITY
= 365 * 5
324 # commonName (CN) used in certificates
325 X509_CERT_CN
= "ganeti.example.com"
327 X509_CERT_SIGNATURE_HEADER
= "X-Ganeti-Signature"
329 # Import/export daemon mode
330 IEM_IMPORT
= "import"
331 IEM_EXPORT
= "export"
333 # Import/export transport compression
336 IEC_ALL
= compat
.UniqueFrozenset([
341 IE_CUSTOM_SIZE
= "fd"
343 IE_MAGIC_RE
= re
.compile(r
"^[-_.a-zA-Z0-9]{5,100}$")
346 # Direct file I/O, equivalent to a shell's I/O redirection using '<' or '>'
348 # Raw block device I/O using "dd"
349 IEIO_RAW_DISK
= "raw"
350 # OS definition import/export script
351 IEIO_SCRIPT
= "script"
353 VALUE_DEFAULT
= "default"
355 VALUE_GENERATE
= "generate"
358 VALUE_FALSE
= "false"
360 # External script validation mask
361 EXT_PLUGIN_MASK
= re
.compile("^[a-zA-Z0-9_-]+$")
363 # hooks-related constants
364 HOOKS_PHASE_PRE
= "pre"
365 HOOKS_PHASE_POST
= "post"
366 HOOKS_NAME_CFGUPDATE
= "config-update"
367 HOOKS_NAME_WATCHER
= "watcher"
369 HOOKS_PATH
= "/sbin:/bin:/usr/sbin:/usr/bin"
371 # hooks subject type (what object type does the LU deal with)
372 HTYPE_CLUSTER
= "CLUSTER"
374 HTYPE_GROUP
= "GROUP"
375 HTYPE_INSTANCE
= "INSTANCE"
376 HTYPE_NETWORK
= "NETWORK"
383 ST_BLOCK
= "blockdev"
384 ST_DISKLESS
= "diskless"
391 VALID_STORAGE_TYPES
= compat
.UniqueFrozenset([
402 # first two are valid in LU context only, not passed to backend
405 # and the rest are valid in backend
410 SF_ALLOCATABLE
= "allocatable"
413 SO_FIX_CONSISTENCY
= "fix-consistency"
415 # Available fields per storage type
416 VALID_STORAGE_FIELDS
= compat
.UniqueFrozenset([
425 MODIFIABLE_STORAGE_FIELDS
= {
426 ST_LVM_PV
: frozenset([SF_ALLOCATABLE
]),
429 VALID_STORAGE_OPERATIONS
= {
430 ST_LVM_VG
: frozenset([SO_FIX_CONSISTENCY
]),
434 # Note: Code depends on LDS_OKAY < LDS_UNKNOWN < LDS_FAULTY
437 LDS_FAULTY
) = range(1, 4)
439 # disk template types
440 DT_BLOCK
= "blockdev"
441 DT_DISKLESS
= "diskless"
447 DT_SHARED_FILE
= "sharedfile"
449 # This is used to order determine the default disk template when the list
450 # of enabled disk templates is inferred from the current state of the cluster.
451 # This only happens on an upgrade from a version of Ganeti that did not
452 # support the 'enabled_disk_templates' so far.
453 DISK_TEMPLATE_PREFERENCE
= [
464 DISK_TEMPLATES
= compat
.UniqueFrozenset([
475 # disk templates that are enabled by default
476 DEFAULT_ENABLED_DISK_TEMPLATES
= compat
.UniqueFrozenset([
481 # mapping of disk templates to storage types
482 DISK_TEMPLATES_STORAGE_TYPE
= {
484 DT_DISKLESS
: ST_DISKLESS
,
490 DT_SHARED_FILE
: ST_FILE
,
493 # the set of network-mirrored disk templates
494 DTS_INT_MIRROR
= compat
.UniqueFrozenset([DT_DRBD8
])
496 # the set of externally-mirrored disk templates (e.g. SAN, NAS)
497 DTS_EXT_MIRROR
= compat
.UniqueFrozenset([
498 DT_DISKLESS
, # 'trivially' externally mirrored
505 # the set of non-lvm-based disk templates
506 DTS_NOT_LVM
= compat
.UniqueFrozenset([
515 # the set of disk templates which can be grown
516 DTS_GROWABLE
= compat
.UniqueFrozenset([
525 # the set of disk templates that allow adoption
526 DTS_MAY_ADOPT
= compat
.UniqueFrozenset([
531 # the set of disk templates that *must* use adoption
532 DTS_MUST_ADOPT
= compat
.UniqueFrozenset([DT_BLOCK
])
534 # the set of disk templates that allow migrations
535 DTS_MIRRORED
= frozenset.union(DTS_INT_MIRROR
, DTS_EXT_MIRROR
)
537 # the set of file based disk templates
538 DTS_FILEBASED
= compat
.UniqueFrozenset([
543 # the set of disk templates that can be moved by copying
544 # Note: a requirement is that they're not accessed externally or shared between
545 # nodes; in particular, sharedfile is not suitable.
546 DTS_COPYABLE
= compat
.UniqueFrozenset([
551 # the set of disk templates that are supported by exclusive_storage
552 DTS_EXCL_STORAGE
= compat
.UniqueFrozenset([DT_PLAIN
])
554 # templates for which we don't perform checks on free space
555 DTS_NO_FREE_SPACE_CHECK
= compat
.UniqueFrozenset([
566 LD_BLOCKDEV
= "blockdev"
569 LOGICAL_DISK_TYPES
= compat
.UniqueFrozenset([
578 LDS_BLOCK
= compat
.UniqueFrozenset([
587 DRBD_HMAC_ALG
= "md5"
588 DRBD_NET_PROTOCOL
= "C"
589 DRBD_STATUS_FILE
= "/proc/drbd"
591 #: Size of DRBD meta block device
596 DRBD_B_DISK_BARRIERS
= "b"
597 DRBD_B_DISK_DRAIN
= "d"
598 DRBD_B_DISK_FLUSH
= "f"
600 # Valid barrier combinations: "n" or any non-null subset of "bfd"
601 DRBD_VALID_BARRIER_OPT
= compat
.UniqueFrozenset([
602 frozenset([DRBD_B_NONE
]),
603 frozenset([DRBD_B_DISK_BARRIERS
]),
604 frozenset([DRBD_B_DISK_DRAIN
]),
605 frozenset([DRBD_B_DISK_FLUSH
]),
606 frozenset([DRBD_B_DISK_DRAIN
, DRBD_B_DISK_FLUSH
]),
607 frozenset([DRBD_B_DISK_BARRIERS
, DRBD_B_DISK_DRAIN
]),
608 frozenset([DRBD_B_DISK_BARRIERS
, DRBD_B_DISK_FLUSH
]),
609 frozenset([DRBD_B_DISK_BARRIERS
, DRBD_B_DISK_FLUSH
, DRBD_B_DISK_DRAIN
]),
615 # file backend driver
620 # the set of drbd-like disk types
621 LDS_DRBD
= compat
.UniqueFrozenset([LD_DRBD8
])
626 DISK_ACCESS_SET
= compat
.UniqueFrozenset([DISK_RDONLY
, DISK_RDWR
])
628 # disk replacement mode
629 REPLACE_DISK_PRI
= "replace_on_primary" # replace disks on primary
630 REPLACE_DISK_SEC
= "replace_on_secondary" # replace disks on secondary
631 REPLACE_DISK_CHG
= "replace_new_secondary" # change secondary node
632 REPLACE_DISK_AUTO
= "replace_auto"
633 REPLACE_MODES
= compat
.UniqueFrozenset([
640 # Instance export mode
641 EXPORT_MODE_LOCAL
= "local"
642 EXPORT_MODE_REMOTE
= "remote"
643 EXPORT_MODES
= compat
.UniqueFrozenset([
648 # instance creation modes
649 INSTANCE_CREATE
= "create"
650 INSTANCE_IMPORT
= "import"
651 INSTANCE_REMOTE_IMPORT
= "remote-import"
652 INSTANCE_CREATE_MODES
= compat
.UniqueFrozenset([
655 INSTANCE_REMOTE_IMPORT
,
658 # Remote import/export handshake message and version
660 RIE_HANDSHAKE
= "Hi, I'm Ganeti"
662 # Remote import/export certificate validity in seconds
663 RIE_CERT_VALIDITY
= 24 * 60 * 60
665 # Overall timeout for establishing connection
666 RIE_CONNECT_TIMEOUT
= 180
668 # Export only: how long to wait per connection attempt (seconds)
669 RIE_CONNECT_ATTEMPT_TIMEOUT
= 20
671 # Export only: number of attempts to connect
672 RIE_CONNECT_RETRIES
= 10
674 #: Give child process up to 5 seconds to exit after sending a signal
675 CHILD_LINGER_TIMEOUT
= 5.0
677 FILE_DRIVER
= compat
.UniqueFrozenset([FD_LOOP
, FD_BLKTAP
])
679 # import/export config options
680 INISECT_EXP
= "export"
681 INISECT_INS
= "instance"
682 INISECT_HYP
= "hypervisor"
683 INISECT_BEP
= "backend"
686 # dynamic device modification
688 DDM_MODIFY
= "modify"
689 DDM_REMOVE
= "remove"
690 DDMS_VALUES
= compat
.UniqueFrozenset([DDM_ADD
, DDM_REMOVE
])
691 DDMS_VALUES_WITH_MODIFY
= (DDMS_VALUES
| frozenset([
694 # TODO: DDM_SWAP, DDM_MOVE?
701 EXIT_NODESETUP_ERROR
= 12
702 EXIT_CONFIRMATION
= 13 # need user confirmation
704 #: Exit code for query operations with unknown fields
705 EXIT_UNKNOWN_FIELD
= 14
708 TAG_CLUSTER
= "cluster"
709 TAG_NODEGROUP
= "nodegroup"
711 TAG_INSTANCE
= "instance"
712 TAG_NETWORK
= "network"
713 VALID_TAG_TYPES
= compat
.UniqueFrozenset([
721 MAX_TAGS_PER_OBJ
= 4096
724 DEFAULT_BRIDGE
= "xen-br0"
725 CLASSIC_DRBD_SYNC_SPEED
= 60 * 1024 # 60 MiB, expressed in KiB
726 IP4_ADDRESS_LOCALHOST
= "127.0.0.1"
727 IP4_ADDRESS_ANY
= "0.0.0.0"
728 IP6_ADDRESS_LOCALHOST
= "::1"
729 IP6_ADDRESS_ANY
= "::"
732 VALID_IP_VERSIONS
= compat
.UniqueFrozenset([IP4_VERSION
, IP6_VERSION
])
733 # for export to htools
734 IP4_FAMILY
= socket
.AF_INET
735 IP6_FAMILY
= socket
.AF_INET6
737 TCP_PING_TIMEOUT
= 10
739 DEFAULT_DRBD_HELPER
= "/bin/true"
741 DEFAULT_MAC_PREFIX
= "aa:00:00"
742 # default maximum instance wait time, in seconds.
743 DEFAULT_SHUTDOWN_TIMEOUT
= 120
744 NODE_MAX_CLOCK_SKEW
= 150
745 # Time for an intra-cluster disk transfer to wait for a connection
746 DISK_TRANSFER_CONNECT_TIMEOUT
= 60
747 # Disk index separator
748 DISK_SEPARATOR
= _autoconf
.DISK_SEPARATOR
749 IP_COMMAND_PATH
= _autoconf
.IP_PATH
751 #: Key for job IDs in opcode result
757 RUNPARTS_ERR
) = range(3)
759 RUNPARTS_STATUS
= compat
.UniqueFrozenset([
767 RPC_ENCODING_ZLIB_BASE64
) = range(2)
769 # Various time constants for the timeout table
770 RPC_TMO_URGENT
= 60 # one minute
771 RPC_TMO_FAST
= 5 * 60 # five minutes
772 RPC_TMO_NORMAL
= 15 * 60 # 15 minutes
773 RPC_TMO_SLOW
= 3600 # one hour
774 RPC_TMO_4HRS
= 4 * 3600
777 # Timeout for connecting to nodes (seconds)
778 RPC_CONNECT_TIMEOUT
= 5
780 # os related constants
781 OS_SCRIPT_CREATE
= "create"
782 OS_SCRIPT_IMPORT
= "import"
783 OS_SCRIPT_EXPORT
= "export"
784 OS_SCRIPT_RENAME
= "rename"
785 OS_SCRIPT_VERIFY
= "verify"
786 OS_SCRIPTS
= compat
.UniqueFrozenset([
794 OS_API_FILE
= "ganeti_api_version"
795 OS_VARIANTS_FILE
= "variants.list"
796 OS_PARAMETERS_FILE
= "parameters.list"
798 OS_VALIDATE_PARAMETERS
= "parameters"
799 OS_VALIDATE_CALLS
= compat
.UniqueFrozenset([OS_VALIDATE_PARAMETERS
])
801 # External Storage (ES) related constants
802 ES_ACTION_CREATE
= "create"
803 ES_ACTION_REMOVE
= "remove"
804 ES_ACTION_GROW
= "grow"
805 ES_ACTION_ATTACH
= "attach"
806 ES_ACTION_DETACH
= "detach"
807 ES_ACTION_SETINFO
= "setinfo"
808 ES_ACTION_VERIFY
= "verify"
810 ES_SCRIPT_CREATE
= ES_ACTION_CREATE
811 ES_SCRIPT_REMOVE
= ES_ACTION_REMOVE
812 ES_SCRIPT_GROW
= ES_ACTION_GROW
813 ES_SCRIPT_ATTACH
= ES_ACTION_ATTACH
814 ES_SCRIPT_DETACH
= ES_ACTION_DETACH
815 ES_SCRIPT_SETINFO
= ES_ACTION_SETINFO
816 ES_SCRIPT_VERIFY
= ES_ACTION_VERIFY
817 ES_SCRIPTS
= frozenset([
827 ES_PARAMETERS_FILE
= "parameters.list"
830 INSTANCE_REBOOT_SOFT
= "soft"
831 INSTANCE_REBOOT_HARD
= "hard"
832 INSTANCE_REBOOT_FULL
= "full"
834 REBOOT_TYPES
= compat
.UniqueFrozenset([
835 INSTANCE_REBOOT_SOFT
,
836 INSTANCE_REBOOT_HARD
,
837 INSTANCE_REBOOT_FULL
,
840 # instance reboot behaviors
841 INSTANCE_REBOOT_ALLOWED
= "reboot"
842 INSTANCE_REBOOT_EXIT
= "exit"
844 REBOOT_BEHAVIORS
= compat
.UniqueFrozenset([
845 INSTANCE_REBOOT_ALLOWED
,
846 INSTANCE_REBOOT_EXIT
,
849 VTYPE_STRING
= "string"
850 VTYPE_MAYBE_STRING
= "maybe-string"
852 VTYPE_SIZE
= "size" # size, in MiBs
854 ENFORCEABLE_TYPES
= compat
.UniqueFrozenset([
862 # Constant representing that the user does not specify any IP version
863 IFACE_NO_IP_VERSION_SPECIFIED
= 0
865 VALID_SERIAL_SPEEDS
= compat
.UniqueFrozenset([
886 # HV parameter names (global namespace)
887 HV_BOOT_ORDER
= "boot_order"
888 HV_CDROM_IMAGE_PATH
= "cdrom_image_path"
889 HV_KVM_CDROM2_IMAGE_PATH
= "cdrom2_image_path"
890 HV_KVM_FLOPPY_IMAGE_PATH
= "floppy_image_path"
891 HV_NIC_TYPE
= "nic_type"
892 HV_DISK_TYPE
= "disk_type"
893 HV_KVM_CDROM_DISK_TYPE
= "cdrom_disk_type"
894 HV_VNC_BIND_ADDRESS
= "vnc_bind_address"
895 HV_VNC_PASSWORD_FILE
= "vnc_password_file"
896 HV_VNC_TLS
= "vnc_tls"
897 HV_VNC_X509
= "vnc_x509_path"
898 HV_VNC_X509_VERIFY
= "vnc_x509_verify"
899 HV_KVM_SPICE_BIND
= "spice_bind"
900 HV_KVM_SPICE_IP_VERSION
= "spice_ip_version"
901 HV_KVM_SPICE_PASSWORD_FILE
= "spice_password_file"
902 HV_KVM_SPICE_LOSSLESS_IMG_COMPR
= "spice_image_compression"
903 HV_KVM_SPICE_JPEG_IMG_COMPR
= "spice_jpeg_wan_compression"
904 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR
= "spice_zlib_glz_wan_compression"
905 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION
= "spice_streaming_video"
906 HV_KVM_SPICE_AUDIO_COMPR
= "spice_playback_compression"
907 HV_KVM_SPICE_USE_TLS
= "spice_use_tls"
908 HV_KVM_SPICE_TLS_CIPHERS
= "spice_tls_ciphers"
909 HV_KVM_SPICE_USE_VDAGENT
= "spice_use_vdagent"
912 HV_USE_BOOTLOADER
= "use_bootloader"
913 HV_BOOTLOADER_ARGS
= "bootloader_args"
914 HV_BOOTLOADER_PATH
= "bootloader_path"
915 HV_KERNEL_ARGS
= "kernel_args"
916 HV_KERNEL_PATH
= "kernel_path"
917 HV_INITRD_PATH
= "initrd_path"
918 HV_ROOT_PATH
= "root_path"
919 HV_SERIAL_CONSOLE
= "serial_console"
920 HV_SERIAL_SPEED
= "serial_speed"
921 HV_USB_MOUSE
= "usb_mouse"
923 HV_DEVICE_MODEL
= "device_model"
924 HV_INIT_SCRIPT
= "init_script"
925 HV_MIGRATION_PORT
= "migration_port"
926 HV_MIGRATION_BANDWIDTH
= "migration_bandwidth"
927 HV_MIGRATION_DOWNTIME
= "migration_downtime"
928 HV_MIGRATION_MODE
= "migration_mode"
929 HV_USE_LOCALTIME
= "use_localtime"
930 HV_DISK_CACHE
= "disk_cache"
931 HV_SECURITY_MODEL
= "security_model"
932 HV_SECURITY_DOMAIN
= "security_domain"
933 HV_KVM_FLAG
= "kvm_flag"
934 HV_VHOST_NET
= "vhost_net"
935 HV_KVM_USE_CHROOT
= "use_chroot"
936 HV_CPU_MASK
= "cpu_mask"
937 HV_MEM_PATH
= "mem_path"
938 HV_PASSTHROUGH
= "pci_pass"
939 HV_BLOCKDEV_PREFIX
= "blockdev_prefix"
940 HV_REBOOT_BEHAVIOR
= "reboot_behavior"
941 HV_CPU_TYPE
= "cpu_type"
942 HV_CPU_CAP
= "cpu_cap"
943 HV_CPU_WEIGHT
= "cpu_weight"
944 HV_CPU_CORES
= "cpu_cores"
945 HV_CPU_THREADS
= "cpu_threads"
946 HV_CPU_SOCKETS
= "cpu_sockets"
947 HV_SOUNDHW
= "soundhw"
948 HV_USB_DEVICES
= "usb_devices"
950 HV_KVM_EXTRA
= "kvm_extra"
951 HV_KVM_MACHINE_VERSION
= "machine_version"
952 HV_KVM_PATH
= "kvm_path"
953 HV_VIF_TYPE
= "vif_type"
954 HV_VNET_HDR
= "vnet_hdr"
955 HV_VIRIDIAN
= "viridian"
958 HVS_PARAMETER_TYPES
= {
959 HV_KVM_PATH
: VTYPE_STRING
,
960 HV_BOOT_ORDER
: VTYPE_STRING
,
961 HV_KVM_FLOPPY_IMAGE_PATH
: VTYPE_STRING
,
962 HV_CDROM_IMAGE_PATH
: VTYPE_STRING
,
963 HV_KVM_CDROM2_IMAGE_PATH
: VTYPE_STRING
,
964 HV_NIC_TYPE
: VTYPE_STRING
,
965 HV_DISK_TYPE
: VTYPE_STRING
,
966 HV_KVM_CDROM_DISK_TYPE
: VTYPE_STRING
,
967 HV_VNC_PASSWORD_FILE
: VTYPE_STRING
,
968 HV_VNC_BIND_ADDRESS
: VTYPE_STRING
,
969 HV_VNC_TLS
: VTYPE_BOOL
,
970 HV_VNC_X509
: VTYPE_STRING
,
971 HV_VNC_X509_VERIFY
: VTYPE_BOOL
,
972 HV_KVM_SPICE_BIND
: VTYPE_STRING
,
973 HV_KVM_SPICE_IP_VERSION
: VTYPE_INT
,
974 HV_KVM_SPICE_PASSWORD_FILE
: VTYPE_STRING
,
975 HV_KVM_SPICE_LOSSLESS_IMG_COMPR
: VTYPE_STRING
,
976 HV_KVM_SPICE_JPEG_IMG_COMPR
: VTYPE_STRING
,
977 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR
: VTYPE_STRING
,
978 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION
: VTYPE_STRING
,
979 HV_KVM_SPICE_AUDIO_COMPR
: VTYPE_BOOL
,
980 HV_KVM_SPICE_USE_TLS
: VTYPE_BOOL
,
981 HV_KVM_SPICE_TLS_CIPHERS
: VTYPE_STRING
,
982 HV_KVM_SPICE_USE_VDAGENT
: VTYPE_BOOL
,
985 HV_USE_BOOTLOADER
: VTYPE_BOOL
,
986 HV_BOOTLOADER_PATH
: VTYPE_STRING
,
987 HV_BOOTLOADER_ARGS
: VTYPE_STRING
,
988 HV_KERNEL_PATH
: VTYPE_STRING
,
989 HV_KERNEL_ARGS
: VTYPE_STRING
,
990 HV_INITRD_PATH
: VTYPE_STRING
,
991 HV_ROOT_PATH
: VTYPE_MAYBE_STRING
,
992 HV_SERIAL_CONSOLE
: VTYPE_BOOL
,
993 HV_SERIAL_SPEED
: VTYPE_INT
,
994 HV_USB_MOUSE
: VTYPE_STRING
,
995 HV_KEYMAP
: VTYPE_STRING
,
996 HV_DEVICE_MODEL
: VTYPE_STRING
,
997 HV_INIT_SCRIPT
: VTYPE_STRING
,
998 HV_MIGRATION_PORT
: VTYPE_INT
,
999 HV_MIGRATION_BANDWIDTH
: VTYPE_INT
,
1000 HV_MIGRATION_DOWNTIME
: VTYPE_INT
,
1001 HV_MIGRATION_MODE
: VTYPE_STRING
,
1002 HV_USE_LOCALTIME
: VTYPE_BOOL
,
1003 HV_DISK_CACHE
: VTYPE_STRING
,
1004 HV_SECURITY_MODEL
: VTYPE_STRING
,
1005 HV_SECURITY_DOMAIN
: VTYPE_STRING
,
1006 HV_KVM_FLAG
: VTYPE_STRING
,
1007 HV_VHOST_NET
: VTYPE_BOOL
,
1008 HV_KVM_USE_CHROOT
: VTYPE_BOOL
,
1009 HV_CPU_MASK
: VTYPE_STRING
,
1010 HV_MEM_PATH
: VTYPE_STRING
,
1011 HV_PASSTHROUGH
: VTYPE_STRING
,
1012 HV_BLOCKDEV_PREFIX
: VTYPE_STRING
,
1013 HV_REBOOT_BEHAVIOR
: VTYPE_STRING
,
1014 HV_CPU_TYPE
: VTYPE_STRING
,
1015 HV_CPU_CAP
: VTYPE_INT
,
1016 HV_CPU_WEIGHT
: VTYPE_INT
,
1017 HV_CPU_CORES
: VTYPE_INT
,
1018 HV_CPU_THREADS
: VTYPE_INT
,
1019 HV_CPU_SOCKETS
: VTYPE_INT
,
1020 HV_SOUNDHW
: VTYPE_STRING
,
1021 HV_USB_DEVICES
: VTYPE_STRING
,
1022 HV_VGA
: VTYPE_STRING
,
1023 HV_KVM_EXTRA
: VTYPE_STRING
,
1024 HV_KVM_MACHINE_VERSION
: VTYPE_STRING
,
1025 HV_VIF_TYPE
: VTYPE_STRING
,
1026 HV_VNET_HDR
: VTYPE_BOOL
,
1027 HV_VIRIDIAN
: VTYPE_BOOL
,
1030 HVS_PARAMETERS
= frozenset(HVS_PARAMETER_TYPES
.keys())
1032 HVS_PARAMETER_TITLES
= {
1034 HV_BOOT_ORDER
: "Boot_order",
1035 HV_CDROM_IMAGE_PATH
: "CDROM_image_path",
1036 HV_DISK_TYPE
: "Disk_type",
1037 HV_INITRD_PATH
: "Initrd_path",
1038 HV_KERNEL_PATH
: "Kernel_path",
1039 HV_NIC_TYPE
: "NIC_type",
1041 HV_VNC_BIND_ADDRESS
: "VNC_bind_address",
1042 HV_PASSTHROUGH
: "pci_pass",
1043 HV_CPU_TYPE
: "cpu_type",
1046 # Migration statuses
1047 HV_MIGRATION_COMPLETED
= "completed"
1048 HV_MIGRATION_ACTIVE
= "active"
1049 HV_MIGRATION_FAILED
= "failed"
1050 HV_MIGRATION_CANCELLED
= "cancelled"
1052 HV_MIGRATION_VALID_STATUSES
= compat
.UniqueFrozenset([
1053 HV_MIGRATION_COMPLETED
,
1054 HV_MIGRATION_ACTIVE
,
1055 HV_MIGRATION_FAILED
,
1056 HV_MIGRATION_CANCELLED
,
1059 HV_MIGRATION_FAILED_STATUSES
= compat
.UniqueFrozenset([
1060 HV_MIGRATION_FAILED
,
1061 HV_MIGRATION_CANCELLED
,
1064 # KVM-specific statuses
1065 HV_KVM_MIGRATION_VALID_STATUSES
= HV_MIGRATION_VALID_STATUSES
1068 HV_NODEINFO_KEY_VERSION
= "hv_version"
1071 HVST_MEMORY_TOTAL
= "mem_total"
1072 HVST_MEMORY_NODE
= "mem_node"
1073 HVST_MEMORY_HV
= "mem_hv"
1074 HVST_CPU_TOTAL
= "cpu_total"
1075 HVST_CPU_NODE
= "cpu_node"
1078 HVST_MEMORY_TOTAL
: 0,
1079 HVST_MEMORY_NODE
: 0,
1085 HVSTS_PARAMETER_TYPES
= {
1086 HVST_MEMORY_TOTAL
: VTYPE_INT
,
1087 HVST_MEMORY_NODE
: VTYPE_INT
,
1088 HVST_MEMORY_HV
: VTYPE_INT
,
1089 HVST_CPU_TOTAL
: VTYPE_INT
,
1090 HVST_CPU_NODE
: VTYPE_INT
,
1093 HVSTS_PARAMETERS
= frozenset(HVSTS_PARAMETER_TYPES
.keys())
1096 DS_DISK_TOTAL
= "disk_total"
1097 DS_DISK_RESERVED
= "disk_reserved"
1098 DS_DISK_OVERHEAD
= "disk_overhead"
1102 DS_DISK_RESERVED
: 0,
1103 DS_DISK_OVERHEAD
: 0,
1106 DSS_PARAMETER_TYPES
= {
1107 DS_DISK_TOTAL
: VTYPE_INT
,
1108 DS_DISK_RESERVED
: VTYPE_INT
,
1109 DS_DISK_OVERHEAD
: VTYPE_INT
,
1112 DSS_PARAMETERS
= frozenset(DSS_PARAMETER_TYPES
.keys())
1113 DS_VALID_TYPES
= compat
.UniqueFrozenset([LD_LV
])
1115 # Backend parameter names
1116 BE_MEMORY
= "memory" # deprecated and replaced by max and min mem
1117 BE_MAXMEM
= "maxmem"
1118 BE_MINMEM
= "minmem"
1120 BE_AUTO_BALANCE
= "auto_balance"
1121 BE_ALWAYS_FAILOVER
= "always_failover"
1122 BE_SPINDLE_USE
= "spindle_use"
1124 BES_PARAMETER_TYPES
= {
1125 BE_MAXMEM
: VTYPE_SIZE
,
1126 BE_MINMEM
: VTYPE_SIZE
,
1127 BE_VCPUS
: VTYPE_INT
,
1128 BE_AUTO_BALANCE
: VTYPE_BOOL
,
1129 BE_ALWAYS_FAILOVER
: VTYPE_BOOL
,
1130 BE_SPINDLE_USE
: VTYPE_INT
,
1133 BES_PARAMETER_TITLES
= {
1134 BE_AUTO_BALANCE
: "Auto_balance",
1135 BE_MAXMEM
: "ConfigMaxMem",
1136 BE_MINMEM
: "ConfigMinMem",
1137 BE_VCPUS
: "ConfigVCPUs",
1140 BES_PARAMETER_COMPAT
= {
1141 BE_MEMORY
: VTYPE_SIZE
,
1143 BES_PARAMETER_COMPAT
.update(BES_PARAMETER_TYPES
)
1145 BES_PARAMETERS
= frozenset(BES_PARAMETER_TYPES
.keys())
1148 ISPEC_MEM_SIZE
= "memory-size"
1149 ISPEC_CPU_COUNT
= "cpu-count"
1150 ISPEC_DISK_COUNT
= "disk-count"
1151 ISPEC_DISK_SIZE
= "disk-size"
1152 ISPEC_NIC_COUNT
= "nic-count"
1153 ISPEC_SPINDLE_USE
= "spindle-use"
1155 ISPECS_PARAMETER_TYPES
= {
1156 ISPEC_MEM_SIZE
: VTYPE_INT
,
1157 ISPEC_CPU_COUNT
: VTYPE_INT
,
1158 ISPEC_DISK_COUNT
: VTYPE_INT
,
1159 ISPEC_DISK_SIZE
: VTYPE_INT
,
1160 ISPEC_NIC_COUNT
: VTYPE_INT
,
1161 ISPEC_SPINDLE_USE
: VTYPE_INT
,
1164 ISPECS_PARAMETERS
= frozenset(ISPECS_PARAMETER_TYPES
.keys())
1166 ISPECS_MINMAX
= "minmax"
1170 IPOLICY_DTS
= "disk-templates"
1171 IPOLICY_VCPU_RATIO
= "vcpu-ratio"
1172 IPOLICY_SPINDLE_RATIO
= "spindle-ratio"
1174 ISPECS_MINMAX_KEYS
= compat
.UniqueFrozenset([
1179 IPOLICY_PARAMETERS
= compat
.UniqueFrozenset([
1181 IPOLICY_SPINDLE_RATIO
,
1184 IPOLICY_ALL_KEYS
= (IPOLICY_PARAMETERS
|
1185 frozenset([ISPECS_MINMAX
, ISPECS_STD
, IPOLICY_DTS
]))
1187 # Node parameter names
1188 ND_OOB_PROGRAM
= "oob_program"
1189 ND_SPINDLE_COUNT
= "spindle_count"
1190 ND_EXCLUSIVE_STORAGE
= "exclusive_storage"
1192 NDS_PARAMETER_TYPES
= {
1193 ND_OOB_PROGRAM
: VTYPE_STRING
,
1194 ND_SPINDLE_COUNT
: VTYPE_INT
,
1195 ND_EXCLUSIVE_STORAGE
: VTYPE_BOOL
,
1198 NDS_PARAMETERS
= frozenset(NDS_PARAMETER_TYPES
.keys())
1200 NDS_PARAMETER_TITLES
= {
1201 ND_OOB_PROGRAM
: "OutOfBandProgram",
1202 ND_SPINDLE_COUNT
: "SpindleCount",
1203 ND_EXCLUSIVE_STORAGE
: "ExclusiveStorage",
1206 # Logical Disks parameters
1207 LDP_RESYNC_RATE
= "resync-rate"
1208 LDP_STRIPES
= "stripes"
1209 LDP_BARRIERS
= "disabled-barriers"
1210 LDP_NO_META_FLUSH
= "disable-meta-flush"
1211 LDP_DEFAULT_METAVG
= "default-metavg"
1212 LDP_DISK_CUSTOM
= "disk-custom"
1213 LDP_NET_CUSTOM
= "net-custom"
1214 LDP_DYNAMIC_RESYNC
= "dynamic-resync"
1215 LDP_PLAN_AHEAD
= "c-plan-ahead"
1216 LDP_FILL_TARGET
= "c-fill-target"
1217 LDP_DELAY_TARGET
= "c-delay-target"
1218 LDP_MAX_RATE
= "c-max-rate"
1219 LDP_MIN_RATE
= "c-min-rate"
1222 LDP_RESYNC_RATE
: VTYPE_INT
,
1223 LDP_STRIPES
: VTYPE_INT
,
1224 LDP_BARRIERS
: VTYPE_STRING
,
1225 LDP_NO_META_FLUSH
: VTYPE_BOOL
,
1226 LDP_DEFAULT_METAVG
: VTYPE_STRING
,
1227 LDP_DISK_CUSTOM
: VTYPE_STRING
,
1228 LDP_NET_CUSTOM
: VTYPE_STRING
,
1229 LDP_DYNAMIC_RESYNC
: VTYPE_BOOL
,
1230 LDP_PLAN_AHEAD
: VTYPE_INT
,
1231 LDP_FILL_TARGET
: VTYPE_INT
,
1232 LDP_DELAY_TARGET
: VTYPE_INT
,
1233 LDP_MAX_RATE
: VTYPE_INT
,
1234 LDP_MIN_RATE
: VTYPE_INT
,
1235 LDP_POOL
: VTYPE_STRING
,
1237 DISK_LD_PARAMETERS
= frozenset(DISK_LD_TYPES
.keys())
1239 # Disk template parameters (can be set/changed by the user via gnt-cluster and
1241 DRBD_RESYNC_RATE
= "resync-rate"
1242 DRBD_DATA_STRIPES
= "data-stripes"
1243 DRBD_META_STRIPES
= "meta-stripes"
1244 DRBD_DISK_BARRIERS
= "disk-barriers"
1245 DRBD_META_BARRIERS
= "meta-barriers"
1246 DRBD_DEFAULT_METAVG
= "metavg"
1247 DRBD_DISK_CUSTOM
= "disk-custom"
1248 DRBD_NET_CUSTOM
= "net-custom"
1249 DRBD_DYNAMIC_RESYNC
= "dynamic-resync"
1250 DRBD_PLAN_AHEAD
= "c-plan-ahead"
1251 DRBD_FILL_TARGET
= "c-fill-target"
1252 DRBD_DELAY_TARGET
= "c-delay-target"
1253 DRBD_MAX_RATE
= "c-max-rate"
1254 DRBD_MIN_RATE
= "c-min-rate"
1255 LV_STRIPES
= "stripes"
1258 DRBD_RESYNC_RATE
: VTYPE_INT
,
1259 DRBD_DATA_STRIPES
: VTYPE_INT
,
1260 DRBD_META_STRIPES
: VTYPE_INT
,
1261 DRBD_DISK_BARRIERS
: VTYPE_STRING
,
1262 DRBD_META_BARRIERS
: VTYPE_BOOL
,
1263 DRBD_DEFAULT_METAVG
: VTYPE_STRING
,
1264 DRBD_DISK_CUSTOM
: VTYPE_STRING
,
1265 DRBD_NET_CUSTOM
: VTYPE_STRING
,
1266 DRBD_DYNAMIC_RESYNC
: VTYPE_BOOL
,
1267 DRBD_PLAN_AHEAD
: VTYPE_INT
,
1268 DRBD_FILL_TARGET
: VTYPE_INT
,
1269 DRBD_DELAY_TARGET
: VTYPE_INT
,
1270 DRBD_MAX_RATE
: VTYPE_INT
,
1271 DRBD_MIN_RATE
: VTYPE_INT
,
1272 LV_STRIPES
: VTYPE_INT
,
1273 RBD_POOL
: VTYPE_STRING
,
1276 DISK_DT_PARAMETERS
= frozenset(DISK_DT_TYPES
.keys())
1278 # OOB supported commands
1279 OOB_POWER_ON
= "power-on"
1280 OOB_POWER_OFF
= "power-off"
1281 OOB_POWER_CYCLE
= "power-cycle"
1282 OOB_POWER_STATUS
= "power-status"
1283 OOB_HEALTH
= "health"
1285 OOB_COMMANDS
= compat
.UniqueFrozenset([
1293 OOB_POWER_STATUS_POWERED
= "powered"
1295 OOB_TIMEOUT
= 60 # 60 seconds
1296 OOB_POWER_DELAY
= 2.0 # 2 seconds
1298 OOB_STATUS_OK
= "OK"
1299 OOB_STATUS_WARNING
= "WARNING"
1300 OOB_STATUS_CRITICAL
= "CRITICAL"
1301 OOB_STATUS_UNKNOWN
= "UNKNOWN"
1303 OOB_STATUSES
= compat
.UniqueFrozenset([
1306 OOB_STATUS_CRITICAL
,
1310 # Instance Parameters Profile
1311 PP_DEFAULT
= "default"
1313 # NIC_* constants are used inside the ganeti config
1317 NIC_MODE_BRIDGED
= "bridged"
1318 NIC_MODE_ROUTED
= "routed"
1319 NIC_MODE_OVS
= "openvswitch"
1320 NIC_IP_POOL
= "pool"
1322 NIC_VALID_MODES
= compat
.UniqueFrozenset([
1328 RESERVE_ACTION
= "reserve"
1329 RELEASE_ACTION
= "release"
1331 NICS_PARAMETER_TYPES
= {
1332 NIC_MODE
: VTYPE_STRING
,
1333 NIC_LINK
: VTYPE_STRING
,
1336 NICS_PARAMETERS
= frozenset(NICS_PARAMETER_TYPES
.keys())
1338 # IDISK_* constants are used in opcodes, to create/change disks
1341 IDISK_ADOPT
= "adopt"
1343 IDISK_METAVG
= "metavg"
1344 IDISK_PROVIDER
= "provider"
1346 IDISK_PARAMS_TYPES
= {
1347 IDISK_SIZE
: VTYPE_SIZE
,
1348 IDISK_MODE
: VTYPE_STRING
,
1349 IDISK_ADOPT
: VTYPE_STRING
,
1350 IDISK_VG
: VTYPE_STRING
,
1351 IDISK_METAVG
: VTYPE_STRING
,
1352 IDISK_PROVIDER
: VTYPE_STRING
,
1353 IDISK_NAME
: VTYPE_MAYBE_STRING
,
1355 IDISK_PARAMS
= frozenset(IDISK_PARAMS_TYPES
.keys())
1357 # INIC_* constants are used in opcodes, to create/change nics
1362 INIC_NETWORK
= "network"
1364 INIC_PARAMS_TYPES
= {
1365 INIC_IP
: VTYPE_MAYBE_STRING
,
1366 INIC_LINK
: VTYPE_STRING
,
1367 INIC_MAC
: VTYPE_STRING
,
1368 INIC_MODE
: VTYPE_STRING
,
1369 INIC_NETWORK
: VTYPE_MAYBE_STRING
,
1370 INIC_NAME
: VTYPE_MAYBE_STRING
,
1372 INIC_PARAMS
= frozenset(INIC_PARAMS_TYPES
.keys())
1374 # Hypervisor constants
1375 HT_XEN_PVM
= "xen-pvm"
1377 HT_XEN_HVM
= "xen-hvm"
1379 HT_CHROOT
= "chroot"
1381 HYPER_TYPES
= compat
.UniqueFrozenset([
1389 HTS_REQ_PORT
= compat
.UniqueFrozenset([HT_XEN_HVM
, HT_KVM
])
1391 VNC_BASE_PORT
= 5900
1392 VNC_DEFAULT_BIND_ADDRESS
= IP4_ADDRESS_ANY
1395 HT_NIC_RTL8139
= "rtl8139"
1396 HT_NIC_NE2K_PCI
= "ne2k_pci"
1397 HT_NIC_NE2K_ISA
= "ne2k_isa"
1398 HT_NIC_I82551
= "i82551"
1399 HT_NIC_I85557B
= "i82557b"
1400 HT_NIC_I8259ER
= "i82559er"
1401 HT_NIC_PCNET
= "pcnet"
1402 HT_NIC_E1000
= "e1000"
1403 HT_NIC_PARAVIRTUAL
= HT_DISK_PARAVIRTUAL
= "paravirtual"
1405 HT_HVM_VALID_NIC_TYPES
= compat
.UniqueFrozenset([
1412 HT_KVM_VALID_NIC_TYPES
= compat
.UniqueFrozenset([
1425 # default vif type in xen-hvm
1426 HT_HVM_VIF_IOEMU
= "ioemu"
1427 HT_HVM_VIF_VIF
= "vif"
1428 HT_HVM_VALID_VIF_TYPES
= compat
.UniqueFrozenset([
1434 HT_DISK_IOEMU
= "ioemu"
1436 HT_DISK_SCSI
= "scsi"
1439 HT_DISK_PFLASH
= "pflash"
1441 HT_CACHE_DEFAULT
= "default"
1442 HT_CACHE_NONE
= "none"
1443 HT_CACHE_WTHROUGH
= "writethrough"
1444 HT_CACHE_WBACK
= "writeback"
1445 HT_VALID_CACHE_TYPES
= compat
.UniqueFrozenset([
1452 HT_HVM_VALID_DISK_TYPES
= compat
.UniqueFrozenset([
1453 HT_DISK_PARAVIRTUAL
,
1456 HT_KVM_VALID_DISK_TYPES
= compat
.UniqueFrozenset([
1457 HT_DISK_PARAVIRTUAL
,
1466 HT_MOUSE_MOUSE
= "mouse"
1467 HT_MOUSE_TABLET
= "tablet"
1469 HT_KVM_VALID_MOUSE_TYPES
= compat
.UniqueFrozenset([
1475 HT_BO_FLOPPY
= "floppy"
1476 HT_BO_CDROM
= "cdrom"
1478 HT_BO_NETWORK
= "network"
1480 HT_KVM_VALID_BO_TYPES
= compat
.UniqueFrozenset([
1487 # SPICE lossless image compression options
1488 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ
= "auto_glz"
1489 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ
= "auto_lz"
1490 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC
= "quic"
1491 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ
= "glz"
1492 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ
= "lz"
1493 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF
= "off"
1495 HT_KVM_SPICE_VALID_LOSSLESS_IMG_COMPR_OPTIONS
= compat
.UniqueFrozenset([
1496 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_GLZ
,
1497 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_AUTO_LZ
,
1498 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_QUIC
,
1499 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_GLZ
,
1500 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_LZ
,
1501 HT_KVM_SPICE_LOSSLESS_IMG_COMPR_OFF
,
1504 # SPICE lossy image compression options (valid for both jpeg and zlib-glz)
1505 HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO
= "auto"
1506 HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER
= "never"
1507 HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS
= "always"
1509 HT_KVM_SPICE_VALID_LOSSY_IMG_COMPR_OPTIONS
= compat
.UniqueFrozenset([
1510 HT_KVM_SPICE_LOSSY_IMG_COMPR_AUTO
,
1511 HT_KVM_SPICE_LOSSY_IMG_COMPR_NEVER
,
1512 HT_KVM_SPICE_LOSSY_IMG_COMPR_ALWAYS
,
1515 # SPICE video stream detection
1516 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF
= "off"
1517 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL
= "all"
1518 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER
= "filter"
1520 HT_KVM_SPICE_VALID_VIDEO_STREAM_DETECTION_OPTIONS
= compat
.UniqueFrozenset([
1521 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_OFF
,
1522 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_ALL
,
1523 HT_KVM_SPICE_VIDEO_STREAM_DETECTION_FILTER
,
1531 HT_KVM_VALID_SM_TYPES
= compat
.UniqueFrozenset([
1538 HT_KVM_ENABLED
= "enabled"
1539 HT_KVM_DISABLED
= "disabled"
1541 HT_KVM_FLAG_VALUES
= compat
.UniqueFrozenset([HT_KVM_ENABLED
, HT_KVM_DISABLED
])
1544 HT_MIGRATION_LIVE
= "live"
1545 HT_MIGRATION_NONLIVE
= "non-live"
1546 HT_MIGRATION_MODES
= compat
.UniqueFrozenset([
1548 HT_MIGRATION_NONLIVE
,
1551 # Cluster Verify steps
1552 VERIFY_NPLUSONE_MEM
= "nplusone_mem"
1553 VERIFY_OPTIONAL_CHECKS
= compat
.UniqueFrozenset([VERIFY_NPLUSONE_MEM
])
1555 # Cluster Verify error classes
1556 CV_TCLUSTER
= "cluster"
1559 CV_TINSTANCE
= "instance"
1561 # Cluster Verify error codes and documentation
1563 (CV_TCLUSTER
, "ECLUSTERCFG", "Cluster configuration verification failure")
1565 (CV_TCLUSTER
, "ECLUSTERCERT",
1566 "Cluster certificate files verification failure")
1567 CV_ECLUSTERFILECHECK
= \
1568 (CV_TCLUSTER
, "ECLUSTERFILECHECK",
1569 "Cluster configuration verification failure")
1570 CV_ECLUSTERDANGLINGNODES
= \
1571 (CV_TNODE
, "ECLUSTERDANGLINGNODES",
1572 "Some nodes belong to non-existing groups")
1573 CV_ECLUSTERDANGLINGINST
= \
1574 (CV_TNODE
, "ECLUSTERDANGLINGINST",
1575 "Some instances have a non-existing primary node")
1576 CV_EGROUPDIFFERENTPVSIZE
= \
1577 (CV_TGROUP
, "EGROUPDIFFERENTPVSIZE", "PVs in the group have different sizes")
1578 CV_EINSTANCEBADNODE
= \
1579 (CV_TINSTANCE
, "EINSTANCEBADNODE",
1580 "Instance marked as running lives on an offline node")
1581 CV_EINSTANCEDOWN
= \
1582 (CV_TINSTANCE
, "EINSTANCEDOWN", "Instance not running on its primary node")
1583 CV_EINSTANCELAYOUT
= \
1584 (CV_TINSTANCE
, "EINSTANCELAYOUT", "Instance has multiple secondary nodes")
1585 CV_EINSTANCEMISSINGDISK
= \
1586 (CV_TINSTANCE
, "EINSTANCEMISSINGDISK", "Missing volume on an instance")
1587 CV_EINSTANCEFAULTYDISK
= \
1588 (CV_TINSTANCE
, "EINSTANCEFAULTYDISK",
1589 "Impossible to retrieve status for a disk")
1590 CV_EINSTANCEWRONGNODE
= \
1591 (CV_TINSTANCE
, "EINSTANCEWRONGNODE", "Instance running on the wrong node")
1592 CV_EINSTANCESPLITGROUPS
= \
1593 (CV_TINSTANCE
, "EINSTANCESPLITGROUPS",
1594 "Instance with primary and secondary nodes in different groups")
1595 CV_EINSTANCEPOLICY
= \
1596 (CV_TINSTANCE
, "EINSTANCEPOLICY",
1597 "Instance does not meet policy")
1598 CV_EINSTANCEUNSUITABLENODE
= \
1599 (CV_TINSTANCE
, "EINSTANCEUNSUITABLENODE",
1600 "Instance running on nodes that are not suitable for it")
1602 (CV_TNODE
, "ENODEDRBD", "Error parsing the DRBD status file")
1603 CV_ENODEDRBDHELPER
= \
1604 (CV_TNODE
, "ENODEDRBDHELPER", "Error caused by the DRBD helper")
1605 CV_ENODEFILECHECK
= \
1606 (CV_TNODE
, "ENODEFILECHECK",
1607 "Error retrieving the checksum of the node files")
1609 (CV_TNODE
, "ENODEHOOKS", "Communication failure in hooks execution")
1611 (CV_TNODE
, "ENODEHV", "Hypervisor parameters verification failure")
1613 (CV_TNODE
, "ENODELVM", "LVM-related node error")
1615 (CV_TNODE
, "ENODEN1", "Not enough memory to accommodate instance failovers")
1617 (CV_TNODE
, "ENODENET", "Network-related node error")
1619 (CV_TNODE
, "ENODEOS", "OS-related node error")
1620 CV_ENODEORPHANINSTANCE
= \
1621 (CV_TNODE
, "ENODEORPHANINSTANCE", "Unknown intance running on a node")
1622 CV_ENODEORPHANLV
= \
1623 (CV_TNODE
, "ENODEORPHANLV", "Unknown LVM logical volume")
1625 (CV_TNODE
, "ENODERPC",
1626 "Error during connection to the primary node of an instance")
1628 (CV_TNODE
, "ENODESSH", "SSH-related node error")
1630 (CV_TNODE
, "ENODEVERSION",
1631 "Protocol version mismatch or Ganeti version mismatch")
1633 (CV_TNODE
, "ENODESETUP", "Node setup error")
1635 (CV_TNODE
, "ENODETIME", "Node returned invalid time")
1637 (CV_TNODE
, "ENODEOOBPATH", "Invalid Out Of Band path")
1638 CV_ENODEUSERSCRIPTS
= \
1639 (CV_TNODE
, "ENODEUSERSCRIPTS", "User scripts not present or not executable")
1640 CV_ENODEFILESTORAGEPATHS
= \
1641 (CV_TNODE
, "ENODEFILESTORAGEPATHS", "Detected bad file storage paths")
1643 CV_ALL_ECODES
= compat
.UniqueFrozenset([
1646 CV_ECLUSTERFILECHECK
,
1647 CV_ECLUSTERDANGLINGNODES
,
1648 CV_ECLUSTERDANGLINGINST
,
1649 CV_EINSTANCEBADNODE
,
1652 CV_EINSTANCEMISSINGDISK
,
1653 CV_EINSTANCEFAULTYDISK
,
1654 CV_EINSTANCEWRONGNODE
,
1655 CV_EINSTANCESPLITGROUPS
,
1666 CV_ENODEORPHANINSTANCE
,
1674 CV_ENODEUSERSCRIPTS
,
1675 CV_ENODEFILESTORAGEPATHS
,
1678 CV_ALL_ECODES_STRINGS
= \
1679 compat
.UniqueFrozenset(estr
for (_
, estr
, _
) in CV_ALL_ECODES
)
1681 # Node verify constants
1682 NV_BRIDGES
= "bridges"
1683 NV_DRBDHELPER
= "drbd-helper"
1684 NV_DRBDLIST
= "drbd-list"
1685 NV_EXCLUSIVEPVS
= "exclusive-pvs"
1686 NV_FILELIST
= "filelist"
1687 NV_FILE_STORAGE_PATHS
= "file-storage-paths"
1688 NV_HVINFO
= "hvinfo"
1689 NV_HVPARAMS
= "hvparms"
1690 NV_HYPERVISOR
= "hypervisor"
1691 NV_INSTANCELIST
= "instancelist"
1692 NV_LVLIST
= "lvlist"
1693 NV_MASTERIP
= "master-ip"
1694 NV_NODELIST
= "nodelist"
1695 NV_NODENETTEST
= "node-net-test"
1696 NV_NODESETUP
= "nodesetup"
1697 NV_OOB_PATHS
= "oob-paths"
1698 NV_OSLIST
= "oslist"
1699 NV_PVLIST
= "pvlist"
1701 NV_USERSCRIPTS
= "user-scripts"
1702 NV_VERSION
= "version"
1703 NV_VGLIST
= "vglist"
1704 NV_VMNODES
= "vmnodes"
1707 INSTST_RUNNING
= "running"
1708 INSTST_ADMINDOWN
= "ADMIN_down"
1709 INSTST_ADMINOFFLINE
= "ADMIN_offline"
1710 INSTST_NODEOFFLINE
= "ERROR_nodeoffline"
1711 INSTST_NODEDOWN
= "ERROR_nodedown"
1712 INSTST_WRONGNODE
= "ERROR_wrongnode"
1713 INSTST_ERRORUP
= "ERROR_up"
1714 INSTST_ERRORDOWN
= "ERROR_down"
1715 INSTST_ALL
= compat
.UniqueFrozenset([
1718 INSTST_ADMINOFFLINE
,
1728 ADMINST_DOWN
= "down"
1729 ADMINST_OFFLINE
= "offline"
1730 ADMINST_ALL
= compat
.UniqueFrozenset([
1742 NR_ALL
= compat
.UniqueFrozenset([
1750 # SSL certificate check constants (in days)
1751 SSL_CERT_EXPIRATION_WARN
= 30
1752 SSL_CERT_EXPIRATION_ERROR
= 7
1754 # Allocator framework constants
1755 IALLOCATOR_VERSION
= 2
1756 IALLOCATOR_DIR_IN
= "in"
1757 IALLOCATOR_DIR_OUT
= "out"
1758 VALID_IALLOCATOR_DIRECTIONS
= compat
.UniqueFrozenset([
1762 IALLOCATOR_MODE_ALLOC
= "allocate"
1763 IALLOCATOR_MODE_RELOC
= "relocate"
1764 IALLOCATOR_MODE_CHG_GROUP
= "change-group"
1765 IALLOCATOR_MODE_NODE_EVAC
= "node-evacuate"
1766 IALLOCATOR_MODE_MULTI_ALLOC
= "multi-allocate"
1767 VALID_IALLOCATOR_MODES
= compat
.UniqueFrozenset([
1768 IALLOCATOR_MODE_ALLOC
,
1769 IALLOCATOR_MODE_RELOC
,
1770 IALLOCATOR_MODE_CHG_GROUP
,
1771 IALLOCATOR_MODE_NODE_EVAC
,
1772 IALLOCATOR_MODE_MULTI_ALLOC
,
1774 IALLOCATOR_SEARCH_PATH
= _autoconf
.IALLOCATOR_SEARCH_PATH
1775 DEFAULT_IALLOCATOR_SHORTCUT
= "."
1777 IALLOCATOR_NEVAC_PRI
= "primary-only"
1778 IALLOCATOR_NEVAC_SEC
= "secondary-only"
1779 IALLOCATOR_NEVAC_ALL
= "all"
1780 IALLOCATOR_NEVAC_MODES
= compat
.UniqueFrozenset([
1781 IALLOCATOR_NEVAC_PRI
,
1782 IALLOCATOR_NEVAC_SEC
,
1783 IALLOCATOR_NEVAC_ALL
,
1787 NODE_EVAC_PRI
= "primary-only"
1788 NODE_EVAC_SEC
= "secondary-only"
1789 NODE_EVAC_ALL
= "all"
1790 NODE_EVAC_MODES
= compat
.UniqueFrozenset([
1797 JOB_QUEUE_VERSION
= 1
1798 JOB_QUEUE_SIZE_HARD_LIMIT
= 5000
1799 JOB_QUEUE_FILES_PERMS
= 0640
1801 JOB_ID_TEMPLATE
= r
"\d+"
1802 JOB_FILE_RE
= re
.compile(r
"^job-(%s)$" % JOB_ID_TEMPLATE
)
1804 # unchanged job return
1805 JOB_NOTCHANGED
= "nochange"
1808 JOB_STATUS_QUEUED
= "queued"
1809 JOB_STATUS_WAITING
= "waiting"
1810 JOB_STATUS_CANCELING
= "canceling"
1811 JOB_STATUS_RUNNING
= "running"
1812 JOB_STATUS_CANCELED
= "canceled"
1813 JOB_STATUS_SUCCESS
= "success"
1814 JOB_STATUS_ERROR
= "error"
1815 JOBS_PENDING
= compat
.UniqueFrozenset([
1818 JOB_STATUS_CANCELING
,
1820 JOBS_FINALIZED
= compat
.UniqueFrozenset([
1821 JOB_STATUS_CANCELED
,
1825 JOB_STATUS_ALL
= compat
.UniqueFrozenset([
1827 ]) | JOBS_PENDING
| JOBS_FINALIZED
1831 OP_STATUS_QUEUED
= "queued"
1832 OP_STATUS_WAITING
= "waiting"
1833 OP_STATUS_CANCELING
= "canceling"
1834 OP_STATUS_RUNNING
= "running"
1836 OP_STATUS_CANCELED
= "canceled"
1837 OP_STATUS_SUCCESS
= "success"
1838 OP_STATUS_ERROR
= "error"
1839 OPS_FINALIZED
= compat
.UniqueFrozenset([
1846 OP_PRIO_LOWEST
= +19
1847 OP_PRIO_HIGHEST
= -20
1853 OP_PRIO_SUBMIT_VALID
= compat
.UniqueFrozenset([
1859 OP_PRIO_DEFAULT
= OP_PRIO_NORMAL
1861 # Lock recalculate mode
1862 LOCKS_REPLACE
= "replace"
1863 LOCKS_APPEND
= "append"
1865 # Lock timeout (sum) before we should go into blocking acquire (still
1866 # can be reset by priority change); computed as max time (10 hours)
1867 # before we should actually go into blocking acquire given that we
1868 # start from default priority level; in seconds
1870 LOCK_ATTEMPTS_TIMEOUT
= 10 * 3600 / (OP_PRIO_DEFAULT
- OP_PRIO_HIGHEST
)
1871 LOCK_ATTEMPTS_MAXWAIT
= 15.0
1872 LOCK_ATTEMPTS_MINWAIT
= 1.0
1874 # Execution log types
1875 ELOG_MESSAGE
= "message"
1876 ELOG_REMOTE_IMPORT
= "remote-import"
1877 ELOG_JQUEUE_TEST
= "jqueue-test"
1879 # /etc/hosts modification
1880 ETC_HOSTS_ADD
= "add"
1881 ETC_HOSTS_REMOVE
= "remove"
1884 JQT_MSGPREFIX
= "TESTMSG="
1885 JQT_EXPANDNAMES
= "expandnames"
1887 JQT_LOGMSG
= "logmsg"
1888 JQT_STARTMSG
= "startmsg"
1889 JQT_ALL
= compat
.UniqueFrozenset([
1897 QR_CLUSTER
= "cluster"
1898 QR_INSTANCE
= "instance"
1904 QR_EXPORT
= "export"
1905 QR_NETWORK
= "network"
1906 QR_EXTSTORAGE
= "extstorage"
1908 #: List of resources which can be queried using L{opcodes.OpQuery}
1909 QR_VIA_OP
= compat
.UniqueFrozenset([
1920 #: List of resources which can be queried using Local UniX Interface
1921 QR_VIA_LUXI
= QR_VIA_OP
.union([
1926 #: List of resources which can be queried using RAPI
1927 QR_VIA_RAPI
= QR_VIA_LUXI
1930 QFT_UNKNOWN
= "unknown"
1933 QFT_NUMBER
= "number"
1935 QFT_TIMESTAMP
= "timestamp"
1938 #: All query field types
1939 QFT_ALL
= compat
.UniqueFrozenset([
1949 # Query result field status (don't change or reuse values as they're used by
1951 #: Normal field status
1955 #: No data (e.g. RPC error), can be used instead of L{RS_OFFLINE}
1957 #: Value unavailable/unsupported for item; if this field is supported
1958 #: but we cannot get the data for the moment, RS_NODATA or
1959 #: RS_OFFLINE should be used
1961 #: Resource marked offline
1964 RS_ALL
= compat
.UniqueFrozenset([
1972 #: Dictionary with special field cases and their verbose/terse formatting
1974 RS_UNKNOWN
: ("(unknown)", "??"),
1975 RS_NODATA
: ("(nodata)", "?"),
1976 RS_OFFLINE
: ("(offline)", "*"),
1977 RS_UNAVAIL
: ("(unavail)", "-"),
1980 # max dynamic devices
1984 # SSCONF file prefix
1985 SSCONF_FILEPREFIX
= "ssconf_"
1987 SS_CLUSTER_NAME
= "cluster_name"
1988 SS_CLUSTER_TAGS
= "cluster_tags"
1989 SS_FILE_STORAGE_DIR
= "file_storage_dir"
1990 SS_SHARED_FILE_STORAGE_DIR
= "shared_file_storage_dir"
1991 SS_MASTER_CANDIDATES
= "master_candidates"
1992 SS_MASTER_CANDIDATES_IPS
= "master_candidates_ips"
1993 SS_MASTER_IP
= "master_ip"
1994 SS_MASTER_NETDEV
= "master_netdev"
1995 SS_MASTER_NETMASK
= "master_netmask"
1996 SS_MASTER_NODE
= "master_node"
1997 SS_NODE_LIST
= "node_list"
1998 SS_NODE_PRIMARY_IPS
= "node_primary_ips"
1999 SS_NODE_SECONDARY_IPS
= "node_secondary_ips"
2000 SS_OFFLINE_NODES
= "offline_nodes"
2001 SS_ONLINE_NODES
= "online_nodes"
2002 SS_PRIMARY_IP_FAMILY
= "primary_ip_family"
2003 SS_INSTANCE_LIST
= "instance_list"
2004 SS_RELEASE_VERSION
= "release_version"
2005 SS_HYPERVISOR_LIST
= "hypervisor_list"
2006 SS_MAINTAIN_NODE_HEALTH
= "maintain_node_health"
2007 SS_UID_POOL
= "uid_pool"
2008 SS_NODEGROUPS
= "nodegroups"
2009 SS_NETWORKS
= "networks"
2011 SS_FILE_PERMS
= 0444
2013 # cluster wide default parameters
2014 DEFAULT_ENABLED_HYPERVISOR
= HT_XEN_PVM
2018 HV_USE_BOOTLOADER
: False,
2019 HV_BOOTLOADER_PATH
: XEN_BOOTLOADER
,
2020 HV_BOOTLOADER_ARGS
: "",
2021 HV_KERNEL_PATH
: XEN_KERNEL
,
2023 HV_ROOT_PATH
: "/dev/xvda1",
2024 HV_KERNEL_ARGS
: "ro",
2025 HV_MIGRATION_PORT
: 8002,
2026 HV_MIGRATION_MODE
: HT_MIGRATION_LIVE
,
2027 HV_BLOCKDEV_PREFIX
: "sd",
2028 HV_REBOOT_BEHAVIOR
: INSTANCE_REBOOT_ALLOWED
,
2029 HV_CPU_MASK
: CPU_PINNING_ALL
,
2034 HV_BOOT_ORDER
: "cd",
2035 HV_CDROM_IMAGE_PATH
: "",
2036 HV_NIC_TYPE
: HT_NIC_RTL8139
,
2037 HV_DISK_TYPE
: HT_DISK_PARAVIRTUAL
,
2038 HV_VNC_BIND_ADDRESS
: IP4_ADDRESS_ANY
,
2039 HV_VNC_PASSWORD_FILE
: pathutils
.VNC_PASSWORD_FILE
,
2042 HV_KERNEL_PATH
: "/usr/lib/xen/boot/hvmloader",
2043 HV_DEVICE_MODEL
: "/usr/lib/xen/bin/qemu-dm",
2044 HV_MIGRATION_PORT
: 8002,
2045 HV_MIGRATION_MODE
: HT_MIGRATION_NONLIVE
,
2046 HV_USE_LOCALTIME
: False,
2047 HV_BLOCKDEV_PREFIX
: "hd",
2049 HV_REBOOT_BEHAVIOR
: INSTANCE_REBOOT_ALLOWED
,
2050 HV_CPU_MASK
: CPU_PINNING_ALL
,
2053 HV_VIF_TYPE
: HT_HVM_VIF_IOEMU
,
2057 HV_KVM_PATH
: KVM_PATH
,
2058 HV_KERNEL_PATH
: KVM_KERNEL
,
2060 HV_KERNEL_ARGS
: "ro",
2061 HV_ROOT_PATH
: "/dev/vda1",
2063 HV_SERIAL_CONSOLE
: True,
2064 HV_SERIAL_SPEED
: 38400,
2065 HV_VNC_BIND_ADDRESS
: "",
2068 HV_VNC_X509_VERIFY
: False,
2069 HV_VNC_PASSWORD_FILE
: "",
2070 HV_KVM_SPICE_BIND
: "",
2071 HV_KVM_SPICE_IP_VERSION
: IFACE_NO_IP_VERSION_SPECIFIED
,
2072 HV_KVM_SPICE_PASSWORD_FILE
: "",
2073 HV_KVM_SPICE_LOSSLESS_IMG_COMPR
: "",
2074 HV_KVM_SPICE_JPEG_IMG_COMPR
: "",
2075 HV_KVM_SPICE_ZLIB_GLZ_IMG_COMPR
: "",
2076 HV_KVM_SPICE_STREAMING_VIDEO_DETECTION
: "",
2077 HV_KVM_SPICE_AUDIO_COMPR
: True,
2078 HV_KVM_SPICE_USE_TLS
: False,
2079 HV_KVM_SPICE_TLS_CIPHERS
: OPENSSL_CIPHERS
,
2080 HV_KVM_SPICE_USE_VDAGENT
: True,
2081 HV_KVM_FLOPPY_IMAGE_PATH
: "",
2082 HV_CDROM_IMAGE_PATH
: "",
2083 HV_KVM_CDROM2_IMAGE_PATH
: "",
2084 HV_BOOT_ORDER
: HT_BO_DISK
,
2085 HV_NIC_TYPE
: HT_NIC_PARAVIRTUAL
,
2086 HV_DISK_TYPE
: HT_DISK_PARAVIRTUAL
,
2087 HV_KVM_CDROM_DISK_TYPE
: "",
2090 HV_MIGRATION_PORT
: 8102,
2091 HV_MIGRATION_BANDWIDTH
: 32, # MiB/s
2092 HV_MIGRATION_DOWNTIME
: 30, # ms
2093 HV_MIGRATION_MODE
: HT_MIGRATION_LIVE
,
2094 HV_USE_LOCALTIME
: False,
2095 HV_DISK_CACHE
: HT_CACHE_DEFAULT
,
2096 HV_SECURITY_MODEL
: HT_SM_NONE
,
2097 HV_SECURITY_DOMAIN
: "",
2099 HV_VHOST_NET
: False,
2100 HV_KVM_USE_CHROOT
: False,
2102 HV_REBOOT_BEHAVIOR
: INSTANCE_REBOOT_ALLOWED
,
2103 HV_CPU_MASK
: CPU_PINNING_ALL
,
2112 HV_KVM_MACHINE_VERSION
: "",
2117 HV_INIT_SCRIPT
: "/ganeti-chroot",
2124 HVC_GLOBALS
= compat
.UniqueFrozenset([
2126 HV_MIGRATION_BANDWIDTH
,
2134 BE_AUTO_BALANCE
: True,
2135 BE_ALWAYS_FAILOVER
: False,
2141 ND_SPINDLE_COUNT
: 1,
2142 ND_EXCLUSIVE_STORAGE
: False,
2145 NDC_GLOBALS
= compat
.UniqueFrozenset([
2146 ND_EXCLUSIVE_STORAGE
,
2149 DISK_LD_DEFAULTS
= {
2151 LDP_RESYNC_RATE
: CLASSIC_DRBD_SYNC_SPEED
,
2152 LDP_BARRIERS
: _autoconf
.DRBD_BARRIERS
,
2153 LDP_NO_META_FLUSH
: _autoconf
.DRBD_NO_META_FLUSH
,
2154 LDP_DEFAULT_METAVG
: DEFAULT_VG
,
2155 LDP_DISK_CUSTOM
: "",
2157 LDP_DYNAMIC_RESYNC
: False,
2159 # The default values for the DRBD dynamic resync speed algorithm
2160 # are taken from the drbsetup 8.3.11 man page, except for
2161 # c-plan-ahead (that we don't need to set to 0, because we have a
2162 # separate option to enable it) and for c-max-rate, that we cap to
2163 # the default value for the static resync rate.
2164 LDP_PLAN_AHEAD
: 20, # ds
2165 LDP_FILL_TARGET
: 0, # sectors
2166 LDP_DELAY_TARGET
: 1, # ds
2167 LDP_MAX_RATE
: CLASSIC_DRBD_SYNC_SPEED
, # KiB/s
2168 LDP_MIN_RATE
: 4 * 1024, # KiB/s
2171 LDP_STRIPES
: _autoconf
.LVM_STRIPECOUNT
2181 # readability shortcuts
2182 _LV_DEFAULTS
= DISK_LD_DEFAULTS
[LD_LV
]
2183 _DRBD_DEFAULTS
= DISK_LD_DEFAULTS
[LD_DRBD8
]
2185 DISK_DT_DEFAULTS
= {
2187 LV_STRIPES
: DISK_LD_DEFAULTS
[LD_LV
][LDP_STRIPES
],
2190 DRBD_RESYNC_RATE
: _DRBD_DEFAULTS
[LDP_RESYNC_RATE
],
2191 DRBD_DATA_STRIPES
: _LV_DEFAULTS
[LDP_STRIPES
],
2192 DRBD_META_STRIPES
: _LV_DEFAULTS
[LDP_STRIPES
],
2193 DRBD_DISK_BARRIERS
: _DRBD_DEFAULTS
[LDP_BARRIERS
],
2194 DRBD_META_BARRIERS
: _DRBD_DEFAULTS
[LDP_NO_META_FLUSH
],
2195 DRBD_DEFAULT_METAVG
: _DRBD_DEFAULTS
[LDP_DEFAULT_METAVG
],
2196 DRBD_DISK_CUSTOM
: _DRBD_DEFAULTS
[LDP_DISK_CUSTOM
],
2197 DRBD_NET_CUSTOM
: _DRBD_DEFAULTS
[LDP_NET_CUSTOM
],
2198 DRBD_DYNAMIC_RESYNC
: _DRBD_DEFAULTS
[LDP_DYNAMIC_RESYNC
],
2199 DRBD_PLAN_AHEAD
: _DRBD_DEFAULTS
[LDP_PLAN_AHEAD
],
2200 DRBD_FILL_TARGET
: _DRBD_DEFAULTS
[LDP_FILL_TARGET
],
2201 DRBD_DELAY_TARGET
: _DRBD_DEFAULTS
[LDP_DELAY_TARGET
],
2202 DRBD_MAX_RATE
: _DRBD_DEFAULTS
[LDP_MAX_RATE
],
2203 DRBD_MIN_RATE
: _DRBD_DEFAULTS
[LDP_MIN_RATE
],
2210 RBD_POOL
: DISK_LD_DEFAULTS
[LD_RBD
][LDP_POOL
]
2215 # we don't want to export the shortcuts
2216 del _LV_DEFAULTS
, _DRBD_DEFAULTS
2219 NIC_MODE
: NIC_MODE_BRIDGED
,
2220 NIC_LINK
: DEFAULT_BRIDGE
,
2223 # All of the following values are quite arbitrarily - there are no
2224 # "good" defaults, these must be customised per-site
2225 ISPECS_MINMAX_DEFAULTS
= {
2227 ISPEC_MEM_SIZE
: 128,
2229 ISPEC_DISK_COUNT
: 1,
2230 ISPEC_DISK_SIZE
: 1024,
2232 ISPEC_SPINDLE_USE
: 1,
2235 ISPEC_MEM_SIZE
: 32768,
2237 ISPEC_DISK_COUNT
: MAX_DISKS
,
2238 ISPEC_DISK_SIZE
: 1024 * 1024,
2239 ISPEC_NIC_COUNT
: MAX_NICS
,
2240 ISPEC_SPINDLE_USE
: 12,
2243 IPOLICY_DEFAULTS
= {
2244 ISPECS_MINMAX
: [ISPECS_MINMAX_DEFAULTS
],
2246 ISPEC_MEM_SIZE
: 128,
2248 ISPEC_DISK_COUNT
: 1,
2249 ISPEC_DISK_SIZE
: 1024,
2251 ISPEC_SPINDLE_USE
: 1,
2253 IPOLICY_DTS
: list(DISK_TEMPLATES
),
2254 IPOLICY_VCPU_RATIO
: 4.0,
2255 IPOLICY_SPINDLE_RATIO
: 32.0,
2258 MASTER_POOL_SIZE_DEFAULT
= 10
2260 # Exclusive storage:
2261 # Error margin used to compare physical disks
2263 # Space reserved when creating instance disks
2266 CONFD_PROTOCOL_VERSION
= 1
2269 CONFD_REQ_NODE_ROLE_BYNAME
= 1
2270 CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
= 2
2271 CONFD_REQ_CLUSTER_MASTER
= 3
2272 CONFD_REQ_NODE_PIP_LIST
= 4
2273 CONFD_REQ_MC_PIP_LIST
= 5
2274 CONFD_REQ_INSTANCES_IPS_LIST
= 6
2275 CONFD_REQ_NODE_DRBD
= 7
2276 CONFD_REQ_NODE_INSTANCES
= 8
2278 # Confd request query fields. These are used to narrow down queries.
2279 # These must be strings rather than integers, because json-encoding
2280 # converts them to strings anyway, as they're used as dict-keys.
2281 CONFD_REQQ_LINK
= "0"
2283 CONFD_REQQ_IPLIST
= "2"
2284 CONFD_REQQ_FIELDS
= "3"
2286 CONFD_REQFIELD_NAME
= "0"
2287 CONFD_REQFIELD_IP
= "1"
2288 CONFD_REQFIELD_MNODE_PIP
= "2"
2290 CONFD_REQS
= compat
.UniqueFrozenset([
2292 CONFD_REQ_NODE_ROLE_BYNAME
,
2293 CONFD_REQ_NODE_PIP_BY_INSTANCE_IP
,
2294 CONFD_REQ_CLUSTER_MASTER
,
2295 CONFD_REQ_NODE_PIP_LIST
,
2296 CONFD_REQ_MC_PIP_LIST
,
2297 CONFD_REQ_INSTANCES_IPS_LIST
,
2298 CONFD_REQ_NODE_DRBD
,
2301 CONFD_REPL_STATUS_OK
= 0
2302 CONFD_REPL_STATUS_ERROR
= 1
2303 CONFD_REPL_STATUS_NOTIMPLEMENTED
= 2
2305 CONFD_REPL_STATUSES
= compat
.UniqueFrozenset([
2306 CONFD_REPL_STATUS_OK
,
2307 CONFD_REPL_STATUS_ERROR
,
2308 CONFD_REPL_STATUS_NOTIMPLEMENTED
,
2311 (CONFD_NODE_ROLE_MASTER
,
2312 CONFD_NODE_ROLE_CANDIDATE
,
2313 CONFD_NODE_ROLE_OFFLINE
,
2314 CONFD_NODE_ROLE_DRAINED
,
2315 CONFD_NODE_ROLE_REGULAR
,
2318 # A few common errors for confd
2319 CONFD_ERROR_UNKNOWN_ENTRY
= 1
2320 CONFD_ERROR_INTERNAL
= 2
2321 CONFD_ERROR_ARGUMENT
= 3
2323 # Each request is "salted" by the current timestamp.
2324 # This constants decides how many seconds of skew to accept.
2325 # TODO: make this a default and allow the value to be more configurable
2326 CONFD_MAX_CLOCK_SKEW
= 2 * NODE_MAX_CLOCK_SKEW
2328 # When we haven't reloaded the config for more than this amount of
2329 # seconds, we force a test to see if inotify is betraying us. Using a
2330 # prime number to ensure we get less chance of 'same wakeup' with
2332 CONFD_CONFIG_RELOAD_TIMEOUT
= 17
2334 # If we receive more than one update in this amount of microseconds,
2335 # we move to polling every RATELIMIT seconds, rather than relying on
2336 # inotify, to be able to serve more requests.
2337 CONFD_CONFIG_RELOAD_RATELIMIT
= 250000
2339 # Magic number prepended to all confd queries.
2340 # This allows us to distinguish different types of confd protocols and handle
2341 # them. For example by changing this we can move the whole payload to be
2342 # compressed, or move away from json.
2343 CONFD_MAGIC_FOURCC
= "plj0"
2345 # By default a confd request is sent to the minimum between this number and all
2346 # MCs. 6 was chosen because even in the case of a disastrous 50% response rate,
2347 # we should have enough answers to be able to compare more than one.
2348 CONFD_DEFAULT_REQ_COVERAGE
= 6
2350 # Timeout in seconds to expire pending query request in the confd client
2351 # library. We don't actually expect any answer more than 10 seconds after we
2353 CONFD_CLIENT_EXPIRE_TIMEOUT
= 10
2355 # Maximum UDP datagram size.
2356 # On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
2357 # On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
2358 # (assuming we can't use jumbo frames)
2359 # We just set this to 60K, which should be enough
2360 MAX_UDP_DATA_SIZE
= 61440
2362 # User-id pool minimum/maximum acceptable user-ids.
2364 UIDPOOL_UID_MAX
= 2 ** 32 - 1 # Assuming 32 bit user-ids
2366 # Name or path of the pgrep command
2369 # Name of the node group that gets created at cluster init or upgrade
2370 INITIAL_NODE_GROUP_NAME
= "default"
2372 # Possible values for NodeGroup.alloc_policy
2373 ALLOC_POLICY_PREFERRED
= "preferred"
2374 ALLOC_POLICY_LAST_RESORT
= "last_resort"
2375 ALLOC_POLICY_UNALLOCABLE
= "unallocable"
2376 VALID_ALLOC_POLICIES
= [
2377 ALLOC_POLICY_PREFERRED
,
2378 ALLOC_POLICY_LAST_RESORT
,
2379 ALLOC_POLICY_UNALLOCABLE
,
2382 # Temporary external/shared storage parameters
2383 BLOCKDEV_DRIVER_MANUAL
= "manual"
2385 # qemu-img path, required for ovfconverter
2386 QEMUIMG_PATH
= _autoconf
.QEMUIMG_PATH
2388 # Whether htools was enabled at compilation time
2389 HTOOLS
= _autoconf
.HTOOLS
2390 # The hail iallocator
2391 IALLOC_HAIL
= "hail"
2393 # Fake opcodes for functions that have hooks attached to them via
2394 # backend.RunLocalHooks
2395 FAKE_OP_MASTER_TURNUP
= "OP_CLUSTER_IP_TURNUP"
2396 FAKE_OP_MASTER_TURNDOWN
= "OP_CLUSTER_IP_TURNDOWN"
2401 SSHK_ALL
= compat
.UniqueFrozenset([SSHK_RSA
, SSHK_DSA
])
2403 # SSH authorized key types
2404 SSHAK_RSA
= "ssh-rsa"
2405 SSHAK_DSS
= "ssh-dss"
2406 SSHAK_ALL
= compat
.UniqueFrozenset([SSHAK_RSA
, SSHAK_DSS
])
2409 SSHS_CLUSTER_NAME
= "cluster_name"
2410 SSHS_SSH_HOST_KEY
= "ssh_host_key"
2411 SSHS_SSH_ROOT_KEY
= "ssh_root_key"
2412 SSHS_NODE_DAEMON_CERTIFICATE
= "node_daemon_certificate"
2414 #: Key files for SSH daemon
2415 SSH_DAEMON_KEYFILES
= {
2416 SSHK_RSA
: (pathutils
.SSH_HOST_RSA_PRIV
, pathutils
.SSH_HOST_RSA_PUB
),
2417 SSHK_DSA
: (pathutils
.SSH_HOST_DSA_PRIV
, pathutils
.SSH_HOST_DSA_PUB
),
2421 NDS_CLUSTER_NAME
= "cluster_name"
2422 NDS_NODE_DAEMON_CERTIFICATE
= "node_daemon_certificate"
2423 NDS_SSCONF
= "ssconf"
2424 NDS_START_NODE_DAEMON
= "start_node_daemon"
2426 # Path generating random UUID
2427 RANDOM_UUID_FILE
= "/proc/sys/kernel/random/uuid"
2429 # Regex string for verifying a UUID
2430 UUID_REGEX
= "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
2432 # Auto-repair tag prefixes
2433 AUTO_REPAIR_TAG_PREFIX
= "ganeti:watcher:autorepair:"
2434 AUTO_REPAIR_TAG_ENABLED
= AUTO_REPAIR_TAG_PREFIX
2435 AUTO_REPAIR_TAG_SUSPENDED
= AUTO_REPAIR_TAG_ENABLED
+ "suspend:"
2436 AUTO_REPAIR_TAG_PENDING
= AUTO_REPAIR_TAG_PREFIX
+ "pending:"
2437 AUTO_REPAIR_TAG_RESULT
= AUTO_REPAIR_TAG_PREFIX
+ "result:"
2439 # Auto-repair levels
2440 AUTO_REPAIR_FIX_STORAGE
= "fix-storage"
2441 AUTO_REPAIR_MIGRATE
= "migrate"
2442 AUTO_REPAIR_FAILOVER
= "failover"
2443 AUTO_REPAIR_REINSTALL
= "reinstall"
2444 AUTO_REPAIR_ALL_TYPES
= [
2445 AUTO_REPAIR_FIX_STORAGE
,
2446 AUTO_REPAIR_MIGRATE
,
2447 AUTO_REPAIR_FAILOVER
,
2448 AUTO_REPAIR_REINSTALL
,
2451 # Auto-repair results
2452 AUTO_REPAIR_SUCCESS
= "success"
2453 AUTO_REPAIR_FAILURE
= "failure"
2454 AUTO_REPAIR_ENOPERM
= "enoperm"
2455 AUTO_REPAIR_ALL_RESULTS
= frozenset([
2456 AUTO_REPAIR_SUCCESS
,
2457 AUTO_REPAIR_FAILURE
,
2458 AUTO_REPAIR_ENOPERM
,
2461 # The version identifier for builtin data collectors
2462 BUILTIN_DATA_COLLECTOR_VERSION
= "B"
2464 # The reason trail opcode parameter name
2465 OPCODE_REASON
= "reason"
2467 # The source reasons for the execution of an OpCode
2468 OPCODE_REASON_SRC_CLIENT
= "gnt:client"
2469 OPCODE_REASON_SRC_NODED
= "gnt:daemon:noded"
2470 OPCODE_REASON_SRC_OPCODE
= "gnt:opcode"
2471 OPCODE_REASON_SRC_RLIB2
= "gnt:library:rlib2"
2472 OPCODE_REASON_SRC_USER
= "gnt:user"
2474 OPCODE_REASON_SOURCES
= compat
.UniqueFrozenset([
2475 OPCODE_REASON_SRC_CLIENT
,
2476 OPCODE_REASON_SRC_NODED
,
2477 OPCODE_REASON_SRC_OPCODE
,
2478 OPCODE_REASON_SRC_RLIB2
,
2479 OPCODE_REASON_SRC_USER
,
2482 # Do not re-export imported modules
2483 del re
, _vcsversion
, _autoconf
, socket
, pathutils
, compat