Move Haskell constants to proper module
[ganeti-local] / src / Ganeti / Constants.hs
1 {-# OPTIONS -fno-warn-type-defaults #-}
2 {-| Constants contains the Haskell constants
3
4 The constants in this module are used in Haskell and are also
5 converted to 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.Constants where
38
39 import Control.Arrow ((***))
40 import Data.List ((\\))
41 import Data.Map (Map)
42 import qualified Data.Map as Map (empty, fromList, keys, insert)
43
44 import qualified AutoConf
45 import Ganeti.ConstantUtils (PythonChar(..), PythonNone(..), FrozenSet,
46                              Protocol(..), buildVersion)
47 import qualified Ganeti.ConstantUtils as ConstantUtils
48 import Ganeti.HTools.Types (AutoRepairResult(..), AutoRepairType(..))
49 import qualified Ganeti.HTools.Types as Types
50 import Ganeti.Logging (SyslogUsage(..))
51 import qualified Ganeti.Logging as Logging (syslogUsageToRaw)
52 import qualified Ganeti.Runtime as Runtime
53 import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..),
54                        ExtraLogReason(..))
55 import Ganeti.THH (PyValueEx(..))
56 import Ganeti.Types
57 import qualified Ganeti.Types as Types
58 import Ganeti.Confd.Types (ConfdRequestType(..), ConfdReqField(..),
59                            ConfdReplyStatus(..), ConfdNodeRole(..),
60                            ConfdErrorType(..))
61 import qualified Ganeti.Confd.Types as Types
62
63 {-# ANN module "HLint: ignore Use camelCase" #-}
64
65 -- * 'autoconf' constants for Python only ('autotools/build-bash-completion')
66
67 htoolsProgs :: [String]
68 htoolsProgs = AutoConf.htoolsProgs
69
70 -- * 'autoconf' constants for Python only ('lib/constants.py')
71
72 drbdBarriers :: String
73 drbdBarriers = AutoConf.drbdBarriers
74
75 drbdNoMetaFlush :: Bool
76 drbdNoMetaFlush = AutoConf.drbdNoMetaFlush
77
78 lvmStripecount :: Int
79 lvmStripecount = AutoConf.lvmStripecount
80
81 hasGnuLn :: Bool
82 hasGnuLn = AutoConf.hasGnuLn
83
84 -- * 'autoconf' constants for Python only ('lib/pathutils.py')
85
86 -- ** Build-time constants
87
88 exportDir :: String
89 exportDir = AutoConf.exportDir
90
91 osSearchPath :: [String]
92 osSearchPath = AutoConf.osSearchPath
93
94 esSearchPath :: [String]
95 esSearchPath = AutoConf.esSearchPath
96
97 sshConfigDir :: String
98 sshConfigDir = AutoConf.sshConfigDir
99
100 xenConfigDir :: String
101 xenConfigDir = AutoConf.xenConfigDir
102
103 sysconfdir :: String
104 sysconfdir = AutoConf.sysconfdir
105
106 toolsdir :: String
107 toolsdir = AutoConf.toolsdir
108
109 localstatedir :: String
110 localstatedir = AutoConf.localstatedir
111
112 -- ** Paths which don't change for a virtual cluster
113
114 pkglibdir :: String
115 pkglibdir = AutoConf.pkglibdir
116
117 sharedir :: String
118 sharedir = AutoConf.sharedir
119
120 -- * 'autoconf' constants for Python only ('lib/build/sphinx_ext.py')
121
122 manPages :: Map String Int
123 manPages = Map.fromList AutoConf.manPages
124
125 -- * 'autoconf' constants for QA cluster only ('qa/qa_cluster.py')
126
127 versionedsharedir :: String
128 versionedsharedir = AutoConf.versionedsharedir
129
130 -- * 'autoconf' constants for Python only ('tests/py/docs_unittest.py')
131
132 gntScripts :: [String]
133 gntScripts = AutoConf.gntScripts
134
135 -- * Various versions
136
137 releaseVersion :: String
138 releaseVersion = AutoConf.packageVersion
139
140 versionMajor :: Int
141 versionMajor = AutoConf.versionMajor
142
143 versionMinor :: Int
144 versionMinor = AutoConf.versionMinor
145
146 versionRevision :: Int
147 versionRevision = AutoConf.versionRevision
148
149 dirVersion :: String
150 dirVersion = AutoConf.dirVersion
151
152 osApiV10 :: Int
153 osApiV10 = 10
154
155 osApiV15 :: Int
156 osApiV15 = 15
157
158 osApiV20 :: Int
159 osApiV20 = 20
160
161 osApiVersions :: FrozenSet Int
162 osApiVersions = ConstantUtils.mkSet [osApiV10, osApiV15, osApiV20]
163
164 exportVersion :: Int
165 exportVersion = 0
166
167 rapiVersion :: Int
168 rapiVersion = 2
169
170 configMajor :: Int
171 configMajor = AutoConf.versionMajor
172
173 configMinor :: Int
174 configMinor = AutoConf.versionMinor
175
176 -- | The configuration is supposed to remain stable across
177 -- revisions. Therefore, the revision number is cleared to '0'.
178 configRevision :: Int
179 configRevision = 0
180
181 configVersion :: Int
182 configVersion = buildVersion configMajor configMinor configRevision
183
184 -- | Similarly to the configuration (see 'configRevision'), the
185 -- protocols are supposed to remain stable across revisions.
186 protocolVersion :: Int
187 protocolVersion = buildVersion configMajor configMinor configRevision
188
189 -- * User separation
190
191 daemonsGroup :: String
192 daemonsGroup = Runtime.daemonGroup (ExtraGroup DaemonsGroup)
193
194 adminGroup :: String
195 adminGroup = Runtime.daemonGroup (ExtraGroup AdminGroup)
196
197 masterdUser :: String
198 masterdUser = Runtime.daemonUser GanetiMasterd
199
200 masterdGroup :: String
201 masterdGroup = Runtime.daemonGroup (DaemonGroup GanetiMasterd)
202
203 rapiUser :: String
204 rapiUser = Runtime.daemonUser GanetiRapi
205
206 rapiGroup :: String
207 rapiGroup = Runtime.daemonGroup (DaemonGroup GanetiRapi)
208
209 confdUser :: String
210 confdUser = Runtime.daemonUser GanetiConfd
211
212 confdGroup :: String
213 confdGroup = Runtime.daemonGroup (DaemonGroup GanetiConfd)
214
215 luxidUser :: String
216 luxidUser = Runtime.daemonUser GanetiLuxid
217
218 luxidGroup :: String
219 luxidGroup = Runtime.daemonGroup (DaemonGroup GanetiLuxid)
220
221 nodedUser :: String
222 nodedUser = Runtime.daemonUser GanetiNoded
223
224 nodedGroup :: String
225 nodedGroup = Runtime.daemonGroup (DaemonGroup GanetiNoded)
226
227 mondUser :: String
228 mondUser = Runtime.daemonUser GanetiMond
229
230 mondGroup :: String
231 mondGroup = Runtime.daemonGroup (DaemonGroup GanetiMond)
232
233 sshLoginUser :: String
234 sshLoginUser = AutoConf.sshLoginUser
235
236 sshConsoleUser :: String
237 sshConsoleUser = AutoConf.sshConsoleUser
238
239 -- * Cpu pinning separators and constants
240
241 cpuPinningSep :: String
242 cpuPinningSep = ":"
243
244 cpuPinningAll :: String
245 cpuPinningAll = "all"
246
247 -- | Internal representation of "all"
248 cpuPinningAllVal :: Int
249 cpuPinningAllVal = -1
250
251 -- | One "all" entry in a CPU list means CPU pinning is off
252 cpuPinningOff :: [Int]
253 cpuPinningOff = [cpuPinningAllVal]
254
255 -- | A Xen-specific implementation detail is that there is no way to
256 -- actually say "use any cpu for pinning" in a Xen configuration file,
257 -- as opposed to the command line, where you can say
258 -- @
259 -- xm vcpu-pin <domain> <vcpu> all
260 -- @
261 --
262 -- The workaround used in Xen is "0-63" (see source code function
263 -- "xm_vcpu_pin" in @<xen-source>/tools/python/xen/xm/main.py@).
264 --
265 -- To support future changes, the following constant is treated as a
266 -- blackbox string that simply means "use any cpu for pinning under
267 -- xen".
268 cpuPinningAllXen :: String
269 cpuPinningAllXen = "0-63"
270
271 -- | A KVM-specific implementation detail - the following value is
272 -- used to set CPU affinity to all processors (--0 through --31), per
273 -- taskset man page.
274 --
275 -- FIXME: This only works for machines with up to 32 CPU cores
276 cpuPinningAllKvm :: Int
277 cpuPinningAllKvm = 0xFFFFFFFF
278
279 -- * Wipe
280
281 ddCmd :: String
282 ddCmd = "dd"
283
284 -- | 1GB
285 maxWipeChunk :: Int
286 maxWipeChunk = 1024
287
288 minWipeChunkPercent :: Int
289 minWipeChunkPercent = 10
290
291 -- * Directories
292
293 runDirsMode :: Int
294 runDirsMode = 0o775
295
296 secureDirMode :: Int
297 secureDirMode = 0o700
298
299 secureFileMode :: Int
300 secureFileMode = 0o600
301
302 adoptableBlockdevRoot :: String
303 adoptableBlockdevRoot = "/dev/disk/"
304
305 -- * 'autoconf' enable/disable
306
307 enableConfd :: Bool
308 enableConfd = AutoConf.enableConfd
309
310 enableMond :: Bool
311 enableMond = AutoConf.enableMond
312
313 enableRestrictedCommands :: Bool
314 enableRestrictedCommands = AutoConf.enableRestrictedCommands
315
316 enableSplitQuery :: Bool
317 enableSplitQuery = AutoConf.enableSplitQuery
318
319 -- * SSH constants
320
321 ssh :: String
322 ssh = "ssh"
323
324 scp :: String
325 scp = "scp"
326
327 -- * Daemons
328
329 confd :: String
330 confd = Runtime.daemonName GanetiConfd
331
332 masterd :: String
333 masterd = Runtime.daemonName GanetiMasterd
334
335 mond :: String
336 mond = Runtime.daemonName GanetiMond
337
338 noded :: String
339 noded = Runtime.daemonName GanetiNoded
340
341 luxid :: String
342 luxid = Runtime.daemonName GanetiLuxid
343
344 rapi :: String
345 rapi = Runtime.daemonName GanetiRapi
346
347 daemons :: FrozenSet String
348 daemons =
349   ConstantUtils.mkSet [confd,
350                        luxid,
351                        masterd,
352                        mond,
353                        noded,
354                        rapi]
355
356 defaultConfdPort :: Int
357 defaultConfdPort = 1814
358
359 defaultMondPort :: Int
360 defaultMondPort = 1815
361
362 defaultNodedPort :: Int
363 defaultNodedPort = 1811
364
365 defaultRapiPort :: Int
366 defaultRapiPort = 5080
367
368 daemonsPorts :: Map String (Protocol, Int)
369 daemonsPorts =
370   Map.fromList [(confd, (Udp, defaultConfdPort)),
371                 (mond, (Tcp, defaultMondPort)),
372                 (noded, (Tcp, defaultNodedPort)),
373                 (rapi, (Tcp, defaultRapiPort)),
374                 (ssh, (Tcp, 22))]
375
376 firstDrbdPort :: Int
377 firstDrbdPort = 11000
378
379 lastDrbdPort :: Int
380 lastDrbdPort = 14999
381
382 daemonsLogbase :: Map String String
383 daemonsLogbase =
384   Map.fromList
385   [ (Runtime.daemonName d, Runtime.daemonLogBase d) | d <- [minBound..] ]
386
387 daemonsExtraLogbase :: Map String (Map String String)
388 daemonsExtraLogbase =
389   Map.fromList $
390   map (Runtime.daemonName *** id)
391   [ (GanetiMond, Map.fromList
392                  [ ("access", Runtime.daemonsExtraLogbase GanetiMond AccessLog)
393                  , ("error", Runtime.daemonsExtraLogbase GanetiMond ErrorLog)
394                  ])
395   ]
396
397 extraLogreasonAccess :: String
398 extraLogreasonAccess = Runtime.daemonsExtraLogbase GanetiMond AccessLog
399
400 extraLogreasonError :: String
401 extraLogreasonError = Runtime.daemonsExtraLogbase GanetiMond ErrorLog
402
403 devConsole :: String
404 devConsole = ConstantUtils.devConsole
405
406 procMounts :: String
407 procMounts = "/proc/mounts"
408
409 -- * Luxi (Local UniX Interface) related constants
410
411 luxiEom :: PythonChar
412 luxiEom = PythonChar '\x03'
413
414 -- | Environment variable for the luxi override socket
415 luxiOverride :: String
416 luxiOverride = "FORCE_LUXI_SOCKET"
417
418 luxiOverrideMaster :: String
419 luxiOverrideMaster = "master"
420
421 luxiOverrideQuery :: String
422 luxiOverrideQuery = "query"
423
424 luxiVersion :: Int
425 luxiVersion = configVersion
426
427 -- * Syslog
428
429 syslogUsage :: String
430 syslogUsage = AutoConf.syslogUsage
431
432 syslogNo :: String
433 syslogNo = Logging.syslogUsageToRaw SyslogNo
434
435 syslogYes :: String
436 syslogYes = Logging.syslogUsageToRaw SyslogYes
437
438 syslogOnly :: String
439 syslogOnly = Logging.syslogUsageToRaw SyslogOnly
440
441 syslogSocket :: String
442 syslogSocket = "/dev/log"
443
444 exportConfFile :: String
445 exportConfFile = "config.ini"
446
447 -- * Xen
448
449 xenBootloader :: String
450 xenBootloader = AutoConf.xenBootloader
451
452 xenCmdXl :: String
453 xenCmdXl = "xl"
454
455 xenCmdXm :: String
456 xenCmdXm = "xm"
457
458 xenInitrd :: String
459 xenInitrd = AutoConf.xenInitrd
460
461 xenKernel :: String
462 xenKernel = AutoConf.xenKernel
463
464 -- FIXME: perhaps rename to 'validXenCommands' for consistency with
465 -- other constants
466 knownXenCommands :: FrozenSet String
467 knownXenCommands = ConstantUtils.mkSet [xenCmdXl, xenCmdXm]
468
469 -- * KVM and socat
470
471 kvmPath :: String
472 kvmPath = AutoConf.kvmPath
473
474 kvmKernel :: String
475 kvmKernel = AutoConf.kvmKernel
476
477 socatEscapeCode :: String
478 socatEscapeCode = "0x1d"
479
480 socatPath :: String
481 socatPath = AutoConf.socatPath
482
483 socatUseCompress :: Bool
484 socatUseCompress = AutoConf.socatUseCompress
485
486 socatUseEscape :: Bool
487 socatUseEscape = AutoConf.socatUseEscape
488
489 -- * Console types
490
491 -- | Display a message for console access
492 consMessage :: String
493 consMessage = "msg"
494
495 -- | Console as SPICE server
496 consSpice :: String
497 consSpice = "spice"
498
499 -- | Console as SSH command
500 consSsh :: String
501 consSsh = "ssh"
502
503 -- | Console as VNC server
504 consVnc :: String
505 consVnc = "vnc"
506
507 consAll :: FrozenSet String
508 consAll = ConstantUtils.mkSet [consMessage, consSpice, consSsh, consVnc]
509
510 -- | RSA key bit length
511 --
512 -- For RSA keys more bits are better, but they also make operations
513 -- more expensive. NIST SP 800-131 recommends a minimum of 2048 bits
514 -- from the year 2010 on.
515 rsaKeyBits :: Int
516 rsaKeyBits = 2048
517
518 -- | Ciphers allowed for SSL connections.
519 --
520 -- For the format, see ciphers(1). A better way to disable ciphers
521 -- would be to use the exclamation mark (!), but socat versions below
522 -- 1.5 can't parse exclamation marks in options properly. When
523 -- modifying the ciphers, ensure not to accidentially add something
524 -- after it's been removed. Use the "openssl" utility to check the
525 -- allowed ciphers, e.g.  "openssl ciphers -v HIGH:-DES".
526 opensslCiphers :: String
527 opensslCiphers = "HIGH:-DES:-3DES:-EXPORT:-ADH"
528
529 -- * X509
530
531 -- | commonName (CN) used in certificates
532 x509CertCn :: String
533 x509CertCn = "ganeti.example.com"
534
535 -- | Default validity of certificates in days
536 x509CertDefaultValidity :: Int
537 x509CertDefaultValidity = 365 * 5
538
539 x509CertSignatureHeader :: String
540 x509CertSignatureHeader = "X-Ganeti-Signature"
541
542 -- | Digest used to sign certificates ("openssl x509" uses SHA1 by default)
543 x509CertSignDigest :: String
544 x509CertSignDigest = "SHA1"
545
546 -- * Import/export daemon mode
547
548 iemExport :: String
549 iemExport = "export"
550
551 iemImport :: String
552 iemImport = "import"
553
554 -- * Import/export transport compression
555
556 iecGzip :: String
557 iecGzip = "gzip"
558
559 iecNone :: String
560 iecNone = "none"
561
562 iecAll :: [String]
563 iecAll = [iecGzip, iecNone]
564
565 ieCustomSize :: String
566 ieCustomSize = "fd"
567
568 -- * Import/export I/O
569
570 -- | Direct file I/O, equivalent to a shell's I/O redirection using
571 -- '<' or '>'
572 ieioFile :: String
573 ieioFile = "file"
574
575 -- | Raw block device I/O using "dd"
576 ieioRawDisk :: String
577 ieioRawDisk = "raw"
578
579 -- | OS definition import/export script
580 ieioScript :: String
581 ieioScript = "script"
582
583 -- * Values
584
585 valueDefault :: String
586 valueDefault = "default"
587
588 valueAuto :: String
589 valueAuto = "auto"
590
591 valueGenerate :: String
592 valueGenerate = "generate"
593
594 valueNone :: String
595 valueNone = "none"
596
597 valueTrue :: String
598 valueTrue = "true"
599
600 valueFalse :: String
601 valueFalse = "false"
602
603 valueHsNothing :: Map String PythonNone
604 valueHsNothing = Map.fromList [("Nothing", PythonNone)]
605
606 -- * Hooks
607
608 hooksNameCfgupdate :: String
609 hooksNameCfgupdate = "config-update"
610
611 hooksNameWatcher :: String
612 hooksNameWatcher = "watcher"
613
614 hooksPath :: String
615 hooksPath = "/sbin:/bin:/usr/sbin:/usr/bin"
616
617 hooksPhasePost :: String
618 hooksPhasePost = "post"
619
620 hooksPhasePre :: String
621 hooksPhasePre = "pre"
622
623 hooksVersion :: Int
624 hooksVersion = 2
625
626 -- * Hooks subject type (what object type does the LU deal with)
627
628 htypeCluster :: String
629 htypeCluster = "CLUSTER"
630
631 htypeGroup :: String
632 htypeGroup = "GROUP"
633
634 htypeInstance :: String
635 htypeInstance = "INSTANCE"
636
637 htypeNetwork :: String
638 htypeNetwork = "NETWORK"
639
640 htypeNode :: String
641 htypeNode = "NODE"
642
643 -- * Hkr
644
645 hkrSkip :: Int
646 hkrSkip = 0
647
648 hkrFail :: Int
649 hkrFail = 1
650
651 hkrSuccess :: Int
652 hkrSuccess = 2
653
654 -- * Storage types
655
656 stBlock :: String
657 stBlock = Types.storageTypeToRaw StorageBlock
658
659 stDiskless :: String
660 stDiskless = Types.storageTypeToRaw StorageDiskless
661
662 stExt :: String
663 stExt = Types.storageTypeToRaw StorageExt
664
665 stFile :: String
666 stFile = Types.storageTypeToRaw StorageFile
667
668 stLvmPv :: String
669 stLvmPv = Types.storageTypeToRaw StorageLvmPv
670
671 stLvmVg :: String
672 stLvmVg = Types.storageTypeToRaw StorageLvmVg
673
674 stRados :: String
675 stRados = Types.storageTypeToRaw StorageRados
676
677 storageTypes :: FrozenSet String
678 storageTypes = ConstantUtils.mkSet $ map Types.storageTypeToRaw [minBound..]
679
680 -- | The set of storage types for which storage reporting is available
681 --
682 -- FIXME: Remove this, once storage reporting is available for all
683 -- types.
684 stsReport :: FrozenSet String
685 stsReport = ConstantUtils.mkSet [stFile, stLvmPv, stLvmVg]
686
687 -- * Storage fields
688 -- ** First two are valid in LU context only, not passed to backend
689
690 sfNode :: String
691 sfNode = "node"
692
693 sfType :: String
694 sfType = "type"
695
696 -- ** and the rest are valid in backend
697
698 sfAllocatable :: String
699 sfAllocatable = Types.storageFieldToRaw SFAllocatable
700
701 sfFree :: String
702 sfFree = Types.storageFieldToRaw SFFree
703
704 sfName :: String
705 sfName = Types.storageFieldToRaw SFName
706
707 sfSize :: String
708 sfSize = Types.storageFieldToRaw SFSize
709
710 sfUsed :: String
711 sfUsed = Types.storageFieldToRaw SFUsed
712
713 validStorageFields :: FrozenSet String
714 validStorageFields =
715   ConstantUtils.mkSet $ map Types.storageFieldToRaw [minBound..] ++
716                         [sfNode, sfType]
717
718 modifiableStorageFields :: Map String (FrozenSet String)
719 modifiableStorageFields =
720   Map.fromList [(Types.storageTypeToRaw StorageLvmPv,
721                  ConstantUtils.mkSet [sfAllocatable])]
722
723 -- * Storage operations
724
725 soFixConsistency :: String
726 soFixConsistency = "fix-consistency"
727
728 validStorageOperations :: Map String (FrozenSet String)
729 validStorageOperations =
730   Map.fromList [(Types.storageTypeToRaw StorageLvmVg,
731                  ConstantUtils.mkSet [soFixConsistency])]
732
733 -- * Volume fields
734
735 vfDev :: String
736 vfDev = "dev"
737
738 vfInstance :: String
739 vfInstance = "instance"
740
741 vfName :: String
742 vfName = "name"
743
744 vfNode :: String
745 vfNode = "node"
746
747 vfPhys :: String
748 vfPhys = "phys"
749
750 vfSize :: String
751 vfSize = "size"
752
753 vfVg :: String
754 vfVg = "vg"
755
756 -- * Local disk status
757
758 ldsFaulty :: Int
759 ldsFaulty = Types.localDiskStatusToRaw DiskStatusFaulty
760
761 ldsOkay :: Int
762 ldsOkay = Types.localDiskStatusToRaw DiskStatusOk
763
764 ldsUnknown :: Int
765 ldsUnknown = Types.localDiskStatusToRaw DiskStatusUnknown
766
767 ldsNames :: Map Int String
768 ldsNames =
769   Map.fromList [ (Types.localDiskStatusToRaw ds,
770                   localDiskStatusName ds) | ds <- [minBound..] ]
771
772 -- * Disk template types
773
774 dtDiskless :: String
775 dtDiskless = Types.diskTemplateToRaw DTDiskless
776
777 dtFile :: String
778 dtFile = Types.diskTemplateToRaw DTFile
779
780 dtSharedFile :: String
781 dtSharedFile = Types.diskTemplateToRaw DTSharedFile
782
783 dtPlain :: String
784 dtPlain = Types.diskTemplateToRaw DTPlain
785
786 dtBlock :: String
787 dtBlock = Types.diskTemplateToRaw DTBlock
788
789 dtDrbd8 :: String
790 dtDrbd8 = Types.diskTemplateToRaw DTDrbd8
791
792 dtRbd :: String
793 dtRbd = Types.diskTemplateToRaw DTRbd
794
795 dtExt :: String
796 dtExt = Types.diskTemplateToRaw DTExt
797
798 -- | This is used to order determine the default disk template when
799 -- the list of enabled disk templates is inferred from the current
800 -- state of the cluster.  This only happens on an upgrade from a
801 -- version of Ganeti that did not support the 'enabled_disk_templates'
802 -- so far.
803 diskTemplatePreference :: [String]
804 diskTemplatePreference =
805   map Types.diskTemplateToRaw
806   [DTBlock, DTDiskless, DTDrbd8, DTExt, DTFile, DTPlain, DTRbd, DTSharedFile]
807
808 diskTemplates :: FrozenSet String
809 diskTemplates = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [minBound..]
810
811 -- | Disk templates that are enabled by default
812 defaultEnabledDiskTemplates :: [String]
813 defaultEnabledDiskTemplates = map Types.diskTemplateToRaw [DTDrbd8, DTPlain]
814
815 -- | Mapping of disk templates to storage types
816 mapDiskTemplateStorageType :: Map String String
817 mapDiskTemplateStorageType =
818   Map.fromList $
819   map (Types.diskTemplateToRaw *** Types.storageTypeToRaw)
820   [(DTBlock, StorageBlock),
821    (DTDrbd8, StorageLvmVg),
822    (DTExt, StorageExt),
823    (DTSharedFile, StorageFile),
824    (DTFile, StorageFile),
825    (DTDiskless, StorageDiskless),
826    (DTPlain, StorageLvmVg),
827    (DTRbd, StorageRados)]
828
829 -- | The set of network-mirrored disk templates
830 dtsIntMirror :: FrozenSet String
831 dtsIntMirror = ConstantUtils.mkSet [dtDrbd8]
832
833 -- | 'DTDiskless' is 'trivially' externally mirrored
834 dtsExtMirror :: FrozenSet String
835 dtsExtMirror =
836   ConstantUtils.mkSet $
837   map Types.diskTemplateToRaw [DTDiskless, DTBlock, DTExt, DTSharedFile, DTRbd]
838
839 -- | The set of non-lvm-based disk templates
840 dtsNotLvm :: FrozenSet String
841 dtsNotLvm =
842   ConstantUtils.mkSet $
843   map Types.diskTemplateToRaw
844   [DTSharedFile, DTDiskless, DTBlock, DTExt, DTFile, DTRbd]
845
846 -- | The set of disk templates which can be grown
847 dtsGrowable :: FrozenSet String
848 dtsGrowable =
849   ConstantUtils.mkSet $
850   map Types.diskTemplateToRaw
851   [DTSharedFile, DTDrbd8, DTPlain, DTExt, DTFile, DTRbd]
852
853 -- | The set of disk templates that allow adoption
854 dtsMayAdopt :: FrozenSet String
855 dtsMayAdopt =
856   ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTBlock, DTPlain]
857
858 -- | The set of disk templates that *must* use adoption
859 dtsMustAdopt :: FrozenSet String
860 dtsMustAdopt = ConstantUtils.mkSet [Types.diskTemplateToRaw DTBlock]
861
862 -- | The set of disk templates that allow migrations
863 dtsMirrored :: FrozenSet String
864 dtsMirrored = dtsIntMirror `ConstantUtils.union` dtsExtMirror
865
866 -- | The set of file based disk templates
867 dtsFilebased :: FrozenSet String
868 dtsFilebased =
869   ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTSharedFile, DTFile]
870
871 -- | The set of disk templates that can be moved by copying
872 --
873 -- Note: a requirement is that they're not accessed externally or
874 -- shared between nodes; in particular, sharedfile is not suitable.
875 dtsCopyable :: FrozenSet String
876 dtsCopyable =
877   ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain, DTFile]
878
879 -- | The set of disk templates that are supported by exclusive_storage
880 dtsExclStorage :: FrozenSet String
881 dtsExclStorage = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain]
882
883 -- | Templates for which we don't perform checks on free space
884 dtsNoFreeSpaceCheck :: FrozenSet String
885 dtsNoFreeSpaceCheck =
886   ConstantUtils.mkSet $
887   map Types.diskTemplateToRaw [DTExt, DTSharedFile, DTFile, DTRbd]
888
889 dtsBlock :: FrozenSet String
890 dtsBlock =
891   ConstantUtils.mkSet $
892   map Types.diskTemplateToRaw [DTPlain, DTDrbd8, DTBlock, DTRbd, DTExt]
893
894 -- | The set of lvm-based disk templates
895 dtsLvm :: FrozenSet String
896 dtsLvm = diskTemplates `ConstantUtils.difference` dtsNotLvm
897
898 -- * Drbd
899
900 drbdHmacAlg :: String
901 drbdHmacAlg = "md5"
902
903 drbdDefaultNetProtocol :: String
904 drbdDefaultNetProtocol = "C"
905
906 drbdMigrationNetProtocol :: String
907 drbdMigrationNetProtocol = "C"
908
909 drbdStatusFile :: String
910 drbdStatusFile = "/proc/drbd"
911
912 -- | Size of DRBD meta block device
913 drbdMetaSize :: Int
914 drbdMetaSize = 128
915
916 -- * Drbd barrier types
917
918 drbdBDiskBarriers :: String
919 drbdBDiskBarriers = "b"
920
921 drbdBDiskDrain :: String
922 drbdBDiskDrain = "d"
923
924 drbdBDiskFlush :: String
925 drbdBDiskFlush = "f"
926
927 drbdBNone :: String
928 drbdBNone = "n"
929
930 -- | Valid barrier combinations: "n" or any non-null subset of "bfd"
931 drbdValidBarrierOpt :: FrozenSet (FrozenSet String)
932 drbdValidBarrierOpt =
933   ConstantUtils.mkSet
934   [ ConstantUtils.mkSet [drbdBNone]
935   , ConstantUtils.mkSet [drbdBDiskBarriers]
936   , ConstantUtils.mkSet [drbdBDiskDrain]
937   , ConstantUtils.mkSet [drbdBDiskFlush]
938   , ConstantUtils.mkSet [drbdBDiskDrain, drbdBDiskFlush]
939   , ConstantUtils.mkSet [drbdBDiskBarriers, drbdBDiskDrain]
940   , ConstantUtils.mkSet [drbdBDiskBarriers, drbdBDiskFlush]
941   , ConstantUtils.mkSet [drbdBDiskBarriers, drbdBDiskFlush, drbdBDiskDrain]
942   ]
943
944 -- | Rbd tool command
945 rbdCmd :: String
946 rbdCmd = "rbd"
947
948 -- * File backend driver
949
950 fdBlktap :: String
951 fdBlktap = Types.fileDriverToRaw FileBlktap
952
953 fdLoop :: String
954 fdLoop = Types.fileDriverToRaw FileLoop
955
956 fileDriver :: FrozenSet String
957 fileDriver =
958   ConstantUtils.mkSet $
959   map Types.fileDriverToRaw [minBound..]
960
961 -- | The set of drbd-like disk types
962 dtsDrbd :: FrozenSet String
963 dtsDrbd = ConstantUtils.mkSet [Types.diskTemplateToRaw DTDrbd8]
964
965 -- * Disk access mode
966
967 diskRdonly :: String
968 diskRdonly = Types.diskModeToRaw DiskRdOnly
969
970 diskRdwr :: String
971 diskRdwr = Types.diskModeToRaw DiskRdWr
972
973 diskAccessSet :: FrozenSet String
974 diskAccessSet = ConstantUtils.mkSet $ map Types.diskModeToRaw [minBound..]
975
976 -- * Disk replacement mode
977
978 replaceDiskAuto :: String
979 replaceDiskAuto = Types.replaceDisksModeToRaw ReplaceAuto
980
981 replaceDiskChg :: String
982 replaceDiskChg = Types.replaceDisksModeToRaw ReplaceNewSecondary
983
984 replaceDiskPri :: String
985 replaceDiskPri = Types.replaceDisksModeToRaw ReplaceOnPrimary
986
987 replaceDiskSec :: String
988 replaceDiskSec = Types.replaceDisksModeToRaw ReplaceOnSecondary
989
990 replaceModes :: FrozenSet String
991 replaceModes =
992   ConstantUtils.mkSet $ map Types.replaceDisksModeToRaw [minBound..]
993
994 -- * Instance export mode
995
996 exportModeLocal :: String
997 exportModeLocal = Types.exportModeToRaw ExportModeLocal
998
999 exportModeRemote :: String
1000 exportModeRemote = Types.exportModeToRaw ExportModeRemote
1001
1002 exportModes :: FrozenSet String
1003 exportModes = ConstantUtils.mkSet $ map Types.exportModeToRaw [minBound..]
1004
1005 -- * Instance creation modes
1006
1007 instanceCreate :: String
1008 instanceCreate = Types.instCreateModeToRaw InstCreate
1009
1010 instanceImport :: String
1011 instanceImport = Types.instCreateModeToRaw InstImport
1012
1013 instanceRemoteImport :: String
1014 instanceRemoteImport = Types.instCreateModeToRaw InstRemoteImport
1015
1016 instanceCreateModes :: FrozenSet String
1017 instanceCreateModes =
1018   ConstantUtils.mkSet $ map Types.instCreateModeToRaw [minBound..]
1019
1020 -- * Remote import/export handshake message and version
1021
1022 rieHandshake :: String
1023 rieHandshake = "Hi, I'm Ganeti"
1024
1025 rieVersion :: Int
1026 rieVersion = 0
1027
1028 -- | Remote import/export certificate validity (seconds)
1029 rieCertValidity :: Int
1030 rieCertValidity = 24 * 60 * 60
1031
1032 -- | Export only: how long to wait per connection attempt (seconds)
1033 rieConnectAttemptTimeout :: Int
1034 rieConnectAttemptTimeout = 20
1035
1036 -- | Export only: number of attempts to connect
1037 rieConnectRetries :: Int
1038 rieConnectRetries = 10
1039
1040 -- | Overall timeout for establishing connection
1041 rieConnectTimeout :: Int
1042 rieConnectTimeout = 180
1043
1044 -- | Give child process up to 5 seconds to exit after sending a signal
1045 childLingerTimeout :: Double
1046 childLingerTimeout = 5.0
1047
1048 -- * Import/export config options
1049
1050 inisectBep :: String
1051 inisectBep = "backend"
1052
1053 inisectExp :: String
1054 inisectExp = "export"
1055
1056 inisectHyp :: String
1057 inisectHyp = "hypervisor"
1058
1059 inisectIns :: String
1060 inisectIns = "instance"
1061
1062 inisectOsp :: String
1063 inisectOsp = "os"
1064
1065 -- * Dynamic device modification
1066
1067 ddmAdd :: String
1068 ddmAdd = Types.ddmFullToRaw DdmFullAdd
1069
1070 ddmModify :: String
1071 ddmModify = Types.ddmFullToRaw DdmFullModify
1072
1073 ddmRemove :: String
1074 ddmRemove = Types.ddmFullToRaw DdmFullRemove
1075
1076 ddmsValues :: FrozenSet String
1077 ddmsValues = ConstantUtils.mkSet [ddmAdd, ddmRemove]
1078
1079 ddmsValuesWithModify :: FrozenSet String
1080 ddmsValuesWithModify = ConstantUtils.mkSet $ map Types.ddmFullToRaw [minBound..]
1081
1082 -- * Common exit codes
1083
1084 exitSuccess :: Int
1085 exitSuccess = 0
1086
1087 exitFailure :: Int
1088 exitFailure = ConstantUtils.exitFailure
1089
1090 exitNotcluster :: Int
1091 exitNotcluster = 5
1092
1093 exitNotmaster :: Int
1094 exitNotmaster = 11
1095
1096 exitNodesetupError :: Int
1097 exitNodesetupError = 12
1098
1099 -- | Need user confirmation
1100 exitConfirmation :: Int
1101 exitConfirmation = 13
1102
1103 -- | Exit code for query operations with unknown fields
1104 exitUnknownField :: Int
1105 exitUnknownField = 14
1106
1107 -- * Tags
1108
1109 tagCluster :: String
1110 tagCluster = Types.tagKindToRaw TagKindCluster
1111
1112 tagInstance :: String
1113 tagInstance = Types.tagKindToRaw TagKindInstance
1114
1115 tagNetwork :: String
1116 tagNetwork = Types.tagKindToRaw TagKindNetwork
1117
1118 tagNode :: String
1119 tagNode = Types.tagKindToRaw TagKindNode
1120
1121 tagNodegroup :: String
1122 tagNodegroup = Types.tagKindToRaw TagKindGroup
1123
1124 validTagTypes :: FrozenSet String
1125 validTagTypes = ConstantUtils.mkSet $ map Types.tagKindToRaw [minBound..]
1126
1127 maxTagLen :: Int
1128 maxTagLen = 128
1129
1130 maxTagsPerObj :: Int
1131 maxTagsPerObj = 4096
1132
1133 -- * Others
1134
1135 defaultBridge :: String
1136 defaultBridge = "xen-br0"
1137
1138 defaultOvs :: String
1139 defaultOvs = "switch1"
1140
1141 -- | 60 MiB/s, expressed in KiB/s
1142 classicDrbdSyncSpeed :: Int
1143 classicDrbdSyncSpeed = 60 * 1024
1144
1145 ip4AddressAny :: String
1146 ip4AddressAny = "0.0.0.0"
1147
1148 ip4AddressLocalhost :: String
1149 ip4AddressLocalhost = "127.0.0.1"
1150
1151 ip6AddressAny :: String
1152 ip6AddressAny = "::"
1153
1154 ip6AddressLocalhost :: String
1155 ip6AddressLocalhost = "::1"
1156
1157 ip4Version :: Int
1158 ip4Version = 4
1159
1160 ip6Version :: Int
1161 ip6Version = 6
1162
1163 validIpVersions :: FrozenSet Int
1164 validIpVersions = ConstantUtils.mkSet [ip4Version, ip6Version]
1165
1166 tcpPingTimeout :: Int
1167 tcpPingTimeout = 10
1168
1169 defaultVg :: String
1170 defaultVg = "xenvg"
1171
1172 defaultDrbdHelper :: String
1173 defaultDrbdHelper = "/bin/true"
1174
1175 minVgSize :: Int
1176 minVgSize = 20480
1177
1178 defaultMacPrefix :: String
1179 defaultMacPrefix = "aa:00:00"
1180
1181 -- | Default maximum instance wait time (seconds)
1182 defaultShutdownTimeout :: Int
1183 defaultShutdownTimeout = 120
1184
1185 -- | Node clock skew (seconds)
1186 nodeMaxClockSkew :: Int
1187 nodeMaxClockSkew = 150
1188
1189 -- | Time for an intra-cluster disk transfer to wait for a connection
1190 diskTransferConnectTimeout :: Int
1191 diskTransferConnectTimeout = 60
1192
1193 -- | Disk index separator
1194 diskSeparator :: String
1195 diskSeparator = AutoConf.diskSeparator
1196
1197 ipCommandPath :: String
1198 ipCommandPath = AutoConf.ipPath
1199
1200 -- | Key for job IDs in opcode result
1201 jobIdsKey :: String
1202 jobIdsKey = "jobs"
1203
1204 -- * Runparts results
1205
1206 runpartsErr :: Int
1207 runpartsErr = 2
1208
1209 runpartsRun :: Int
1210 runpartsRun = 1
1211
1212 runpartsSkip :: Int
1213 runpartsSkip = 0
1214
1215 runpartsStatus :: [Int]
1216 runpartsStatus = [runpartsErr, runpartsRun, runpartsSkip]
1217
1218 -- * RPC
1219
1220 rpcEncodingNone :: Int
1221 rpcEncodingNone = 0
1222
1223 rpcEncodingZlibBase64 :: Int
1224 rpcEncodingZlibBase64 = 1
1225
1226 -- * Timeout table
1227 --
1228 -- Various time constants for the timeout table
1229
1230 rpcTmoUrgent :: Int
1231 rpcTmoUrgent = Types.rpcTimeoutToRaw Urgent
1232
1233 rpcTmoFast :: Int
1234 rpcTmoFast = Types.rpcTimeoutToRaw Fast
1235
1236 rpcTmoNormal :: Int
1237 rpcTmoNormal = Types.rpcTimeoutToRaw Normal
1238
1239 rpcTmoSlow :: Int
1240 rpcTmoSlow = Types.rpcTimeoutToRaw Slow
1241
1242 -- | 'rpcTmo_4hrs' contains an underscore to circumvent a limitation
1243 -- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1244 -- Python name.
1245 rpcTmo_4hrs :: Int
1246 rpcTmo_4hrs = Types.rpcTimeoutToRaw FourHours
1247
1248 -- | 'rpcTmo_1day' contains an underscore to circumvent a limitation
1249 -- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1250 -- Python name.
1251 rpcTmo_1day :: Int
1252 rpcTmo_1day = Types.rpcTimeoutToRaw OneDay
1253
1254 -- | Timeout for connecting to nodes (seconds)
1255 rpcConnectTimeout :: Int
1256 rpcConnectTimeout = 5
1257
1258 -- OS
1259
1260 osScriptCreate :: String
1261 osScriptCreate = "create"
1262
1263 osScriptExport :: String
1264 osScriptExport = "export"
1265
1266 osScriptImport :: String
1267 osScriptImport = "import"
1268
1269 osScriptRename :: String
1270 osScriptRename = "rename"
1271
1272 osScriptVerify :: String
1273 osScriptVerify = "verify"
1274
1275 osScripts :: [String]
1276 osScripts = [osScriptCreate, osScriptExport, osScriptImport, osScriptRename,
1277              osScriptVerify]
1278
1279 osApiFile :: String
1280 osApiFile = "ganeti_api_version"
1281
1282 osVariantsFile :: String
1283 osVariantsFile = "variants.list"
1284
1285 osParametersFile :: String
1286 osParametersFile = "parameters.list"
1287
1288 osValidateParameters :: String
1289 osValidateParameters = "parameters"
1290
1291 osValidateCalls :: FrozenSet String
1292 osValidateCalls = ConstantUtils.mkSet [osValidateParameters]
1293
1294 -- | External Storage (ES) related constants
1295
1296 esActionAttach :: String
1297 esActionAttach = "attach"
1298
1299 esActionCreate :: String
1300 esActionCreate = "create"
1301
1302 esActionDetach :: String
1303 esActionDetach = "detach"
1304
1305 esActionGrow :: String
1306 esActionGrow = "grow"
1307
1308 esActionRemove :: String
1309 esActionRemove = "remove"
1310
1311 esActionSetinfo :: String
1312 esActionSetinfo = "setinfo"
1313
1314 esActionVerify :: String
1315 esActionVerify = "verify"
1316
1317 esScriptCreate :: String
1318 esScriptCreate = esActionCreate
1319
1320 esScriptRemove :: String
1321 esScriptRemove = esActionRemove
1322
1323 esScriptGrow :: String
1324 esScriptGrow = esActionGrow
1325
1326 esScriptAttach :: String
1327 esScriptAttach = esActionAttach
1328
1329 esScriptDetach :: String
1330 esScriptDetach = esActionDetach
1331
1332 esScriptSetinfo :: String
1333 esScriptSetinfo = esActionSetinfo
1334
1335 esScriptVerify :: String
1336 esScriptVerify = esActionVerify
1337
1338 esScripts :: FrozenSet String
1339 esScripts =
1340   ConstantUtils.mkSet [esScriptAttach,
1341                        esScriptCreate,
1342                        esScriptDetach,
1343                        esScriptGrow,
1344                        esScriptRemove,
1345                        esScriptSetinfo,
1346                        esScriptVerify]
1347
1348 esParametersFile :: String
1349 esParametersFile = "parameters.list"
1350
1351 -- * Reboot types
1352
1353 instanceRebootSoft :: String
1354 instanceRebootSoft = Types.rebootTypeToRaw RebootSoft
1355
1356 instanceRebootHard :: String
1357 instanceRebootHard = Types.rebootTypeToRaw RebootHard
1358
1359 instanceRebootFull :: String
1360 instanceRebootFull = Types.rebootTypeToRaw RebootFull
1361
1362 rebootTypes :: FrozenSet String
1363 rebootTypes = ConstantUtils.mkSet $ map Types.rebootTypeToRaw [minBound..]
1364
1365 -- * Instance reboot behaviors
1366
1367 instanceRebootAllowed :: String
1368 instanceRebootAllowed = "reboot"
1369
1370 instanceRebootExit :: String
1371 instanceRebootExit = "exit"
1372
1373 rebootBehaviors :: [String]
1374 rebootBehaviors = [instanceRebootAllowed, instanceRebootExit]
1375
1376 -- * VTypes
1377
1378 vtypeBool :: VType
1379 vtypeBool = VTypeBool
1380
1381 vtypeInt :: VType
1382 vtypeInt = VTypeInt
1383
1384 vtypeMaybeString :: VType
1385 vtypeMaybeString = VTypeMaybeString
1386
1387 -- | Size in MiBs
1388 vtypeSize :: VType
1389 vtypeSize = VTypeSize
1390
1391 vtypeString :: VType
1392 vtypeString = VTypeString
1393
1394 enforceableTypes :: FrozenSet VType
1395 enforceableTypes = ConstantUtils.mkSet [minBound..]
1396
1397 -- | Constant representing that the user does not specify any IP version
1398 ifaceNoIpVersionSpecified :: Int
1399 ifaceNoIpVersionSpecified = 0
1400
1401 validSerialSpeeds :: [Int]
1402 validSerialSpeeds =
1403   [75,
1404    110,
1405    300,
1406    600,
1407    1200,
1408    1800,
1409    2400,
1410    4800,
1411    9600,
1412    14400,
1413    19200,
1414    28800,
1415    38400,
1416    57600,
1417    115200,
1418    230400,
1419    345600,
1420    460800]
1421
1422 -- * HV parameter names (global namespace)
1423
1424 hvAcpi :: String
1425 hvAcpi = "acpi"
1426
1427 hvBlockdevPrefix :: String
1428 hvBlockdevPrefix = "blockdev_prefix"
1429
1430 hvBootloaderArgs :: String
1431 hvBootloaderArgs = "bootloader_args"
1432
1433 hvBootloaderPath :: String
1434 hvBootloaderPath = "bootloader_path"
1435
1436 hvBootOrder :: String
1437 hvBootOrder = "boot_order"
1438
1439 hvCdromImagePath :: String
1440 hvCdromImagePath = "cdrom_image_path"
1441
1442 hvCpuCap :: String
1443 hvCpuCap = "cpu_cap"
1444
1445 hvCpuCores :: String
1446 hvCpuCores = "cpu_cores"
1447
1448 hvCpuMask :: String
1449 hvCpuMask = "cpu_mask"
1450
1451 hvCpuSockets :: String
1452 hvCpuSockets = "cpu_sockets"
1453
1454 hvCpuThreads :: String
1455 hvCpuThreads = "cpu_threads"
1456
1457 hvCpuType :: String
1458 hvCpuType = "cpu_type"
1459
1460 hvCpuWeight :: String
1461 hvCpuWeight = "cpu_weight"
1462
1463 hvDeviceModel :: String
1464 hvDeviceModel = "device_model"
1465
1466 hvDiskCache :: String
1467 hvDiskCache = "disk_cache"
1468
1469 hvDiskType :: String
1470 hvDiskType = "disk_type"
1471
1472 hvInitrdPath :: String
1473 hvInitrdPath = "initrd_path"
1474
1475 hvInitScript :: String
1476 hvInitScript = "init_script"
1477
1478 hvKernelArgs :: String
1479 hvKernelArgs = "kernel_args"
1480
1481 hvKernelPath :: String
1482 hvKernelPath = "kernel_path"
1483
1484 hvKeymap :: String
1485 hvKeymap = "keymap"
1486
1487 hvKvmCdrom2ImagePath :: String
1488 hvKvmCdrom2ImagePath = "cdrom2_image_path"
1489
1490 hvKvmCdromDiskType :: String
1491 hvKvmCdromDiskType = "cdrom_disk_type"
1492
1493 hvKvmExtra :: String
1494 hvKvmExtra = "kvm_extra"
1495
1496 hvKvmFlag :: String
1497 hvKvmFlag = "kvm_flag"
1498
1499 hvKvmFloppyImagePath :: String
1500 hvKvmFloppyImagePath = "floppy_image_path"
1501
1502 hvKvmMachineVersion :: String
1503 hvKvmMachineVersion = "machine_version"
1504
1505 hvKvmPath :: String
1506 hvKvmPath = "kvm_path"
1507
1508 hvKvmSpiceAudioCompr :: String
1509 hvKvmSpiceAudioCompr = "spice_playback_compression"
1510
1511 hvKvmSpiceBind :: String
1512 hvKvmSpiceBind = "spice_bind"
1513
1514 hvKvmSpiceIpVersion :: String
1515 hvKvmSpiceIpVersion = "spice_ip_version"
1516
1517 hvKvmSpiceJpegImgCompr :: String
1518 hvKvmSpiceJpegImgCompr = "spice_jpeg_wan_compression"
1519
1520 hvKvmSpiceLosslessImgCompr :: String
1521 hvKvmSpiceLosslessImgCompr = "spice_image_compression"
1522
1523 hvKvmSpicePasswordFile :: String
1524 hvKvmSpicePasswordFile = "spice_password_file"
1525
1526 hvKvmSpiceStreamingVideoDetection :: String
1527 hvKvmSpiceStreamingVideoDetection = "spice_streaming_video"
1528
1529 hvKvmSpiceTlsCiphers :: String
1530 hvKvmSpiceTlsCiphers = "spice_tls_ciphers"
1531
1532 hvKvmSpiceUseTls :: String
1533 hvKvmSpiceUseTls = "spice_use_tls"
1534
1535 hvKvmSpiceUseVdagent :: String
1536 hvKvmSpiceUseVdagent = "spice_use_vdagent"
1537
1538 hvKvmSpiceZlibGlzImgCompr :: String
1539 hvKvmSpiceZlibGlzImgCompr = "spice_zlib_glz_wan_compression"
1540
1541 hvKvmUseChroot :: String
1542 hvKvmUseChroot = "use_chroot"
1543
1544 hvMemPath :: String
1545 hvMemPath = "mem_path"
1546
1547 hvMigrationBandwidth :: String
1548 hvMigrationBandwidth = "migration_bandwidth"
1549
1550 hvMigrationDowntime :: String
1551 hvMigrationDowntime = "migration_downtime"
1552
1553 hvMigrationMode :: String
1554 hvMigrationMode = "migration_mode"
1555
1556 hvMigrationPort :: String
1557 hvMigrationPort = "migration_port"
1558
1559 hvNicType :: String
1560 hvNicType = "nic_type"
1561
1562 hvPae :: String
1563 hvPae = "pae"
1564
1565 hvPassthrough :: String
1566 hvPassthrough = "pci_pass"
1567
1568 hvRebootBehavior :: String
1569 hvRebootBehavior = "reboot_behavior"
1570
1571 hvRootPath :: String
1572 hvRootPath = "root_path"
1573
1574 hvSecurityDomain :: String
1575 hvSecurityDomain = "security_domain"
1576
1577 hvSecurityModel :: String
1578 hvSecurityModel = "security_model"
1579
1580 hvSerialConsole :: String
1581 hvSerialConsole = "serial_console"
1582
1583 hvSerialSpeed :: String
1584 hvSerialSpeed = "serial_speed"
1585
1586 hvSoundhw :: String
1587 hvSoundhw = "soundhw"
1588
1589 hvUsbDevices :: String
1590 hvUsbDevices = "usb_devices"
1591
1592 hvUsbMouse :: String
1593 hvUsbMouse = "usb_mouse"
1594
1595 hvUseBootloader :: String
1596 hvUseBootloader = "use_bootloader"
1597
1598 hvUseLocaltime :: String
1599 hvUseLocaltime = "use_localtime"
1600
1601 hvVga :: String
1602 hvVga = "vga"
1603
1604 hvVhostNet :: String
1605 hvVhostNet = "vhost_net"
1606
1607 hvVifScript :: String
1608 hvVifScript = "vif_script"
1609
1610 hvVifType :: String
1611 hvVifType = "vif_type"
1612
1613 hvViridian :: String
1614 hvViridian = "viridian"
1615
1616 hvVncBindAddress :: String
1617 hvVncBindAddress = "vnc_bind_address"
1618
1619 hvVncPasswordFile :: String
1620 hvVncPasswordFile = "vnc_password_file"
1621
1622 hvVncTls :: String
1623 hvVncTls = "vnc_tls"
1624
1625 hvVncX509 :: String
1626 hvVncX509 = "vnc_x509_path"
1627
1628 hvVncX509Verify :: String
1629 hvVncX509Verify = "vnc_x509_verify"
1630
1631 hvVnetHdr :: String
1632 hvVnetHdr = "vnet_hdr"
1633
1634 hvXenCmd :: String
1635 hvXenCmd = "xen_cmd"
1636
1637 hvXenCpuid :: String
1638 hvXenCpuid = "cpuid"
1639
1640 hvsParameterTitles :: Map String String
1641 hvsParameterTitles =
1642   Map.fromList
1643   [(hvAcpi, "ACPI"),
1644    (hvBootOrder, "Boot_order"),
1645    (hvCdromImagePath, "CDROM_image_path"),
1646    (hvCpuType, "cpu_type"),
1647    (hvDiskType, "Disk_type"),
1648    (hvInitrdPath, "Initrd_path"),
1649    (hvKernelPath, "Kernel_path"),
1650    (hvNicType, "NIC_type"),
1651    (hvPae, "PAE"),
1652    (hvPassthrough, "pci_pass"),
1653    (hvVncBindAddress, "VNC_bind_address")]
1654
1655 hvsParameters :: FrozenSet String
1656 hvsParameters = ConstantUtils.mkSet $ Map.keys hvsParameterTypes
1657
1658 hvsParameterTypes :: Map String VType
1659 hvsParameterTypes = Map.fromList
1660   [ (hvAcpi,                            VTypeBool)
1661   , (hvBlockdevPrefix,                  VTypeString)
1662   , (hvBootloaderArgs,                  VTypeString)
1663   , (hvBootloaderPath,                  VTypeString)
1664   , (hvBootOrder,                       VTypeString)
1665   , (hvCdromImagePath,                  VTypeString)
1666   , (hvCpuCap,                          VTypeInt)
1667   , (hvCpuCores,                        VTypeInt)
1668   , (hvCpuMask,                         VTypeString)
1669   , (hvCpuSockets,                      VTypeInt)
1670   , (hvCpuThreads,                      VTypeInt)
1671   , (hvCpuType,                         VTypeString)
1672   , (hvCpuWeight,                       VTypeInt)
1673   , (hvDeviceModel,                     VTypeString)
1674   , (hvDiskCache,                       VTypeString)
1675   , (hvDiskType,                        VTypeString)
1676   , (hvInitrdPath,                      VTypeString)
1677   , (hvInitScript,                      VTypeString)
1678   , (hvKernelArgs,                      VTypeString)
1679   , (hvKernelPath,                      VTypeString)
1680   , (hvKeymap,                          VTypeString)
1681   , (hvKvmCdrom2ImagePath,              VTypeString)
1682   , (hvKvmCdromDiskType,                VTypeString)
1683   , (hvKvmExtra,                        VTypeString)
1684   , (hvKvmFlag,                         VTypeString)
1685   , (hvKvmFloppyImagePath,              VTypeString)
1686   , (hvKvmMachineVersion,               VTypeString)
1687   , (hvKvmPath,                         VTypeString)
1688   , (hvKvmSpiceAudioCompr,              VTypeBool)
1689   , (hvKvmSpiceBind,                    VTypeString)
1690   , (hvKvmSpiceIpVersion,               VTypeInt)
1691   , (hvKvmSpiceJpegImgCompr,            VTypeString)
1692   , (hvKvmSpiceLosslessImgCompr,        VTypeString)
1693   , (hvKvmSpicePasswordFile,            VTypeString)
1694   , (hvKvmSpiceStreamingVideoDetection, VTypeString)
1695   , (hvKvmSpiceTlsCiphers,              VTypeString)
1696   , (hvKvmSpiceUseTls,                  VTypeBool)
1697   , (hvKvmSpiceUseVdagent,              VTypeBool)
1698   , (hvKvmSpiceZlibGlzImgCompr,         VTypeString)
1699   , (hvKvmUseChroot,                    VTypeBool)
1700   , (hvMemPath,                         VTypeString)
1701   , (hvMigrationBandwidth,              VTypeInt)
1702   , (hvMigrationDowntime,               VTypeInt)
1703   , (hvMigrationMode,                   VTypeString)
1704   , (hvMigrationPort,                   VTypeInt)
1705   , (hvNicType,                         VTypeString)
1706   , (hvPae,                             VTypeBool)
1707   , (hvPassthrough,                     VTypeString)
1708   , (hvRebootBehavior,                  VTypeString)
1709   , (hvRootPath,                        VTypeMaybeString)
1710   , (hvSecurityDomain,                  VTypeString)
1711   , (hvSecurityModel,                   VTypeString)
1712   , (hvSerialConsole,                   VTypeBool)
1713   , (hvSerialSpeed,                     VTypeInt)
1714   , (hvSoundhw,                         VTypeString)
1715   , (hvUsbDevices,                      VTypeString)
1716   , (hvUsbMouse,                        VTypeString)
1717   , (hvUseBootloader,                   VTypeBool)
1718   , (hvUseLocaltime,                    VTypeBool)
1719   , (hvVga,                             VTypeString)
1720   , (hvVhostNet,                        VTypeBool)
1721   , (hvVifScript,                       VTypeString)
1722   , (hvVifType,                         VTypeString)
1723   , (hvViridian,                        VTypeBool)
1724   , (hvVncBindAddress,                  VTypeString)
1725   , (hvVncPasswordFile,                 VTypeString)
1726   , (hvVncTls,                          VTypeBool)
1727   , (hvVncX509,                         VTypeString)
1728   , (hvVncX509Verify,                   VTypeBool)
1729   , (hvVnetHdr,                         VTypeBool)
1730   , (hvXenCmd,                          VTypeString)
1731   , (hvXenCpuid,                        VTypeString)
1732   ]
1733
1734 -- * Migration statuses
1735
1736 hvMigrationActive :: String
1737 hvMigrationActive = "active"
1738
1739 hvMigrationCancelled :: String
1740 hvMigrationCancelled = "cancelled"
1741
1742 hvMigrationCompleted :: String
1743 hvMigrationCompleted = "completed"
1744
1745 hvMigrationFailed :: String
1746 hvMigrationFailed = "failed"
1747
1748 hvMigrationValidStatuses :: FrozenSet String
1749 hvMigrationValidStatuses =
1750   ConstantUtils.mkSet [hvMigrationActive,
1751                        hvMigrationCancelled,
1752                        hvMigrationCompleted,
1753                        hvMigrationFailed]
1754
1755 hvMigrationFailedStatuses :: FrozenSet String
1756 hvMigrationFailedStatuses =
1757   ConstantUtils.mkSet [hvMigrationFailed, hvMigrationCancelled]
1758
1759 -- | KVM-specific statuses
1760 --
1761 -- FIXME: this constant seems unnecessary
1762 hvKvmMigrationValidStatuses :: FrozenSet String
1763 hvKvmMigrationValidStatuses = hvMigrationValidStatuses
1764
1765 -- | Node info keys
1766 hvNodeinfoKeyVersion :: String
1767 hvNodeinfoKeyVersion = "hv_version"
1768
1769 -- * Hypervisor state
1770
1771 hvstCpuNode :: String
1772 hvstCpuNode = "cpu_node"
1773
1774 hvstCpuTotal :: String
1775 hvstCpuTotal = "cpu_total"
1776
1777 hvstMemoryHv :: String
1778 hvstMemoryHv = "mem_hv"
1779
1780 hvstMemoryNode :: String
1781 hvstMemoryNode = "mem_node"
1782
1783 hvstMemoryTotal :: String
1784 hvstMemoryTotal = "mem_total"
1785
1786 hvstsParameters :: FrozenSet String
1787 hvstsParameters =
1788   ConstantUtils.mkSet [hvstCpuNode,
1789                        hvstCpuTotal,
1790                        hvstMemoryHv,
1791                        hvstMemoryNode,
1792                        hvstMemoryTotal]
1793
1794 hvstDefaults :: Map String Int
1795 hvstDefaults =
1796   Map.fromList
1797   [(hvstCpuNode, 1),
1798    (hvstCpuTotal, 1),
1799    (hvstMemoryHv, 0),
1800    (hvstMemoryTotal, 0),
1801    (hvstMemoryNode, 0)]
1802
1803 hvstsParameterTypes :: Map String VType
1804 hvstsParameterTypes =
1805   Map.fromList [(hvstMemoryTotal, VTypeInt),
1806                 (hvstMemoryNode, VTypeInt),
1807                 (hvstMemoryHv, VTypeInt),
1808                 (hvstCpuTotal, VTypeInt),
1809                 (hvstCpuNode, VTypeInt)]
1810
1811 -- * Disk state
1812
1813 dsDiskOverhead :: String
1814 dsDiskOverhead = "disk_overhead"
1815
1816 dsDiskReserved :: String
1817 dsDiskReserved = "disk_reserved"
1818
1819 dsDiskTotal :: String
1820 dsDiskTotal = "disk_total"
1821
1822 dsDefaults :: Map String Int
1823 dsDefaults =
1824   Map.fromList
1825   [(dsDiskTotal, 0),
1826    (dsDiskReserved, 0),
1827    (dsDiskOverhead, 0)]
1828
1829 dssParameterTypes :: Map String VType
1830 dssParameterTypes =
1831   Map.fromList [(dsDiskTotal, VTypeInt),
1832                 (dsDiskReserved, VTypeInt),
1833                 (dsDiskOverhead, VTypeInt)]
1834
1835 dssParameters :: FrozenSet String
1836 dssParameters =
1837   ConstantUtils.mkSet [dsDiskTotal, dsDiskReserved, dsDiskOverhead]
1838
1839 dsValidTypes :: FrozenSet String
1840 dsValidTypes = ConstantUtils.mkSet [Types.diskTemplateToRaw DTPlain]
1841
1842 -- Backend parameter names
1843
1844 beAlwaysFailover :: String
1845 beAlwaysFailover = "always_failover"
1846
1847 beAutoBalance :: String
1848 beAutoBalance = "auto_balance"
1849
1850 beMaxmem :: String
1851 beMaxmem = "maxmem"
1852
1853 -- | Deprecated and replaced by max and min mem
1854 beMemory :: String
1855 beMemory = "memory"
1856
1857 beMinmem :: String
1858 beMinmem = "minmem"
1859
1860 beSpindleUse :: String
1861 beSpindleUse = "spindle_use"
1862
1863 beVcpus :: String
1864 beVcpus = "vcpus"
1865
1866 besParameterTypes :: Map String VType
1867 besParameterTypes =
1868   Map.fromList [(beAlwaysFailover, VTypeBool),
1869                 (beAutoBalance, VTypeBool),
1870                 (beMaxmem, VTypeSize),
1871                 (beMinmem, VTypeSize),
1872                 (beSpindleUse, VTypeInt),
1873                 (beVcpus, VTypeInt)]
1874
1875 besParameterTitles :: Map String String
1876 besParameterTitles =
1877   Map.fromList [(beAutoBalance, "Auto_balance"),
1878                 (beMinmem, "ConfigMinMem"),
1879                 (beVcpus, "ConfigVCPUs"),
1880                 (beMaxmem, "ConfigMaxMem")]
1881
1882 besParameterCompat :: Map String VType
1883 besParameterCompat = Map.insert beMemory VTypeSize besParameterTypes
1884
1885 besParameters :: FrozenSet String
1886 besParameters =
1887   ConstantUtils.mkSet [beAlwaysFailover,
1888                        beAutoBalance,
1889                        beMaxmem,
1890                        beMinmem,
1891                        beSpindleUse,
1892                        beVcpus]
1893
1894 -- | Instance specs
1895 --
1896 -- FIXME: these should be associated with 'Ganeti.HTools.Types.ISpec'
1897
1898 ispecMemSize :: String
1899 ispecMemSize = ConstantUtils.ispecMemSize
1900
1901 ispecCpuCount :: String
1902 ispecCpuCount = ConstantUtils.ispecCpuCount
1903
1904 ispecDiskCount :: String
1905 ispecDiskCount = ConstantUtils.ispecDiskCount
1906
1907 ispecDiskSize :: String
1908 ispecDiskSize = ConstantUtils.ispecDiskSize
1909
1910 ispecNicCount :: String
1911 ispecNicCount = ConstantUtils.ispecNicCount
1912
1913 ispecSpindleUse :: String
1914 ispecSpindleUse = ConstantUtils.ispecSpindleUse
1915
1916 ispecsParameterTypes :: Map String VType
1917 ispecsParameterTypes =
1918   Map.fromList
1919   [(ConstantUtils.ispecDiskSize, VTypeInt),
1920    (ConstantUtils.ispecCpuCount, VTypeInt),
1921    (ConstantUtils.ispecSpindleUse, VTypeInt),
1922    (ConstantUtils.ispecMemSize, VTypeInt),
1923    (ConstantUtils.ispecNicCount, VTypeInt),
1924    (ConstantUtils.ispecDiskCount, VTypeInt)]
1925
1926 ispecsParameters :: FrozenSet String
1927 ispecsParameters =
1928   ConstantUtils.mkSet [ConstantUtils.ispecCpuCount,
1929                        ConstantUtils.ispecDiskCount,
1930                        ConstantUtils.ispecDiskSize,
1931                        ConstantUtils.ispecMemSize,
1932                        ConstantUtils.ispecNicCount,
1933                        ConstantUtils.ispecSpindleUse]
1934
1935 ispecsMinmax :: String
1936 ispecsMinmax = ConstantUtils.ispecsMinmax
1937
1938 ispecsMax :: String
1939 ispecsMax = "max"
1940
1941 ispecsMin :: String
1942 ispecsMin = "min"
1943
1944 ispecsStd :: String
1945 ispecsStd = ConstantUtils.ispecsStd
1946
1947 ipolicyDts :: String
1948 ipolicyDts = ConstantUtils.ipolicyDts
1949
1950 ipolicyVcpuRatio :: String
1951 ipolicyVcpuRatio = ConstantUtils.ipolicyVcpuRatio
1952
1953 ipolicySpindleRatio :: String
1954 ipolicySpindleRatio = ConstantUtils.ipolicySpindleRatio
1955
1956 ispecsMinmaxKeys :: FrozenSet String
1957 ispecsMinmaxKeys = ConstantUtils.mkSet [ispecsMax, ispecsMin]
1958
1959 ipolicyParameters :: FrozenSet String
1960 ipolicyParameters =
1961   ConstantUtils.mkSet [ConstantUtils.ipolicyVcpuRatio,
1962                        ConstantUtils.ipolicySpindleRatio]
1963
1964 ipolicyAllKeys :: FrozenSet String
1965 ipolicyAllKeys =
1966   ConstantUtils.union ipolicyParameters $
1967   ConstantUtils.mkSet [ConstantUtils.ipolicyDts,
1968                        ConstantUtils.ispecsMinmax,
1969                        ispecsStd]
1970
1971 -- | Node parameter names
1972
1973 ndExclusiveStorage :: String
1974 ndExclusiveStorage = "exclusive_storage"
1975
1976 ndOobProgram :: String
1977 ndOobProgram = "oob_program"
1978
1979 ndSpindleCount :: String
1980 ndSpindleCount = "spindle_count"
1981
1982 ndOvs :: String
1983 ndOvs = "ovs"
1984
1985 ndOvsLink :: String
1986 ndOvsLink = "ovs_link"
1987
1988 ndOvsName :: String
1989 ndOvsName = "ovs_name"
1990
1991 ndsParameterTypes :: Map String VType
1992 ndsParameterTypes =
1993   Map.fromList
1994   [(ndExclusiveStorage, VTypeBool),
1995    (ndOobProgram, VTypeString),
1996    (ndOvs, VTypeBool),
1997    (ndOvsLink, VTypeMaybeString),
1998    (ndOvsName, VTypeMaybeString),
1999    (ndSpindleCount, VTypeInt)]
2000
2001 ndsParameters :: FrozenSet String
2002 ndsParameters = ConstantUtils.mkSet (Map.keys ndsParameterTypes)
2003
2004 ndsParameterTitles :: Map String String
2005 ndsParameterTitles =
2006   Map.fromList
2007   [(ndExclusiveStorage, "ExclusiveStorage"),
2008    (ndOobProgram, "OutOfBandProgram"),
2009    (ndOvs, "OpenvSwitch"),
2010    (ndOvsLink, "OpenvSwitchLink"),
2011    (ndOvsName, "OpenvSwitchName"),
2012    (ndSpindleCount, "SpindleCount")]
2013
2014 -- * Logical Disks parameters
2015
2016 ldpAccess :: String
2017 ldpAccess = "access"
2018
2019 ldpBarriers :: String
2020 ldpBarriers = "disabled-barriers"
2021
2022 ldpDefaultMetavg :: String
2023 ldpDefaultMetavg = "default-metavg"
2024
2025 ldpDelayTarget :: String
2026 ldpDelayTarget = "c-delay-target"
2027
2028 ldpDiskCustom :: String
2029 ldpDiskCustom = "disk-custom"
2030
2031 ldpDynamicResync :: String
2032 ldpDynamicResync = "dynamic-resync"
2033
2034 ldpFillTarget :: String
2035 ldpFillTarget = "c-fill-target"
2036
2037 ldpMaxRate :: String
2038 ldpMaxRate = "c-max-rate"
2039
2040 ldpMinRate :: String
2041 ldpMinRate = "c-min-rate"
2042
2043 ldpNetCustom :: String
2044 ldpNetCustom = "net-custom"
2045
2046 ldpNoMetaFlush :: String
2047 ldpNoMetaFlush = "disable-meta-flush"
2048
2049 ldpPlanAhead :: String
2050 ldpPlanAhead = "c-plan-ahead"
2051
2052 ldpPool :: String
2053 ldpPool = "pool"
2054
2055 ldpProtocol :: String
2056 ldpProtocol = "protocol"
2057
2058 ldpResyncRate :: String
2059 ldpResyncRate = "resync-rate"
2060
2061 ldpStripes :: String
2062 ldpStripes = "stripes"
2063
2064 diskLdTypes :: Map String VType
2065 diskLdTypes =
2066   Map.fromList
2067   [(ldpAccess, VTypeString),
2068    (ldpResyncRate, VTypeInt),
2069    (ldpStripes, VTypeInt),
2070    (ldpBarriers, VTypeString),
2071    (ldpNoMetaFlush, VTypeBool),
2072    (ldpDefaultMetavg, VTypeString),
2073    (ldpDiskCustom, VTypeString),
2074    (ldpNetCustom, VTypeString),
2075    (ldpProtocol, VTypeString),
2076    (ldpDynamicResync, VTypeBool),
2077    (ldpPlanAhead, VTypeInt),
2078    (ldpFillTarget, VTypeInt),
2079    (ldpDelayTarget, VTypeInt),
2080    (ldpMaxRate, VTypeInt),
2081    (ldpMinRate, VTypeInt),
2082    (ldpPool, VTypeString)]
2083
2084 diskLdParameters :: FrozenSet String
2085 diskLdParameters = ConstantUtils.mkSet (Map.keys diskLdTypes)
2086
2087 -- * Disk template parameters
2088 --
2089 -- Disk template parameters can be set/changed by the user via
2090 -- gnt-cluster and gnt-group)
2091
2092 drbdResyncRate :: String
2093 drbdResyncRate = "resync-rate"
2094
2095 drbdDataStripes :: String
2096 drbdDataStripes = "data-stripes"
2097
2098 drbdMetaStripes :: String
2099 drbdMetaStripes = "meta-stripes"
2100
2101 drbdDiskBarriers :: String
2102 drbdDiskBarriers = "disk-barriers"
2103
2104 drbdMetaBarriers :: String
2105 drbdMetaBarriers = "meta-barriers"
2106
2107 drbdDefaultMetavg :: String
2108 drbdDefaultMetavg = "metavg"
2109
2110 drbdDiskCustom :: String
2111 drbdDiskCustom = "disk-custom"
2112
2113 drbdNetCustom :: String
2114 drbdNetCustom = "net-custom"
2115
2116 drbdProtocol :: String
2117 drbdProtocol = "protocol"
2118
2119 drbdDynamicResync :: String
2120 drbdDynamicResync = "dynamic-resync"
2121
2122 drbdPlanAhead :: String
2123 drbdPlanAhead = "c-plan-ahead"
2124
2125 drbdFillTarget :: String
2126 drbdFillTarget = "c-fill-target"
2127
2128 drbdDelayTarget :: String
2129 drbdDelayTarget = "c-delay-target"
2130
2131 drbdMaxRate :: String
2132 drbdMaxRate = "c-max-rate"
2133
2134 drbdMinRate :: String
2135 drbdMinRate = "c-min-rate"
2136
2137 lvStripes :: String
2138 lvStripes = "stripes"
2139
2140 rbdAccess :: String
2141 rbdAccess = "access"
2142
2143 rbdPool :: String
2144 rbdPool = "pool"
2145
2146 diskDtTypes :: Map String VType
2147 diskDtTypes =
2148   Map.fromList [(drbdResyncRate, VTypeInt),
2149                 (drbdDataStripes, VTypeInt),
2150                 (drbdMetaStripes, VTypeInt),
2151                 (drbdDiskBarriers, VTypeString),
2152                 (drbdMetaBarriers, VTypeBool),
2153                 (drbdDefaultMetavg, VTypeString),
2154                 (drbdDiskCustom, VTypeString),
2155                 (drbdNetCustom, VTypeString),
2156                 (drbdProtocol, VTypeString),
2157                 (drbdDynamicResync, VTypeBool),
2158                 (drbdPlanAhead, VTypeInt),
2159                 (drbdFillTarget, VTypeInt),
2160                 (drbdDelayTarget, VTypeInt),
2161                 (drbdMaxRate, VTypeInt),
2162                 (drbdMinRate, VTypeInt),
2163                 (lvStripes, VTypeInt),
2164                 (rbdAccess, VTypeString),
2165                 (rbdPool, VTypeString)]
2166
2167 diskDtParameters :: FrozenSet String
2168 diskDtParameters = ConstantUtils.mkSet (Map.keys diskDtTypes)
2169
2170 -- * Dynamic disk parameters
2171
2172 ddpLocalIp :: String
2173 ddpLocalIp = "local-ip"
2174
2175 ddpRemoteIp :: String
2176 ddpRemoteIp = "remote-ip"
2177
2178 ddpPort :: String
2179 ddpPort = "port"
2180
2181 ddpLocalMinor :: String
2182 ddpLocalMinor = "local-minor"
2183
2184 ddpRemoteMinor :: String
2185 ddpRemoteMinor = "remote-minor"
2186
2187 -- * OOB supported commands
2188
2189 oobPowerOn :: String
2190 oobPowerOn = Types.oobCommandToRaw OobPowerOn
2191
2192 oobPowerOff :: String
2193 oobPowerOff = Types.oobCommandToRaw OobPowerOff
2194
2195 oobPowerCycle :: String
2196 oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
2197
2198 oobPowerStatus :: String
2199 oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
2200
2201 oobHealth :: String
2202 oobHealth = Types.oobCommandToRaw OobHealth
2203
2204 oobCommands :: FrozenSet String
2205 oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
2206
2207 oobPowerStatusPowered :: String
2208 oobPowerStatusPowered = "powered"
2209
2210 -- | 60 seconds
2211 oobTimeout :: Int
2212 oobTimeout = 60
2213
2214 -- | 2 seconds
2215 oobPowerDelay :: Double
2216 oobPowerDelay = 2.0
2217
2218 oobStatusCritical :: String
2219 oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
2220
2221 oobStatusOk :: String
2222 oobStatusOk = Types.oobStatusToRaw OobStatusOk
2223
2224 oobStatusUnknown :: String
2225 oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
2226
2227 oobStatusWarning :: String
2228 oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
2229
2230 oobStatuses :: FrozenSet String
2231 oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
2232
2233 -- | Instance Parameters Profile
2234 ppDefault :: String
2235 ppDefault = "default"
2236
2237 -- * nic* constants are used inside the ganeti config
2238
2239 nicLink :: String
2240 nicLink = "link"
2241
2242 nicMode :: String
2243 nicMode = "mode"
2244
2245 nicVlan :: String
2246 nicVlan = "vlan"
2247
2248 nicsParameterTypes :: Map String VType
2249 nicsParameterTypes =
2250   Map.fromList [(nicMode, vtypeString),
2251                 (nicLink, vtypeString),
2252                 (nicVlan, vtypeMaybeString)]
2253
2254 nicsParameters :: FrozenSet String
2255 nicsParameters = ConstantUtils.mkSet (Map.keys nicsParameterTypes)
2256
2257 nicModeBridged :: String
2258 nicModeBridged = Types.nICModeToRaw NMBridged
2259
2260 nicModeRouted :: String
2261 nicModeRouted = Types.nICModeToRaw NMRouted
2262
2263 nicModeOvs :: String
2264 nicModeOvs = Types.nICModeToRaw NMOvs
2265
2266 nicIpPool :: String
2267 nicIpPool = Types.nICModeToRaw NMPool
2268
2269 nicValidModes :: FrozenSet String
2270 nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
2271
2272 releaseAction :: String
2273 releaseAction = "release"
2274
2275 reserveAction :: String
2276 reserveAction = "reserve"
2277
2278 -- * idisk* constants are used in opcodes, to create/change disks
2279
2280 idiskAdopt :: String
2281 idiskAdopt = "adopt"
2282
2283 idiskMetavg :: String
2284 idiskMetavg = "metavg"
2285
2286 idiskMode :: String
2287 idiskMode = "mode"
2288
2289 idiskName :: String
2290 idiskName = "name"
2291
2292 idiskSize :: String
2293 idiskSize = "size"
2294
2295 idiskSpindles :: String
2296 idiskSpindles = "spindles"
2297
2298 idiskVg :: String
2299 idiskVg = "vg"
2300
2301 idiskProvider :: String
2302 idiskProvider = "provider"
2303
2304 idiskParamsTypes :: Map String VType
2305 idiskParamsTypes =
2306   Map.fromList [(idiskSize, VTypeSize),
2307                 (idiskSpindles, VTypeInt),
2308                 (idiskMode, VTypeString),
2309                 (idiskAdopt, VTypeString),
2310                 (idiskVg, VTypeString),
2311                 (idiskMetavg, VTypeString),
2312                 (idiskProvider, VTypeString),
2313                 (idiskName, VTypeMaybeString)]
2314
2315 idiskParams :: FrozenSet String
2316 idiskParams = ConstantUtils.mkSet (Map.keys idiskParamsTypes)
2317
2318 -- * inic* constants are used in opcodes, to create/change nics
2319
2320 inicBridge :: String
2321 inicBridge = "bridge"
2322
2323 inicIp :: String
2324 inicIp = "ip"
2325
2326 inicLink :: String
2327 inicLink = "link"
2328
2329 inicMac :: String
2330 inicMac = "mac"
2331
2332 inicMode :: String
2333 inicMode = "mode"
2334
2335 inicName :: String
2336 inicName = "name"
2337
2338 inicNetwork :: String
2339 inicNetwork = "network"
2340
2341 inicVlan :: String
2342 inicVlan = "vlan"
2343
2344 inicParamsTypes :: Map String VType
2345 inicParamsTypes =
2346   Map.fromList [(inicBridge, VTypeMaybeString),
2347                 (inicIp, VTypeMaybeString),
2348                 (inicLink, VTypeString),
2349                 (inicMac, VTypeString),
2350                 (inicMode, VTypeString),
2351                 (inicName, VTypeMaybeString),
2352                 (inicNetwork, VTypeMaybeString),
2353                 (inicVlan, VTypeMaybeString)]
2354
2355 inicParams :: FrozenSet String
2356 inicParams = ConstantUtils.mkSet (Map.keys inicParamsTypes)
2357
2358 -- * Hypervisor constants
2359
2360 htXenPvm :: String
2361 htXenPvm = Types.hypervisorToRaw XenPvm
2362
2363 htFake :: String
2364 htFake = Types.hypervisorToRaw Fake
2365
2366 htXenHvm :: String
2367 htXenHvm = Types.hypervisorToRaw XenHvm
2368
2369 htKvm :: String
2370 htKvm = Types.hypervisorToRaw Kvm
2371
2372 htChroot :: String
2373 htChroot = Types.hypervisorToRaw Chroot
2374
2375 htLxc :: String
2376 htLxc = Types.hypervisorToRaw Lxc
2377
2378 hyperTypes :: FrozenSet String
2379 hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
2380
2381 htsReqPort :: FrozenSet String
2382 htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
2383
2384 vncBasePort :: Int
2385 vncBasePort = 5900
2386
2387 vncDefaultBindAddress :: String
2388 vncDefaultBindAddress = ip4AddressAny
2389
2390 -- * NIC types
2391
2392 htNicE1000 :: String
2393 htNicE1000 = "e1000"
2394
2395 htNicI82551 :: String
2396 htNicI82551 = "i82551"
2397
2398 htNicI8259er :: String
2399 htNicI8259er = "i82559er"
2400
2401 htNicI85557b :: String
2402 htNicI85557b = "i82557b"
2403
2404 htNicNe2kIsa :: String
2405 htNicNe2kIsa = "ne2k_isa"
2406
2407 htNicNe2kPci :: String
2408 htNicNe2kPci = "ne2k_pci"
2409
2410 htNicParavirtual :: String
2411 htNicParavirtual = "paravirtual"
2412
2413 htNicPcnet :: String
2414 htNicPcnet = "pcnet"
2415
2416 htNicRtl8139 :: String
2417 htNicRtl8139 = "rtl8139"
2418
2419 htHvmValidNicTypes :: FrozenSet String
2420 htHvmValidNicTypes =
2421   ConstantUtils.mkSet [htNicE1000,
2422                        htNicNe2kIsa,
2423                        htNicNe2kPci,
2424                        htNicParavirtual,
2425                        htNicRtl8139]
2426
2427 htKvmValidNicTypes :: FrozenSet String
2428 htKvmValidNicTypes =
2429   ConstantUtils.mkSet [htNicE1000,
2430                        htNicI82551,
2431                        htNicI8259er,
2432                        htNicI85557b,
2433                        htNicNe2kIsa,
2434                        htNicNe2kPci,
2435                        htNicParavirtual,
2436                        htNicPcnet,
2437                        htNicRtl8139]
2438
2439 -- * Vif types
2440
2441 -- | Default vif type in xen-hvm
2442 htHvmVifIoemu :: String
2443 htHvmVifIoemu = "ioemu"
2444
2445 htHvmVifVif :: String
2446 htHvmVifVif = "vif"
2447
2448 htHvmValidVifTypes :: FrozenSet String
2449 htHvmValidVifTypes = ConstantUtils.mkSet [htHvmVifIoemu, htHvmVifVif]
2450
2451 -- * Disk types
2452
2453 htDiskIde :: String
2454 htDiskIde = "ide"
2455
2456 htDiskIoemu :: String
2457 htDiskIoemu = "ioemu"
2458
2459 htDiskMtd :: String
2460 htDiskMtd = "mtd"
2461
2462 htDiskParavirtual :: String
2463 htDiskParavirtual = "paravirtual"
2464
2465 htDiskPflash :: String
2466 htDiskPflash = "pflash"
2467
2468 htDiskScsi :: String
2469 htDiskScsi = "scsi"
2470
2471 htDiskSd :: String
2472 htDiskSd = "sd"
2473
2474 htHvmValidDiskTypes :: FrozenSet String
2475 htHvmValidDiskTypes = ConstantUtils.mkSet [htDiskIoemu, htDiskParavirtual]
2476
2477 htKvmValidDiskTypes :: FrozenSet String
2478 htKvmValidDiskTypes =
2479   ConstantUtils.mkSet [htDiskIde,
2480                        htDiskMtd,
2481                        htDiskParavirtual,
2482                        htDiskPflash,
2483                        htDiskScsi,
2484                        htDiskSd]
2485
2486 htCacheDefault :: String
2487 htCacheDefault = "default"
2488
2489 htCacheNone :: String
2490 htCacheNone = "none"
2491
2492 htCacheWback :: String
2493 htCacheWback = "writeback"
2494
2495 htCacheWthrough :: String
2496 htCacheWthrough = "writethrough"
2497
2498 htValidCacheTypes :: FrozenSet String
2499 htValidCacheTypes =
2500   ConstantUtils.mkSet [htCacheDefault,
2501                        htCacheNone,
2502                        htCacheWback,
2503                        htCacheWthrough]
2504
2505 -- * Mouse types
2506
2507 htMouseMouse :: String
2508 htMouseMouse = "mouse"
2509
2510 htMouseTablet :: String
2511 htMouseTablet = "tablet"
2512
2513 htKvmValidMouseTypes :: FrozenSet String
2514 htKvmValidMouseTypes = ConstantUtils.mkSet [htMouseMouse, htMouseTablet]
2515
2516 -- * Boot order
2517
2518 htBoCdrom :: String
2519 htBoCdrom = "cdrom"
2520
2521 htBoDisk :: String
2522 htBoDisk = "disk"
2523
2524 htBoFloppy :: String
2525 htBoFloppy = "floppy"
2526
2527 htBoNetwork :: String
2528 htBoNetwork = "network"
2529
2530 htKvmValidBoTypes :: FrozenSet String
2531 htKvmValidBoTypes =
2532   ConstantUtils.mkSet [htBoCdrom, htBoDisk, htBoFloppy, htBoNetwork]
2533
2534 -- * SPICE lossless image compression options
2535
2536 htKvmSpiceLosslessImgComprAutoGlz :: String
2537 htKvmSpiceLosslessImgComprAutoGlz = "auto_glz"
2538
2539 htKvmSpiceLosslessImgComprAutoLz :: String
2540 htKvmSpiceLosslessImgComprAutoLz = "auto_lz"
2541
2542 htKvmSpiceLosslessImgComprGlz :: String
2543 htKvmSpiceLosslessImgComprGlz = "glz"
2544
2545 htKvmSpiceLosslessImgComprLz :: String
2546 htKvmSpiceLosslessImgComprLz = "lz"
2547
2548 htKvmSpiceLosslessImgComprOff :: String
2549 htKvmSpiceLosslessImgComprOff = "off"
2550
2551 htKvmSpiceLosslessImgComprQuic :: String
2552 htKvmSpiceLosslessImgComprQuic = "quic"
2553
2554 htKvmSpiceValidLosslessImgComprOptions :: FrozenSet String
2555 htKvmSpiceValidLosslessImgComprOptions =
2556   ConstantUtils.mkSet [htKvmSpiceLosslessImgComprAutoGlz,
2557                        htKvmSpiceLosslessImgComprAutoLz,
2558                        htKvmSpiceLosslessImgComprGlz,
2559                        htKvmSpiceLosslessImgComprLz,
2560                        htKvmSpiceLosslessImgComprOff,
2561                        htKvmSpiceLosslessImgComprQuic]
2562
2563 htKvmSpiceLossyImgComprAlways :: String
2564 htKvmSpiceLossyImgComprAlways = "always"
2565
2566 htKvmSpiceLossyImgComprAuto :: String
2567 htKvmSpiceLossyImgComprAuto = "auto"
2568
2569 htKvmSpiceLossyImgComprNever :: String
2570 htKvmSpiceLossyImgComprNever = "never"
2571
2572 htKvmSpiceValidLossyImgComprOptions :: FrozenSet String
2573 htKvmSpiceValidLossyImgComprOptions =
2574   ConstantUtils.mkSet [htKvmSpiceLossyImgComprAlways,
2575                        htKvmSpiceLossyImgComprAuto,
2576                        htKvmSpiceLossyImgComprNever]
2577
2578 -- * SPICE video stream detection
2579
2580 htKvmSpiceVideoStreamDetectionAll :: String
2581 htKvmSpiceVideoStreamDetectionAll = "all"
2582
2583 htKvmSpiceVideoStreamDetectionFilter :: String
2584 htKvmSpiceVideoStreamDetectionFilter = "filter"
2585
2586 htKvmSpiceVideoStreamDetectionOff :: String
2587 htKvmSpiceVideoStreamDetectionOff = "off"
2588
2589 htKvmSpiceValidVideoStreamDetectionOptions :: FrozenSet String
2590 htKvmSpiceValidVideoStreamDetectionOptions =
2591   ConstantUtils.mkSet [htKvmSpiceVideoStreamDetectionAll,
2592                        htKvmSpiceVideoStreamDetectionFilter,
2593                        htKvmSpiceVideoStreamDetectionOff]
2594
2595 -- * Security models
2596
2597 htSmNone :: String
2598 htSmNone = "none"
2599
2600 htSmPool :: String
2601 htSmPool = "pool"
2602
2603 htSmUser :: String
2604 htSmUser = "user"
2605
2606 htKvmValidSmTypes :: FrozenSet String
2607 htKvmValidSmTypes = ConstantUtils.mkSet [htSmNone, htSmPool, htSmUser]
2608
2609 -- * Kvm flag values
2610
2611 htKvmDisabled :: String
2612 htKvmDisabled = "disabled"
2613
2614 htKvmEnabled :: String
2615 htKvmEnabled = "enabled"
2616
2617 htKvmFlagValues :: FrozenSet String
2618 htKvmFlagValues = ConstantUtils.mkSet [htKvmDisabled, htKvmEnabled]
2619
2620 -- * Migration type
2621
2622 htMigrationLive :: String
2623 htMigrationLive = Types.migrationModeToRaw MigrationLive
2624
2625 htMigrationNonlive :: String
2626 htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
2627
2628 htMigrationModes :: FrozenSet String
2629 htMigrationModes =
2630   ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
2631
2632 -- * Cluster verify steps
2633
2634 verifyNplusoneMem :: String
2635 verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
2636
2637 verifyOptionalChecks :: FrozenSet String
2638 verifyOptionalChecks =
2639   ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
2640
2641 -- * Cluster Verify error classes
2642
2643 cvTcluster :: String
2644 cvTcluster = "cluster"
2645
2646 cvTgroup :: String
2647 cvTgroup = "group"
2648
2649 cvTnode :: String
2650 cvTnode = "node"
2651
2652 cvTinstance :: String
2653 cvTinstance = "instance"
2654
2655 -- * Cluster Verify error codes and documentation
2656
2657 cvEclustercert :: (String, String, String)
2658 cvEclustercert =
2659   ("cluster",
2660    Types.cVErrorCodeToRaw CvECLUSTERCERT,
2661    "Cluster certificate files verification failure")
2662
2663 cvEclustercfg :: (String, String, String)
2664 cvEclustercfg =
2665   ("cluster",
2666    Types.cVErrorCodeToRaw CvECLUSTERCFG,
2667    "Cluster configuration verification failure")
2668
2669 cvEclusterdanglinginst :: (String, String, String)
2670 cvEclusterdanglinginst =
2671   ("node",
2672    Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
2673    "Some instances have a non-existing primary node")
2674
2675 cvEclusterdanglingnodes :: (String, String, String)
2676 cvEclusterdanglingnodes =
2677   ("node",
2678    Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
2679    "Some nodes belong to non-existing groups")
2680
2681 cvEclusterfilecheck :: (String, String, String)
2682 cvEclusterfilecheck =
2683   ("cluster",
2684    Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
2685    "Cluster configuration verification failure")
2686
2687 cvEgroupdifferentpvsize :: (String, String, String)
2688 cvEgroupdifferentpvsize =
2689   ("group",
2690    Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
2691    "PVs in the group have different sizes")
2692
2693 cvEinstancebadnode :: (String, String, String)
2694 cvEinstancebadnode =
2695   ("instance",
2696    Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
2697    "Instance marked as running lives on an offline node")
2698
2699 cvEinstancedown :: (String, String, String)
2700 cvEinstancedown =
2701   ("instance",
2702    Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
2703    "Instance not running on its primary node")
2704
2705 cvEinstancefaultydisk :: (String, String, String)
2706 cvEinstancefaultydisk =
2707   ("instance",
2708    Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
2709    "Impossible to retrieve status for a disk")
2710
2711 cvEinstancelayout :: (String, String, String)
2712 cvEinstancelayout =
2713   ("instance",
2714    Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
2715    "Instance has multiple secondary nodes")
2716
2717 cvEinstancemissingcfgparameter :: (String, String, String)
2718 cvEinstancemissingcfgparameter =
2719   ("instance",
2720    Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
2721    "A configuration parameter for an instance is missing")
2722
2723 cvEinstancemissingdisk :: (String, String, String)
2724 cvEinstancemissingdisk =
2725   ("instance",
2726    Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
2727    "Missing volume on an instance")
2728
2729 cvEinstancepolicy :: (String, String, String)
2730 cvEinstancepolicy =
2731   ("instance",
2732    Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
2733    "Instance does not meet policy")
2734
2735 cvEinstancesplitgroups :: (String, String, String)
2736 cvEinstancesplitgroups =
2737   ("instance",
2738    Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
2739    "Instance with primary and secondary nodes in different groups")
2740
2741 cvEinstanceunsuitablenode :: (String, String, String)
2742 cvEinstanceunsuitablenode =
2743   ("instance",
2744    Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
2745    "Instance running on nodes that are not suitable for it")
2746
2747 cvEinstancewrongnode :: (String, String, String)
2748 cvEinstancewrongnode =
2749   ("instance",
2750    Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
2751    "Instance running on the wrong node")
2752
2753 cvEnodedrbd :: (String, String, String)
2754 cvEnodedrbd =
2755   ("node",
2756    Types.cVErrorCodeToRaw CvENODEDRBD,
2757    "Error parsing the DRBD status file")
2758
2759 cvEnodedrbdhelper :: (String, String, String)
2760 cvEnodedrbdhelper =
2761   ("node",
2762    Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
2763    "Error caused by the DRBD helper")
2764
2765 cvEnodedrbdversion :: (String, String, String)
2766 cvEnodedrbdversion =
2767   ("node",
2768    Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
2769    "DRBD version mismatch within a node group")
2770
2771 cvEnodefilecheck :: (String, String, String)
2772 cvEnodefilecheck =
2773   ("node",
2774    Types.cVErrorCodeToRaw CvENODEFILECHECK,
2775    "Error retrieving the checksum of the node files")
2776
2777 cvEnodefilestoragepaths :: (String, String, String)
2778 cvEnodefilestoragepaths =
2779   ("node",
2780    Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
2781    "Detected bad file storage paths")
2782
2783 cvEnodefilestoragepathunusable :: (String, String, String)
2784 cvEnodefilestoragepathunusable =
2785   ("node",
2786    Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
2787    "File storage path unusable")
2788
2789 cvEnodehooks :: (String, String, String)
2790 cvEnodehooks =
2791   ("node",
2792    Types.cVErrorCodeToRaw CvENODEHOOKS,
2793    "Communication failure in hooks execution")
2794
2795 cvEnodehv :: (String, String, String)
2796 cvEnodehv =
2797   ("node",
2798    Types.cVErrorCodeToRaw CvENODEHV,
2799    "Hypervisor parameters verification failure")
2800
2801 cvEnodelvm :: (String, String, String)
2802 cvEnodelvm =
2803   ("node",
2804    Types.cVErrorCodeToRaw CvENODELVM,
2805    "LVM-related node error")
2806
2807 cvEnoden1 :: (String, String, String)
2808 cvEnoden1 =
2809   ("node",
2810    Types.cVErrorCodeToRaw CvENODEN1,
2811    "Not enough memory to accommodate instance failovers")
2812
2813 cvEnodenet :: (String, String, String)
2814 cvEnodenet =
2815   ("node",
2816    Types.cVErrorCodeToRaw CvENODENET,
2817    "Network-related node error")
2818
2819 cvEnodeoobpath :: (String, String, String)
2820 cvEnodeoobpath =
2821   ("node",
2822    Types.cVErrorCodeToRaw CvENODEOOBPATH,
2823    "Invalid Out Of Band path")
2824
2825 cvEnodeorphaninstance :: (String, String, String)
2826 cvEnodeorphaninstance =
2827   ("node",
2828    Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
2829    "Unknown intance running on a node")
2830
2831 cvEnodeorphanlv :: (String, String, String)
2832 cvEnodeorphanlv =
2833   ("node",
2834    Types.cVErrorCodeToRaw CvENODEORPHANLV,
2835    "Unknown LVM logical volume")
2836
2837 cvEnodeos :: (String, String, String)
2838 cvEnodeos =
2839   ("node",
2840    Types.cVErrorCodeToRaw CvENODEOS,
2841    "OS-related node error")
2842
2843 cvEnoderpc :: (String, String, String)
2844 cvEnoderpc =
2845   ("node",
2846    Types.cVErrorCodeToRaw CvENODERPC,
2847    "Error during connection to the primary node of an instance")
2848
2849 cvEnodesetup :: (String, String, String)
2850 cvEnodesetup =
2851   ("node",
2852    Types.cVErrorCodeToRaw CvENODESETUP,
2853    "Node setup error")
2854
2855 cvEnodesharedfilestoragepathunusable :: (String, String, String)
2856 cvEnodesharedfilestoragepathunusable =
2857   ("node",
2858    Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
2859    "Shared file storage path unusable")
2860
2861 cvEnodessh :: (String, String, String)
2862 cvEnodessh =
2863   ("node",
2864    Types.cVErrorCodeToRaw CvENODESSH,
2865    "SSH-related node error")
2866
2867 cvEnodetime :: (String, String, String)
2868 cvEnodetime =
2869   ("node",
2870    Types.cVErrorCodeToRaw CvENODETIME,
2871    "Node returned invalid time")
2872
2873 cvEnodeuserscripts :: (String, String, String)
2874 cvEnodeuserscripts =
2875   ("node",
2876    Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
2877    "User scripts not present or not executable")
2878
2879 cvEnodeversion :: (String, String, String)
2880 cvEnodeversion =
2881   ("node",
2882    Types.cVErrorCodeToRaw CvENODEVERSION,
2883    "Protocol version mismatch or Ganeti version mismatch")
2884
2885 cvAllEcodes :: FrozenSet (String, String, String)
2886 cvAllEcodes =
2887   ConstantUtils.mkSet
2888   [cvEclustercert,
2889    cvEclustercfg,
2890    cvEclusterdanglinginst,
2891    cvEclusterdanglingnodes,
2892    cvEclusterfilecheck,
2893    cvEgroupdifferentpvsize,
2894    cvEinstancebadnode,
2895    cvEinstancedown,
2896    cvEinstancefaultydisk,
2897    cvEinstancelayout,
2898    cvEinstancemissingcfgparameter,
2899    cvEinstancemissingdisk,
2900    cvEinstancepolicy,
2901    cvEinstancesplitgroups,
2902    cvEinstanceunsuitablenode,
2903    cvEinstancewrongnode,
2904    cvEnodedrbd,
2905    cvEnodedrbdhelper,
2906    cvEnodedrbdversion,
2907    cvEnodefilecheck,
2908    cvEnodefilestoragepaths,
2909    cvEnodefilestoragepathunusable,
2910    cvEnodehooks,
2911    cvEnodehv,
2912    cvEnodelvm,
2913    cvEnoden1,
2914    cvEnodenet,
2915    cvEnodeoobpath,
2916    cvEnodeorphaninstance,
2917    cvEnodeorphanlv,
2918    cvEnodeos,
2919    cvEnoderpc,
2920    cvEnodesetup,
2921    cvEnodesharedfilestoragepathunusable,
2922    cvEnodessh,
2923    cvEnodetime,
2924    cvEnodeuserscripts,
2925    cvEnodeversion]
2926
2927 cvAllEcodesStrings :: FrozenSet String
2928 cvAllEcodesStrings =
2929   ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
2930
2931 -- * Node verify constants
2932
2933 nvBridges :: String
2934 nvBridges = "bridges"
2935
2936 nvDrbdhelper :: String
2937 nvDrbdhelper = "drbd-helper"
2938
2939 nvDrbdversion :: String
2940 nvDrbdversion = "drbd-version"
2941
2942 nvDrbdlist :: String
2943 nvDrbdlist = "drbd-list"
2944
2945 nvExclusivepvs :: String
2946 nvExclusivepvs = "exclusive-pvs"
2947
2948 nvFilelist :: String
2949 nvFilelist = "filelist"
2950
2951 nvAcceptedStoragePaths :: String
2952 nvAcceptedStoragePaths = "allowed-file-storage-paths"
2953
2954 nvFileStoragePath :: String
2955 nvFileStoragePath = "file-storage-path"
2956
2957 nvSharedFileStoragePath :: String
2958 nvSharedFileStoragePath = "shared-file-storage-path"
2959
2960 nvHvinfo :: String
2961 nvHvinfo = "hvinfo"
2962
2963 nvHvparams :: String
2964 nvHvparams = "hvparms"
2965
2966 nvHypervisor :: String
2967 nvHypervisor = "hypervisor"
2968
2969 nvInstancelist :: String
2970 nvInstancelist = "instancelist"
2971
2972 nvLvlist :: String
2973 nvLvlist = "lvlist"
2974
2975 nvMasterip :: String
2976 nvMasterip = "master-ip"
2977
2978 nvNodelist :: String
2979 nvNodelist = "nodelist"
2980
2981 nvNodenettest :: String
2982 nvNodenettest = "node-net-test"
2983
2984 nvNodesetup :: String
2985 nvNodesetup = "nodesetup"
2986
2987 nvOobPaths :: String
2988 nvOobPaths = "oob-paths"
2989
2990 nvOslist :: String
2991 nvOslist = "oslist"
2992
2993 nvPvlist :: String
2994 nvPvlist = "pvlist"
2995
2996 nvTime :: String
2997 nvTime = "time"
2998
2999 nvUserscripts :: String
3000 nvUserscripts = "user-scripts"
3001
3002 nvVersion :: String
3003 nvVersion = "version"
3004
3005 nvVglist :: String
3006 nvVglist = "vglist"
3007
3008 nvVmnodes :: String
3009 nvVmnodes = "vmnodes"
3010
3011 -- * Instance status
3012
3013 inststAdmindown :: String
3014 inststAdmindown = Types.instanceStatusToRaw StatusDown
3015
3016 inststAdminoffline :: String
3017 inststAdminoffline = Types.instanceStatusToRaw StatusOffline
3018
3019 inststErrordown :: String
3020 inststErrordown = Types.instanceStatusToRaw ErrorDown
3021
3022 inststErrorup :: String
3023 inststErrorup = Types.instanceStatusToRaw ErrorUp
3024
3025 inststNodedown :: String
3026 inststNodedown = Types.instanceStatusToRaw NodeDown
3027
3028 inststNodeoffline :: String
3029 inststNodeoffline = Types.instanceStatusToRaw NodeOffline
3030
3031 inststRunning :: String
3032 inststRunning = Types.instanceStatusToRaw Running
3033
3034 inststWrongnode :: String
3035 inststWrongnode = Types.instanceStatusToRaw WrongNode
3036
3037 inststAll :: FrozenSet String
3038 inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
3039
3040 -- * Admin states
3041
3042 adminstDown :: String
3043 adminstDown = Types.adminStateToRaw AdminDown
3044
3045 adminstOffline :: String
3046 adminstOffline = Types.adminStateToRaw AdminOffline
3047
3048 adminstUp :: String
3049 adminstUp = Types.adminStateToRaw AdminUp
3050
3051 adminstAll :: FrozenSet String
3052 adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
3053
3054 -- * Node roles
3055
3056 nrDrained :: String
3057 nrDrained = Types.nodeRoleToRaw NRDrained
3058
3059 nrMaster :: String
3060 nrMaster = Types.nodeRoleToRaw NRMaster
3061
3062 nrMcandidate :: String
3063 nrMcandidate = Types.nodeRoleToRaw NRCandidate
3064
3065 nrOffline :: String
3066 nrOffline = Types.nodeRoleToRaw NROffline
3067
3068 nrRegular :: String
3069 nrRegular = Types.nodeRoleToRaw NRRegular
3070
3071 nrAll :: FrozenSet String
3072 nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
3073
3074 -- * SSL certificate check constants (in days)
3075
3076 sslCertExpirationError :: Int
3077 sslCertExpirationError = 7
3078
3079 sslCertExpirationWarn :: Int
3080 sslCertExpirationWarn = 30
3081
3082 -- * Allocator framework constants
3083
3084 iallocatorVersion :: Int
3085 iallocatorVersion = 2
3086
3087 iallocatorDirIn :: String
3088 iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
3089
3090 iallocatorDirOut :: String
3091 iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
3092
3093 validIallocatorDirections :: FrozenSet String
3094 validIallocatorDirections =
3095   ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
3096
3097 iallocatorModeAlloc :: String
3098 iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
3099
3100 iallocatorModeChgGroup :: String
3101 iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
3102
3103 iallocatorModeMultiAlloc :: String
3104 iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
3105
3106 iallocatorModeNodeEvac :: String
3107 iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
3108
3109 iallocatorModeReloc :: String
3110 iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
3111
3112 validIallocatorModes :: FrozenSet String
3113 validIallocatorModes =
3114   ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
3115
3116 iallocatorSearchPath :: [String]
3117 iallocatorSearchPath = AutoConf.iallocatorSearchPath
3118
3119 defaultIallocatorShortcut :: String
3120 defaultIallocatorShortcut = "."
3121
3122 -- * Node evacuation
3123
3124 nodeEvacPri :: String
3125 nodeEvacPri = Types.evacModeToRaw ChangePrimary
3126
3127 nodeEvacSec :: String
3128 nodeEvacSec = Types.evacModeToRaw ChangeSecondary
3129
3130 nodeEvacAll :: String
3131 nodeEvacAll = Types.evacModeToRaw ChangeAll
3132
3133 nodeEvacModes :: FrozenSet String
3134 nodeEvacModes = ConstantUtils.mkSet $ map Types.evacModeToRaw [minBound..]
3135
3136 -- * Job queue
3137
3138 jobQueueVersion :: Int
3139 jobQueueVersion = 1
3140
3141 jobQueueSizeHardLimit :: Int
3142 jobQueueSizeHardLimit = 5000
3143
3144 jobQueueFilesPerms :: Int
3145 jobQueueFilesPerms = 0o640
3146
3147 -- * Unchanged job return
3148
3149 jobNotchanged :: String
3150 jobNotchanged = "nochange"
3151
3152 -- * Job status
3153
3154 jobStatusQueued :: String
3155 jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
3156
3157 jobStatusWaiting :: String
3158 jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
3159
3160 jobStatusCanceling :: String
3161 jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
3162
3163 jobStatusRunning :: String
3164 jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
3165
3166 jobStatusCanceled :: String
3167 jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
3168
3169 jobStatusSuccess :: String
3170 jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
3171
3172 jobStatusError :: String
3173 jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
3174
3175 jobsPending :: FrozenSet String
3176 jobsPending =
3177   ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
3178
3179 jobsFinalized :: FrozenSet String
3180 jobsFinalized =
3181   ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
3182
3183 jobStatusAll :: FrozenSet String
3184 jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
3185
3186 -- * OpCode status
3187
3188 -- ** Not yet finalized opcodes
3189
3190 opStatusCanceling :: String
3191 opStatusCanceling = "canceling"
3192
3193 opStatusQueued :: String
3194 opStatusQueued = "queued"
3195
3196 opStatusRunning :: String
3197 opStatusRunning = "running"
3198
3199 opStatusWaiting :: String
3200 opStatusWaiting = "waiting"
3201
3202 -- ** Finalized opcodes
3203
3204 opStatusCanceled :: String
3205 opStatusCanceled = "canceled"
3206
3207 opStatusError :: String
3208 opStatusError = "error"
3209
3210 opStatusSuccess :: String
3211 opStatusSuccess = "success"
3212
3213 opsFinalized :: FrozenSet String
3214 opsFinalized =
3215   ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
3216
3217 -- * OpCode priority
3218
3219 opPrioLowest :: Int
3220 opPrioLowest = 19
3221
3222 opPrioHighest :: Int
3223 opPrioHighest = -20
3224
3225 opPrioLow :: Int
3226 opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
3227
3228 opPrioNormal :: Int
3229 opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
3230
3231 opPrioHigh :: Int
3232 opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
3233
3234 opPrioSubmitValid :: FrozenSet Int
3235 opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
3236
3237 opPrioDefault :: Int
3238 opPrioDefault = opPrioNormal
3239
3240 -- * Lock recalculate mode
3241
3242 locksAppend :: String
3243 locksAppend = "append"
3244
3245 locksReplace :: String
3246 locksReplace = "replace"
3247
3248 -- * Lock timeout
3249 --
3250 -- The lock timeout (sum) before we transition into blocking acquire
3251 -- (this can still be reset by priority change).  Computed as max time
3252 -- (10 hours) before we should actually go into blocking acquire,
3253 -- given that we start from the default priority level.
3254
3255 lockAttemptsMaxwait :: Double
3256 lockAttemptsMaxwait = 15.0
3257
3258 lockAttemptsMinwait :: Double
3259 lockAttemptsMinwait = 1.0
3260
3261 lockAttemptsTimeout :: Int
3262 lockAttemptsTimeout = (10 * 3600) `div` (opPrioDefault - opPrioHighest)
3263
3264 -- * Execution log types
3265
3266 elogMessage :: String
3267 elogMessage = Types.eLogTypeToRaw ELogMessage
3268
3269 elogRemoteImport :: String
3270 elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
3271
3272 elogJqueueTest :: String
3273 elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
3274
3275 -- * /etc/hosts modification
3276
3277 etcHostsAdd :: String
3278 etcHostsAdd = "add"
3279
3280 etcHostsRemove :: String
3281 etcHostsRemove = "remove"
3282
3283 -- * Job queue test
3284
3285 jqtMsgprefix :: String
3286 jqtMsgprefix = "TESTMSG="
3287
3288 jqtExec :: String
3289 jqtExec = "exec"
3290
3291 jqtExpandnames :: String
3292 jqtExpandnames = "expandnames"
3293
3294 jqtLogmsg :: String
3295 jqtLogmsg = "logmsg"
3296
3297 jqtStartmsg :: String
3298 jqtStartmsg = "startmsg"
3299
3300 jqtAll :: FrozenSet String
3301 jqtAll = ConstantUtils.mkSet [jqtExec, jqtExpandnames, jqtLogmsg, jqtStartmsg]
3302
3303 -- * Query resources
3304
3305 qrCluster :: String
3306 qrCluster = "cluster"
3307
3308 qrExport :: String
3309 qrExport = "export"
3310
3311 qrExtstorage :: String
3312 qrExtstorage = "extstorage"
3313
3314 qrGroup :: String
3315 qrGroup = "group"
3316
3317 qrInstance :: String
3318 qrInstance = "instance"
3319
3320 qrJob :: String
3321 qrJob = "job"
3322
3323 qrLock :: String
3324 qrLock = "lock"
3325
3326 qrNetwork :: String
3327 qrNetwork = "network"
3328
3329 qrNode :: String
3330 qrNode = "node"
3331
3332 qrOs :: String
3333 qrOs = "os"
3334
3335 -- | List of resources which can be queried using 'Ganeti.OpCodes.OpQuery'
3336 qrViaOp :: FrozenSet String
3337 qrViaOp =
3338   ConstantUtils.mkSet [qrCluster,
3339                        qrInstance,
3340                        qrNode,
3341                        qrGroup,
3342                        qrOs,
3343                        qrExport,
3344                        qrNetwork,
3345                        qrExtstorage]
3346
3347 -- | List of resources which can be queried using Local UniX Interface
3348 qrViaLuxi :: FrozenSet String
3349 qrViaLuxi = ConstantUtils.mkSet [qrLock, qrJob]
3350
3351 -- | List of resources which can be queried using RAPI
3352 qrViaRapi :: FrozenSet String
3353 qrViaRapi = qrViaLuxi
3354
3355 -- * Query field types
3356
3357 qftBool :: String
3358 qftBool = "bool"
3359
3360 qftNumber :: String
3361 qftNumber = "number"
3362
3363 qftOther :: String
3364 qftOther = "other"
3365
3366 qftText :: String
3367 qftText = "text"
3368
3369 qftTimestamp :: String
3370 qftTimestamp = "timestamp"
3371
3372 qftUnit :: String
3373 qftUnit = "unit"
3374
3375 qftUnknown :: String
3376 qftUnknown = "unknown"
3377
3378 qftAll :: FrozenSet String
3379 qftAll =
3380   ConstantUtils.mkSet [qftBool,
3381                        qftNumber,
3382                        qftOther,
3383                        qftText,
3384                        qftTimestamp,
3385                        qftUnit,
3386                        qftUnknown]
3387
3388 -- * Query result field status
3389 --
3390 -- Don't change or reuse values as they're used by clients.
3391 --
3392 -- FIXME: link with 'Ganeti.Query.Language.ResultStatus'
3393
3394 -- | No data (e.g. RPC error), can be used instead of 'rsOffline'
3395 rsNodata :: Int
3396 rsNodata = 2
3397
3398 rsNormal :: Int
3399 rsNormal = 0
3400
3401 -- | Resource marked offline
3402 rsOffline :: Int
3403 rsOffline = 4
3404
3405 -- | Value unavailable/unsupported for item; if this field is
3406 -- supported but we cannot get the data for the moment, 'rsNodata' or
3407 -- 'rsOffline' should be used
3408 rsUnavail :: Int
3409 rsUnavail = 3
3410
3411 rsUnknown :: Int
3412 rsUnknown = 1
3413
3414 rsAll :: FrozenSet Int
3415 rsAll =
3416   ConstantUtils.mkSet [rsNodata,
3417                        rsNormal,
3418                        rsOffline,
3419                        rsUnavail,
3420                        rsUnknown]
3421
3422 -- | Special field cases and their verbose/terse formatting
3423 rssDescription :: Map Int (String, String)
3424 rssDescription =
3425   Map.fromList [(rsUnknown, ("(unknown)", "??")),
3426                 (rsNodata, ("(nodata)", "?")),
3427                 (rsOffline, ("(offline)", "*")),
3428                 (rsUnavail, ("(unavail)", "-"))]
3429
3430 -- * Max dynamic devices
3431
3432 maxDisks :: Int
3433 maxDisks = Types.maxDisks
3434
3435 maxNics :: Int
3436 maxNics = Types.maxNics
3437
3438 -- | SSCONF file prefix
3439 ssconfFileprefix :: String
3440 ssconfFileprefix = "ssconf_"
3441
3442 -- * SSCONF keys
3443
3444 ssClusterName :: String
3445 ssClusterName = "cluster_name"
3446
3447 ssClusterTags :: String
3448 ssClusterTags = "cluster_tags"
3449
3450 ssFileStorageDir :: String
3451 ssFileStorageDir = "file_storage_dir"
3452
3453 ssSharedFileStorageDir :: String
3454 ssSharedFileStorageDir = "shared_file_storage_dir"
3455
3456 ssMasterCandidates :: String
3457 ssMasterCandidates = "master_candidates"
3458
3459 ssMasterCandidatesIps :: String
3460 ssMasterCandidatesIps = "master_candidates_ips"
3461
3462 ssMasterIp :: String
3463 ssMasterIp = "master_ip"
3464
3465 ssMasterNetdev :: String
3466 ssMasterNetdev = "master_netdev"
3467
3468 ssMasterNetmask :: String
3469 ssMasterNetmask = "master_netmask"
3470
3471 ssMasterNode :: String
3472 ssMasterNode = "master_node"
3473
3474 ssNodeList :: String
3475 ssNodeList = "node_list"
3476
3477 ssNodePrimaryIps :: String
3478 ssNodePrimaryIps = "node_primary_ips"
3479
3480 ssNodeSecondaryIps :: String
3481 ssNodeSecondaryIps = "node_secondary_ips"
3482
3483 ssOfflineNodes :: String
3484 ssOfflineNodes = "offline_nodes"
3485
3486 ssOnlineNodes :: String
3487 ssOnlineNodes = "online_nodes"
3488
3489 ssPrimaryIpFamily :: String
3490 ssPrimaryIpFamily = "primary_ip_family"
3491
3492 ssInstanceList :: String
3493 ssInstanceList = "instance_list"
3494
3495 ssReleaseVersion :: String
3496 ssReleaseVersion = "release_version"
3497
3498 ssHypervisorList :: String
3499 ssHypervisorList = "hypervisor_list"
3500
3501 ssMaintainNodeHealth :: String
3502 ssMaintainNodeHealth = "maintain_node_health"
3503
3504 ssUidPool :: String
3505 ssUidPool = "uid_pool"
3506
3507 ssNodegroups :: String
3508 ssNodegroups = "nodegroups"
3509
3510 ssNetworks :: String
3511 ssNetworks = "networks"
3512
3513 -- | This is not a complete SSCONF key, but the prefix for the
3514 -- hypervisor keys
3515 ssHvparamsPref :: String
3516 ssHvparamsPref = "hvparams_"
3517
3518 -- * Hvparams keys
3519
3520 ssHvparamsXenChroot :: String
3521 ssHvparamsXenChroot = ssHvparamsPref ++ htChroot
3522
3523 ssHvparamsXenFake :: String
3524 ssHvparamsXenFake = ssHvparamsPref ++ htFake
3525
3526 ssHvparamsXenHvm :: String
3527 ssHvparamsXenHvm = ssHvparamsPref ++ htXenHvm
3528
3529 ssHvparamsXenKvm :: String
3530 ssHvparamsXenKvm = ssHvparamsPref ++ htKvm
3531
3532 ssHvparamsXenLxc :: String
3533 ssHvparamsXenLxc = ssHvparamsPref ++ htLxc
3534
3535 ssHvparamsXenPvm :: String
3536 ssHvparamsXenPvm = ssHvparamsPref ++ htXenPvm
3537
3538 validSsHvparamsKeys :: FrozenSet String
3539 validSsHvparamsKeys =
3540   ConstantUtils.mkSet [ssHvparamsXenChroot,
3541                        ssHvparamsXenLxc,
3542                        ssHvparamsXenFake,
3543                        ssHvparamsXenHvm,
3544                        ssHvparamsXenKvm,
3545                        ssHvparamsXenPvm]
3546
3547 ssFilePerms :: Int
3548 ssFilePerms = 0o444
3549
3550 -- | Cluster wide default parameters
3551 defaultEnabledHypervisor :: String
3552 defaultEnabledHypervisor = htXenPvm
3553
3554 hvcDefaults :: Map Hypervisor (Map String PyValueEx)
3555 hvcDefaults =
3556   Map.fromList
3557   [ (XenPvm, Map.fromList
3558              [ (hvUseBootloader,  PyValueEx False)
3559              , (hvBootloaderPath, PyValueEx xenBootloader)
3560              , (hvBootloaderArgs, PyValueEx "")
3561              , (hvKernelPath,     PyValueEx xenKernel)
3562              , (hvInitrdPath,     PyValueEx "")
3563              , (hvRootPath,       PyValueEx "/dev/xvda1")
3564              , (hvKernelArgs,     PyValueEx "ro")
3565              , (hvMigrationPort,  PyValueEx (8002 :: Int))
3566              , (hvMigrationMode,  PyValueEx htMigrationLive)
3567              , (hvBlockdevPrefix, PyValueEx "sd")
3568              , (hvRebootBehavior, PyValueEx instanceRebootAllowed)
3569              , (hvCpuMask,        PyValueEx cpuPinningAll)
3570              , (hvCpuCap,         PyValueEx (0 :: Int))
3571              , (hvCpuWeight,      PyValueEx (256 :: Int))
3572              , (hvVifScript,      PyValueEx "")
3573              , (hvXenCmd,         PyValueEx xenCmdXm)
3574              , (hvXenCpuid,       PyValueEx "")
3575              , (hvSoundhw,        PyValueEx "")
3576              ])
3577   , (XenHvm, Map.fromList
3578              [ (hvBootOrder,      PyValueEx "cd")
3579              , (hvCdromImagePath, PyValueEx "")
3580              , (hvNicType,        PyValueEx htNicRtl8139)
3581              , (hvDiskType,       PyValueEx htDiskParavirtual)
3582              , (hvVncBindAddress, PyValueEx ip4AddressAny)
3583              , (hvAcpi,           PyValueEx True)
3584              , (hvPae,            PyValueEx True)
3585              , (hvKernelPath,     PyValueEx "/usr/lib/xen/boot/hvmloader")
3586              , (hvDeviceModel,    PyValueEx "/usr/lib/xen/bin/qemu-dm")
3587              , (hvMigrationPort,  PyValueEx (8002 :: Int))
3588              , (hvMigrationMode,  PyValueEx htMigrationNonlive)
3589              , (hvUseLocaltime,   PyValueEx False)
3590              , (hvBlockdevPrefix, PyValueEx "hd")
3591              , (hvPassthrough,    PyValueEx "")
3592              , (hvRebootBehavior, PyValueEx instanceRebootAllowed)
3593              , (hvCpuMask,        PyValueEx cpuPinningAll)
3594              , (hvCpuCap,         PyValueEx (0 :: Int))
3595              , (hvCpuWeight,      PyValueEx (256 :: Int))
3596              , (hvVifType,        PyValueEx htHvmVifIoemu)
3597              , (hvVifScript,      PyValueEx "")
3598              , (hvViridian,       PyValueEx False)
3599              , (hvXenCmd,         PyValueEx xenCmdXm)
3600              , (hvXenCpuid,       PyValueEx "")
3601              , (hvSoundhw,        PyValueEx "")
3602              ])
3603   , (Kvm, Map.fromList
3604           [ (hvKvmPath,                         PyValueEx kvmPath)
3605           , (hvKernelPath,                      PyValueEx kvmKernel)
3606           , (hvInitrdPath,                      PyValueEx "")
3607           , (hvKernelArgs,                      PyValueEx "ro")
3608           , (hvRootPath,                        PyValueEx "/dev/vda1")
3609           , (hvAcpi,                            PyValueEx True)
3610           , (hvSerialConsole,                   PyValueEx True)
3611           , (hvSerialSpeed,                     PyValueEx (38400 :: Int))
3612           , (hvVncBindAddress,                  PyValueEx "")
3613           , (hvVncTls,                          PyValueEx False)
3614           , (hvVncX509,                         PyValueEx "")
3615           , (hvVncX509Verify,                   PyValueEx False)
3616           , (hvVncPasswordFile,                 PyValueEx "")
3617           , (hvKvmSpiceBind,                    PyValueEx "")
3618           , (hvKvmSpiceIpVersion,           PyValueEx ifaceNoIpVersionSpecified)
3619           , (hvKvmSpicePasswordFile,            PyValueEx "")
3620           , (hvKvmSpiceLosslessImgCompr,        PyValueEx "")
3621           , (hvKvmSpiceJpegImgCompr,            PyValueEx "")
3622           , (hvKvmSpiceZlibGlzImgCompr,         PyValueEx "")
3623           , (hvKvmSpiceStreamingVideoDetection, PyValueEx "")
3624           , (hvKvmSpiceAudioCompr,              PyValueEx True)
3625           , (hvKvmSpiceUseTls,                  PyValueEx False)
3626           , (hvKvmSpiceTlsCiphers,              PyValueEx opensslCiphers)
3627           , (hvKvmSpiceUseVdagent,              PyValueEx True)
3628           , (hvKvmFloppyImagePath,              PyValueEx "")
3629           , (hvCdromImagePath,                  PyValueEx "")
3630           , (hvKvmCdrom2ImagePath,              PyValueEx "")
3631           , (hvBootOrder,                       PyValueEx htBoDisk)
3632           , (hvNicType,                         PyValueEx htNicParavirtual)
3633           , (hvDiskType,                        PyValueEx htDiskParavirtual)
3634           , (hvKvmCdromDiskType,                PyValueEx "")
3635           , (hvUsbMouse,                        PyValueEx "")
3636           , (hvKeymap,                          PyValueEx "")
3637           , (hvMigrationPort,                   PyValueEx (8102 :: Int))
3638           , (hvMigrationBandwidth,              PyValueEx (32 :: Int))
3639           , (hvMigrationDowntime,               PyValueEx (30 :: Int))
3640           , (hvMigrationMode,                   PyValueEx htMigrationLive)
3641           , (hvUseLocaltime,                    PyValueEx False)
3642           , (hvDiskCache,                       PyValueEx htCacheDefault)
3643           , (hvSecurityModel,                   PyValueEx htSmNone)
3644           , (hvSecurityDomain,                  PyValueEx "")
3645           , (hvKvmFlag,                         PyValueEx "")
3646           , (hvVhostNet,                        PyValueEx False)
3647           , (hvKvmUseChroot,                    PyValueEx False)
3648           , (hvMemPath,                         PyValueEx "")
3649           , (hvRebootBehavior,                  PyValueEx instanceRebootAllowed)
3650           , (hvCpuMask,                         PyValueEx cpuPinningAll)
3651           , (hvCpuType,                         PyValueEx "")
3652           , (hvCpuCores,                        PyValueEx (0 :: Int))
3653           , (hvCpuThreads,                      PyValueEx (0 :: Int))
3654           , (hvCpuSockets,                      PyValueEx (0 :: Int))
3655           , (hvSoundhw,                         PyValueEx "")
3656           , (hvUsbDevices,                      PyValueEx "")
3657           , (hvVga,                             PyValueEx "")
3658           , (hvKvmExtra,                        PyValueEx "")
3659           , (hvKvmMachineVersion,               PyValueEx "")
3660           , (hvVnetHdr,                         PyValueEx True)])
3661   , (Fake, Map.fromList [(hvMigrationMode, PyValueEx htMigrationLive)])
3662   , (Chroot, Map.fromList [(hvInitScript, PyValueEx "/ganeti-chroot")])
3663   , (Lxc, Map.fromList [(hvCpuMask, PyValueEx "")])
3664   ]
3665
3666 hvcGlobals :: FrozenSet String
3667 hvcGlobals =
3668   ConstantUtils.mkSet [hvMigrationBandwidth,
3669                        hvMigrationMode,
3670                        hvMigrationPort,
3671                        hvXenCmd]
3672
3673 becDefaults :: Map String PyValueEx
3674 becDefaults =
3675   Map.fromList
3676   [ (beMinmem, PyValueEx (128 :: Int))
3677   , (beMaxmem, PyValueEx (128 :: Int))
3678   , (beVcpus, PyValueEx (1 :: Int))
3679   , (beAutoBalance, PyValueEx True)
3680   , (beAlwaysFailover, PyValueEx False)
3681   , (beSpindleUse, PyValueEx (1 :: Int))
3682   ]
3683
3684 ndcDefaults :: Map String PyValueEx
3685 ndcDefaults =
3686   Map.fromList
3687   [ (ndOobProgram,       PyValueEx "")
3688   , (ndSpindleCount,     PyValueEx (1 :: Int))
3689   , (ndExclusiveStorage, PyValueEx False)
3690   , (ndOvs,              PyValueEx False)
3691   , (ndOvsName,          PyValueEx defaultOvs)
3692   , (ndOvsLink,          PyValueEx "")
3693   ]
3694
3695 ndcGlobals :: FrozenSet String
3696 ndcGlobals = ConstantUtils.mkSet [ndExclusiveStorage]
3697
3698 -- | Default delay target measured in sectors
3699 defaultDelayTarget :: Int
3700 defaultDelayTarget = 1
3701
3702 defaultDiskCustom :: String
3703 defaultDiskCustom = ""
3704
3705 defaultDiskResync :: Bool
3706 defaultDiskResync = False
3707
3708 -- | Default fill target measured in sectors
3709 defaultFillTarget :: Int
3710 defaultFillTarget = 0
3711
3712 -- | Default mininum rate measured in KiB/s
3713 defaultMinRate :: Int
3714 defaultMinRate = 4 * 1024
3715
3716 defaultNetCustom :: String
3717 defaultNetCustom = ""
3718
3719 -- | Default plan ahead measured in sectors
3720 --
3721 -- The default values for the DRBD dynamic resync speed algorithm are
3722 -- taken from the drbsetup 8.3.11 man page, except for c-plan-ahead
3723 -- (that we don't need to set to 0, because we have a separate option
3724 -- to enable it) and for c-max-rate, that we cap to the default value
3725 -- for the static resync rate.
3726 defaultPlanAhead :: Int
3727 defaultPlanAhead = 20
3728
3729 defaultRbdPool :: String
3730 defaultRbdPool = "rbd"
3731
3732 diskLdDefaults :: Map DiskTemplate (Map String PyValueEx)
3733 diskLdDefaults =
3734   Map.fromList
3735   [ (DTBlock, Map.empty)
3736   , (DTDrbd8, Map.fromList
3737               [ (ldpBarriers,      PyValueEx drbdBarriers)
3738               , (ldpDefaultMetavg, PyValueEx defaultVg)
3739               , (ldpDelayTarget,   PyValueEx defaultDelayTarget)
3740               , (ldpDiskCustom,    PyValueEx defaultDiskCustom)
3741               , (ldpDynamicResync, PyValueEx defaultDiskResync)
3742               , (ldpFillTarget,    PyValueEx defaultFillTarget)
3743               , (ldpMaxRate,       PyValueEx classicDrbdSyncSpeed)
3744               , (ldpMinRate,       PyValueEx defaultMinRate)
3745               , (ldpNetCustom,     PyValueEx defaultNetCustom)
3746               , (ldpNoMetaFlush,   PyValueEx drbdNoMetaFlush)
3747               , (ldpPlanAhead,     PyValueEx defaultPlanAhead)
3748               , (ldpProtocol,      PyValueEx drbdDefaultNetProtocol)
3749               , (ldpResyncRate,    PyValueEx classicDrbdSyncSpeed)
3750               ])
3751   , (DTExt, Map.empty)
3752   , (DTFile, Map.empty)
3753   , (DTPlain, Map.fromList [(ldpStripes, PyValueEx lvmStripecount)])
3754   , (DTRbd, Map.fromList
3755             [ (ldpPool, PyValueEx defaultRbdPool)
3756             , (ldpAccess, PyValueEx diskKernelspace)
3757             ])
3758   , (DTSharedFile, Map.empty)
3759   ]
3760
3761 diskDtDefaults :: Map DiskTemplate (Map String PyValueEx)
3762 diskDtDefaults =
3763   Map.fromList
3764   [ (DTBlock,      Map.empty)
3765   , (DTDiskless,   Map.empty)
3766   , (DTDrbd8,      Map.fromList
3767                    [ (drbdDataStripes,   PyValueEx lvmStripecount)
3768                    , (drbdDefaultMetavg, PyValueEx defaultVg)
3769                    , (drbdDelayTarget,   PyValueEx defaultDelayTarget)
3770                    , (drbdDiskBarriers,  PyValueEx drbdBarriers)
3771                    , (drbdDiskCustom,    PyValueEx defaultDiskCustom)
3772                    , (drbdDynamicResync, PyValueEx defaultDiskResync)
3773                    , (drbdFillTarget,    PyValueEx defaultFillTarget)
3774                    , (drbdMaxRate,       PyValueEx classicDrbdSyncSpeed)
3775                    , (drbdMetaBarriers,  PyValueEx drbdNoMetaFlush)
3776                    , (drbdMetaStripes,   PyValueEx lvmStripecount)
3777                    , (drbdMinRate,       PyValueEx defaultMinRate)
3778                    , (drbdNetCustom,     PyValueEx defaultNetCustom)
3779                    , (drbdPlanAhead,     PyValueEx defaultPlanAhead)
3780                    , (drbdProtocol,      PyValueEx drbdDefaultNetProtocol)
3781                    , (drbdResyncRate,    PyValueEx classicDrbdSyncSpeed)
3782                    ])
3783   , (DTExt,        Map.empty)
3784   , (DTFile,       Map.empty)
3785   , (DTPlain,      Map.fromList [(lvStripes, PyValueEx lvmStripecount)])
3786   , (DTRbd,        Map.fromList
3787                    [ (rbdPool, PyValueEx defaultRbdPool)
3788                    , (rbdAccess, PyValueEx diskKernelspace)
3789                    ])
3790   , (DTSharedFile, Map.empty)
3791   ]
3792
3793 niccDefaults :: Map String PyValueEx
3794 niccDefaults =
3795   Map.fromList
3796   [ (nicMode, PyValueEx nicModeBridged)
3797   , (nicLink, PyValueEx defaultBridge)
3798   , (nicVlan, PyValueEx valueHsNothing)
3799   ]
3800
3801 -- | All of the following values are quite arbitrary - there are no
3802 -- "good" defaults, these must be customised per-site
3803 ispecsMinmaxDefaults :: Map String (Map String Int)
3804 ispecsMinmaxDefaults =
3805   Map.fromList
3806   [(ispecsMin,
3807     Map.fromList
3808     [(ConstantUtils.ispecMemSize, Types.iSpecMemorySize Types.defMinISpec),
3809      (ConstantUtils.ispecCpuCount, Types.iSpecCpuCount Types.defMinISpec),
3810      (ConstantUtils.ispecDiskCount, Types.iSpecDiskCount Types.defMinISpec),
3811      (ConstantUtils.ispecDiskSize, Types.iSpecDiskSize Types.defMinISpec),
3812      (ConstantUtils.ispecNicCount, Types.iSpecNicCount Types.defMinISpec),
3813      (ConstantUtils.ispecSpindleUse, Types.iSpecSpindleUse Types.defMinISpec)]),
3814    (ispecsMax,
3815     Map.fromList
3816     [(ConstantUtils.ispecMemSize, Types.iSpecMemorySize Types.defMaxISpec),
3817      (ConstantUtils.ispecCpuCount, Types.iSpecCpuCount Types.defMaxISpec),
3818      (ConstantUtils.ispecDiskCount, Types.iSpecDiskCount Types.defMaxISpec),
3819      (ConstantUtils.ispecDiskSize, Types.iSpecDiskSize Types.defMaxISpec),
3820      (ConstantUtils.ispecNicCount, Types.iSpecNicCount Types.defMaxISpec),
3821      (ConstantUtils.ispecSpindleUse, Types.iSpecSpindleUse Types.defMaxISpec)])]
3822
3823 ipolicyDefaults :: Map String PyValueEx
3824 ipolicyDefaults =
3825   Map.fromList
3826   [ (ispecsMinmax,        PyValueEx [ispecsMinmaxDefaults])
3827   , (ispecsStd,           PyValueEx (Map.fromList
3828                                      [ (ispecMemSize,    128)
3829                                      , (ispecCpuCount,   1)
3830                                      , (ispecDiskCount,  1)
3831                                      , (ispecDiskSize,   1024)
3832                                      , (ispecNicCount,   1)
3833                                      , (ispecSpindleUse, 1)
3834                                      ] :: Map String Int))
3835   , (ipolicyDts,          PyValueEx (ConstantUtils.toList diskTemplates))
3836   , (ipolicyVcpuRatio,    PyValueEx (4.0 :: Double))
3837   , (ipolicySpindleRatio, PyValueEx (32.0 :: Double))
3838   ]
3839
3840 masterPoolSizeDefault :: Int
3841 masterPoolSizeDefault = 10
3842
3843 -- * Exclusive storage
3844
3845 -- | Error margin used to compare physical disks
3846 partMargin :: Double
3847 partMargin = 0.01
3848
3849 -- | Space reserved when creating instance disks
3850 partReserved :: Double
3851 partReserved = 0.02
3852
3853 -- * Confd
3854
3855 confdProtocolVersion :: Int
3856 confdProtocolVersion = ConstantUtils.confdProtocolVersion
3857
3858 -- Confd request type
3859
3860 confdReqPing :: Int
3861 confdReqPing = Types.confdRequestTypeToRaw ReqPing
3862
3863 confdReqNodeRoleByname :: Int
3864 confdReqNodeRoleByname = Types.confdRequestTypeToRaw ReqNodeRoleByName
3865
3866 confdReqNodePipByInstanceIp :: Int
3867 confdReqNodePipByInstanceIp = Types.confdRequestTypeToRaw ReqNodePipByInstPip
3868
3869 confdReqClusterMaster :: Int
3870 confdReqClusterMaster = Types.confdRequestTypeToRaw ReqClusterMaster
3871
3872 confdReqNodePipList :: Int
3873 confdReqNodePipList = Types.confdRequestTypeToRaw ReqNodePipList
3874
3875 confdReqMcPipList :: Int
3876 confdReqMcPipList = Types.confdRequestTypeToRaw ReqMcPipList
3877
3878 confdReqInstancesIpsList :: Int
3879 confdReqInstancesIpsList = Types.confdRequestTypeToRaw ReqInstIpsList
3880
3881 confdReqNodeDrbd :: Int
3882 confdReqNodeDrbd = Types.confdRequestTypeToRaw ReqNodeDrbd
3883
3884 confdReqNodeInstances :: Int
3885 confdReqNodeInstances = Types.confdRequestTypeToRaw ReqNodeInstances
3886
3887 confdReqs :: FrozenSet Int
3888 confdReqs =
3889   ConstantUtils.mkSet .
3890   map Types.confdRequestTypeToRaw $
3891   [minBound..] \\ [ReqNodeInstances]
3892
3893 -- * Confd request type
3894
3895 confdReqfieldName :: Int
3896 confdReqfieldName = Types.confdReqFieldToRaw ReqFieldName
3897
3898 confdReqfieldIp :: Int
3899 confdReqfieldIp = Types.confdReqFieldToRaw ReqFieldIp
3900
3901 confdReqfieldMnodePip :: Int
3902 confdReqfieldMnodePip = Types.confdReqFieldToRaw ReqFieldMNodePip
3903
3904 -- * Confd repl status
3905
3906 confdReplStatusOk :: Int
3907 confdReplStatusOk = Types.confdReplyStatusToRaw ReplyStatusOk
3908
3909 confdReplStatusError :: Int
3910 confdReplStatusError = Types.confdReplyStatusToRaw ReplyStatusError
3911
3912 confdReplStatusNotimplemented :: Int
3913 confdReplStatusNotimplemented = Types.confdReplyStatusToRaw ReplyStatusNotImpl
3914
3915 confdReplStatuses :: FrozenSet Int
3916 confdReplStatuses =
3917   ConstantUtils.mkSet $ map Types.confdReplyStatusToRaw [minBound..]
3918
3919 -- * Confd node role
3920
3921 confdNodeRoleMaster :: Int
3922 confdNodeRoleMaster = Types.confdNodeRoleToRaw NodeRoleMaster
3923
3924 confdNodeRoleCandidate :: Int
3925 confdNodeRoleCandidate = Types.confdNodeRoleToRaw NodeRoleCandidate
3926
3927 confdNodeRoleOffline :: Int
3928 confdNodeRoleOffline = Types.confdNodeRoleToRaw NodeRoleOffline
3929
3930 confdNodeRoleDrained :: Int
3931 confdNodeRoleDrained = Types.confdNodeRoleToRaw NodeRoleDrained
3932
3933 confdNodeRoleRegular :: Int
3934 confdNodeRoleRegular = Types.confdNodeRoleToRaw NodeRoleRegular
3935
3936 -- * A few common errors for confd
3937
3938 confdErrorUnknownEntry :: Int
3939 confdErrorUnknownEntry = Types.confdErrorTypeToRaw ConfdErrorUnknownEntry
3940
3941 confdErrorInternal :: Int
3942 confdErrorInternal = Types.confdErrorTypeToRaw ConfdErrorInternal
3943
3944 confdErrorArgument :: Int
3945 confdErrorArgument = Types.confdErrorTypeToRaw ConfdErrorArgument
3946
3947 -- * Confd request query fields
3948
3949 confdReqqLink :: String
3950 confdReqqLink = ConstantUtils.confdReqqLink
3951
3952 confdReqqIp :: String
3953 confdReqqIp = ConstantUtils.confdReqqIp
3954
3955 confdReqqIplist :: String
3956 confdReqqIplist = ConstantUtils.confdReqqIplist
3957
3958 confdReqqFields :: String
3959 confdReqqFields = ConstantUtils.confdReqqFields
3960
3961 -- | Each request is "salted" by the current timestamp.
3962 --
3963 -- This constant decides how many seconds of skew to accept.
3964 --
3965 -- TODO: make this a default and allow the value to be more
3966 -- configurable
3967 confdMaxClockSkew :: Int
3968 confdMaxClockSkew = 2 * nodeMaxClockSkew
3969
3970 -- | When we haven't reloaded the config for more than this amount of
3971 -- seconds, we force a test to see if inotify is betraying us. Using a
3972 -- prime number to ensure we get less chance of 'same wakeup' with
3973 -- other processes.
3974 confdConfigReloadTimeout :: Int
3975 confdConfigReloadTimeout = 17
3976
3977 -- | If we receive more than one update in this amount of
3978 -- microseconds, we move to polling every RATELIMIT seconds, rather
3979 -- than relying on inotify, to be able to serve more requests.
3980 confdConfigReloadRatelimit :: Int
3981 confdConfigReloadRatelimit = 250000
3982
3983 -- | Magic number prepended to all confd queries.
3984 --
3985 -- This allows us to distinguish different types of confd protocols
3986 -- and handle them. For example by changing this we can move the whole
3987 -- payload to be compressed, or move away from json.
3988 confdMagicFourcc :: String
3989 confdMagicFourcc = "plj0"
3990
3991 -- | By default a confd request is sent to the minimum between this
3992 -- number and all MCs. 6 was chosen because even in the case of a
3993 -- disastrous 50% response rate, we should have enough answers to be
3994 -- able to compare more than one.
3995 confdDefaultReqCoverage :: Int
3996 confdDefaultReqCoverage = 6
3997
3998 -- | Timeout in seconds to expire pending query request in the confd
3999 -- client library. We don't actually expect any answer more than 10
4000 -- seconds after we sent a request.
4001 confdClientExpireTimeout :: Int
4002 confdClientExpireTimeout = 10
4003
4004 -- | Maximum UDP datagram size.
4005 --
4006 -- On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
4007 -- On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
4008 --   (assuming we can't use jumbo frames)
4009 -- We just set this to 60K, which should be enough
4010 maxUdpDataSize :: Int
4011 maxUdpDataSize = 61440
4012
4013 -- * User-id pool minimum/maximum acceptable user-ids
4014
4015 uidpoolUidMin :: Int
4016 uidpoolUidMin = 0
4017
4018 -- | Assuming 32 bit user-ids
4019 uidpoolUidMax :: Integer
4020 uidpoolUidMax = 2 ^ 32 - 1
4021
4022 -- | Name or path of the pgrep command
4023 pgrep :: String
4024 pgrep = "pgrep"
4025
4026 -- | Name of the node group that gets created at cluster init or
4027 -- upgrade
4028 initialNodeGroupName :: String
4029 initialNodeGroupName = "default"
4030
4031 -- * Possible values for NodeGroup.alloc_policy
4032
4033 allocPolicyLastResort :: String
4034 allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
4035
4036 allocPolicyPreferred :: String
4037 allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
4038
4039 allocPolicyUnallocable :: String
4040 allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
4041
4042 validAllocPolicies :: [String]
4043 validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
4044
4045 -- | Temporary external/shared storage parameters
4046 blockdevDriverManual :: String
4047 blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
4048
4049 -- | 'qemu-img' path, required for 'ovfconverter'
4050 qemuimgPath :: String
4051 qemuimgPath = AutoConf.qemuimgPath
4052
4053 -- | Whether htools was enabled at compilation time
4054 --
4055 -- FIXME: this should be moved next to the other enable constants,
4056 -- such as, 'enableConfd', and renamed to 'enableHtools'.
4057 htools :: Bool
4058 htools = AutoConf.htools
4059
4060 -- | The hail iallocator
4061 iallocHail :: String
4062 iallocHail = "hail"
4063
4064 -- * Fake opcodes for functions that have hooks attached to them via
4065 -- backend.RunLocalHooks
4066
4067 fakeOpMasterTurndown :: String
4068 fakeOpMasterTurndown = "OP_CLUSTER_IP_TURNDOWN"
4069
4070 fakeOpMasterTurnup :: String
4071 fakeOpMasterTurnup = "OP_CLUSTER_IP_TURNUP"
4072
4073 -- * SSH key types
4074
4075 sshkDsa :: String
4076 sshkDsa = "dsa"
4077
4078 sshkRsa :: String
4079 sshkRsa = "rsa"
4080
4081 sshkAll :: FrozenSet String
4082 sshkAll = ConstantUtils.mkSet [sshkRsa, sshkDsa]
4083
4084 -- * SSH authorized key types
4085
4086 sshakDss :: String
4087 sshakDss = "ssh-dss"
4088
4089 sshakRsa :: String
4090 sshakRsa = "ssh-rsa"
4091
4092 sshakAll :: FrozenSet String
4093 sshakAll = ConstantUtils.mkSet [sshakDss, sshakRsa]
4094
4095 -- * SSH setup
4096
4097 sshsClusterName :: String
4098 sshsClusterName = "cluster_name"
4099
4100 sshsSshHostKey :: String
4101 sshsSshHostKey = "ssh_host_key"
4102
4103 sshsSshRootKey :: String
4104 sshsSshRootKey = "ssh_root_key"
4105
4106 sshsNodeDaemonCertificate :: String
4107 sshsNodeDaemonCertificate = "node_daemon_certificate"
4108
4109 -- * Key files for SSH daemon
4110
4111 sshHostDsaPriv :: String
4112 sshHostDsaPriv = sshConfigDir ++ "/ssh_host_dsa_key"
4113
4114 sshHostDsaPub :: String
4115 sshHostDsaPub = sshHostDsaPriv ++ ".pub"
4116
4117 sshHostRsaPriv :: String
4118 sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key"
4119
4120 sshHostRsaPub :: String
4121 sshHostRsaPub = sshHostRsaPriv ++ ".pub"
4122
4123 sshDaemonKeyfiles :: Map String (String, String)
4124 sshDaemonKeyfiles =
4125   Map.fromList [ (sshkRsa, (sshHostRsaPriv, sshHostRsaPub))
4126                , (sshkDsa, (sshHostDsaPriv, sshHostDsaPub))
4127                ]
4128
4129 -- * Node daemon setup
4130
4131 ndsClusterName :: String
4132 ndsClusterName = "cluster_name"
4133
4134 ndsNodeDaemonCertificate :: String
4135 ndsNodeDaemonCertificate = "node_daemon_certificate"
4136
4137 ndsSsconf :: String
4138 ndsSsconf = "ssconf"
4139
4140 ndsStartNodeDaemon :: String
4141 ndsStartNodeDaemon = "start_node_daemon"
4142
4143 -- * The source reasons for the execution of an OpCode
4144
4145 opcodeReasonSrcClient :: String
4146 opcodeReasonSrcClient = "gnt:client"
4147
4148 opcodeReasonSrcNoded :: String
4149 opcodeReasonSrcNoded = "gnt:daemon:noded"
4150
4151 opcodeReasonSrcOpcode :: String
4152 opcodeReasonSrcOpcode = "gnt:opcode"
4153
4154 opcodeReasonSrcRlib2 :: String
4155 opcodeReasonSrcRlib2 = "gnt:library:rlib2"
4156
4157 opcodeReasonSrcUser :: String
4158 opcodeReasonSrcUser = "gnt:user"
4159
4160 opcodeReasonSources :: FrozenSet String
4161 opcodeReasonSources =
4162   ConstantUtils.mkSet [opcodeReasonSrcClient,
4163                        opcodeReasonSrcNoded,
4164                        opcodeReasonSrcOpcode,
4165                        opcodeReasonSrcRlib2,
4166                        opcodeReasonSrcUser]
4167
4168 -- | Path generating random UUID
4169 randomUuidFile :: String
4170 randomUuidFile = ConstantUtils.randomUuidFile
4171
4172 -- * Auto-repair tag prefixes
4173
4174 autoRepairTagPrefix :: String
4175 autoRepairTagPrefix = "ganeti:watcher:autorepair:"
4176
4177 autoRepairTagEnabled :: String
4178 autoRepairTagEnabled = autoRepairTagPrefix
4179
4180 autoRepairTagPending :: String
4181 autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
4182
4183 autoRepairTagResult :: String
4184 autoRepairTagResult = autoRepairTagPrefix ++ "result:"
4185
4186 autoRepairTagSuspended :: String
4187 autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
4188
4189 -- * Auto-repair levels
4190
4191 autoRepairFailover :: String
4192 autoRepairFailover = Types.autoRepairTypeToRaw ArFailover
4193
4194 autoRepairFixStorage :: String
4195 autoRepairFixStorage = Types.autoRepairTypeToRaw ArFixStorage
4196
4197 autoRepairMigrate :: String
4198 autoRepairMigrate = Types.autoRepairTypeToRaw ArMigrate
4199
4200 autoRepairReinstall :: String
4201 autoRepairReinstall = Types.autoRepairTypeToRaw ArReinstall
4202
4203 autoRepairAllTypes :: FrozenSet String
4204 autoRepairAllTypes =
4205   ConstantUtils.mkSet [autoRepairFailover,
4206                        autoRepairFixStorage,
4207                        autoRepairMigrate,
4208                        autoRepairReinstall]
4209
4210 -- * Auto-repair results
4211
4212 autoRepairEnoperm :: String
4213 autoRepairEnoperm = Types.autoRepairResultToRaw ArEnoperm
4214
4215 autoRepairFailure :: String
4216 autoRepairFailure = Types.autoRepairResultToRaw ArFailure
4217
4218 autoRepairSuccess :: String
4219 autoRepairSuccess = Types.autoRepairResultToRaw ArSuccess
4220
4221 autoRepairAllResults :: FrozenSet String
4222 autoRepairAllResults =
4223   ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
4224
4225 -- | The version identifier for builtin data collectors
4226 builtinDataCollectorVersion :: String
4227 builtinDataCollectorVersion = "B"
4228
4229 -- | The reason trail opcode parameter name
4230 opcodeReason :: String
4231 opcodeReason = "reason"
4232
4233 diskstatsFile :: String
4234 diskstatsFile = "/proc/diskstats"
4235
4236 -- *  CPU load collector
4237
4238 statFile :: String
4239 statFile = "/proc/stat"
4240
4241 cpuavgloadBufferSize :: Int
4242 cpuavgloadBufferSize = 150
4243
4244 cpuavgloadWindowSize :: Int
4245 cpuavgloadWindowSize = 600
4246
4247 -- * Monitoring daemon
4248
4249 -- | Mond's variable for periodical data collection
4250 mondTimeInterval :: Int
4251 mondTimeInterval = 5
4252
4253 -- | Mond's latest API version
4254 mondLatestApiVersion :: Int
4255 mondLatestApiVersion = 1
4256
4257 -- * Disk access modes
4258
4259 diskUserspace :: String
4260 diskUserspace = Types.diskAccessModeToRaw DiskUserspace
4261
4262 diskKernelspace :: String
4263 diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
4264
4265 diskValidAccessModes :: FrozenSet String
4266 diskValidAccessModes =
4267   ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
4268
4269 -- | Timeout for queue draining in upgrades
4270 upgradeQueueDrainTimeout :: Int
4271 upgradeQueueDrainTimeout = 36 * 60 * 60 -- 1.5 days
4272
4273 -- | Intervall at which the queue is polled during upgrades
4274 upgradeQueuePollInterval :: Int
4275 upgradeQueuePollInterval  = 10
4276
4277 -- * Hotplug Actions
4278
4279 hotplugActionAdd :: String
4280 hotplugActionAdd = Types.hotplugActionToRaw HAAdd
4281
4282 hotplugActionRemove :: String
4283 hotplugActionRemove = Types.hotplugActionToRaw HARemove
4284
4285 hotplugActionModify :: String
4286 hotplugActionModify = Types.hotplugActionToRaw HAMod
4287
4288 hotplugAllActions :: FrozenSet String
4289 hotplugAllActions =
4290   ConstantUtils.mkSet $ map Types.hotplugActionToRaw [minBound..]
4291
4292 -- * Hotplug Device Targets
4293
4294 hotplugTargetNic :: String
4295 hotplugTargetNic = Types.hotplugTargetToRaw HTNic
4296
4297 hotplugTargetDisk :: String
4298 hotplugTargetDisk = Types.hotplugTargetToRaw HTDisk
4299
4300 hotplugAllTargets :: FrozenSet String
4301 hotplugAllTargets =
4302   ConstantUtils.mkSet $ map Types.hotplugTargetToRaw [minBound..]
4303
4304 -- | Timeout for disk removal (seconds)
4305 diskRemoveRetryTimeout :: Int
4306 diskRemoveRetryTimeout = 30
4307
4308 -- | Interval between disk removal retries (seconds)
4309 diskRemoveRetryInterval :: Int
4310 diskRemoveRetryInterval  = 3
4311
4312 -- * UUID regex
4313
4314 uuidRegex :: String
4315 uuidRegex = "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
4316
4317 -- * Luxi constants
4318
4319 luxiKeyMethod :: String
4320 luxiKeyMethod = "method"
4321
4322 luxiKeyArgs :: String
4323 luxiKeyArgs = "args"
4324
4325 luxiKeySuccess :: String
4326 luxiKeySuccess = "success"
4327
4328 luxiKeyResult :: String
4329 luxiKeyResult = "result"
4330
4331 luxiKeyVersion :: String
4332 luxiKeyVersion = "version"
4333
4334 luxiReqSubmitJob :: String
4335 luxiReqSubmitJob = "SubmitJob"
4336
4337 luxiReqSubmitJobToDrainedQueue :: String
4338 luxiReqSubmitJobToDrainedQueue = "SubmitJobToDrainedQueue"
4339
4340 luxiReqSubmitManyJobs :: String
4341 luxiReqSubmitManyJobs = "SubmitManyJobs"
4342
4343 luxiReqWaitForJobChange :: String
4344 luxiReqWaitForJobChange = "WaitForJobChange"
4345
4346 luxiReqCancelJob :: String
4347 luxiReqCancelJob = "CancelJob"
4348
4349 luxiReqArchiveJob :: String
4350 luxiReqArchiveJob = "ArchiveJob"
4351
4352 luxiReqChangeJobPriority :: String
4353 luxiReqChangeJobPriority = "ChangeJobPriority"
4354
4355 luxiReqAutoArchiveJobs :: String
4356 luxiReqAutoArchiveJobs = "AutoArchiveJobs"
4357
4358 luxiReqQuery :: String
4359 luxiReqQuery = "Query"
4360
4361 luxiReqQueryFields :: String
4362 luxiReqQueryFields = "QueryFields"
4363
4364 luxiReqQueryJobs :: String
4365 luxiReqQueryJobs = "QueryJobs"
4366
4367 luxiReqQueryInstances :: String
4368 luxiReqQueryInstances = "QueryInstances"
4369
4370 luxiReqQueryNodes :: String
4371 luxiReqQueryNodes = "QueryNodes"
4372
4373 luxiReqQueryGroups :: String
4374 luxiReqQueryGroups = "QueryGroups"
4375
4376 luxiReqQueryNetworks :: String
4377 luxiReqQueryNetworks = "QueryNetworks"
4378
4379 luxiReqQueryExports :: String
4380 luxiReqQueryExports = "QueryExports"
4381
4382 luxiReqQueryConfigValues :: String
4383 luxiReqQueryConfigValues = "QueryConfigValues"
4384
4385 luxiReqQueryClusterInfo :: String
4386 luxiReqQueryClusterInfo = "QueryClusterInfo"
4387
4388 luxiReqQueryTags :: String
4389 luxiReqQueryTags = "QueryTags"
4390
4391 luxiReqSetDrainFlag :: String
4392 luxiReqSetDrainFlag = "SetDrainFlag"
4393
4394 luxiReqSetWatcherPause :: String
4395 luxiReqSetWatcherPause = "SetWatcherPause"
4396
4397 luxiReqAll :: FrozenSet String
4398 luxiReqAll =
4399   ConstantUtils.mkSet
4400   [ luxiReqArchiveJob
4401   , luxiReqAutoArchiveJobs
4402   , luxiReqCancelJob
4403   , luxiReqChangeJobPriority
4404   , luxiReqQuery
4405   , luxiReqQueryClusterInfo
4406   , luxiReqQueryConfigValues
4407   , luxiReqQueryExports
4408   , luxiReqQueryFields
4409   , luxiReqQueryGroups
4410   , luxiReqQueryInstances
4411   , luxiReqQueryJobs
4412   , luxiReqQueryNodes
4413   , luxiReqQueryNetworks
4414   , luxiReqQueryTags
4415   , luxiReqSetDrainFlag
4416   , luxiReqSetWatcherPause
4417   , luxiReqSubmitJob
4418   , luxiReqSubmitJobToDrainedQueue
4419   , luxiReqSubmitManyJobs
4420   , luxiReqWaitForJobChange
4421   ]
4422
4423 luxiDefCtmo :: Int
4424 luxiDefCtmo = 10
4425
4426 luxiDefRwto :: Int
4427 luxiDefRwto = 60
4428
4429 -- | 'WaitForJobChange' timeout
4430 luxiWfjcTimeout :: Int
4431 luxiWfjcTimeout = (luxiDefRwto - 1) `div` 2
4432
4433 -- * Query language constants
4434
4435 -- ** Logic operators with one or more operands, each of which is a
4436 -- filter on its own
4437
4438 qlangOpAnd :: String
4439 qlangOpAnd = "&"
4440
4441 qlangOpOr :: String
4442 qlangOpOr = "|"
4443
4444 -- ** Unary operators with exactly one operand
4445
4446 qlangOpNot :: String
4447 qlangOpNot = "!"
4448
4449 qlangOpTrue :: String
4450 qlangOpTrue = "?"
4451
4452 -- ** Binary operators with exactly two operands, the field name and
4453 -- an operator-specific value
4454
4455 qlangOpContains :: String
4456 qlangOpContains = "=[]"
4457
4458 qlangOpEqual :: String
4459 qlangOpEqual = "="
4460
4461 qlangOpGe :: String
4462 qlangOpGe = ">="
4463
4464 qlangOpGt :: String
4465 qlangOpGt = ">"
4466
4467 qlangOpLe :: String
4468 qlangOpLe = "<="
4469
4470 qlangOpLt :: String
4471 qlangOpLt = "<"
4472
4473 qlangOpNotEqual :: String
4474 qlangOpNotEqual = "!="
4475
4476 qlangOpRegexp :: String
4477 qlangOpRegexp = "=~"
4478
4479 -- | Characters used for detecting user-written filters (see
4480 -- L{_CheckFilter})
4481
4482 qlangFilterDetectionChars :: FrozenSet String
4483 qlangFilterDetectionChars =
4484   ConstantUtils.mkSet ["!", " ", "\"", "\'",
4485                        ")", "(", "\x0b", "\n",
4486                        "\r", "\x0c", "/", "<",
4487                        "\t", ">", "=", "\\", "~"]
4488
4489 -- | Characters used to detect globbing filters
4490 qlangGlobDetectionChars :: FrozenSet String
4491 qlangGlobDetectionChars = ConstantUtils.mkSet ["*", "?"]
4492
4493 -- * Error related constants
4494 --
4495 -- 'OpPrereqError' failure types
4496
4497 -- | Environment error (e.g. node disk error)
4498 errorsEcodeEnviron :: String
4499 errorsEcodeEnviron = "environment_error"
4500
4501 -- | Entity already exists
4502 errorsEcodeExists :: String
4503 errorsEcodeExists = "already_exists"
4504
4505 -- | Internal cluster error
4506 errorsEcodeFault :: String
4507 errorsEcodeFault = "internal_error"
4508
4509 -- | Wrong arguments (at syntax level)
4510 errorsEcodeInval :: String
4511 errorsEcodeInval = "wrong_input"
4512
4513 -- | Entity not found
4514 errorsEcodeNoent :: String
4515 errorsEcodeNoent = "unknown_entity"
4516
4517 -- | Not enough resources (iallocator failure, disk space, memory, etc)
4518 errorsEcodeNores :: String
4519 errorsEcodeNores = "insufficient_resources"
4520
4521 -- | Resource not unique (e.g. MAC or IP duplication)
4522 errorsEcodeNotunique :: String
4523 errorsEcodeNotunique = "resource_not_unique"
4524
4525 -- | Resolver errors
4526 errorsEcodeResolver :: String
4527 errorsEcodeResolver = "resolver_error"
4528
4529 -- | Wrong entity state
4530 errorsEcodeState :: String
4531 errorsEcodeState = "wrong_state"
4532
4533 -- | Temporarily out of resources; operation can be tried again
4534 errorsEcodeTempNores :: String
4535 errorsEcodeTempNores = "temp_insufficient_resources"
4536
4537 errorsEcodeAll :: FrozenSet String
4538 errorsEcodeAll =
4539   ConstantUtils.mkSet [ errorsEcodeNores
4540                       , errorsEcodeExists
4541                       , errorsEcodeState
4542                       , errorsEcodeNotunique
4543                       , errorsEcodeTempNores
4544                       , errorsEcodeNoent
4545                       , errorsEcodeFault
4546                       , errorsEcodeResolver
4547                       , errorsEcodeInval
4548                       , errorsEcodeEnviron
4549                       ]
4550
4551 -- * Jstore related constants
4552
4553 jstoreJobsPerArchiveDirectory :: Int
4554 jstoreJobsPerArchiveDirectory = 10000