Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / HsConstants.hs @ d7754dad

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

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

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

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

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

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

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

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

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

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

    
82
-- ** Build-time constants
83

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
131
-- * Various versions
132

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

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

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

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

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

    
148
osApiV10 :: Int
149
osApiV10 = 10
150

    
151
osApiV15 :: Int
152
osApiV15 = 15
153

    
154
osApiV20 :: Int
155
osApiV20 = 20
156

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

    
160
exportVersion :: Int
161
exportVersion = 0
162

    
163
rapiVersion :: Int
164
rapiVersion = 2
165

    
166
configMajor :: Int
167
configMajor = AutoConf.versionMajor
168

    
169
configMinor :: Int
170
configMinor = AutoConf.versionMinor
171

    
172
-- | The configuration is supposed to remain stable across
173
-- revisions. Therefore, the revision number is cleared to '0'.
174
configRevision :: Int
175
configRevision = 0
176

    
177
configVersion :: Int
178
configVersion = buildVersion configMajor configMinor configRevision
179

    
180
-- | Similarly to the configuration (see 'configRevision'), the
181
-- protocols are supposed to remain stable across revisions.
182
protocolVersion :: Int
183
protocolVersion = buildVersion configMajor configMinor configRevision
184

    
185
-- * User separation
186

    
187
daemonsGroup :: String
188
daemonsGroup = Runtime.daemonGroup (ExtraGroup DaemonsGroup)
189

    
190
adminGroup :: String
191
adminGroup = Runtime.daemonGroup (ExtraGroup AdminGroup)
192

    
193
masterdUser :: String
194
masterdUser = Runtime.daemonUser GanetiMasterd
195

    
196
masterdGroup :: String
197
masterdGroup = Runtime.daemonGroup (DaemonGroup GanetiMasterd)
198

    
199
rapiUser :: String
200
rapiUser = Runtime.daemonUser GanetiRapi
201

    
202
rapiGroup :: String
203
rapiGroup = Runtime.daemonGroup (DaemonGroup GanetiRapi)
204

    
205
confdUser :: String
206
confdUser = Runtime.daemonUser GanetiConfd
207

    
208
confdGroup :: String
209
confdGroup = Runtime.daemonGroup (DaemonGroup GanetiConfd)
210

    
211
luxidUser :: String
212
luxidUser = Runtime.daemonUser GanetiLuxid
213

    
214
luxidGroup :: String
215
luxidGroup = Runtime.daemonGroup (DaemonGroup GanetiLuxid)
216

    
217
nodedUser :: String
218
nodedUser = Runtime.daemonUser GanetiNoded
219

    
220
nodedGroup :: String
221
nodedGroup = Runtime.daemonGroup (DaemonGroup GanetiNoded)
222

    
223
mondUser :: String
224
mondUser = Runtime.daemonUser GanetiMond
225

    
226
mondGroup :: String
227
mondGroup = Runtime.daemonGroup (DaemonGroup GanetiMond)
228

    
229
sshLoginUser :: String
230
sshLoginUser = AutoConf.sshLoginUser
231

    
232
sshConsoleUser :: String
233
sshConsoleUser = AutoConf.sshConsoleUser
234

    
235
-- * Cpu pinning separators and constants
236

    
237
cpuPinningSep :: String
238
cpuPinningSep = ":"
239

    
240
cpuPinningAll :: String
241
cpuPinningAll = "all"
242

    
243
-- | Internal representation of "all"
244
cpuPinningAllVal :: Int
245
cpuPinningAllVal = -1
246

    
247
-- | One "all" entry in a CPU list means CPU pinning is off
248
cpuPinningOff :: [Int]
249
cpuPinningOff = [cpuPinningAllVal]
250

    
251
-- | A Xen-specific implementation detail is that there is no way to
252
-- actually say "use any cpu for pinning" in a Xen configuration file,
253
-- as opposed to the command line, where you can say
254
-- @
255
-- xm vcpu-pin <domain> <vcpu> all
256
-- @
257
--
258
-- The workaround used in Xen is "0-63" (see source code function
259
-- "xm_vcpu_pin" in @<xen-source>/tools/python/xen/xm/main.py@).
260
--
261
-- To support future changes, the following constant is treated as a
262
-- blackbox string that simply means "use any cpu for pinning under
263
-- xen".
264
cpuPinningAllXen :: String
265
cpuPinningAllXen = "0-63"
266

    
267
-- | A KVM-specific implementation detail - the following value is
268
-- used to set CPU affinity to all processors (--0 through --31), per
269
-- taskset man page.
270
--
271
-- FIXME: This only works for machines with up to 32 CPU cores
272
cpuPinningAllKvm :: Int
273
cpuPinningAllKvm = 0xFFFFFFFF
274

    
275
-- * Wipe
276

    
277
ddCmd :: String
278
ddCmd = "dd"
279

    
280
-- | 1GB
281
maxWipeChunk :: Int
282
maxWipeChunk = 1024
283

    
284
minWipeChunkPercent :: Int
285
minWipeChunkPercent = 10
286

    
287
-- * Directories
288

    
289
runDirsMode :: Int
290
runDirsMode = 0o775
291

    
292
secureDirMode :: Int
293
secureDirMode = 0o700
294

    
295
secureFileMode :: Int
296
secureFileMode = 0o600
297

    
298
adoptableBlockdevRoot :: String
299
adoptableBlockdevRoot = "/dev/disk/"
300

    
301
-- * 'autoconf' enable/disable
302

    
303
enableConfd :: Bool
304
enableConfd = AutoConf.enableConfd
305

    
306
enableMond :: Bool
307
enableMond = AutoConf.enableMond
308

    
309
enableRestrictedCommands :: Bool
310
enableRestrictedCommands = AutoConf.enableRestrictedCommands
311

    
312
enableSplitQuery :: Bool
313
enableSplitQuery = AutoConf.enableSplitQuery
314

    
315
-- * SSH constants
316

    
317
ssh :: String
318
ssh = "ssh"
319

    
320
scp :: String
321
scp = "scp"
322

    
323
-- * Daemons
324

    
325
confd :: String
326
confd = Runtime.daemonName GanetiConfd
327

    
328
masterd :: String
329
masterd = Runtime.daemonName GanetiMasterd
330

    
331
mond :: String
332
mond = Runtime.daemonName GanetiMond
333

    
334
noded :: String
335
noded = Runtime.daemonName GanetiNoded
336

    
337
luxid :: String
338
luxid = Runtime.daemonName GanetiLuxid
339

    
340
rapi :: String
341
rapi = Runtime.daemonName GanetiRapi
342

    
343
daemons :: FrozenSet String
344
daemons =
345
  ConstantUtils.mkSet [confd,
346
                       luxid,
347
                       masterd,
348
                       mond,
349
                       noded,
350
                       rapi]
351

    
352
defaultConfdPort :: Int
353
defaultConfdPort = 1814
354

    
355
defaultMondPort :: Int
356
defaultMondPort = 1815
357

    
358
defaultNodedPort :: Int
359
defaultNodedPort = 1811
360

    
361
defaultRapiPort :: Int
362
defaultRapiPort = 5080
363

    
364
daemonsPorts :: Map String (Protocol, Int)
365
daemonsPorts =
366
  Map.fromList [(confd, (Udp, defaultConfdPort)),
367
                (mond, (Tcp, defaultMondPort)),
368
                (noded, (Tcp, defaultNodedPort)),
369
                (rapi, (Tcp, defaultRapiPort)),
370
                (ssh, (Tcp, 22))]
371

    
372
firstDrbdPort :: Int
373
firstDrbdPort = 11000
374

    
375
lastDrbdPort :: Int
376
lastDrbdPort = 14999
377

    
378
daemonsLogbase :: Map String String
379
daemonsLogbase =
380
  Map.fromList
381
  [ (Runtime.daemonName d, Runtime.daemonLogBase d) | d <- [minBound..] ]
382

    
383
extraLogreasonAccess :: String
384
extraLogreasonAccess = Runtime.daemonsExtraLogbase GanetiMond AccessLog
385

    
386
extraLogreasonError :: String
387
extraLogreasonError = Runtime.daemonsExtraLogbase GanetiMond ErrorLog
388

    
389
devConsole :: String
390
devConsole = ConstantUtils.devConsole
391

    
392
procMounts :: String
393
procMounts = "/proc/mounts"
394

    
395
-- * Luxi (Local UniX Interface) related constants
396

    
397
luxiEom :: PythonChar
398
luxiEom = PythonChar '\x03'
399

    
400
-- | Environment variable for the luxi override socket
401
luxiOverride :: String
402
luxiOverride = "FORCE_LUXI_SOCKET"
403

    
404
luxiOverrideMaster :: String
405
luxiOverrideMaster = "master"
406

    
407
luxiOverrideQuery :: String
408
luxiOverrideQuery = "query"
409

    
410
luxiVersion :: Int
411
luxiVersion = configVersion
412

    
413
-- * Syslog
414

    
415
syslogUsage :: String
416
syslogUsage = AutoConf.syslogUsage
417

    
418
syslogNo :: String
419
syslogNo = Logging.syslogUsageToRaw SyslogNo
420

    
421
syslogYes :: String
422
syslogYes = Logging.syslogUsageToRaw SyslogYes
423

    
424
syslogOnly :: String
425
syslogOnly = Logging.syslogUsageToRaw SyslogOnly
426

    
427
syslogSocket :: String
428
syslogSocket = "/dev/log"
429

    
430
exportConfFile :: String
431
exportConfFile = "config.ini"
432

    
433
-- * Xen
434

    
435
xenBootloader :: String
436
xenBootloader = AutoConf.xenBootloader
437

    
438
xenCmdXl :: String
439
xenCmdXl = "xl"
440

    
441
xenCmdXm :: String
442
xenCmdXm = "xm"
443

    
444
xenInitrd :: String
445
xenInitrd = AutoConf.xenInitrd
446

    
447
xenKernel :: String
448
xenKernel = AutoConf.xenKernel
449

    
450
-- FIXME: perhaps rename to 'validXenCommands' for consistency with
451
-- other constants
452
knownXenCommands :: FrozenSet String
453
knownXenCommands = ConstantUtils.mkSet [xenCmdXl, xenCmdXm]
454

    
455
-- * KVM and socat
456

    
457
kvmPath :: String
458
kvmPath = AutoConf.kvmPath
459

    
460
kvmKernel :: String
461
kvmKernel = AutoConf.kvmKernel
462

    
463
socatEscapeCode :: String
464
socatEscapeCode = "0x1d"
465

    
466
socatPath :: String
467
socatPath = AutoConf.socatPath
468

    
469
socatUseCompress :: Bool
470
socatUseCompress = AutoConf.socatUseCompress
471

    
472
socatUseEscape :: Bool
473
socatUseEscape = AutoConf.socatUseEscape
474

    
475
-- * Console types
476

    
477
-- | Display a message for console access
478
consMessage :: String
479
consMessage = "msg"
480

    
481
-- | Console as SPICE server
482
consSpice :: String
483
consSpice = "spice"
484

    
485
-- | Console as SSH command
486
consSsh :: String
487
consSsh = "ssh"
488

    
489
-- | Console as VNC server
490
consVnc :: String
491
consVnc = "vnc"
492

    
493
consAll :: FrozenSet String
494
consAll = ConstantUtils.mkSet [consMessage, consSpice, consSsh, consVnc]
495

    
496
-- | RSA key bit length
497
--
498
-- For RSA keys more bits are better, but they also make operations
499
-- more expensive. NIST SP 800-131 recommends a minimum of 2048 bits
500
-- from the year 2010 on.
501
rsaKeyBits :: Int
502
rsaKeyBits = 2048
503

    
504
-- | Ciphers allowed for SSL connections.
505
--
506
-- For the format, see ciphers(1). A better way to disable ciphers
507
-- would be to use the exclamation mark (!), but socat versions below
508
-- 1.5 can't parse exclamation marks in options properly. When
509
-- modifying the ciphers, ensure not to accidentially add something
510
-- after it's been removed. Use the "openssl" utility to check the
511
-- allowed ciphers, e.g.  "openssl ciphers -v HIGH:-DES".
512
opensslCiphers :: String
513
opensslCiphers = "HIGH:-DES:-3DES:-EXPORT:-ADH"
514

    
515
-- * X509
516

    
517
-- | commonName (CN) used in certificates
518
x509CertCn :: String
519
x509CertCn = "ganeti.example.com"
520

    
521
-- | Default validity of certificates in days
522
x509CertDefaultValidity :: Int
523
x509CertDefaultValidity = 365 * 5
524

    
525
x509CertSignatureHeader :: String
526
x509CertSignatureHeader = "X-Ganeti-Signature"
527

    
528
-- | Digest used to sign certificates ("openssl x509" uses SHA1 by default)
529
x509CertSignDigest :: String
530
x509CertSignDigest = "SHA1"
531

    
532
-- * Import/export daemon mode
533

    
534
iemExport :: String
535
iemExport = "export"
536

    
537
iemImport :: String
538
iemImport = "import"
539

    
540
-- * Import/export transport compression
541

    
542
iecGzip :: String
543
iecGzip = "gzip"
544

    
545
iecNone :: String
546
iecNone = "none"
547

    
548
iecAll :: [String]
549
iecAll = [iecGzip, iecNone]
550

    
551
ieCustomSize :: String
552
ieCustomSize = "fd"
553

    
554
-- * Import/export I/O
555

    
556
-- | Direct file I/O, equivalent to a shell's I/O redirection using
557
-- '<' or '>'
558
ieioFile :: String
559
ieioFile = "file"
560

    
561
-- | Raw block device I/O using "dd"
562
ieioRawDisk :: String
563
ieioRawDisk = "raw"
564

    
565
-- | OS definition import/export script
566
ieioScript :: String
567
ieioScript = "script"
568

    
569
-- * Hooks
570

    
571
hooksNameCfgupdate :: String
572
hooksNameCfgupdate = "config-update"
573

    
574
hooksNameWatcher :: String
575
hooksNameWatcher = "watcher"
576

    
577
hooksPath :: String
578
hooksPath = "/sbin:/bin:/usr/sbin:/usr/bin"
579

    
580
hooksPhasePost :: String
581
hooksPhasePost = "post"
582

    
583
hooksPhasePre :: String
584
hooksPhasePre = "pre"
585

    
586
hooksVersion :: Int
587
hooksVersion = 2
588

    
589
-- * Hooks subject type (what object type does the LU deal with)
590

    
591
htypeCluster :: String
592
htypeCluster = "CLUSTER"
593

    
594
htypeGroup :: String
595
htypeGroup = "GROUP"
596

    
597
htypeInstance :: String
598
htypeInstance = "INSTANCE"
599

    
600
htypeNetwork :: String
601
htypeNetwork = "NETWORK"
602

    
603
htypeNode :: String
604
htypeNode = "NODE"
605

    
606
-- * Hkr
607

    
608
hkrSkip :: Int
609
hkrSkip = 0
610

    
611
hkrFail :: Int
612
hkrFail = 1
613

    
614
hkrSuccess :: Int
615
hkrSuccess = 2
616

    
617
-- * Storage types
618

    
619
stBlock :: String
620
stBlock = Types.storageTypeToRaw StorageBlock
621

    
622
stDiskless :: String
623
stDiskless = Types.storageTypeToRaw StorageDiskless
624

    
625
stExt :: String
626
stExt = Types.storageTypeToRaw StorageExt
627

    
628
stFile :: String
629
stFile = Types.storageTypeToRaw StorageFile
630

    
631
stLvmPv :: String
632
stLvmPv = Types.storageTypeToRaw StorageLvmPv
633

    
634
stLvmVg :: String
635
stLvmVg = Types.storageTypeToRaw StorageLvmVg
636

    
637
stRados :: String
638
stRados = Types.storageTypeToRaw StorageRados
639

    
640
storageTypes :: FrozenSet String
641
storageTypes = ConstantUtils.mkSet $ map Types.storageTypeToRaw [minBound..]
642

    
643
-- | The set of storage types for which storage reporting is available
644
--
645
-- FIXME: Remove this, once storage reporting is available for all
646
-- types.
647
stsReport :: FrozenSet String
648
stsReport = ConstantUtils.mkSet [stFile, stLvmPv, stLvmVg]
649

    
650
-- * Storage fields
651
-- ** First two are valid in LU context only, not passed to backend
652

    
653
sfNode :: String
654
sfNode = "node"
655

    
656
sfType :: String
657
sfType = "type"
658

    
659
-- ** and the rest are valid in backend
660

    
661
sfAllocatable :: String
662
sfAllocatable = Types.storageFieldToRaw SFAllocatable
663

    
664
sfFree :: String
665
sfFree = Types.storageFieldToRaw SFFree
666

    
667
sfName :: String
668
sfName = Types.storageFieldToRaw SFName
669

    
670
sfSize :: String
671
sfSize = Types.storageFieldToRaw SFSize
672

    
673
sfUsed :: String
674
sfUsed = Types.storageFieldToRaw SFUsed
675

    
676
validStorageFields :: FrozenSet String
677
validStorageFields =
678
  ConstantUtils.mkSet $ map Types.storageFieldToRaw [minBound..] ++
679
                        [sfNode, sfType]
680

    
681
modifiableStorageFields :: Map String (FrozenSet String)
682
modifiableStorageFields =
683
  Map.fromList [(Types.storageTypeToRaw StorageLvmPv,
684
                 ConstantUtils.mkSet [sfAllocatable])]
685

    
686
-- * Storage operations
687

    
688
soFixConsistency :: String
689
soFixConsistency = "fix-consistency"
690

    
691
validStorageOperations :: Map String (FrozenSet String)
692
validStorageOperations =
693
  Map.fromList [(Types.storageTypeToRaw StorageLvmVg,
694
                 ConstantUtils.mkSet [soFixConsistency])]
695

    
696
-- * Volume fields
697

    
698
vfDev :: String
699
vfDev = "dev"
700

    
701
vfInstance :: String
702
vfInstance = "instance"
703

    
704
vfName :: String
705
vfName = "name"
706

    
707
vfNode :: String
708
vfNode = "node"
709

    
710
vfPhys :: String
711
vfPhys = "phys"
712

    
713
vfSize :: String
714
vfSize = "size"
715

    
716
vfVg :: String
717
vfVg = "vg"
718

    
719
-- * Local disk status
720

    
721
ldsFaulty :: Int
722
ldsFaulty = Types.localDiskStatusToRaw DiskStatusFaulty
723

    
724
ldsOkay :: Int
725
ldsOkay = Types.localDiskStatusToRaw DiskStatusOk
726

    
727
ldsUnknown :: Int
728
ldsUnknown = Types.localDiskStatusToRaw DiskStatusUnknown
729

    
730
ldsNames :: Map Int String
731
ldsNames =
732
  Map.fromList [ (Types.localDiskStatusToRaw ds,
733
                  localDiskStatusName ds) | ds <- [minBound..] ]
734

    
735
-- * Disk template types
736

    
737
dtDiskless :: String
738
dtDiskless = Types.diskTemplateToRaw DTDiskless
739

    
740
dtFile :: String
741
dtFile = Types.diskTemplateToRaw DTFile
742

    
743
dtSharedFile :: String
744
dtSharedFile = Types.diskTemplateToRaw DTSharedFile
745

    
746
dtPlain :: String
747
dtPlain = Types.diskTemplateToRaw DTPlain
748

    
749
dtBlock :: String
750
dtBlock = Types.diskTemplateToRaw DTBlock
751

    
752
dtDrbd8 :: String
753
dtDrbd8 = Types.diskTemplateToRaw DTDrbd8
754

    
755
dtRbd :: String
756
dtRbd = Types.diskTemplateToRaw DTRbd
757

    
758
dtExt :: String
759
dtExt = Types.diskTemplateToRaw DTExt
760

    
761
-- | This is used to order determine the default disk template when
762
-- the list of enabled disk templates is inferred from the current
763
-- state of the cluster.  This only happens on an upgrade from a
764
-- version of Ganeti that did not support the 'enabled_disk_templates'
765
-- so far.
766
diskTemplatePreference :: [String]
767
diskTemplatePreference =
768
  map Types.diskTemplateToRaw
769
  [DTBlock, DTDiskless, DTDrbd8, DTExt, DTFile, DTPlain, DTRbd, DTSharedFile]
770

    
771
diskTemplates :: FrozenSet String
772
diskTemplates = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [minBound..]
773

    
774
-- | Disk templates that are enabled by default
775
defaultEnabledDiskTemplates :: [String]
776
defaultEnabledDiskTemplates = map Types.diskTemplateToRaw [DTDrbd8, DTPlain]
777

    
778
-- | Mapping of disk templates to storage types
779
mapDiskTemplateStorageType :: Map String String
780
mapDiskTemplateStorageType =
781
  Map.fromList $
782
  map (Types.diskTemplateToRaw *** Types.storageTypeToRaw)
783
  [(DTBlock, StorageBlock),
784
   (DTDrbd8, StorageLvmVg),
785
   (DTExt, StorageExt),
786
   (DTSharedFile, StorageFile),
787
   (DTFile, StorageFile),
788
   (DTDiskless, StorageDiskless),
789
   (DTPlain, StorageLvmVg),
790
   (DTRbd, StorageRados)]
791

    
792
-- | The set of network-mirrored disk templates
793
dtsIntMirror :: FrozenSet String
794
dtsIntMirror = ConstantUtils.mkSet [dtDrbd8]
795

    
796
-- | 'DTDiskless' is 'trivially' externally mirrored
797
dtsExtMirror :: FrozenSet String
798
dtsExtMirror =
799
  ConstantUtils.mkSet $
800
  map Types.diskTemplateToRaw [DTDiskless, DTBlock, DTExt, DTSharedFile, DTRbd]
801

    
802
-- | The set of non-lvm-based disk templates
803
dtsNotLvm :: FrozenSet String
804
dtsNotLvm =
805
  ConstantUtils.mkSet $
806
  map Types.diskTemplateToRaw
807
  [DTSharedFile, DTDiskless, DTBlock, DTExt, DTFile, DTRbd]
808

    
809
-- | The set of disk templates which can be grown
810
dtsGrowable :: FrozenSet String
811
dtsGrowable =
812
  ConstantUtils.mkSet $
813
  map Types.diskTemplateToRaw
814
  [DTSharedFile, DTDrbd8, DTPlain, DTExt, DTFile, DTRbd]
815

    
816
-- | The set of disk templates that allow adoption
817
dtsMayAdopt :: FrozenSet String
818
dtsMayAdopt =
819
  ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTBlock, DTPlain]
820

    
821
-- | The set of disk templates that *must* use adoption
822
dtsMustAdopt :: FrozenSet String
823
dtsMustAdopt = ConstantUtils.mkSet [Types.diskTemplateToRaw DTBlock]
824

    
825
-- | The set of disk templates that allow migrations
826
dtsMirrored :: FrozenSet String
827
dtsMirrored = dtsIntMirror `ConstantUtils.union` dtsExtMirror
828

    
829
-- | The set of file based disk templates
830
dtsFilebased :: FrozenSet String
831
dtsFilebased =
832
  ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTSharedFile, DTFile]
833

    
834
-- | The set of disk templates that can be moved by copying
835
--
836
-- Note: a requirement is that they're not accessed externally or
837
-- shared between nodes; in particular, sharedfile is not suitable.
838
dtsCopyable :: FrozenSet String
839
dtsCopyable =
840
  ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain, DTFile]
841

    
842
-- | The set of disk templates that are supported by exclusive_storage
843
dtsExclStorage :: FrozenSet String
844
dtsExclStorage = ConstantUtils.mkSet $ map Types.diskTemplateToRaw [DTPlain]
845

    
846
-- | Templates for which we don't perform checks on free space
847
dtsNoFreeSpaceCheck :: FrozenSet String
848
dtsNoFreeSpaceCheck =
849
  ConstantUtils.mkSet $
850
  map Types.diskTemplateToRaw [DTExt, DTSharedFile, DTFile, DTRbd]
851

    
852
dtsBlock :: FrozenSet String
853
dtsBlock =
854
  ConstantUtils.mkSet $
855
  map Types.diskTemplateToRaw [DTPlain, DTDrbd8, DTBlock, DTRbd, DTExt]
856

    
857
-- * Drbd
858

    
859
drbdHmacAlg :: String
860
drbdHmacAlg = "md5"
861

    
862
drbdDefaultNetProtocol :: String
863
drbdDefaultNetProtocol = "C"
864

    
865
drbdMigrationNetProtocol :: String
866
drbdMigrationNetProtocol = "C"
867

    
868
drbdStatusFile :: String
869
drbdStatusFile = "/proc/drbd"
870

    
871
-- | Size of DRBD meta block device
872
drbdMetaSize :: Int
873
drbdMetaSize = 128
874

    
875
-- * Drbd barrier types
876

    
877
drbdBDiskBarriers :: String
878
drbdBDiskBarriers = "b"
879

    
880
drbdBDiskDrain :: String
881
drbdBDiskDrain = "d"
882

    
883
drbdBDiskFlush :: String
884
drbdBDiskFlush = "f"
885

    
886
drbdBNone :: String
887
drbdBNone = "n"
888

    
889
-- | Rbd tool command
890
rbdCmd :: String
891
rbdCmd = "rbd"
892

    
893
-- * File backend driver
894

    
895
fdBlktap :: String
896
fdBlktap = Types.fileDriverToRaw FileBlktap
897

    
898
fdLoop :: String
899
fdLoop = Types.fileDriverToRaw FileLoop
900

    
901
fileDriver :: FrozenSet String
902
fileDriver =
903
  ConstantUtils.mkSet $
904
  map Types.fileDriverToRaw [minBound..]
905

    
906
-- | The set of drbd-like disk types
907
ldsDrbd :: FrozenSet String
908
ldsDrbd = ConstantUtils.mkSet [Types.diskTemplateToRaw DTDrbd8]
909

    
910
-- * Disk access mode
911

    
912
diskRdonly :: String
913
diskRdonly = Types.diskModeToRaw DiskRdOnly
914

    
915
diskRdwr :: String
916
diskRdwr = Types.diskModeToRaw DiskRdWr
917

    
918
diskAccessSet :: FrozenSet String
919
diskAccessSet = ConstantUtils.mkSet $ map Types.diskModeToRaw [minBound..]
920

    
921
-- * Disk replacement mode
922

    
923
replaceDiskAuto :: String
924
replaceDiskAuto = Types.replaceDisksModeToRaw ReplaceAuto
925

    
926
replaceDiskChg :: String
927
replaceDiskChg = Types.replaceDisksModeToRaw ReplaceNewSecondary
928

    
929
replaceDiskPri :: String
930
replaceDiskPri = Types.replaceDisksModeToRaw ReplaceOnPrimary
931

    
932
replaceDiskSec :: String
933
replaceDiskSec = Types.replaceDisksModeToRaw ReplaceOnSecondary
934

    
935
replaceModes :: FrozenSet String
936
replaceModes =
937
  ConstantUtils.mkSet $ map Types.replaceDisksModeToRaw [minBound..]
938

    
939
-- * Instance export mode
940

    
941
exportModeLocal :: String
942
exportModeLocal = Types.exportModeToRaw ExportModeLocal
943

    
944
exportModeRemote :: String
945
exportModeRemote = Types.exportModeToRaw ExportModeRemote
946

    
947
exportModes :: FrozenSet String
948
exportModes = ConstantUtils.mkSet $ map Types.exportModeToRaw [minBound..]
949

    
950
-- * Instance creation modes
951

    
952
instanceCreate :: String
953
instanceCreate = Types.instCreateModeToRaw InstCreate
954

    
955
instanceImport :: String
956
instanceImport = Types.instCreateModeToRaw InstImport
957

    
958
instanceRemoteImport :: String
959
instanceRemoteImport = Types.instCreateModeToRaw InstRemoteImport
960

    
961
instanceCreateModes :: FrozenSet String
962
instanceCreateModes =
963
  ConstantUtils.mkSet $ map Types.instCreateModeToRaw [minBound..]
964

    
965
-- * Remote import/export handshake message and version
966

    
967
rieHandshake :: String
968
rieHandshake = "Hi, I'm Ganeti"
969

    
970
rieVersion :: Int
971
rieVersion = 0
972

    
973
-- | Remote import/export certificate validity in seconds
974
rieCertValidity :: Int
975
rieCertValidity = 24 * 60 * 60
976

    
977
-- | Export only: how long to wait per connection attempt (seconds)
978
rieConnectAttemptTimeout :: Int
979
rieConnectAttemptTimeout = 20
980

    
981
-- | Export only: number of attempts to connect
982
rieConnectRetries :: Int
983
rieConnectRetries = 10
984

    
985
-- | Overall timeout for establishing connection
986
rieConnectTimeout :: Int
987
rieConnectTimeout = 180
988

    
989
-- | Give child process up to 5 seconds to exit after sending a signal
990
childLingerTimeout :: Double
991
childLingerTimeout = 5.0
992

    
993
-- * Import/export config options
994

    
995
inisectBep :: String
996
inisectBep = "backend"
997

    
998
inisectExp :: String
999
inisectExp = "export"
1000

    
1001
inisectHyp :: String
1002
inisectHyp = "hypervisor"
1003

    
1004
inisectIns :: String
1005
inisectIns = "instance"
1006

    
1007
inisectOsp :: String
1008
inisectOsp = "os"
1009

    
1010
-- * Dynamic device modification
1011

    
1012
ddmAdd :: String
1013
ddmAdd = Types.ddmFullToRaw DdmFullAdd
1014

    
1015
ddmModify :: String
1016
ddmModify = Types.ddmFullToRaw DdmFullModify
1017

    
1018
ddmRemove :: String
1019
ddmRemove = Types.ddmFullToRaw DdmFullRemove
1020

    
1021
ddmsValues :: FrozenSet String
1022
ddmsValues = ConstantUtils.mkSet [ddmAdd, ddmRemove]
1023

    
1024
ddmsValuesWithModify :: FrozenSet String
1025
ddmsValuesWithModify = ConstantUtils.mkSet $ map Types.ddmFullToRaw [minBound..]
1026

    
1027
-- * Common exit codes
1028

    
1029
exitSuccess :: Int
1030
exitSuccess = 0
1031

    
1032
exitFailure :: Int
1033
exitFailure = ConstantUtils.exitFailure
1034

    
1035
exitNotcluster :: Int
1036
exitNotcluster = 5
1037

    
1038
exitNotmaster :: Int
1039
exitNotmaster = 11
1040

    
1041
exitNodesetupError :: Int
1042
exitNodesetupError = 12
1043

    
1044
-- | Need user confirmation
1045
exitConfirmation :: Int
1046
exitConfirmation = 13
1047

    
1048
-- | Exit code for query operations with unknown fields
1049
exitUnknownField :: Int
1050
exitUnknownField = 14
1051

    
1052
-- * Tags
1053

    
1054
tagCluster :: String
1055
tagCluster = Types.tagKindToRaw TagKindCluster
1056

    
1057
tagInstance :: String
1058
tagInstance = Types.tagKindToRaw TagKindInstance
1059

    
1060
tagNetwork :: String
1061
tagNetwork = Types.tagKindToRaw TagKindNetwork
1062

    
1063
tagNode :: String
1064
tagNode = Types.tagKindToRaw TagKindNode
1065

    
1066
tagNodegroup :: String
1067
tagNodegroup = Types.tagKindToRaw TagKindGroup
1068

    
1069
validTagTypes :: FrozenSet String
1070
validTagTypes = ConstantUtils.mkSet $ map Types.tagKindToRaw [minBound..]
1071

    
1072
maxTagLen :: Int
1073
maxTagLen = 128
1074

    
1075
maxTagsPerObj :: Int
1076
maxTagsPerObj = 4096
1077

    
1078
-- * Others
1079

    
1080
defaultBridge :: String
1081
defaultBridge = "xen-br0"
1082

    
1083
defaultOvs :: String
1084
defaultOvs = "switch1"
1085

    
1086
-- | 60 MiB, expressed in KiB
1087
classicDrbdSyncSpeed :: Int
1088
classicDrbdSyncSpeed = 60 * 1024
1089

    
1090
ip4AddressAny :: String
1091
ip4AddressAny = "0.0.0.0"
1092

    
1093
ip4AddressLocalhost :: String
1094
ip4AddressLocalhost = "127.0.0.1"
1095

    
1096
ip6AddressAny :: String
1097
ip6AddressAny = "::"
1098

    
1099
ip6AddressLocalhost :: String
1100
ip6AddressLocalhost = "::1"
1101

    
1102
ip4Version :: Int
1103
ip4Version = 4
1104

    
1105
ip6Version :: Int
1106
ip6Version = 6
1107

    
1108
validIpVersions :: FrozenSet Int
1109
validIpVersions = ConstantUtils.mkSet [ip4Version, ip6Version]
1110

    
1111
tcpPingTimeout :: Int
1112
tcpPingTimeout = 10
1113

    
1114
defaultVg :: String
1115
defaultVg = "xenvg"
1116

    
1117
defaultDrbdHelper :: String
1118
defaultDrbdHelper = "/bin/true"
1119

    
1120
minVgSize :: Int
1121
minVgSize = 20480
1122

    
1123
defaultMacPrefix :: String
1124
defaultMacPrefix = "aa:00:00"
1125

    
1126
-- | Default maximum instance wait time, in seconds.
1127
defaultShutdownTimeout :: Int
1128
defaultShutdownTimeout = 120
1129

    
1130
-- | Node clock skew in seconds
1131
nodeMaxClockSkew :: Int
1132
nodeMaxClockSkew = 150
1133

    
1134
-- | Time for an intra-cluster disk transfer to wait for a connection
1135
diskTransferConnectTimeout :: Int
1136
diskTransferConnectTimeout = 60
1137

    
1138
-- | Disk index separator
1139
diskSeparator :: String
1140
diskSeparator = AutoConf.diskSeparator
1141

    
1142
-- | Key for job IDs in opcode result
1143
jobIdsKey :: String
1144
jobIdsKey = "jobs"
1145

    
1146
-- * Runparts results
1147

    
1148
runpartsErr :: Int
1149
runpartsErr = 2
1150

    
1151
runpartsRun :: Int
1152
runpartsRun = 1
1153

    
1154
runpartsSkip :: Int
1155
runpartsSkip = 0
1156

    
1157
runpartsStatus :: [Int]
1158
runpartsStatus = [runpartsErr, runpartsRun, runpartsSkip]
1159

    
1160
-- * RPC
1161

    
1162
rpcEncodingNone :: Int
1163
rpcEncodingNone = 0
1164

    
1165
rpcEncodingZlibBase64 :: Int
1166
rpcEncodingZlibBase64 = 1
1167

    
1168
-- * Timeout table
1169
--
1170
-- Various time constants for the timeout table
1171

    
1172
rpcTmoUrgent :: Int
1173
rpcTmoUrgent = Types.rpcTimeoutToRaw Urgent
1174

    
1175
rpcTmoFast :: Int
1176
rpcTmoFast = Types.rpcTimeoutToRaw Fast
1177

    
1178
rpcTmoNormal :: Int
1179
rpcTmoNormal = Types.rpcTimeoutToRaw Normal
1180

    
1181
rpcTmoSlow :: Int
1182
rpcTmoSlow = Types.rpcTimeoutToRaw Slow
1183

    
1184
-- | 'rpcTmo_4hrs' contains an underscore to circumvent a limitation
1185
-- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1186
-- Python name.
1187
rpcTmo_4hrs :: Int
1188
rpcTmo_4hrs = Types.rpcTimeoutToRaw FourHours
1189

    
1190
-- | 'rpcTmo_1day' contains an underscore to circumvent a limitation
1191
-- in the 'Ganeti.THH.deCamelCase' function and generate the correct
1192
-- Python name.
1193
rpcTmo_1day :: Int
1194
rpcTmo_1day = Types.rpcTimeoutToRaw OneDay
1195

    
1196
-- | Timeout for connecting to nodes (seconds)
1197
rpcConnectTimeout :: Int
1198
rpcConnectTimeout = 5
1199

    
1200
-- * VTypes
1201

    
1202
vtypeBool :: VType
1203
vtypeBool = VTypeBool
1204

    
1205
vtypeInt :: VType
1206
vtypeInt = VTypeInt
1207

    
1208
vtypeMaybeString :: VType
1209
vtypeMaybeString = VTypeMaybeString
1210

    
1211
-- | Size in MiBs
1212
vtypeSize :: VType
1213
vtypeSize = VTypeSize
1214

    
1215
vtypeString :: VType
1216
vtypeString = VTypeString
1217

    
1218
enforceableTypes :: FrozenSet VType
1219
enforceableTypes = ConstantUtils.mkSet [minBound..]
1220

    
1221
-- | Instance specs
1222
--
1223
-- FIXME: these should be associated with 'Ganeti.HTools.Types.ISpec'
1224

    
1225
ispecMemSize :: String
1226
ispecMemSize = ConstantUtils.ispecMemSize
1227

    
1228
ispecCpuCount :: String
1229
ispecCpuCount = ConstantUtils.ispecCpuCount
1230

    
1231
ispecDiskCount :: String
1232
ispecDiskCount = ConstantUtils.ispecDiskCount
1233

    
1234
ispecDiskSize :: String
1235
ispecDiskSize = ConstantUtils.ispecDiskSize
1236

    
1237
ispecNicCount :: String
1238
ispecNicCount = ConstantUtils.ispecNicCount
1239

    
1240
ispecSpindleUse :: String
1241
ispecSpindleUse = ConstantUtils.ispecSpindleUse
1242

    
1243
ispecsParameterTypes :: Map String VType
1244
ispecsParameterTypes =
1245
  Map.fromList
1246
  [(ConstantUtils.ispecDiskSize, VTypeInt),
1247
   (ConstantUtils.ispecCpuCount, VTypeInt),
1248
   (ConstantUtils.ispecSpindleUse, VTypeInt),
1249
   (ConstantUtils.ispecMemSize, VTypeInt),
1250
   (ConstantUtils.ispecNicCount, VTypeInt),
1251
   (ConstantUtils.ispecDiskCount, VTypeInt)]
1252

    
1253
ispecsParameters :: FrozenSet String
1254
ispecsParameters =
1255
  ConstantUtils.mkSet [ConstantUtils.ispecCpuCount,
1256
                       ConstantUtils.ispecDiskCount,
1257
                       ConstantUtils.ispecDiskSize,
1258
                       ConstantUtils.ispecMemSize,
1259
                       ConstantUtils.ispecNicCount,
1260
                       ConstantUtils.ispecSpindleUse]
1261

    
1262
ispecsMinmax :: String
1263
ispecsMinmax = ConstantUtils.ispecsMinmax
1264

    
1265
ispecsMax :: String
1266
ispecsMax = "max"
1267

    
1268
ispecsMin :: String
1269
ispecsMin = "min"
1270

    
1271
ispecsStd :: String
1272
ispecsStd = ConstantUtils.ispecsStd
1273

    
1274
ipolicyDts :: String
1275
ipolicyDts = ConstantUtils.ipolicyDts
1276

    
1277
ipolicyVcpuRatio :: String
1278
ipolicyVcpuRatio = ConstantUtils.ipolicyVcpuRatio
1279

    
1280
ipolicySpindleRatio :: String
1281
ipolicySpindleRatio = ConstantUtils.ipolicySpindleRatio
1282

    
1283
ispecsMinmaxKeys :: FrozenSet String
1284
ispecsMinmaxKeys = ConstantUtils.mkSet [ispecsMax, ispecsMin]
1285

    
1286
ipolicyParameters :: FrozenSet String
1287
ipolicyParameters =
1288
  ConstantUtils.mkSet [ConstantUtils.ipolicyVcpuRatio,
1289
                       ConstantUtils.ipolicySpindleRatio]
1290

    
1291
ipolicyAllKeys :: FrozenSet String
1292
ipolicyAllKeys =
1293
  ConstantUtils.union ipolicyParameters $
1294
  ConstantUtils.mkSet [ConstantUtils.ipolicyDts,
1295
                       ConstantUtils.ispecsMinmax,
1296
                       ispecsStd]
1297

    
1298
-- | Node parameter names
1299

    
1300
ndExclusiveStorage :: String
1301
ndExclusiveStorage = "exclusive_storage"
1302

    
1303
ndOobProgram :: String
1304
ndOobProgram = "oob_program"
1305

    
1306
ndSpindleCount :: String
1307
ndSpindleCount = "spindle_count"
1308

    
1309
ndOvs :: String
1310
ndOvs = "ovs"
1311

    
1312
ndOvsLink :: String
1313
ndOvsLink = "ovs_link"
1314

    
1315
ndOvsName :: String
1316
ndOvsName = "ovs_name"
1317

    
1318
ndsParameterTypes :: Map String VType
1319
ndsParameterTypes =
1320
  Map.fromList
1321
  [(ndExclusiveStorage, VTypeBool),
1322
   (ndOobProgram, VTypeString),
1323
   (ndOvs, VTypeBool),
1324
   (ndOvsLink, VTypeMaybeString),
1325
   (ndOvsName, VTypeMaybeString),
1326
   (ndSpindleCount, VTypeInt)]
1327

    
1328
ndsParameters :: FrozenSet String
1329
ndsParameters = ConstantUtils.mkSet (Map.keys ndsParameterTypes)
1330

    
1331
ndsParameterTitles :: Map String String
1332
ndsParameterTitles =
1333
  Map.fromList
1334
  [(ndExclusiveStorage, "ExclusiveStorage"),
1335
   (ndOobProgram, "OutOfBandProgram"),
1336
   (ndOvs, "OpenvSwitch"),
1337
   (ndOvsLink, "OpenvSwitchLink"),
1338
   (ndOvsName, "OpenvSwitchName"),
1339
   (ndSpindleCount, "SpindleCount")]
1340

    
1341
ipCommandPath :: String
1342
ipCommandPath = AutoConf.ipPath
1343

    
1344
-- * Reboot types
1345

    
1346
instanceRebootSoft :: String
1347
instanceRebootSoft = Types.rebootTypeToRaw RebootSoft
1348

    
1349
instanceRebootHard :: String
1350
instanceRebootHard = Types.rebootTypeToRaw RebootHard
1351

    
1352
instanceRebootFull :: String
1353
instanceRebootFull = Types.rebootTypeToRaw RebootFull
1354

    
1355
rebootTypes :: FrozenSet String
1356
rebootTypes = ConstantUtils.mkSet $ map Types.rebootTypeToRaw [minBound..]
1357

    
1358

    
1359

    
1360

    
1361

    
1362

    
1363

    
1364

    
1365
-- * OOB supported commands
1366

    
1367
oobPowerOn :: String
1368
oobPowerOn = Types.oobCommandToRaw OobPowerOn
1369

    
1370
oobPowerOff :: String
1371
oobPowerOff = Types.oobCommandToRaw OobPowerOff
1372

    
1373
oobPowerCycle :: String
1374
oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
1375

    
1376
oobPowerStatus :: String
1377
oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
1378

    
1379
oobHealth :: String
1380
oobHealth = Types.oobCommandToRaw OobHealth
1381

    
1382
oobCommands :: FrozenSet String
1383
oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
1384

    
1385
oobPowerStatusPowered :: String
1386
oobPowerStatusPowered = "powered"
1387

    
1388
-- | 60 seconds
1389
oobTimeout :: Int
1390
oobTimeout = 60
1391

    
1392
-- | 2 seconds
1393
oobPowerDelay :: Double
1394
oobPowerDelay = 2.0
1395

    
1396
oobStatusCritical :: String
1397
oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
1398

    
1399
oobStatusOk :: String
1400
oobStatusOk = Types.oobStatusToRaw OobStatusOk
1401

    
1402
oobStatusUnknown :: String
1403
oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
1404

    
1405
oobStatusWarning :: String
1406
oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
1407

    
1408
oobStatuses :: FrozenSet String
1409
oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
1410

    
1411
-- * NIC_* constants are used inside the ganeti config
1412

    
1413
nicLink :: String
1414
nicLink = "link"
1415

    
1416
nicMode :: String
1417
nicMode = "mode"
1418

    
1419
nicVlan :: String
1420
nicVlan = "vlan"
1421

    
1422
nicModeBridged :: String
1423
nicModeBridged = Types.nICModeToRaw NMBridged
1424

    
1425
nicModeRouted :: String
1426
nicModeRouted = Types.nICModeToRaw NMRouted
1427

    
1428
nicModeOvs :: String
1429
nicModeOvs = Types.nICModeToRaw NMOvs
1430

    
1431
nicIpPool :: String
1432
nicIpPool = Types.nICModeToRaw NMPool
1433

    
1434
nicValidModes :: FrozenSet String
1435
nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
1436

    
1437
-- * Hypervisor constants
1438

    
1439
htXenPvm :: String
1440
htXenPvm = Types.hypervisorToRaw XenPvm
1441

    
1442
htFake :: String
1443
htFake = Types.hypervisorToRaw Fake
1444

    
1445
htXenHvm :: String
1446
htXenHvm = Types.hypervisorToRaw XenHvm
1447

    
1448
htKvm :: String
1449
htKvm = Types.hypervisorToRaw Kvm
1450

    
1451
htChroot :: String
1452
htChroot = Types.hypervisorToRaw Chroot
1453

    
1454
htLxc :: String
1455
htLxc = Types.hypervisorToRaw Lxc
1456

    
1457
hyperTypes :: FrozenSet String
1458
hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
1459

    
1460
htsReqPort :: FrozenSet String
1461
htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
1462

    
1463
-- * Migration type
1464

    
1465
htMigrationLive :: String
1466
htMigrationLive = Types.migrationModeToRaw MigrationLive
1467

    
1468
htMigrationNonlive :: String
1469
htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
1470

    
1471
htMigrationModes :: FrozenSet String
1472
htMigrationModes =
1473
  ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
1474

    
1475
-- * Cluster verify steps
1476

    
1477
verifyNplusoneMem :: String
1478
verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
1479

    
1480
verifyOptionalChecks :: FrozenSet String
1481
verifyOptionalChecks =
1482
  ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
1483

    
1484
-- * Cluster Verify error classes
1485

    
1486
cvTcluster :: String
1487
cvTcluster = "cluster"
1488

    
1489
cvTgroup :: String
1490
cvTgroup = "group"
1491

    
1492
cvTnode :: String
1493
cvTnode = "node"
1494

    
1495
cvTinstance :: String
1496
cvTinstance = "instance"
1497

    
1498
-- * Cluster Verify error codes and documentation
1499

    
1500
cvEclustercert :: (String, String, String)
1501
cvEclustercert =
1502
  ("cluster",
1503
   Types.cVErrorCodeToRaw CvECLUSTERCERT,
1504
   "Cluster certificate files verification failure")
1505

    
1506
cvEclustercfg :: (String, String, String)
1507
cvEclustercfg =
1508
  ("cluster",
1509
   Types.cVErrorCodeToRaw CvECLUSTERCFG,
1510
   "Cluster configuration verification failure")
1511

    
1512
cvEclusterdanglinginst :: (String, String, String)
1513
cvEclusterdanglinginst =
1514
  ("node",
1515
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
1516
   "Some instances have a non-existing primary node")
1517

    
1518
cvEclusterdanglingnodes :: (String, String, String)
1519
cvEclusterdanglingnodes =
1520
  ("node",
1521
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
1522
   "Some nodes belong to non-existing groups")
1523

    
1524
cvEclusterfilecheck :: (String, String, String)
1525
cvEclusterfilecheck =
1526
  ("cluster",
1527
   Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
1528
   "Cluster configuration verification failure")
1529

    
1530
cvEgroupdifferentpvsize :: (String, String, String)
1531
cvEgroupdifferentpvsize =
1532
  ("group",
1533
   Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
1534
   "PVs in the group have different sizes")
1535

    
1536
cvEinstancebadnode :: (String, String, String)
1537
cvEinstancebadnode =
1538
  ("instance",
1539
   Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
1540
   "Instance marked as running lives on an offline node")
1541

    
1542
cvEinstancedown :: (String, String, String)
1543
cvEinstancedown =
1544
  ("instance",
1545
   Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
1546
   "Instance not running on its primary node")
1547

    
1548
cvEinstancefaultydisk :: (String, String, String)
1549
cvEinstancefaultydisk =
1550
  ("instance",
1551
   Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
1552
   "Impossible to retrieve status for a disk")
1553

    
1554
cvEinstancelayout :: (String, String, String)
1555
cvEinstancelayout =
1556
  ("instance",
1557
   Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
1558
   "Instance has multiple secondary nodes")
1559

    
1560
cvEinstancemissingcfgparameter :: (String, String, String)
1561
cvEinstancemissingcfgparameter =
1562
  ("instance",
1563
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
1564
   "A configuration parameter for an instance is missing")
1565

    
1566
cvEinstancemissingdisk :: (String, String, String)
1567
cvEinstancemissingdisk =
1568
  ("instance",
1569
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
1570
   "Missing volume on an instance")
1571

    
1572
cvEinstancepolicy :: (String, String, String)
1573
cvEinstancepolicy =
1574
  ("instance",
1575
   Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
1576
   "Instance does not meet policy")
1577

    
1578
cvEinstancesplitgroups :: (String, String, String)
1579
cvEinstancesplitgroups =
1580
  ("instance",
1581
   Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
1582
   "Instance with primary and secondary nodes in different groups")
1583

    
1584
cvEinstanceunsuitablenode :: (String, String, String)
1585
cvEinstanceunsuitablenode =
1586
  ("instance",
1587
   Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
1588
   "Instance running on nodes that are not suitable for it")
1589

    
1590
cvEinstancewrongnode :: (String, String, String)
1591
cvEinstancewrongnode =
1592
  ("instance",
1593
   Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
1594
   "Instance running on the wrong node")
1595

    
1596
cvEnodedrbd :: (String, String, String)
1597
cvEnodedrbd =
1598
  ("node",
1599
   Types.cVErrorCodeToRaw CvENODEDRBD,
1600
   "Error parsing the DRBD status file")
1601

    
1602
cvEnodedrbdhelper :: (String, String, String)
1603
cvEnodedrbdhelper =
1604
  ("node",
1605
   Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
1606
   "Error caused by the DRBD helper")
1607

    
1608
cvEnodedrbdversion :: (String, String, String)
1609
cvEnodedrbdversion =
1610
  ("node",
1611
   Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
1612
   "DRBD version mismatch within a node group")
1613

    
1614
cvEnodefilecheck :: (String, String, String)
1615
cvEnodefilecheck =
1616
  ("node",
1617
   Types.cVErrorCodeToRaw CvENODEFILECHECK,
1618
   "Error retrieving the checksum of the node files")
1619

    
1620
cvEnodefilestoragepaths :: (String, String, String)
1621
cvEnodefilestoragepaths =
1622
  ("node",
1623
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
1624
   "Detected bad file storage paths")
1625

    
1626
cvEnodefilestoragepathunusable :: (String, String, String)
1627
cvEnodefilestoragepathunusable =
1628
  ("node",
1629
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
1630
   "File storage path unusable")
1631

    
1632
cvEnodehooks :: (String, String, String)
1633
cvEnodehooks =
1634
  ("node",
1635
   Types.cVErrorCodeToRaw CvENODEHOOKS,
1636
   "Communication failure in hooks execution")
1637

    
1638
cvEnodehv :: (String, String, String)
1639
cvEnodehv =
1640
  ("node",
1641
   Types.cVErrorCodeToRaw CvENODEHV,
1642
   "Hypervisor parameters verification failure")
1643

    
1644
cvEnodelvm :: (String, String, String)
1645
cvEnodelvm =
1646
  ("node",
1647
   Types.cVErrorCodeToRaw CvENODELVM,
1648
   "LVM-related node error")
1649

    
1650
cvEnoden1 :: (String, String, String)
1651
cvEnoden1 =
1652
  ("node",
1653
   Types.cVErrorCodeToRaw CvENODEN1,
1654
   "Not enough memory to accommodate instance failovers")
1655

    
1656
cvEnodenet :: (String, String, String)
1657
cvEnodenet =
1658
  ("node",
1659
   Types.cVErrorCodeToRaw CvENODENET,
1660
   "Network-related node error")
1661

    
1662
cvEnodeoobpath :: (String, String, String)
1663
cvEnodeoobpath =
1664
  ("node",
1665
   Types.cVErrorCodeToRaw CvENODEOOBPATH,
1666
   "Invalid Out Of Band path")
1667

    
1668
cvEnodeorphaninstance :: (String, String, String)
1669
cvEnodeorphaninstance =
1670
  ("node",
1671
   Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
1672
   "Unknown intance running on a node")
1673

    
1674
cvEnodeorphanlv :: (String, String, String)
1675
cvEnodeorphanlv =
1676
  ("node",
1677
   Types.cVErrorCodeToRaw CvENODEORPHANLV,
1678
   "Unknown LVM logical volume")
1679

    
1680
cvEnodeos :: (String, String, String)
1681
cvEnodeos =
1682
  ("node",
1683
   Types.cVErrorCodeToRaw CvENODEOS,
1684
   "OS-related node error")
1685

    
1686
cvEnoderpc :: (String, String, String)
1687
cvEnoderpc =
1688
  ("node",
1689
   Types.cVErrorCodeToRaw CvENODERPC,
1690
   "Error during connection to the primary node of an instance")
1691

    
1692
cvEnodesetup :: (String, String, String)
1693
cvEnodesetup =
1694
  ("node",
1695
   Types.cVErrorCodeToRaw CvENODESETUP,
1696
   "Node setup error")
1697

    
1698
cvEnodesharedfilestoragepathunusable :: (String, String, String)
1699
cvEnodesharedfilestoragepathunusable =
1700
  ("node",
1701
   Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
1702
   "Shared file storage path unusable")
1703

    
1704
cvEnodessh :: (String, String, String)
1705
cvEnodessh =
1706
  ("node",
1707
   Types.cVErrorCodeToRaw CvENODESSH,
1708
   "SSH-related node error")
1709

    
1710
cvEnodetime :: (String, String, String)
1711
cvEnodetime =
1712
  ("node",
1713
   Types.cVErrorCodeToRaw CvENODETIME,
1714
   "Node returned invalid time")
1715

    
1716
cvEnodeuserscripts :: (String, String, String)
1717
cvEnodeuserscripts =
1718
  ("node",
1719
   Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
1720
   "User scripts not present or not executable")
1721

    
1722
cvEnodeversion :: (String, String, String)
1723
cvEnodeversion =
1724
  ("node",
1725
   Types.cVErrorCodeToRaw CvENODEVERSION,
1726
   "Protocol version mismatch or Ganeti version mismatch")
1727

    
1728
cvAllEcodes :: FrozenSet (String, String, String)
1729
cvAllEcodes =
1730
  ConstantUtils.mkSet
1731
  [cvEclustercert,
1732
   cvEclustercfg,
1733
   cvEclusterdanglinginst,
1734
   cvEclusterdanglingnodes,
1735
   cvEclusterfilecheck,
1736
   cvEgroupdifferentpvsize,
1737
   cvEinstancebadnode,
1738
   cvEinstancedown,
1739
   cvEinstancefaultydisk,
1740
   cvEinstancelayout,
1741
   cvEinstancemissingcfgparameter,
1742
   cvEinstancemissingdisk,
1743
   cvEinstancepolicy,
1744
   cvEinstancesplitgroups,
1745
   cvEinstanceunsuitablenode,
1746
   cvEinstancewrongnode,
1747
   cvEnodedrbd,
1748
   cvEnodedrbdhelper,
1749
   cvEnodedrbdversion,
1750
   cvEnodefilecheck,
1751
   cvEnodefilestoragepaths,
1752
   cvEnodefilestoragepathunusable,
1753
   cvEnodehooks,
1754
   cvEnodehv,
1755
   cvEnodelvm,
1756
   cvEnoden1,
1757
   cvEnodenet,
1758
   cvEnodeoobpath,
1759
   cvEnodeorphaninstance,
1760
   cvEnodeorphanlv,
1761
   cvEnodeos,
1762
   cvEnoderpc,
1763
   cvEnodesetup,
1764
   cvEnodesharedfilestoragepathunusable,
1765
   cvEnodessh,
1766
   cvEnodetime,
1767
   cvEnodeuserscripts,
1768
   cvEnodeversion]
1769

    
1770
cvAllEcodesStrings :: FrozenSet String
1771
cvAllEcodesStrings =
1772
  ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
1773

    
1774
-- * Instance status
1775

    
1776
inststAdmindown :: String
1777
inststAdmindown = Types.instanceStatusToRaw StatusDown
1778

    
1779
inststAdminoffline :: String
1780
inststAdminoffline = Types.instanceStatusToRaw StatusOffline
1781

    
1782
inststErrordown :: String
1783
inststErrordown = Types.instanceStatusToRaw ErrorDown
1784

    
1785
inststErrorup :: String
1786
inststErrorup = Types.instanceStatusToRaw ErrorUp
1787

    
1788
inststNodedown :: String
1789
inststNodedown = Types.instanceStatusToRaw NodeDown
1790

    
1791
inststNodeoffline :: String
1792
inststNodeoffline = Types.instanceStatusToRaw NodeOffline
1793

    
1794
inststRunning :: String
1795
inststRunning = Types.instanceStatusToRaw Running
1796

    
1797
inststWrongnode :: String
1798
inststWrongnode = Types.instanceStatusToRaw WrongNode
1799

    
1800
inststAll :: FrozenSet String
1801
inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
1802

    
1803
-- * Admin states
1804

    
1805
adminstDown :: String
1806
adminstDown = Types.adminStateToRaw AdminDown
1807

    
1808
adminstOffline :: String
1809
adminstOffline = Types.adminStateToRaw AdminOffline
1810

    
1811
adminstUp :: String
1812
adminstUp = Types.adminStateToRaw AdminUp
1813

    
1814
adminstAll :: FrozenSet String
1815
adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
1816

    
1817
-- * Node roles
1818

    
1819
nrDrained :: String
1820
nrDrained = Types.nodeRoleToRaw NRDrained
1821

    
1822
nrMaster :: String
1823
nrMaster = Types.nodeRoleToRaw NRMaster
1824

    
1825
nrMcandidate :: String
1826
nrMcandidate = Types.nodeRoleToRaw NRCandidate
1827

    
1828
nrOffline :: String
1829
nrOffline = Types.nodeRoleToRaw NROffline
1830

    
1831
nrRegular :: String
1832
nrRegular = Types.nodeRoleToRaw NRRegular
1833

    
1834
nrAll :: FrozenSet String
1835
nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
1836

    
1837
-- * Allocator framework constants
1838

    
1839
iallocatorVersion :: Int
1840
iallocatorVersion = 2
1841

    
1842
iallocatorDirIn :: String
1843
iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
1844

    
1845
iallocatorDirOut :: String
1846
iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
1847

    
1848
validIallocatorDirections :: FrozenSet String
1849
validIallocatorDirections =
1850
  ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
1851

    
1852
iallocatorModeAlloc :: String
1853
iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
1854

    
1855
iallocatorModeChgGroup :: String
1856
iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
1857

    
1858
iallocatorModeMultiAlloc :: String
1859
iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
1860

    
1861
iallocatorModeNodeEvac :: String
1862
iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
1863

    
1864
iallocatorModeReloc :: String
1865
iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
1866

    
1867
validIallocatorModes :: FrozenSet String
1868
validIallocatorModes =
1869
  ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
1870

    
1871
iallocatorSearchPath :: [String]
1872
iallocatorSearchPath = AutoConf.iallocatorSearchPath
1873

    
1874
defaultIallocatorShortcut :: String
1875
defaultIallocatorShortcut = "."
1876

    
1877
-- * Node evacuation
1878

    
1879
nodeEvacPri :: String
1880
nodeEvacPri = Types.evacModeToRaw ChangePrimary
1881

    
1882
nodeEvacSec :: String
1883
nodeEvacSec = Types.evacModeToRaw ChangeSecondary
1884

    
1885
nodeEvacAll :: String
1886
nodeEvacAll = Types.evacModeToRaw ChangeAll
1887

    
1888
nodeEvacModes :: FrozenSet String
1889
nodeEvacModes = ConstantUtils.mkSet $ map Types.evacModeToRaw [minBound..]
1890

    
1891
-- * Job status
1892

    
1893
jobStatusQueued :: String
1894
jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
1895

    
1896
jobStatusWaiting :: String
1897
jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
1898

    
1899
jobStatusCanceling :: String
1900
jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
1901

    
1902
jobStatusRunning :: String
1903
jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
1904

    
1905
jobStatusCanceled :: String
1906
jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
1907

    
1908
jobStatusSuccess :: String
1909
jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
1910

    
1911
jobStatusError :: String
1912
jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
1913

    
1914
jobsPending :: FrozenSet String
1915
jobsPending =
1916
  ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
1917

    
1918
jobsFinalized :: FrozenSet String
1919
jobsFinalized =
1920
  ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
1921

    
1922
jobStatusAll :: FrozenSet String
1923
jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
1924

    
1925
-- * OpCode status
1926

    
1927
-- ** Not yet finalized opcodes
1928

    
1929
opStatusCanceling :: String
1930
opStatusCanceling = "canceling"
1931

    
1932
opStatusQueued :: String
1933
opStatusQueued = "queued"
1934

    
1935
opStatusRunning :: String
1936
opStatusRunning = "running"
1937

    
1938
opStatusWaiting :: String
1939
opStatusWaiting = "waiting"
1940

    
1941
-- ** Finalized opcodes
1942

    
1943
opStatusCanceled :: String
1944
opStatusCanceled = "canceled"
1945

    
1946
opStatusError :: String
1947
opStatusError = "error"
1948

    
1949
opStatusSuccess :: String
1950
opStatusSuccess = "success"
1951

    
1952
opsFinalized :: FrozenSet String
1953
opsFinalized =
1954
  ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
1955

    
1956
-- * OpCode priority
1957

    
1958
opPrioLowest :: Int
1959
opPrioLowest = 19
1960

    
1961
opPrioHighest :: Int
1962
opPrioHighest = -20
1963

    
1964
opPrioLow :: Int
1965
opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
1966

    
1967
opPrioNormal :: Int
1968
opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
1969

    
1970
opPrioHigh :: Int
1971
opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
1972

    
1973
opPrioSubmitValid :: FrozenSet Int
1974
opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
1975

    
1976
opPrioDefault :: Int
1977
opPrioDefault = opPrioNormal
1978

    
1979
-- * Execution log types
1980

    
1981
elogMessage :: String
1982
elogMessage = Types.eLogTypeToRaw ELogMessage
1983

    
1984
elogRemoteImport :: String
1985
elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
1986

    
1987
elogJqueueTest :: String
1988
elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
1989

    
1990
-- * Confd
1991

    
1992
confdProtocolVersion :: Int
1993
confdProtocolVersion = ConstantUtils.confdProtocolVersion
1994

    
1995
-- Confd request type
1996

    
1997
confdReqPing :: Int
1998
confdReqPing = Types.confdRequestTypeToRaw ReqPing
1999

    
2000
confdReqNodeRoleByname :: Int
2001
confdReqNodeRoleByname = Types.confdRequestTypeToRaw ReqNodeRoleByName
2002

    
2003
confdReqNodePipByInstanceIp :: Int
2004
confdReqNodePipByInstanceIp = Types.confdRequestTypeToRaw ReqNodePipByInstPip
2005

    
2006
confdReqClusterMaster :: Int
2007
confdReqClusterMaster = Types.confdRequestTypeToRaw ReqClusterMaster
2008

    
2009
confdReqNodePipList :: Int
2010
confdReqNodePipList = Types.confdRequestTypeToRaw ReqNodePipList
2011

    
2012
confdReqMcPipList :: Int
2013
confdReqMcPipList = Types.confdRequestTypeToRaw ReqMcPipList
2014

    
2015
confdReqInstancesIpsList :: Int
2016
confdReqInstancesIpsList = Types.confdRequestTypeToRaw ReqInstIpsList
2017

    
2018
confdReqNodeDrbd :: Int
2019
confdReqNodeDrbd = Types.confdRequestTypeToRaw ReqNodeDrbd
2020

    
2021
confdReqNodeInstances :: Int
2022
confdReqNodeInstances = Types.confdRequestTypeToRaw ReqNodeInstances
2023

    
2024
confdReqs :: FrozenSet Int
2025
confdReqs =
2026
  ConstantUtils.mkSet .
2027
  map Types.confdRequestTypeToRaw $
2028
  [minBound..] \\ [ReqNodeInstances]
2029

    
2030
-- * Confd request type
2031

    
2032
confdReqfieldName :: Int
2033
confdReqfieldName = Types.confdReqFieldToRaw ReqFieldName
2034

    
2035
confdReqfieldIp :: Int
2036
confdReqfieldIp = Types.confdReqFieldToRaw ReqFieldIp
2037

    
2038
confdReqfieldMnodePip :: Int
2039
confdReqfieldMnodePip = Types.confdReqFieldToRaw ReqFieldMNodePip
2040

    
2041
-- * Confd repl status
2042

    
2043
confdReplStatusOk :: Int
2044
confdReplStatusOk = Types.confdReplyStatusToRaw ReplyStatusOk
2045

    
2046
confdReplStatusError :: Int
2047
confdReplStatusError = Types.confdReplyStatusToRaw ReplyStatusError
2048

    
2049
confdReplStatusNotimplemented :: Int
2050
confdReplStatusNotimplemented = Types.confdReplyStatusToRaw ReplyStatusNotImpl
2051

    
2052
confdReplStatuses :: FrozenSet Int
2053
confdReplStatuses =
2054
  ConstantUtils.mkSet $ map Types.confdReplyStatusToRaw [minBound..]
2055

    
2056
-- * Confd node role
2057

    
2058
confdNodeRoleMaster :: Int
2059
confdNodeRoleMaster = Types.confdNodeRoleToRaw NodeRoleMaster
2060

    
2061
confdNodeRoleCandidate :: Int
2062
confdNodeRoleCandidate = Types.confdNodeRoleToRaw NodeRoleCandidate
2063

    
2064
confdNodeRoleOffline :: Int
2065
confdNodeRoleOffline = Types.confdNodeRoleToRaw NodeRoleOffline
2066

    
2067
confdNodeRoleDrained :: Int
2068
confdNodeRoleDrained = Types.confdNodeRoleToRaw NodeRoleDrained
2069

    
2070
confdNodeRoleRegular :: Int
2071
confdNodeRoleRegular = Types.confdNodeRoleToRaw NodeRoleRegular
2072

    
2073
-- * A few common errors for confd
2074

    
2075
confdErrorUnknownEntry :: Int
2076
confdErrorUnknownEntry = Types.confdErrorTypeToRaw ConfdErrorUnknownEntry
2077

    
2078
confdErrorInternal :: Int
2079
confdErrorInternal = Types.confdErrorTypeToRaw ConfdErrorInternal
2080

    
2081
confdErrorArgument :: Int
2082
confdErrorArgument = Types.confdErrorTypeToRaw ConfdErrorArgument
2083

    
2084
-- * Confd request query fields
2085

    
2086
confdReqqLink :: String
2087
confdReqqLink = ConstantUtils.confdReqqLink
2088

    
2089
confdReqqIp :: String
2090
confdReqqIp = ConstantUtils.confdReqqIp
2091

    
2092
confdReqqIplist :: String
2093
confdReqqIplist = ConstantUtils.confdReqqIplist
2094

    
2095
confdReqqFields :: String
2096
confdReqqFields = ConstantUtils.confdReqqFields
2097

    
2098
-- | Each request is "salted" by the current timestamp.
2099
--
2100
-- This constant decides how many seconds of skew to accept.
2101
--
2102
-- TODO: make this a default and allow the value to be more
2103
-- configurable
2104
confdMaxClockSkew :: Int
2105
confdMaxClockSkew = 2 * nodeMaxClockSkew
2106

    
2107
-- | When we haven't reloaded the config for more than this amount of
2108
-- seconds, we force a test to see if inotify is betraying us. Using a
2109
-- prime number to ensure we get less chance of 'same wakeup' with
2110
-- other processes.
2111
confdConfigReloadTimeout :: Int
2112
confdConfigReloadTimeout = 17
2113

    
2114
-- | If we receive more than one update in this amount of
2115
-- microseconds, we move to polling every RATELIMIT seconds, rather
2116
-- than relying on inotify, to be able to serve more requests.
2117
confdConfigReloadRatelimit :: Int
2118
confdConfigReloadRatelimit = 250000
2119

    
2120
-- | Magic number prepended to all confd queries.
2121
--
2122
-- This allows us to distinguish different types of confd protocols
2123
-- and handle them. For example by changing this we can move the whole
2124
-- payload to be compressed, or move away from json.
2125
confdMagicFourcc :: String
2126
confdMagicFourcc = "plj0"
2127

    
2128
-- | By default a confd request is sent to the minimum between this
2129
-- number and all MCs. 6 was chosen because even in the case of a
2130
-- disastrous 50% response rate, we should have enough answers to be
2131
-- able to compare more than one.
2132
confdDefaultReqCoverage :: Int
2133
confdDefaultReqCoverage = 6
2134

    
2135
-- | Timeout in seconds to expire pending query request in the confd
2136
-- client library. We don't actually expect any answer more than 10
2137
-- seconds after we sent a request.
2138
confdClientExpireTimeout :: Int
2139
confdClientExpireTimeout = 10
2140

    
2141
-- * Possible values for NodeGroup.alloc_policy
2142

    
2143
allocPolicyLastResort :: String
2144
allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
2145

    
2146
allocPolicyPreferred :: String
2147
allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
2148

    
2149
allocPolicyUnallocable :: String
2150
allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
2151

    
2152
validAllocPolicies :: [String]
2153
validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
2154

    
2155
-- | Temporary external/shared storage parameters
2156
blockdevDriverManual :: String
2157
blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
2158

    
2159
-- | 'qemu-img' path, required for 'ovfconverter'
2160
qemuimgPath :: String
2161
qemuimgPath = AutoConf.qemuimgPath
2162

    
2163
-- | Whether htools was enabled at compilation time
2164
--
2165
-- FIXME: this should be moved next to the other enable constants,
2166
-- such as, 'enableConfd', and renamed to 'enableHtools'.
2167
htools :: Bool
2168
htools = AutoConf.htools
2169

    
2170
-- * Key files for SSH daemon
2171

    
2172
sshHostDsaPriv :: String
2173
sshHostDsaPriv = sshConfigDir ++ "/ssh_host_dsa_key"
2174

    
2175
sshHostDsaPub :: String
2176
sshHostDsaPub = sshHostDsaPriv ++ ".pub"
2177

    
2178
sshHostRsaPriv :: String
2179
sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key"
2180

    
2181
sshHostRsaPub :: String
2182
sshHostRsaPub = sshHostRsaPriv ++ ".pub"
2183

    
2184
-- | Path generating random UUID
2185
randomUuidFile :: String
2186
randomUuidFile = ConstantUtils.randomUuidFile
2187

    
2188
-- * Auto-repair tag prefixes
2189

    
2190
autoRepairTagPrefix :: String
2191
autoRepairTagPrefix = "ganeti:watcher:autorepair:"
2192

    
2193
autoRepairTagEnabled :: String
2194
autoRepairTagEnabled = autoRepairTagPrefix
2195

    
2196
autoRepairTagPending :: String
2197
autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
2198

    
2199
autoRepairTagResult :: String
2200
autoRepairTagResult = autoRepairTagPrefix ++ "result:"
2201

    
2202
autoRepairTagSuspended :: String
2203
autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
2204

    
2205
-- * Auto-repair levels
2206

    
2207
autoRepairFailover :: String
2208
autoRepairFailover = "failover"
2209

    
2210
autoRepairFixStorage :: String
2211
autoRepairFixStorage = "fix-storage"
2212

    
2213
autoRepairMigrate :: String
2214
autoRepairMigrate = "migrate"
2215

    
2216
autoRepairReinstall :: String
2217
autoRepairReinstall = "reinstall"
2218

    
2219
autoRepairAllTypes :: FrozenSet String
2220
autoRepairAllTypes =
2221
  ConstantUtils.mkSet [autoRepairFailover,
2222
                       autoRepairFixStorage,
2223
                       autoRepairMigrate,
2224
                       autoRepairReinstall]
2225

    
2226
-- * Auto-repair results
2227

    
2228
autoRepairEnoperm :: String
2229
autoRepairEnoperm = "enoperm"
2230

    
2231
autoRepairFailure :: String
2232
autoRepairFailure = "failure"
2233

    
2234
autoRepairSuccess :: String
2235
autoRepairSuccess = "success"
2236

    
2237
autoRepairAllResults :: FrozenSet String
2238
autoRepairAllResults =
2239
  ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
2240

    
2241
-- | The version identifier for builtin data collectors
2242
builtinDataCollectorVersion :: String
2243
builtinDataCollectorVersion = "B"
2244

    
2245
-- | The reason trail opcode parameter name
2246
opcodeReason :: String
2247
opcodeReason = "reason"
2248

    
2249
diskstatsFile :: String
2250
diskstatsFile = "/proc/diskstats"
2251

    
2252
-- *  CPU load collector
2253

    
2254
statFile :: String
2255
statFile = "/proc/stat"
2256

    
2257
cpuavgloadBufferSize :: Int
2258
cpuavgloadBufferSize = 150
2259

    
2260
cpuavgloadWindowSize :: Int
2261
cpuavgloadWindowSize = 600
2262

    
2263
-- | Mond's variable for periodical data collection
2264
mondTimeInterval :: Int
2265
mondTimeInterval = 5
2266

    
2267
-- * Disk access modes
2268

    
2269
diskUserspace :: String
2270
diskUserspace = Types.diskAccessModeToRaw DiskUserspace
2271

    
2272
diskKernelspace :: String
2273
diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
2274

    
2275
diskValidAccessModes :: FrozenSet String
2276
diskValidAccessModes =
2277
  ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
2278

    
2279
-- | Timeout for queue draining in upgrades
2280
upgradeQueueDrainTimeout :: Int
2281
upgradeQueueDrainTimeout = 36 * 60 * 60 -- 1.5 days
2282

    
2283
-- | Intervall at which the queue is polled during upgrades
2284
upgradeQueuePollInterval :: Int
2285
upgradeQueuePollInterval  = 10