Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / HsConstants.hs @ 5c8f186c

History | View | Annotate | Download (62.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
ipCommandPath :: String
1143
ipCommandPath = AutoConf.ipPath
1144

    
1145
-- | Key for job IDs in opcode result
1146
jobIdsKey :: String
1147
jobIdsKey = "jobs"
1148

    
1149
-- * Runparts results
1150

    
1151
runpartsErr :: Int
1152
runpartsErr = 2
1153

    
1154
runpartsRun :: Int
1155
runpartsRun = 1
1156

    
1157
runpartsSkip :: Int
1158
runpartsSkip = 0
1159

    
1160
runpartsStatus :: [Int]
1161
runpartsStatus = [runpartsErr, runpartsRun, runpartsSkip]
1162

    
1163
-- * RPC
1164

    
1165
rpcEncodingNone :: Int
1166
rpcEncodingNone = 0
1167

    
1168
rpcEncodingZlibBase64 :: Int
1169
rpcEncodingZlibBase64 = 1
1170

    
1171
-- * Timeout table
1172
--
1173
-- Various time constants for the timeout table
1174

    
1175
rpcTmoUrgent :: Int
1176
rpcTmoUrgent = Types.rpcTimeoutToRaw Urgent
1177

    
1178
rpcTmoFast :: Int
1179
rpcTmoFast = Types.rpcTimeoutToRaw Fast
1180

    
1181
rpcTmoNormal :: Int
1182
rpcTmoNormal = Types.rpcTimeoutToRaw Normal
1183

    
1184
rpcTmoSlow :: Int
1185
rpcTmoSlow = Types.rpcTimeoutToRaw Slow
1186

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

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

    
1199
-- | Timeout for connecting to nodes (seconds)
1200
rpcConnectTimeout :: Int
1201
rpcConnectTimeout = 5
1202

    
1203
-- OS
1204

    
1205
osScriptCreate :: String
1206
osScriptCreate = "create"
1207

    
1208
osScriptExport :: String
1209
osScriptExport = "export"
1210

    
1211
osScriptImport :: String
1212
osScriptImport = "import"
1213

    
1214
osScriptRename :: String
1215
osScriptRename = "rename"
1216

    
1217
osScriptVerify :: String
1218
osScriptVerify = "verify"
1219

    
1220
osScripts :: [String]
1221
osScripts = [osScriptCreate, osScriptExport, osScriptImport, osScriptRename,
1222
             osScriptVerify]
1223

    
1224
osApiFile :: String
1225
osApiFile = "ganeti_api_version"
1226

    
1227
osVariantsFile :: String
1228
osVariantsFile = "variants.list"
1229

    
1230
osParametersFile :: String
1231
osParametersFile = "parameters.list"
1232

    
1233
osValidateParameters :: String
1234
osValidateParameters = "parameters"
1235

    
1236
osValidateCalls :: FrozenSet String
1237
osValidateCalls = ConstantUtils.mkSet [osValidateParameters]
1238

    
1239
-- | External Storage (ES) related constants
1240

    
1241
esActionAttach :: String
1242
esActionAttach = "attach"
1243

    
1244
esActionCreate :: String
1245
esActionCreate = "create"
1246

    
1247
esActionDetach :: String
1248
esActionDetach = "detach"
1249

    
1250
esActionGrow :: String
1251
esActionGrow = "grow"
1252

    
1253
esActionRemove :: String
1254
esActionRemove = "remove"
1255

    
1256
esActionSetinfo :: String
1257
esActionSetinfo = "setinfo"
1258

    
1259
esActionVerify :: String
1260
esActionVerify = "verify"
1261

    
1262
esScriptCreate :: String
1263
esScriptCreate = esActionCreate
1264

    
1265
esScriptRemove :: String
1266
esScriptRemove = esActionRemove
1267

    
1268
esScriptGrow :: String
1269
esScriptGrow = esActionGrow
1270

    
1271
esScriptAttach :: String
1272
esScriptAttach = esActionAttach
1273

    
1274
esScriptDetach :: String
1275
esScriptDetach = esActionDetach
1276

    
1277
esScriptSetinfo :: String
1278
esScriptSetinfo = esActionSetinfo
1279

    
1280
esScriptVerify :: String
1281
esScriptVerify = esActionVerify
1282

    
1283
esScripts :: FrozenSet String
1284
esScripts =
1285
  ConstantUtils.mkSet [esScriptAttach,
1286
                       esScriptCreate,
1287
                       esScriptDetach,
1288
                       esScriptGrow,
1289
                       esScriptRemove,
1290
                       esScriptSetinfo,
1291
                       esScriptVerify]
1292

    
1293
esParametersFile :: String
1294
esParametersFile = "parameters.list"
1295

    
1296
-- * Reboot types
1297

    
1298
instanceRebootSoft :: String
1299
instanceRebootSoft = Types.rebootTypeToRaw RebootSoft
1300

    
1301
instanceRebootHard :: String
1302
instanceRebootHard = Types.rebootTypeToRaw RebootHard
1303

    
1304
instanceRebootFull :: String
1305
instanceRebootFull = Types.rebootTypeToRaw RebootFull
1306

    
1307
rebootTypes :: FrozenSet String
1308
rebootTypes = ConstantUtils.mkSet $ map Types.rebootTypeToRaw [minBound..]
1309

    
1310
-- * Instance reboot behaviors
1311

    
1312
instanceRebootAllowed :: String
1313
instanceRebootAllowed = "reboot"
1314

    
1315
instanceRebootExit :: String
1316
instanceRebootExit = "exit"
1317

    
1318
rebootBehaviors :: [String]
1319
rebootBehaviors = [instanceRebootAllowed, instanceRebootExit]
1320

    
1321
-- * VTypes
1322

    
1323
vtypeBool :: VType
1324
vtypeBool = VTypeBool
1325

    
1326
vtypeInt :: VType
1327
vtypeInt = VTypeInt
1328

    
1329
vtypeMaybeString :: VType
1330
vtypeMaybeString = VTypeMaybeString
1331

    
1332
-- | Size in MiBs
1333
vtypeSize :: VType
1334
vtypeSize = VTypeSize
1335

    
1336
vtypeString :: VType
1337
vtypeString = VTypeString
1338

    
1339
enforceableTypes :: FrozenSet VType
1340
enforceableTypes = ConstantUtils.mkSet [minBound..]
1341

    
1342
-- | Constant representing that the user does not specify any IP version
1343
ifaceNoIpVersionSpecified :: Int
1344
ifaceNoIpVersionSpecified = 0
1345

    
1346
validSerialSpeeds :: [Int]
1347
validSerialSpeeds =
1348
  [75,
1349
   110,
1350
   300,
1351
   600,
1352
   1200,
1353
   1800,
1354
   2400,
1355
   4800,
1356
   9600,
1357
   14400,
1358
   19200,
1359
   28800,
1360
   38400,
1361
   57600,
1362
   115200,
1363
   230400,
1364
   345600,
1365
   460800]
1366

    
1367
-- * HV parameter names (global namespace)
1368

    
1369
hvAcpi :: String
1370
hvAcpi = "acpi"
1371

    
1372
hvBlockdevPrefix :: String
1373
hvBlockdevPrefix = "blockdev_prefix"
1374

    
1375
hvBootloaderArgs :: String
1376
hvBootloaderArgs = "bootloader_args"
1377

    
1378
hvBootloaderPath :: String
1379
hvBootloaderPath = "bootloader_path"
1380

    
1381
hvBootOrder :: String
1382
hvBootOrder = "boot_order"
1383

    
1384
hvCdromImagePath :: String
1385
hvCdromImagePath = "cdrom_image_path"
1386

    
1387
hvCpuCap :: String
1388
hvCpuCap = "cpu_cap"
1389

    
1390
hvCpuCores :: String
1391
hvCpuCores = "cpu_cores"
1392

    
1393
hvCpuMask :: String
1394
hvCpuMask = "cpu_mask"
1395

    
1396
hvCpuSockets :: String
1397
hvCpuSockets = "cpu_sockets"
1398

    
1399
hvCpuThreads :: String
1400
hvCpuThreads = "cpu_threads"
1401

    
1402
hvCpuType :: String
1403
hvCpuType = "cpu_type"
1404

    
1405
hvCpuWeight :: String
1406
hvCpuWeight = "cpu_weight"
1407

    
1408
hvDeviceModel :: String
1409
hvDeviceModel = "device_model"
1410

    
1411
hvDiskCache :: String
1412
hvDiskCache = "disk_cache"
1413

    
1414
hvDiskType :: String
1415
hvDiskType = "disk_type"
1416

    
1417
hvInitrdPath :: String
1418
hvInitrdPath = "initrd_path"
1419

    
1420
hvInitScript :: String
1421
hvInitScript = "init_script"
1422

    
1423
hvKernelArgs :: String
1424
hvKernelArgs = "kernel_args"
1425

    
1426
hvKernelPath :: String
1427
hvKernelPath = "kernel_path"
1428

    
1429
hvKeymap :: String
1430
hvKeymap = "keymap"
1431

    
1432
hvKvmCdrom2ImagePath :: String
1433
hvKvmCdrom2ImagePath = "cdrom2_image_path"
1434

    
1435
hvKvmCdromDiskType :: String
1436
hvKvmCdromDiskType = "cdrom_disk_type"
1437

    
1438
hvKvmExtra :: String
1439
hvKvmExtra = "kvm_extra"
1440

    
1441
hvKvmFlag :: String
1442
hvKvmFlag = "kvm_flag"
1443

    
1444
hvKvmFloppyImagePath :: String
1445
hvKvmFloppyImagePath = "floppy_image_path"
1446

    
1447
hvKvmMachineVersion :: String
1448
hvKvmMachineVersion = "machine_version"
1449

    
1450
hvKvmPath :: String
1451
hvKvmPath = "kvm_path"
1452

    
1453
hvKvmSpiceAudioCompr :: String
1454
hvKvmSpiceAudioCompr = "spice_playback_compression"
1455

    
1456
hvKvmSpiceBind :: String
1457
hvKvmSpiceBind = "spice_bind"
1458

    
1459
hvKvmSpiceIpVersion :: String
1460
hvKvmSpiceIpVersion = "spice_ip_version"
1461

    
1462
hvKvmSpiceJpegImgCompr :: String
1463
hvKvmSpiceJpegImgCompr = "spice_jpeg_wan_compression"
1464

    
1465
hvKvmSpiceLosslessImgCompr :: String
1466
hvKvmSpiceLosslessImgCompr = "spice_image_compression"
1467

    
1468
hvKvmSpicePasswordFile :: String
1469
hvKvmSpicePasswordFile = "spice_password_file"
1470

    
1471
hvKvmSpiceStreamingVideoDetection :: String
1472
hvKvmSpiceStreamingVideoDetection = "spice_streaming_video"
1473

    
1474
hvKvmSpiceTlsCiphers :: String
1475
hvKvmSpiceTlsCiphers = "spice_tls_ciphers"
1476

    
1477
hvKvmSpiceUseTls :: String
1478
hvKvmSpiceUseTls = "spice_use_tls"
1479

    
1480
hvKvmSpiceUseVdagent :: String
1481
hvKvmSpiceUseVdagent = "spice_use_vdagent"
1482

    
1483
hvKvmSpiceZlibGlzImgCompr :: String
1484
hvKvmSpiceZlibGlzImgCompr = "spice_zlib_glz_wan_compression"
1485

    
1486
hvKvmUseChroot :: String
1487
hvKvmUseChroot = "use_chroot"
1488

    
1489
hvMemPath :: String
1490
hvMemPath = "mem_path"
1491

    
1492
hvMigrationBandwidth :: String
1493
hvMigrationBandwidth = "migration_bandwidth"
1494

    
1495
hvMigrationDowntime :: String
1496
hvMigrationDowntime = "migration_downtime"
1497

    
1498
hvMigrationMode :: String
1499
hvMigrationMode = "migration_mode"
1500

    
1501
hvMigrationPort :: String
1502
hvMigrationPort = "migration_port"
1503

    
1504
hvNicType :: String
1505
hvNicType = "nic_type"
1506

    
1507
hvPae :: String
1508
hvPae = "pae"
1509

    
1510
hvPassthrough :: String
1511
hvPassthrough = "pci_pass"
1512

    
1513
hvRebootBehavior :: String
1514
hvRebootBehavior = "reboot_behavior"
1515

    
1516
hvRootPath :: String
1517
hvRootPath = "root_path"
1518

    
1519
hvSecurityDomain :: String
1520
hvSecurityDomain = "security_domain"
1521

    
1522
hvSecurityModel :: String
1523
hvSecurityModel = "security_model"
1524

    
1525
hvSerialConsole :: String
1526
hvSerialConsole = "serial_console"
1527

    
1528
hvSerialSpeed :: String
1529
hvSerialSpeed = "serial_speed"
1530

    
1531
hvSoundhw :: String
1532
hvSoundhw = "soundhw"
1533

    
1534
hvUsbDevices :: String
1535
hvUsbDevices = "usb_devices"
1536

    
1537
hvUsbMouse :: String
1538
hvUsbMouse = "usb_mouse"
1539

    
1540
hvUseBootloader :: String
1541
hvUseBootloader = "use_bootloader"
1542

    
1543
hvUseLocaltime :: String
1544
hvUseLocaltime = "use_localtime"
1545

    
1546
hvVga :: String
1547
hvVga = "vga"
1548

    
1549
hvVhostNet :: String
1550
hvVhostNet = "vhost_net"
1551

    
1552
hvVifScript :: String
1553
hvVifScript = "vif_script"
1554

    
1555
hvVifType :: String
1556
hvVifType = "vif_type"
1557

    
1558
hvViridian :: String
1559
hvViridian = "viridian"
1560

    
1561
hvVncBindAddress :: String
1562
hvVncBindAddress = "vnc_bind_address"
1563

    
1564
hvVncPasswordFile :: String
1565
hvVncPasswordFile = "vnc_password_file"
1566

    
1567
hvVncTls :: String
1568
hvVncTls = "vnc_tls"
1569

    
1570
hvVncX509 :: String
1571
hvVncX509 = "vnc_x509_path"
1572

    
1573
hvVncX509Verify :: String
1574
hvVncX509Verify = "vnc_x509_verify"
1575

    
1576
hvVnetHdr :: String
1577
hvVnetHdr = "vnet_hdr"
1578

    
1579
hvXenCmd :: String
1580
hvXenCmd = "xen_cmd"
1581

    
1582
hvXenCpuid :: String
1583
hvXenCpuid = "cpuid"
1584

    
1585
hvsParameterTitles :: Map String String
1586
hvsParameterTitles =
1587
  Map.fromList
1588
  [(hvAcpi, "ACPI"),
1589
   (hvBootOrder, "Boot_order"),
1590
   (hvCdromImagePath, "CDROM_image_path"),
1591
   (hvCpuType, "cpu_type"),
1592
   (hvDiskType, "Disk_type"),
1593
   (hvInitrdPath, "Initrd_path"),
1594
   (hvKernelPath, "Kernel_path"),
1595
   (hvNicType, "NIC_type"),
1596
   (hvPae, "PAE"),
1597
   (hvPassthrough, "pci_pass"),
1598
   (hvVncBindAddress, "VNC_bind_address")]
1599

    
1600
-- | Instance specs
1601
--
1602
-- FIXME: these should be associated with 'Ganeti.HTools.Types.ISpec'
1603

    
1604
ispecMemSize :: String
1605
ispecMemSize = ConstantUtils.ispecMemSize
1606

    
1607
ispecCpuCount :: String
1608
ispecCpuCount = ConstantUtils.ispecCpuCount
1609

    
1610
ispecDiskCount :: String
1611
ispecDiskCount = ConstantUtils.ispecDiskCount
1612

    
1613
ispecDiskSize :: String
1614
ispecDiskSize = ConstantUtils.ispecDiskSize
1615

    
1616
ispecNicCount :: String
1617
ispecNicCount = ConstantUtils.ispecNicCount
1618

    
1619
ispecSpindleUse :: String
1620
ispecSpindleUse = ConstantUtils.ispecSpindleUse
1621

    
1622
ispecsParameterTypes :: Map String VType
1623
ispecsParameterTypes =
1624
  Map.fromList
1625
  [(ConstantUtils.ispecDiskSize, VTypeInt),
1626
   (ConstantUtils.ispecCpuCount, VTypeInt),
1627
   (ConstantUtils.ispecSpindleUse, VTypeInt),
1628
   (ConstantUtils.ispecMemSize, VTypeInt),
1629
   (ConstantUtils.ispecNicCount, VTypeInt),
1630
   (ConstantUtils.ispecDiskCount, VTypeInt)]
1631

    
1632
ispecsParameters :: FrozenSet String
1633
ispecsParameters =
1634
  ConstantUtils.mkSet [ConstantUtils.ispecCpuCount,
1635
                       ConstantUtils.ispecDiskCount,
1636
                       ConstantUtils.ispecDiskSize,
1637
                       ConstantUtils.ispecMemSize,
1638
                       ConstantUtils.ispecNicCount,
1639
                       ConstantUtils.ispecSpindleUse]
1640

    
1641
ispecsMinmax :: String
1642
ispecsMinmax = ConstantUtils.ispecsMinmax
1643

    
1644
ispecsMax :: String
1645
ispecsMax = "max"
1646

    
1647
ispecsMin :: String
1648
ispecsMin = "min"
1649

    
1650
ispecsStd :: String
1651
ispecsStd = ConstantUtils.ispecsStd
1652

    
1653
ipolicyDts :: String
1654
ipolicyDts = ConstantUtils.ipolicyDts
1655

    
1656
ipolicyVcpuRatio :: String
1657
ipolicyVcpuRatio = ConstantUtils.ipolicyVcpuRatio
1658

    
1659
ipolicySpindleRatio :: String
1660
ipolicySpindleRatio = ConstantUtils.ipolicySpindleRatio
1661

    
1662
ispecsMinmaxKeys :: FrozenSet String
1663
ispecsMinmaxKeys = ConstantUtils.mkSet [ispecsMax, ispecsMin]
1664

    
1665
ipolicyParameters :: FrozenSet String
1666
ipolicyParameters =
1667
  ConstantUtils.mkSet [ConstantUtils.ipolicyVcpuRatio,
1668
                       ConstantUtils.ipolicySpindleRatio]
1669

    
1670
ipolicyAllKeys :: FrozenSet String
1671
ipolicyAllKeys =
1672
  ConstantUtils.union ipolicyParameters $
1673
  ConstantUtils.mkSet [ConstantUtils.ipolicyDts,
1674
                       ConstantUtils.ispecsMinmax,
1675
                       ispecsStd]
1676

    
1677
-- | Node parameter names
1678

    
1679
ndExclusiveStorage :: String
1680
ndExclusiveStorage = "exclusive_storage"
1681

    
1682
ndOobProgram :: String
1683
ndOobProgram = "oob_program"
1684

    
1685
ndSpindleCount :: String
1686
ndSpindleCount = "spindle_count"
1687

    
1688
ndOvs :: String
1689
ndOvs = "ovs"
1690

    
1691
ndOvsLink :: String
1692
ndOvsLink = "ovs_link"
1693

    
1694
ndOvsName :: String
1695
ndOvsName = "ovs_name"
1696

    
1697
ndsParameterTypes :: Map String VType
1698
ndsParameterTypes =
1699
  Map.fromList
1700
  [(ndExclusiveStorage, VTypeBool),
1701
   (ndOobProgram, VTypeString),
1702
   (ndOvs, VTypeBool),
1703
   (ndOvsLink, VTypeMaybeString),
1704
   (ndOvsName, VTypeMaybeString),
1705
   (ndSpindleCount, VTypeInt)]
1706

    
1707
ndsParameters :: FrozenSet String
1708
ndsParameters = ConstantUtils.mkSet (Map.keys ndsParameterTypes)
1709

    
1710
ndsParameterTitles :: Map String String
1711
ndsParameterTitles =
1712
  Map.fromList
1713
  [(ndExclusiveStorage, "ExclusiveStorage"),
1714
   (ndOobProgram, "OutOfBandProgram"),
1715
   (ndOvs, "OpenvSwitch"),
1716
   (ndOvsLink, "OpenvSwitchLink"),
1717
   (ndOvsName, "OpenvSwitchName"),
1718
   (ndSpindleCount, "SpindleCount")]
1719

    
1720

    
1721

    
1722

    
1723

    
1724

    
1725

    
1726
-- * OOB supported commands
1727

    
1728
oobPowerOn :: String
1729
oobPowerOn = Types.oobCommandToRaw OobPowerOn
1730

    
1731
oobPowerOff :: String
1732
oobPowerOff = Types.oobCommandToRaw OobPowerOff
1733

    
1734
oobPowerCycle :: String
1735
oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
1736

    
1737
oobPowerStatus :: String
1738
oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
1739

    
1740
oobHealth :: String
1741
oobHealth = Types.oobCommandToRaw OobHealth
1742

    
1743
oobCommands :: FrozenSet String
1744
oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
1745

    
1746
oobPowerStatusPowered :: String
1747
oobPowerStatusPowered = "powered"
1748

    
1749
-- | 60 seconds
1750
oobTimeout :: Int
1751
oobTimeout = 60
1752

    
1753
-- | 2 seconds
1754
oobPowerDelay :: Double
1755
oobPowerDelay = 2.0
1756

    
1757
oobStatusCritical :: String
1758
oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
1759

    
1760
oobStatusOk :: String
1761
oobStatusOk = Types.oobStatusToRaw OobStatusOk
1762

    
1763
oobStatusUnknown :: String
1764
oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
1765

    
1766
oobStatusWarning :: String
1767
oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
1768

    
1769
oobStatuses :: FrozenSet String
1770
oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
1771

    
1772
-- * NIC_* constants are used inside the ganeti config
1773

    
1774
nicLink :: String
1775
nicLink = "link"
1776

    
1777
nicMode :: String
1778
nicMode = "mode"
1779

    
1780
nicVlan :: String
1781
nicVlan = "vlan"
1782

    
1783
nicModeBridged :: String
1784
nicModeBridged = Types.nICModeToRaw NMBridged
1785

    
1786
nicModeRouted :: String
1787
nicModeRouted = Types.nICModeToRaw NMRouted
1788

    
1789
nicModeOvs :: String
1790
nicModeOvs = Types.nICModeToRaw NMOvs
1791

    
1792
nicIpPool :: String
1793
nicIpPool = Types.nICModeToRaw NMPool
1794

    
1795
nicValidModes :: FrozenSet String
1796
nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
1797

    
1798
-- * Hypervisor constants
1799

    
1800
htXenPvm :: String
1801
htXenPvm = Types.hypervisorToRaw XenPvm
1802

    
1803
htFake :: String
1804
htFake = Types.hypervisorToRaw Fake
1805

    
1806
htXenHvm :: String
1807
htXenHvm = Types.hypervisorToRaw XenHvm
1808

    
1809
htKvm :: String
1810
htKvm = Types.hypervisorToRaw Kvm
1811

    
1812
htChroot :: String
1813
htChroot = Types.hypervisorToRaw Chroot
1814

    
1815
htLxc :: String
1816
htLxc = Types.hypervisorToRaw Lxc
1817

    
1818
hyperTypes :: FrozenSet String
1819
hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
1820

    
1821
htsReqPort :: FrozenSet String
1822
htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
1823

    
1824
-- * Migration type
1825

    
1826
htMigrationLive :: String
1827
htMigrationLive = Types.migrationModeToRaw MigrationLive
1828

    
1829
htMigrationNonlive :: String
1830
htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
1831

    
1832
htMigrationModes :: FrozenSet String
1833
htMigrationModes =
1834
  ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
1835

    
1836
-- * Cluster verify steps
1837

    
1838
verifyNplusoneMem :: String
1839
verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
1840

    
1841
verifyOptionalChecks :: FrozenSet String
1842
verifyOptionalChecks =
1843
  ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
1844

    
1845
-- * Cluster Verify error classes
1846

    
1847
cvTcluster :: String
1848
cvTcluster = "cluster"
1849

    
1850
cvTgroup :: String
1851
cvTgroup = "group"
1852

    
1853
cvTnode :: String
1854
cvTnode = "node"
1855

    
1856
cvTinstance :: String
1857
cvTinstance = "instance"
1858

    
1859
-- * Cluster Verify error codes and documentation
1860

    
1861
cvEclustercert :: (String, String, String)
1862
cvEclustercert =
1863
  ("cluster",
1864
   Types.cVErrorCodeToRaw CvECLUSTERCERT,
1865
   "Cluster certificate files verification failure")
1866

    
1867
cvEclustercfg :: (String, String, String)
1868
cvEclustercfg =
1869
  ("cluster",
1870
   Types.cVErrorCodeToRaw CvECLUSTERCFG,
1871
   "Cluster configuration verification failure")
1872

    
1873
cvEclusterdanglinginst :: (String, String, String)
1874
cvEclusterdanglinginst =
1875
  ("node",
1876
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
1877
   "Some instances have a non-existing primary node")
1878

    
1879
cvEclusterdanglingnodes :: (String, String, String)
1880
cvEclusterdanglingnodes =
1881
  ("node",
1882
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
1883
   "Some nodes belong to non-existing groups")
1884

    
1885
cvEclusterfilecheck :: (String, String, String)
1886
cvEclusterfilecheck =
1887
  ("cluster",
1888
   Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
1889
   "Cluster configuration verification failure")
1890

    
1891
cvEgroupdifferentpvsize :: (String, String, String)
1892
cvEgroupdifferentpvsize =
1893
  ("group",
1894
   Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
1895
   "PVs in the group have different sizes")
1896

    
1897
cvEinstancebadnode :: (String, String, String)
1898
cvEinstancebadnode =
1899
  ("instance",
1900
   Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
1901
   "Instance marked as running lives on an offline node")
1902

    
1903
cvEinstancedown :: (String, String, String)
1904
cvEinstancedown =
1905
  ("instance",
1906
   Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
1907
   "Instance not running on its primary node")
1908

    
1909
cvEinstancefaultydisk :: (String, String, String)
1910
cvEinstancefaultydisk =
1911
  ("instance",
1912
   Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
1913
   "Impossible to retrieve status for a disk")
1914

    
1915
cvEinstancelayout :: (String, String, String)
1916
cvEinstancelayout =
1917
  ("instance",
1918
   Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
1919
   "Instance has multiple secondary nodes")
1920

    
1921
cvEinstancemissingcfgparameter :: (String, String, String)
1922
cvEinstancemissingcfgparameter =
1923
  ("instance",
1924
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
1925
   "A configuration parameter for an instance is missing")
1926

    
1927
cvEinstancemissingdisk :: (String, String, String)
1928
cvEinstancemissingdisk =
1929
  ("instance",
1930
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
1931
   "Missing volume on an instance")
1932

    
1933
cvEinstancepolicy :: (String, String, String)
1934
cvEinstancepolicy =
1935
  ("instance",
1936
   Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
1937
   "Instance does not meet policy")
1938

    
1939
cvEinstancesplitgroups :: (String, String, String)
1940
cvEinstancesplitgroups =
1941
  ("instance",
1942
   Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
1943
   "Instance with primary and secondary nodes in different groups")
1944

    
1945
cvEinstanceunsuitablenode :: (String, String, String)
1946
cvEinstanceunsuitablenode =
1947
  ("instance",
1948
   Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
1949
   "Instance running on nodes that are not suitable for it")
1950

    
1951
cvEinstancewrongnode :: (String, String, String)
1952
cvEinstancewrongnode =
1953
  ("instance",
1954
   Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
1955
   "Instance running on the wrong node")
1956

    
1957
cvEnodedrbd :: (String, String, String)
1958
cvEnodedrbd =
1959
  ("node",
1960
   Types.cVErrorCodeToRaw CvENODEDRBD,
1961
   "Error parsing the DRBD status file")
1962

    
1963
cvEnodedrbdhelper :: (String, String, String)
1964
cvEnodedrbdhelper =
1965
  ("node",
1966
   Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
1967
   "Error caused by the DRBD helper")
1968

    
1969
cvEnodedrbdversion :: (String, String, String)
1970
cvEnodedrbdversion =
1971
  ("node",
1972
   Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
1973
   "DRBD version mismatch within a node group")
1974

    
1975
cvEnodefilecheck :: (String, String, String)
1976
cvEnodefilecheck =
1977
  ("node",
1978
   Types.cVErrorCodeToRaw CvENODEFILECHECK,
1979
   "Error retrieving the checksum of the node files")
1980

    
1981
cvEnodefilestoragepaths :: (String, String, String)
1982
cvEnodefilestoragepaths =
1983
  ("node",
1984
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
1985
   "Detected bad file storage paths")
1986

    
1987
cvEnodefilestoragepathunusable :: (String, String, String)
1988
cvEnodefilestoragepathunusable =
1989
  ("node",
1990
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
1991
   "File storage path unusable")
1992

    
1993
cvEnodehooks :: (String, String, String)
1994
cvEnodehooks =
1995
  ("node",
1996
   Types.cVErrorCodeToRaw CvENODEHOOKS,
1997
   "Communication failure in hooks execution")
1998

    
1999
cvEnodehv :: (String, String, String)
2000
cvEnodehv =
2001
  ("node",
2002
   Types.cVErrorCodeToRaw CvENODEHV,
2003
   "Hypervisor parameters verification failure")
2004

    
2005
cvEnodelvm :: (String, String, String)
2006
cvEnodelvm =
2007
  ("node",
2008
   Types.cVErrorCodeToRaw CvENODELVM,
2009
   "LVM-related node error")
2010

    
2011
cvEnoden1 :: (String, String, String)
2012
cvEnoden1 =
2013
  ("node",
2014
   Types.cVErrorCodeToRaw CvENODEN1,
2015
   "Not enough memory to accommodate instance failovers")
2016

    
2017
cvEnodenet :: (String, String, String)
2018
cvEnodenet =
2019
  ("node",
2020
   Types.cVErrorCodeToRaw CvENODENET,
2021
   "Network-related node error")
2022

    
2023
cvEnodeoobpath :: (String, String, String)
2024
cvEnodeoobpath =
2025
  ("node",
2026
   Types.cVErrorCodeToRaw CvENODEOOBPATH,
2027
   "Invalid Out Of Band path")
2028

    
2029
cvEnodeorphaninstance :: (String, String, String)
2030
cvEnodeorphaninstance =
2031
  ("node",
2032
   Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
2033
   "Unknown intance running on a node")
2034

    
2035
cvEnodeorphanlv :: (String, String, String)
2036
cvEnodeorphanlv =
2037
  ("node",
2038
   Types.cVErrorCodeToRaw CvENODEORPHANLV,
2039
   "Unknown LVM logical volume")
2040

    
2041
cvEnodeos :: (String, String, String)
2042
cvEnodeos =
2043
  ("node",
2044
   Types.cVErrorCodeToRaw CvENODEOS,
2045
   "OS-related node error")
2046

    
2047
cvEnoderpc :: (String, String, String)
2048
cvEnoderpc =
2049
  ("node",
2050
   Types.cVErrorCodeToRaw CvENODERPC,
2051
   "Error during connection to the primary node of an instance")
2052

    
2053
cvEnodesetup :: (String, String, String)
2054
cvEnodesetup =
2055
  ("node",
2056
   Types.cVErrorCodeToRaw CvENODESETUP,
2057
   "Node setup error")
2058

    
2059
cvEnodesharedfilestoragepathunusable :: (String, String, String)
2060
cvEnodesharedfilestoragepathunusable =
2061
  ("node",
2062
   Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
2063
   "Shared file storage path unusable")
2064

    
2065
cvEnodessh :: (String, String, String)
2066
cvEnodessh =
2067
  ("node",
2068
   Types.cVErrorCodeToRaw CvENODESSH,
2069
   "SSH-related node error")
2070

    
2071
cvEnodetime :: (String, String, String)
2072
cvEnodetime =
2073
  ("node",
2074
   Types.cVErrorCodeToRaw CvENODETIME,
2075
   "Node returned invalid time")
2076

    
2077
cvEnodeuserscripts :: (String, String, String)
2078
cvEnodeuserscripts =
2079
  ("node",
2080
   Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
2081
   "User scripts not present or not executable")
2082

    
2083
cvEnodeversion :: (String, String, String)
2084
cvEnodeversion =
2085
  ("node",
2086
   Types.cVErrorCodeToRaw CvENODEVERSION,
2087
   "Protocol version mismatch or Ganeti version mismatch")
2088

    
2089
cvAllEcodes :: FrozenSet (String, String, String)
2090
cvAllEcodes =
2091
  ConstantUtils.mkSet
2092
  [cvEclustercert,
2093
   cvEclustercfg,
2094
   cvEclusterdanglinginst,
2095
   cvEclusterdanglingnodes,
2096
   cvEclusterfilecheck,
2097
   cvEgroupdifferentpvsize,
2098
   cvEinstancebadnode,
2099
   cvEinstancedown,
2100
   cvEinstancefaultydisk,
2101
   cvEinstancelayout,
2102
   cvEinstancemissingcfgparameter,
2103
   cvEinstancemissingdisk,
2104
   cvEinstancepolicy,
2105
   cvEinstancesplitgroups,
2106
   cvEinstanceunsuitablenode,
2107
   cvEinstancewrongnode,
2108
   cvEnodedrbd,
2109
   cvEnodedrbdhelper,
2110
   cvEnodedrbdversion,
2111
   cvEnodefilecheck,
2112
   cvEnodefilestoragepaths,
2113
   cvEnodefilestoragepathunusable,
2114
   cvEnodehooks,
2115
   cvEnodehv,
2116
   cvEnodelvm,
2117
   cvEnoden1,
2118
   cvEnodenet,
2119
   cvEnodeoobpath,
2120
   cvEnodeorphaninstance,
2121
   cvEnodeorphanlv,
2122
   cvEnodeos,
2123
   cvEnoderpc,
2124
   cvEnodesetup,
2125
   cvEnodesharedfilestoragepathunusable,
2126
   cvEnodessh,
2127
   cvEnodetime,
2128
   cvEnodeuserscripts,
2129
   cvEnodeversion]
2130

    
2131
cvAllEcodesStrings :: FrozenSet String
2132
cvAllEcodesStrings =
2133
  ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
2134

    
2135
-- * Instance status
2136

    
2137
inststAdmindown :: String
2138
inststAdmindown = Types.instanceStatusToRaw StatusDown
2139

    
2140
inststAdminoffline :: String
2141
inststAdminoffline = Types.instanceStatusToRaw StatusOffline
2142

    
2143
inststErrordown :: String
2144
inststErrordown = Types.instanceStatusToRaw ErrorDown
2145

    
2146
inststErrorup :: String
2147
inststErrorup = Types.instanceStatusToRaw ErrorUp
2148

    
2149
inststNodedown :: String
2150
inststNodedown = Types.instanceStatusToRaw NodeDown
2151

    
2152
inststNodeoffline :: String
2153
inststNodeoffline = Types.instanceStatusToRaw NodeOffline
2154

    
2155
inststRunning :: String
2156
inststRunning = Types.instanceStatusToRaw Running
2157

    
2158
inststWrongnode :: String
2159
inststWrongnode = Types.instanceStatusToRaw WrongNode
2160

    
2161
inststAll :: FrozenSet String
2162
inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
2163

    
2164
-- * Admin states
2165

    
2166
adminstDown :: String
2167
adminstDown = Types.adminStateToRaw AdminDown
2168

    
2169
adminstOffline :: String
2170
adminstOffline = Types.adminStateToRaw AdminOffline
2171

    
2172
adminstUp :: String
2173
adminstUp = Types.adminStateToRaw AdminUp
2174

    
2175
adminstAll :: FrozenSet String
2176
adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
2177

    
2178
-- * Node roles
2179

    
2180
nrDrained :: String
2181
nrDrained = Types.nodeRoleToRaw NRDrained
2182

    
2183
nrMaster :: String
2184
nrMaster = Types.nodeRoleToRaw NRMaster
2185

    
2186
nrMcandidate :: String
2187
nrMcandidate = Types.nodeRoleToRaw NRCandidate
2188

    
2189
nrOffline :: String
2190
nrOffline = Types.nodeRoleToRaw NROffline
2191

    
2192
nrRegular :: String
2193
nrRegular = Types.nodeRoleToRaw NRRegular
2194

    
2195
nrAll :: FrozenSet String
2196
nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
2197

    
2198
-- * Allocator framework constants
2199

    
2200
iallocatorVersion :: Int
2201
iallocatorVersion = 2
2202

    
2203
iallocatorDirIn :: String
2204
iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
2205

    
2206
iallocatorDirOut :: String
2207
iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
2208

    
2209
validIallocatorDirections :: FrozenSet String
2210
validIallocatorDirections =
2211
  ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
2212

    
2213
iallocatorModeAlloc :: String
2214
iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
2215

    
2216
iallocatorModeChgGroup :: String
2217
iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
2218

    
2219
iallocatorModeMultiAlloc :: String
2220
iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
2221

    
2222
iallocatorModeNodeEvac :: String
2223
iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
2224

    
2225
iallocatorModeReloc :: String
2226
iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
2227

    
2228
validIallocatorModes :: FrozenSet String
2229
validIallocatorModes =
2230
  ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
2231

    
2232
iallocatorSearchPath :: [String]
2233
iallocatorSearchPath = AutoConf.iallocatorSearchPath
2234

    
2235
defaultIallocatorShortcut :: String
2236
defaultIallocatorShortcut = "."
2237

    
2238
-- * Node evacuation
2239

    
2240
nodeEvacPri :: String
2241
nodeEvacPri = Types.evacModeToRaw ChangePrimary
2242

    
2243
nodeEvacSec :: String
2244
nodeEvacSec = Types.evacModeToRaw ChangeSecondary
2245

    
2246
nodeEvacAll :: String
2247
nodeEvacAll = Types.evacModeToRaw ChangeAll
2248

    
2249
nodeEvacModes :: FrozenSet String
2250
nodeEvacModes = ConstantUtils.mkSet $ map Types.evacModeToRaw [minBound..]
2251

    
2252
-- * Job status
2253

    
2254
jobStatusQueued :: String
2255
jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
2256

    
2257
jobStatusWaiting :: String
2258
jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
2259

    
2260
jobStatusCanceling :: String
2261
jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
2262

    
2263
jobStatusRunning :: String
2264
jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
2265

    
2266
jobStatusCanceled :: String
2267
jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
2268

    
2269
jobStatusSuccess :: String
2270
jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
2271

    
2272
jobStatusError :: String
2273
jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
2274

    
2275
jobsPending :: FrozenSet String
2276
jobsPending =
2277
  ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
2278

    
2279
jobsFinalized :: FrozenSet String
2280
jobsFinalized =
2281
  ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
2282

    
2283
jobStatusAll :: FrozenSet String
2284
jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
2285

    
2286
-- * OpCode status
2287

    
2288
-- ** Not yet finalized opcodes
2289

    
2290
opStatusCanceling :: String
2291
opStatusCanceling = "canceling"
2292

    
2293
opStatusQueued :: String
2294
opStatusQueued = "queued"
2295

    
2296
opStatusRunning :: String
2297
opStatusRunning = "running"
2298

    
2299
opStatusWaiting :: String
2300
opStatusWaiting = "waiting"
2301

    
2302
-- ** Finalized opcodes
2303

    
2304
opStatusCanceled :: String
2305
opStatusCanceled = "canceled"
2306

    
2307
opStatusError :: String
2308
opStatusError = "error"
2309

    
2310
opStatusSuccess :: String
2311
opStatusSuccess = "success"
2312

    
2313
opsFinalized :: FrozenSet String
2314
opsFinalized =
2315
  ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
2316

    
2317
-- * OpCode priority
2318

    
2319
opPrioLowest :: Int
2320
opPrioLowest = 19
2321

    
2322
opPrioHighest :: Int
2323
opPrioHighest = -20
2324

    
2325
opPrioLow :: Int
2326
opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
2327

    
2328
opPrioNormal :: Int
2329
opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
2330

    
2331
opPrioHigh :: Int
2332
opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
2333

    
2334
opPrioSubmitValid :: FrozenSet Int
2335
opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
2336

    
2337
opPrioDefault :: Int
2338
opPrioDefault = opPrioNormal
2339

    
2340
-- * Execution log types
2341

    
2342
elogMessage :: String
2343
elogMessage = Types.eLogTypeToRaw ELogMessage
2344

    
2345
elogRemoteImport :: String
2346
elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
2347

    
2348
elogJqueueTest :: String
2349
elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
2350

    
2351
-- * Confd
2352

    
2353
confdProtocolVersion :: Int
2354
confdProtocolVersion = ConstantUtils.confdProtocolVersion
2355

    
2356
-- Confd request type
2357

    
2358
confdReqPing :: Int
2359
confdReqPing = Types.confdRequestTypeToRaw ReqPing
2360

    
2361
confdReqNodeRoleByname :: Int
2362
confdReqNodeRoleByname = Types.confdRequestTypeToRaw ReqNodeRoleByName
2363

    
2364
confdReqNodePipByInstanceIp :: Int
2365
confdReqNodePipByInstanceIp = Types.confdRequestTypeToRaw ReqNodePipByInstPip
2366

    
2367
confdReqClusterMaster :: Int
2368
confdReqClusterMaster = Types.confdRequestTypeToRaw ReqClusterMaster
2369

    
2370
confdReqNodePipList :: Int
2371
confdReqNodePipList = Types.confdRequestTypeToRaw ReqNodePipList
2372

    
2373
confdReqMcPipList :: Int
2374
confdReqMcPipList = Types.confdRequestTypeToRaw ReqMcPipList
2375

    
2376
confdReqInstancesIpsList :: Int
2377
confdReqInstancesIpsList = Types.confdRequestTypeToRaw ReqInstIpsList
2378

    
2379
confdReqNodeDrbd :: Int
2380
confdReqNodeDrbd = Types.confdRequestTypeToRaw ReqNodeDrbd
2381

    
2382
confdReqNodeInstances :: Int
2383
confdReqNodeInstances = Types.confdRequestTypeToRaw ReqNodeInstances
2384

    
2385
confdReqs :: FrozenSet Int
2386
confdReqs =
2387
  ConstantUtils.mkSet .
2388
  map Types.confdRequestTypeToRaw $
2389
  [minBound..] \\ [ReqNodeInstances]
2390

    
2391
-- * Confd request type
2392

    
2393
confdReqfieldName :: Int
2394
confdReqfieldName = Types.confdReqFieldToRaw ReqFieldName
2395

    
2396
confdReqfieldIp :: Int
2397
confdReqfieldIp = Types.confdReqFieldToRaw ReqFieldIp
2398

    
2399
confdReqfieldMnodePip :: Int
2400
confdReqfieldMnodePip = Types.confdReqFieldToRaw ReqFieldMNodePip
2401

    
2402
-- * Confd repl status
2403

    
2404
confdReplStatusOk :: Int
2405
confdReplStatusOk = Types.confdReplyStatusToRaw ReplyStatusOk
2406

    
2407
confdReplStatusError :: Int
2408
confdReplStatusError = Types.confdReplyStatusToRaw ReplyStatusError
2409

    
2410
confdReplStatusNotimplemented :: Int
2411
confdReplStatusNotimplemented = Types.confdReplyStatusToRaw ReplyStatusNotImpl
2412

    
2413
confdReplStatuses :: FrozenSet Int
2414
confdReplStatuses =
2415
  ConstantUtils.mkSet $ map Types.confdReplyStatusToRaw [minBound..]
2416

    
2417
-- * Confd node role
2418

    
2419
confdNodeRoleMaster :: Int
2420
confdNodeRoleMaster = Types.confdNodeRoleToRaw NodeRoleMaster
2421

    
2422
confdNodeRoleCandidate :: Int
2423
confdNodeRoleCandidate = Types.confdNodeRoleToRaw NodeRoleCandidate
2424

    
2425
confdNodeRoleOffline :: Int
2426
confdNodeRoleOffline = Types.confdNodeRoleToRaw NodeRoleOffline
2427

    
2428
confdNodeRoleDrained :: Int
2429
confdNodeRoleDrained = Types.confdNodeRoleToRaw NodeRoleDrained
2430

    
2431
confdNodeRoleRegular :: Int
2432
confdNodeRoleRegular = Types.confdNodeRoleToRaw NodeRoleRegular
2433

    
2434
-- * A few common errors for confd
2435

    
2436
confdErrorUnknownEntry :: Int
2437
confdErrorUnknownEntry = Types.confdErrorTypeToRaw ConfdErrorUnknownEntry
2438

    
2439
confdErrorInternal :: Int
2440
confdErrorInternal = Types.confdErrorTypeToRaw ConfdErrorInternal
2441

    
2442
confdErrorArgument :: Int
2443
confdErrorArgument = Types.confdErrorTypeToRaw ConfdErrorArgument
2444

    
2445
-- * Confd request query fields
2446

    
2447
confdReqqLink :: String
2448
confdReqqLink = ConstantUtils.confdReqqLink
2449

    
2450
confdReqqIp :: String
2451
confdReqqIp = ConstantUtils.confdReqqIp
2452

    
2453
confdReqqIplist :: String
2454
confdReqqIplist = ConstantUtils.confdReqqIplist
2455

    
2456
confdReqqFields :: String
2457
confdReqqFields = ConstantUtils.confdReqqFields
2458

    
2459
-- | Each request is "salted" by the current timestamp.
2460
--
2461
-- This constant decides how many seconds of skew to accept.
2462
--
2463
-- TODO: make this a default and allow the value to be more
2464
-- configurable
2465
confdMaxClockSkew :: Int
2466
confdMaxClockSkew = 2 * nodeMaxClockSkew
2467

    
2468
-- | When we haven't reloaded the config for more than this amount of
2469
-- seconds, we force a test to see if inotify is betraying us. Using a
2470
-- prime number to ensure we get less chance of 'same wakeup' with
2471
-- other processes.
2472
confdConfigReloadTimeout :: Int
2473
confdConfigReloadTimeout = 17
2474

    
2475
-- | If we receive more than one update in this amount of
2476
-- microseconds, we move to polling every RATELIMIT seconds, rather
2477
-- than relying on inotify, to be able to serve more requests.
2478
confdConfigReloadRatelimit :: Int
2479
confdConfigReloadRatelimit = 250000
2480

    
2481
-- | Magic number prepended to all confd queries.
2482
--
2483
-- This allows us to distinguish different types of confd protocols
2484
-- and handle them. For example by changing this we can move the whole
2485
-- payload to be compressed, or move away from json.
2486
confdMagicFourcc :: String
2487
confdMagicFourcc = "plj0"
2488

    
2489
-- | By default a confd request is sent to the minimum between this
2490
-- number and all MCs. 6 was chosen because even in the case of a
2491
-- disastrous 50% response rate, we should have enough answers to be
2492
-- able to compare more than one.
2493
confdDefaultReqCoverage :: Int
2494
confdDefaultReqCoverage = 6
2495

    
2496
-- | Timeout in seconds to expire pending query request in the confd
2497
-- client library. We don't actually expect any answer more than 10
2498
-- seconds after we sent a request.
2499
confdClientExpireTimeout :: Int
2500
confdClientExpireTimeout = 10
2501

    
2502
-- * Possible values for NodeGroup.alloc_policy
2503

    
2504
allocPolicyLastResort :: String
2505
allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
2506

    
2507
allocPolicyPreferred :: String
2508
allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
2509

    
2510
allocPolicyUnallocable :: String
2511
allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
2512

    
2513
validAllocPolicies :: [String]
2514
validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
2515

    
2516
-- | Temporary external/shared storage parameters
2517
blockdevDriverManual :: String
2518
blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
2519

    
2520
-- | 'qemu-img' path, required for 'ovfconverter'
2521
qemuimgPath :: String
2522
qemuimgPath = AutoConf.qemuimgPath
2523

    
2524
-- | Whether htools was enabled at compilation time
2525
--
2526
-- FIXME: this should be moved next to the other enable constants,
2527
-- such as, 'enableConfd', and renamed to 'enableHtools'.
2528
htools :: Bool
2529
htools = AutoConf.htools
2530

    
2531
-- * Key files for SSH daemon
2532

    
2533
sshHostDsaPriv :: String
2534
sshHostDsaPriv = sshConfigDir ++ "/ssh_host_dsa_key"
2535

    
2536
sshHostDsaPub :: String
2537
sshHostDsaPub = sshHostDsaPriv ++ ".pub"
2538

    
2539
sshHostRsaPriv :: String
2540
sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key"
2541

    
2542
sshHostRsaPub :: String
2543
sshHostRsaPub = sshHostRsaPriv ++ ".pub"
2544

    
2545
-- | Path generating random UUID
2546
randomUuidFile :: String
2547
randomUuidFile = ConstantUtils.randomUuidFile
2548

    
2549
-- * Auto-repair tag prefixes
2550

    
2551
autoRepairTagPrefix :: String
2552
autoRepairTagPrefix = "ganeti:watcher:autorepair:"
2553

    
2554
autoRepairTagEnabled :: String
2555
autoRepairTagEnabled = autoRepairTagPrefix
2556

    
2557
autoRepairTagPending :: String
2558
autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
2559

    
2560
autoRepairTagResult :: String
2561
autoRepairTagResult = autoRepairTagPrefix ++ "result:"
2562

    
2563
autoRepairTagSuspended :: String
2564
autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
2565

    
2566
-- * Auto-repair levels
2567

    
2568
autoRepairFailover :: String
2569
autoRepairFailover = "failover"
2570

    
2571
autoRepairFixStorage :: String
2572
autoRepairFixStorage = "fix-storage"
2573

    
2574
autoRepairMigrate :: String
2575
autoRepairMigrate = "migrate"
2576

    
2577
autoRepairReinstall :: String
2578
autoRepairReinstall = "reinstall"
2579

    
2580
autoRepairAllTypes :: FrozenSet String
2581
autoRepairAllTypes =
2582
  ConstantUtils.mkSet [autoRepairFailover,
2583
                       autoRepairFixStorage,
2584
                       autoRepairMigrate,
2585
                       autoRepairReinstall]
2586

    
2587
-- * Auto-repair results
2588

    
2589
autoRepairEnoperm :: String
2590
autoRepairEnoperm = "enoperm"
2591

    
2592
autoRepairFailure :: String
2593
autoRepairFailure = "failure"
2594

    
2595
autoRepairSuccess :: String
2596
autoRepairSuccess = "success"
2597

    
2598
autoRepairAllResults :: FrozenSet String
2599
autoRepairAllResults =
2600
  ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
2601

    
2602
-- | The version identifier for builtin data collectors
2603
builtinDataCollectorVersion :: String
2604
builtinDataCollectorVersion = "B"
2605

    
2606
-- | The reason trail opcode parameter name
2607
opcodeReason :: String
2608
opcodeReason = "reason"
2609

    
2610
diskstatsFile :: String
2611
diskstatsFile = "/proc/diskstats"
2612

    
2613
-- *  CPU load collector
2614

    
2615
statFile :: String
2616
statFile = "/proc/stat"
2617

    
2618
cpuavgloadBufferSize :: Int
2619
cpuavgloadBufferSize = 150
2620

    
2621
cpuavgloadWindowSize :: Int
2622
cpuavgloadWindowSize = 600
2623

    
2624
-- | Mond's variable for periodical data collection
2625
mondTimeInterval :: Int
2626
mondTimeInterval = 5
2627

    
2628
-- * Disk access modes
2629

    
2630
diskUserspace :: String
2631
diskUserspace = Types.diskAccessModeToRaw DiskUserspace
2632

    
2633
diskKernelspace :: String
2634
diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
2635

    
2636
diskValidAccessModes :: FrozenSet String
2637
diskValidAccessModes =
2638
  ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
2639

    
2640
-- | Timeout for queue draining in upgrades
2641
upgradeQueueDrainTimeout :: Int
2642
upgradeQueueDrainTimeout = 36 * 60 * 60 -- 1.5 days
2643

    
2644
-- | Intervall at which the queue is polled during upgrades
2645
upgradeQueuePollInterval :: Int
2646
upgradeQueuePollInterval  = 10