Hs2Py constants: move 'ipCommandPath'
[ganeti-local] / src / Ganeti / HsConstants.hs
1 {-| HsConstants contains the Haskell constants
2
3 This is a transitional module complementary to 'Ganeti.Constants'.  It
4 is intended to contain the Haskell constants that are meant to be
5 generated in Python.
6
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
13 imported.
14
15 -}
16
17 {-
18
19 Copyright (C) 2013 Google Inc.
20
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.
25
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.
30
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
34 02110-1301, USA.
35
36 -}
37 module Ganeti.HsConstants where
38
39 import Control.Arrow ((***))
40 import Data.List ((\\))
41 import Data.Map (Map)
42 import qualified Data.Map as Map (fromList, keys, insert)
43
44 import AutoConf
45 import Ganeti.ConstantUtils (PythonChar(..), FrozenSet, Protocol(..),
46                              buildVersion)
47 import qualified Ganeti.ConstantUtils as ConstantUtils
48 import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..),
49                        ExtraLogReason(..))
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
55 import Ganeti.Types
56 import qualified Ganeti.Types as Types
57 import Ganeti.Confd.Types (ConfdRequestType(..), ConfdReqField(..),
58                            ConfdReplyStatus(..), ConfdNodeRole(..),
59                            ConfdErrorType(..))
60 import qualified Ganeti.Confd.Types as Types
61
62 {-# ANN module "HLint: ignore Use camelCase" #-}
63
64 -- * 'autoconf' constants for Python only ('autotools/build-bash-completion')
65
66 htoolsProgs :: [String]
67 htoolsProgs = AutoConf.htoolsProgs
68
69 -- * 'autoconf' constants for Python only ('lib/constants.py')
70
71 drbdBarriers :: String
72 drbdBarriers = AutoConf.drbdBarriers
73
74 drbdNoMetaFlush :: Bool
75 drbdNoMetaFlush = AutoConf.drbdNoMetaFlush
76
77 lvmStripecount :: Int
78 lvmStripecount = AutoConf.lvmStripecount
79
80 -- * 'autoconf' constants for Python only ('lib/pathutils.py')
81
82 -- ** Build-time constants
83
84 exportDir :: String
85 exportDir = AutoConf.exportDir
86
87 osSearchPath :: [String]
88 osSearchPath = AutoConf.osSearchPath
89
90 esSearchPath :: [String]
91 esSearchPath = AutoConf.esSearchPath
92
93 sshConfigDir :: String
94 sshConfigDir = AutoConf.sshConfigDir
95
96 xenConfigDir :: String
97 xenConfigDir = AutoConf.xenConfigDir
98
99 sysconfdir :: String
100 sysconfdir = AutoConf.sysconfdir
101
102 toolsdir :: String
103 toolsdir = AutoConf.toolsdir
104
105 localstatedir :: String
106 localstatedir = AutoConf.localstatedir
107
108 -- ** Paths which don't change for a virtual cluster
109
110 pkglibdir :: String
111 pkglibdir = AutoConf.pkglibdir
112
113 sharedir :: String
114 sharedir = AutoConf.sharedir
115
116 -- * 'autoconf' constants for Python only ('lib/build/sphinx_ext.py')
117
118 manPages :: Map String Int
119 manPages = Map.fromList AutoConf.manPages
120
121 -- * 'autoconf' constants for QA cluster only ('qa/qa_cluster.py')
122
123 versionedsharedir :: String
124 versionedsharedir = AutoConf.versionedsharedir
125
126 -- * 'autoconf' constants for Python only ('tests/py/docs_unittest.py')
127
128 gntScripts :: [String]
129 gntScripts = AutoConf.gntScripts
130
131 -- * Various versions
132
133 releaseVersion :: String
134 releaseVersion = AutoConf.packageVersion
135
136 versionMajor :: Int
137 versionMajor = AutoConf.versionMajor
138
139 versionMinor :: Int
140 versionMinor = AutoConf.versionMinor
141
142 versionRevision :: Int
143 versionRevision = AutoConf.versionRevision
144
145 dirVersion :: String
146 dirVersion = AutoConf.dirVersion
147
148 osApiV10 :: Int
149 osApiV10 = 10
150
151 osApiV15 :: Int
152 osApiV15 = 15
153
154 osApiV20 :: Int
155 osApiV20 = 20
156
157 osApiVersions :: FrozenSet Int
158 osApiVersions = ConstantUtils.mkSet [osApiV10, osApiV15, osApiV20]
159
160 exportVersion :: Int
161 exportVersion = 0
162
163 rapiVersion :: Int
164 rapiVersion = 2
165
166 configMajor :: Int
167 configMajor = AutoConf.versionMajor
168
169 configMinor :: Int
170 configMinor = AutoConf.versionMinor
171
172 -- | The configuration is supposed to remain stable across
173 -- revisions. Therefore, the revision number is cleared to '0'.
174 configRevision :: Int
175 configRevision = 0
176
177 configVersion :: Int
178 configVersion = buildVersion configMajor configMinor configRevision
179
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
184
185 -- * User separation
186
187 daemonsGroup :: String
188 daemonsGroup = Runtime.daemonGroup (ExtraGroup DaemonsGroup)
189
190 adminGroup :: String
191 adminGroup = Runtime.daemonGroup (ExtraGroup AdminGroup)
192
193 masterdUser :: String
194 masterdUser = Runtime.daemonUser GanetiMasterd
195
196 masterdGroup :: String
197 masterdGroup = Runtime.daemonGroup (DaemonGroup GanetiMasterd)
198
199 rapiUser :: String
200 rapiUser = Runtime.daemonUser GanetiRapi
201
202 rapiGroup :: String
203 rapiGroup = Runtime.daemonGroup (DaemonGroup GanetiRapi)
204
205 confdUser :: String
206 confdUser = Runtime.daemonUser GanetiConfd
207
208 confdGroup :: String
209 confdGroup = Runtime.daemonGroup (DaemonGroup GanetiConfd)
210
211 luxidUser :: String
212 luxidUser = Runtime.daemonUser GanetiLuxid
213
214 luxidGroup :: String
215 luxidGroup = Runtime.daemonGroup (DaemonGroup GanetiLuxid)
216
217 nodedUser :: String
218 nodedUser = Runtime.daemonUser GanetiNoded
219
220 nodedGroup :: String
221 nodedGroup = Runtime.daemonGroup (DaemonGroup GanetiNoded)
222
223 mondUser :: String
224 mondUser = Runtime.daemonUser GanetiMond
225
226 mondGroup :: String
227 mondGroup = Runtime.daemonGroup (DaemonGroup GanetiMond)
228
229 sshLoginUser :: String
230 sshLoginUser = AutoConf.sshLoginUser
231
232 sshConsoleUser :: String
233 sshConsoleUser = AutoConf.sshConsoleUser
234
235 -- * Cpu pinning separators and constants
236
237 cpuPinningSep :: String
238 cpuPinningSep = ":"
239
240 cpuPinningAll :: String
241 cpuPinningAll = "all"
242
243 -- | Internal representation of "all"
244 cpuPinningAllVal :: Int
245 cpuPinningAllVal = -1
246
247 -- | One "all" entry in a CPU list means CPU pinning is off
248 cpuPinningOff :: [Int]
249 cpuPinningOff = [cpuPinningAllVal]
250
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
254 -- @
255 -- xm vcpu-pin <domain> <vcpu> all
256 -- @
257 --
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@).
260 --
261 -- To support future changes, the following constant is treated as a
262 -- blackbox string that simply means "use any cpu for pinning under
263 -- xen".
264 cpuPinningAllXen :: String
265 cpuPinningAllXen = "0-63"
266
267 -- | A KVM-specific implementation detail - the following value is
268 -- used to set CPU affinity to all processors (--0 through --31), per
269 -- taskset man page.
270 --
271 -- FIXME: This only works for machines with up to 32 CPU cores
272 cpuPinningAllKvm :: Int
273 cpuPinningAllKvm = 0xFFFFFFFF
274
275 -- * Wipe
276
277 ddCmd :: String
278 ddCmd = "dd"
279
280 -- | 1GB
281 maxWipeChunk :: Int
282 maxWipeChunk = 1024
283
284 minWipeChunkPercent :: Int
285 minWipeChunkPercent = 10
286
287 -- * Directories
288
289 runDirsMode :: Int
290 runDirsMode = 0o775
291
292 secureDirMode :: Int
293 secureDirMode = 0o700
294
295 secureFileMode :: Int
296 secureFileMode = 0o600
297
298 adoptableBlockdevRoot :: String
299 adoptableBlockdevRoot = "/dev/disk/"
300
301 -- * 'autoconf' enable/disable
302
303 enableConfd :: Bool
304 enableConfd = AutoConf.enableConfd
305
306 enableMond :: Bool
307 enableMond = AutoConf.enableMond
308
309 enableRestrictedCommands :: Bool
310 enableRestrictedCommands = AutoConf.enableRestrictedCommands
311
312 enableSplitQuery :: Bool
313 enableSplitQuery = AutoConf.enableSplitQuery
314
315 -- * SSH constants
316
317 ssh :: String
318 ssh = "ssh"
319
320 scp :: String
321 scp = "scp"
322
323 -- * Daemons
324
325 confd :: String
326 confd = Runtime.daemonName GanetiConfd
327
328 masterd :: String
329 masterd = Runtime.daemonName GanetiMasterd
330
331 mond :: String
332 mond = Runtime.daemonName GanetiMond
333
334 noded :: String
335 noded = Runtime.daemonName GanetiNoded
336
337 luxid :: String
338 luxid = Runtime.daemonName GanetiLuxid
339
340 rapi :: String
341 rapi = Runtime.daemonName GanetiRapi
342
343 daemons :: FrozenSet String
344 daemons =
345   ConstantUtils.mkSet [confd,
346                        luxid,
347                        masterd,
348                        mond,
349                        noded,
350                        rapi]
351
352 defaultConfdPort :: Int
353 defaultConfdPort = 1814
354
355 defaultMondPort :: Int
356 defaultMondPort = 1815
357
358 defaultNodedPort :: Int
359 defaultNodedPort = 1811
360
361 defaultRapiPort :: Int
362 defaultRapiPort = 5080
363
364 daemonsPorts :: Map String (Protocol, Int)
365 daemonsPorts =
366   Map.fromList [(confd, (Udp, defaultConfdPort)),
367                 (mond, (Tcp, defaultMondPort)),
368                 (noded, (Tcp, defaultNodedPort)),
369                 (rapi, (Tcp, defaultRapiPort)),
370                 (ssh, (Tcp, 22))]
371
372 firstDrbdPort :: Int
373 firstDrbdPort = 11000
374
375 lastDrbdPort :: Int
376 lastDrbdPort = 14999
377
378 daemonsLogbase :: Map String String
379 daemonsLogbase =
380   Map.fromList
381   [ (Runtime.daemonName d, Runtime.daemonLogBase d) | d <- [minBound..] ]
382
383 extraLogreasonAccess :: String
384 extraLogreasonAccess = Runtime.daemonsExtraLogbase GanetiMond AccessLog
385
386 extraLogreasonError :: String
387 extraLogreasonError = Runtime.daemonsExtraLogbase GanetiMond ErrorLog
388
389 devConsole :: String
390 devConsole = ConstantUtils.devConsole
391
392 procMounts :: String
393 procMounts = "/proc/mounts"
394
395 -- * Luxi (Local UniX Interface) related constants
396
397 luxiEom :: PythonChar
398 luxiEom = PythonChar '\x03'
399
400 -- | Environment variable for the luxi override socket
401 luxiOverride :: String
402 luxiOverride = "FORCE_LUXI_SOCKET"
403
404 luxiOverrideMaster :: String
405 luxiOverrideMaster = "master"
406
407 luxiOverrideQuery :: String
408 luxiOverrideQuery = "query"
409
410 luxiVersion :: Int
411 luxiVersion = configVersion
412
413 -- * Syslog
414
415 syslogUsage :: String
416 syslogUsage = AutoConf.syslogUsage
417
418 syslogNo :: String
419 syslogNo = Logging.syslogUsageToRaw SyslogNo
420
421 syslogYes :: String
422 syslogYes = Logging.syslogUsageToRaw SyslogYes
423
424 syslogOnly :: String
425 syslogOnly = Logging.syslogUsageToRaw SyslogOnly
426
427 syslogSocket :: String
428 syslogSocket = "/dev/log"
429
430 exportConfFile :: String
431 exportConfFile = "config.ini"
432
433 -- * Xen
434
435 xenBootloader :: String
436 xenBootloader = AutoConf.xenBootloader
437
438 xenCmdXl :: String
439 xenCmdXl = "xl"
440
441 xenCmdXm :: String
442 xenCmdXm = "xm"
443
444 xenInitrd :: String
445 xenInitrd = AutoConf.xenInitrd
446
447 xenKernel :: String
448 xenKernel = AutoConf.xenKernel
449
450 -- FIXME: perhaps rename to 'validXenCommands' for consistency with
451 -- other constants
452 knownXenCommands :: FrozenSet String
453 knownXenCommands = ConstantUtils.mkSet [xenCmdXl, xenCmdXm]
454
455 -- * KVM and socat
456
457 kvmPath :: String
458 kvmPath = AutoConf.kvmPath
459
460 kvmKernel :: String
461 kvmKernel = AutoConf.kvmKernel
462
463 socatEscapeCode :: String
464 socatEscapeCode = "0x1d"
465
466 socatPath :: String
467 socatPath = AutoConf.socatPath
468
469 socatUseCompress :: Bool
470 socatUseCompress = AutoConf.socatUseCompress
471
472 socatUseEscape :: Bool
473 socatUseEscape = AutoConf.socatUseEscape
474
475 -- * Console types
476
477 -- | Display a message for console access
478 consMessage :: String
479 consMessage = "msg"
480
481 -- | Console as SPICE server
482 consSpice :: String
483 consSpice = "spice"
484
485 -- | Console as SSH command
486 consSsh :: String
487 consSsh = "ssh"
488
489 -- | Console as VNC server
490 consVnc :: String
491 consVnc = "vnc"
492
493 consAll :: FrozenSet String
494 consAll = ConstantUtils.mkSet [consMessage, consSpice, consSsh, consVnc]
495
496 -- | RSA key bit length
497 --
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.
501 rsaKeyBits :: Int
502 rsaKeyBits = 2048
503
504 -- | Ciphers allowed for SSL connections.
505 --
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"
514
515 -- * X509
516
517 -- | commonName (CN) used in certificates
518 x509CertCn :: String
519 x509CertCn = "ganeti.example.com"
520
521 -- | Default validity of certificates in days
522 x509CertDefaultValidity :: Int
523 x509CertDefaultValidity = 365 * 5
524
525 x509CertSignatureHeader :: String
526 x509CertSignatureHeader = "X-Ganeti-Signature"
527
528 -- | Digest used to sign certificates ("openssl x509" uses SHA1 by default)
529 x509CertSignDigest :: String
530 x509CertSignDigest = "SHA1"
531
532 -- * Import/export daemon mode
533
534 iemExport :: String
535 iemExport = "export"
536
537 iemImport :: String
538 iemImport = "import"
539
540 -- * Import/export transport compression
541
542 iecGzip :: String
543 iecGzip = "gzip"
544
545 iecNone :: String
546 iecNone = "none"
547
548 iecAll :: [String]
549 iecAll = [iecGzip, iecNone]
550
551 ieCustomSize :: String
552 ieCustomSize = "fd"
553
554 -- * Import/export I/O
555
556 -- | Direct file I/O, equivalent to a shell's I/O redirection using
557 -- '<' or '>'
558 ieioFile :: String
559 ieioFile = "file"
560
561 -- | Raw block device I/O using "dd"
562 ieioRawDisk :: String
563 ieioRawDisk = "raw"
564
565 -- | OS definition import/export script
566 ieioScript :: String
567 ieioScript = "script"
568
569 -- * Hooks
570
571 hooksNameCfgupdate :: String
572 hooksNameCfgupdate = "config-update"
573
574 hooksNameWatcher :: String
575 hooksNameWatcher = "watcher"
576
577 hooksPath :: String
578 hooksPath = "/sbin:/bin:/usr/sbin:/usr/bin"
579
580 hooksPhasePost :: String
581 hooksPhasePost = "post"
582
583 hooksPhasePre :: String
584 hooksPhasePre = "pre"
585
586 hooksVersion :: Int
587 hooksVersion = 2
588
589 -- * Hooks subject type (what object type does the LU deal with)
590
591 htypeCluster :: String
592 htypeCluster = "CLUSTER"
593
594 htypeGroup :: String
595 htypeGroup = "GROUP"
596
597 htypeInstance :: String
598 htypeInstance = "INSTANCE"
599
600 htypeNetwork :: String
601 htypeNetwork = "NETWORK"
602
603 htypeNode :: String
604 htypeNode = "NODE"
605
606 -- * Hkr
607
608 hkrSkip :: Int
609 hkrSkip = 0
610
611 hkrFail :: Int
612 hkrFail = 1
613
614 hkrSuccess :: Int
615 hkrSuccess = 2
616
617 -- * Storage types
618
619 stBlock :: String
620 stBlock = Types.storageTypeToRaw StorageBlock
621
622 stDiskless :: String
623 stDiskless = Types.storageTypeToRaw StorageDiskless
624
625 stExt :: String
626 stExt = Types.storageTypeToRaw StorageExt
627
628 stFile :: String
629 stFile = Types.storageTypeToRaw StorageFile
630
631 stLvmPv :: String
632 stLvmPv = Types.storageTypeToRaw StorageLvmPv
633
634 stLvmVg :: String
635 stLvmVg = Types.storageTypeToRaw StorageLvmVg
636
637 stRados :: String
638 stRados = Types.storageTypeToRaw StorageRados
639
640 storageTypes :: FrozenSet String
641 storageTypes = ConstantUtils.mkSet $ map Types.storageTypeToRaw [minBound..]
642
643 -- | The set of storage types for which storage reporting is available
644 --
645 -- FIXME: Remove this, once storage reporting is available for all
646 -- types.
647 stsReport :: FrozenSet String
648 stsReport = ConstantUtils.mkSet [stFile, stLvmPv, stLvmVg]
649
650 -- * Storage fields
651 -- ** First two are valid in LU context only, not passed to backend
652
653 sfNode :: String
654 sfNode = "node"
655
656 sfType :: String
657 sfType = "type"
658
659 -- ** and the rest are valid in backend
660
661 sfAllocatable :: String
662 sfAllocatable = Types.storageFieldToRaw SFAllocatable
663
664 sfFree :: String
665 sfFree = Types.storageFieldToRaw SFFree
666
667 sfName :: String
668 sfName = Types.storageFieldToRaw SFName
669
670 sfSize :: String
671 sfSize = Types.storageFieldToRaw SFSize
672
673 sfUsed :: String
674 sfUsed = Types.storageFieldToRaw SFUsed
675
676 validStorageFields :: FrozenSet String
677 validStorageFields =
678   ConstantUtils.mkSet $ map Types.storageFieldToRaw [minBound..] ++
679                         [sfNode, sfType]
680
681 modifiableStorageFields :: Map String (FrozenSet String)
682 modifiableStorageFields =
683   Map.fromList [(Types.storageTypeToRaw StorageLvmPv,
684                  ConstantUtils.mkSet [sfAllocatable])]
685
686 -- * Storage operations
687
688 soFixConsistency :: String
689 soFixConsistency = "fix-consistency"
690
691 validStorageOperations :: Map String (FrozenSet String)
692 validStorageOperations =
693   Map.fromList [(Types.storageTypeToRaw StorageLvmVg,
694                  ConstantUtils.mkSet [soFixConsistency])]
695
696 -- * Volume fields
697
698 vfDev :: String
699 vfDev = "dev"
700
701 vfInstance :: String
702 vfInstance = "instance"
703
704 vfName :: String
705 vfName = "name"
706
707 vfNode :: String
708 vfNode = "node"
709
710 vfPhys :: String
711 vfPhys = "phys"
712
713 vfSize :: String
714 vfSize = "size"
715
716 vfVg :: String
717 vfVg = "vg"
718
719 -- * Local disk status
720
721 ldsFaulty :: Int
722 ldsFaulty = Types.localDiskStatusToRaw DiskStatusFaulty
723
724 ldsOkay :: Int
725 ldsOkay = Types.localDiskStatusToRaw DiskStatusOk
726
727 ldsUnknown :: Int
728 ldsUnknown = Types.localDiskStatusToRaw DiskStatusUnknown
729
730 ldsNames :: Map Int String
731 ldsNames =
732   Map.fromList [ (Types.localDiskStatusToRaw ds,
733                   localDiskStatusName ds) | ds <- [minBound..] ]
734
735 -- * Disk template types
736
737 dtDiskless :: String
738 dtDiskless = Types.diskTemplateToRaw DTDiskless
739
740 dtFile :: String
741 dtFile = Types.diskTemplateToRaw DTFile
742
743 dtSharedFile :: String
744 dtSharedFile = Types.diskTemplateToRaw DTSharedFile
745
746 dtPlain :: String
747 dtPlain = Types.diskTemplateToRaw DTPlain
748
749 dtBlock :: String
750 dtBlock = Types.diskTemplateToRaw DTBlock
751
752 dtDrbd8 :: String
753 dtDrbd8 = Types.diskTemplateToRaw DTDrbd8
754
755 dtRbd :: String
756 dtRbd = Types.diskTemplateToRaw DTRbd
757
758 dtExt :: String
759 dtExt = Types.diskTemplateToRaw DTExt
760
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'
765 -- so far.
766 diskTemplatePreference :: [String]
767 diskTemplatePreference =
768   map Types.diskTemplateToRaw
769   [DTBlock, DTDiskless, DTDrbd8, DTExt, DTFile, DTPlain, DTRbd, DTSharedFile]
770
771 diskTemplates :: FrozenSet String
772 diskTemplates = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [minBound..]
773
774 -- | Disk templates that are enabled by default
775 defaultEnabledDiskTemplates :: [String]
776 defaultEnabledDiskTemplates = map Types.diskTemplateToRaw [DTDrbd8, DTPlain]
777
778 -- | Mapping of disk templates to storage types
779 mapDiskTemplateStorageType :: Map String String
780 mapDiskTemplateStorageType =
781   Map.fromList $
782   map (Types.diskTemplateToRaw *** Types.storageTypeToRaw)
783   [(DTBlock, StorageBlock),
784    (DTDrbd8, StorageLvmVg),
785    (DTExt, StorageExt),
786    (DTSharedFile, StorageFile),
787    (DTFile, StorageFile),
788    (DTDiskless, StorageDiskless),
789    (DTPlain, StorageLvmVg),
790    (DTRbd, StorageRados)]
791
792 -- | The set of network-mirrored disk templates
793 dtsIntMirror :: FrozenSet String
794 dtsIntMirror = ConstantUtils.mkSet [dtDrbd8]
795
796 -- | 'DTDiskless' is 'trivially' externally mirrored
797 dtsExtMirror :: FrozenSet String
798 dtsExtMirror =
799   ConstantUtils.mkSet $
800   map Types.diskTemplateToRaw [DTDiskless, DTBlock, DTExt, DTSharedFile, DTRbd]
801
802 -- | The set of non-lvm-based disk templates
803 dtsNotLvm :: FrozenSet String
804 dtsNotLvm =
805   ConstantUtils.mkSet $
806   map Types.diskTemplateToRaw
807   [DTSharedFile, DTDiskless, DTBlock, DTExt, DTFile, DTRbd]
808
809 -- | The set of disk templates which can be grown
810 dtsGrowable :: FrozenSet String
811 dtsGrowable =
812   ConstantUtils.mkSet $
813   map Types.diskTemplateToRaw
814   [DTSharedFile, DTDrbd8, DTPlain, DTExt, DTFile, DTRbd]
815
816 -- | The set of disk templates that allow adoption
817 dtsMayAdopt :: FrozenSet String
818 dtsMayAdopt =
819   ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTBlock, DTPlain]
820
821 -- | The set of disk templates that *must* use adoption
822 dtsMustAdopt :: FrozenSet String
823 dtsMustAdopt = ConstantUtils.mkSet [Types.diskTemplateToRaw DTBlock]
824
825 -- | The set of disk templates that allow migrations
826 dtsMirrored :: FrozenSet String
827 dtsMirrored = dtsIntMirror `ConstantUtils.union` dtsExtMirror
828
829 -- | The set of file based disk templates
830 dtsFilebased :: FrozenSet String
831 dtsFilebased =
832   ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTSharedFile, DTFile]
833
834 -- | The set of disk templates that can be moved by copying
835 --
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
839 dtsCopyable =
840   ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain, DTFile]
841
842 -- | The set of disk templates that are supported by exclusive_storage
843 dtsExclStorage :: FrozenSet String
844 dtsExclStorage = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain]
845
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]
851
852 dtsBlock :: FrozenSet String
853 dtsBlock =
854   ConstantUtils.mkSet $
855   map Types.diskTemplateToRaw [DTPlain, DTDrbd8, DTBlock, DTRbd, DTExt]
856
857 -- * Drbd
858
859 drbdHmacAlg :: String
860 drbdHmacAlg = "md5"
861
862 drbdDefaultNetProtocol :: String
863 drbdDefaultNetProtocol = "C"
864
865 drbdMigrationNetProtocol :: String
866 drbdMigrationNetProtocol = "C"
867
868 drbdStatusFile :: String
869 drbdStatusFile = "/proc/drbd"
870
871 -- | Size of DRBD meta block device
872 drbdMetaSize :: Int
873 drbdMetaSize = 128
874
875 -- * Drbd barrier types
876
877 drbdBDiskBarriers :: String
878 drbdBDiskBarriers = "b"
879
880 drbdBDiskDrain :: String
881 drbdBDiskDrain = "d"
882
883 drbdBDiskFlush :: String
884 drbdBDiskFlush = "f"
885
886 drbdBNone :: String
887 drbdBNone = "n"
888
889 -- | Rbd tool command
890 rbdCmd :: String
891 rbdCmd = "rbd"
892
893 -- * File backend driver
894
895 fdBlktap :: String
896 fdBlktap = Types.fileDriverToRaw FileBlktap
897
898 fdLoop :: String
899 fdLoop = Types.fileDriverToRaw FileLoop
900
901 fileDriver :: FrozenSet String
902 fileDriver =
903   ConstantUtils.mkSet $
904   map Types.fileDriverToRaw [minBound..]
905
906 -- | The set of drbd-like disk types
907 ldsDrbd :: FrozenSet String
908 ldsDrbd = ConstantUtils.mkSet [Types.diskTemplateToRaw DTDrbd8]
909
910 -- * Disk access mode
911
912 diskRdonly :: String
913 diskRdonly = Types.diskModeToRaw DiskRdOnly
914
915 diskRdwr :: String
916 diskRdwr = Types.diskModeToRaw DiskRdWr
917
918 diskAccessSet :: FrozenSet String
919 diskAccessSet = ConstantUtils.mkSet $ map Types.diskModeToRaw [minBound..]
920
921 -- * Disk replacement mode
922
923 replaceDiskAuto :: String
924 replaceDiskAuto = Types.replaceDisksModeToRaw ReplaceAuto
925
926 replaceDiskChg :: String
927 replaceDiskChg = Types.replaceDisksModeToRaw ReplaceNewSecondary
928
929 replaceDiskPri :: String
930 replaceDiskPri = Types.replaceDisksModeToRaw ReplaceOnPrimary
931
932 replaceDiskSec :: String
933 replaceDiskSec = Types.replaceDisksModeToRaw ReplaceOnSecondary
934
935 replaceModes :: FrozenSet String
936 replaceModes =
937   ConstantUtils.mkSet $ map Types.replaceDisksModeToRaw [minBound..]
938
939 -- * Instance export mode
940
941 exportModeLocal :: String
942 exportModeLocal = Types.exportModeToRaw ExportModeLocal
943
944 exportModeRemote :: String
945 exportModeRemote = Types.exportModeToRaw ExportModeRemote
946
947 exportModes :: FrozenSet String
948 exportModes = ConstantUtils.mkSet $ map Types.exportModeToRaw [minBound..]
949
950 -- * Instance creation modes
951
952 instanceCreate :: String
953 instanceCreate = Types.instCreateModeToRaw InstCreate
954
955 instanceImport :: String
956 instanceImport = Types.instCreateModeToRaw InstImport
957
958 instanceRemoteImport :: String
959 instanceRemoteImport = Types.instCreateModeToRaw InstRemoteImport
960
961 instanceCreateModes :: FrozenSet String
962 instanceCreateModes =
963   ConstantUtils.mkSet $ map Types.instCreateModeToRaw [minBound..]
964
965 -- * Remote import/export handshake message and version
966
967 rieHandshake :: String
968 rieHandshake = "Hi, I'm Ganeti"
969
970 rieVersion :: Int
971 rieVersion = 0
972
973 -- | Remote import/export certificate validity in seconds
974 rieCertValidity :: Int
975 rieCertValidity = 24 * 60 * 60
976
977 -- | Export only: how long to wait per connection attempt (seconds)
978 rieConnectAttemptTimeout :: Int
979 rieConnectAttemptTimeout = 20
980
981 -- | Export only: number of attempts to connect
982 rieConnectRetries :: Int
983 rieConnectRetries = 10
984
985 -- | Overall timeout for establishing connection
986 rieConnectTimeout :: Int
987 rieConnectTimeout = 180
988
989 -- | Give child process up to 5 seconds to exit after sending a signal
990 childLingerTimeout :: Double
991 childLingerTimeout = 5.0
992
993 -- * Import/export config options
994
995 inisectBep :: String
996 inisectBep = "backend"
997
998 inisectExp :: String
999 inisectExp = "export"
1000
1001 inisectHyp :: String
1002 inisectHyp = "hypervisor"
1003
1004 inisectIns :: String
1005 inisectIns = "instance"
1006
1007 inisectOsp :: String
1008 inisectOsp = "os"
1009
1010 -- * Dynamic device modification
1011
1012 ddmAdd :: String
1013 ddmAdd = Types.ddmFullToRaw DdmFullAdd
1014
1015 ddmModify :: String
1016 ddmModify = Types.ddmFullToRaw DdmFullModify
1017
1018 ddmRemove :: String
1019 ddmRemove = Types.ddmFullToRaw DdmFullRemove
1020
1021 ddmsValues :: FrozenSet String
1022 ddmsValues = ConstantUtils.mkSet [ddmAdd, ddmRemove]
1023
1024 ddmsValuesWithModify :: FrozenSet String
1025 ddmsValuesWithModify = ConstantUtils.mkSet $ map Types.ddmFullToRaw [minBound..]
1026
1027 -- * Common exit codes
1028
1029 exitSuccess :: Int
1030 exitSuccess = 0
1031
1032 exitFailure :: Int
1033 exitFailure = ConstantUtils.exitFailure
1034
1035 exitNotcluster :: Int
1036 exitNotcluster = 5
1037
1038 exitNotmaster :: Int
1039 exitNotmaster = 11
1040
1041 exitNodesetupError :: Int
1042 exitNodesetupError = 12
1043
1044 -- | Need user confirmation
1045 exitConfirmation :: Int
1046 exitConfirmation = 13
1047
1048 -- | Exit code for query operations with unknown fields
1049 exitUnknownField :: Int
1050 exitUnknownField = 14
1051
1052 -- * Tags
1053
1054 tagCluster :: String
1055 tagCluster = Types.tagKindToRaw TagKindCluster
1056
1057 tagInstance :: String
1058 tagInstance = Types.tagKindToRaw TagKindInstance
1059
1060 tagNetwork :: String
1061 tagNetwork = Types.tagKindToRaw TagKindNetwork
1062
1063 tagNode :: String
1064 tagNode = Types.tagKindToRaw TagKindNode
1065
1066 tagNodegroup :: String
1067 tagNodegroup = Types.tagKindToRaw TagKindGroup
1068
1069 validTagTypes :: FrozenSet String
1070 validTagTypes = ConstantUtils.mkSet $ map Types.tagKindToRaw [minBound..]
1071
1072 maxTagLen :: Int
1073 maxTagLen = 128
1074
1075 maxTagsPerObj :: Int
1076 maxTagsPerObj = 4096
1077
1078 -- * Others
1079
1080 defaultBridge :: String
1081 defaultBridge = "xen-br0"
1082
1083 defaultOvs :: String
1084 defaultOvs = "switch1"
1085
1086 -- | 60 MiB, expressed in KiB
1087 classicDrbdSyncSpeed :: Int
1088 classicDrbdSyncSpeed = 60 * 1024
1089
1090 ip4AddressAny :: String
1091 ip4AddressAny = "0.0.0.0"
1092
1093 ip4AddressLocalhost :: String
1094 ip4AddressLocalhost = "127.0.0.1"
1095
1096 ip6AddressAny :: String
1097 ip6AddressAny = "::"
1098
1099 ip6AddressLocalhost :: String
1100 ip6AddressLocalhost = "::1"
1101
1102 ip4Version :: Int
1103 ip4Version = 4
1104
1105 ip6Version :: Int
1106 ip6Version = 6
1107
1108 validIpVersions :: FrozenSet Int
1109 validIpVersions = ConstantUtils.mkSet [ip4Version, ip6Version]
1110
1111 tcpPingTimeout :: Int
1112 tcpPingTimeout = 10
1113
1114 defaultVg :: String
1115 defaultVg = "xenvg"
1116
1117 defaultDrbdHelper :: String
1118 defaultDrbdHelper = "/bin/true"
1119
1120 minVgSize :: Int
1121 minVgSize = 20480
1122
1123 defaultMacPrefix :: String
1124 defaultMacPrefix = "aa:00:00"
1125
1126 -- | Default maximum instance wait time, in seconds.
1127 defaultShutdownTimeout :: Int
1128 defaultShutdownTimeout = 120
1129
1130 -- | Node clock skew in seconds
1131 nodeMaxClockSkew :: Int
1132 nodeMaxClockSkew = 150
1133
1134 -- | Time for an intra-cluster disk transfer to wait for a connection
1135 diskTransferConnectTimeout :: Int
1136 diskTransferConnectTimeout = 60
1137
1138 -- | Disk index separator
1139 diskSeparator :: String
1140 diskSeparator = AutoConf.diskSeparator
1141
1142 ipCommandPath :: String
1143 ipCommandPath = AutoConf.ipPath
1144
1145 -- | Key for job IDs in opcode result
1146 jobIdsKey :: String
1147 jobIdsKey = "jobs"
1148
1149 -- * Runparts results
1150
1151 runpartsErr :: Int
1152 runpartsErr = 2
1153
1154 runpartsRun :: Int
1155 runpartsRun = 1
1156
1157 runpartsSkip :: Int
1158 runpartsSkip = 0
1159
1160 runpartsStatus :: [Int]
1161 runpartsStatus = [runpartsErr, runpartsRun, runpartsSkip]
1162
1163 -- * RPC
1164
1165 rpcEncodingNone :: Int
1166 rpcEncodingNone = 0
1167
1168 rpcEncodingZlibBase64 :: Int
1169 rpcEncodingZlibBase64 = 1
1170
1171 -- * Timeout table
1172 --
1173 -- Various time constants for the timeout table
1174
1175 rpcTmoUrgent :: Int
1176 rpcTmoUrgent = Types.rpcTimeoutToRaw Urgent
1177
1178 rpcTmoFast :: Int
1179 rpcTmoFast = Types.rpcTimeoutToRaw Fast
1180
1181 rpcTmoNormal :: Int
1182 rpcTmoNormal = Types.rpcTimeoutToRaw Normal
1183
1184 rpcTmoSlow :: Int
1185 rpcTmoSlow = Types.rpcTimeoutToRaw Slow
1186
1187 -- | 'rpcTmo_4hrs' contains an underscore to circumvent a limitation
1188 -- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1189 -- Python name.
1190 rpcTmo_4hrs :: Int
1191 rpcTmo_4hrs = Types.rpcTimeoutToRaw FourHours
1192
1193 -- | 'rpcTmo_1day' contains an underscore to circumvent a limitation
1194 -- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1195 -- Python name.
1196 rpcTmo_1day :: Int
1197 rpcTmo_1day = Types.rpcTimeoutToRaw OneDay
1198
1199 -- | Timeout for connecting to nodes (seconds)
1200 rpcConnectTimeout :: Int
1201 rpcConnectTimeout = 5
1202
1203 -- * VTypes
1204
1205 vtypeBool :: VType
1206 vtypeBool = VTypeBool
1207
1208 vtypeInt :: VType
1209 vtypeInt = VTypeInt
1210
1211 vtypeMaybeString :: VType
1212 vtypeMaybeString = VTypeMaybeString
1213
1214 -- | Size in MiBs
1215 vtypeSize :: VType
1216 vtypeSize = VTypeSize
1217
1218 vtypeString :: VType
1219 vtypeString = VTypeString
1220
1221 enforceableTypes :: FrozenSet VType
1222 enforceableTypes = ConstantUtils.mkSet [minBound..]
1223
1224 -- | Instance specs
1225 --
1226 -- FIXME: these should be associated with 'Ganeti.HTools.Types.ISpec'
1227
1228 ispecMemSize :: String
1229 ispecMemSize = ConstantUtils.ispecMemSize
1230
1231 ispecCpuCount :: String
1232 ispecCpuCount = ConstantUtils.ispecCpuCount
1233
1234 ispecDiskCount :: String
1235 ispecDiskCount = ConstantUtils.ispecDiskCount
1236
1237 ispecDiskSize :: String
1238 ispecDiskSize = ConstantUtils.ispecDiskSize
1239
1240 ispecNicCount :: String
1241 ispecNicCount = ConstantUtils.ispecNicCount
1242
1243 ispecSpindleUse :: String
1244 ispecSpindleUse = ConstantUtils.ispecSpindleUse
1245
1246 ispecsParameterTypes :: Map String VType
1247 ispecsParameterTypes =
1248   Map.fromList
1249   [(ConstantUtils.ispecDiskSize, VTypeInt),
1250    (ConstantUtils.ispecCpuCount, VTypeInt),
1251    (ConstantUtils.ispecSpindleUse, VTypeInt),
1252    (ConstantUtils.ispecMemSize, VTypeInt),
1253    (ConstantUtils.ispecNicCount, VTypeInt),
1254    (ConstantUtils.ispecDiskCount, VTypeInt)]
1255
1256 ispecsParameters :: FrozenSet String
1257 ispecsParameters =
1258   ConstantUtils.mkSet [ConstantUtils.ispecCpuCount,
1259                        ConstantUtils.ispecDiskCount,
1260                        ConstantUtils.ispecDiskSize,
1261                        ConstantUtils.ispecMemSize,
1262                        ConstantUtils.ispecNicCount,
1263                        ConstantUtils.ispecSpindleUse]
1264
1265 ispecsMinmax :: String
1266 ispecsMinmax = ConstantUtils.ispecsMinmax
1267
1268 ispecsMax :: String
1269 ispecsMax = "max"
1270
1271 ispecsMin :: String
1272 ispecsMin = "min"
1273
1274 ispecsStd :: String
1275 ispecsStd = ConstantUtils.ispecsStd
1276
1277 ipolicyDts :: String
1278 ipolicyDts = ConstantUtils.ipolicyDts
1279
1280 ipolicyVcpuRatio :: String
1281 ipolicyVcpuRatio = ConstantUtils.ipolicyVcpuRatio
1282
1283 ipolicySpindleRatio :: String
1284 ipolicySpindleRatio = ConstantUtils.ipolicySpindleRatio
1285
1286 ispecsMinmaxKeys :: FrozenSet String
1287 ispecsMinmaxKeys = ConstantUtils.mkSet [ispecsMax, ispecsMin]
1288
1289 ipolicyParameters :: FrozenSet String
1290 ipolicyParameters =
1291   ConstantUtils.mkSet [ConstantUtils.ipolicyVcpuRatio,
1292                        ConstantUtils.ipolicySpindleRatio]
1293
1294 ipolicyAllKeys :: FrozenSet String
1295 ipolicyAllKeys =
1296   ConstantUtils.union ipolicyParameters $
1297   ConstantUtils.mkSet [ConstantUtils.ipolicyDts,
1298                        ConstantUtils.ispecsMinmax,
1299                        ispecsStd]
1300
1301 -- | Node parameter names
1302
1303 ndExclusiveStorage :: String
1304 ndExclusiveStorage = "exclusive_storage"
1305
1306 ndOobProgram :: String
1307 ndOobProgram = "oob_program"
1308
1309 ndSpindleCount :: String
1310 ndSpindleCount = "spindle_count"
1311
1312 ndOvs :: String
1313 ndOvs = "ovs"
1314
1315 ndOvsLink :: String
1316 ndOvsLink = "ovs_link"
1317
1318 ndOvsName :: String
1319 ndOvsName = "ovs_name"
1320
1321 ndsParameterTypes :: Map String VType
1322 ndsParameterTypes =
1323   Map.fromList
1324   [(ndExclusiveStorage, VTypeBool),
1325    (ndOobProgram, VTypeString),
1326    (ndOvs, VTypeBool),
1327    (ndOvsLink, VTypeMaybeString),
1328    (ndOvsName, VTypeMaybeString),
1329    (ndSpindleCount, VTypeInt)]
1330
1331 ndsParameters :: FrozenSet String
1332 ndsParameters = ConstantUtils.mkSet (Map.keys ndsParameterTypes)
1333
1334 ndsParameterTitles :: Map String String
1335 ndsParameterTitles =
1336   Map.fromList
1337   [(ndExclusiveStorage, "ExclusiveStorage"),
1338    (ndOobProgram, "OutOfBandProgram"),
1339    (ndOvs, "OpenvSwitch"),
1340    (ndOvsLink, "OpenvSwitchLink"),
1341    (ndOvsName, "OpenvSwitchName"),
1342    (ndSpindleCount, "SpindleCount")]
1343
1344
1345 -- * Reboot types
1346
1347 instanceRebootSoft :: String
1348 instanceRebootSoft = Types.rebootTypeToRaw RebootSoft
1349
1350 instanceRebootHard :: String
1351 instanceRebootHard = Types.rebootTypeToRaw RebootHard
1352
1353 instanceRebootFull :: String
1354 instanceRebootFull = Types.rebootTypeToRaw RebootFull
1355
1356 rebootTypes :: FrozenSet String
1357 rebootTypes = ConstantUtils.mkSet $ map Types.rebootTypeToRaw [minBound..]
1358
1359 -- * OOB supported commands
1360
1361 oobPowerOn :: String
1362 oobPowerOn = Types.oobCommandToRaw OobPowerOn
1363
1364 oobPowerOff :: String
1365 oobPowerOff = Types.oobCommandToRaw OobPowerOff
1366
1367 oobPowerCycle :: String
1368 oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
1369
1370 oobPowerStatus :: String
1371 oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
1372
1373 oobHealth :: String
1374 oobHealth = Types.oobCommandToRaw OobHealth
1375
1376 oobCommands :: FrozenSet String
1377 oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
1378
1379 oobPowerStatusPowered :: String
1380 oobPowerStatusPowered = "powered"
1381
1382 -- | 60 seconds
1383 oobTimeout :: Int
1384 oobTimeout = 60
1385
1386 -- | 2 seconds
1387 oobPowerDelay :: Double
1388 oobPowerDelay = 2.0
1389
1390 oobStatusCritical :: String
1391 oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
1392
1393 oobStatusOk :: String
1394 oobStatusOk = Types.oobStatusToRaw OobStatusOk
1395
1396 oobStatusUnknown :: String
1397 oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
1398
1399 oobStatusWarning :: String
1400 oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
1401
1402 oobStatuses :: FrozenSet String
1403 oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
1404
1405 -- * NIC_* constants are used inside the ganeti config
1406
1407 nicLink :: String
1408 nicLink = "link"
1409
1410 nicMode :: String
1411 nicMode = "mode"
1412
1413 nicVlan :: String
1414 nicVlan = "vlan"
1415
1416 nicModeBridged :: String
1417 nicModeBridged = Types.nICModeToRaw NMBridged
1418
1419 nicModeRouted :: String
1420 nicModeRouted = Types.nICModeToRaw NMRouted
1421
1422 nicModeOvs :: String
1423 nicModeOvs = Types.nICModeToRaw NMOvs
1424
1425 nicIpPool :: String
1426 nicIpPool = Types.nICModeToRaw NMPool
1427
1428 nicValidModes :: FrozenSet String
1429 nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
1430
1431 -- * Hypervisor constants
1432
1433 htXenPvm :: String
1434 htXenPvm = Types.hypervisorToRaw XenPvm
1435
1436 htFake :: String
1437 htFake = Types.hypervisorToRaw Fake
1438
1439 htXenHvm :: String
1440 htXenHvm = Types.hypervisorToRaw XenHvm
1441
1442 htKvm :: String
1443 htKvm = Types.hypervisorToRaw Kvm
1444
1445 htChroot :: String
1446 htChroot = Types.hypervisorToRaw Chroot
1447
1448 htLxc :: String
1449 htLxc = Types.hypervisorToRaw Lxc
1450
1451 hyperTypes :: FrozenSet String
1452 hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
1453
1454 htsReqPort :: FrozenSet String
1455 htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
1456
1457 -- * Migration type
1458
1459 htMigrationLive :: String
1460 htMigrationLive = Types.migrationModeToRaw MigrationLive
1461
1462 htMigrationNonlive :: String
1463 htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
1464
1465 htMigrationModes :: FrozenSet String
1466 htMigrationModes =
1467   ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
1468
1469 -- * Cluster verify steps
1470
1471 verifyNplusoneMem :: String
1472 verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
1473
1474 verifyOptionalChecks :: FrozenSet String
1475 verifyOptionalChecks =
1476   ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
1477
1478 -- * Cluster Verify error classes
1479
1480 cvTcluster :: String
1481 cvTcluster = "cluster"
1482
1483 cvTgroup :: String
1484 cvTgroup = "group"
1485
1486 cvTnode :: String
1487 cvTnode = "node"
1488
1489 cvTinstance :: String
1490 cvTinstance = "instance"
1491
1492 -- * Cluster Verify error codes and documentation
1493
1494 cvEclustercert :: (String, String, String)
1495 cvEclustercert =
1496   ("cluster",
1497    Types.cVErrorCodeToRaw CvECLUSTERCERT,
1498    "Cluster certificate files verification failure")
1499
1500 cvEclustercfg :: (String, String, String)
1501 cvEclustercfg =
1502   ("cluster",
1503    Types.cVErrorCodeToRaw CvECLUSTERCFG,
1504    "Cluster configuration verification failure")
1505
1506 cvEclusterdanglinginst :: (String, String, String)
1507 cvEclusterdanglinginst =
1508   ("node",
1509    Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
1510    "Some instances have a non-existing primary node")
1511
1512 cvEclusterdanglingnodes :: (String, String, String)
1513 cvEclusterdanglingnodes =
1514   ("node",
1515    Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
1516    "Some nodes belong to non-existing groups")
1517
1518 cvEclusterfilecheck :: (String, String, String)
1519 cvEclusterfilecheck =
1520   ("cluster",
1521    Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
1522    "Cluster configuration verification failure")
1523
1524 cvEgroupdifferentpvsize :: (String, String, String)
1525 cvEgroupdifferentpvsize =
1526   ("group",
1527    Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
1528    "PVs in the group have different sizes")
1529
1530 cvEinstancebadnode :: (String, String, String)
1531 cvEinstancebadnode =
1532   ("instance",
1533    Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
1534    "Instance marked as running lives on an offline node")
1535
1536 cvEinstancedown :: (String, String, String)
1537 cvEinstancedown =
1538   ("instance",
1539    Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
1540    "Instance not running on its primary node")
1541
1542 cvEinstancefaultydisk :: (String, String, String)
1543 cvEinstancefaultydisk =
1544   ("instance",
1545    Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
1546    "Impossible to retrieve status for a disk")
1547
1548 cvEinstancelayout :: (String, String, String)
1549 cvEinstancelayout =
1550   ("instance",
1551    Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
1552    "Instance has multiple secondary nodes")
1553
1554 cvEinstancemissingcfgparameter :: (String, String, String)
1555 cvEinstancemissingcfgparameter =
1556   ("instance",
1557    Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
1558    "A configuration parameter for an instance is missing")
1559
1560 cvEinstancemissingdisk :: (String, String, String)
1561 cvEinstancemissingdisk =
1562   ("instance",
1563    Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
1564    "Missing volume on an instance")
1565
1566 cvEinstancepolicy :: (String, String, String)
1567 cvEinstancepolicy =
1568   ("instance",
1569    Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
1570    "Instance does not meet policy")
1571
1572 cvEinstancesplitgroups :: (String, String, String)
1573 cvEinstancesplitgroups =
1574   ("instance",
1575    Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
1576    "Instance with primary and secondary nodes in different groups")
1577
1578 cvEinstanceunsuitablenode :: (String, String, String)
1579 cvEinstanceunsuitablenode =
1580   ("instance",
1581    Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
1582    "Instance running on nodes that are not suitable for it")
1583
1584 cvEinstancewrongnode :: (String, String, String)
1585 cvEinstancewrongnode =
1586   ("instance",
1587    Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
1588    "Instance running on the wrong node")
1589
1590 cvEnodedrbd :: (String, String, String)
1591 cvEnodedrbd =
1592   ("node",
1593    Types.cVErrorCodeToRaw CvENODEDRBD,
1594    "Error parsing the DRBD status file")
1595
1596 cvEnodedrbdhelper :: (String, String, String)
1597 cvEnodedrbdhelper =
1598   ("node",
1599    Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
1600    "Error caused by the DRBD helper")
1601
1602 cvEnodedrbdversion :: (String, String, String)
1603 cvEnodedrbdversion =
1604   ("node",
1605    Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
1606    "DRBD version mismatch within a node group")
1607
1608 cvEnodefilecheck :: (String, String, String)
1609 cvEnodefilecheck =
1610   ("node",
1611    Types.cVErrorCodeToRaw CvENODEFILECHECK,
1612    "Error retrieving the checksum of the node files")
1613
1614 cvEnodefilestoragepaths :: (String, String, String)
1615 cvEnodefilestoragepaths =
1616   ("node",
1617    Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
1618    "Detected bad file storage paths")
1619
1620 cvEnodefilestoragepathunusable :: (String, String, String)
1621 cvEnodefilestoragepathunusable =
1622   ("node",
1623    Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
1624    "File storage path unusable")
1625
1626 cvEnodehooks :: (String, String, String)
1627 cvEnodehooks =
1628   ("node",
1629    Types.cVErrorCodeToRaw CvENODEHOOKS,
1630    "Communication failure in hooks execution")
1631
1632 cvEnodehv :: (String, String, String)
1633 cvEnodehv =
1634   ("node",
1635    Types.cVErrorCodeToRaw CvENODEHV,
1636    "Hypervisor parameters verification failure")
1637
1638 cvEnodelvm :: (String, String, String)
1639 cvEnodelvm =
1640   ("node",
1641    Types.cVErrorCodeToRaw CvENODELVM,
1642    "LVM-related node error")
1643
1644 cvEnoden1 :: (String, String, String)
1645 cvEnoden1 =
1646   ("node",
1647    Types.cVErrorCodeToRaw CvENODEN1,
1648    "Not enough memory to accommodate instance failovers")
1649
1650 cvEnodenet :: (String, String, String)
1651 cvEnodenet =
1652   ("node",
1653    Types.cVErrorCodeToRaw CvENODENET,
1654    "Network-related node error")
1655
1656 cvEnodeoobpath :: (String, String, String)
1657 cvEnodeoobpath =
1658   ("node",
1659    Types.cVErrorCodeToRaw CvENODEOOBPATH,
1660    "Invalid Out Of Band path")
1661
1662 cvEnodeorphaninstance :: (String, String, String)
1663 cvEnodeorphaninstance =
1664   ("node",
1665    Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
1666    "Unknown intance running on a node")
1667
1668 cvEnodeorphanlv :: (String, String, String)
1669 cvEnodeorphanlv =
1670   ("node",
1671    Types.cVErrorCodeToRaw CvENODEORPHANLV,
1672    "Unknown LVM logical volume")
1673
1674 cvEnodeos :: (String, String, String)
1675 cvEnodeos =
1676   ("node",
1677    Types.cVErrorCodeToRaw CvENODEOS,
1678    "OS-related node error")
1679
1680 cvEnoderpc :: (String, String, String)
1681 cvEnoderpc =
1682   ("node",
1683    Types.cVErrorCodeToRaw CvENODERPC,
1684    "Error during connection to the primary node of an instance")
1685
1686 cvEnodesetup :: (String, String, String)
1687 cvEnodesetup =
1688   ("node",
1689    Types.cVErrorCodeToRaw CvENODESETUP,
1690    "Node setup error")
1691
1692 cvEnodesharedfilestoragepathunusable :: (String, String, String)
1693 cvEnodesharedfilestoragepathunusable =
1694   ("node",
1695    Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
1696    "Shared file storage path unusable")
1697
1698 cvEnodessh :: (String, String, String)
1699 cvEnodessh =
1700   ("node",
1701    Types.cVErrorCodeToRaw CvENODESSH,
1702    "SSH-related node error")
1703
1704 cvEnodetime :: (String, String, String)
1705 cvEnodetime =
1706   ("node",
1707    Types.cVErrorCodeToRaw CvENODETIME,
1708    "Node returned invalid time")
1709
1710 cvEnodeuserscripts :: (String, String, String)
1711 cvEnodeuserscripts =
1712   ("node",
1713    Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
1714    "User scripts not present or not executable")
1715
1716 cvEnodeversion :: (String, String, String)
1717 cvEnodeversion =
1718   ("node",
1719    Types.cVErrorCodeToRaw CvENODEVERSION,
1720    "Protocol version mismatch or Ganeti version mismatch")
1721
1722 cvAllEcodes :: FrozenSet (String, String, String)
1723 cvAllEcodes =
1724   ConstantUtils.mkSet
1725   [cvEclustercert,
1726    cvEclustercfg,
1727    cvEclusterdanglinginst,
1728    cvEclusterdanglingnodes,
1729    cvEclusterfilecheck,
1730    cvEgroupdifferentpvsize,
1731    cvEinstancebadnode,
1732    cvEinstancedown,
1733    cvEinstancefaultydisk,
1734    cvEinstancelayout,
1735    cvEinstancemissingcfgparameter,
1736    cvEinstancemissingdisk,
1737    cvEinstancepolicy,
1738    cvEinstancesplitgroups,
1739    cvEinstanceunsuitablenode,
1740    cvEinstancewrongnode,
1741    cvEnodedrbd,
1742    cvEnodedrbdhelper,
1743    cvEnodedrbdversion,
1744    cvEnodefilecheck,
1745    cvEnodefilestoragepaths,
1746    cvEnodefilestoragepathunusable,
1747    cvEnodehooks,
1748    cvEnodehv,
1749    cvEnodelvm,
1750    cvEnoden1,
1751    cvEnodenet,
1752    cvEnodeoobpath,
1753    cvEnodeorphaninstance,
1754    cvEnodeorphanlv,
1755    cvEnodeos,
1756    cvEnoderpc,
1757    cvEnodesetup,
1758    cvEnodesharedfilestoragepathunusable,
1759    cvEnodessh,
1760    cvEnodetime,
1761    cvEnodeuserscripts,
1762    cvEnodeversion]
1763
1764 cvAllEcodesStrings :: FrozenSet String
1765 cvAllEcodesStrings =
1766   ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
1767
1768 -- * Instance status
1769
1770 inststAdmindown :: String
1771 inststAdmindown = Types.instanceStatusToRaw StatusDown
1772
1773 inststAdminoffline :: String
1774 inststAdminoffline = Types.instanceStatusToRaw StatusOffline
1775
1776 inststErrordown :: String
1777 inststErrordown = Types.instanceStatusToRaw ErrorDown
1778
1779 inststErrorup :: String
1780 inststErrorup = Types.instanceStatusToRaw ErrorUp
1781
1782 inststNodedown :: String
1783 inststNodedown = Types.instanceStatusToRaw NodeDown
1784
1785 inststNodeoffline :: String
1786 inststNodeoffline = Types.instanceStatusToRaw NodeOffline
1787
1788 inststRunning :: String
1789 inststRunning = Types.instanceStatusToRaw Running
1790
1791 inststWrongnode :: String
1792 inststWrongnode = Types.instanceStatusToRaw WrongNode
1793
1794 inststAll :: FrozenSet String
1795 inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
1796
1797 -- * Admin states
1798
1799 adminstDown :: String
1800 adminstDown = Types.adminStateToRaw AdminDown
1801
1802 adminstOffline :: String
1803 adminstOffline = Types.adminStateToRaw AdminOffline
1804
1805 adminstUp :: String
1806 adminstUp = Types.adminStateToRaw AdminUp
1807
1808 adminstAll :: FrozenSet String
1809 adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
1810
1811 -- * Node roles
1812
1813 nrDrained :: String
1814 nrDrained = Types.nodeRoleToRaw NRDrained
1815
1816 nrMaster :: String
1817 nrMaster = Types.nodeRoleToRaw NRMaster
1818
1819 nrMcandidate :: String
1820 nrMcandidate = Types.nodeRoleToRaw NRCandidate
1821
1822 nrOffline :: String
1823 nrOffline = Types.nodeRoleToRaw NROffline
1824
1825 nrRegular :: String
1826 nrRegular = Types.nodeRoleToRaw NRRegular
1827
1828 nrAll :: FrozenSet String
1829 nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
1830
1831 -- * Allocator framework constants
1832
1833 iallocatorVersion :: Int
1834 iallocatorVersion = 2
1835
1836 iallocatorDirIn :: String
1837 iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
1838
1839 iallocatorDirOut :: String
1840 iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
1841
1842 validIallocatorDirections :: FrozenSet String
1843 validIallocatorDirections =
1844   ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
1845
1846 iallocatorModeAlloc :: String
1847 iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
1848
1849 iallocatorModeChgGroup :: String
1850 iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
1851
1852 iallocatorModeMultiAlloc :: String
1853 iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
1854
1855 iallocatorModeNodeEvac :: String
1856 iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
1857
1858 iallocatorModeReloc :: String
1859 iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
1860
1861 validIallocatorModes :: FrozenSet String
1862 validIallocatorModes =
1863   ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
1864
1865 iallocatorSearchPath :: [String]
1866 iallocatorSearchPath = AutoConf.iallocatorSearchPath
1867
1868 defaultIallocatorShortcut :: String
1869 defaultIallocatorShortcut = "."
1870
1871 -- * Node evacuation
1872
1873 nodeEvacPri :: String
1874 nodeEvacPri = Types.evacModeToRaw ChangePrimary
1875
1876 nodeEvacSec :: String
1877 nodeEvacSec = Types.evacModeToRaw ChangeSecondary
1878
1879 nodeEvacAll :: String
1880 nodeEvacAll = Types.evacModeToRaw ChangeAll
1881
1882 nodeEvacModes :: FrozenSet String
1883 nodeEvacModes = ConstantUtils.mkSet $ map Types.evacModeToRaw [minBound..]
1884
1885 -- * Job status
1886
1887 jobStatusQueued :: String
1888 jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
1889
1890 jobStatusWaiting :: String
1891 jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
1892
1893 jobStatusCanceling :: String
1894 jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
1895
1896 jobStatusRunning :: String
1897 jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
1898
1899 jobStatusCanceled :: String
1900 jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
1901
1902 jobStatusSuccess :: String
1903 jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
1904
1905 jobStatusError :: String
1906 jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
1907
1908 jobsPending :: FrozenSet String
1909 jobsPending =
1910   ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
1911
1912 jobsFinalized :: FrozenSet String
1913 jobsFinalized =
1914   ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
1915
1916 jobStatusAll :: FrozenSet String
1917 jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
1918
1919 -- * OpCode status
1920
1921 -- ** Not yet finalized opcodes
1922
1923 opStatusCanceling :: String
1924 opStatusCanceling = "canceling"
1925
1926 opStatusQueued :: String
1927 opStatusQueued = "queued"
1928
1929 opStatusRunning :: String
1930 opStatusRunning = "running"
1931
1932 opStatusWaiting :: String
1933 opStatusWaiting = "waiting"
1934
1935 -- ** Finalized opcodes
1936
1937 opStatusCanceled :: String
1938 opStatusCanceled = "canceled"
1939
1940 opStatusError :: String
1941 opStatusError = "error"
1942
1943 opStatusSuccess :: String
1944 opStatusSuccess = "success"
1945
1946 opsFinalized :: FrozenSet String
1947 opsFinalized =
1948   ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
1949
1950 -- * OpCode priority
1951
1952 opPrioLowest :: Int
1953 opPrioLowest = 19
1954
1955 opPrioHighest :: Int
1956 opPrioHighest = -20
1957
1958 opPrioLow :: Int
1959 opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
1960
1961 opPrioNormal :: Int
1962 opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
1963
1964 opPrioHigh :: Int
1965 opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
1966
1967 opPrioSubmitValid :: FrozenSet Int
1968 opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
1969
1970 opPrioDefault :: Int
1971 opPrioDefault = opPrioNormal
1972
1973 -- * Execution log types
1974
1975 elogMessage :: String
1976 elogMessage = Types.eLogTypeToRaw ELogMessage
1977
1978 elogRemoteImport :: String
1979 elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
1980
1981 elogJqueueTest :: String
1982 elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
1983
1984 -- * Confd
1985
1986 confdProtocolVersion :: Int
1987 confdProtocolVersion = ConstantUtils.confdProtocolVersion
1988
1989 -- Confd request type
1990
1991 confdReqPing :: Int
1992 confdReqPing = Types.confdRequestTypeToRaw ReqPing
1993
1994 confdReqNodeRoleByname :: Int
1995 confdReqNodeRoleByname = Types.confdRequestTypeToRaw ReqNodeRoleByName
1996
1997 confdReqNodePipByInstanceIp :: Int
1998 confdReqNodePipByInstanceIp = Types.confdRequestTypeToRaw ReqNodePipByInstPip
1999
2000 confdReqClusterMaster :: Int
2001 confdReqClusterMaster = Types.confdRequestTypeToRaw ReqClusterMaster
2002
2003 confdReqNodePipList :: Int
2004 confdReqNodePipList = Types.confdRequestTypeToRaw ReqNodePipList
2005
2006 confdReqMcPipList :: Int
2007 confdReqMcPipList = Types.confdRequestTypeToRaw ReqMcPipList
2008
2009 confdReqInstancesIpsList :: Int
2010 confdReqInstancesIpsList = Types.confdRequestTypeToRaw ReqInstIpsList
2011
2012 confdReqNodeDrbd :: Int
2013 confdReqNodeDrbd = Types.confdRequestTypeToRaw ReqNodeDrbd
2014
2015 confdReqNodeInstances :: Int
2016 confdReqNodeInstances = Types.confdRequestTypeToRaw ReqNodeInstances
2017
2018 confdReqs :: FrozenSet Int
2019 confdReqs =
2020   ConstantUtils.mkSet .
2021   map Types.confdRequestTypeToRaw $
2022   [minBound..] \\ [ReqNodeInstances]
2023
2024 -- * Confd request type
2025
2026 confdReqfieldName :: Int
2027 confdReqfieldName = Types.confdReqFieldToRaw ReqFieldName
2028
2029 confdReqfieldIp :: Int
2030 confdReqfieldIp = Types.confdReqFieldToRaw ReqFieldIp
2031
2032 confdReqfieldMnodePip :: Int
2033 confdReqfieldMnodePip = Types.confdReqFieldToRaw ReqFieldMNodePip
2034
2035 -- * Confd repl status
2036
2037 confdReplStatusOk :: Int
2038 confdReplStatusOk = Types.confdReplyStatusToRaw ReplyStatusOk
2039
2040 confdReplStatusError :: Int
2041 confdReplStatusError = Types.confdReplyStatusToRaw ReplyStatusError
2042
2043 confdReplStatusNotimplemented :: Int
2044 confdReplStatusNotimplemented = Types.confdReplyStatusToRaw ReplyStatusNotImpl
2045
2046 confdReplStatuses :: FrozenSet Int
2047 confdReplStatuses =
2048   ConstantUtils.mkSet $ map Types.confdReplyStatusToRaw [minBound..]
2049
2050 -- * Confd node role
2051
2052 confdNodeRoleMaster :: Int
2053 confdNodeRoleMaster = Types.confdNodeRoleToRaw NodeRoleMaster
2054
2055 confdNodeRoleCandidate :: Int
2056 confdNodeRoleCandidate = Types.confdNodeRoleToRaw NodeRoleCandidate
2057
2058 confdNodeRoleOffline :: Int
2059 confdNodeRoleOffline = Types.confdNodeRoleToRaw NodeRoleOffline
2060
2061 confdNodeRoleDrained :: Int
2062 confdNodeRoleDrained = Types.confdNodeRoleToRaw NodeRoleDrained
2063
2064 confdNodeRoleRegular :: Int
2065 confdNodeRoleRegular = Types.confdNodeRoleToRaw NodeRoleRegular
2066
2067 -- * A few common errors for confd
2068
2069 confdErrorUnknownEntry :: Int
2070 confdErrorUnknownEntry = Types.confdErrorTypeToRaw ConfdErrorUnknownEntry
2071
2072 confdErrorInternal :: Int
2073 confdErrorInternal = Types.confdErrorTypeToRaw ConfdErrorInternal
2074
2075 confdErrorArgument :: Int
2076 confdErrorArgument = Types.confdErrorTypeToRaw ConfdErrorArgument
2077
2078 -- * Confd request query fields
2079
2080 confdReqqLink :: String
2081 confdReqqLink = ConstantUtils.confdReqqLink
2082
2083 confdReqqIp :: String
2084 confdReqqIp = ConstantUtils.confdReqqIp
2085
2086 confdReqqIplist :: String
2087 confdReqqIplist = ConstantUtils.confdReqqIplist
2088
2089 confdReqqFields :: String
2090 confdReqqFields = ConstantUtils.confdReqqFields
2091
2092 -- | Each request is "salted" by the current timestamp.
2093 --
2094 -- This constant decides how many seconds of skew to accept.
2095 --
2096 -- TODO: make this a default and allow the value to be more
2097 -- configurable
2098 confdMaxClockSkew :: Int
2099 confdMaxClockSkew = 2 * nodeMaxClockSkew
2100
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
2104 -- other processes.
2105 confdConfigReloadTimeout :: Int
2106 confdConfigReloadTimeout = 17
2107
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
2113
2114 -- | Magic number prepended to all confd queries.
2115 --
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"
2121
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
2128
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
2134
2135 -- * Possible values for NodeGroup.alloc_policy
2136
2137 allocPolicyLastResort :: String
2138 allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
2139
2140 allocPolicyPreferred :: String
2141 allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
2142
2143 allocPolicyUnallocable :: String
2144 allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
2145
2146 validAllocPolicies :: [String]
2147 validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
2148
2149 -- | Temporary external/shared storage parameters
2150 blockdevDriverManual :: String
2151 blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
2152
2153 -- | 'qemu-img' path, required for 'ovfconverter'
2154 qemuimgPath :: String
2155 qemuimgPath = AutoConf.qemuimgPath
2156
2157 -- | Whether htools was enabled at compilation time
2158 --
2159 -- FIXME: this should be moved next to the other enable constants,
2160 -- such as, 'enableConfd', and renamed to 'enableHtools'.
2161 htools :: Bool
2162 htools = AutoConf.htools
2163
2164 -- * Key files for SSH daemon
2165
2166 sshHostDsaPriv :: String
2167 sshHostDsaPriv = sshConfigDir ++ "/ssh_host_dsa_key"
2168
2169 sshHostDsaPub :: String
2170 sshHostDsaPub = sshHostDsaPriv ++ ".pub"
2171
2172 sshHostRsaPriv :: String
2173 sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key"
2174
2175 sshHostRsaPub :: String
2176 sshHostRsaPub = sshHostRsaPriv ++ ".pub"
2177
2178 -- | Path generating random UUID
2179 randomUuidFile :: String
2180 randomUuidFile = ConstantUtils.randomUuidFile
2181
2182 -- * Auto-repair tag prefixes
2183
2184 autoRepairTagPrefix :: String
2185 autoRepairTagPrefix = "ganeti:watcher:autorepair:"
2186
2187 autoRepairTagEnabled :: String
2188 autoRepairTagEnabled = autoRepairTagPrefix
2189
2190 autoRepairTagPending :: String
2191 autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
2192
2193 autoRepairTagResult :: String
2194 autoRepairTagResult = autoRepairTagPrefix ++ "result:"
2195
2196 autoRepairTagSuspended :: String
2197 autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
2198
2199 -- * Auto-repair levels
2200
2201 autoRepairFailover :: String
2202 autoRepairFailover = "failover"
2203
2204 autoRepairFixStorage :: String
2205 autoRepairFixStorage = "fix-storage"
2206
2207 autoRepairMigrate :: String
2208 autoRepairMigrate = "migrate"
2209
2210 autoRepairReinstall :: String
2211 autoRepairReinstall = "reinstall"
2212
2213 autoRepairAllTypes :: FrozenSet String
2214 autoRepairAllTypes =
2215   ConstantUtils.mkSet [autoRepairFailover,
2216                        autoRepairFixStorage,
2217                        autoRepairMigrate,
2218                        autoRepairReinstall]
2219
2220 -- * Auto-repair results
2221
2222 autoRepairEnoperm :: String
2223 autoRepairEnoperm = "enoperm"
2224
2225 autoRepairFailure :: String
2226 autoRepairFailure = "failure"
2227
2228 autoRepairSuccess :: String
2229 autoRepairSuccess = "success"
2230
2231 autoRepairAllResults :: FrozenSet String
2232 autoRepairAllResults =
2233   ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
2234
2235 -- | The version identifier for builtin data collectors
2236 builtinDataCollectorVersion :: String
2237 builtinDataCollectorVersion = "B"
2238
2239 -- | The reason trail opcode parameter name
2240 opcodeReason :: String
2241 opcodeReason = "reason"
2242
2243 diskstatsFile :: String
2244 diskstatsFile = "/proc/diskstats"
2245
2246 -- *  CPU load collector
2247
2248 statFile :: String
2249 statFile = "/proc/stat"
2250
2251 cpuavgloadBufferSize :: Int
2252 cpuavgloadBufferSize = 150
2253
2254 cpuavgloadWindowSize :: Int
2255 cpuavgloadWindowSize = 600
2256
2257 -- | Mond's variable for periodical data collection
2258 mondTimeInterval :: Int
2259 mondTimeInterval = 5
2260
2261 -- * Disk access modes
2262
2263 diskUserspace :: String
2264 diskUserspace = Types.diskAccessModeToRaw DiskUserspace
2265
2266 diskKernelspace :: String
2267 diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
2268
2269 diskValidAccessModes :: FrozenSet String
2270 diskValidAccessModes =
2271   ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
2272
2273 -- | Timeout for queue draining in upgrades
2274 upgradeQueueDrainTimeout :: Int
2275 upgradeQueueDrainTimeout = 36 * 60 * 60 -- 1.5 days
2276
2277 -- | Intervall at which the queue is polled during upgrades
2278 upgradeQueuePollInterval :: Int
2279 upgradeQueuePollInterval  = 10