Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / HsConstants.hs @ becfd918

History | View | Annotate | Download (90.1 kB)

1
{-# OPTIONS -fno-warn-type-defaults #-}
2
{-| HsConstants contains the Haskell constants
3

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

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

    
16
-}
17

    
18
{-
19

    
20
Copyright (C) 2013 Google Inc.
21

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

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

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

    
37
-}
38
module Ganeti.HsConstants where
39

    
40
import Control.Arrow ((***))
41
import Data.List ((\\))
42
import Data.Map (Map)
43
import qualified Data.Map as Map (fromList, keys, insert)
44

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

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

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

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

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

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

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

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

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

    
83
-- ** Build-time constants
84

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
132
-- * Various versions
133

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

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

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

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

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

    
149
osApiV10 :: Int
150
osApiV10 = 10
151

    
152
osApiV15 :: Int
153
osApiV15 = 15
154

    
155
osApiV20 :: Int
156
osApiV20 = 20
157

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

    
161
exportVersion :: Int
162
exportVersion = 0
163

    
164
rapiVersion :: Int
165
rapiVersion = 2
166

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

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

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

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

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

    
186
-- * User separation
187

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
236
-- * Cpu pinning separators and constants
237

    
238
cpuPinningSep :: String
239
cpuPinningSep = ":"
240

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

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

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

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

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

    
276
-- * Wipe
277

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

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

    
285
minWipeChunkPercent :: Int
286
minWipeChunkPercent = 10
287

    
288
-- * Directories
289

    
290
runDirsMode :: Int
291
runDirsMode = 0o775
292

    
293
secureDirMode :: Int
294
secureDirMode = 0o700
295

    
296
secureFileMode :: Int
297
secureFileMode = 0o600
298

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

    
302
-- * 'autoconf' enable/disable
303

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

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

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

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

    
316
-- * SSH constants
317

    
318
ssh :: String
319
ssh = "ssh"
320

    
321
scp :: String
322
scp = "scp"
323

    
324
-- * Daemons
325

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

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

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

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

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

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

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

    
353
defaultConfdPort :: Int
354
defaultConfdPort = 1814
355

    
356
defaultMondPort :: Int
357
defaultMondPort = 1815
358

    
359
defaultNodedPort :: Int
360
defaultNodedPort = 1811
361

    
362
defaultRapiPort :: Int
363
defaultRapiPort = 5080
364

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

    
373
firstDrbdPort :: Int
374
firstDrbdPort = 11000
375

    
376
lastDrbdPort :: Int
377
lastDrbdPort = 14999
378

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

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

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

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

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

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

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

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

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

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

    
411
luxiVersion :: Int
412
luxiVersion = configVersion
413

    
414
-- * Syslog
415

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

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

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

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

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

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

    
434
-- * Xen
435

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

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

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

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

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

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

    
456
-- * KVM and socat
457

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

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

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

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

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

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

    
476
-- * Console types
477

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

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

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

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

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

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

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

    
516
-- * X509
517

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

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

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

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

    
533
-- * Import/export daemon mode
534

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

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

    
541
-- * Import/export transport compression
542

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

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

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

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

    
555
-- * Import/export I/O
556

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

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

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

    
570
-- * Hooks
571

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

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

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

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

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

    
587
hooksVersion :: Int
588
hooksVersion = 2
589

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

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

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

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

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

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

    
607
-- * Hkr
608

    
609
hkrSkip :: Int
610
hkrSkip = 0
611

    
612
hkrFail :: Int
613
hkrFail = 1
614

    
615
hkrSuccess :: Int
616
hkrSuccess = 2
617

    
618
-- * Storage types
619

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
687
-- * Storage operations
688

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

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

    
697
-- * Volume fields
698

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

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

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

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

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

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

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

    
720
-- * Local disk status
721

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

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

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

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

    
736
-- * Disk template types
737

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
858
-- * Drbd
859

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

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

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

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

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

    
876
-- * Drbd barrier types
877

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

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

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

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

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

    
894
-- * File backend driver
895

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

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

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

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

    
911
-- * Disk access mode
912

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

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

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

    
922
-- * Disk replacement mode
923

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

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

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

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

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

    
940
-- * Instance export mode
941

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

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

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

    
951
-- * Instance creation modes
952

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

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

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

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

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

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

    
971
rieVersion :: Int
972
rieVersion = 0
973

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

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

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

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

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

    
994
-- * Import/export config options
995

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

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

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

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

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

    
1011
-- * Dynamic device modification
1012

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

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

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

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

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

    
1028
-- * Common exit codes
1029

    
1030
exitSuccess :: Int
1031
exitSuccess = 0
1032

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

    
1036
exitNotcluster :: Int
1037
exitNotcluster = 5
1038

    
1039
exitNotmaster :: Int
1040
exitNotmaster = 11
1041

    
1042
exitNodesetupError :: Int
1043
exitNodesetupError = 12
1044

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

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

    
1053
-- * Tags
1054

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

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

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

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

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

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

    
1073
maxTagLen :: Int
1074
maxTagLen = 128
1075

    
1076
maxTagsPerObj :: Int
1077
maxTagsPerObj = 4096
1078

    
1079
-- * Others
1080

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

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

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

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

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

    
1097
ip6AddressAny :: String
1098
ip6AddressAny = "::"
1099

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

    
1103
ip4Version :: Int
1104
ip4Version = 4
1105

    
1106
ip6Version :: Int
1107
ip6Version = 6
1108

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

    
1112
tcpPingTimeout :: Int
1113
tcpPingTimeout = 10
1114

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

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

    
1121
minVgSize :: Int
1122
minVgSize = 20480
1123

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

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

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

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

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

    
1143
ipCommandPath :: String
1144
ipCommandPath = AutoConf.ipPath
1145

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

    
1150
-- * Runparts results
1151

    
1152
runpartsErr :: Int
1153
runpartsErr = 2
1154

    
1155
runpartsRun :: Int
1156
runpartsRun = 1
1157

    
1158
runpartsSkip :: Int
1159
runpartsSkip = 0
1160

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

    
1164
-- * RPC
1165

    
1166
rpcEncodingNone :: Int
1167
rpcEncodingNone = 0
1168

    
1169
rpcEncodingZlibBase64 :: Int
1170
rpcEncodingZlibBase64 = 1
1171

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

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

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

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

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

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

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

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

    
1204
-- OS
1205

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1263
esScriptCreate :: String
1264
esScriptCreate = esActionCreate
1265

    
1266
esScriptRemove :: String
1267
esScriptRemove = esActionRemove
1268

    
1269
esScriptGrow :: String
1270
esScriptGrow = esActionGrow
1271

    
1272
esScriptAttach :: String
1273
esScriptAttach = esActionAttach
1274

    
1275
esScriptDetach :: String
1276
esScriptDetach = esActionDetach
1277

    
1278
esScriptSetinfo :: String
1279
esScriptSetinfo = esActionSetinfo
1280

    
1281
esScriptVerify :: String
1282
esScriptVerify = esActionVerify
1283

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

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

    
1297
-- * Reboot types
1298

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

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

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

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

    
1311
-- * Instance reboot behaviors
1312

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

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

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

    
1322
-- * VTypes
1323

    
1324
vtypeBool :: VType
1325
vtypeBool = VTypeBool
1326

    
1327
vtypeInt :: VType
1328
vtypeInt = VTypeInt
1329

    
1330
vtypeMaybeString :: VType
1331
vtypeMaybeString = VTypeMaybeString
1332

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

    
1337
vtypeString :: VType
1338
vtypeString = VTypeString
1339

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
1601
-- * Migration statuses
1602

    
1603
hvMigrationActive :: String
1604
hvMigrationActive = "active"
1605

    
1606
hvMigrationCancelled :: String
1607
hvMigrationCancelled = "cancelled"
1608

    
1609
hvMigrationCompleted :: String
1610
hvMigrationCompleted = "completed"
1611

    
1612
hvMigrationFailed :: String
1613
hvMigrationFailed = "failed"
1614

    
1615
hvMigrationValidStatuses :: FrozenSet String
1616
hvMigrationValidStatuses =
1617
  ConstantUtils.mkSet [hvMigrationActive,
1618
                       hvMigrationCancelled,
1619
                       hvMigrationCompleted,
1620
                       hvMigrationFailed]
1621

    
1622
hvMigrationFailedStatuses :: FrozenSet String
1623
hvMigrationFailedStatuses =
1624
  ConstantUtils.mkSet [hvMigrationFailed, hvMigrationCancelled]
1625

    
1626
-- | KVM-specific statuses
1627
--
1628
-- FIXME: this constant seems unnecessary
1629
hvKvmMigrationValidStatuses :: FrozenSet String
1630
hvKvmMigrationValidStatuses = hvMigrationValidStatuses
1631

    
1632
-- | Node info keys
1633
hvNodeinfoKeyVersion :: String
1634
hvNodeinfoKeyVersion = "hv_version"
1635

    
1636
-- * Hypervisor state
1637

    
1638
hvstCpuNode :: String
1639
hvstCpuNode = "cpu_node"
1640

    
1641
hvstCpuTotal :: String
1642
hvstCpuTotal = "cpu_total"
1643

    
1644
hvstMemoryHv :: String
1645
hvstMemoryHv = "mem_hv"
1646

    
1647
hvstMemoryNode :: String
1648
hvstMemoryNode = "mem_node"
1649

    
1650
hvstMemoryTotal :: String
1651
hvstMemoryTotal = "mem_total"
1652

    
1653
hvstsParameters :: FrozenSet String
1654
hvstsParameters =
1655
  ConstantUtils.mkSet [hvstCpuNode,
1656
                       hvstCpuTotal,
1657
                       hvstMemoryHv,
1658
                       hvstMemoryNode,
1659
                       hvstMemoryTotal]
1660

    
1661
hvstDefaults :: Map String Int
1662
hvstDefaults =
1663
  Map.fromList
1664
  [(hvstCpuNode, 1),
1665
   (hvstCpuTotal, 1),
1666
   (hvstMemoryHv, 0),
1667
   (hvstMemoryTotal, 0),
1668
   (hvstMemoryNode, 0)]
1669

    
1670
hvstsParameterTypes :: Map String VType
1671
hvstsParameterTypes =
1672
  Map.fromList [(hvstMemoryTotal, VTypeInt),
1673
                (hvstMemoryNode, VTypeInt),
1674
                (hvstMemoryHv, VTypeInt),
1675
                (hvstCpuTotal, VTypeInt),
1676
                (hvstCpuNode, VTypeInt)]
1677

    
1678
-- * Disk state
1679

    
1680
dsDiskOverhead :: String
1681
dsDiskOverhead = "disk_overhead"
1682

    
1683
dsDiskReserved :: String
1684
dsDiskReserved = "disk_reserved"
1685

    
1686
dsDiskTotal :: String
1687
dsDiskTotal = "disk_total"
1688

    
1689
dsDefaults :: Map String Int
1690
dsDefaults =
1691
  Map.fromList
1692
  [(dsDiskTotal, 0),
1693
   (dsDiskReserved, 0),
1694
   (dsDiskOverhead, 0)]
1695

    
1696
dssParameterTypes :: Map String VType
1697
dssParameterTypes =
1698
  Map.fromList [(dsDiskTotal, VTypeInt),
1699
                (dsDiskReserved, VTypeInt),
1700
                (dsDiskOverhead, VTypeInt)]
1701

    
1702
dssParameters :: FrozenSet String
1703
dssParameters =
1704
  ConstantUtils.mkSet [dsDiskTotal, dsDiskReserved, dsDiskOverhead]
1705

    
1706
dsValidTypes :: FrozenSet String
1707
dsValidTypes = ConstantUtils.mkSet [Types.diskTemplateToRaw DTPlain]
1708

    
1709
-- Backend parameter names
1710

    
1711
beAlwaysFailover :: String
1712
beAlwaysFailover = "always_failover"
1713

    
1714
beAutoBalance :: String
1715
beAutoBalance = "auto_balance"
1716

    
1717
beMaxmem :: String
1718
beMaxmem = "maxmem"
1719

    
1720
-- | Deprecated and replaced by max and min mem
1721
beMemory :: String
1722
beMemory = "memory"
1723

    
1724
beMinmem :: String
1725
beMinmem = "minmem"
1726

    
1727
beSpindleUse :: String
1728
beSpindleUse = "spindle_use"
1729

    
1730
beVcpus :: String
1731
beVcpus = "vcpus"
1732

    
1733
besParameterTypes :: Map String VType
1734
besParameterTypes =
1735
  Map.fromList [(beAlwaysFailover, VTypeBool),
1736
                (beAutoBalance, VTypeBool),
1737
                (beMaxmem, VTypeSize),
1738
                (beMinmem, VTypeSize),
1739
                (beSpindleUse, VTypeInt),
1740
                (beVcpus, VTypeInt)]
1741

    
1742
besParameterTitles :: Map String String
1743
besParameterTitles =
1744
  Map.fromList [(beAutoBalance, "Auto_balance"),
1745
                (beMinmem, "ConfigMinMem"),
1746
                (beVcpus, "ConfigVCPUs"),
1747
                (beMaxmem, "ConfigMaxMem")]
1748

    
1749
besParameterCompat :: Map String VType
1750
besParameterCompat = Map.insert beMemory VTypeSize besParameterTypes
1751

    
1752
besParameters :: FrozenSet String
1753
besParameters =
1754
  ConstantUtils.mkSet [beAlwaysFailover,
1755
                       beAutoBalance,
1756
                       beMaxmem,
1757
                       beMinmem,
1758
                       beSpindleUse,
1759
                       beVcpus]
1760

    
1761
-- | Instance specs
1762
--
1763
-- FIXME: these should be associated with 'Ganeti.HTools.Types.ISpec'
1764

    
1765
ispecMemSize :: String
1766
ispecMemSize = ConstantUtils.ispecMemSize
1767

    
1768
ispecCpuCount :: String
1769
ispecCpuCount = ConstantUtils.ispecCpuCount
1770

    
1771
ispecDiskCount :: String
1772
ispecDiskCount = ConstantUtils.ispecDiskCount
1773

    
1774
ispecDiskSize :: String
1775
ispecDiskSize = ConstantUtils.ispecDiskSize
1776

    
1777
ispecNicCount :: String
1778
ispecNicCount = ConstantUtils.ispecNicCount
1779

    
1780
ispecSpindleUse :: String
1781
ispecSpindleUse = ConstantUtils.ispecSpindleUse
1782

    
1783
ispecsParameterTypes :: Map String VType
1784
ispecsParameterTypes =
1785
  Map.fromList
1786
  [(ConstantUtils.ispecDiskSize, VTypeInt),
1787
   (ConstantUtils.ispecCpuCount, VTypeInt),
1788
   (ConstantUtils.ispecSpindleUse, VTypeInt),
1789
   (ConstantUtils.ispecMemSize, VTypeInt),
1790
   (ConstantUtils.ispecNicCount, VTypeInt),
1791
   (ConstantUtils.ispecDiskCount, VTypeInt)]
1792

    
1793
ispecsParameters :: FrozenSet String
1794
ispecsParameters =
1795
  ConstantUtils.mkSet [ConstantUtils.ispecCpuCount,
1796
                       ConstantUtils.ispecDiskCount,
1797
                       ConstantUtils.ispecDiskSize,
1798
                       ConstantUtils.ispecMemSize,
1799
                       ConstantUtils.ispecNicCount,
1800
                       ConstantUtils.ispecSpindleUse]
1801

    
1802
ispecsMinmax :: String
1803
ispecsMinmax = ConstantUtils.ispecsMinmax
1804

    
1805
ispecsMax :: String
1806
ispecsMax = "max"
1807

    
1808
ispecsMin :: String
1809
ispecsMin = "min"
1810

    
1811
ispecsStd :: String
1812
ispecsStd = ConstantUtils.ispecsStd
1813

    
1814
ipolicyDts :: String
1815
ipolicyDts = ConstantUtils.ipolicyDts
1816

    
1817
ipolicyVcpuRatio :: String
1818
ipolicyVcpuRatio = ConstantUtils.ipolicyVcpuRatio
1819

    
1820
ipolicySpindleRatio :: String
1821
ipolicySpindleRatio = ConstantUtils.ipolicySpindleRatio
1822

    
1823
ispecsMinmaxKeys :: FrozenSet String
1824
ispecsMinmaxKeys = ConstantUtils.mkSet [ispecsMax, ispecsMin]
1825

    
1826
ipolicyParameters :: FrozenSet String
1827
ipolicyParameters =
1828
  ConstantUtils.mkSet [ConstantUtils.ipolicyVcpuRatio,
1829
                       ConstantUtils.ipolicySpindleRatio]
1830

    
1831
ipolicyAllKeys :: FrozenSet String
1832
ipolicyAllKeys =
1833
  ConstantUtils.union ipolicyParameters $
1834
  ConstantUtils.mkSet [ConstantUtils.ipolicyDts,
1835
                       ConstantUtils.ispecsMinmax,
1836
                       ispecsStd]
1837

    
1838
-- | Node parameter names
1839

    
1840
ndExclusiveStorage :: String
1841
ndExclusiveStorage = "exclusive_storage"
1842

    
1843
ndOobProgram :: String
1844
ndOobProgram = "oob_program"
1845

    
1846
ndSpindleCount :: String
1847
ndSpindleCount = "spindle_count"
1848

    
1849
ndOvs :: String
1850
ndOvs = "ovs"
1851

    
1852
ndOvsLink :: String
1853
ndOvsLink = "ovs_link"
1854

    
1855
ndOvsName :: String
1856
ndOvsName = "ovs_name"
1857

    
1858
ndsParameterTypes :: Map String VType
1859
ndsParameterTypes =
1860
  Map.fromList
1861
  [(ndExclusiveStorage, VTypeBool),
1862
   (ndOobProgram, VTypeString),
1863
   (ndOvs, VTypeBool),
1864
   (ndOvsLink, VTypeMaybeString),
1865
   (ndOvsName, VTypeMaybeString),
1866
   (ndSpindleCount, VTypeInt)]
1867

    
1868
ndsParameters :: FrozenSet String
1869
ndsParameters = ConstantUtils.mkSet (Map.keys ndsParameterTypes)
1870

    
1871
ndsParameterTitles :: Map String String
1872
ndsParameterTitles =
1873
  Map.fromList
1874
  [(ndExclusiveStorage, "ExclusiveStorage"),
1875
   (ndOobProgram, "OutOfBandProgram"),
1876
   (ndOvs, "OpenvSwitch"),
1877
   (ndOvsLink, "OpenvSwitchLink"),
1878
   (ndOvsName, "OpenvSwitchName"),
1879
   (ndSpindleCount, "SpindleCount")]
1880

    
1881
-- * Logical Disks parameters
1882

    
1883
ldpAccess :: String
1884
ldpAccess = "access"
1885

    
1886
ldpBarriers :: String
1887
ldpBarriers = "disabled-barriers"
1888

    
1889
ldpDefaultMetavg :: String
1890
ldpDefaultMetavg = "default-metavg"
1891

    
1892
ldpDelayTarget :: String
1893
ldpDelayTarget = "c-delay-target"
1894

    
1895
ldpDiskCustom :: String
1896
ldpDiskCustom = "disk-custom"
1897

    
1898
ldpDynamicResync :: String
1899
ldpDynamicResync = "dynamic-resync"
1900

    
1901
ldpFillTarget :: String
1902
ldpFillTarget = "c-fill-target"
1903

    
1904
ldpMaxRate :: String
1905
ldpMaxRate = "c-max-rate"
1906

    
1907
ldpMinRate :: String
1908
ldpMinRate = "c-min-rate"
1909

    
1910
ldpNetCustom :: String
1911
ldpNetCustom = "net-custom"
1912

    
1913
ldpNoMetaFlush :: String
1914
ldpNoMetaFlush = "disable-meta-flush"
1915

    
1916
ldpPlanAhead :: String
1917
ldpPlanAhead = "c-plan-ahead"
1918

    
1919
ldpPool :: String
1920
ldpPool = "pool"
1921

    
1922
ldpProtocol :: String
1923
ldpProtocol = "protocol"
1924

    
1925
ldpResyncRate :: String
1926
ldpResyncRate = "resync-rate"
1927

    
1928
ldpStripes :: String
1929
ldpStripes = "stripes"
1930

    
1931
diskLdTypes :: Map String VType
1932
diskLdTypes =
1933
  Map.fromList
1934
  [(ldpAccess, VTypeString),
1935
   (ldpResyncRate, VTypeInt),
1936
   (ldpStripes, VTypeInt),
1937
   (ldpBarriers, VTypeString),
1938
   (ldpNoMetaFlush, VTypeBool),
1939
   (ldpDefaultMetavg, VTypeString),
1940
   (ldpDiskCustom, VTypeString),
1941
   (ldpNetCustom, VTypeString),
1942
   (ldpProtocol, VTypeString),
1943
   (ldpDynamicResync, VTypeBool),
1944
   (ldpPlanAhead, VTypeInt),
1945
   (ldpFillTarget, VTypeInt),
1946
   (ldpDelayTarget, VTypeInt),
1947
   (ldpMaxRate, VTypeInt),
1948
   (ldpMinRate, VTypeInt),
1949
   (ldpPool, VTypeString)]
1950

    
1951
diskLdParameters :: FrozenSet String
1952
diskLdParameters = ConstantUtils.mkSet (Map.keys diskLdTypes)
1953

    
1954
-- * Disk template parameters
1955
--
1956
-- Disk template parameters can be set/changed by the user via
1957
-- gnt-cluster and gnt-group)
1958

    
1959
drbdResyncRate :: String
1960
drbdResyncRate = "resync-rate"
1961

    
1962
drbdDataStripes :: String
1963
drbdDataStripes = "data-stripes"
1964

    
1965
drbdMetaStripes :: String
1966
drbdMetaStripes = "meta-stripes"
1967

    
1968
drbdDiskBarriers :: String
1969
drbdDiskBarriers = "disk-barriers"
1970

    
1971
drbdMetaBarriers :: String
1972
drbdMetaBarriers = "meta-barriers"
1973

    
1974
drbdDefaultMetavg :: String
1975
drbdDefaultMetavg = "metavg"
1976

    
1977
drbdDiskCustom :: String
1978
drbdDiskCustom = "disk-custom"
1979

    
1980
drbdNetCustom :: String
1981
drbdNetCustom = "net-custom"
1982

    
1983
drbdProtocol :: String
1984
drbdProtocol = "protocol"
1985

    
1986
drbdDynamicResync :: String
1987
drbdDynamicResync = "dynamic-resync"
1988

    
1989
drbdPlanAhead :: String
1990
drbdPlanAhead = "c-plan-ahead"
1991

    
1992
drbdFillTarget :: String
1993
drbdFillTarget = "c-fill-target"
1994

    
1995
drbdDelayTarget :: String
1996
drbdDelayTarget = "c-delay-target"
1997

    
1998
drbdMaxRate :: String
1999
drbdMaxRate = "c-max-rate"
2000

    
2001
drbdMinRate :: String
2002
drbdMinRate = "c-min-rate"
2003

    
2004
lvStripes :: String
2005
lvStripes = "stripes"
2006

    
2007
rbdAccess :: String
2008
rbdAccess = "access"
2009

    
2010
rbdPool :: String
2011
rbdPool = "pool"
2012

    
2013
diskDtTypes :: Map String VType
2014
diskDtTypes =
2015
  Map.fromList [(drbdResyncRate, VTypeInt),
2016
                (drbdDataStripes, VTypeInt),
2017
                (drbdMetaStripes, VTypeInt),
2018
                (drbdDiskBarriers, VTypeString),
2019
                (drbdMetaBarriers, VTypeBool),
2020
                (drbdDefaultMetavg, VTypeString),
2021
                (drbdDiskCustom, VTypeString),
2022
                (drbdNetCustom, VTypeString),
2023
                (drbdProtocol, VTypeString),
2024
                (drbdDynamicResync, VTypeBool),
2025
                (drbdPlanAhead, VTypeInt),
2026
                (drbdFillTarget, VTypeInt),
2027
                (drbdDelayTarget, VTypeInt),
2028
                (drbdMaxRate, VTypeInt),
2029
                (drbdMinRate, VTypeInt),
2030
                (lvStripes, VTypeInt),
2031
                (rbdAccess, VTypeString),
2032
                (rbdPool, VTypeString)]
2033

    
2034
diskDtParameters :: FrozenSet String
2035
diskDtParameters = ConstantUtils.mkSet (Map.keys diskDtTypes)
2036

    
2037
-- * Dynamic disk parameters
2038

    
2039
ddpLocalIp :: String
2040
ddpLocalIp = "local-ip"
2041

    
2042
ddpRemoteIp :: String
2043
ddpRemoteIp = "remote-ip"
2044

    
2045
ddpPort :: String
2046
ddpPort = "port"
2047

    
2048
ddpLocalMinor :: String
2049
ddpLocalMinor = "local-minor"
2050

    
2051
ddpRemoteMinor :: String
2052
ddpRemoteMinor = "remote-minor"
2053

    
2054
-- * OOB supported commands
2055

    
2056
oobPowerOn :: String
2057
oobPowerOn = Types.oobCommandToRaw OobPowerOn
2058

    
2059
oobPowerOff :: String
2060
oobPowerOff = Types.oobCommandToRaw OobPowerOff
2061

    
2062
oobPowerCycle :: String
2063
oobPowerCycle = Types.oobCommandToRaw OobPowerCycle
2064

    
2065
oobPowerStatus :: String
2066
oobPowerStatus = Types.oobCommandToRaw OobPowerStatus
2067

    
2068
oobHealth :: String
2069
oobHealth = Types.oobCommandToRaw OobHealth
2070

    
2071
oobCommands :: FrozenSet String
2072
oobCommands = ConstantUtils.mkSet $ map Types.oobCommandToRaw [minBound..]
2073

    
2074
oobPowerStatusPowered :: String
2075
oobPowerStatusPowered = "powered"
2076

    
2077
-- | 60 seconds
2078
oobTimeout :: Int
2079
oobTimeout = 60
2080

    
2081
-- | 2 seconds
2082
oobPowerDelay :: Double
2083
oobPowerDelay = 2.0
2084

    
2085
oobStatusCritical :: String
2086
oobStatusCritical = Types.oobStatusToRaw OobStatusCritical
2087

    
2088
oobStatusOk :: String
2089
oobStatusOk = Types.oobStatusToRaw OobStatusOk
2090

    
2091
oobStatusUnknown :: String
2092
oobStatusUnknown = Types.oobStatusToRaw OobStatusUnknown
2093

    
2094
oobStatusWarning :: String
2095
oobStatusWarning = Types.oobStatusToRaw OobStatusWarning
2096

    
2097
oobStatuses :: FrozenSet String
2098
oobStatuses = ConstantUtils.mkSet $ map Types.oobStatusToRaw [minBound..]
2099

    
2100
-- | Instance Parameters Profile
2101
ppDefault :: String
2102
ppDefault = "default"
2103

    
2104
-- * nic* constants are used inside the ganeti config
2105

    
2106
nicLink :: String
2107
nicLink = "link"
2108

    
2109
nicMode :: String
2110
nicMode = "mode"
2111

    
2112
nicVlan :: String
2113
nicVlan = "vlan"
2114

    
2115
nicsParameterTypes :: Map String VType
2116
nicsParameterTypes =
2117
  Map.fromList [(nicMode, vtypeString),
2118
                (nicLink, vtypeString),
2119
                (nicVlan, vtypeMaybeString)]
2120

    
2121
nicsParameters :: FrozenSet String
2122
nicsParameters = ConstantUtils.mkSet (Map.keys nicsParameterTypes)
2123

    
2124
nicModeBridged :: String
2125
nicModeBridged = Types.nICModeToRaw NMBridged
2126

    
2127
nicModeRouted :: String
2128
nicModeRouted = Types.nICModeToRaw NMRouted
2129

    
2130
nicModeOvs :: String
2131
nicModeOvs = Types.nICModeToRaw NMOvs
2132

    
2133
nicIpPool :: String
2134
nicIpPool = Types.nICModeToRaw NMPool
2135

    
2136
nicValidModes :: FrozenSet String
2137
nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
2138

    
2139
releaseAction :: String
2140
releaseAction = "release"
2141

    
2142
reserveAction :: String
2143
reserveAction = "reserve"
2144

    
2145
-- * idisk* constants are used in opcodes, to create/change disks
2146

    
2147
idiskAdopt :: String
2148
idiskAdopt = "adopt"
2149

    
2150
idiskMetavg :: String
2151
idiskMetavg = "metavg"
2152

    
2153
idiskMode :: String
2154
idiskMode = "mode"
2155

    
2156
idiskName :: String
2157
idiskName = "name"
2158

    
2159
idiskSize :: String
2160
idiskSize = "size"
2161

    
2162
idiskSpindles :: String
2163
idiskSpindles = "spindles"
2164

    
2165
idiskVg :: String
2166
idiskVg = "vg"
2167

    
2168
idiskProvider :: String
2169
idiskProvider = "provider"
2170

    
2171
idiskParamsTypes :: Map String VType
2172
idiskParamsTypes =
2173
  Map.fromList [(idiskSize, VTypeSize),
2174
                (idiskSpindles, VTypeInt),
2175
                (idiskMode, VTypeString),
2176
                (idiskAdopt, VTypeString),
2177
                (idiskVg, VTypeString),
2178
                (idiskMetavg, VTypeString),
2179
                (idiskProvider, VTypeString),
2180
                (idiskName, VTypeMaybeString)]
2181

    
2182
idiskParams :: FrozenSet String
2183
idiskParams = ConstantUtils.mkSet (Map.keys idiskParamsTypes)
2184

    
2185
-- * inic* constants are used in opcodes, to create/change nics
2186

    
2187
inicBridge :: String
2188
inicBridge = "bridge"
2189

    
2190
inicIp :: String
2191
inicIp = "ip"
2192

    
2193
inicLink :: String
2194
inicLink = "link"
2195

    
2196
inicMac :: String
2197
inicMac = "mac"
2198

    
2199
inicMode :: String
2200
inicMode = "mode"
2201

    
2202
inicName :: String
2203
inicName = "name"
2204

    
2205
inicNetwork :: String
2206
inicNetwork = "network"
2207

    
2208
inicVlan :: String
2209
inicVlan = "vlan"
2210

    
2211
inicParamsTypes :: Map String VType
2212
inicParamsTypes =
2213
  Map.fromList [(inicBridge, VTypeMaybeString),
2214
                (inicIp, VTypeMaybeString),
2215
                (inicLink, VTypeString),
2216
                (inicMac, VTypeString),
2217
                (inicMode, VTypeString),
2218
                (inicName, VTypeMaybeString),
2219
                (inicNetwork, VTypeMaybeString),
2220
                (inicVlan, VTypeMaybeString)]
2221

    
2222
inicParams :: FrozenSet String
2223
inicParams = ConstantUtils.mkSet (Map.keys inicParamsTypes)
2224

    
2225
-- * Hypervisor constants
2226

    
2227
htXenPvm :: String
2228
htXenPvm = Types.hypervisorToRaw XenPvm
2229

    
2230
htFake :: String
2231
htFake = Types.hypervisorToRaw Fake
2232

    
2233
htXenHvm :: String
2234
htXenHvm = Types.hypervisorToRaw XenHvm
2235

    
2236
htKvm :: String
2237
htKvm = Types.hypervisorToRaw Kvm
2238

    
2239
htChroot :: String
2240
htChroot = Types.hypervisorToRaw Chroot
2241

    
2242
htLxc :: String
2243
htLxc = Types.hypervisorToRaw Lxc
2244

    
2245
hyperTypes :: FrozenSet String
2246
hyperTypes = ConstantUtils.mkSet $ map Types.hypervisorToRaw [minBound..]
2247

    
2248
htsReqPort :: FrozenSet String
2249
htsReqPort = ConstantUtils.mkSet [htXenHvm, htKvm]
2250

    
2251
vncBasePort :: Int
2252
vncBasePort = 5900
2253

    
2254
vncDefaultBindAddress :: String
2255
vncDefaultBindAddress = ip4AddressAny
2256

    
2257
-- * NIC types
2258

    
2259
htNicE1000 :: String
2260
htNicE1000 = "e1000"
2261

    
2262
htNicI82551 :: String
2263
htNicI82551 = "i82551"
2264

    
2265
htNicI8259er :: String
2266
htNicI8259er = "i82559er"
2267

    
2268
htNicI85557b :: String
2269
htNicI85557b = "i82557b"
2270

    
2271
htNicNe2kIsa :: String
2272
htNicNe2kIsa = "ne2k_isa"
2273

    
2274
htNicNe2kPci :: String
2275
htNicNe2kPci = "ne2k_pci"
2276

    
2277
htNicParavirtual :: String
2278
htNicParavirtual = "paravirtual"
2279

    
2280
htNicPcnet :: String
2281
htNicPcnet = "pcnet"
2282

    
2283
htNicRtl8139 :: String
2284
htNicRtl8139 = "rtl8139"
2285

    
2286
htHvmValidNicTypes :: FrozenSet String
2287
htHvmValidNicTypes =
2288
  ConstantUtils.mkSet [htNicE1000,
2289
                       htNicNe2kIsa,
2290
                       htNicNe2kPci,
2291
                       htNicParavirtual,
2292
                       htNicRtl8139]
2293

    
2294
htKvmValidNicTypes :: FrozenSet String
2295
htKvmValidNicTypes =
2296
  ConstantUtils.mkSet [htNicE1000,
2297
                       htNicI82551,
2298
                       htNicI8259er,
2299
                       htNicI85557b,
2300
                       htNicNe2kIsa,
2301
                       htNicNe2kPci,
2302
                       htNicParavirtual,
2303
                       htNicPcnet,
2304
                       htNicRtl8139]
2305

    
2306
-- * Vif types
2307

    
2308
-- | Default vif type in xen-hvm
2309
htHvmVifIoemu :: String
2310
htHvmVifIoemu = "ioemu"
2311

    
2312
htHvmVifVif :: String
2313
htHvmVifVif = "vif"
2314

    
2315
htHvmValidVifTypes :: FrozenSet String
2316
htHvmValidVifTypes = ConstantUtils.mkSet [htHvmVifIoemu, htHvmVifVif]
2317

    
2318
-- * Disk types
2319

    
2320
htDiskIde :: String
2321
htDiskIde = "ide"
2322

    
2323
htDiskIoemu :: String
2324
htDiskIoemu = "ioemu"
2325

    
2326
htDiskMtd :: String
2327
htDiskMtd = "mtd"
2328

    
2329
htDiskParavirtual :: String
2330
htDiskParavirtual = "paravirtual"
2331

    
2332
htDiskPflash :: String
2333
htDiskPflash = "pflash"
2334

    
2335
htDiskScsi :: String
2336
htDiskScsi = "scsi"
2337

    
2338
htDiskSd :: String
2339
htDiskSd = "sd"
2340

    
2341
htHvmValidDiskTypes :: FrozenSet String
2342
htHvmValidDiskTypes = ConstantUtils.mkSet [htDiskIoemu, htDiskParavirtual]
2343

    
2344
htKvmValidDiskTypes :: FrozenSet String
2345
htKvmValidDiskTypes =
2346
  ConstantUtils.mkSet [htDiskIde,
2347
                       htDiskMtd,
2348
                       htDiskParavirtual,
2349
                       htDiskPflash,
2350
                       htDiskScsi,
2351
                       htDiskSd]
2352

    
2353
htCacheDefault :: String
2354
htCacheDefault = "default"
2355

    
2356
htCacheNone :: String
2357
htCacheNone = "none"
2358

    
2359
htCacheWback :: String
2360
htCacheWback = "writeback"
2361

    
2362
htCacheWthrough :: String
2363
htCacheWthrough = "writethrough"
2364

    
2365
htValidCacheTypes :: FrozenSet String
2366
htValidCacheTypes =
2367
  ConstantUtils.mkSet [htCacheDefault,
2368
                       htCacheNone,
2369
                       htCacheWback,
2370
                       htCacheWthrough]
2371

    
2372
-- * Mouse types
2373

    
2374
htMouseMouse :: String
2375
htMouseMouse = "mouse"
2376

    
2377
htMouseTablet :: String
2378
htMouseTablet = "tablet"
2379

    
2380
htKvmValidMouseTypes :: FrozenSet String
2381
htKvmValidMouseTypes = ConstantUtils.mkSet [htMouseMouse, htMouseTablet]
2382

    
2383
-- * Boot order
2384

    
2385
htBoCdrom :: String
2386
htBoCdrom = "cdrom"
2387

    
2388
htBoDisk :: String
2389
htBoDisk = "disk"
2390

    
2391
htBoFloppy :: String
2392
htBoFloppy = "floppy"
2393

    
2394
htBoNetwork :: String
2395
htBoNetwork = "network"
2396

    
2397
htKvmValidBoTypes :: FrozenSet String
2398
htKvmValidBoTypes =
2399
  ConstantUtils.mkSet [htBoCdrom, htBoDisk, htBoFloppy, htBoNetwork]
2400

    
2401
-- * SPICE lossless image compression options
2402

    
2403
htKvmSpiceLosslessImgComprAutoGlz :: String
2404
htKvmSpiceLosslessImgComprAutoGlz = "auto_glz"
2405

    
2406
htKvmSpiceLosslessImgComprAutoLz :: String
2407
htKvmSpiceLosslessImgComprAutoLz = "auto_lz"
2408

    
2409
htKvmSpiceLosslessImgComprGlz :: String
2410
htKvmSpiceLosslessImgComprGlz = "glz"
2411

    
2412
htKvmSpiceLosslessImgComprLz :: String
2413
htKvmSpiceLosslessImgComprLz = "lz"
2414

    
2415
htKvmSpiceLosslessImgComprOff :: String
2416
htKvmSpiceLosslessImgComprOff = "off"
2417

    
2418
htKvmSpiceLosslessImgComprQuic :: String
2419
htKvmSpiceLosslessImgComprQuic = "quic"
2420

    
2421
htKvmSpiceValidLosslessImgComprOptions :: FrozenSet String
2422
htKvmSpiceValidLosslessImgComprOptions =
2423
  ConstantUtils.mkSet [htKvmSpiceLosslessImgComprAutoGlz,
2424
                       htKvmSpiceLosslessImgComprAutoLz,
2425
                       htKvmSpiceLosslessImgComprGlz,
2426
                       htKvmSpiceLosslessImgComprLz,
2427
                       htKvmSpiceLosslessImgComprOff,
2428
                       htKvmSpiceLosslessImgComprQuic]
2429

    
2430
htKvmSpiceLossyImgComprAlways :: String
2431
htKvmSpiceLossyImgComprAlways = "always"
2432

    
2433
htKvmSpiceLossyImgComprAuto :: String
2434
htKvmSpiceLossyImgComprAuto = "auto"
2435

    
2436
htKvmSpiceLossyImgComprNever :: String
2437
htKvmSpiceLossyImgComprNever = "never"
2438

    
2439
htKvmSpiceValidLossyImgComprOptions :: FrozenSet String
2440
htKvmSpiceValidLossyImgComprOptions =
2441
  ConstantUtils.mkSet [htKvmSpiceLossyImgComprAlways,
2442
                       htKvmSpiceLossyImgComprAuto,
2443
                       htKvmSpiceLossyImgComprNever]
2444

    
2445
-- * SPICE video stream detection
2446

    
2447
htKvmSpiceVideoStreamDetectionAll :: String
2448
htKvmSpiceVideoStreamDetectionAll = "all"
2449

    
2450
htKvmSpiceVideoStreamDetectionFilter :: String
2451
htKvmSpiceVideoStreamDetectionFilter = "filter"
2452

    
2453
htKvmSpiceVideoStreamDetectionOff :: String
2454
htKvmSpiceVideoStreamDetectionOff = "off"
2455

    
2456
htKvmSpiceValidVideoStreamDetectionOptions :: FrozenSet String
2457
htKvmSpiceValidVideoStreamDetectionOptions =
2458
  ConstantUtils.mkSet [htKvmSpiceVideoStreamDetectionAll,
2459
                       htKvmSpiceVideoStreamDetectionFilter,
2460
                       htKvmSpiceVideoStreamDetectionOff]
2461

    
2462
-- * Security models
2463

    
2464
htSmNone :: String
2465
htSmNone = "none"
2466

    
2467
htSmPool :: String
2468
htSmPool = "pool"
2469

    
2470
htSmUser :: String
2471
htSmUser = "user"
2472

    
2473
htKvmValidSmTypes :: FrozenSet String
2474
htKvmValidSmTypes = ConstantUtils.mkSet [htSmNone, htSmPool, htSmUser]
2475

    
2476
-- * Kvm flag values
2477

    
2478
htKvmDisabled :: String
2479
htKvmDisabled = "disabled"
2480

    
2481
htKvmEnabled :: String
2482
htKvmEnabled = "enabled"
2483

    
2484
htKvmFlagValues :: FrozenSet String
2485
htKvmFlagValues = ConstantUtils.mkSet [htKvmDisabled, htKvmEnabled]
2486

    
2487
-- * Migration type
2488

    
2489
htMigrationLive :: String
2490
htMigrationLive = Types.migrationModeToRaw MigrationLive
2491

    
2492
htMigrationNonlive :: String
2493
htMigrationNonlive = Types.migrationModeToRaw MigrationNonLive
2494

    
2495
htMigrationModes :: FrozenSet String
2496
htMigrationModes =
2497
  ConstantUtils.mkSet $ map Types.migrationModeToRaw [minBound..]
2498

    
2499
-- * Cluster verify steps
2500

    
2501
verifyNplusoneMem :: String
2502
verifyNplusoneMem = Types.verifyOptionalChecksToRaw VerifyNPlusOneMem
2503

    
2504
verifyOptionalChecks :: FrozenSet String
2505
verifyOptionalChecks =
2506
  ConstantUtils.mkSet $ map Types.verifyOptionalChecksToRaw [minBound..]
2507

    
2508
-- * Cluster Verify error classes
2509

    
2510
cvTcluster :: String
2511
cvTcluster = "cluster"
2512

    
2513
cvTgroup :: String
2514
cvTgroup = "group"
2515

    
2516
cvTnode :: String
2517
cvTnode = "node"
2518

    
2519
cvTinstance :: String
2520
cvTinstance = "instance"
2521

    
2522
-- * Cluster Verify error codes and documentation
2523

    
2524
cvEclustercert :: (String, String, String)
2525
cvEclustercert =
2526
  ("cluster",
2527
   Types.cVErrorCodeToRaw CvECLUSTERCERT,
2528
   "Cluster certificate files verification failure")
2529

    
2530
cvEclustercfg :: (String, String, String)
2531
cvEclustercfg =
2532
  ("cluster",
2533
   Types.cVErrorCodeToRaw CvECLUSTERCFG,
2534
   "Cluster configuration verification failure")
2535

    
2536
cvEclusterdanglinginst :: (String, String, String)
2537
cvEclusterdanglinginst =
2538
  ("node",
2539
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGINST,
2540
   "Some instances have a non-existing primary node")
2541

    
2542
cvEclusterdanglingnodes :: (String, String, String)
2543
cvEclusterdanglingnodes =
2544
  ("node",
2545
   Types.cVErrorCodeToRaw CvECLUSTERDANGLINGNODES,
2546
   "Some nodes belong to non-existing groups")
2547

    
2548
cvEclusterfilecheck :: (String, String, String)
2549
cvEclusterfilecheck =
2550
  ("cluster",
2551
   Types.cVErrorCodeToRaw CvECLUSTERFILECHECK,
2552
   "Cluster configuration verification failure")
2553

    
2554
cvEgroupdifferentpvsize :: (String, String, String)
2555
cvEgroupdifferentpvsize =
2556
  ("group",
2557
   Types.cVErrorCodeToRaw CvEGROUPDIFFERENTPVSIZE,
2558
   "PVs in the group have different sizes")
2559

    
2560
cvEinstancebadnode :: (String, String, String)
2561
cvEinstancebadnode =
2562
  ("instance",
2563
   Types.cVErrorCodeToRaw CvEINSTANCEBADNODE,
2564
   "Instance marked as running lives on an offline node")
2565

    
2566
cvEinstancedown :: (String, String, String)
2567
cvEinstancedown =
2568
  ("instance",
2569
   Types.cVErrorCodeToRaw CvEINSTANCEDOWN,
2570
   "Instance not running on its primary node")
2571

    
2572
cvEinstancefaultydisk :: (String, String, String)
2573
cvEinstancefaultydisk =
2574
  ("instance",
2575
   Types.cVErrorCodeToRaw CvEINSTANCEFAULTYDISK,
2576
   "Impossible to retrieve status for a disk")
2577

    
2578
cvEinstancelayout :: (String, String, String)
2579
cvEinstancelayout =
2580
  ("instance",
2581
   Types.cVErrorCodeToRaw CvEINSTANCELAYOUT,
2582
   "Instance has multiple secondary nodes")
2583

    
2584
cvEinstancemissingcfgparameter :: (String, String, String)
2585
cvEinstancemissingcfgparameter =
2586
  ("instance",
2587
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGCFGPARAMETER,
2588
   "A configuration parameter for an instance is missing")
2589

    
2590
cvEinstancemissingdisk :: (String, String, String)
2591
cvEinstancemissingdisk =
2592
  ("instance",
2593
   Types.cVErrorCodeToRaw CvEINSTANCEMISSINGDISK,
2594
   "Missing volume on an instance")
2595

    
2596
cvEinstancepolicy :: (String, String, String)
2597
cvEinstancepolicy =
2598
  ("instance",
2599
   Types.cVErrorCodeToRaw CvEINSTANCEPOLICY,
2600
   "Instance does not meet policy")
2601

    
2602
cvEinstancesplitgroups :: (String, String, String)
2603
cvEinstancesplitgroups =
2604
  ("instance",
2605
   Types.cVErrorCodeToRaw CvEINSTANCESPLITGROUPS,
2606
   "Instance with primary and secondary nodes in different groups")
2607

    
2608
cvEinstanceunsuitablenode :: (String, String, String)
2609
cvEinstanceunsuitablenode =
2610
  ("instance",
2611
   Types.cVErrorCodeToRaw CvEINSTANCEUNSUITABLENODE,
2612
   "Instance running on nodes that are not suitable for it")
2613

    
2614
cvEinstancewrongnode :: (String, String, String)
2615
cvEinstancewrongnode =
2616
  ("instance",
2617
   Types.cVErrorCodeToRaw CvEINSTANCEWRONGNODE,
2618
   "Instance running on the wrong node")
2619

    
2620
cvEnodedrbd :: (String, String, String)
2621
cvEnodedrbd =
2622
  ("node",
2623
   Types.cVErrorCodeToRaw CvENODEDRBD,
2624
   "Error parsing the DRBD status file")
2625

    
2626
cvEnodedrbdhelper :: (String, String, String)
2627
cvEnodedrbdhelper =
2628
  ("node",
2629
   Types.cVErrorCodeToRaw CvENODEDRBDHELPER,
2630
   "Error caused by the DRBD helper")
2631

    
2632
cvEnodedrbdversion :: (String, String, String)
2633
cvEnodedrbdversion =
2634
  ("node",
2635
   Types.cVErrorCodeToRaw CvENODEDRBDVERSION,
2636
   "DRBD version mismatch within a node group")
2637

    
2638
cvEnodefilecheck :: (String, String, String)
2639
cvEnodefilecheck =
2640
  ("node",
2641
   Types.cVErrorCodeToRaw CvENODEFILECHECK,
2642
   "Error retrieving the checksum of the node files")
2643

    
2644
cvEnodefilestoragepaths :: (String, String, String)
2645
cvEnodefilestoragepaths =
2646
  ("node",
2647
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHS,
2648
   "Detected bad file storage paths")
2649

    
2650
cvEnodefilestoragepathunusable :: (String, String, String)
2651
cvEnodefilestoragepathunusable =
2652
  ("node",
2653
   Types.cVErrorCodeToRaw CvENODEFILESTORAGEPATHUNUSABLE,
2654
   "File storage path unusable")
2655

    
2656
cvEnodehooks :: (String, String, String)
2657
cvEnodehooks =
2658
  ("node",
2659
   Types.cVErrorCodeToRaw CvENODEHOOKS,
2660
   "Communication failure in hooks execution")
2661

    
2662
cvEnodehv :: (String, String, String)
2663
cvEnodehv =
2664
  ("node",
2665
   Types.cVErrorCodeToRaw CvENODEHV,
2666
   "Hypervisor parameters verification failure")
2667

    
2668
cvEnodelvm :: (String, String, String)
2669
cvEnodelvm =
2670
  ("node",
2671
   Types.cVErrorCodeToRaw CvENODELVM,
2672
   "LVM-related node error")
2673

    
2674
cvEnoden1 :: (String, String, String)
2675
cvEnoden1 =
2676
  ("node",
2677
   Types.cVErrorCodeToRaw CvENODEN1,
2678
   "Not enough memory to accommodate instance failovers")
2679

    
2680
cvEnodenet :: (String, String, String)
2681
cvEnodenet =
2682
  ("node",
2683
   Types.cVErrorCodeToRaw CvENODENET,
2684
   "Network-related node error")
2685

    
2686
cvEnodeoobpath :: (String, String, String)
2687
cvEnodeoobpath =
2688
  ("node",
2689
   Types.cVErrorCodeToRaw CvENODEOOBPATH,
2690
   "Invalid Out Of Band path")
2691

    
2692
cvEnodeorphaninstance :: (String, String, String)
2693
cvEnodeorphaninstance =
2694
  ("node",
2695
   Types.cVErrorCodeToRaw CvENODEORPHANINSTANCE,
2696
   "Unknown intance running on a node")
2697

    
2698
cvEnodeorphanlv :: (String, String, String)
2699
cvEnodeorphanlv =
2700
  ("node",
2701
   Types.cVErrorCodeToRaw CvENODEORPHANLV,
2702
   "Unknown LVM logical volume")
2703

    
2704
cvEnodeos :: (String, String, String)
2705
cvEnodeos =
2706
  ("node",
2707
   Types.cVErrorCodeToRaw CvENODEOS,
2708
   "OS-related node error")
2709

    
2710
cvEnoderpc :: (String, String, String)
2711
cvEnoderpc =
2712
  ("node",
2713
   Types.cVErrorCodeToRaw CvENODERPC,
2714
   "Error during connection to the primary node of an instance")
2715

    
2716
cvEnodesetup :: (String, String, String)
2717
cvEnodesetup =
2718
  ("node",
2719
   Types.cVErrorCodeToRaw CvENODESETUP,
2720
   "Node setup error")
2721

    
2722
cvEnodesharedfilestoragepathunusable :: (String, String, String)
2723
cvEnodesharedfilestoragepathunusable =
2724
  ("node",
2725
   Types.cVErrorCodeToRaw CvENODESHAREDFILESTORAGEPATHUNUSABLE,
2726
   "Shared file storage path unusable")
2727

    
2728
cvEnodessh :: (String, String, String)
2729
cvEnodessh =
2730
  ("node",
2731
   Types.cVErrorCodeToRaw CvENODESSH,
2732
   "SSH-related node error")
2733

    
2734
cvEnodetime :: (String, String, String)
2735
cvEnodetime =
2736
  ("node",
2737
   Types.cVErrorCodeToRaw CvENODETIME,
2738
   "Node returned invalid time")
2739

    
2740
cvEnodeuserscripts :: (String, String, String)
2741
cvEnodeuserscripts =
2742
  ("node",
2743
   Types.cVErrorCodeToRaw CvENODEUSERSCRIPTS,
2744
   "User scripts not present or not executable")
2745

    
2746
cvEnodeversion :: (String, String, String)
2747
cvEnodeversion =
2748
  ("node",
2749
   Types.cVErrorCodeToRaw CvENODEVERSION,
2750
   "Protocol version mismatch or Ganeti version mismatch")
2751

    
2752
cvAllEcodes :: FrozenSet (String, String, String)
2753
cvAllEcodes =
2754
  ConstantUtils.mkSet
2755
  [cvEclustercert,
2756
   cvEclustercfg,
2757
   cvEclusterdanglinginst,
2758
   cvEclusterdanglingnodes,
2759
   cvEclusterfilecheck,
2760
   cvEgroupdifferentpvsize,
2761
   cvEinstancebadnode,
2762
   cvEinstancedown,
2763
   cvEinstancefaultydisk,
2764
   cvEinstancelayout,
2765
   cvEinstancemissingcfgparameter,
2766
   cvEinstancemissingdisk,
2767
   cvEinstancepolicy,
2768
   cvEinstancesplitgroups,
2769
   cvEinstanceunsuitablenode,
2770
   cvEinstancewrongnode,
2771
   cvEnodedrbd,
2772
   cvEnodedrbdhelper,
2773
   cvEnodedrbdversion,
2774
   cvEnodefilecheck,
2775
   cvEnodefilestoragepaths,
2776
   cvEnodefilestoragepathunusable,
2777
   cvEnodehooks,
2778
   cvEnodehv,
2779
   cvEnodelvm,
2780
   cvEnoden1,
2781
   cvEnodenet,
2782
   cvEnodeoobpath,
2783
   cvEnodeorphaninstance,
2784
   cvEnodeorphanlv,
2785
   cvEnodeos,
2786
   cvEnoderpc,
2787
   cvEnodesetup,
2788
   cvEnodesharedfilestoragepathunusable,
2789
   cvEnodessh,
2790
   cvEnodetime,
2791
   cvEnodeuserscripts,
2792
   cvEnodeversion]
2793

    
2794
cvAllEcodesStrings :: FrozenSet String
2795
cvAllEcodesStrings =
2796
  ConstantUtils.mkSet $ map Types.cVErrorCodeToRaw [minBound..]
2797

    
2798
-- * Node verify constants
2799

    
2800
nvBridges :: String
2801
nvBridges = "bridges"
2802

    
2803
nvDrbdhelper :: String
2804
nvDrbdhelper = "drbd-helper"
2805

    
2806
nvDrbdversion :: String
2807
nvDrbdversion = "drbd-version"
2808

    
2809
nvDrbdlist :: String
2810
nvDrbdlist = "drbd-list"
2811

    
2812
nvExclusivepvs :: String
2813
nvExclusivepvs = "exclusive-pvs"
2814

    
2815
nvFilelist :: String
2816
nvFilelist = "filelist"
2817

    
2818
nvAcceptedStoragePaths :: String
2819
nvAcceptedStoragePaths = "allowed-file-storage-paths"
2820

    
2821
nvFileStoragePath :: String
2822
nvFileStoragePath = "file-storage-path"
2823

    
2824
nvSharedFileStoragePath :: String
2825
nvSharedFileStoragePath = "shared-file-storage-path"
2826

    
2827
nvHvinfo :: String
2828
nvHvinfo = "hvinfo"
2829

    
2830
nvHvparams :: String
2831
nvHvparams = "hvparms"
2832

    
2833
nvHypervisor :: String
2834
nvHypervisor = "hypervisor"
2835

    
2836
nvInstancelist :: String
2837
nvInstancelist = "instancelist"
2838

    
2839
nvLvlist :: String
2840
nvLvlist = "lvlist"
2841

    
2842
nvMasterip :: String
2843
nvMasterip = "master-ip"
2844

    
2845
nvNodelist :: String
2846
nvNodelist = "nodelist"
2847

    
2848
nvNodenettest :: String
2849
nvNodenettest = "node-net-test"
2850

    
2851
nvNodesetup :: String
2852
nvNodesetup = "nodesetup"
2853

    
2854
nvOobPaths :: String
2855
nvOobPaths = "oob-paths"
2856

    
2857
nvOslist :: String
2858
nvOslist = "oslist"
2859

    
2860
nvPvlist :: String
2861
nvPvlist = "pvlist"
2862

    
2863
nvTime :: String
2864
nvTime = "time"
2865

    
2866
nvUserscripts :: String
2867
nvUserscripts = "user-scripts"
2868

    
2869
nvVersion :: String
2870
nvVersion = "version"
2871

    
2872
nvVglist :: String
2873
nvVglist = "vglist"
2874

    
2875
nvVmnodes :: String
2876
nvVmnodes = "vmnodes"
2877

    
2878
-- * Instance status
2879

    
2880
inststAdmindown :: String
2881
inststAdmindown = Types.instanceStatusToRaw StatusDown
2882

    
2883
inststAdminoffline :: String
2884
inststAdminoffline = Types.instanceStatusToRaw StatusOffline
2885

    
2886
inststErrordown :: String
2887
inststErrordown = Types.instanceStatusToRaw ErrorDown
2888

    
2889
inststErrorup :: String
2890
inststErrorup = Types.instanceStatusToRaw ErrorUp
2891

    
2892
inststNodedown :: String
2893
inststNodedown = Types.instanceStatusToRaw NodeDown
2894

    
2895
inststNodeoffline :: String
2896
inststNodeoffline = Types.instanceStatusToRaw NodeOffline
2897

    
2898
inststRunning :: String
2899
inststRunning = Types.instanceStatusToRaw Running
2900

    
2901
inststWrongnode :: String
2902
inststWrongnode = Types.instanceStatusToRaw WrongNode
2903

    
2904
inststAll :: FrozenSet String
2905
inststAll = ConstantUtils.mkSet $ map Types.instanceStatusToRaw [minBound..]
2906

    
2907
-- * Admin states
2908

    
2909
adminstDown :: String
2910
adminstDown = Types.adminStateToRaw AdminDown
2911

    
2912
adminstOffline :: String
2913
adminstOffline = Types.adminStateToRaw AdminOffline
2914

    
2915
adminstUp :: String
2916
adminstUp = Types.adminStateToRaw AdminUp
2917

    
2918
adminstAll :: FrozenSet String
2919
adminstAll = ConstantUtils.mkSet $ map Types.adminStateToRaw [minBound..]
2920

    
2921
-- * Node roles
2922

    
2923
nrDrained :: String
2924
nrDrained = Types.nodeRoleToRaw NRDrained
2925

    
2926
nrMaster :: String
2927
nrMaster = Types.nodeRoleToRaw NRMaster
2928

    
2929
nrMcandidate :: String
2930
nrMcandidate = Types.nodeRoleToRaw NRCandidate
2931

    
2932
nrOffline :: String
2933
nrOffline = Types.nodeRoleToRaw NROffline
2934

    
2935
nrRegular :: String
2936
nrRegular = Types.nodeRoleToRaw NRRegular
2937

    
2938
nrAll :: FrozenSet String
2939
nrAll = ConstantUtils.mkSet $ map Types.nodeRoleToRaw [minBound..]
2940

    
2941
-- * SSL certificate check constants (in days)
2942

    
2943
sslCertExpirationError :: Int
2944
sslCertExpirationError = 7
2945

    
2946
sslCertExpirationWarn :: Int
2947
sslCertExpirationWarn = 30
2948

    
2949
-- * Allocator framework constants
2950

    
2951
iallocatorVersion :: Int
2952
iallocatorVersion = 2
2953

    
2954
iallocatorDirIn :: String
2955
iallocatorDirIn = Types.iAllocatorTestDirToRaw IAllocatorDirIn
2956

    
2957
iallocatorDirOut :: String
2958
iallocatorDirOut = Types.iAllocatorTestDirToRaw IAllocatorDirOut
2959

    
2960
validIallocatorDirections :: FrozenSet String
2961
validIallocatorDirections =
2962
  ConstantUtils.mkSet $ map Types.iAllocatorTestDirToRaw [minBound..]
2963

    
2964
iallocatorModeAlloc :: String
2965
iallocatorModeAlloc = Types.iAllocatorModeToRaw IAllocatorAlloc
2966

    
2967
iallocatorModeChgGroup :: String
2968
iallocatorModeChgGroup = Types.iAllocatorModeToRaw IAllocatorChangeGroup
2969

    
2970
iallocatorModeMultiAlloc :: String
2971
iallocatorModeMultiAlloc = Types.iAllocatorModeToRaw IAllocatorMultiAlloc
2972

    
2973
iallocatorModeNodeEvac :: String
2974
iallocatorModeNodeEvac = Types.iAllocatorModeToRaw IAllocatorNodeEvac
2975

    
2976
iallocatorModeReloc :: String
2977
iallocatorModeReloc = Types.iAllocatorModeToRaw IAllocatorReloc
2978

    
2979
validIallocatorModes :: FrozenSet String
2980
validIallocatorModes =
2981
  ConstantUtils.mkSet $ map Types.iAllocatorModeToRaw [minBound..]
2982

    
2983
iallocatorSearchPath :: [String]
2984
iallocatorSearchPath = AutoConf.iallocatorSearchPath
2985

    
2986
defaultIallocatorShortcut :: String
2987
defaultIallocatorShortcut = "."
2988

    
2989
-- * Node evacuation
2990

    
2991
nodeEvacPri :: String
2992
nodeEvacPri = Types.evacModeToRaw ChangePrimary
2993

    
2994
nodeEvacSec :: String
2995
nodeEvacSec = Types.evacModeToRaw ChangeSecondary
2996

    
2997
nodeEvacAll :: String
2998
nodeEvacAll = Types.evacModeToRaw ChangeAll
2999

    
3000
nodeEvacModes :: FrozenSet String
3001
nodeEvacModes = ConstantUtils.mkSet $ map Types.evacModeToRaw [minBound..]
3002

    
3003
-- * Job queue
3004

    
3005
jobQueueVersion :: Int
3006
jobQueueVersion = 1
3007

    
3008
jobQueueSizeHardLimit :: Int
3009
jobQueueSizeHardLimit = 5000
3010

    
3011
jobQueueFilesPerms :: Int
3012
jobQueueFilesPerms = 0o640
3013

    
3014
-- * Unchanged job return
3015

    
3016
jobNotchanged :: String
3017
jobNotchanged = "nochange"
3018

    
3019
-- * Job status
3020

    
3021
jobStatusQueued :: String
3022
jobStatusQueued = Types.jobStatusToRaw JOB_STATUS_QUEUED
3023

    
3024
jobStatusWaiting :: String
3025
jobStatusWaiting = Types.jobStatusToRaw JOB_STATUS_WAITING
3026

    
3027
jobStatusCanceling :: String
3028
jobStatusCanceling = Types.jobStatusToRaw JOB_STATUS_CANCELING
3029

    
3030
jobStatusRunning :: String
3031
jobStatusRunning = Types.jobStatusToRaw JOB_STATUS_RUNNING
3032

    
3033
jobStatusCanceled :: String
3034
jobStatusCanceled = Types.jobStatusToRaw JOB_STATUS_CANCELED
3035

    
3036
jobStatusSuccess :: String
3037
jobStatusSuccess = Types.jobStatusToRaw JOB_STATUS_SUCCESS
3038

    
3039
jobStatusError :: String
3040
jobStatusError = Types.jobStatusToRaw JOB_STATUS_ERROR
3041

    
3042
jobsPending :: FrozenSet String
3043
jobsPending =
3044
  ConstantUtils.mkSet [jobStatusQueued, jobStatusWaiting, jobStatusCanceling]
3045

    
3046
jobsFinalized :: FrozenSet String
3047
jobsFinalized =
3048
  ConstantUtils.mkSet $ map Types.finalizedJobStatusToRaw [minBound..]
3049

    
3050
jobStatusAll :: FrozenSet String
3051
jobStatusAll = ConstantUtils.mkSet $ map Types.jobStatusToRaw [minBound..]
3052

    
3053
-- * OpCode status
3054

    
3055
-- ** Not yet finalized opcodes
3056

    
3057
opStatusCanceling :: String
3058
opStatusCanceling = "canceling"
3059

    
3060
opStatusQueued :: String
3061
opStatusQueued = "queued"
3062

    
3063
opStatusRunning :: String
3064
opStatusRunning = "running"
3065

    
3066
opStatusWaiting :: String
3067
opStatusWaiting = "waiting"
3068

    
3069
-- ** Finalized opcodes
3070

    
3071
opStatusCanceled :: String
3072
opStatusCanceled = "canceled"
3073

    
3074
opStatusError :: String
3075
opStatusError = "error"
3076

    
3077
opStatusSuccess :: String
3078
opStatusSuccess = "success"
3079

    
3080
opsFinalized :: FrozenSet String
3081
opsFinalized =
3082
  ConstantUtils.mkSet [opStatusCanceled, opStatusError, opStatusSuccess]
3083

    
3084
-- * OpCode priority
3085

    
3086
opPrioLowest :: Int
3087
opPrioLowest = 19
3088

    
3089
opPrioHighest :: Int
3090
opPrioHighest = -20
3091

    
3092
opPrioLow :: Int
3093
opPrioLow = Types.opSubmitPriorityToRaw OpPrioLow
3094

    
3095
opPrioNormal :: Int
3096
opPrioNormal = Types.opSubmitPriorityToRaw OpPrioNormal
3097

    
3098
opPrioHigh :: Int
3099
opPrioHigh = Types.opSubmitPriorityToRaw OpPrioHigh
3100

    
3101
opPrioSubmitValid :: FrozenSet Int
3102
opPrioSubmitValid = ConstantUtils.mkSet [opPrioLow, opPrioNormal, opPrioHigh]
3103

    
3104
opPrioDefault :: Int
3105
opPrioDefault = opPrioNormal
3106

    
3107
-- * Lock recalculate mode
3108

    
3109
locksAppend :: String
3110
locksAppend = "append"
3111

    
3112
locksReplace :: String
3113
locksReplace = "replace"
3114

    
3115
-- * Lock timeout
3116
--
3117
-- The lock timeout (sum) before we transition into blocking acquire
3118
-- (this can still be reset by priority change).  Computed as max time
3119
-- (10 hours) before we should actually go into blocking acquire,
3120
-- given that we start from the default priority level.
3121

    
3122
lockAttemptsMaxwait :: Double
3123
lockAttemptsMaxwait = 15.0
3124

    
3125
lockAttemptsMinwait :: Double
3126
lockAttemptsMinwait = 1.0
3127

    
3128
lockAttemptsTimeout :: Int
3129
lockAttemptsTimeout = (10 * 3600) `div` (opPrioDefault - opPrioHighest)
3130

    
3131
-- * Execution log types
3132

    
3133
elogMessage :: String
3134
elogMessage = Types.eLogTypeToRaw ELogMessage
3135

    
3136
elogRemoteImport :: String
3137
elogRemoteImport = Types.eLogTypeToRaw ELogRemoteImport
3138

    
3139
elogJqueueTest :: String
3140
elogJqueueTest = Types.eLogTypeToRaw ELogJqueueTest
3141

    
3142
-- * /etc/hosts modification
3143

    
3144
etcHostsAdd :: String
3145
etcHostsAdd = "add"
3146

    
3147
etcHostsRemove :: String
3148
etcHostsRemove = "remove"
3149

    
3150
-- * Job queue test
3151

    
3152
jqtMsgprefix :: String
3153
jqtMsgprefix = "TESTMSG="
3154

    
3155
jqtExec :: String
3156
jqtExec = "exec"
3157

    
3158
jqtExpandnames :: String
3159
jqtExpandnames = "expandnames"
3160

    
3161
jqtLogmsg :: String
3162
jqtLogmsg = "logmsg"
3163

    
3164
jqtStartmsg :: String
3165
jqtStartmsg = "startmsg"
3166

    
3167
jqtAll :: FrozenSet String
3168
jqtAll = ConstantUtils.mkSet [jqtExec, jqtExpandnames, jqtLogmsg, jqtStartmsg]
3169

    
3170
-- * Query resources
3171

    
3172
qrCluster :: String
3173
qrCluster = "cluster"
3174

    
3175
qrExport :: String
3176
qrExport = "export"
3177

    
3178
qrExtstorage :: String
3179
qrExtstorage = "extstorage"
3180

    
3181
qrGroup :: String
3182
qrGroup = "group"
3183

    
3184
qrInstance :: String
3185
qrInstance = "instance"
3186

    
3187
qrJob :: String
3188
qrJob = "job"
3189

    
3190
qrLock :: String
3191
qrLock = "lock"
3192

    
3193
qrNetwork :: String
3194
qrNetwork = "network"
3195

    
3196
qrNode :: String
3197
qrNode = "node"
3198

    
3199
qrOs :: String
3200
qrOs = "os"
3201

    
3202
-- | List of resources which can be queried using 'Ganeti.OpCodes.OpQuery'
3203
qrViaOp :: FrozenSet String
3204
qrViaOp =
3205
  ConstantUtils.mkSet [qrCluster,
3206
                       qrInstance,
3207
                       qrNode,
3208
                       qrGroup,
3209
                       qrOs,
3210
                       qrExport,
3211
                       qrNetwork,
3212
                       qrExtstorage]
3213

    
3214
-- | List of resources which can be queried using Local UniX Interface
3215
qrViaLuxi :: FrozenSet String
3216
qrViaLuxi = ConstantUtils.mkSet [qrLock, qrJob]
3217

    
3218
-- | List of resources which can be queried using RAPI
3219
qrViaRapi :: FrozenSet String
3220
qrViaRapi = qrViaLuxi
3221

    
3222
-- * Query field types
3223

    
3224
qftBool :: String
3225
qftBool = "bool"
3226

    
3227
qftNumber :: String
3228
qftNumber = "number"
3229

    
3230
qftOther :: String
3231
qftOther = "other"
3232

    
3233
qftText :: String
3234
qftText = "text"
3235

    
3236
qftTimestamp :: String
3237
qftTimestamp = "timestamp"
3238

    
3239
qftUnit :: String
3240
qftUnit = "unit"
3241

    
3242
qftUnknown :: String
3243
qftUnknown = "unknown"
3244

    
3245
qftAll :: FrozenSet String
3246
qftAll =
3247
  ConstantUtils.mkSet [qftBool,
3248
                       qftNumber,
3249
                       qftOther,
3250
                       qftText,
3251
                       qftTimestamp,
3252
                       qftUnit,
3253
                       qftUnknown]
3254

    
3255
-- * Query result field status
3256
--
3257
-- Don't change or reuse values as they're used by clients.
3258
--
3259
-- FIXME: link with 'Ganeti.Query.Language.ResultStatus'
3260

    
3261
-- | No data (e.g. RPC error), can be used instead of 'rsOffline'
3262
rsNodata :: Int
3263
rsNodata = 2
3264

    
3265
rsNormal :: Int
3266
rsNormal = 0
3267

    
3268
-- | Resource marked offline
3269
rsOffline :: Int
3270
rsOffline = 4
3271

    
3272
-- | Value unavailable/unsupported for item; if this field is
3273
-- supported but we cannot get the data for the moment, 'rsNodata' or
3274
-- 'rsOffline' should be used
3275
rsUnavail :: Int
3276
rsUnavail = 3
3277

    
3278
rsUnknown :: Int
3279
rsUnknown = 1
3280

    
3281
rsAll :: FrozenSet Int
3282
rsAll =
3283
  ConstantUtils.mkSet [rsNodata,
3284
                       rsNormal,
3285
                       rsOffline,
3286
                       rsUnavail,
3287
                       rsUnknown]
3288

    
3289
-- | Special field cases and their verbose/terse formatting
3290
rssDescription :: Map Int (String, String)
3291
rssDescription =
3292
  Map.fromList [(rsUnknown, ("(unknown)", "??")),
3293
                (rsNodata, ("(nodata)", "?")),
3294
                (rsOffline, ("(offline)", "*")),
3295
                (rsUnavail, ("(unavail)", "-"))]
3296

    
3297
-- * Max dynamic devices
3298

    
3299
maxDisks :: Int
3300
maxDisks = Types.maxDisks
3301

    
3302
maxNics :: Int
3303
maxNics = Types.maxNics
3304

    
3305
-- | SSCONF file prefix
3306
ssconfFileprefix :: String
3307
ssconfFileprefix = "ssconf_"
3308

    
3309
-- * SSCONF keys
3310

    
3311
ssClusterName :: String
3312
ssClusterName = "cluster_name"
3313

    
3314
ssClusterTags :: String
3315
ssClusterTags = "cluster_tags"
3316

    
3317
ssFileStorageDir :: String
3318
ssFileStorageDir = "file_storage_dir"
3319

    
3320
ssSharedFileStorageDir :: String
3321
ssSharedFileStorageDir = "shared_file_storage_dir"
3322

    
3323
ssMasterCandidates :: String
3324
ssMasterCandidates = "master_candidates"
3325

    
3326
ssMasterCandidatesIps :: String
3327
ssMasterCandidatesIps = "master_candidates_ips"
3328

    
3329
ssMasterIp :: String
3330
ssMasterIp = "master_ip"
3331

    
3332
ssMasterNetdev :: String
3333
ssMasterNetdev = "master_netdev"
3334

    
3335
ssMasterNetmask :: String
3336
ssMasterNetmask = "master_netmask"
3337

    
3338
ssMasterNode :: String
3339
ssMasterNode = "master_node"
3340

    
3341
ssNodeList :: String
3342
ssNodeList = "node_list"
3343

    
3344
ssNodePrimaryIps :: String
3345
ssNodePrimaryIps = "node_primary_ips"
3346

    
3347
ssNodeSecondaryIps :: String
3348
ssNodeSecondaryIps = "node_secondary_ips"
3349

    
3350
ssOfflineNodes :: String
3351
ssOfflineNodes = "offline_nodes"
3352

    
3353
ssOnlineNodes :: String
3354
ssOnlineNodes = "online_nodes"
3355

    
3356
ssPrimaryIpFamily :: String
3357
ssPrimaryIpFamily = "primary_ip_family"
3358

    
3359
ssInstanceList :: String
3360
ssInstanceList = "instance_list"
3361

    
3362
ssReleaseVersion :: String
3363
ssReleaseVersion = "release_version"
3364

    
3365
ssHypervisorList :: String
3366
ssHypervisorList = "hypervisor_list"
3367

    
3368
ssMaintainNodeHealth :: String
3369
ssMaintainNodeHealth = "maintain_node_health"
3370

    
3371
ssUidPool :: String
3372
ssUidPool = "uid_pool"
3373

    
3374
ssNodegroups :: String
3375
ssNodegroups = "nodegroups"
3376

    
3377
ssNetworks :: String
3378
ssNetworks = "networks"
3379

    
3380
-- | This is not a complete SSCONF key, but the prefix for the
3381
-- hypervisor keys
3382
ssHvparamsPref :: String
3383
ssHvparamsPref = "hvparams_"
3384

    
3385
-- * Hvparams keys
3386

    
3387
ssHvparamsXenChroot :: String
3388
ssHvparamsXenChroot = ssHvparamsPref ++ htChroot
3389

    
3390
ssHvparamsXenFake :: String
3391
ssHvparamsXenFake = ssHvparamsPref ++ htFake
3392

    
3393
ssHvparamsXenHvm :: String
3394
ssHvparamsXenHvm = ssHvparamsPref ++ htXenHvm
3395

    
3396
ssHvparamsXenKvm :: String
3397
ssHvparamsXenKvm = ssHvparamsPref ++ htKvm
3398

    
3399
ssHvparamsXenLxc :: String
3400
ssHvparamsXenLxc = ssHvparamsPref ++ htLxc
3401

    
3402
ssHvparamsXenPvm :: String
3403
ssHvparamsXenPvm = ssHvparamsPref ++ htXenPvm
3404

    
3405
validSsHvparamsKeys :: FrozenSet String
3406
validSsHvparamsKeys =
3407
  ConstantUtils.mkSet [ssHvparamsXenChroot,
3408
                       ssHvparamsXenLxc,
3409
                       ssHvparamsXenFake,
3410
                       ssHvparamsXenHvm,
3411
                       ssHvparamsXenKvm,
3412
                       ssHvparamsXenPvm]
3413

    
3414
ssFilePerms :: Int
3415
ssFilePerms = 0o444
3416

    
3417
-- | Cluster wide default parameters
3418
defaultEnabledHypervisor :: String
3419
defaultEnabledHypervisor = htXenPvm
3420

    
3421
hvcGlobals :: FrozenSet String
3422
hvcGlobals =
3423
  ConstantUtils.mkSet [hvMigrationBandwidth,
3424
                       hvMigrationMode,
3425
                       hvMigrationPort,
3426
                       hvXenCmd]
3427

    
3428
ndcGlobals :: FrozenSet String
3429
ndcGlobals = ConstantUtils.mkSet [ndExclusiveStorage]
3430

    
3431
-- | All of the following values are quite arbitrary - there are no
3432
-- "good" defaults, these must be customised per-site
3433
ispecsMinmaxDefaults :: Map String (Map String Int)
3434
ispecsMinmaxDefaults =
3435
  Map.fromList
3436
  [(ispecsMin,
3437
    Map.fromList
3438
    [(ConstantUtils.ispecMemSize, Types.iSpecMemorySize Types.defMinISpec),
3439
     (ConstantUtils.ispecCpuCount, Types.iSpecCpuCount Types.defMinISpec),
3440
     (ConstantUtils.ispecDiskCount, Types.iSpecDiskCount Types.defMinISpec),
3441
     (ConstantUtils.ispecDiskSize, Types.iSpecDiskSize Types.defMinISpec),
3442
     (ConstantUtils.ispecNicCount, Types.iSpecNicCount Types.defMinISpec),
3443
     (ConstantUtils.ispecSpindleUse, Types.iSpecSpindleUse Types.defMinISpec)]),
3444
   (ispecsMax,
3445
    Map.fromList
3446
    [(ConstantUtils.ispecMemSize, Types.iSpecMemorySize Types.defMaxISpec),
3447
     (ConstantUtils.ispecCpuCount, Types.iSpecCpuCount Types.defMaxISpec),
3448
     (ConstantUtils.ispecDiskCount, Types.iSpecDiskCount Types.defMaxISpec),
3449
     (ConstantUtils.ispecDiskSize, Types.iSpecDiskSize Types.defMaxISpec),
3450
     (ConstantUtils.ispecNicCount, Types.iSpecNicCount Types.defMaxISpec),
3451
     (ConstantUtils.ispecSpindleUse, Types.iSpecSpindleUse Types.defMaxISpec)])]
3452

    
3453
masterPoolSizeDefault :: Int
3454
masterPoolSizeDefault = 10
3455

    
3456
-- * Exclusive storage
3457

    
3458
-- | Error margin used to compare physical disks
3459
partMargin :: Double
3460
partMargin = 0.01
3461

    
3462
-- | Space reserved when creating instance disks
3463
partReserved :: Double
3464
partReserved = 0.02
3465

    
3466
-- * Confd
3467

    
3468
confdProtocolVersion :: Int
3469
confdProtocolVersion = ConstantUtils.confdProtocolVersion
3470

    
3471
-- Confd request type
3472

    
3473
confdReqPing :: Int
3474
confdReqPing = Types.confdRequestTypeToRaw ReqPing
3475

    
3476
confdReqNodeRoleByname :: Int
3477
confdReqNodeRoleByname = Types.confdRequestTypeToRaw ReqNodeRoleByName
3478

    
3479
confdReqNodePipByInstanceIp :: Int
3480
confdReqNodePipByInstanceIp = Types.confdRequestTypeToRaw ReqNodePipByInstPip
3481

    
3482
confdReqClusterMaster :: Int
3483
confdReqClusterMaster = Types.confdRequestTypeToRaw ReqClusterMaster
3484

    
3485
confdReqNodePipList :: Int
3486
confdReqNodePipList = Types.confdRequestTypeToRaw ReqNodePipList
3487

    
3488
confdReqMcPipList :: Int
3489
confdReqMcPipList = Types.confdRequestTypeToRaw ReqMcPipList
3490

    
3491
confdReqInstancesIpsList :: Int
3492
confdReqInstancesIpsList = Types.confdRequestTypeToRaw ReqInstIpsList
3493

    
3494
confdReqNodeDrbd :: Int
3495
confdReqNodeDrbd = Types.confdRequestTypeToRaw ReqNodeDrbd
3496

    
3497
confdReqNodeInstances :: Int
3498
confdReqNodeInstances = Types.confdRequestTypeToRaw ReqNodeInstances
3499

    
3500
confdReqs :: FrozenSet Int
3501
confdReqs =
3502
  ConstantUtils.mkSet .
3503
  map Types.confdRequestTypeToRaw $
3504
  [minBound..] \\ [ReqNodeInstances]
3505

    
3506
-- * Confd request type
3507

    
3508
confdReqfieldName :: Int
3509
confdReqfieldName = Types.confdReqFieldToRaw ReqFieldName
3510

    
3511
confdReqfieldIp :: Int
3512
confdReqfieldIp = Types.confdReqFieldToRaw ReqFieldIp
3513

    
3514
confdReqfieldMnodePip :: Int
3515
confdReqfieldMnodePip = Types.confdReqFieldToRaw ReqFieldMNodePip
3516

    
3517
-- * Confd repl status
3518

    
3519
confdReplStatusOk :: Int
3520
confdReplStatusOk = Types.confdReplyStatusToRaw ReplyStatusOk
3521

    
3522
confdReplStatusError :: Int
3523
confdReplStatusError = Types.confdReplyStatusToRaw ReplyStatusError
3524

    
3525
confdReplStatusNotimplemented :: Int
3526
confdReplStatusNotimplemented = Types.confdReplyStatusToRaw ReplyStatusNotImpl
3527

    
3528
confdReplStatuses :: FrozenSet Int
3529
confdReplStatuses =
3530
  ConstantUtils.mkSet $ map Types.confdReplyStatusToRaw [minBound..]
3531

    
3532
-- * Confd node role
3533

    
3534
confdNodeRoleMaster :: Int
3535
confdNodeRoleMaster = Types.confdNodeRoleToRaw NodeRoleMaster
3536

    
3537
confdNodeRoleCandidate :: Int
3538
confdNodeRoleCandidate = Types.confdNodeRoleToRaw NodeRoleCandidate
3539

    
3540
confdNodeRoleOffline :: Int
3541
confdNodeRoleOffline = Types.confdNodeRoleToRaw NodeRoleOffline
3542

    
3543
confdNodeRoleDrained :: Int
3544
confdNodeRoleDrained = Types.confdNodeRoleToRaw NodeRoleDrained
3545

    
3546
confdNodeRoleRegular :: Int
3547
confdNodeRoleRegular = Types.confdNodeRoleToRaw NodeRoleRegular
3548

    
3549
-- * A few common errors for confd
3550

    
3551
confdErrorUnknownEntry :: Int
3552
confdErrorUnknownEntry = Types.confdErrorTypeToRaw ConfdErrorUnknownEntry
3553

    
3554
confdErrorInternal :: Int
3555
confdErrorInternal = Types.confdErrorTypeToRaw ConfdErrorInternal
3556

    
3557
confdErrorArgument :: Int
3558
confdErrorArgument = Types.confdErrorTypeToRaw ConfdErrorArgument
3559

    
3560
-- * Confd request query fields
3561

    
3562
confdReqqLink :: String
3563
confdReqqLink = ConstantUtils.confdReqqLink
3564

    
3565
confdReqqIp :: String
3566
confdReqqIp = ConstantUtils.confdReqqIp
3567

    
3568
confdReqqIplist :: String
3569
confdReqqIplist = ConstantUtils.confdReqqIplist
3570

    
3571
confdReqqFields :: String
3572
confdReqqFields = ConstantUtils.confdReqqFields
3573

    
3574
-- | Each request is "salted" by the current timestamp.
3575
--
3576
-- This constant decides how many seconds of skew to accept.
3577
--
3578
-- TODO: make this a default and allow the value to be more
3579
-- configurable
3580
confdMaxClockSkew :: Int
3581
confdMaxClockSkew = 2 * nodeMaxClockSkew
3582

    
3583
-- | When we haven't reloaded the config for more than this amount of
3584
-- seconds, we force a test to see if inotify is betraying us. Using a
3585
-- prime number to ensure we get less chance of 'same wakeup' with
3586
-- other processes.
3587
confdConfigReloadTimeout :: Int
3588
confdConfigReloadTimeout = 17
3589

    
3590
-- | If we receive more than one update in this amount of
3591
-- microseconds, we move to polling every RATELIMIT seconds, rather
3592
-- than relying on inotify, to be able to serve more requests.
3593
confdConfigReloadRatelimit :: Int
3594
confdConfigReloadRatelimit = 250000
3595

    
3596
-- | Magic number prepended to all confd queries.
3597
--
3598
-- This allows us to distinguish different types of confd protocols
3599
-- and handle them. For example by changing this we can move the whole
3600
-- payload to be compressed, or move away from json.
3601
confdMagicFourcc :: String
3602
confdMagicFourcc = "plj0"
3603

    
3604
-- | By default a confd request is sent to the minimum between this
3605
-- number and all MCs. 6 was chosen because even in the case of a
3606
-- disastrous 50% response rate, we should have enough answers to be
3607
-- able to compare more than one.
3608
confdDefaultReqCoverage :: Int
3609
confdDefaultReqCoverage = 6
3610

    
3611
-- | Timeout in seconds to expire pending query request in the confd
3612
-- client library. We don't actually expect any answer more than 10
3613
-- seconds after we sent a request.
3614
confdClientExpireTimeout :: Int
3615
confdClientExpireTimeout = 10
3616

    
3617
-- | Maximum UDP datagram size.
3618
--
3619
-- On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507
3620
-- On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487
3621
--   (assuming we can't use jumbo frames)
3622
-- We just set this to 60K, which should be enough
3623
maxUdpDataSize :: Int
3624
maxUdpDataSize = 61440
3625

    
3626
-- * User-id pool minimum/maximum acceptable user-ids
3627

    
3628
uidpoolUidMin :: Int
3629
uidpoolUidMin = 0
3630

    
3631
-- | Assuming 32 bit user-ids
3632
uidpoolUidMax :: Integer
3633
uidpoolUidMax = 2 ^ 32 - 1
3634

    
3635
-- | Name or path of the pgrep command
3636
pgrep :: String
3637
pgrep = "pgrep"
3638

    
3639
-- | Name of the node group that gets created at cluster init or
3640
-- upgrade
3641
initialNodeGroupName :: String
3642
initialNodeGroupName = "default"
3643

    
3644
-- * Possible values for NodeGroup.alloc_policy
3645

    
3646
allocPolicyLastResort :: String
3647
allocPolicyLastResort = Types.allocPolicyToRaw AllocLastResort
3648

    
3649
allocPolicyPreferred :: String
3650
allocPolicyPreferred = Types.allocPolicyToRaw AllocPreferred
3651

    
3652
allocPolicyUnallocable :: String
3653
allocPolicyUnallocable = Types.allocPolicyToRaw AllocUnallocable
3654

    
3655
validAllocPolicies :: [String]
3656
validAllocPolicies = map Types.allocPolicyToRaw [minBound..]
3657

    
3658
-- | Temporary external/shared storage parameters
3659
blockdevDriverManual :: String
3660
blockdevDriverManual = Types.blockDriverToRaw BlockDrvManual
3661

    
3662
-- | 'qemu-img' path, required for 'ovfconverter'
3663
qemuimgPath :: String
3664
qemuimgPath = AutoConf.qemuimgPath
3665

    
3666
-- | Whether htools was enabled at compilation time
3667
--
3668
-- FIXME: this should be moved next to the other enable constants,
3669
-- such as, 'enableConfd', and renamed to 'enableHtools'.
3670
htools :: Bool
3671
htools = AutoConf.htools
3672

    
3673
-- | The hail iallocator
3674
iallocHail :: String
3675
iallocHail = "hail"
3676

    
3677
-- * Fake opcodes for functions that have hooks attached to them via
3678
-- backend.RunLocalHooks
3679

    
3680
fakeOpMasterTurndown :: String
3681
fakeOpMasterTurndown = "OP_CLUSTER_IP_TURNDOWN"
3682

    
3683
fakeOpMasterTurnup :: String
3684
fakeOpMasterTurnup = "OP_CLUSTER_IP_TURNUP"
3685

    
3686
-- * SSH key types
3687

    
3688
sshkDsa :: String
3689
sshkDsa = "dsa"
3690

    
3691
sshkRsa :: String
3692
sshkRsa = "rsa"
3693

    
3694
sshkAll :: FrozenSet String
3695
sshkAll = ConstantUtils.mkSet [sshkRsa, sshkDsa]
3696

    
3697
-- * SSH authorized key types
3698

    
3699
sshakDss :: String
3700
sshakDss = "ssh-dss"
3701

    
3702
sshakRsa :: String
3703
sshakRsa = "ssh-rsa"
3704

    
3705
sshakAll :: FrozenSet String
3706
sshakAll = ConstantUtils.mkSet [sshakDss, sshakRsa]
3707

    
3708
-- * SSH setup
3709

    
3710
sshsClusterName :: String
3711
sshsClusterName = "cluster_name"
3712

    
3713
sshsSshHostKey :: String
3714
sshsSshHostKey = "ssh_host_key"
3715

    
3716
sshsSshRootKey :: String
3717
sshsSshRootKey = "ssh_root_key"
3718

    
3719
sshsNodeDaemonCertificate :: String
3720
sshsNodeDaemonCertificate = "node_daemon_certificate"
3721

    
3722
-- * Key files for SSH daemon
3723

    
3724
sshHostDsaPriv :: String
3725
sshHostDsaPriv = sshConfigDir ++ "/ssh_host_dsa_key"
3726

    
3727
sshHostDsaPub :: String
3728
sshHostDsaPub = sshHostDsaPriv ++ ".pub"
3729

    
3730
sshHostRsaPriv :: String
3731
sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key"
3732

    
3733
sshHostRsaPub :: String
3734
sshHostRsaPub = sshHostRsaPriv ++ ".pub"
3735

    
3736
-- * Node daemon setup
3737

    
3738
ndsClusterName :: String
3739
ndsClusterName = "cluster_name"
3740

    
3741
ndsNodeDaemonCertificate :: String
3742
ndsNodeDaemonCertificate = "node_daemon_certificate"
3743

    
3744
ndsSsconf :: String
3745
ndsSsconf = "ssconf"
3746

    
3747
ndsStartNodeDaemon :: String
3748
ndsStartNodeDaemon = "start_node_daemon"
3749

    
3750
-- * The source reasons for the execution of an OpCode
3751

    
3752
opcodeReasonSrcClient :: String
3753
opcodeReasonSrcClient = "gnt:client"
3754

    
3755
opcodeReasonSrcNoded :: String
3756
opcodeReasonSrcNoded = "gnt:daemon:noded"
3757

    
3758
opcodeReasonSrcOpcode :: String
3759
opcodeReasonSrcOpcode = "gnt:opcode"
3760

    
3761
opcodeReasonSrcRlib2 :: String
3762
opcodeReasonSrcRlib2 = "gnt:library:rlib2"
3763

    
3764
opcodeReasonSrcUser :: String
3765
opcodeReasonSrcUser = "gnt:user"
3766

    
3767
opcodeReasonSources :: FrozenSet String
3768
opcodeReasonSources =
3769
  ConstantUtils.mkSet [opcodeReasonSrcClient,
3770
                       opcodeReasonSrcNoded,
3771
                       opcodeReasonSrcOpcode,
3772
                       opcodeReasonSrcRlib2,
3773
                       opcodeReasonSrcUser]
3774

    
3775
-- | Path generating random UUID
3776
randomUuidFile :: String
3777
randomUuidFile = ConstantUtils.randomUuidFile
3778

    
3779
-- * Auto-repair tag prefixes
3780

    
3781
autoRepairTagPrefix :: String
3782
autoRepairTagPrefix = "ganeti:watcher:autorepair:"
3783

    
3784
autoRepairTagEnabled :: String
3785
autoRepairTagEnabled = autoRepairTagPrefix
3786

    
3787
autoRepairTagPending :: String
3788
autoRepairTagPending = autoRepairTagPrefix ++ "pending:"
3789

    
3790
autoRepairTagResult :: String
3791
autoRepairTagResult = autoRepairTagPrefix ++ "result:"
3792

    
3793
autoRepairTagSuspended :: String
3794
autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:"
3795

    
3796
-- * Auto-repair levels
3797

    
3798
autoRepairFailover :: String
3799
autoRepairFailover = Types.autoRepairTypeToRaw ArFailover
3800

    
3801
autoRepairFixStorage :: String
3802
autoRepairFixStorage = Types.autoRepairTypeToRaw ArFixStorage
3803

    
3804
autoRepairMigrate :: String
3805
autoRepairMigrate = Types.autoRepairTypeToRaw ArMigrate
3806

    
3807
autoRepairReinstall :: String
3808
autoRepairReinstall = Types.autoRepairTypeToRaw ArReinstall
3809

    
3810
autoRepairAllTypes :: FrozenSet String
3811
autoRepairAllTypes =
3812
  ConstantUtils.mkSet [autoRepairFailover,
3813
                       autoRepairFixStorage,
3814
                       autoRepairMigrate,
3815
                       autoRepairReinstall]
3816

    
3817
-- * Auto-repair results
3818

    
3819
autoRepairEnoperm :: String
3820
autoRepairEnoperm = Types.autoRepairResultToRaw ArEnoperm
3821

    
3822
autoRepairFailure :: String
3823
autoRepairFailure = Types.autoRepairResultToRaw ArFailure
3824

    
3825
autoRepairSuccess :: String
3826
autoRepairSuccess = Types.autoRepairResultToRaw ArSuccess
3827

    
3828
autoRepairAllResults :: FrozenSet String
3829
autoRepairAllResults =
3830
  ConstantUtils.mkSet [autoRepairEnoperm, autoRepairFailure, autoRepairSuccess]
3831

    
3832
-- | The version identifier for builtin data collectors
3833
builtinDataCollectorVersion :: String
3834
builtinDataCollectorVersion = "B"
3835

    
3836
-- | The reason trail opcode parameter name
3837
opcodeReason :: String
3838
opcodeReason = "reason"
3839

    
3840
diskstatsFile :: String
3841
diskstatsFile = "/proc/diskstats"
3842

    
3843
-- *  CPU load collector
3844

    
3845
statFile :: String
3846
statFile = "/proc/stat"
3847

    
3848
cpuavgloadBufferSize :: Int
3849
cpuavgloadBufferSize = 150
3850

    
3851
cpuavgloadWindowSize :: Int
3852
cpuavgloadWindowSize = 600
3853

    
3854
-- | Mond's variable for periodical data collection
3855
mondTimeInterval :: Int
3856
mondTimeInterval = 5
3857

    
3858
-- * Disk access modes
3859

    
3860
diskUserspace :: String
3861
diskUserspace = Types.diskAccessModeToRaw DiskUserspace
3862

    
3863
diskKernelspace :: String
3864
diskKernelspace = Types.diskAccessModeToRaw DiskKernelspace
3865

    
3866
diskValidAccessModes :: FrozenSet String
3867
diskValidAccessModes =
3868
  ConstantUtils.mkSet $ map Types.diskAccessModeToRaw [minBound..]
3869

    
3870
-- | Timeout for queue draining in upgrades
3871
upgradeQueueDrainTimeout :: Int
3872
upgradeQueueDrainTimeout = 36 * 60 * 60 -- 1.5 days
3873

    
3874
-- | Intervall at which the queue is polled during upgrades
3875
upgradeQueuePollInterval :: Int
3876
upgradeQueuePollInterval  = 10