Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / HsConstants.hs @ 84ad6b78

History | View | Annotate | Download (46.5 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.List ((\\))
40
import Data.Map (Map)
41
import qualified Data.Map as Map (fromList, keys, insert)
42

    
43
import AutoConf
44
import Ganeti.ConstantUtils (PythonChar(..), FrozenSet, Protocol(..),
45
                             buildVersion)
46
import qualified Ganeti.ConstantUtils as ConstantUtils
47
import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..),
48
                       ExtraLogReason(..))
49
import Ganeti.HTools.Types (AutoRepairResult(..), AutoRepairType(..))
50
import qualified Ganeti.HTools.Types as Types
51
import Ganeti.Logging (SyslogUsage(..))
52
import qualified Ganeti.Logging as Logging (syslogUsageToRaw)
53
import qualified Ganeti.Runtime as Runtime
54
import Ganeti.Types
55
import qualified Ganeti.Types as Types
56
import Ganeti.Confd.Types (ConfdRequestType(..), ConfdReqField(..),
57
                           ConfdReplyStatus(..), ConfdNodeRole(..),
58
                           ConfdErrorType(..))
59
import qualified Ganeti.Confd.Types as Types
60

    
61
{-# ANN module "HLint: ignore Use camelCase" #-}
62

    
63
-- * 'autoconf' constants for Python only ('autotools/build-bash-completion')
64

    
65
htoolsProgs :: [String]
66
htoolsProgs = AutoConf.htoolsProgs
67

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

    
70
drbdBarriers :: String
71
drbdBarriers = AutoConf.drbdBarriers
72

    
73
drbdNoMetaFlush :: Bool
74
drbdNoMetaFlush = AutoConf.drbdNoMetaFlush
75

    
76
lvmStripecount :: Int
77
lvmStripecount = AutoConf.lvmStripecount
78

    
79
-- * 'autoconf' constants for Python only ('lib/pathutils.py')
80

    
81
-- ** Build-time constants
82

    
83
exportDir :: String
84
exportDir = AutoConf.exportDir
85

    
86
osSearchPath :: [String]
87
osSearchPath = AutoConf.osSearchPath
88

    
89
esSearchPath :: [String]
90
esSearchPath = AutoConf.esSearchPath
91

    
92
sshConfigDir :: String
93
sshConfigDir = AutoConf.sshConfigDir
94

    
95
xenConfigDir :: String
96
xenConfigDir = AutoConf.xenConfigDir
97

    
98
sysconfdir :: String
99
sysconfdir = AutoConf.sysconfdir
100

    
101
toolsdir :: String
102
toolsdir = AutoConf.toolsdir
103

    
104
localstatedir :: String
105
localstatedir = AutoConf.localstatedir
106

    
107
-- ** Paths which don't change for a virtual cluster
108

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

    
112
sharedir :: String
113
sharedir = AutoConf.sharedir
114

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

    
117
manPages :: Map String Int
118
manPages = Map.fromList AutoConf.manPages
119

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

    
122
versionedsharedir :: String
123
versionedsharedir = AutoConf.versionedsharedir
124

    
125
-- * 'autoconf' constants for Python only ('tests/py/docs_unittest.py')
126

    
127
gntScripts :: [String]
128
gntScripts = AutoConf.gntScripts
129

    
130
-- * Various versions
131

    
132
releaseVersion :: String
133
releaseVersion = AutoConf.packageVersion
134

    
135
versionMajor :: Int
136
versionMajor = AutoConf.versionMajor
137

    
138
versionMinor :: Int
139
versionMinor = AutoConf.versionMinor
140

    
141
versionRevision :: Int
142
versionRevision = AutoConf.versionRevision
143

    
144
dirVersion :: String
145
dirVersion = AutoConf.dirVersion
146

    
147
osApiV10 :: Int
148
osApiV10 = 10
149

    
150
osApiV15 :: Int
151
osApiV15 = 15
152

    
153
osApiV20 :: Int
154
osApiV20 = 20
155

    
156
osApiVersions :: FrozenSet Int
157
osApiVersions = ConstantUtils.mkSet [osApiV10, osApiV15, osApiV20]
158

    
159
configMajor :: Int
160
configMajor = AutoConf.versionMajor
161

    
162
configMinor :: Int
163
configMinor = AutoConf.versionMinor
164

    
165
-- | The configuration is supposed to remain stable across
166
-- revisions. Therefore, the revision number is cleared to '0'.
167
configRevision :: Int
168
configRevision = 0
169

    
170
configVersion :: Int
171
configVersion = buildVersion configMajor configMinor configRevision
172

    
173
-- | Similarly to the configuration (see 'configRevision'), the
174
-- protocols are supposed to remain stable across revisions.
175
protocolVersion :: Int
176
protocolVersion = buildVersion configMajor configMinor configRevision
177

    
178
-- * User separation
179

    
180
daemonsGroup :: String
181
daemonsGroup = Runtime.daemonGroup (ExtraGroup DaemonsGroup)
182

    
183
adminGroup :: String
184
adminGroup = Runtime.daemonGroup (ExtraGroup AdminGroup)
185

    
186
masterdUser :: String
187
masterdUser = Runtime.daemonUser GanetiMasterd
188

    
189
masterdGroup :: String
190
masterdGroup = Runtime.daemonGroup (DaemonGroup GanetiMasterd)
191

    
192
rapiUser :: String
193
rapiUser = Runtime.daemonUser GanetiRapi
194

    
195
rapiGroup :: String
196
rapiGroup = Runtime.daemonGroup (DaemonGroup GanetiRapi)
197

    
198
confdUser :: String
199
confdUser = Runtime.daemonUser GanetiConfd
200

    
201
confdGroup :: String
202
confdGroup = Runtime.daemonGroup (DaemonGroup GanetiConfd)
203

    
204
luxidUser :: String
205
luxidUser = Runtime.daemonUser GanetiLuxid
206

    
207
luxidGroup :: String
208
luxidGroup = Runtime.daemonGroup (DaemonGroup GanetiLuxid)
209

    
210
nodedUser :: String
211
nodedUser = Runtime.daemonUser GanetiNoded
212

    
213
nodedGroup :: String
214
nodedGroup = Runtime.daemonGroup (DaemonGroup GanetiNoded)
215

    
216
mondUser :: String
217
mondUser = Runtime.daemonUser GanetiMond
218

    
219
mondGroup :: String
220
mondGroup = Runtime.daemonGroup (DaemonGroup GanetiMond)
221

    
222
sshLoginUser :: String
223
sshLoginUser = AutoConf.sshLoginUser
224

    
225
sshConsoleUser :: String
226
sshConsoleUser = AutoConf.sshConsoleUser
227

    
228
-- * Wipe
229

    
230
ddCmd :: String
231
ddCmd = "dd"
232

    
233
-- | 1GB
234
maxWipeChunk :: Int
235
maxWipeChunk = 1024
236

    
237
minWipeChunkPercent :: Int
238
minWipeChunkPercent = 10
239

    
240
-- * Directories
241

    
242
runDirsMode :: Int
243
runDirsMode = 0o775
244

    
245
secureDirMode :: Int
246
secureDirMode = 0o700
247

    
248
secureFileMode :: Int
249
secureFileMode = 0o600
250

    
251
adoptableBlockdevRoot :: String
252
adoptableBlockdevRoot = "/dev/disk/"
253

    
254
-- * 'autoconf' enable/disable
255

    
256
enableConfd :: Bool
257
enableConfd = AutoConf.enableConfd
258

    
259
enableMond :: Bool
260
enableMond = AutoConf.enableMond
261

    
262
enableRestrictedCommands :: Bool
263
enableRestrictedCommands = AutoConf.enableRestrictedCommands
264

    
265
enableSplitQuery :: Bool
266
enableSplitQuery = AutoConf.enableSplitQuery
267

    
268
-- * SSH constants
269

    
270
ssh :: String
271
ssh = "ssh"
272

    
273
scp :: String
274
scp = "scp"
275

    
276
-- * Daemons
277

    
278
confd :: String
279
confd = Runtime.daemonName GanetiConfd
280

    
281
masterd :: String
282
masterd = Runtime.daemonName GanetiMasterd
283

    
284
mond :: String
285
mond = Runtime.daemonName GanetiMond
286

    
287
noded :: String
288
noded = Runtime.daemonName GanetiNoded
289

    
290
luxid :: String
291
luxid = Runtime.daemonName GanetiLuxid
292

    
293
rapi :: String
294
rapi = Runtime.daemonName GanetiRapi
295

    
296
daemons :: FrozenSet String
297
daemons =
298
  ConstantUtils.mkSet [confd,
299
                       luxid,
300
                       masterd,
301
                       mond,
302
                       noded,
303
                       rapi]
304

    
305
defaultConfdPort :: Int
306
defaultConfdPort = 1814
307

    
308
defaultMondPort :: Int
309
defaultMondPort = 1815
310

    
311
defaultNodedPort :: Int
312
defaultNodedPort = 1811
313

    
314
defaultRapiPort :: Int
315
defaultRapiPort = 5080
316

    
317
daemonsPorts :: Map String (Protocol, Int)
318
daemonsPorts =
319
  Map.fromList [(confd, (Udp, defaultConfdPort)),
320
                (mond, (Tcp, defaultMondPort)),
321
                (noded, (Tcp, defaultNodedPort)),
322
                (rapi, (Tcp, defaultRapiPort)),
323
                (ssh, (Tcp, 22))]
324

    
325
firstDrbdPort :: Int
326
firstDrbdPort = 11000
327

    
328
lastDrbdPort :: Int
329
lastDrbdPort = 14999
330

    
331
daemonsLogbase :: Map String String
332
daemonsLogbase =
333
  Map.fromList
334
  [ (Runtime.daemonName d, Runtime.daemonLogBase d) | d <- [minBound..] ]
335

    
336
extraLogreasonAccess :: String
337
extraLogreasonAccess = Runtime.daemonsExtraLogbase GanetiMond AccessLog
338

    
339
extraLogreasonError :: String
340
extraLogreasonError = Runtime.daemonsExtraLogbase GanetiMond ErrorLog
341

    
342
devConsole :: String
343
devConsole = ConstantUtils.devConsole
344

    
345
-- * Luxi (Local UniX Interface) related constants
346

    
347
luxiEom :: PythonChar
348
luxiEom = PythonChar '\x03'
349

    
350
-- | Environment variable for the luxi override socket
351
luxiOverride :: String
352
luxiOverride = "FORCE_LUXI_SOCKET"
353

    
354
luxiOverrideMaster :: String
355
luxiOverrideMaster = "master"
356

    
357
luxiOverrideQuery :: String
358
luxiOverrideQuery = "query"
359

    
360
luxiVersion :: Int
361
luxiVersion = configVersion
362

    
363
-- * Syslog
364

    
365
syslogUsage :: String
366
syslogUsage = AutoConf.syslogUsage
367

    
368
syslogNo :: String
369
syslogNo = Logging.syslogUsageToRaw SyslogNo
370

    
371
syslogYes :: String
372
syslogYes = Logging.syslogUsageToRaw SyslogYes
373

    
374
syslogOnly :: String
375
syslogOnly = Logging.syslogUsageToRaw SyslogOnly
376

    
377
syslogSocket :: String
378
syslogSocket = "/dev/log"
379

    
380
-- * Xen
381

    
382
xenBootloader :: String
383
xenBootloader = AutoConf.xenBootloader
384

    
385
xenCmdXl :: String
386
xenCmdXl = "xl"
387

    
388
xenCmdXm :: String
389
xenCmdXm = "xm"
390

    
391
xenInitrd :: String
392
xenInitrd = AutoConf.xenInitrd
393

    
394
xenKernel :: String
395
xenKernel = AutoConf.xenKernel
396

    
397
-- FIXME: perhaps rename to 'validXenCommands' for consistency with
398
-- other constants
399
knownXenCommands :: FrozenSet String
400
knownXenCommands = ConstantUtils.mkSet [xenCmdXl, xenCmdXm]
401

    
402
-- * KVM and socat
403

    
404
kvmPath :: String
405
kvmPath = AutoConf.kvmPath
406

    
407
kvmKernel :: String
408
kvmKernel = AutoConf.kvmKernel
409

    
410
socatEscapeCode :: String
411
socatEscapeCode = "0x1d"
412

    
413
socatPath :: String
414
socatPath = AutoConf.socatPath
415

    
416
socatUseCompress :: Bool
417
socatUseCompress = AutoConf.socatUseCompress
418

    
419
socatUseEscape :: Bool
420
socatUseEscape = AutoConf.socatUseEscape
421

    
422
-- * Storage types
423

    
424
stBlock :: String
425
stBlock = Types.storageTypeToRaw StorageBlock
426

    
427
stDiskless :: String
428
stDiskless = Types.storageTypeToRaw StorageDiskless
429

    
430
stExt :: String
431
stExt = Types.storageTypeToRaw StorageExt
432

    
433
stFile :: String
434
stFile = Types.storageTypeToRaw StorageFile
435

    
436
stLvmPv :: String
437
stLvmPv = Types.storageTypeToRaw StorageLvmPv
438

    
439
stLvmVg :: String
440
stLvmVg = Types.storageTypeToRaw StorageLvmVg
441

    
442
stRados :: String
443
stRados = Types.storageTypeToRaw StorageRados
444

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

    
448
-- * Storage fields
449
-- ** First two are valid in LU context only, not passed to backend
450

    
451
sfNode :: String
452
sfNode = "node"
453

    
454
sfType :: String
455
sfType = "type"
456

    
457
-- ** and the rest are valid in backend
458

    
459
sfAllocatable :: String
460
sfAllocatable = Types.storageFieldToRaw SFAllocatable
461

    
462
sfFree :: String
463
sfFree = Types.storageFieldToRaw SFFree
464

    
465
sfName :: String
466
sfName = Types.storageFieldToRaw SFName
467

    
468
sfSize :: String
469
sfSize = Types.storageFieldToRaw SFSize
470

    
471
sfUsed :: String
472
sfUsed = Types.storageFieldToRaw SFUsed
473

    
474
-- * Local disk status
475

    
476
ldsFaulty :: Int
477
ldsFaulty = Types.localDiskStatusToRaw DiskStatusFaulty
478

    
479
ldsOkay :: Int
480
ldsOkay = Types.localDiskStatusToRaw DiskStatusOk
481

    
482
ldsUnknown :: Int
483
ldsUnknown = Types.localDiskStatusToRaw DiskStatusUnknown
484

    
485
ldsNames :: Map Int String
486
ldsNames =
487
  Map.fromList [ (Types.localDiskStatusToRaw ds,
488
                  localDiskStatusName ds) | ds <- [minBound..] ]
489

    
490
-- * Disk template types
491

    
492
dtDiskless :: String
493
dtDiskless = Types.diskTemplateToRaw DTDiskless
494

    
495
dtFile :: String
496
dtFile = Types.diskTemplateToRaw DTFile
497

    
498
dtSharedFile :: String
499
dtSharedFile = Types.diskTemplateToRaw DTSharedFile
500

    
501
dtPlain :: String
502
dtPlain = Types.diskTemplateToRaw DTPlain
503

    
504
dtBlock :: String
505
dtBlock = Types.diskTemplateToRaw DTBlock
506

    
507
dtDrbd8 :: String
508
dtDrbd8 = Types.diskTemplateToRaw DTDrbd8
509

    
510
dtRbd :: String
511
dtRbd = Types.diskTemplateToRaw DTRbd
512

    
513
dtExt :: String
514
dtExt = Types.diskTemplateToRaw DTExt
515

    
516
-- | This is used to order determine the default disk template when
517
-- the list of enabled disk templates is inferred from the current
518
-- state of the cluster.  This only happens on an upgrade from a
519
-- version of Ganeti that did not support the 'enabled_disk_templates'
520
-- so far.
521
diskTemplatePreference :: [String]
522
diskTemplatePreference =
523
  map Types.diskTemplateToRaw
524
  [DTBlock, DTDiskless, DTDrbd8, DTExt, DTFile, DTPlain, DTRbd, DTSharedFile]
525

    
526
diskTemplates :: FrozenSet String
527
diskTemplates = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [minBound..]
528

    
529
-- | Disk templates that are enabled by default
530
defaultEnabledDiskTemplates :: [String]
531
defaultEnabledDiskTemplates = map Types.diskTemplateToRaw [DTDrbd8, DTPlain]
532

    
533
-- | The set of network-mirrored disk templates
534
dtsIntMirror :: FrozenSet String
535
dtsIntMirror = ConstantUtils.mkSet [dtDrbd8]
536

    
537
-- | 'DTDiskless' is 'trivially' externally mirrored
538
dtsExtMirror :: FrozenSet String
539
dtsExtMirror =
540
  ConstantUtils.mkSet $
541
  map Types.diskTemplateToRaw [DTDiskless, DTBlock, DTExt, DTSharedFile, DTRbd]
542

    
543
-- | The set of non-lvm-based disk templates
544
dtsNotLvm :: FrozenSet String
545
dtsNotLvm =
546
  ConstantUtils.mkSet $
547
  map Types.diskTemplateToRaw
548
  [DTSharedFile, DTDiskless, DTBlock, DTExt, DTFile, DTRbd]
549

    
550
-- | The set of disk templates which can be grown
551
dtsGrowable :: FrozenSet String
552
dtsGrowable =
553
  ConstantUtils.mkSet $
554
  map Types.diskTemplateToRaw
555
  [DTSharedFile, DTDrbd8, DTPlain, DTExt, DTFile, DTRbd]
556

    
557
-- | The set of disk templates that allow adoption
558
dtsMayAdopt :: FrozenSet String
559
dtsMayAdopt =
560
  ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTBlock, DTPlain]
561

    
562
-- | The set of disk templates that *must* use adoption
563
dtsMustAdopt :: FrozenSet String
564
dtsMustAdopt = ConstantUtils.mkSet [Types.diskTemplateToRaw DTBlock]
565

    
566
-- | The set of disk templates that allow migrations
567
dtsMirrored :: FrozenSet String
568
dtsMirrored = dtsIntMirror `ConstantUtils.union` dtsExtMirror
569

    
570
-- | The set of file based disk templates
571
dtsFilebased :: FrozenSet String
572
dtsFilebased =
573
  ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTSharedFile, DTFile]
574

    
575
-- | The set of disk templates that can be moved by copying
576
--
577
-- Note: a requirement is that they're not accessed externally or
578
-- shared between nodes; in particular, sharedfile is not suitable.
579
dtsCopyable :: FrozenSet String
580
dtsCopyable =
581
  ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain, DTFile]
582

    
583
-- | The set of disk templates that are supported by exclusive_storage
584
dtsExclStorage :: FrozenSet String
585
dtsExclStorage = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain]
586

    
587
-- | Templates for which we don't perform checks on free space
588
dtsNoFreeSpaceCheck :: FrozenSet String
589
dtsNoFreeSpaceCheck =
590
  ConstantUtils.mkSet $
591
  map Types.diskTemplateToRaw [DTExt, DTSharedFile, DTFile, DTRbd]
592

    
593
dtsBlock :: FrozenSet String
594
dtsBlock =
595
  ConstantUtils.mkSet $
596
  map Types.diskTemplateToRaw [DTPlain, DTDrbd8, DTBlock, DTRbd, DTExt]
597

    
598
-- * File backend driver
599

    
600
fdBlktap :: String
601
fdBlktap = Types.fileDriverToRaw FileBlktap
602

    
603
fdLoop :: String
604
fdLoop = Types.fileDriverToRaw FileLoop
605

    
606
fileDriver :: FrozenSet String
607
fileDriver =
608
  ConstantUtils.mkSet $
609
  map Types.fileDriverToRaw [minBound..]
610

    
611
-- | The set of drbd-like disk types
612
ldsDrbd :: FrozenSet String
613
ldsDrbd = ConstantUtils.mkSet [Types.diskTemplateToRaw DTDrbd8]
614

    
615
-- * Disk access mode
616

    
617
diskRdonly :: String
618
diskRdonly = Types.diskModeToRaw DiskRdOnly
619

    
620
diskRdwr :: String
621
diskRdwr = Types.diskModeToRaw DiskRdWr
622

    
623
diskAccessSet :: FrozenSet String
624
diskAccessSet = ConstantUtils.mkSet $ map Types.diskModeToRaw [minBound..]
625

    
626
-- * Disk replacement mode
627

    
628
replaceDiskAuto :: String
629
replaceDiskAuto = Types.replaceDisksModeToRaw ReplaceAuto
630

    
631
replaceDiskChg :: String
632
replaceDiskChg = Types.replaceDisksModeToRaw ReplaceNewSecondary
633

    
634
replaceDiskPri :: String
635
replaceDiskPri = Types.replaceDisksModeToRaw ReplaceOnPrimary
636

    
637
replaceDiskSec :: String
638
replaceDiskSec = Types.replaceDisksModeToRaw ReplaceOnSecondary
639

    
640
replaceModes :: FrozenSet String
641
replaceModes =
642
  ConstantUtils.mkSet $ map Types.replaceDisksModeToRaw [minBound..]
643

    
644
-- * Instance export mode
645

    
646
exportModeLocal :: String
647
exportModeLocal = Types.exportModeToRaw ExportModeLocal
648

    
649
exportModeRemote :: String
650
exportModeRemote = Types.exportModeToRaw ExportModeRemote
651

    
652
exportModes :: FrozenSet String
653
exportModes = ConstantUtils.mkSet $ map Types.exportModeToRaw [minBound..]
654

    
655
-- * Instance creation modes
656

    
657
instanceCreate :: String
658
instanceCreate = Types.instCreateModeToRaw InstCreate
659

    
660
instanceImport :: String
661
instanceImport = Types.instCreateModeToRaw InstImport
662

    
663
instanceRemoteImport :: String
664
instanceRemoteImport = Types.instCreateModeToRaw InstRemoteImport
665

    
666
instanceCreateModes :: FrozenSet String
667
instanceCreateModes =
668
  ConstantUtils.mkSet $ map Types.instCreateModeToRaw [minBound..]
669

    
670
-- * Dynamic device modification
671

    
672
ddmAdd :: String
673
ddmAdd = Types.ddmFullToRaw DdmFullAdd
674

    
675
ddmModify :: String
676
ddmModify = Types.ddmFullToRaw DdmFullModify
677

    
678
ddmRemove :: String
679
ddmRemove = Types.ddmFullToRaw DdmFullRemove
680

    
681
ddmsValues :: FrozenSet String
682
ddmsValues = ConstantUtils.mkSet [ddmAdd, ddmRemove]
683

    
684
ddmsValuesWithModify :: FrozenSet String
685
ddmsValuesWithModify = ConstantUtils.mkSet $ map Types.ddmFullToRaw [minBound..]
686

    
687
-- * Common exit codes
688

    
689
exitSuccess :: Int
690
exitSuccess = 0
691

    
692
exitFailure :: Int
693
exitFailure = ConstantUtils.exitFailure
694

    
695
exitNotcluster :: Int
696
exitNotcluster = 5
697

    
698
exitNotmaster :: Int
699
exitNotmaster = 11
700

    
701
exitNodesetupError :: Int
702
exitNodesetupError = 12
703

    
704
-- | Need user confirmation
705
exitConfirmation :: Int
706
exitConfirmation = 13
707

    
708
-- | Exit code for query operations with unknown fields
709
exitUnknownField :: Int
710
exitUnknownField = 14
711

    
712
-- * Tags
713

    
714
tagCluster :: String
715
tagCluster = Types.tagKindToRaw TagKindCluster
716

    
717
tagInstance :: String
718
tagInstance = Types.tagKindToRaw TagKindInstance
719

    
720
tagNetwork :: String
721
tagNetwork = Types.tagKindToRaw TagKindNetwork
722

    
723
tagNode :: String
724
tagNode = Types.tagKindToRaw TagKindNode
725

    
726
tagNodegroup :: String
727
tagNodegroup = Types.tagKindToRaw TagKindGroup
728

    
729
validTagTypes :: FrozenSet String
730
validTagTypes = ConstantUtils.mkSet $ map Types.tagKindToRaw [minBound..]
731

    
732
maxTagLen :: Int
733
maxTagLen = 128
734

    
735
maxTagsPerObj :: Int
736
maxTagsPerObj = 4096
737

    
738
-- | Node clock skew in seconds
739
nodeMaxClockSkew :: Int
740
nodeMaxClockSkew = 150
741

    
742
-- | Disk index separator
743
diskSeparator :: String
744
diskSeparator = AutoConf.diskSeparator
745

    
746
-- * Timeout table
747
--
748
-- Various time constants for the timeout table
749

    
750
rpcTmoUrgent :: Int
751
rpcTmoUrgent = Types.rpcTimeoutToRaw Urgent
752

    
753
rpcTmoFast :: Int
754
rpcTmoFast = Types.rpcTimeoutToRaw Fast
755

    
756
rpcTmoNormal :: Int
757
rpcTmoNormal = Types.rpcTimeoutToRaw Normal
758

    
759
rpcTmoSlow :: Int
760
rpcTmoSlow = Types.rpcTimeoutToRaw Slow
761

    
762
-- | 'rpcTmo_4hrs' contains an underscore to circumvent a limitation
763
-- in the 'Ganeti.THH.deCamelCase' function and generate the correct
764
-- Python name.
765
rpcTmo_4hrs :: Int
766
rpcTmo_4hrs = Types.rpcTimeoutToRaw FourHours
767

    
768
-- | 'rpcTmo_1day' contains an underscore to circumvent a limitation
769
-- in the 'Ganeti.THH.deCamelCase' function and generate the correct
770
-- Python name.
771
rpcTmo_1day :: Int
772
rpcTmo_1day = Types.rpcTimeoutToRaw OneDay
773

    
774
-- | Timeout for connecting to nodes (seconds)
775
rpcConnectTimeout :: Int
776
rpcConnectTimeout = 5
777

    
778

    
779
-- | Instance specs
780
--
781
-- FIXME: these should be associated with 'Ganeti.HTools.Types.ISpec'
782

    
783
ispecMemSize :: String
784
ispecMemSize = ConstantUtils.ispecMemSize
785

    
786
ispecCpuCount :: String
787
ispecCpuCount = ConstantUtils.ispecCpuCount
788

    
789
ispecDiskCount :: String
790
ispecDiskCount = ConstantUtils.ispecDiskCount
791

    
792
ispecDiskSize :: String
793
ispecDiskSize = ConstantUtils.ispecDiskSize
794

    
795
ispecNicCount :: String
796
ispecNicCount = ConstantUtils.ispecNicCount
797

    
798
ispecSpindleUse :: String
799
ispecSpindleUse = ConstantUtils.ispecSpindleUse
800

    
801
ispecsParameterTypes :: Map String VType
802
ispecsParameterTypes =
803
  Map.fromList
804
  [(ConstantUtils.ispecDiskSize, VTypeInt),
805
   (ConstantUtils.ispecCpuCount, VTypeInt),
806
   (ConstantUtils.ispecSpindleUse, VTypeInt),
807
   (ConstantUtils.ispecMemSize, VTypeInt),
808
   (ConstantUtils.ispecNicCount, VTypeInt),
809
   (ConstantUtils.ispecDiskCount, VTypeInt)]
810

    
811
ispecsParameters :: FrozenSet String
812
ispecsParameters =
813
  ConstantUtils.mkSet [ConstantUtils.ispecCpuCount,
814
                       ConstantUtils.ispecDiskCount,
815
                       ConstantUtils.ispecDiskSize,
816
                       ConstantUtils.ispecMemSize,
817
                       ConstantUtils.ispecNicCount,
818
                       ConstantUtils.ispecSpindleUse]
819

    
820
ispecsMinmax :: String
821
ispecsMinmax = ConstantUtils.ispecsMinmax
822

    
823
ispecsMax :: String
824
ispecsMax = "max"
825

    
826
ispecsMin :: String
827
ispecsMin = "min"
828

    
829
ispecsStd :: String
830
ispecsStd = ConstantUtils.ispecsStd
831

    
832
ipolicyDts :: String
833
ipolicyDts = ConstantUtils.ipolicyDts
834

    
835
ipolicyVcpuRatio :: String
836
ipolicyVcpuRatio = ConstantUtils.ipolicyVcpuRatio
837

    
838
ipolicySpindleRatio :: String
839
ipolicySpindleRatio = ConstantUtils.ipolicySpindleRatio
840

    
841
ispecsMinmaxKeys :: FrozenSet String
842
ispecsMinmaxKeys = ConstantUtils.mkSet [ispecsMax, ispecsMin]
843

    
844
ipolicyParameters :: FrozenSet String
845
ipolicyParameters =
846
  ConstantUtils.mkSet [ConstantUtils.ipolicyVcpuRatio,
847
                       ConstantUtils.ipolicySpindleRatio]
848

    
849
ipolicyAllKeys :: FrozenSet String
850
ipolicyAllKeys =
851
  ConstantUtils.union ipolicyParameters $
852
  ConstantUtils.mkSet [ConstantUtils.ipolicyDts,
853
                       ConstantUtils.ispecsMinmax,
854
                       ispecsStd]
855

    
856
-- | Node parameter names
857

    
858
ndExclusiveStorage :: String
859
ndExclusiveStorage = "exclusive_storage"
860

    
861
ndOobProgram :: String
862
ndOobProgram = "oob_program"
863

    
864
ndSpindleCount :: String
865
ndSpindleCount = "spindle_count"
866

    
867
ndOvs :: String
868
ndOvs = "ovs"
869

    
870
ndOvsLink :: String
871
ndOvsLink = "ovs_link"
872

    
873
ndOvsName :: String
874
ndOvsName = "ovs_name"
875

    
876
ndsParameterTypes :: Map String VType
877
ndsParameterTypes =
878
  Map.fromList
879
  [(ndExclusiveStorage, VTypeBool),
880
   (ndOobProgram, VTypeString),
881
   (ndOvs, VTypeBool),
882
   (ndOvsLink, VTypeMaybeString),
883
   (ndOvsName, VTypeMaybeString),
884
   (ndSpindleCount, VTypeInt)]
885

    
886
ndsParameters :: FrozenSet String
887
ndsParameters = ConstantUtils.mkSet (Map.keys ndsParameterTypes)
888

    
889
ndsParameterTitles :: Map String String
890
ndsParameterTitles =
891
  Map.fromList
892
  [(ndExclusiveStorage, "ExclusiveStorage"),
893
   (ndOobProgram, "OutOfBandProgram"),
894
   (ndOvs, "OpenvSwitch"),
895
   (ndOvsLink, "OpenvSwitchLink"),
896
   (ndOvsName, "OpenvSwitchName"),
897
   (ndSpindleCount, "SpindleCount")]
898

    
899
ipCommandPath :: String
900
ipCommandPath = AutoConf.ipPath
901

    
902
-- * Reboot types
903

    
904
instanceRebootSoft :: String
905
instanceRebootSoft = Types.rebootTypeToRaw RebootSoft
906

    
907
instanceRebootHard :: String
908
instanceRebootHard = Types.rebootTypeToRaw RebootHard
909

    
910
instanceRebootFull :: String
911
instanceRebootFull = Types.rebootTypeToRaw RebootFull
912

    
913
rebootTypes :: FrozenSet String
914
rebootTypes = ConstantUtils.mkSet $ map Types.rebootTypeToRaw [minBound..]
915

    
916
-- * VTypes
917

    
918
vtypeBool :: String
919
vtypeBool = Types.vTypeToRaw VTypeBool
920

    
921
vtypeInt :: String
922
vtypeInt = Types.vTypeToRaw VTypeInt
923

    
924
vtypeMaybeString :: String
925
vtypeMaybeString = Types.vTypeToRaw VTypeMaybeString
926

    
927
-- | Size in MiBs
928
vtypeSize :: String
929
vtypeSize = Types.vTypeToRaw VTypeSize
930

    
931
vtypeString :: String
932
vtypeString = Types.vTypeToRaw VTypeString
933

    
934
enforceableTypes :: FrozenSet String
935
enforceableTypes = ConstantUtils.mkSet $ map Types.vTypeToRaw [minBound..]
936

    
937
-- * OOB supported commands
938

    
939
oobPowerOn :: String
940
oobPowerOn = Types.oobCommandToRaw OobPowerOn
941

    
942
oobPowerOff :: String
943
oobPowerOff = Types.oobCommandToRaw OobPowerOff
944

    
945
oobPowerCycle :: String
946
oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
947

    
948
oobPowerStatus :: String
949
oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
950

    
951
oobHealth :: String
952
oobHealth = Types.oobCommandToRaw OobHealth
953

    
954
oobCommands :: FrozenSet String
955
oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
956

    
957
oobPowerStatusPowered :: String
958
oobPowerStatusPowered = "powered"
959

    
960
-- | 60 seconds
961
oobTimeout :: Int
962
oobTimeout = 60
963

    
964
-- | 2 seconds
965
oobPowerDelay :: Double
966
oobPowerDelay = 2.0
967

    
968
oobStatusCritical :: String
969
oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
970

    
971
oobStatusOk :: String
972
oobStatusOk = Types.oobStatusToRaw OobStatusOk
973

    
974
oobStatusUnknown :: String
975
oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
976

    
977
oobStatusWarning :: String
978
oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
979

    
980
oobStatuses :: FrozenSet String
981
oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
982

    
983
-- * NIC_* constants are used inside the ganeti config
984

    
985
nicLink :: String
986
nicLink = "link"
987

    
988
nicMode :: String
989
nicMode = "mode"
990

    
991
nicVlan :: String
992
nicVlan = "vlan"
993

    
994
nicModeBridged :: String
995
nicModeBridged = Types.nICModeToRaw NMBridged
996

    
997
nicModeRouted :: String
998
nicModeRouted = Types.nICModeToRaw NMRouted
999

    
1000
nicModeOvs :: String
1001
nicModeOvs = Types.nICModeToRaw NMOvs
1002

    
1003
nicIpPool :: String
1004
nicIpPool = Types.nICModeToRaw NMPool
1005

    
1006
nicValidModes :: FrozenSet String
1007
nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
1008

    
1009
-- * Hypervisor constants
1010

    
1011
htXenPvm :: String
1012
htXenPvm = Types.hypervisorToRaw XenPvm
1013

    
1014
htFake :: String
1015
htFake = Types.hypervisorToRaw Fake
1016

    
1017
htXenHvm :: String
1018
htXenHvm = Types.hypervisorToRaw XenHvm
1019

    
1020
htKvm :: String
1021
htKvm = Types.hypervisorToRaw Kvm
1022

    
1023
htChroot :: String
1024
htChroot = Types.hypervisorToRaw Chroot
1025

    
1026
htLxc :: String
1027
htLxc = Types.hypervisorToRaw Lxc
1028

    
1029
hyperTypes :: FrozenSet String
1030
hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
1031

    
1032
htsReqPort :: FrozenSet String
1033
htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
1034

    
1035
-- * Migration type
1036

    
1037
htMigrationLive :: String
1038
htMigrationLive = Types.migrationModeToRaw MigrationLive
1039

    
1040
htMigrationNonlive :: String
1041
htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
1042

    
1043
htMigrationModes :: FrozenSet String
1044
htMigrationModes =
1045
  ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
1046

    
1047
-- * Cluster verify steps
1048

    
1049
verifyNplusoneMem :: String
1050
verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
1051

    
1052
verifyOptionalChecks :: FrozenSet String
1053
verifyOptionalChecks =
1054
  ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
1055

    
1056
-- * Cluster Verify error classes
1057

    
1058
cvTcluster :: String
1059
cvTcluster = "cluster"
1060

    
1061
cvTgroup :: String
1062
cvTgroup = "group"
1063

    
1064
cvTnode :: String
1065
cvTnode = "node"
1066

    
1067
cvTinstance :: String
1068
cvTinstance = "instance"
1069

    
1070
-- * Cluster Verify error codes and documentation
1071

    
1072
cvEclustercert :: (String, String, String)
1073
cvEclustercert =
1074
  ("cluster",
1075
   Types.cVErrorCodeToRaw CvECLUSTERCERT,
1076
   "Cluster certificate files verification failure")
1077

    
1078
cvEclustercfg :: (String, String, String)
1079
cvEclustercfg =
1080
  ("cluster",
1081
   Types.cVErrorCodeToRaw CvECLUSTERCFG,
1082
   "Cluster configuration verification failure")
1083

    
1084
cvEclusterdanglinginst :: (String, String, String)
1085
cvEclusterdanglinginst =
1086
  ("node",
1087
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
1088
   "Some instances have a non-existing primary node")
1089

    
1090
cvEclusterdanglingnodes :: (String, String, String)
1091
cvEclusterdanglingnodes =
1092
  ("node",
1093
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
1094
   "Some nodes belong to non-existing groups")
1095

    
1096
cvEclusterfilecheck :: (String, String, String)
1097
cvEclusterfilecheck =
1098
  ("cluster",
1099
   Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
1100
   "Cluster configuration verification failure")
1101

    
1102
cvEgroupdifferentpvsize :: (String, String, String)
1103
cvEgroupdifferentpvsize =
1104
  ("group",
1105
   Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
1106
   "PVs in the group have different sizes")
1107

    
1108
cvEinstancebadnode :: (String, String, String)
1109
cvEinstancebadnode =
1110
  ("instance",
1111
   Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
1112
   "Instance marked as running lives on an offline node")
1113

    
1114
cvEinstancedown :: (String, String, String)
1115
cvEinstancedown =
1116
  ("instance",
1117
   Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
1118
   "Instance not running on its primary node")
1119

    
1120
cvEinstancefaultydisk :: (String, String, String)
1121
cvEinstancefaultydisk =
1122
  ("instance",
1123
   Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
1124
   "Impossible to retrieve status for a disk")
1125

    
1126
cvEinstancelayout :: (String, String, String)
1127
cvEinstancelayout =
1128
  ("instance",
1129
   Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
1130
   "Instance has multiple secondary nodes")
1131

    
1132
cvEinstancemissingcfgparameter :: (String, String, String)
1133
cvEinstancemissingcfgparameter =
1134
  ("instance",
1135
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
1136
   "A configuration parameter for an instance is missing")
1137

    
1138
cvEinstancemissingdisk :: (String, String, String)
1139
cvEinstancemissingdisk =
1140
  ("instance",
1141
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
1142
   "Missing volume on an instance")
1143

    
1144
cvEinstancepolicy :: (String, String, String)
1145
cvEinstancepolicy =
1146
  ("instance",
1147
   Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
1148
   "Instance does not meet policy")
1149

    
1150
cvEinstancesplitgroups :: (String, String, String)
1151
cvEinstancesplitgroups =
1152
  ("instance",
1153
   Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
1154
   "Instance with primary and secondary nodes in different groups")
1155

    
1156
cvEinstanceunsuitablenode :: (String, String, String)
1157
cvEinstanceunsuitablenode =
1158
  ("instance",
1159
   Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
1160
   "Instance running on nodes that are not suitable for it")
1161

    
1162
cvEinstancewrongnode :: (String, String, String)
1163
cvEinstancewrongnode =
1164
  ("instance",
1165
   Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
1166
   "Instance running on the wrong node")
1167

    
1168
cvEnodedrbd :: (String, String, String)
1169
cvEnodedrbd =
1170
  ("node",
1171
   Types.cVErrorCodeToRaw CvENODEDRBD,
1172
   "Error parsing the DRBD status file")
1173

    
1174
cvEnodedrbdhelper :: (String, String, String)
1175
cvEnodedrbdhelper =
1176
  ("node",
1177
   Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
1178
   "Error caused by the DRBD helper")
1179

    
1180
cvEnodedrbdversion :: (String, String, String)
1181
cvEnodedrbdversion =
1182
  ("node",
1183
   Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
1184
   "DRBD version mismatch within a node group")
1185

    
1186
cvEnodefilecheck :: (String, String, String)
1187
cvEnodefilecheck =
1188
  ("node",
1189
   Types.cVErrorCodeToRaw CvENODEFILECHECK,
1190
   "Error retrieving the checksum of the node files")
1191

    
1192
cvEnodefilestoragepaths :: (String, String, String)
1193
cvEnodefilestoragepaths =
1194
  ("node",
1195
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
1196
   "Detected bad file storage paths")
1197

    
1198
cvEnodefilestoragepathunusable :: (String, String, String)
1199
cvEnodefilestoragepathunusable =
1200
  ("node",
1201
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
1202
   "File storage path unusable")
1203

    
1204
cvEnodehooks :: (String, String, String)
1205
cvEnodehooks =
1206
  ("node",
1207
   Types.cVErrorCodeToRaw CvENODEHOOKS,
1208
   "Communication failure in hooks execution")
1209

    
1210
cvEnodehv :: (String, String, String)
1211
cvEnodehv =
1212
  ("node",
1213
   Types.cVErrorCodeToRaw CvENODEHV,
1214
   "Hypervisor parameters verification failure")
1215

    
1216
cvEnodelvm :: (String, String, String)
1217
cvEnodelvm =
1218
  ("node",
1219
   Types.cVErrorCodeToRaw CvENODELVM,
1220
   "LVM-related node error")
1221

    
1222
cvEnoden1 :: (String, String, String)
1223
cvEnoden1 =
1224
  ("node",
1225
   Types.cVErrorCodeToRaw CvENODEN1,
1226
   "Not enough memory to accommodate instance failovers")
1227

    
1228
cvEnodenet :: (String, String, String)
1229
cvEnodenet =
1230
  ("node",
1231
   Types.cVErrorCodeToRaw CvENODENET,
1232
   "Network-related node error")
1233

    
1234
cvEnodeoobpath :: (String, String, String)
1235
cvEnodeoobpath =
1236
  ("node",
1237
   Types.cVErrorCodeToRaw CvENODEOOBPATH,
1238
   "Invalid Out Of Band path")
1239

    
1240
cvEnodeorphaninstance :: (String, String, String)
1241
cvEnodeorphaninstance =
1242
  ("node",
1243
   Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
1244
   "Unknown intance running on a node")
1245

    
1246
cvEnodeorphanlv :: (String, String, String)
1247
cvEnodeorphanlv =
1248
  ("node",
1249
   Types.cVErrorCodeToRaw CvENODEORPHANLV,
1250
   "Unknown LVM logical volume")
1251

    
1252
cvEnodeos :: (String, String, String)
1253
cvEnodeos =
1254
  ("node",
1255
   Types.cVErrorCodeToRaw CvENODEOS,
1256
   "OS-related node error")
1257

    
1258
cvEnoderpc :: (String, String, String)
1259
cvEnoderpc =
1260
  ("node",
1261
   Types.cVErrorCodeToRaw CvENODERPC,
1262
   "Error during connection to the primary node of an instance")
1263

    
1264
cvEnodesetup :: (String, String, String)
1265
cvEnodesetup =
1266
  ("node",
1267
   Types.cVErrorCodeToRaw CvENODESETUP,
1268
   "Node setup error")
1269

    
1270
cvEnodesharedfilestoragepathunusable :: (String, String, String)
1271
cvEnodesharedfilestoragepathunusable =
1272
  ("node",
1273
   Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
1274
   "Shared file storage path unusable")
1275

    
1276
cvEnodessh :: (String, String, String)
1277
cvEnodessh =
1278
  ("node",
1279
   Types.cVErrorCodeToRaw CvENODESSH,
1280
   "SSH-related node error")
1281

    
1282
cvEnodetime :: (String, String, String)
1283
cvEnodetime =
1284
  ("node",
1285
   Types.cVErrorCodeToRaw CvENODETIME,
1286
   "Node returned invalid time")
1287

    
1288
cvEnodeuserscripts :: (String, String, String)
1289
cvEnodeuserscripts =
1290
  ("node",
1291
   Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
1292
   "User scripts not present or not executable")
1293

    
1294
cvEnodeversion :: (String, String, String)
1295
cvEnodeversion =
1296
  ("node",
1297
   Types.cVErrorCodeToRaw CvENODEVERSION,
1298
   "Protocol version mismatch or Ganeti version mismatch")
1299

    
1300
cvAllEcodes :: FrozenSet (String, String, String)
1301
cvAllEcodes =
1302
  ConstantUtils.mkSet
1303
  [cvEclustercert,
1304
   cvEclustercfg,
1305
   cvEclusterdanglinginst,
1306
   cvEclusterdanglingnodes,
1307
   cvEclusterfilecheck,
1308
   cvEgroupdifferentpvsize,
1309
   cvEinstancebadnode,
1310
   cvEinstancedown,
1311
   cvEinstancefaultydisk,
1312
   cvEinstancelayout,
1313
   cvEinstancemissingcfgparameter,
1314
   cvEinstancemissingdisk,
1315
   cvEinstancepolicy,
1316
   cvEinstancesplitgroups,
1317
   cvEinstanceunsuitablenode,
1318
   cvEinstancewrongnode,
1319
   cvEnodedrbd,
1320
   cvEnodedrbdhelper,
1321
   cvEnodedrbdversion,
1322
   cvEnodefilecheck,
1323
   cvEnodefilestoragepaths,
1324
   cvEnodefilestoragepathunusable,
1325
   cvEnodehooks,
1326
   cvEnodehv,
1327
   cvEnodelvm,
1328
   cvEnoden1,
1329
   cvEnodenet,
1330
   cvEnodeoobpath,
1331
   cvEnodeorphaninstance,
1332
   cvEnodeorphanlv,
1333
   cvEnodeos,
1334
   cvEnoderpc,
1335
   cvEnodesetup,
1336
   cvEnodesharedfilestoragepathunusable,
1337
   cvEnodessh,
1338
   cvEnodetime,
1339
   cvEnodeuserscripts,
1340
   cvEnodeversion]
1341

    
1342
cvAllEcodesStrings :: FrozenSet String
1343
cvAllEcodesStrings =
1344
  ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
1345

    
1346
-- * Instance status
1347

    
1348
inststAdmindown :: String
1349
inststAdmindown = Types.instanceStatusToRaw StatusDown
1350

    
1351
inststAdminoffline :: String
1352
inststAdminoffline = Types.instanceStatusToRaw StatusOffline
1353

    
1354
inststErrordown :: String
1355
inststErrordown = Types.instanceStatusToRaw ErrorDown
1356

    
1357
inststErrorup :: String
1358
inststErrorup = Types.instanceStatusToRaw ErrorUp
1359

    
1360
inststNodedown :: String
1361
inststNodedown = Types.instanceStatusToRaw NodeDown
1362

    
1363
inststNodeoffline :: String
1364
inststNodeoffline = Types.instanceStatusToRaw NodeOffline
1365

    
1366
inststRunning :: String
1367
inststRunning = Types.instanceStatusToRaw Running
1368

    
1369
inststWrongnode :: String
1370
inststWrongnode = Types.instanceStatusToRaw WrongNode
1371

    
1372
inststAll :: FrozenSet String
1373
inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
1374

    
1375
-- * Admin states
1376

    
1377
adminstDown :: String
1378
adminstDown = Types.adminStateToRaw AdminDown
1379

    
1380
adminstOffline :: String
1381
adminstOffline = Types.adminStateToRaw AdminOffline
1382

    
1383
adminstUp :: String
1384
adminstUp = Types.adminStateToRaw AdminUp
1385

    
1386
adminstAll :: FrozenSet String
1387
adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
1388

    
1389
-- * Node roles
1390

    
1391
nrDrained :: String
1392
nrDrained = Types.nodeRoleToRaw NRDrained
1393

    
1394
nrMaster :: String
1395
nrMaster = Types.nodeRoleToRaw NRMaster
1396

    
1397
nrMcandidate :: String
1398
nrMcandidate = Types.nodeRoleToRaw NRCandidate
1399

    
1400
nrOffline :: String
1401
nrOffline = Types.nodeRoleToRaw NROffline
1402

    
1403
nrRegular :: String
1404
nrRegular = Types.nodeRoleToRaw NRRegular
1405

    
1406
nrAll :: FrozenSet String
1407
nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
1408

    
1409
-- * Allocator framework constants
1410

    
1411
iallocatorVersion :: Int
1412
iallocatorVersion = 2
1413

    
1414
iallocatorDirIn :: String
1415
iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
1416

    
1417
iallocatorDirOut :: String
1418
iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
1419

    
1420
validIallocatorDirections :: FrozenSet String
1421
validIallocatorDirections =
1422
  ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
1423

    
1424
iallocatorModeAlloc :: String
1425
iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
1426

    
1427
iallocatorModeChgGroup :: String
1428
iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
1429

    
1430
iallocatorModeMultiAlloc :: String
1431
iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
1432

    
1433
iallocatorModeNodeEvac :: String
1434
iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
1435

    
1436
iallocatorModeReloc :: String
1437
iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
1438

    
1439
validIallocatorModes :: FrozenSet String
1440
validIallocatorModes =
1441
  ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
1442

    
1443
iallocatorSearchPath :: [String]
1444
iallocatorSearchPath = AutoConf.iallocatorSearchPath
1445

    
1446
defaultIallocatorShortcut :: String
1447
defaultIallocatorShortcut = "."
1448

    
1449
-- * Node evacuation
1450

    
1451
nodeEvacPri :: String
1452
nodeEvacPri = Types.evacModeToRaw ChangePrimary
1453

    
1454
nodeEvacSec :: String
1455
nodeEvacSec = Types.evacModeToRaw ChangeSecondary
1456

    
1457
nodeEvacAll :: String
1458
nodeEvacAll = Types.evacModeToRaw ChangeAll
1459

    
1460
nodeEvacModes :: FrozenSet String
1461
nodeEvacModes = ConstantUtils.mkSet $ map Types.evacModeToRaw [minBound..]
1462

    
1463
-- * Job status
1464

    
1465
jobStatusQueued :: String
1466
jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
1467

    
1468
jobStatusWaiting :: String
1469
jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
1470

    
1471
jobStatusCanceling :: String
1472
jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
1473

    
1474
jobStatusRunning :: String
1475
jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
1476

    
1477
jobStatusCanceled :: String
1478
jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
1479

    
1480
jobStatusSuccess :: String
1481
jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
1482

    
1483
jobStatusError :: String
1484
jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
1485

    
1486
jobsPending :: FrozenSet String
1487
jobsPending =
1488
  ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
1489

    
1490
jobsFinalized :: FrozenSet String
1491
jobsFinalized =
1492
  ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
1493

    
1494
jobStatusAll :: FrozenSet String
1495
jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
1496

    
1497
-- * OpCode status
1498

    
1499
-- ** Not yet finalized opcodes
1500

    
1501
opStatusCanceling :: String
1502
opStatusCanceling = "canceling"
1503

    
1504
opStatusQueued :: String
1505
opStatusQueued = "queued"
1506

    
1507
opStatusRunning :: String
1508
opStatusRunning = "running"
1509

    
1510
opStatusWaiting :: String
1511
opStatusWaiting = "waiting"
1512

    
1513
-- ** Finalized opcodes
1514

    
1515
opStatusCanceled :: String
1516
opStatusCanceled = "canceled"
1517

    
1518
opStatusError :: String
1519
opStatusError = "error"
1520

    
1521
opStatusSuccess :: String
1522
opStatusSuccess = "success"
1523

    
1524
opsFinalized :: FrozenSet String
1525
opsFinalized =
1526
  ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
1527

    
1528
-- * OpCode priority
1529

    
1530
opPrioLowest :: Int
1531
opPrioLowest = 19
1532

    
1533
opPrioHighest :: Int
1534
opPrioHighest = -20
1535

    
1536
opPrioLow :: Int
1537
opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
1538

    
1539
opPrioNormal :: Int
1540
opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
1541

    
1542
opPrioHigh :: Int
1543
opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
1544

    
1545
opPrioSubmitValid :: FrozenSet Int
1546
opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
1547

    
1548
opPrioDefault :: Int
1549
opPrioDefault = opPrioNormal
1550

    
1551
-- * Execution log types
1552

    
1553
elogMessage :: String
1554
elogMessage = Types.eLogTypeToRaw ELogMessage
1555

    
1556
elogRemoteImport :: String
1557
elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
1558

    
1559
elogJqueueTest :: String
1560
elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
1561

    
1562
-- * Confd
1563

    
1564
confdProtocolVersion :: Int
1565
confdProtocolVersion = ConstantUtils.confdProtocolVersion
1566

    
1567
-- Confd request type
1568

    
1569
confdReqPing :: Int
1570
confdReqPing = Types.confdRequestTypeToRaw ReqPing
1571

    
1572
confdReqNodeRoleByname :: Int
1573
confdReqNodeRoleByname = Types.confdRequestTypeToRaw ReqNodeRoleByName
1574

    
1575
confdReqNodePipByInstanceIp :: Int
1576
confdReqNodePipByInstanceIp = Types.confdRequestTypeToRaw ReqNodePipByInstPip
1577

    
1578
confdReqClusterMaster :: Int
1579
confdReqClusterMaster = Types.confdRequestTypeToRaw ReqClusterMaster
1580

    
1581
confdReqNodePipList :: Int
1582
confdReqNodePipList = Types.confdRequestTypeToRaw ReqNodePipList
1583

    
1584
confdReqMcPipList :: Int
1585
confdReqMcPipList = Types.confdRequestTypeToRaw ReqMcPipList
1586

    
1587
confdReqInstancesIpsList :: Int
1588
confdReqInstancesIpsList = Types.confdRequestTypeToRaw ReqInstIpsList
1589

    
1590
confdReqNodeDrbd :: Int
1591
confdReqNodeDrbd = Types.confdRequestTypeToRaw ReqNodeDrbd
1592

    
1593
confdReqNodeInstances :: Int
1594
confdReqNodeInstances = Types.confdRequestTypeToRaw ReqNodeInstances
1595

    
1596
confdReqs :: FrozenSet Int
1597
confdReqs =
1598
  ConstantUtils.mkSet .
1599
  map Types.confdRequestTypeToRaw $
1600
  [minBound..] \\ [ReqNodeInstances]
1601

    
1602
-- * Confd request type
1603

    
1604
confdReqfieldName :: Int
1605
confdReqfieldName = Types.confdReqFieldToRaw ReqFieldName
1606

    
1607
confdReqfieldIp :: Int
1608
confdReqfieldIp = Types.confdReqFieldToRaw ReqFieldIp
1609

    
1610
confdReqfieldMnodePip :: Int
1611
confdReqfieldMnodePip = Types.confdReqFieldToRaw ReqFieldMNodePip
1612

    
1613
-- * Confd repl status
1614

    
1615
confdReplStatusOk :: Int
1616
confdReplStatusOk = Types.confdReplyStatusToRaw ReplyStatusOk
1617

    
1618
confdReplStatusError :: Int
1619
confdReplStatusError = Types.confdReplyStatusToRaw ReplyStatusError
1620

    
1621
confdReplStatusNotimplemented :: Int
1622
confdReplStatusNotimplemented = Types.confdReplyStatusToRaw ReplyStatusNotImpl
1623

    
1624
confdReplStatuses :: FrozenSet Int
1625
confdReplStatuses =
1626
  ConstantUtils.mkSet $ map Types.confdReplyStatusToRaw [minBound..]
1627

    
1628
-- * Confd node role
1629

    
1630
confdNodeRoleMaster :: Int
1631
confdNodeRoleMaster = Types.confdNodeRoleToRaw NodeRoleMaster
1632

    
1633
confdNodeRoleCandidate :: Int
1634
confdNodeRoleCandidate = Types.confdNodeRoleToRaw NodeRoleCandidate
1635

    
1636
confdNodeRoleOffline :: Int
1637
confdNodeRoleOffline = Types.confdNodeRoleToRaw NodeRoleOffline
1638

    
1639
confdNodeRoleDrained :: Int
1640
confdNodeRoleDrained = Types.confdNodeRoleToRaw NodeRoleDrained
1641

    
1642
confdNodeRoleRegular :: Int
1643
confdNodeRoleRegular = Types.confdNodeRoleToRaw NodeRoleRegular
1644

    
1645
-- * A few common errors for confd
1646

    
1647
confdErrorUnknownEntry :: Int
1648
confdErrorUnknownEntry = Types.confdErrorTypeToRaw ConfdErrorUnknownEntry
1649

    
1650
confdErrorInternal :: Int
1651
confdErrorInternal = Types.confdErrorTypeToRaw ConfdErrorInternal
1652

    
1653
confdErrorArgument :: Int
1654
confdErrorArgument = Types.confdErrorTypeToRaw ConfdErrorArgument
1655

    
1656
-- * Confd request query fields
1657

    
1658
confdReqqLink :: String
1659
confdReqqLink = ConstantUtils.confdReqqLink
1660

    
1661
confdReqqIp :: String
1662
confdReqqIp = ConstantUtils.confdReqqIp
1663

    
1664
confdReqqIplist :: String
1665
confdReqqIplist = ConstantUtils.confdReqqIplist
1666

    
1667
confdReqqFields :: String
1668
confdReqqFields = ConstantUtils.confdReqqFields
1669

    
1670
-- | Each request is "salted" by the current timestamp.
1671
--
1672
-- This constant decides how many seconds of skew to accept.
1673
--
1674
-- TODO: make this a default and allow the value to be more
1675
-- configurable
1676
confdMaxClockSkew :: Int
1677
confdMaxClockSkew = 2 * nodeMaxClockSkew
1678

    
1679
-- | When we haven't reloaded the config for more than this amount of
1680
-- seconds, we force a test to see if inotify is betraying us. Using a
1681
-- prime number to ensure we get less chance of 'same wakeup' with
1682
-- other processes.
1683
confdConfigReloadTimeout :: Int
1684
confdConfigReloadTimeout = 17
1685

    
1686
-- | If we receive more than one update in this amount of
1687
-- microseconds, we move to polling every RATELIMIT seconds, rather
1688
-- than relying on inotify, to be able to serve more requests.
1689
confdConfigReloadRatelimit :: Int
1690
confdConfigReloadRatelimit = 250000
1691

    
1692
-- | Magic number prepended to all confd queries.
1693
--
1694
-- This allows us to distinguish different types of confd protocols
1695
-- and handle them. For example by changing this we can move the whole
1696
-- payload to be compressed, or move away from json.
1697
confdMagicFourcc :: String
1698
confdMagicFourcc = "plj0"
1699

    
1700
-- | By default a confd request is sent to the minimum between this
1701
-- number and all MCs. 6 was chosen because even in the case of a
1702
-- disastrous 50% response rate, we should have enough answers to be
1703
-- able to compare more than one.
1704
confdDefaultReqCoverage :: Int
1705
confdDefaultReqCoverage = 6
1706

    
1707
-- | Timeout in seconds to expire pending query request in the confd
1708
-- client library. We don't actually expect any answer more than 10
1709
-- seconds after we sent a request.
1710
confdClientExpireTimeout :: Int
1711
confdClientExpireTimeout = 10
1712

    
1713
-- * Possible values for NodeGroup.alloc_policy
1714

    
1715
allocPolicyLastResort :: String
1716
allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
1717

    
1718
allocPolicyPreferred :: String
1719
allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
1720

    
1721
allocPolicyUnallocable :: String
1722
allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
1723

    
1724
validAllocPolicies :: [String]
1725
validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
1726

    
1727
-- | Temporary external/shared storage parameters
1728
blockdevDriverManual :: String
1729
blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
1730

    
1731
-- | 'qemu-img' path, required for 'ovfconverter'
1732
qemuimgPath :: String
1733
qemuimgPath = AutoConf.qemuimgPath
1734

    
1735
-- | Whether htools was enabled at compilation time
1736
--
1737
-- FIXME: this should be moved next to the other enable constants,
1738
-- such as, 'enableConfd', and renamed to 'enableHtools'.
1739
htools :: Bool
1740
htools = AutoConf.htools
1741

    
1742
-- * Key files for SSH daemon
1743

    
1744
sshHostDsaPriv :: String
1745
sshHostDsaPriv = sshConfigDir ++ "/ssh_host_dsa_key"
1746

    
1747
sshHostDsaPub :: String
1748
sshHostDsaPub = sshHostDsaPriv ++ ".pub"
1749

    
1750
sshHostRsaPriv :: String
1751
sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key"
1752

    
1753
sshHostRsaPub :: String
1754
sshHostRsaPub = sshHostRsaPriv ++ ".pub"
1755

    
1756
-- | Path generating random UUID
1757
randomUuidFile :: String
1758
randomUuidFile = ConstantUtils.randomUuidFile
1759

    
1760
-- * Auto-repair tag prefixes
1761

    
1762
autoRepairTagPrefix :: String
1763
autoRepairTagPrefix = "ganeti:watcher:autorepair:"
1764

    
1765
autoRepairTagEnabled :: String
1766
autoRepairTagEnabled = autoRepairTagPrefix
1767

    
1768
autoRepairTagPending :: String
1769
autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
1770

    
1771
autoRepairTagResult :: String
1772
autoRepairTagResult = autoRepairTagPrefix ++ "result:"
1773

    
1774
autoRepairTagSuspended :: String
1775
autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
1776

    
1777
-- * Auto-repair levels
1778

    
1779
autoRepairFailover :: String
1780
autoRepairFailover = "failover"
1781

    
1782
autoRepairFixStorage :: String
1783
autoRepairFixStorage = "fix-storage"
1784

    
1785
autoRepairMigrate :: String
1786
autoRepairMigrate = "migrate"
1787

    
1788
autoRepairReinstall :: String
1789
autoRepairReinstall = "reinstall"
1790

    
1791
autoRepairAllTypes :: FrozenSet String
1792
autoRepairAllTypes =
1793
  ConstantUtils.mkSet [autoRepairFailover,
1794
                       autoRepairFixStorage,
1795
                       autoRepairMigrate,
1796
                       autoRepairReinstall]
1797

    
1798
-- * Auto-repair results
1799

    
1800
autoRepairEnoperm :: String
1801
autoRepairEnoperm = "enoperm"
1802

    
1803
autoRepairFailure :: String
1804
autoRepairFailure = "failure"
1805

    
1806
autoRepairSuccess :: String
1807
autoRepairSuccess = "success"
1808

    
1809
autoRepairAllResults :: FrozenSet String
1810
autoRepairAllResults =
1811
  ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
1812

    
1813
-- | The version identifier for builtin data collectors
1814
builtinDataCollectorVersion :: String
1815
builtinDataCollectorVersion = "B"
1816

    
1817
-- | The reason trail opcode parameter name
1818
opcodeReason :: String
1819
opcodeReason = "reason"
1820

    
1821
diskstatsFile :: String
1822
diskstatsFile = "/proc/diskstats"
1823

    
1824
-- *  CPU load collector
1825

    
1826
statFile :: String
1827
statFile = "/proc/stat"
1828

    
1829
cpuavgloadBufferSize :: Int
1830
cpuavgloadBufferSize = 150
1831

    
1832
cpuavgloadWindowSize :: Int
1833
cpuavgloadWindowSize = 600
1834

    
1835
-- | Mond's variable for periodical data collection
1836
mondTimeInterval :: Int
1837
mondTimeInterval = 5
1838

    
1839
-- * Disk access modes
1840

    
1841
diskUserspace :: String
1842
diskUserspace = Types.diskAccessModeToRaw DiskUserspace
1843

    
1844
diskKernelspace :: String
1845
diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
1846

    
1847
diskValidAccessModes :: FrozenSet String
1848
diskValidAccessModes =
1849
  ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
1850

    
1851
-- | Timeout for queue draining in upgrades
1852
upgradeQueueDrainTimeout :: Int
1853
upgradeQueueDrainTimeout = 36 * 60 * 60 -- 1.5 days
1854

    
1855
-- | Intervall at which the queue is polled during upgrades
1856
upgradeQueuePollInterval :: Int
1857
upgradeQueuePollInterval  = 10