1 {-| HsConstants contains the Haskell constants
3 This is a transitional module complementary to 'Ganeti.Constants'. It
4 is intended to contain the Haskell constants that are meant to be
7 Do not write any definitions in this file other than constants. Do
8 not even write helper functions. The definitions in this module are
9 automatically stripped to build the Makefile.am target
10 'ListConstants.hs'. If there are helper functions in this module,
11 they will also be dragged and it will cause compilation to fail.
12 Therefore, all helper functions should go to a separate module and
19 Copyright (C) 2013 Google Inc.
21 This program is free software; you can redistribute it and/or modify
22 it under the terms of the GNU General Public License as published by
23 the Free Software Foundation; either version 2 of the License, or
24 (at your option) any later version.
26 This program is distributed in the hope that it will be useful, but
27 WITHOUT ANY WARRANTY; without even the implied warranty of
28 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
29 General Public License for more details.
31 You should have received a copy of the GNU General Public License
32 along with this program; if not, write to the Free Software
33 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
37 module Ganeti.HsConstants where
39 import Control.Arrow ((***))
40 import Data.List ((\\))
42 import qualified Data.Map as Map (fromList, keys, insert)
45 import Ganeti.ConstantUtils (PythonChar(..), FrozenSet, Protocol(..),
47 import qualified Ganeti.ConstantUtils as ConstantUtils
48 import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..),
50 import Ganeti.HTools.Types (AutoRepairResult(..), AutoRepairType(..))
51 import qualified Ganeti.HTools.Types as Types
52 import Ganeti.Logging (SyslogUsage(..))
53 import qualified Ganeti.Logging as Logging (syslogUsageToRaw)
54 import qualified Ganeti.Runtime as Runtime
56 import qualified Ganeti.Types as Types
57 import Ganeti.Confd.Types (ConfdRequestType(..), ConfdReqField(..),
58 ConfdReplyStatus(..), ConfdNodeRole(..),
60 import qualified Ganeti.Confd.Types as Types
62 {-# ANN module "HLint: ignore Use camelCase" #-}
64 -- * 'autoconf' constants for Python only ('autotools/build-bash-completion')
66 htoolsProgs :: [String]
67 htoolsProgs = AutoConf.htoolsProgs
69 -- * 'autoconf' constants for Python only ('lib/constants.py')
71 drbdBarriers :: String
72 drbdBarriers = AutoConf.drbdBarriers
74 drbdNoMetaFlush :: Bool
75 drbdNoMetaFlush = AutoConf.drbdNoMetaFlush
78 lvmStripecount = AutoConf.lvmStripecount
80 -- * 'autoconf' constants for Python only ('lib/pathutils.py')
82 -- ** Build-time constants
85 exportDir = AutoConf.exportDir
87 osSearchPath :: [String]
88 osSearchPath = AutoConf.osSearchPath
90 esSearchPath :: [String]
91 esSearchPath = AutoConf.esSearchPath
93 sshConfigDir :: String
94 sshConfigDir = AutoConf.sshConfigDir
96 xenConfigDir :: String
97 xenConfigDir = AutoConf.xenConfigDir
100 sysconfdir = AutoConf.sysconfdir
103 toolsdir = AutoConf.toolsdir
105 localstatedir :: String
106 localstatedir = AutoConf.localstatedir
108 -- ** Paths which don't change for a virtual cluster
111 pkglibdir = AutoConf.pkglibdir
114 sharedir = AutoConf.sharedir
116 -- * 'autoconf' constants for Python only ('lib/build/sphinx_ext.py')
118 manPages :: Map String Int
119 manPages = Map.fromList AutoConf.manPages
121 -- * 'autoconf' constants for QA cluster only ('qa/qa_cluster.py')
123 versionedsharedir :: String
124 versionedsharedir = AutoConf.versionedsharedir
126 -- * 'autoconf' constants for Python only ('tests/py/docs_unittest.py')
128 gntScripts :: [String]
129 gntScripts = AutoConf.gntScripts
131 -- * Various versions
133 releaseVersion :: String
134 releaseVersion = AutoConf.packageVersion
137 versionMajor = AutoConf.versionMajor
140 versionMinor = AutoConf.versionMinor
142 versionRevision :: Int
143 versionRevision = AutoConf.versionRevision
146 dirVersion = AutoConf.dirVersion
157 osApiVersions :: FrozenSet Int
158 osApiVersions = ConstantUtils.mkSet [osApiV10, osApiV15, osApiV20]
167 configMajor = AutoConf.versionMajor
170 configMinor = AutoConf.versionMinor
172 -- | The configuration is supposed to remain stable across
173 -- revisions. Therefore, the revision number is cleared to '0'.
174 configRevision :: Int
178 configVersion = buildVersion configMajor configMinor configRevision
180 -- | Similarly to the configuration (see 'configRevision'), the
181 -- protocols are supposed to remain stable across revisions.
182 protocolVersion :: Int
183 protocolVersion = buildVersion configMajor configMinor configRevision
187 daemonsGroup :: String
188 daemonsGroup = Runtime.daemonGroup (ExtraGroup DaemonsGroup)
191 adminGroup = Runtime.daemonGroup (ExtraGroup AdminGroup)
193 masterdUser :: String
194 masterdUser = Runtime.daemonUser GanetiMasterd
196 masterdGroup :: String
197 masterdGroup = Runtime.daemonGroup (DaemonGroup GanetiMasterd)
200 rapiUser = Runtime.daemonUser GanetiRapi
203 rapiGroup = Runtime.daemonGroup (DaemonGroup GanetiRapi)
206 confdUser = Runtime.daemonUser GanetiConfd
209 confdGroup = Runtime.daemonGroup (DaemonGroup GanetiConfd)
212 luxidUser = Runtime.daemonUser GanetiLuxid
215 luxidGroup = Runtime.daemonGroup (DaemonGroup GanetiLuxid)
218 nodedUser = Runtime.daemonUser GanetiNoded
221 nodedGroup = Runtime.daemonGroup (DaemonGroup GanetiNoded)
224 mondUser = Runtime.daemonUser GanetiMond
227 mondGroup = Runtime.daemonGroup (DaemonGroup GanetiMond)
229 sshLoginUser :: String
230 sshLoginUser = AutoConf.sshLoginUser
232 sshConsoleUser :: String
233 sshConsoleUser = AutoConf.sshConsoleUser
235 -- * Cpu pinning separators and constants
237 cpuPinningSep :: String
240 cpuPinningAll :: String
241 cpuPinningAll = "all"
243 -- | Internal representation of "all"
244 cpuPinningAllVal :: Int
245 cpuPinningAllVal = -1
247 -- | One "all" entry in a CPU list means CPU pinning is off
248 cpuPinningOff :: [Int]
249 cpuPinningOff = [cpuPinningAllVal]
251 -- | A Xen-specific implementation detail is that there is no way to
252 -- actually say "use any cpu for pinning" in a Xen configuration file,
253 -- as opposed to the command line, where you can say
255 -- xm vcpu-pin <domain> <vcpu> all
258 -- The workaround used in Xen is "0-63" (see source code function
259 -- "xm_vcpu_pin" in @<xen-source>/tools/python/xen/xm/main.py@).
261 -- To support future changes, the following constant is treated as a
262 -- blackbox string that simply means "use any cpu for pinning under
264 cpuPinningAllXen :: String
265 cpuPinningAllXen = "0-63"
267 -- | A KVM-specific implementation detail - the following value is
268 -- used to set CPU affinity to all processors (--0 through --31), per
271 -- FIXME: This only works for machines with up to 32 CPU cores
272 cpuPinningAllKvm :: Int
273 cpuPinningAllKvm = 0xFFFFFFFF
284 minWipeChunkPercent :: Int
285 minWipeChunkPercent = 10
293 secureDirMode = 0o700
295 secureFileMode :: Int
296 secureFileMode = 0o600
298 adoptableBlockdevRoot :: String
299 adoptableBlockdevRoot = "/dev/disk/"
301 -- * 'autoconf' enable/disable
304 enableConfd = AutoConf.enableConfd
307 enableMond = AutoConf.enableMond
309 enableRestrictedCommands :: Bool
310 enableRestrictedCommands = AutoConf.enableRestrictedCommands
312 enableSplitQuery :: Bool
313 enableSplitQuery = AutoConf.enableSplitQuery
326 confd = Runtime.daemonName GanetiConfd
329 masterd = Runtime.daemonName GanetiMasterd
332 mond = Runtime.daemonName GanetiMond
335 noded = Runtime.daemonName GanetiNoded
338 luxid = Runtime.daemonName GanetiLuxid
341 rapi = Runtime.daemonName GanetiRapi
343 daemons :: FrozenSet String
345 ConstantUtils.mkSet [confd,
352 defaultConfdPort :: Int
353 defaultConfdPort = 1814
355 defaultMondPort :: Int
356 defaultMondPort = 1815
358 defaultNodedPort :: Int
359 defaultNodedPort = 1811
361 defaultRapiPort :: Int
362 defaultRapiPort = 5080
364 daemonsPorts :: Map String (Protocol, Int)
366 Map.fromList [(confd, (Udp, defaultConfdPort)),
367 (mond, (Tcp, defaultMondPort)),
368 (noded, (Tcp, defaultNodedPort)),
369 (rapi, (Tcp, defaultRapiPort)),
373 firstDrbdPort = 11000
378 daemonsLogbase :: Map String String
381 [ (Runtime.daemonName d, Runtime.daemonLogBase d) | d <- [minBound..] ]
383 extraLogreasonAccess :: String
384 extraLogreasonAccess = Runtime.daemonsExtraLogbase GanetiMond AccessLog
386 extraLogreasonError :: String
387 extraLogreasonError = Runtime.daemonsExtraLogbase GanetiMond ErrorLog
390 devConsole = ConstantUtils.devConsole
393 procMounts = "/proc/mounts"
395 -- * Luxi (Local UniX Interface) related constants
397 luxiEom :: PythonChar
398 luxiEom = PythonChar '\x03'
400 -- | Environment variable for the luxi override socket
401 luxiOverride :: String
402 luxiOverride = "FORCE_LUXI_SOCKET"
404 luxiOverrideMaster :: String
405 luxiOverrideMaster = "master"
407 luxiOverrideQuery :: String
408 luxiOverrideQuery = "query"
411 luxiVersion = configVersion
415 syslogUsage :: String
416 syslogUsage = AutoConf.syslogUsage
419 syslogNo = Logging.syslogUsageToRaw SyslogNo
422 syslogYes = Logging.syslogUsageToRaw SyslogYes
425 syslogOnly = Logging.syslogUsageToRaw SyslogOnly
427 syslogSocket :: String
428 syslogSocket = "/dev/log"
430 exportConfFile :: String
431 exportConfFile = "config.ini"
435 xenBootloader :: String
436 xenBootloader = AutoConf.xenBootloader
445 xenInitrd = AutoConf.xenInitrd
448 xenKernel = AutoConf.xenKernel
450 -- FIXME: perhaps rename to 'validXenCommands' for consistency with
452 knownXenCommands :: FrozenSet String
453 knownXenCommands = ConstantUtils.mkSet [xenCmdXl, xenCmdXm]
458 kvmPath = AutoConf.kvmPath
461 kvmKernel = AutoConf.kvmKernel
463 socatEscapeCode :: String
464 socatEscapeCode = "0x1d"
467 socatPath = AutoConf.socatPath
469 socatUseCompress :: Bool
470 socatUseCompress = AutoConf.socatUseCompress
472 socatUseEscape :: Bool
473 socatUseEscape = AutoConf.socatUseEscape
477 -- | Display a message for console access
478 consMessage :: String
481 -- | Console as SPICE server
485 -- | Console as SSH command
489 -- | Console as VNC server
493 consAll :: FrozenSet String
494 consAll = ConstantUtils.mkSet [consMessage, consSpice, consSsh, consVnc]
496 -- | RSA key bit length
498 -- For RSA keys more bits are better, but they also make operations
499 -- more expensive. NIST SP 800-131 recommends a minimum of 2048 bits
500 -- from the year 2010 on.
504 -- | Ciphers allowed for SSL connections.
506 -- For the format, see ciphers(1). A better way to disable ciphers
507 -- would be to use the exclamation mark (!), but socat versions below
508 -- 1.5 can't parse exclamation marks in options properly. When
509 -- modifying the ciphers, ensure not to accidentially add something
510 -- after it's been removed. Use the "openssl" utility to check the
511 -- allowed ciphers, e.g. "openssl ciphers -v HIGH:-DES".
512 opensslCiphers :: String
513 opensslCiphers = "HIGH:-DES:-3DES:-EXPORT:-ADH"
517 -- | commonName (CN) used in certificates
519 x509CertCn = "ganeti.example.com"
521 -- | Default validity of certificates in days
522 x509CertDefaultValidity :: Int
523 x509CertDefaultValidity = 365 * 5
525 x509CertSignatureHeader :: String
526 x509CertSignatureHeader = "X-Ganeti-Signature"
528 -- | Digest used to sign certificates ("openssl x509" uses SHA1 by default)
529 x509CertSignDigest :: String
530 x509CertSignDigest = "SHA1"
532 -- * Import/export daemon mode
540 -- * Import/export transport compression
549 iecAll = [iecGzip, iecNone]
551 ieCustomSize :: String
554 -- * Import/export I/O
556 -- | Direct file I/O, equivalent to a shell's I/O redirection using
561 -- | Raw block device I/O using "dd"
562 ieioRawDisk :: String
565 -- | OS definition import/export script
567 ieioScript = "script"
571 hooksNameCfgupdate :: String
572 hooksNameCfgupdate = "config-update"
574 hooksNameWatcher :: String
575 hooksNameWatcher = "watcher"
578 hooksPath = "/sbin:/bin:/usr/sbin:/usr/bin"
580 hooksPhasePost :: String
581 hooksPhasePost = "post"
583 hooksPhasePre :: String
584 hooksPhasePre = "pre"
589 -- * Hooks subject type (what object type does the LU deal with)
591 htypeCluster :: String
592 htypeCluster = "CLUSTER"
597 htypeInstance :: String
598 htypeInstance = "INSTANCE"
600 htypeNetwork :: String
601 htypeNetwork = "NETWORK"
620 stBlock = Types.storageTypeToRaw StorageBlock
623 stDiskless = Types.storageTypeToRaw StorageDiskless
626 stExt = Types.storageTypeToRaw StorageExt
629 stFile = Types.storageTypeToRaw StorageFile
632 stLvmPv = Types.storageTypeToRaw StorageLvmPv
635 stLvmVg = Types.storageTypeToRaw StorageLvmVg
638 stRados = Types.storageTypeToRaw StorageRados
640 storageTypes :: FrozenSet String
641 storageTypes = ConstantUtils.mkSet $ map Types.storageTypeToRaw [minBound..]
643 -- | The set of storage types for which storage reporting is available
645 -- FIXME: Remove this, once storage reporting is available for all
647 stsReport :: FrozenSet String
648 stsReport = ConstantUtils.mkSet [stFile, stLvmPv, stLvmVg]
651 -- ** First two are valid in LU context only, not passed to backend
659 -- ** and the rest are valid in backend
661 sfAllocatable :: String
662 sfAllocatable = Types.storageFieldToRaw SFAllocatable
665 sfFree = Types.storageFieldToRaw SFFree
668 sfName = Types.storageFieldToRaw SFName
671 sfSize = Types.storageFieldToRaw SFSize
674 sfUsed = Types.storageFieldToRaw SFUsed
676 validStorageFields :: FrozenSet String
678 ConstantUtils.mkSet $ map Types.storageFieldToRaw [minBound..] ++
681 modifiableStorageFields :: Map String (FrozenSet String)
682 modifiableStorageFields =
683 Map.fromList [(Types.storageTypeToRaw StorageLvmPv,
684 ConstantUtils.mkSet [sfAllocatable])]
686 -- * Storage operations
688 soFixConsistency :: String
689 soFixConsistency = "fix-consistency"
691 validStorageOperations :: Map String (FrozenSet String)
692 validStorageOperations =
693 Map.fromList [(Types.storageTypeToRaw StorageLvmVg,
694 ConstantUtils.mkSet [soFixConsistency])]
702 vfInstance = "instance"
719 -- * Local disk status
722 ldsFaulty = Types.localDiskStatusToRaw DiskStatusFaulty
725 ldsOkay = Types.localDiskStatusToRaw DiskStatusOk
728 ldsUnknown = Types.localDiskStatusToRaw DiskStatusUnknown
730 ldsNames :: Map Int String
732 Map.fromList [ (Types.localDiskStatusToRaw ds,
733 localDiskStatusName ds) | ds <- [minBound..] ]
735 -- * Disk template types
738 dtDiskless = Types.diskTemplateToRaw DTDiskless
741 dtFile = Types.diskTemplateToRaw DTFile
743 dtSharedFile :: String
744 dtSharedFile = Types.diskTemplateToRaw DTSharedFile
747 dtPlain = Types.diskTemplateToRaw DTPlain
750 dtBlock = Types.diskTemplateToRaw DTBlock
753 dtDrbd8 = Types.diskTemplateToRaw DTDrbd8
756 dtRbd = Types.diskTemplateToRaw DTRbd
759 dtExt = Types.diskTemplateToRaw DTExt
761 -- | This is used to order determine the default disk template when
762 -- the list of enabled disk templates is inferred from the current
763 -- state of the cluster. This only happens on an upgrade from a
764 -- version of Ganeti that did not support the 'enabled_disk_templates'
766 diskTemplatePreference :: [String]
767 diskTemplatePreference =
768 map Types.diskTemplateToRaw
769 [DTBlock, DTDiskless, DTDrbd8, DTExt, DTFile, DTPlain, DTRbd, DTSharedFile]
771 diskTemplates :: FrozenSet String
772 diskTemplates = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [minBound..]
774 -- | Disk templates that are enabled by default
775 defaultEnabledDiskTemplates :: [String]
776 defaultEnabledDiskTemplates = map Types.diskTemplateToRaw [DTDrbd8, DTPlain]
778 -- | Mapping of disk templates to storage types
779 mapDiskTemplateStorageType :: Map String String
780 mapDiskTemplateStorageType =
782 map (Types.diskTemplateToRaw *** Types.storageTypeToRaw)
783 [(DTBlock, StorageBlock),
784 (DTDrbd8, StorageLvmVg),
786 (DTSharedFile, StorageFile),
787 (DTFile, StorageFile),
788 (DTDiskless, StorageDiskless),
789 (DTPlain, StorageLvmVg),
790 (DTRbd, StorageRados)]
792 -- | The set of network-mirrored disk templates
793 dtsIntMirror :: FrozenSet String
794 dtsIntMirror = ConstantUtils.mkSet [dtDrbd8]
796 -- | 'DTDiskless' is 'trivially' externally mirrored
797 dtsExtMirror :: FrozenSet String
799 ConstantUtils.mkSet $
800 map Types.diskTemplateToRaw [DTDiskless, DTBlock, DTExt, DTSharedFile, DTRbd]
802 -- | The set of non-lvm-based disk templates
803 dtsNotLvm :: FrozenSet String
805 ConstantUtils.mkSet $
806 map Types.diskTemplateToRaw
807 [DTSharedFile, DTDiskless, DTBlock, DTExt, DTFile, DTRbd]
809 -- | The set of disk templates which can be grown
810 dtsGrowable :: FrozenSet String
812 ConstantUtils.mkSet $
813 map Types.diskTemplateToRaw
814 [DTSharedFile, DTDrbd8, DTPlain, DTExt, DTFile, DTRbd]
816 -- | The set of disk templates that allow adoption
817 dtsMayAdopt :: FrozenSet String
819 ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTBlock, DTPlain]
821 -- | The set of disk templates that *must* use adoption
822 dtsMustAdopt :: FrozenSet String
823 dtsMustAdopt = ConstantUtils.mkSet [Types.diskTemplateToRaw DTBlock]
825 -- | The set of disk templates that allow migrations
826 dtsMirrored :: FrozenSet String
827 dtsMirrored = dtsIntMirror `ConstantUtils.union` dtsExtMirror
829 -- | The set of file based disk templates
830 dtsFilebased :: FrozenSet String
832 ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTSharedFile, DTFile]
834 -- | The set of disk templates that can be moved by copying
836 -- Note: a requirement is that they're not accessed externally or
837 -- shared between nodes; in particular, sharedfile is not suitable.
838 dtsCopyable :: FrozenSet String
840 ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain, DTFile]
842 -- | The set of disk templates that are supported by exclusive_storage
843 dtsExclStorage :: FrozenSet String
844 dtsExclStorage = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain]
846 -- | Templates for which we don't perform checks on free space
847 dtsNoFreeSpaceCheck :: FrozenSet String
848 dtsNoFreeSpaceCheck =
849 ConstantUtils.mkSet $
850 map Types.diskTemplateToRaw [DTExt, DTSharedFile, DTFile, DTRbd]
852 dtsBlock :: FrozenSet String
854 ConstantUtils.mkSet $
855 map Types.diskTemplateToRaw [DTPlain, DTDrbd8, DTBlock, DTRbd, DTExt]
859 drbdHmacAlg :: String
862 drbdDefaultNetProtocol :: String
863 drbdDefaultNetProtocol = "C"
865 drbdMigrationNetProtocol :: String
866 drbdMigrationNetProtocol = "C"
868 drbdStatusFile :: String
869 drbdStatusFile = "/proc/drbd"
871 -- | Size of DRBD meta block device
875 -- * Drbd barrier types
877 drbdBDiskBarriers :: String
878 drbdBDiskBarriers = "b"
880 drbdBDiskDrain :: String
883 drbdBDiskFlush :: String
889 -- | Rbd tool command
893 -- * File backend driver
896 fdBlktap = Types.fileDriverToRaw FileBlktap
899 fdLoop = Types.fileDriverToRaw FileLoop
901 fileDriver :: FrozenSet String
903 ConstantUtils.mkSet $
904 map Types.fileDriverToRaw [minBound..]
906 -- | The set of drbd-like disk types
907 ldsDrbd :: FrozenSet String
908 ldsDrbd = ConstantUtils.mkSet [Types.diskTemplateToRaw DTDrbd8]
910 -- * Disk access mode
913 diskRdonly = Types.diskModeToRaw DiskRdOnly
916 diskRdwr = Types.diskModeToRaw DiskRdWr
918 diskAccessSet :: FrozenSet String
919 diskAccessSet = ConstantUtils.mkSet $ map Types.diskModeToRaw [minBound..]
921 -- * Disk replacement mode
923 replaceDiskAuto :: String
924 replaceDiskAuto = Types.replaceDisksModeToRaw ReplaceAuto
926 replaceDiskChg :: String
927 replaceDiskChg = Types.replaceDisksModeToRaw ReplaceNewSecondary
929 replaceDiskPri :: String
930 replaceDiskPri = Types.replaceDisksModeToRaw ReplaceOnPrimary
932 replaceDiskSec :: String
933 replaceDiskSec = Types.replaceDisksModeToRaw ReplaceOnSecondary
935 replaceModes :: FrozenSet String
937 ConstantUtils.mkSet $ map Types.replaceDisksModeToRaw [minBound..]
939 -- * Instance export mode
941 exportModeLocal :: String
942 exportModeLocal = Types.exportModeToRaw ExportModeLocal
944 exportModeRemote :: String
945 exportModeRemote = Types.exportModeToRaw ExportModeRemote
947 exportModes :: FrozenSet String
948 exportModes = ConstantUtils.mkSet $ map Types.exportModeToRaw [minBound..]
950 -- * Instance creation modes
952 instanceCreate :: String
953 instanceCreate = Types.instCreateModeToRaw InstCreate
955 instanceImport :: String
956 instanceImport = Types.instCreateModeToRaw InstImport
958 instanceRemoteImport :: String
959 instanceRemoteImport = Types.instCreateModeToRaw InstRemoteImport
961 instanceCreateModes :: FrozenSet String
962 instanceCreateModes =
963 ConstantUtils.mkSet $ map Types.instCreateModeToRaw [minBound..]
965 -- * Remote import/export handshake message and version
967 rieHandshake :: String
968 rieHandshake = "Hi, I'm Ganeti"
973 -- | Remote import/export certificate validity in seconds
974 rieCertValidity :: Int
975 rieCertValidity = 24 * 60 * 60
977 -- | Export only: how long to wait per connection attempt (seconds)
978 rieConnectAttemptTimeout :: Int
979 rieConnectAttemptTimeout = 20
981 -- | Export only: number of attempts to connect
982 rieConnectRetries :: Int
983 rieConnectRetries = 10
985 -- | Overall timeout for establishing connection
986 rieConnectTimeout :: Int
987 rieConnectTimeout = 180
989 -- | Give child process up to 5 seconds to exit after sending a signal
990 childLingerTimeout :: Double
991 childLingerTimeout = 5.0
993 -- * Import/export config options
996 inisectBep = "backend"
999 inisectExp = "export"
1001 inisectHyp :: String
1002 inisectHyp = "hypervisor"
1004 inisectIns :: String
1005 inisectIns = "instance"
1007 inisectOsp :: String
1010 -- * Dynamic device modification
1013 ddmAdd = Types.ddmFullToRaw DdmFullAdd
1016 ddmModify = Types.ddmFullToRaw DdmFullModify
1019 ddmRemove = Types.ddmFullToRaw DdmFullRemove
1021 ddmsValues :: FrozenSet String
1022 ddmsValues = ConstantUtils.mkSet [ddmAdd, ddmRemove]
1024 ddmsValuesWithModify :: FrozenSet String
1025 ddmsValuesWithModify = ConstantUtils.mkSet $ map Types.ddmFullToRaw [minBound..]
1027 -- * Common exit codes
1033 exitFailure = ConstantUtils.exitFailure
1035 exitNotcluster :: Int
1038 exitNotmaster :: Int
1041 exitNodesetupError :: Int
1042 exitNodesetupError = 12
1044 -- | Need user confirmation
1045 exitConfirmation :: Int
1046 exitConfirmation = 13
1048 -- | Exit code for query operations with unknown fields
1049 exitUnknownField :: Int
1050 exitUnknownField = 14
1054 tagCluster :: String
1055 tagCluster = Types.tagKindToRaw TagKindCluster
1057 tagInstance :: String
1058 tagInstance = Types.tagKindToRaw TagKindInstance
1060 tagNetwork :: String
1061 tagNetwork = Types.tagKindToRaw TagKindNetwork
1064 tagNode = Types.tagKindToRaw TagKindNode
1066 tagNodegroup :: String
1067 tagNodegroup = Types.tagKindToRaw TagKindGroup
1069 validTagTypes :: FrozenSet String
1070 validTagTypes = ConstantUtils.mkSet $ map Types.tagKindToRaw [minBound..]
1075 maxTagsPerObj :: Int
1076 maxTagsPerObj = 4096
1080 defaultBridge :: String
1081 defaultBridge = "xen-br0"
1083 defaultOvs :: String
1084 defaultOvs = "switch1"
1086 -- | 60 MiB, expressed in KiB
1087 classicDrbdSyncSpeed :: Int
1088 classicDrbdSyncSpeed = 60 * 1024
1090 ip4AddressAny :: String
1091 ip4AddressAny = "0.0.0.0"
1093 ip4AddressLocalhost :: String
1094 ip4AddressLocalhost = "127.0.0.1"
1096 ip6AddressAny :: String
1097 ip6AddressAny = "::"
1099 ip6AddressLocalhost :: String
1100 ip6AddressLocalhost = "::1"
1108 validIpVersions :: FrozenSet Int
1109 validIpVersions = ConstantUtils.mkSet [ip4Version, ip6Version]
1111 tcpPingTimeout :: Int
1117 defaultDrbdHelper :: String
1118 defaultDrbdHelper = "/bin/true"
1123 defaultMacPrefix :: String
1124 defaultMacPrefix = "aa:00:00"
1126 -- | Default maximum instance wait time, in seconds.
1127 defaultShutdownTimeout :: Int
1128 defaultShutdownTimeout = 120
1130 -- | Node clock skew in seconds
1131 nodeMaxClockSkew :: Int
1132 nodeMaxClockSkew = 150
1134 -- | Time for an intra-cluster disk transfer to wait for a connection
1135 diskTransferConnectTimeout :: Int
1136 diskTransferConnectTimeout = 60
1138 -- | Disk index separator
1139 diskSeparator :: String
1140 diskSeparator = AutoConf.diskSeparator
1142 ipCommandPath :: String
1143 ipCommandPath = AutoConf.ipPath
1145 -- | Key for job IDs in opcode result
1149 -- * Runparts results
1160 runpartsStatus :: [Int]
1161 runpartsStatus = [runpartsErr, runpartsRun, runpartsSkip]
1165 rpcEncodingNone :: Int
1168 rpcEncodingZlibBase64 :: Int
1169 rpcEncodingZlibBase64 = 1
1173 -- Various time constants for the timeout table
1176 rpcTmoUrgent = Types.rpcTimeoutToRaw Urgent
1179 rpcTmoFast = Types.rpcTimeoutToRaw Fast
1182 rpcTmoNormal = Types.rpcTimeoutToRaw Normal
1185 rpcTmoSlow = Types.rpcTimeoutToRaw Slow
1187 -- | 'rpcTmo_4hrs' contains an underscore to circumvent a limitation
1188 -- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1191 rpcTmo_4hrs = Types.rpcTimeoutToRaw FourHours
1193 -- | 'rpcTmo_1day' contains an underscore to circumvent a limitation
1194 -- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1197 rpcTmo_1day = Types.rpcTimeoutToRaw OneDay
1199 -- | Timeout for connecting to nodes (seconds)
1200 rpcConnectTimeout :: Int
1201 rpcConnectTimeout = 5
1206 vtypeBool = VTypeBool
1211 vtypeMaybeString :: VType
1212 vtypeMaybeString = VTypeMaybeString
1216 vtypeSize = VTypeSize
1218 vtypeString :: VType
1219 vtypeString = VTypeString
1221 enforceableTypes :: FrozenSet VType
1222 enforceableTypes = ConstantUtils.mkSet [minBound..]
1226 -- FIXME: these should be associated with 'Ganeti.HTools.Types.ISpec'
1228 ispecMemSize :: String
1229 ispecMemSize = ConstantUtils.ispecMemSize
1231 ispecCpuCount :: String
1232 ispecCpuCount = ConstantUtils.ispecCpuCount
1234 ispecDiskCount :: String
1235 ispecDiskCount = ConstantUtils.ispecDiskCount
1237 ispecDiskSize :: String
1238 ispecDiskSize = ConstantUtils.ispecDiskSize
1240 ispecNicCount :: String
1241 ispecNicCount = ConstantUtils.ispecNicCount
1243 ispecSpindleUse :: String
1244 ispecSpindleUse = ConstantUtils.ispecSpindleUse
1246 ispecsParameterTypes :: Map String VType
1247 ispecsParameterTypes =
1249 [(ConstantUtils.ispecDiskSize, VTypeInt),
1250 (ConstantUtils.ispecCpuCount, VTypeInt),
1251 (ConstantUtils.ispecSpindleUse, VTypeInt),
1252 (ConstantUtils.ispecMemSize, VTypeInt),
1253 (ConstantUtils.ispecNicCount, VTypeInt),
1254 (ConstantUtils.ispecDiskCount, VTypeInt)]
1256 ispecsParameters :: FrozenSet String
1258 ConstantUtils.mkSet [ConstantUtils.ispecCpuCount,
1259 ConstantUtils.ispecDiskCount,
1260 ConstantUtils.ispecDiskSize,
1261 ConstantUtils.ispecMemSize,
1262 ConstantUtils.ispecNicCount,
1263 ConstantUtils.ispecSpindleUse]
1265 ispecsMinmax :: String
1266 ispecsMinmax = ConstantUtils.ispecsMinmax
1275 ispecsStd = ConstantUtils.ispecsStd
1277 ipolicyDts :: String
1278 ipolicyDts = ConstantUtils.ipolicyDts
1280 ipolicyVcpuRatio :: String
1281 ipolicyVcpuRatio = ConstantUtils.ipolicyVcpuRatio
1283 ipolicySpindleRatio :: String
1284 ipolicySpindleRatio = ConstantUtils.ipolicySpindleRatio
1286 ispecsMinmaxKeys :: FrozenSet String
1287 ispecsMinmaxKeys = ConstantUtils.mkSet [ispecsMax, ispecsMin]
1289 ipolicyParameters :: FrozenSet String
1291 ConstantUtils.mkSet [ConstantUtils.ipolicyVcpuRatio,
1292 ConstantUtils.ipolicySpindleRatio]
1294 ipolicyAllKeys :: FrozenSet String
1296 ConstantUtils.union ipolicyParameters $
1297 ConstantUtils.mkSet [ConstantUtils.ipolicyDts,
1298 ConstantUtils.ispecsMinmax,
1301 -- | Node parameter names
1303 ndExclusiveStorage :: String
1304 ndExclusiveStorage = "exclusive_storage"
1306 ndOobProgram :: String
1307 ndOobProgram = "oob_program"
1309 ndSpindleCount :: String
1310 ndSpindleCount = "spindle_count"
1316 ndOvsLink = "ovs_link"
1319 ndOvsName = "ovs_name"
1321 ndsParameterTypes :: Map String VType
1324 [(ndExclusiveStorage, VTypeBool),
1325 (ndOobProgram, VTypeString),
1327 (ndOvsLink, VTypeMaybeString),
1328 (ndOvsName, VTypeMaybeString),
1329 (ndSpindleCount, VTypeInt)]
1331 ndsParameters :: FrozenSet String
1332 ndsParameters = ConstantUtils.mkSet (Map.keys ndsParameterTypes)
1334 ndsParameterTitles :: Map String String
1335 ndsParameterTitles =
1337 [(ndExclusiveStorage, "ExclusiveStorage"),
1338 (ndOobProgram, "OutOfBandProgram"),
1339 (ndOvs, "OpenvSwitch"),
1340 (ndOvsLink, "OpenvSwitchLink"),
1341 (ndOvsName, "OpenvSwitchName"),
1342 (ndSpindleCount, "SpindleCount")]
1347 instanceRebootSoft :: String
1348 instanceRebootSoft = Types.rebootTypeToRaw RebootSoft
1350 instanceRebootHard :: String
1351 instanceRebootHard = Types.rebootTypeToRaw RebootHard
1353 instanceRebootFull :: String
1354 instanceRebootFull = Types.rebootTypeToRaw RebootFull
1356 rebootTypes :: FrozenSet String
1357 rebootTypes = ConstantUtils.mkSet $ map Types.rebootTypeToRaw [minBound..]
1359 -- * OOB supported commands
1361 oobPowerOn :: String
1362 oobPowerOn = Types.oobCommandToRaw OobPowerOn
1364 oobPowerOff :: String
1365 oobPowerOff = Types.oobCommandToRaw OobPowerOff
1367 oobPowerCycle :: String
1368 oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
1370 oobPowerStatus :: String
1371 oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
1374 oobHealth = Types.oobCommandToRaw OobHealth
1376 oobCommands :: FrozenSet String
1377 oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
1379 oobPowerStatusPowered :: String
1380 oobPowerStatusPowered = "powered"
1387 oobPowerDelay :: Double
1390 oobStatusCritical :: String
1391 oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
1393 oobStatusOk :: String
1394 oobStatusOk = Types.oobStatusToRaw OobStatusOk
1396 oobStatusUnknown :: String
1397 oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
1399 oobStatusWarning :: String
1400 oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
1402 oobStatuses :: FrozenSet String
1403 oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
1405 -- * NIC_* constants are used inside the ganeti config
1416 nicModeBridged :: String
1417 nicModeBridged = Types.nICModeToRaw NMBridged
1419 nicModeRouted :: String
1420 nicModeRouted = Types.nICModeToRaw NMRouted
1422 nicModeOvs :: String
1423 nicModeOvs = Types.nICModeToRaw NMOvs
1426 nicIpPool = Types.nICModeToRaw NMPool
1428 nicValidModes :: FrozenSet String
1429 nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
1431 -- * Hypervisor constants
1434 htXenPvm = Types.hypervisorToRaw XenPvm
1437 htFake = Types.hypervisorToRaw Fake
1440 htXenHvm = Types.hypervisorToRaw XenHvm
1443 htKvm = Types.hypervisorToRaw Kvm
1446 htChroot = Types.hypervisorToRaw Chroot
1449 htLxc = Types.hypervisorToRaw Lxc
1451 hyperTypes :: FrozenSet String
1452 hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
1454 htsReqPort :: FrozenSet String
1455 htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
1459 htMigrationLive :: String
1460 htMigrationLive = Types.migrationModeToRaw MigrationLive
1462 htMigrationNonlive :: String
1463 htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
1465 htMigrationModes :: FrozenSet String
1467 ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
1469 -- * Cluster verify steps
1471 verifyNplusoneMem :: String
1472 verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
1474 verifyOptionalChecks :: FrozenSet String
1475 verifyOptionalChecks =
1476 ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
1478 -- * Cluster Verify error classes
1480 cvTcluster :: String
1481 cvTcluster = "cluster"
1489 cvTinstance :: String
1490 cvTinstance = "instance"
1492 -- * Cluster Verify error codes and documentation
1494 cvEclustercert :: (String, String, String)
1497 Types.cVErrorCodeToRaw CvECLUSTERCERT,
1498 "Cluster certificate files verification failure")
1500 cvEclustercfg :: (String, String, String)
1503 Types.cVErrorCodeToRaw CvECLUSTERCFG,
1504 "Cluster configuration verification failure")
1506 cvEclusterdanglinginst :: (String, String, String)
1507 cvEclusterdanglinginst =
1509 Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
1510 "Some instances have a non-existing primary node")
1512 cvEclusterdanglingnodes :: (String, String, String)
1513 cvEclusterdanglingnodes =
1515 Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
1516 "Some nodes belong to non-existing groups")
1518 cvEclusterfilecheck :: (String, String, String)
1519 cvEclusterfilecheck =
1521 Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
1522 "Cluster configuration verification failure")
1524 cvEgroupdifferentpvsize :: (String, String, String)
1525 cvEgroupdifferentpvsize =
1527 Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
1528 "PVs in the group have different sizes")
1530 cvEinstancebadnode :: (String, String, String)
1531 cvEinstancebadnode =
1533 Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
1534 "Instance marked as running lives on an offline node")
1536 cvEinstancedown :: (String, String, String)
1539 Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
1540 "Instance not running on its primary node")
1542 cvEinstancefaultydisk :: (String, String, String)
1543 cvEinstancefaultydisk =
1545 Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
1546 "Impossible to retrieve status for a disk")
1548 cvEinstancelayout :: (String, String, String)
1551 Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
1552 "Instance has multiple secondary nodes")
1554 cvEinstancemissingcfgparameter :: (String, String, String)
1555 cvEinstancemissingcfgparameter =
1557 Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
1558 "A configuration parameter for an instance is missing")
1560 cvEinstancemissingdisk :: (String, String, String)
1561 cvEinstancemissingdisk =
1563 Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
1564 "Missing volume on an instance")
1566 cvEinstancepolicy :: (String, String, String)
1569 Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
1570 "Instance does not meet policy")
1572 cvEinstancesplitgroups :: (String, String, String)
1573 cvEinstancesplitgroups =
1575 Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
1576 "Instance with primary and secondary nodes in different groups")
1578 cvEinstanceunsuitablenode :: (String, String, String)
1579 cvEinstanceunsuitablenode =
1581 Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
1582 "Instance running on nodes that are not suitable for it")
1584 cvEinstancewrongnode :: (String, String, String)
1585 cvEinstancewrongnode =
1587 Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
1588 "Instance running on the wrong node")
1590 cvEnodedrbd :: (String, String, String)
1593 Types.cVErrorCodeToRaw CvENODEDRBD,
1594 "Error parsing the DRBD status file")
1596 cvEnodedrbdhelper :: (String, String, String)
1599 Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
1600 "Error caused by the DRBD helper")
1602 cvEnodedrbdversion :: (String, String, String)
1603 cvEnodedrbdversion =
1605 Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
1606 "DRBD version mismatch within a node group")
1608 cvEnodefilecheck :: (String, String, String)
1611 Types.cVErrorCodeToRaw CvENODEFILECHECK,
1612 "Error retrieving the checksum of the node files")
1614 cvEnodefilestoragepaths :: (String, String, String)
1615 cvEnodefilestoragepaths =
1617 Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
1618 "Detected bad file storage paths")
1620 cvEnodefilestoragepathunusable :: (String, String, String)
1621 cvEnodefilestoragepathunusable =
1623 Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
1624 "File storage path unusable")
1626 cvEnodehooks :: (String, String, String)
1629 Types.cVErrorCodeToRaw CvENODEHOOKS,
1630 "Communication failure in hooks execution")
1632 cvEnodehv :: (String, String, String)
1635 Types.cVErrorCodeToRaw CvENODEHV,
1636 "Hypervisor parameters verification failure")
1638 cvEnodelvm :: (String, String, String)
1641 Types.cVErrorCodeToRaw CvENODELVM,
1642 "LVM-related node error")
1644 cvEnoden1 :: (String, String, String)
1647 Types.cVErrorCodeToRaw CvENODEN1,
1648 "Not enough memory to accommodate instance failovers")
1650 cvEnodenet :: (String, String, String)
1653 Types.cVErrorCodeToRaw CvENODENET,
1654 "Network-related node error")
1656 cvEnodeoobpath :: (String, String, String)
1659 Types.cVErrorCodeToRaw CvENODEOOBPATH,
1660 "Invalid Out Of Band path")
1662 cvEnodeorphaninstance :: (String, String, String)
1663 cvEnodeorphaninstance =
1665 Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
1666 "Unknown intance running on a node")
1668 cvEnodeorphanlv :: (String, String, String)
1671 Types.cVErrorCodeToRaw CvENODEORPHANLV,
1672 "Unknown LVM logical volume")
1674 cvEnodeos :: (String, String, String)
1677 Types.cVErrorCodeToRaw CvENODEOS,
1678 "OS-related node error")
1680 cvEnoderpc :: (String, String, String)
1683 Types.cVErrorCodeToRaw CvENODERPC,
1684 "Error during connection to the primary node of an instance")
1686 cvEnodesetup :: (String, String, String)
1689 Types.cVErrorCodeToRaw CvENODESETUP,
1692 cvEnodesharedfilestoragepathunusable :: (String, String, String)
1693 cvEnodesharedfilestoragepathunusable =
1695 Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
1696 "Shared file storage path unusable")
1698 cvEnodessh :: (String, String, String)
1701 Types.cVErrorCodeToRaw CvENODESSH,
1702 "SSH-related node error")
1704 cvEnodetime :: (String, String, String)
1707 Types.cVErrorCodeToRaw CvENODETIME,
1708 "Node returned invalid time")
1710 cvEnodeuserscripts :: (String, String, String)
1711 cvEnodeuserscripts =
1713 Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
1714 "User scripts not present or not executable")
1716 cvEnodeversion :: (String, String, String)
1719 Types.cVErrorCodeToRaw CvENODEVERSION,
1720 "Protocol version mismatch or Ganeti version mismatch")
1722 cvAllEcodes :: FrozenSet (String, String, String)
1727 cvEclusterdanglinginst,
1728 cvEclusterdanglingnodes,
1729 cvEclusterfilecheck,
1730 cvEgroupdifferentpvsize,
1733 cvEinstancefaultydisk,
1735 cvEinstancemissingcfgparameter,
1736 cvEinstancemissingdisk,
1738 cvEinstancesplitgroups,
1739 cvEinstanceunsuitablenode,
1740 cvEinstancewrongnode,
1745 cvEnodefilestoragepaths,
1746 cvEnodefilestoragepathunusable,
1753 cvEnodeorphaninstance,
1758 cvEnodesharedfilestoragepathunusable,
1764 cvAllEcodesStrings :: FrozenSet String
1765 cvAllEcodesStrings =
1766 ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
1768 -- * Instance status
1770 inststAdmindown :: String
1771 inststAdmindown = Types.instanceStatusToRaw StatusDown
1773 inststAdminoffline :: String
1774 inststAdminoffline = Types.instanceStatusToRaw StatusOffline
1776 inststErrordown :: String
1777 inststErrordown = Types.instanceStatusToRaw ErrorDown
1779 inststErrorup :: String
1780 inststErrorup = Types.instanceStatusToRaw ErrorUp
1782 inststNodedown :: String
1783 inststNodedown = Types.instanceStatusToRaw NodeDown
1785 inststNodeoffline :: String
1786 inststNodeoffline = Types.instanceStatusToRaw NodeOffline
1788 inststRunning :: String
1789 inststRunning = Types.instanceStatusToRaw Running
1791 inststWrongnode :: String
1792 inststWrongnode = Types.instanceStatusToRaw WrongNode
1794 inststAll :: FrozenSet String
1795 inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
1799 adminstDown :: String
1800 adminstDown = Types.adminStateToRaw AdminDown
1802 adminstOffline :: String
1803 adminstOffline = Types.adminStateToRaw AdminOffline
1806 adminstUp = Types.adminStateToRaw AdminUp
1808 adminstAll :: FrozenSet String
1809 adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
1814 nrDrained = Types.nodeRoleToRaw NRDrained
1817 nrMaster = Types.nodeRoleToRaw NRMaster
1819 nrMcandidate :: String
1820 nrMcandidate = Types.nodeRoleToRaw NRCandidate
1823 nrOffline = Types.nodeRoleToRaw NROffline
1826 nrRegular = Types.nodeRoleToRaw NRRegular
1828 nrAll :: FrozenSet String
1829 nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
1831 -- * Allocator framework constants
1833 iallocatorVersion :: Int
1834 iallocatorVersion = 2
1836 iallocatorDirIn :: String
1837 iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
1839 iallocatorDirOut :: String
1840 iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
1842 validIallocatorDirections :: FrozenSet String
1843 validIallocatorDirections =
1844 ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
1846 iallocatorModeAlloc :: String
1847 iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
1849 iallocatorModeChgGroup :: String
1850 iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
1852 iallocatorModeMultiAlloc :: String
1853 iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
1855 iallocatorModeNodeEvac :: String
1856 iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
1858 iallocatorModeReloc :: String
1859 iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
1861 validIallocatorModes :: FrozenSet String
1862 validIallocatorModes =
1863 ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
1865 iallocatorSearchPath :: [String]
1866 iallocatorSearchPath = AutoConf.iallocatorSearchPath
1868 defaultIallocatorShortcut :: String
1869 defaultIallocatorShortcut = "."
1871 -- * Node evacuation
1873 nodeEvacPri :: String
1874 nodeEvacPri = Types.evacModeToRaw ChangePrimary
1876 nodeEvacSec :: String
1877 nodeEvacSec = Types.evacModeToRaw ChangeSecondary
1879 nodeEvacAll :: String
1880 nodeEvacAll = Types.evacModeToRaw ChangeAll
1882 nodeEvacModes :: FrozenSet String
1883 nodeEvacModes = ConstantUtils.mkSet $ map Types.evacModeToRaw [minBound..]
1887 jobStatusQueued :: String
1888 jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
1890 jobStatusWaiting :: String
1891 jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
1893 jobStatusCanceling :: String
1894 jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
1896 jobStatusRunning :: String
1897 jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
1899 jobStatusCanceled :: String
1900 jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
1902 jobStatusSuccess :: String
1903 jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
1905 jobStatusError :: String
1906 jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
1908 jobsPending :: FrozenSet String
1910 ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
1912 jobsFinalized :: FrozenSet String
1914 ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
1916 jobStatusAll :: FrozenSet String
1917 jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
1921 -- ** Not yet finalized opcodes
1923 opStatusCanceling :: String
1924 opStatusCanceling = "canceling"
1926 opStatusQueued :: String
1927 opStatusQueued = "queued"
1929 opStatusRunning :: String
1930 opStatusRunning = "running"
1932 opStatusWaiting :: String
1933 opStatusWaiting = "waiting"
1935 -- ** Finalized opcodes
1937 opStatusCanceled :: String
1938 opStatusCanceled = "canceled"
1940 opStatusError :: String
1941 opStatusError = "error"
1943 opStatusSuccess :: String
1944 opStatusSuccess = "success"
1946 opsFinalized :: FrozenSet String
1948 ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
1950 -- * OpCode priority
1955 opPrioHighest :: Int
1959 opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
1962 opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
1965 opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
1967 opPrioSubmitValid :: FrozenSet Int
1968 opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
1970 opPrioDefault :: Int
1971 opPrioDefault = opPrioNormal
1973 -- * Execution log types
1975 elogMessage :: String
1976 elogMessage = Types.eLogTypeToRaw ELogMessage
1978 elogRemoteImport :: String
1979 elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
1981 elogJqueueTest :: String
1982 elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
1986 confdProtocolVersion :: Int
1987 confdProtocolVersion = ConstantUtils.confdProtocolVersion
1989 -- Confd request type
1992 confdReqPing = Types.confdRequestTypeToRaw ReqPing
1994 confdReqNodeRoleByname :: Int
1995 confdReqNodeRoleByname = Types.confdRequestTypeToRaw ReqNodeRoleByName
1997 confdReqNodePipByInstanceIp :: Int
1998 confdReqNodePipByInstanceIp = Types.confdRequestTypeToRaw ReqNodePipByInstPip
2000 confdReqClusterMaster :: Int
2001 confdReqClusterMaster = Types.confdRequestTypeToRaw ReqClusterMaster
2003 confdReqNodePipList :: Int
2004 confdReqNodePipList = Types.confdRequestTypeToRaw ReqNodePipList
2006 confdReqMcPipList :: Int
2007 confdReqMcPipList = Types.confdRequestTypeToRaw ReqMcPipList
2009 confdReqInstancesIpsList :: Int
2010 confdReqInstancesIpsList = Types.confdRequestTypeToRaw ReqInstIpsList
2012 confdReqNodeDrbd :: Int
2013 confdReqNodeDrbd = Types.confdRequestTypeToRaw ReqNodeDrbd
2015 confdReqNodeInstances :: Int
2016 confdReqNodeInstances = Types.confdRequestTypeToRaw ReqNodeInstances
2018 confdReqs :: FrozenSet Int
2020 ConstantUtils.mkSet .
2021 map Types.confdRequestTypeToRaw $
2022 [minBound..] \\ [ReqNodeInstances]
2024 -- * Confd request type
2026 confdReqfieldName :: Int
2027 confdReqfieldName = Types.confdReqFieldToRaw ReqFieldName
2029 confdReqfieldIp :: Int
2030 confdReqfieldIp = Types.confdReqFieldToRaw ReqFieldIp
2032 confdReqfieldMnodePip :: Int
2033 confdReqfieldMnodePip = Types.confdReqFieldToRaw ReqFieldMNodePip
2035 -- * Confd repl status
2037 confdReplStatusOk :: Int
2038 confdReplStatusOk = Types.confdReplyStatusToRaw ReplyStatusOk
2040 confdReplStatusError :: Int
2041 confdReplStatusError = Types.confdReplyStatusToRaw ReplyStatusError
2043 confdReplStatusNotimplemented :: Int
2044 confdReplStatusNotimplemented = Types.confdReplyStatusToRaw ReplyStatusNotImpl
2046 confdReplStatuses :: FrozenSet Int
2048 ConstantUtils.mkSet $ map Types.confdReplyStatusToRaw [minBound..]
2050 -- * Confd node role
2052 confdNodeRoleMaster :: Int
2053 confdNodeRoleMaster = Types.confdNodeRoleToRaw NodeRoleMaster
2055 confdNodeRoleCandidate :: Int
2056 confdNodeRoleCandidate = Types.confdNodeRoleToRaw NodeRoleCandidate
2058 confdNodeRoleOffline :: Int
2059 confdNodeRoleOffline = Types.confdNodeRoleToRaw NodeRoleOffline
2061 confdNodeRoleDrained :: Int
2062 confdNodeRoleDrained = Types.confdNodeRoleToRaw NodeRoleDrained
2064 confdNodeRoleRegular :: Int
2065 confdNodeRoleRegular = Types.confdNodeRoleToRaw NodeRoleRegular
2067 -- * A few common errors for confd
2069 confdErrorUnknownEntry :: Int
2070 confdErrorUnknownEntry = Types.confdErrorTypeToRaw ConfdErrorUnknownEntry
2072 confdErrorInternal :: Int
2073 confdErrorInternal = Types.confdErrorTypeToRaw ConfdErrorInternal
2075 confdErrorArgument :: Int
2076 confdErrorArgument = Types.confdErrorTypeToRaw ConfdErrorArgument
2078 -- * Confd request query fields
2080 confdReqqLink :: String
2081 confdReqqLink = ConstantUtils.confdReqqLink
2083 confdReqqIp :: String
2084 confdReqqIp = ConstantUtils.confdReqqIp
2086 confdReqqIplist :: String
2087 confdReqqIplist = ConstantUtils.confdReqqIplist
2089 confdReqqFields :: String
2090 confdReqqFields = ConstantUtils.confdReqqFields
2092 -- | Each request is "salted" by the current timestamp.
2094 -- This constant decides how many seconds of skew to accept.
2096 -- TODO: make this a default and allow the value to be more
2098 confdMaxClockSkew :: Int
2099 confdMaxClockSkew = 2 * nodeMaxClockSkew
2101 -- | When we haven't reloaded the config for more than this amount of
2102 -- seconds, we force a test to see if inotify is betraying us. Using a
2103 -- prime number to ensure we get less chance of 'same wakeup' with
2105 confdConfigReloadTimeout :: Int
2106 confdConfigReloadTimeout = 17
2108 -- | If we receive more than one update in this amount of
2109 -- microseconds, we move to polling every RATELIMIT seconds, rather
2110 -- than relying on inotify, to be able to serve more requests.
2111 confdConfigReloadRatelimit :: Int
2112 confdConfigReloadRatelimit = 250000
2114 -- | Magic number prepended to all confd queries.
2116 -- This allows us to distinguish different types of confd protocols
2117 -- and handle them. For example by changing this we can move the whole
2118 -- payload to be compressed, or move away from json.
2119 confdMagicFourcc :: String
2120 confdMagicFourcc = "plj0"
2122 -- | By default a confd request is sent to the minimum between this
2123 -- number and all MCs. 6 was chosen because even in the case of a
2124 -- disastrous 50% response rate, we should have enough answers to be
2125 -- able to compare more than one.
2126 confdDefaultReqCoverage :: Int
2127 confdDefaultReqCoverage = 6
2129 -- | Timeout in seconds to expire pending query request in the confd
2130 -- client library. We don't actually expect any answer more than 10
2131 -- seconds after we sent a request.
2132 confdClientExpireTimeout :: Int
2133 confdClientExpireTimeout = 10
2135 -- * Possible values for NodeGroup.alloc_policy
2137 allocPolicyLastResort :: String
2138 allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
2140 allocPolicyPreferred :: String
2141 allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
2143 allocPolicyUnallocable :: String
2144 allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
2146 validAllocPolicies :: [String]
2147 validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
2149 -- | Temporary external/shared storage parameters
2150 blockdevDriverManual :: String
2151 blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
2153 -- | 'qemu-img' path, required for 'ovfconverter'
2154 qemuimgPath :: String
2155 qemuimgPath = AutoConf.qemuimgPath
2157 -- | Whether htools was enabled at compilation time
2159 -- FIXME: this should be moved next to the other enable constants,
2160 -- such as, 'enableConfd', and renamed to 'enableHtools'.
2162 htools = AutoConf.htools
2164 -- * Key files for SSH daemon
2166 sshHostDsaPriv :: String
2167 sshHostDsaPriv = sshConfigDir ++ "/ssh_host_dsa_key"
2169 sshHostDsaPub :: String
2170 sshHostDsaPub = sshHostDsaPriv ++ ".pub"
2172 sshHostRsaPriv :: String
2173 sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key"
2175 sshHostRsaPub :: String
2176 sshHostRsaPub = sshHostRsaPriv ++ ".pub"
2178 -- | Path generating random UUID
2179 randomUuidFile :: String
2180 randomUuidFile = ConstantUtils.randomUuidFile
2182 -- * Auto-repair tag prefixes
2184 autoRepairTagPrefix :: String
2185 autoRepairTagPrefix = "ganeti:watcher:autorepair:"
2187 autoRepairTagEnabled :: String
2188 autoRepairTagEnabled = autoRepairTagPrefix
2190 autoRepairTagPending :: String
2191 autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
2193 autoRepairTagResult :: String
2194 autoRepairTagResult = autoRepairTagPrefix ++ "result:"
2196 autoRepairTagSuspended :: String
2197 autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
2199 -- * Auto-repair levels
2201 autoRepairFailover :: String
2202 autoRepairFailover = "failover"
2204 autoRepairFixStorage :: String
2205 autoRepairFixStorage = "fix-storage"
2207 autoRepairMigrate :: String
2208 autoRepairMigrate = "migrate"
2210 autoRepairReinstall :: String
2211 autoRepairReinstall = "reinstall"
2213 autoRepairAllTypes :: FrozenSet String
2214 autoRepairAllTypes =
2215 ConstantUtils.mkSet [autoRepairFailover,
2216 autoRepairFixStorage,
2218 autoRepairReinstall]
2220 -- * Auto-repair results
2222 autoRepairEnoperm :: String
2223 autoRepairEnoperm = "enoperm"
2225 autoRepairFailure :: String
2226 autoRepairFailure = "failure"
2228 autoRepairSuccess :: String
2229 autoRepairSuccess = "success"
2231 autoRepairAllResults :: FrozenSet String
2232 autoRepairAllResults =
2233 ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
2235 -- | The version identifier for builtin data collectors
2236 builtinDataCollectorVersion :: String
2237 builtinDataCollectorVersion = "B"
2239 -- | The reason trail opcode parameter name
2240 opcodeReason :: String
2241 opcodeReason = "reason"
2243 diskstatsFile :: String
2244 diskstatsFile = "/proc/diskstats"
2246 -- * CPU load collector
2249 statFile = "/proc/stat"
2251 cpuavgloadBufferSize :: Int
2252 cpuavgloadBufferSize = 150
2254 cpuavgloadWindowSize :: Int
2255 cpuavgloadWindowSize = 600
2257 -- | Mond's variable for periodical data collection
2258 mondTimeInterval :: Int
2259 mondTimeInterval = 5
2261 -- * Disk access modes
2263 diskUserspace :: String
2264 diskUserspace = Types.diskAccessModeToRaw DiskUserspace
2266 diskKernelspace :: String
2267 diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
2269 diskValidAccessModes :: FrozenSet String
2270 diskValidAccessModes =
2271 ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
2273 -- | Timeout for queue draining in upgrades
2274 upgradeQueueDrainTimeout :: Int
2275 upgradeQueueDrainTimeout = 36 * 60 * 60 -- 1.5 days
2277 -- | Intervall at which the queue is polled during upgrades
2278 upgradeQueuePollInterval :: Int
2279 upgradeQueuePollInterval = 10