Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / HsConstants.hs @ 6dc364f9

History | View | Annotate | Download (33.9 kB)

1
{-| HsConstants contains the Haskell constants
2

    
3
This is a transitional module complementary to 'Ganeti.Constants'.  It
4
is intended to contain the Haskell constants that are meant to be
5
generated in Python.
6

    
7
Do not write any definitions in this file other than constants.  Do
8
not even write helper functions.  The definitions in this module are
9
automatically stripped to build the Makefile.am target
10
'ListConstants.hs'.  If there are helper functions in this module,
11
they will also be dragged and it will cause compilation to fail.
12
Therefore, all helper functions should go to a separate module and
13
imported.
14

    
15
-}
16

    
17
{-
18

    
19
Copyright (C) 2013 Google Inc.
20

    
21
This program is free software; you can redistribute it and/or modify
22
it under the terms of the GNU General Public License as published by
23
the Free Software Foundation; either version 2 of the License, or
24
(at your option) any later version.
25

    
26
This program is distributed in the hope that it will be useful, but
27
WITHOUT ANY WARRANTY; without even the implied warranty of
28
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
29
General Public License for more details.
30

    
31
You should have received a copy of the GNU General Public License
32
along with this program; if not, write to the Free Software
33
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
34
02110-1301, USA.
35

    
36
-}
37
module Ganeti.HsConstants where
38

    
39
import Data.Map (Map)
40
import qualified Data.Map as Map (fromList)
41

    
42
import AutoConf
43
import Ganeti.ConstantUtils (FrozenSet, Protocol(..), buildVersion)
44
import qualified Ganeti.ConstantUtils as ConstantUtils
45
import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..),
46
                       ExtraLogReason(..))
47
import Ganeti.Logging (SyslogUsage(..))
48
import qualified Ganeti.Logging as Logging (syslogUsageToRaw)
49
import qualified Ganeti.Runtime as Runtime
50
import Ganeti.Types
51
import qualified Ganeti.Types as Types
52

    
53
-- * 'autoconf' constants for Python only ('autotools/build-bash-completion')
54

    
55
htoolsProgs :: [String]
56
htoolsProgs = AutoConf.htoolsProgs
57

    
58
-- * 'autoconf' constants for Python only ('lib/constants.py')
59

    
60
drbdBarriers :: String
61
drbdBarriers = AutoConf.drbdBarriers
62

    
63
drbdNoMetaFlush :: Bool
64
drbdNoMetaFlush = AutoConf.drbdNoMetaFlush
65

    
66
lvmStripecount :: Int
67
lvmStripecount = AutoConf.lvmStripecount
68

    
69
-- * 'autoconf' constants for Python only ('lib/pathutils.py')
70

    
71
-- ** Build-time constants
72

    
73
exportDir :: String
74
exportDir = AutoConf.exportDir
75

    
76
osSearchPath :: [String]
77
osSearchPath = AutoConf.osSearchPath
78

    
79
esSearchPath :: [String]
80
esSearchPath = AutoConf.esSearchPath
81

    
82
sshConfigDir :: String
83
sshConfigDir = AutoConf.sshConfigDir
84

    
85
xenConfigDir :: String
86
xenConfigDir = AutoConf.xenConfigDir
87

    
88
sysconfdir :: String
89
sysconfdir = AutoConf.sysconfdir
90

    
91
toolsdir :: String
92
toolsdir = AutoConf.toolsdir
93

    
94
localstatedir :: String
95
localstatedir = AutoConf.localstatedir
96

    
97
-- ** Paths which don't change for a virtual cluster
98

    
99
pkglibdir :: String
100
pkglibdir = AutoConf.pkglibdir
101

    
102
-- * 'autoconf' constants for Python only ('lib/build/sphinx_ext.py')
103

    
104
manPages :: Map String Int
105
manPages = Map.fromList AutoConf.manPages
106

    
107
-- * 'autoconf' constants for QA cluster only ('qa/qa_cluster.py')
108

    
109
versionedsharedir :: String
110
versionedsharedir = AutoConf.versionedsharedir
111

    
112
-- * 'autoconf' constants for Python only ('tests/py/docs_unittest.py')
113

    
114
gntScripts :: [String]
115
gntScripts = AutoConf.gntScripts
116

    
117
-- * Various versions
118

    
119
releaseVersion :: String
120
releaseVersion = AutoConf.packageVersion
121

    
122
configMajor :: Int
123
configMajor = AutoConf.versionMajor
124

    
125
configMinor :: Int
126
configMinor = AutoConf.versionMinor
127

    
128
-- | The configuration is supposed to remain stable across
129
-- revisions. Therefore, the revision number is cleared to '0'.
130
configRevision :: Int
131
configRevision = 0
132

    
133
configVersion :: Int
134
configVersion = buildVersion configMajor configMinor configRevision
135

    
136
-- | Similarly to the configuration (see 'configRevision'), the
137
-- protocols are supposed to remain stable across revisions.
138
protocolVersion :: Int
139
protocolVersion = buildVersion configMajor configMinor configRevision
140

    
141
-- * User separation
142
daemonsGroup :: String
143
daemonsGroup = Runtime.daemonGroup (ExtraGroup DaemonsGroup)
144

    
145
adminGroup :: String
146
adminGroup = Runtime.daemonGroup (ExtraGroup AdminGroup)
147

    
148
masterdUser :: String
149
masterdUser = Runtime.daemonUser GanetiMasterd
150

    
151
masterdGroup :: String
152
masterdGroup = Runtime.daemonGroup (DaemonGroup GanetiMasterd)
153

    
154
rapiUser :: String
155
rapiUser = Runtime.daemonUser GanetiRapi
156

    
157
rapiGroup :: String
158
rapiGroup = Runtime.daemonGroup (DaemonGroup GanetiRapi)
159

    
160
confdUser :: String
161
confdUser = Runtime.daemonUser GanetiConfd
162

    
163
confdGroup :: String
164
confdGroup = Runtime.daemonGroup (DaemonGroup GanetiConfd)
165

    
166
luxidUser :: String
167
luxidUser = Runtime.daemonUser GanetiLuxid
168

    
169
luxidGroup :: String
170
luxidGroup = Runtime.daemonGroup (DaemonGroup GanetiLuxid)
171

    
172
nodedUser :: String
173
nodedUser = Runtime.daemonUser GanetiNoded
174

    
175
nodedGroup :: String
176
nodedGroup = Runtime.daemonGroup (DaemonGroup GanetiNoded)
177

    
178
mondUser :: String
179
mondUser = Runtime.daemonUser GanetiMond
180

    
181
mondGroup :: String
182
mondGroup = Runtime.daemonGroup (DaemonGroup GanetiMond)
183

    
184
sshLoginUser :: String
185
sshLoginUser = AutoConf.sshLoginUser
186

    
187
sshConsoleUser :: String
188
sshConsoleUser = AutoConf.sshConsoleUser
189

    
190
-- * 'autoconf' enable/disable
191

    
192
enableConfd :: Bool
193
enableConfd = AutoConf.enableConfd
194

    
195
enableMond :: Bool
196
enableMond = AutoConf.enableMond
197

    
198
enableRestrictedCommands :: Bool
199
enableRestrictedCommands = AutoConf.enableRestrictedCommands
200

    
201
enableSplitQuery :: Bool
202
enableSplitQuery = AutoConf.enableSplitQuery
203

    
204
-- * SSH constants
205

    
206
ssh :: String
207
ssh = "ssh"
208

    
209
scp :: String
210
scp = "scp"
211

    
212
-- * Daemons
213

    
214
confd :: String
215
confd = Runtime.daemonName GanetiConfd
216

    
217
masterd :: String
218
masterd = Runtime.daemonName GanetiMasterd
219

    
220
mond :: String
221
mond = Runtime.daemonName GanetiMond
222

    
223
noded :: String
224
noded = Runtime.daemonName GanetiNoded
225

    
226
luxid :: String
227
luxid = Runtime.daemonName GanetiLuxid
228

    
229
rapi :: String
230
rapi = Runtime.daemonName GanetiRapi
231

    
232
daemons :: FrozenSet String
233
daemons =
234
  ConstantUtils.mkSet [confd,
235
                       luxid,
236
                       masterd,
237
                       mond,
238
                       noded,
239
                       rapi]
240

    
241
defaultConfdPort :: Int
242
defaultConfdPort = 1814
243

    
244
defaultMondPort :: Int
245
defaultMondPort = 1815
246

    
247
defaultNodedPort :: Int
248
defaultNodedPort = 1811
249

    
250
defaultRapiPort :: Int
251
defaultRapiPort = 5080
252

    
253
daemonsPorts :: Map String (Protocol, Int)
254
daemonsPorts =
255
  Map.fromList [(confd, (Udp, defaultConfdPort)),
256
                (mond, (Tcp, defaultMondPort)),
257
                (noded, (Tcp, defaultNodedPort)),
258
                (rapi, (Tcp, defaultRapiPort)),
259
                (ssh, (Tcp, 22))]
260

    
261
daemonsLogbase :: Map String String
262
daemonsLogbase =
263
  Map.fromList
264
  [ (Runtime.daemonName d, Runtime.daemonLogBase d) | d <- [minBound..] ]
265

    
266
extraLogreasonAccess :: String
267
extraLogreasonAccess = Runtime.daemonsExtraLogbase GanetiMond AccessLog
268

    
269
extraLogreasonError :: String
270
extraLogreasonError = Runtime.daemonsExtraLogbase GanetiMond ErrorLog
271

    
272
devConsole :: String
273
devConsole = ConstantUtils.devConsole
274

    
275
-- * Syslog
276

    
277
syslogUsage :: String
278
syslogUsage = AutoConf.syslogUsage
279

    
280
syslogNo :: String
281
syslogNo = Logging.syslogUsageToRaw SyslogNo
282

    
283
syslogYes :: String
284
syslogYes = Logging.syslogUsageToRaw SyslogYes
285

    
286
syslogOnly :: String
287
syslogOnly = Logging.syslogUsageToRaw SyslogOnly
288

    
289
syslogSocket :: String
290
syslogSocket = "/dev/log"
291

    
292
-- * Xen
293

    
294
xenBootloader :: String
295
xenBootloader = AutoConf.xenBootloader
296

    
297
xenCmdXl :: String
298
xenCmdXl = "xl"
299

    
300
xenCmdXm :: String
301
xenCmdXm = "xm"
302

    
303
xenInitrd :: String
304
xenInitrd = AutoConf.xenInitrd
305

    
306
xenKernel :: String
307
xenKernel = AutoConf.xenKernel
308

    
309
-- FIXME: perhaps rename to 'validXenCommands' for consistency with
310
-- other constants
311
knownXenCommands :: FrozenSet String
312
knownXenCommands = ConstantUtils.mkSet [xenCmdXl, xenCmdXm]
313

    
314
-- * KVM and socat
315

    
316
kvmPath :: String
317
kvmPath = AutoConf.kvmPath
318

    
319
kvmKernel :: String
320
kvmKernel = AutoConf.kvmKernel
321

    
322
socatEscapeCode :: String
323
socatEscapeCode = "0x1d"
324

    
325
socatPath :: String
326
socatPath = AutoConf.socatPath
327

    
328
socatUseCompress :: Bool
329
socatUseCompress = AutoConf.socatUseCompress
330

    
331
socatUseEscape :: Bool
332
socatUseEscape = AutoConf.socatUseEscape
333

    
334
-- * Storage types
335

    
336
stBlock :: String
337
stBlock = Types.storageTypeToRaw StorageBlock
338

    
339
stDiskless :: String
340
stDiskless = Types.storageTypeToRaw StorageDiskless
341

    
342
stExt :: String
343
stExt = Types.storageTypeToRaw StorageExt
344

    
345
stFile :: String
346
stFile = Types.storageTypeToRaw StorageFile
347

    
348
stLvmPv :: String
349
stLvmPv = Types.storageTypeToRaw StorageLvmPv
350

    
351
stLvmVg :: String
352
stLvmVg = Types.storageTypeToRaw StorageLvmVg
353

    
354
stRados :: String
355
stRados = Types.storageTypeToRaw StorageRados
356

    
357
storageTypes :: FrozenSet String
358
storageTypes = ConstantUtils.mkSet $ map Types.storageTypeToRaw [minBound..]
359

    
360
-- * Storage fields
361
-- ** First two are valid in LU context only, not passed to backend
362

    
363
sfNode :: String
364
sfNode = "node"
365

    
366
sfType :: String
367
sfType = "type"
368

    
369
-- ** and the rest are valid in backend
370

    
371
sfAllocatable :: String
372
sfAllocatable = Types.storageFieldToRaw SFAllocatable
373

    
374
sfFree :: String
375
sfFree = Types.storageFieldToRaw SFFree
376

    
377
sfName :: String
378
sfName = Types.storageFieldToRaw SFName
379

    
380
sfSize :: String
381
sfSize = Types.storageFieldToRaw SFSize
382

    
383
sfUsed :: String
384
sfUsed = Types.storageFieldToRaw SFUsed
385

    
386
-- * Disk template types
387

    
388
dtDiskless :: String
389
dtDiskless = Types.diskTemplateToRaw DTDiskless
390

    
391
dtFile :: String
392
dtFile = Types.diskTemplateToRaw DTFile
393

    
394
dtSharedFile :: String
395
dtSharedFile = Types.diskTemplateToRaw DTSharedFile
396

    
397
dtPlain :: String
398
dtPlain = Types.diskTemplateToRaw DTPlain
399

    
400
dtBlock :: String
401
dtBlock = Types.diskTemplateToRaw DTBlock
402

    
403
dtDrbd8 :: String
404
dtDrbd8 = Types.diskTemplateToRaw DTDrbd8
405

    
406
dtRbd :: String
407
dtRbd = Types.diskTemplateToRaw DTRbd
408

    
409
dtExt :: String
410
dtExt = Types.diskTemplateToRaw DTExt
411

    
412
-- | This is used to order determine the default disk template when
413
-- the list of enabled disk templates is inferred from the current
414
-- state of the cluster.  This only happens on an upgrade from a
415
-- version of Ganeti that did not support the 'enabled_disk_templates'
416
-- so far.
417
diskTemplatePreference :: [String]
418
diskTemplatePreference =
419
  map Types.diskTemplateToRaw
420
  [DTBlock, DTDiskless, DTDrbd8, DTExt, DTFile, DTPlain, DTRbd, DTSharedFile]
421

    
422
diskTemplates :: FrozenSet String
423
diskTemplates = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [minBound..]
424

    
425
-- | Disk templates that are enabled by default
426
defaultEnabledDiskTemplates :: [String]
427
defaultEnabledDiskTemplates = map Types.diskTemplateToRaw [DTDrbd8, DTPlain]
428

    
429
-- * File backend driver
430

    
431
fdBlktap :: String
432
fdBlktap = Types.fileDriverToRaw FileBlktap
433

    
434
fdLoop :: String
435
fdLoop = Types.fileDriverToRaw FileLoop
436

    
437
-- * Disk access mode
438

    
439
diskRdonly :: String
440
diskRdonly = Types.diskModeToRaw DiskRdOnly
441

    
442
diskRdwr :: String
443
diskRdwr = Types.diskModeToRaw DiskRdWr
444

    
445
diskAccessSet :: FrozenSet String
446
diskAccessSet = ConstantUtils.mkSet $ map Types.diskModeToRaw [minBound..]
447

    
448
-- * Instance export mode
449

    
450
exportModeLocal :: String
451
exportModeLocal = Types.exportModeToRaw ExportModeLocal
452

    
453
exportModeRemote :: String
454
exportModeRemote = Types.exportModeToRaw ExportModeRemote
455

    
456
exportModes :: FrozenSet String
457
exportModes = ConstantUtils.mkSet $ map Types.exportModeToRaw [minBound..]
458

    
459
-- * Instance creation modes
460

    
461
instanceCreate :: String
462
instanceCreate = Types.instCreateModeToRaw InstCreate
463

    
464
instanceImport :: String
465
instanceImport = Types.instCreateModeToRaw InstImport
466

    
467
instanceRemoteImport :: String
468
instanceRemoteImport = Types.instCreateModeToRaw InstRemoteImport
469

    
470
instanceCreateModes :: FrozenSet String
471
instanceCreateModes =
472
  ConstantUtils.mkSet $ map Types.instCreateModeToRaw [minBound..]
473

    
474
-- * Dynamic device modification
475

    
476
ddmAdd :: String
477
ddmAdd = Types.ddmFullToRaw DdmFullAdd
478

    
479
ddmModify :: String
480
ddmModify = Types.ddmFullToRaw DdmFullModify
481

    
482
ddmRemove :: String
483
ddmRemove = Types.ddmFullToRaw DdmFullRemove
484

    
485
ddmsValues :: FrozenSet String
486
ddmsValues = ConstantUtils.mkSet [ddmAdd, ddmRemove]
487

    
488
ddmsValuesWithModify :: FrozenSet String
489
ddmsValuesWithModify = ConstantUtils.mkSet $ map Types.ddmFullToRaw [minBound..]
490

    
491
-- * Common exit codes
492

    
493
exitSuccess :: Int
494
exitSuccess = 0
495

    
496
exitFailure :: Int
497
exitFailure = ConstantUtils.exitFailure
498

    
499
exitNotcluster :: Int
500
exitNotcluster = 5
501

    
502
exitNotmaster :: Int
503
exitNotmaster = 11
504

    
505
exitNodesetupError :: Int
506
exitNodesetupError = 12
507

    
508
-- | Need user confirmation
509
exitConfirmation :: Int
510
exitConfirmation = 13
511

    
512
-- | Exit code for query operations with unknown fields
513
exitUnknownField :: Int
514
exitUnknownField = 14
515

    
516
-- * Tags
517

    
518
tagCluster :: String
519
tagCluster = Types.tagKindToRaw TagKindCluster
520

    
521
tagInstance :: String
522
tagInstance = Types.tagKindToRaw TagKindInstance
523

    
524
tagNetwork :: String
525
tagNetwork = Types.tagKindToRaw TagKindNetwork
526

    
527
tagNode :: String
528
tagNode = Types.tagKindToRaw TagKindNode
529

    
530
tagNodegroup :: String
531
tagNodegroup = Types.tagKindToRaw TagKindGroup
532

    
533
validTagTypes :: FrozenSet String
534
validTagTypes = ConstantUtils.mkSet $ map Types.tagKindToRaw [minBound..]
535

    
536
maxTagLen :: Int
537
maxTagLen = 128
538

    
539
maxTagsPerObj :: Int
540
maxTagsPerObj = 4096
541

    
542
-- | Node clock skew in seconds
543
nodeMaxClockSkew :: Int
544
nodeMaxClockSkew = 150
545

    
546
-- | Disk index separator
547
diskSeparator :: String
548
diskSeparator = AutoConf.diskSeparator
549

    
550
ipCommandPath :: String
551
ipCommandPath = AutoConf.ipPath
552

    
553
-- * Reboot types
554

    
555
instanceRebootSoft :: String
556
instanceRebootSoft = Types.rebootTypeToRaw RebootSoft
557

    
558
instanceRebootHard :: String
559
instanceRebootHard = Types.rebootTypeToRaw RebootHard
560

    
561
instanceRebootFull :: String
562
instanceRebootFull = Types.rebootTypeToRaw RebootFull
563

    
564
rebootTypes :: FrozenSet String
565
rebootTypes = ConstantUtils.mkSet $ map Types.rebootTypeToRaw [minBound..]
566

    
567
-- * VTypes
568

    
569
vtypeBool :: String
570
vtypeBool = Types.vTypeToRaw VTypeBool
571

    
572
vtypeInt :: String
573
vtypeInt = Types.vTypeToRaw VTypeInt
574

    
575
vtypeMaybeString :: String
576
vtypeMaybeString = Types.vTypeToRaw VTypeMaybeString
577

    
578
-- | Size in MiBs
579
vtypeSize :: String
580
vtypeSize = Types.vTypeToRaw VTypeSize
581

    
582
vtypeString :: String
583
vtypeString = Types.vTypeToRaw VTypeString
584

    
585
enforceableTypes :: FrozenSet String
586
enforceableTypes = ConstantUtils.mkSet $ map Types.vTypeToRaw [minBound..]
587

    
588
-- * OOB supported commands
589

    
590
oobPowerOn :: String
591
oobPowerOn = Types.oobCommandToRaw OobPowerOn
592

    
593
oobPowerOff :: String
594
oobPowerOff = Types.oobCommandToRaw OobPowerOff
595

    
596
oobPowerCycle :: String
597
oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
598

    
599
oobPowerStatus :: String
600
oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
601

    
602
oobHealth :: String
603
oobHealth = Types.oobCommandToRaw OobHealth
604

    
605
oobCommands :: FrozenSet String
606
oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
607

    
608
oobPowerStatusPowered :: String
609
oobPowerStatusPowered = "powered"
610

    
611
-- | 60 seconds
612
oobTimeout :: Int
613
oobTimeout = 60
614

    
615
-- | 2 seconds
616
oobPowerDelay :: Double
617
oobPowerDelay = 2.0
618

    
619
oobStatusCritical :: String
620
oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
621

    
622
oobStatusOk :: String
623
oobStatusOk = Types.oobStatusToRaw OobStatusOk
624

    
625
oobStatusUnknown :: String
626
oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
627

    
628
oobStatusWarning :: String
629
oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
630

    
631
oobStatuses :: FrozenSet String
632
oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
633

    
634
-- * NIC_* constants are used inside the ganeti config
635

    
636
nicLink :: String
637
nicLink = "link"
638

    
639
nicMode :: String
640
nicMode = "mode"
641

    
642
nicVlan :: String
643
nicVlan = "vlan"
644

    
645
nicModeBridged :: String
646
nicModeBridged = Types.nICModeToRaw NMBridged
647

    
648
nicModeRouted :: String
649
nicModeRouted = Types.nICModeToRaw NMRouted
650

    
651
nicModeOvs :: String
652
nicModeOvs = Types.nICModeToRaw NMOvs
653

    
654
nicIpPool :: String
655
nicIpPool = Types.nICModeToRaw NMPool
656

    
657
nicValidModes :: FrozenSet String
658
nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
659

    
660
-- * Hypervisor constants
661

    
662
htXenPvm :: String
663
htXenPvm = Types.hypervisorToRaw XenPvm
664

    
665
htFake :: String
666
htFake = Types.hypervisorToRaw Fake
667

    
668
htXenHvm :: String
669
htXenHvm = Types.hypervisorToRaw XenHvm
670

    
671
htKvm :: String
672
htKvm = Types.hypervisorToRaw Kvm
673

    
674
htChroot :: String
675
htChroot = Types.hypervisorToRaw Chroot
676

    
677
htLxc :: String
678
htLxc = Types.hypervisorToRaw Lxc
679

    
680
hyperTypes :: FrozenSet String
681
hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
682

    
683
htsReqPort :: FrozenSet String
684
htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
685

    
686
-- * Migration type
687

    
688
htMigrationLive :: String
689
htMigrationLive = Types.migrationModeToRaw MigrationLive
690

    
691
htMigrationNonlive :: String
692
htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
693

    
694
htMigrationModes :: FrozenSet String
695
htMigrationModes =
696
  ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
697

    
698
-- * Cluster verify steps
699

    
700
verifyNplusoneMem :: String
701
verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
702

    
703
verifyOptionalChecks :: FrozenSet String
704
verifyOptionalChecks =
705
  ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
706

    
707
-- * Cluster Verify error classes
708

    
709
cvTcluster :: String
710
cvTcluster = "cluster"
711

    
712
cvTgroup :: String
713
cvTgroup = "group"
714

    
715
cvTnode :: String
716
cvTnode = "node"
717

    
718
cvTinstance :: String
719
cvTinstance = "instance"
720

    
721
-- * Cluster Verify error codes and documentation
722

    
723
cvEclustercert :: (String, String, String)
724
cvEclustercert =
725
  ("cluster",
726
   Types.cVErrorCodeToRaw CvECLUSTERCERT,
727
   "Cluster certificate files verification failure")
728

    
729
cvEclustercfg :: (String, String, String)
730
cvEclustercfg =
731
  ("cluster",
732
   Types.cVErrorCodeToRaw CvECLUSTERCFG,
733
   "Cluster configuration verification failure")
734

    
735
cvEclusterdanglinginst :: (String, String, String)
736
cvEclusterdanglinginst =
737
  ("node",
738
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
739
   "Some instances have a non-existing primary node")
740

    
741
cvEclusterdanglingnodes :: (String, String, String)
742
cvEclusterdanglingnodes =
743
  ("node",
744
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
745
   "Some nodes belong to non-existing groups")
746

    
747
cvEclusterfilecheck :: (String, String, String)
748
cvEclusterfilecheck =
749
  ("cluster",
750
   Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
751
   "Cluster configuration verification failure")
752

    
753
cvEgroupdifferentpvsize :: (String, String, String)
754
cvEgroupdifferentpvsize =
755
  ("group",
756
   Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
757
   "PVs in the group have different sizes")
758

    
759
cvEinstancebadnode :: (String, String, String)
760
cvEinstancebadnode =
761
  ("instance",
762
   Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
763
   "Instance marked as running lives on an offline node")
764

    
765
cvEinstancedown :: (String, String, String)
766
cvEinstancedown =
767
  ("instance",
768
   Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
769
   "Instance not running on its primary node")
770

    
771
cvEinstancefaultydisk :: (String, String, String)
772
cvEinstancefaultydisk =
773
  ("instance",
774
   Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
775
   "Impossible to retrieve status for a disk")
776

    
777
cvEinstancelayout :: (String, String, String)
778
cvEinstancelayout =
779
  ("instance",
780
   Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
781
   "Instance has multiple secondary nodes")
782

    
783
cvEinstancemissingcfgparameter :: (String, String, String)
784
cvEinstancemissingcfgparameter =
785
  ("instance",
786
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
787
   "A configuration parameter for an instance is missing")
788

    
789
cvEinstancemissingdisk :: (String, String, String)
790
cvEinstancemissingdisk =
791
  ("instance",
792
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
793
   "Missing volume on an instance")
794

    
795
cvEinstancepolicy :: (String, String, String)
796
cvEinstancepolicy =
797
  ("instance",
798
   Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
799
   "Instance does not meet policy")
800

    
801
cvEinstancesplitgroups :: (String, String, String)
802
cvEinstancesplitgroups =
803
  ("instance",
804
   Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
805
   "Instance with primary and secondary nodes in different groups")
806

    
807
cvEinstanceunsuitablenode :: (String, String, String)
808
cvEinstanceunsuitablenode =
809
  ("instance",
810
   Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
811
   "Instance running on nodes that are not suitable for it")
812

    
813
cvEinstancewrongnode :: (String, String, String)
814
cvEinstancewrongnode =
815
  ("instance",
816
   Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
817
   "Instance running on the wrong node")
818

    
819
cvEnodedrbd :: (String, String, String)
820
cvEnodedrbd =
821
  ("node",
822
   Types.cVErrorCodeToRaw CvENODEDRBD,
823
   "Error parsing the DRBD status file")
824

    
825
cvEnodedrbdhelper :: (String, String, String)
826
cvEnodedrbdhelper =
827
  ("node",
828
   Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
829
   "Error caused by the DRBD helper")
830

    
831
cvEnodedrbdversion :: (String, String, String)
832
cvEnodedrbdversion =
833
  ("node",
834
   Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
835
   "DRBD version mismatch within a node group")
836

    
837
cvEnodefilecheck :: (String, String, String)
838
cvEnodefilecheck =
839
  ("node",
840
   Types.cVErrorCodeToRaw CvENODEFILECHECK,
841
   "Error retrieving the checksum of the node files")
842

    
843
cvEnodefilestoragepaths :: (String, String, String)
844
cvEnodefilestoragepaths =
845
  ("node",
846
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
847
   "Detected bad file storage paths")
848

    
849
cvEnodefilestoragepathunusable :: (String, String, String)
850
cvEnodefilestoragepathunusable =
851
  ("node",
852
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
853
   "File storage path unusable")
854

    
855
cvEnodehooks :: (String, String, String)
856
cvEnodehooks =
857
  ("node",
858
   Types.cVErrorCodeToRaw CvENODEHOOKS,
859
   "Communication failure in hooks execution")
860

    
861
cvEnodehv :: (String, String, String)
862
cvEnodehv =
863
  ("node",
864
   Types.cVErrorCodeToRaw CvENODEHV,
865
   "Hypervisor parameters verification failure")
866

    
867
cvEnodelvm :: (String, String, String)
868
cvEnodelvm =
869
  ("node",
870
   Types.cVErrorCodeToRaw CvENODELVM,
871
   "LVM-related node error")
872

    
873
cvEnoden1 :: (String, String, String)
874
cvEnoden1 =
875
  ("node",
876
   Types.cVErrorCodeToRaw CvENODEN1,
877
   "Not enough memory to accommodate instance failovers")
878

    
879
cvEnodenet :: (String, String, String)
880
cvEnodenet =
881
  ("node",
882
   Types.cVErrorCodeToRaw CvENODENET,
883
   "Network-related node error")
884

    
885
cvEnodeoobpath :: (String, String, String)
886
cvEnodeoobpath =
887
  ("node",
888
   Types.cVErrorCodeToRaw CvENODEOOBPATH,
889
   "Invalid Out Of Band path")
890

    
891
cvEnodeorphaninstance :: (String, String, String)
892
cvEnodeorphaninstance =
893
  ("node",
894
   Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
895
   "Unknown intance running on a node")
896

    
897
cvEnodeorphanlv :: (String, String, String)
898
cvEnodeorphanlv =
899
  ("node",
900
   Types.cVErrorCodeToRaw CvENODEORPHANLV,
901
   "Unknown LVM logical volume")
902

    
903
cvEnodeos :: (String, String, String)
904
cvEnodeos =
905
  ("node",
906
   Types.cVErrorCodeToRaw CvENODEOS,
907
   "OS-related node error")
908

    
909
cvEnoderpc :: (String, String, String)
910
cvEnoderpc =
911
  ("node",
912
   Types.cVErrorCodeToRaw CvENODERPC,
913
   "Error during connection to the primary node of an instance")
914

    
915
cvEnodesetup :: (String, String, String)
916
cvEnodesetup =
917
  ("node",
918
   Types.cVErrorCodeToRaw CvENODESETUP,
919
   "Node setup error")
920

    
921
cvEnodesharedfilestoragepathunusable :: (String, String, String)
922
cvEnodesharedfilestoragepathunusable =
923
  ("node",
924
   Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
925
   "Shared file storage path unusable")
926

    
927
cvEnodessh :: (String, String, String)
928
cvEnodessh =
929
  ("node",
930
   Types.cVErrorCodeToRaw CvENODESSH,
931
   "SSH-related node error")
932

    
933
cvEnodetime :: (String, String, String)
934
cvEnodetime =
935
  ("node",
936
   Types.cVErrorCodeToRaw CvENODETIME,
937
   "Node returned invalid time")
938

    
939
cvEnodeuserscripts :: (String, String, String)
940
cvEnodeuserscripts =
941
  ("node",
942
   Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
943
   "User scripts not present or not executable")
944

    
945
cvEnodeversion :: (String, String, String)
946
cvEnodeversion =
947
  ("node",
948
   Types.cVErrorCodeToRaw CvENODEVERSION,
949
   "Protocol version mismatch or Ganeti version mismatch")
950

    
951
cvAllEcodes :: FrozenSet (String, String, String)
952
cvAllEcodes =
953
  ConstantUtils.mkSet
954
  [cvEclustercert,
955
   cvEclustercfg,
956
   cvEclusterdanglinginst,
957
   cvEclusterdanglingnodes,
958
   cvEclusterfilecheck,
959
   cvEgroupdifferentpvsize,
960
   cvEinstancebadnode,
961
   cvEinstancedown,
962
   cvEinstancefaultydisk,
963
   cvEinstancelayout,
964
   cvEinstancemissingcfgparameter,
965
   cvEinstancemissingdisk,
966
   cvEinstancepolicy,
967
   cvEinstancesplitgroups,
968
   cvEinstanceunsuitablenode,
969
   cvEinstancewrongnode,
970
   cvEnodedrbd,
971
   cvEnodedrbdhelper,
972
   cvEnodedrbdversion,
973
   cvEnodefilecheck,
974
   cvEnodefilestoragepaths,
975
   cvEnodefilestoragepathunusable,
976
   cvEnodehooks,
977
   cvEnodehv,
978
   cvEnodelvm,
979
   cvEnoden1,
980
   cvEnodenet,
981
   cvEnodeoobpath,
982
   cvEnodeorphaninstance,
983
   cvEnodeorphanlv,
984
   cvEnodeos,
985
   cvEnoderpc,
986
   cvEnodesetup,
987
   cvEnodesharedfilestoragepathunusable,
988
   cvEnodessh,
989
   cvEnodetime,
990
   cvEnodeuserscripts,
991
   cvEnodeversion]
992

    
993
cvAllEcodesStrings :: FrozenSet String
994
cvAllEcodesStrings =
995
  ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
996

    
997
-- * Instance status
998

    
999
inststAdmindown :: String
1000
inststAdmindown = Types.instanceStatusToRaw StatusDown
1001

    
1002
inststAdminoffline :: String
1003
inststAdminoffline = Types.instanceStatusToRaw StatusOffline
1004

    
1005
inststErrordown :: String
1006
inststErrordown = Types.instanceStatusToRaw ErrorDown
1007

    
1008
inststErrorup :: String
1009
inststErrorup = Types.instanceStatusToRaw ErrorUp
1010

    
1011
inststNodedown :: String
1012
inststNodedown = Types.instanceStatusToRaw NodeDown
1013

    
1014
inststNodeoffline :: String
1015
inststNodeoffline = Types.instanceStatusToRaw NodeOffline
1016

    
1017
inststRunning :: String
1018
inststRunning = Types.instanceStatusToRaw Running
1019

    
1020
inststWrongnode :: String
1021
inststWrongnode = Types.instanceStatusToRaw WrongNode
1022

    
1023
inststAll :: FrozenSet String
1024
inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
1025

    
1026
-- * Admin states
1027

    
1028
adminstDown :: String
1029
adminstDown = Types.adminStateToRaw AdminDown
1030

    
1031
adminstOffline :: String
1032
adminstOffline = Types.adminStateToRaw AdminOffline
1033

    
1034
adminstUp :: String
1035
adminstUp = Types.adminStateToRaw AdminUp
1036

    
1037
adminstAll :: FrozenSet String
1038
adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
1039

    
1040
-- * Node roles
1041

    
1042
nrDrained :: String
1043
nrDrained = Types.nodeRoleToRaw NRDrained
1044

    
1045
nrMaster :: String
1046
nrMaster = Types.nodeRoleToRaw NRMaster
1047

    
1048
nrMcandidate :: String
1049
nrMcandidate = Types.nodeRoleToRaw NRCandidate
1050

    
1051
nrOffline :: String
1052
nrOffline = Types.nodeRoleToRaw NROffline
1053

    
1054
nrRegular :: String
1055
nrRegular = Types.nodeRoleToRaw NRRegular
1056

    
1057
nrAll :: FrozenSet String
1058
nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
1059

    
1060
-- * Allocator framework constants
1061

    
1062
iallocatorVersion :: Int
1063
iallocatorVersion = 2
1064

    
1065
iallocatorDirIn :: String
1066
iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
1067

    
1068
iallocatorDirOut :: String
1069
iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
1070

    
1071
validIallocatorDirections :: FrozenSet String
1072
validIallocatorDirections =
1073
  ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
1074

    
1075
iallocatorModeAlloc :: String
1076
iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
1077

    
1078
iallocatorModeChgGroup :: String
1079
iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
1080

    
1081
iallocatorModeMultiAlloc :: String
1082
iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
1083

    
1084
iallocatorModeNodeEvac :: String
1085
iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
1086

    
1087
iallocatorModeReloc :: String
1088
iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
1089

    
1090
validIallocatorModes :: FrozenSet String
1091
validIallocatorModes =
1092
  ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
1093

    
1094
iallocatorSearchPath :: [String]
1095
iallocatorSearchPath = AutoConf.iallocatorSearchPath
1096

    
1097
defaultIallocatorShortcut :: String
1098
defaultIallocatorShortcut = "."
1099

    
1100
-- * Node evacuation
1101

    
1102
nodeEvacPri :: String
1103
nodeEvacPri = Types.nodeEvacModeToRaw NEvacPrimary
1104

    
1105
nodeEvacSec :: String
1106
nodeEvacSec = Types.nodeEvacModeToRaw NEvacSecondary
1107

    
1108
nodeEvacAll :: String
1109
nodeEvacAll = Types.nodeEvacModeToRaw NEvacAll
1110

    
1111
nodeEvacModes :: FrozenSet String
1112
nodeEvacModes = ConstantUtils.mkSet $ map Types.nodeEvacModeToRaw [minBound..]
1113

    
1114
-- * Job status
1115

    
1116
jobStatusQueued :: String
1117
jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
1118

    
1119
jobStatusWaiting :: String
1120
jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
1121

    
1122
jobStatusCanceling :: String
1123
jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
1124

    
1125
jobStatusRunning :: String
1126
jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
1127

    
1128
jobStatusCanceled :: String
1129
jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
1130

    
1131
jobStatusSuccess :: String
1132
jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
1133

    
1134
jobStatusError :: String
1135
jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
1136

    
1137
jobsPending :: FrozenSet String
1138
jobsPending =
1139
  ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
1140

    
1141
jobsFinalized :: FrozenSet String
1142
jobsFinalized =
1143
  ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
1144

    
1145
jobStatusAll :: FrozenSet String
1146
jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
1147

    
1148
-- * OpCode status
1149

    
1150
-- ** Not yet finalized opcodes
1151

    
1152
opStatusCanceling :: String
1153
opStatusCanceling = "canceling"
1154

    
1155
opStatusQueued :: String
1156
opStatusQueued = "queued"
1157

    
1158
opStatusRunning :: String
1159
opStatusRunning = "running"
1160

    
1161
opStatusWaiting :: String
1162
opStatusWaiting = "waiting"
1163

    
1164
-- ** Finalized opcodes
1165

    
1166
opStatusCanceled :: String
1167
opStatusCanceled = "canceled"
1168

    
1169
opStatusError :: String
1170
opStatusError = "error"
1171

    
1172
opStatusSuccess :: String
1173
opStatusSuccess = "success"
1174

    
1175
opsFinalized :: FrozenSet String
1176
opsFinalized =
1177
  ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
1178

    
1179
-- * OpCode priority
1180

    
1181
opPrioLowest :: Int
1182
opPrioLowest = 19
1183

    
1184
opPrioHighest :: Int
1185
opPrioHighest = -20
1186

    
1187
opPrioLow :: Int
1188
opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
1189

    
1190
opPrioNormal :: Int
1191
opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
1192

    
1193
opPrioHigh :: Int
1194
opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
1195

    
1196
opPrioSubmitValid :: FrozenSet Int
1197
opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
1198

    
1199
opPrioDefault :: Int
1200
opPrioDefault = opPrioNormal
1201

    
1202
-- * Execution log types
1203

    
1204
elogMessage :: String
1205
elogMessage = Types.eLogTypeToRaw ELogMessage
1206

    
1207
elogRemoteImport :: String
1208
elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
1209

    
1210
elogJqueueTest :: String
1211
elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
1212

    
1213
-- * A few common errors for confd
1214

    
1215
confdErrorArgument :: Int
1216
confdErrorArgument = 3
1217

    
1218
confdErrorInternal :: Int
1219
confdErrorInternal = 2
1220

    
1221
confdErrorUnknownEntry :: Int
1222
confdErrorUnknownEntry = 1
1223

    
1224
-- | Each request is "salted" by the current timestamp.
1225
--
1226
-- This constant decides how many seconds of skew to accept.
1227
--
1228
-- TODO: make this a default and allow the value to be more
1229
-- configurable
1230
confdMaxClockSkew :: Int
1231
confdMaxClockSkew = 2 * nodeMaxClockSkew
1232

    
1233
-- | When we haven't reloaded the config for more than this amount of
1234
-- seconds, we force a test to see if inotify is betraying us. Using a
1235
-- prime number to ensure we get less chance of 'same wakeup' with
1236
-- other processes.
1237
confdConfigReloadTimeout :: Int
1238
confdConfigReloadTimeout = 17
1239

    
1240
-- | If we receive more than one update in this amount of
1241
-- microseconds, we move to polling every RATELIMIT seconds, rather
1242
-- than relying on inotify, to be able to serve more requests.
1243
confdConfigReloadRatelimit :: Int
1244
confdConfigReloadRatelimit = 250000
1245

    
1246
-- | Magic number prepended to all confd queries.
1247
--
1248
-- This allows us to distinguish different types of confd protocols
1249
-- and handle them. For example by changing this we can move the whole
1250
-- payload to be compressed, or move away from json.
1251
confdMagicFourcc :: String
1252
confdMagicFourcc = "plj0"
1253

    
1254
-- | By default a confd request is sent to the minimum between this
1255
-- number and all MCs. 6 was chosen because even in the case of a
1256
-- disastrous 50% response rate, we should have enough answers to be
1257
-- able to compare more than one.
1258
confdDefaultReqCoverage :: Int
1259
confdDefaultReqCoverage = 6
1260

    
1261
-- | Timeout in seconds to expire pending query request in the confd
1262
-- client library. We don't actually expect any answer more than 10
1263
-- seconds after we sent a request.
1264
confdClientExpireTimeout :: Int
1265
confdClientExpireTimeout = 10
1266

    
1267
-- * Possible values for NodeGroup.alloc_policy
1268

    
1269
allocPolicyLastResort :: String
1270
allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
1271

    
1272
allocPolicyPreferred :: String
1273
allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
1274

    
1275
allocPolicyUnallocable :: String
1276
allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
1277

    
1278
validAllocPolicies :: [String]
1279
validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
1280

    
1281
-- | Temporary external/shared storage parameters
1282
blockdevDriverManual :: String
1283
blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
1284

    
1285
-- | 'qemu-img' path, required for 'ovfconverter'
1286
qemuimgPath :: String
1287
qemuimgPath = AutoConf.qemuimgPath
1288

    
1289
-- | Whether htools was enabled at compilation time
1290
--
1291
-- FIXME: this should be moved next to the other enable constants,
1292
-- such as, 'enableConfd', and renamed to 'enableHtools'.
1293
htools :: Bool
1294
htools = AutoConf.htools
1295

    
1296
-- | Path generating random UUID
1297
randomUuidFile :: String
1298
randomUuidFile = ConstantUtils.randomUuidFile
1299

    
1300
-- * Auto-repair tag prefixes
1301

    
1302
autoRepairTagPrefix :: String
1303
autoRepairTagPrefix = "ganeti:watcher:autorepair:"
1304

    
1305
autoRepairTagEnabled :: String
1306
autoRepairTagEnabled = autoRepairTagPrefix
1307

    
1308
autoRepairTagPending :: String
1309
autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
1310

    
1311
autoRepairTagResult :: String
1312
autoRepairTagResult = autoRepairTagPrefix ++ "result:"
1313

    
1314
autoRepairTagSuspended :: String
1315
autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
1316

    
1317
-- * Auto-repair levels
1318

    
1319
autoRepairFailover :: String
1320
autoRepairFailover = "failover"
1321

    
1322
autoRepairFixStorage :: String
1323
autoRepairFixStorage = "fix-storage"
1324

    
1325
autoRepairMigrate :: String
1326
autoRepairMigrate = "migrate"
1327

    
1328
autoRepairReinstall :: String
1329
autoRepairReinstall = "reinstall"
1330

    
1331
autoRepairAllTypes :: FrozenSet String
1332
autoRepairAllTypes =
1333
  ConstantUtils.mkSet [autoRepairFailover,
1334
                       autoRepairFixStorage,
1335
                       autoRepairMigrate,
1336
                       autoRepairReinstall]
1337

    
1338
-- * Auto-repair results
1339

    
1340
autoRepairEnoperm :: String
1341
autoRepairEnoperm = "enoperm"
1342

    
1343
autoRepairFailure :: String
1344
autoRepairFailure = "failure"
1345

    
1346
autoRepairSuccess :: String
1347
autoRepairSuccess = "success"
1348

    
1349
autoRepairAllResults :: FrozenSet String
1350
autoRepairAllResults =
1351
  ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
1352

    
1353
-- | The version identifier for builtin data collectors
1354
builtinDataCollectorVersion :: String
1355
builtinDataCollectorVersion = "B"
1356

    
1357
-- | The reason trail opcode parameter name
1358
opcodeReason :: String
1359
opcodeReason = "reason"
1360

    
1361
diskstatsFile :: String
1362
diskstatsFile = "/proc/diskstats"
1363

    
1364
-- | CPU load collector
1365
statFile :: String
1366
statFile = "/proc/stat"
1367

    
1368
-- | Mond's variable for periodical data collection
1369
mondTimeInterval :: Int
1370
mondTimeInterval = 5