X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/385b2959745cb49e2c2da95ea4609c246fb2ac63..5ce621ab2d83b8ac38d9a8fc3123fbd3feaa4b49:/src/Ganeti/HsConstants.hs diff --git a/src/Ganeti/HsConstants.hs b/src/Ganeti/HsConstants.hs index b2d5452..9e0d3c9 100644 --- a/src/Ganeti/HsConstants.hs +++ b/src/Ganeti/HsConstants.hs @@ -1,3 +1,4 @@ +{-# OPTIONS -fno-warn-type-defaults #-} {-| HsConstants contains the Haskell constants This is a transitional module complementary to 'Ganeti.Constants'. It @@ -41,17 +42,17 @@ import Data.List ((\\)) import Data.Map (Map) import qualified Data.Map as Map (fromList, keys, insert) -import AutoConf +import qualified AutoConf import Ganeti.ConstantUtils (PythonChar(..), FrozenSet, Protocol(..), buildVersion) import qualified Ganeti.ConstantUtils as ConstantUtils -import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..), - ExtraLogReason(..)) import Ganeti.HTools.Types (AutoRepairResult(..), AutoRepairType(..)) import qualified Ganeti.HTools.Types as Types import Ganeti.Logging (SyslogUsage(..)) import qualified Ganeti.Logging as Logging (syslogUsageToRaw) import qualified Ganeti.Runtime as Runtime +import Ganeti.Runtime (GanetiDaemon(..), MiscGroup(..), GanetiGroup(..), + ExtraLogReason(..)) import Ganeti.Types import qualified Ganeti.Types as Types import Ganeti.Confd.Types (ConfdRequestType(..), ConfdReqField(..), @@ -77,6 +78,9 @@ drbdNoMetaFlush = AutoConf.drbdNoMetaFlush lvmStripecount :: Int lvmStripecount = AutoConf.lvmStripecount +hasGnuLn :: Bool +hasGnuLn = AutoConf.hasGnuLn + -- * 'autoconf' constants for Python only ('lib/pathutils.py') -- ** Build-time constants @@ -904,8 +908,8 @@ fileDriver = map Types.fileDriverToRaw [minBound..] -- | The set of drbd-like disk types -ldsDrbd :: FrozenSet String -ldsDrbd = ConstantUtils.mkSet [Types.diskTemplateToRaw DTDrbd8] +dtsDrbd :: FrozenSet String +dtsDrbd = ConstantUtils.mkSet [Types.diskTemplateToRaw DTDrbd8] -- * Disk access mode @@ -2253,6 +2257,236 @@ vncBasePort = 5900 vncDefaultBindAddress :: String vncDefaultBindAddress = ip4AddressAny +-- * NIC types + +htNicE1000 :: String +htNicE1000 = "e1000" + +htNicI82551 :: String +htNicI82551 = "i82551" + +htNicI8259er :: String +htNicI8259er = "i82559er" + +htNicI85557b :: String +htNicI85557b = "i82557b" + +htNicNe2kIsa :: String +htNicNe2kIsa = "ne2k_isa" + +htNicNe2kPci :: String +htNicNe2kPci = "ne2k_pci" + +htNicParavirtual :: String +htNicParavirtual = "paravirtual" + +htNicPcnet :: String +htNicPcnet = "pcnet" + +htNicRtl8139 :: String +htNicRtl8139 = "rtl8139" + +htHvmValidNicTypes :: FrozenSet String +htHvmValidNicTypes = + ConstantUtils.mkSet [htNicE1000, + htNicNe2kIsa, + htNicNe2kPci, + htNicParavirtual, + htNicRtl8139] + +htKvmValidNicTypes :: FrozenSet String +htKvmValidNicTypes = + ConstantUtils.mkSet [htNicE1000, + htNicI82551, + htNicI8259er, + htNicI85557b, + htNicNe2kIsa, + htNicNe2kPci, + htNicParavirtual, + htNicPcnet, + htNicRtl8139] + +-- * Vif types + +-- | Default vif type in xen-hvm +htHvmVifIoemu :: String +htHvmVifIoemu = "ioemu" + +htHvmVifVif :: String +htHvmVifVif = "vif" + +htHvmValidVifTypes :: FrozenSet String +htHvmValidVifTypes = ConstantUtils.mkSet [htHvmVifIoemu, htHvmVifVif] + +-- * Disk types + +htDiskIde :: String +htDiskIde = "ide" + +htDiskIoemu :: String +htDiskIoemu = "ioemu" + +htDiskMtd :: String +htDiskMtd = "mtd" + +htDiskParavirtual :: String +htDiskParavirtual = "paravirtual" + +htDiskPflash :: String +htDiskPflash = "pflash" + +htDiskScsi :: String +htDiskScsi = "scsi" + +htDiskSd :: String +htDiskSd = "sd" + +htHvmValidDiskTypes :: FrozenSet String +htHvmValidDiskTypes = ConstantUtils.mkSet [htDiskIoemu, htDiskParavirtual] + +htKvmValidDiskTypes :: FrozenSet String +htKvmValidDiskTypes = + ConstantUtils.mkSet [htDiskIde, + htDiskMtd, + htDiskParavirtual, + htDiskPflash, + htDiskScsi, + htDiskSd] + +htCacheDefault :: String +htCacheDefault = "default" + +htCacheNone :: String +htCacheNone = "none" + +htCacheWback :: String +htCacheWback = "writeback" + +htCacheWthrough :: String +htCacheWthrough = "writethrough" + +htValidCacheTypes :: FrozenSet String +htValidCacheTypes = + ConstantUtils.mkSet [htCacheDefault, + htCacheNone, + htCacheWback, + htCacheWthrough] + +-- * Mouse types + +htMouseMouse :: String +htMouseMouse = "mouse" + +htMouseTablet :: String +htMouseTablet = "tablet" + +htKvmValidMouseTypes :: FrozenSet String +htKvmValidMouseTypes = ConstantUtils.mkSet [htMouseMouse, htMouseTablet] + +-- * Boot order + +htBoCdrom :: String +htBoCdrom = "cdrom" + +htBoDisk :: String +htBoDisk = "disk" + +htBoFloppy :: String +htBoFloppy = "floppy" + +htBoNetwork :: String +htBoNetwork = "network" + +htKvmValidBoTypes :: FrozenSet String +htKvmValidBoTypes = + ConstantUtils.mkSet [htBoCdrom, htBoDisk, htBoFloppy, htBoNetwork] + +-- * SPICE lossless image compression options + +htKvmSpiceLosslessImgComprAutoGlz :: String +htKvmSpiceLosslessImgComprAutoGlz = "auto_glz" + +htKvmSpiceLosslessImgComprAutoLz :: String +htKvmSpiceLosslessImgComprAutoLz = "auto_lz" + +htKvmSpiceLosslessImgComprGlz :: String +htKvmSpiceLosslessImgComprGlz = "glz" + +htKvmSpiceLosslessImgComprLz :: String +htKvmSpiceLosslessImgComprLz = "lz" + +htKvmSpiceLosslessImgComprOff :: String +htKvmSpiceLosslessImgComprOff = "off" + +htKvmSpiceLosslessImgComprQuic :: String +htKvmSpiceLosslessImgComprQuic = "quic" + +htKvmSpiceValidLosslessImgComprOptions :: FrozenSet String +htKvmSpiceValidLosslessImgComprOptions = + ConstantUtils.mkSet [htKvmSpiceLosslessImgComprAutoGlz, + htKvmSpiceLosslessImgComprAutoLz, + htKvmSpiceLosslessImgComprGlz, + htKvmSpiceLosslessImgComprLz, + htKvmSpiceLosslessImgComprOff, + htKvmSpiceLosslessImgComprQuic] + +htKvmSpiceLossyImgComprAlways :: String +htKvmSpiceLossyImgComprAlways = "always" + +htKvmSpiceLossyImgComprAuto :: String +htKvmSpiceLossyImgComprAuto = "auto" + +htKvmSpiceLossyImgComprNever :: String +htKvmSpiceLossyImgComprNever = "never" + +htKvmSpiceValidLossyImgComprOptions :: FrozenSet String +htKvmSpiceValidLossyImgComprOptions = + ConstantUtils.mkSet [htKvmSpiceLossyImgComprAlways, + htKvmSpiceLossyImgComprAuto, + htKvmSpiceLossyImgComprNever] + +-- * SPICE video stream detection + +htKvmSpiceVideoStreamDetectionAll :: String +htKvmSpiceVideoStreamDetectionAll = "all" + +htKvmSpiceVideoStreamDetectionFilter :: String +htKvmSpiceVideoStreamDetectionFilter = "filter" + +htKvmSpiceVideoStreamDetectionOff :: String +htKvmSpiceVideoStreamDetectionOff = "off" + +htKvmSpiceValidVideoStreamDetectionOptions :: FrozenSet String +htKvmSpiceValidVideoStreamDetectionOptions = + ConstantUtils.mkSet [htKvmSpiceVideoStreamDetectionAll, + htKvmSpiceVideoStreamDetectionFilter, + htKvmSpiceVideoStreamDetectionOff] + +-- * Security models + +htSmNone :: String +htSmNone = "none" + +htSmPool :: String +htSmPool = "pool" + +htSmUser :: String +htSmUser = "user" + +htKvmValidSmTypes :: FrozenSet String +htKvmValidSmTypes = ConstantUtils.mkSet [htSmNone, htSmPool, htSmUser] + +-- * Kvm flag values + +htKvmDisabled :: String +htKvmDisabled = "disabled" + +htKvmEnabled :: String +htKvmEnabled = "enabled" + +htKvmFlagValues :: FrozenSet String +htKvmFlagValues = ConstantUtils.mkSet [htKvmDisabled, htKvmEnabled] + -- * Migration type htMigrationLive :: String @@ -2936,6 +3170,302 @@ jqtStartmsg = "startmsg" jqtAll :: FrozenSet String jqtAll = ConstantUtils.mkSet [jqtExec, jqtExpandnames, jqtLogmsg, jqtStartmsg] +-- * Query resources + +qrCluster :: String +qrCluster = "cluster" + +qrExport :: String +qrExport = "export" + +qrExtstorage :: String +qrExtstorage = "extstorage" + +qrGroup :: String +qrGroup = "group" + +qrInstance :: String +qrInstance = "instance" + +qrJob :: String +qrJob = "job" + +qrLock :: String +qrLock = "lock" + +qrNetwork :: String +qrNetwork = "network" + +qrNode :: String +qrNode = "node" + +qrOs :: String +qrOs = "os" + +-- | List of resources which can be queried using 'Ganeti.OpCodes.OpQuery' +qrViaOp :: FrozenSet String +qrViaOp = + ConstantUtils.mkSet [qrCluster, + qrInstance, + qrNode, + qrGroup, + qrOs, + qrExport, + qrNetwork, + qrExtstorage] + +-- | List of resources which can be queried using Local UniX Interface +qrViaLuxi :: FrozenSet String +qrViaLuxi = ConstantUtils.mkSet [qrLock, qrJob] + +-- | List of resources which can be queried using RAPI +qrViaRapi :: FrozenSet String +qrViaRapi = qrViaLuxi + +-- * Query field types + +qftBool :: String +qftBool = "bool" + +qftNumber :: String +qftNumber = "number" + +qftOther :: String +qftOther = "other" + +qftText :: String +qftText = "text" + +qftTimestamp :: String +qftTimestamp = "timestamp" + +qftUnit :: String +qftUnit = "unit" + +qftUnknown :: String +qftUnknown = "unknown" + +qftAll :: FrozenSet String +qftAll = + ConstantUtils.mkSet [qftBool, + qftNumber, + qftOther, + qftText, + qftTimestamp, + qftUnit, + qftUnknown] + +-- * Query result field status +-- +-- Don't change or reuse values as they're used by clients. +-- +-- FIXME: link with 'Ganeti.Query.Language.ResultStatus' + +-- | No data (e.g. RPC error), can be used instead of 'rsOffline' +rsNodata :: Int +rsNodata = 2 + +rsNormal :: Int +rsNormal = 0 + +-- | Resource marked offline +rsOffline :: Int +rsOffline = 4 + +-- | Value unavailable/unsupported for item; if this field is +-- supported but we cannot get the data for the moment, 'rsNodata' or +-- 'rsOffline' should be used +rsUnavail :: Int +rsUnavail = 3 + +rsUnknown :: Int +rsUnknown = 1 + +rsAll :: FrozenSet Int +rsAll = + ConstantUtils.mkSet [rsNodata, + rsNormal, + rsOffline, + rsUnavail, + rsUnknown] + +-- | Special field cases and their verbose/terse formatting +rssDescription :: Map Int (String, String) +rssDescription = + Map.fromList [(rsUnknown, ("(unknown)", "??")), + (rsNodata, ("(nodata)", "?")), + (rsOffline, ("(offline)", "*")), + (rsUnavail, ("(unavail)", "-"))] + +-- * Max dynamic devices + +maxDisks :: Int +maxDisks = Types.maxDisks + +maxNics :: Int +maxNics = Types.maxNics + +-- | SSCONF file prefix +ssconfFileprefix :: String +ssconfFileprefix = "ssconf_" + +-- * SSCONF keys + +ssClusterName :: String +ssClusterName = "cluster_name" + +ssClusterTags :: String +ssClusterTags = "cluster_tags" + +ssFileStorageDir :: String +ssFileStorageDir = "file_storage_dir" + +ssSharedFileStorageDir :: String +ssSharedFileStorageDir = "shared_file_storage_dir" + +ssMasterCandidates :: String +ssMasterCandidates = "master_candidates" + +ssMasterCandidatesIps :: String +ssMasterCandidatesIps = "master_candidates_ips" + +ssMasterIp :: String +ssMasterIp = "master_ip" + +ssMasterNetdev :: String +ssMasterNetdev = "master_netdev" + +ssMasterNetmask :: String +ssMasterNetmask = "master_netmask" + +ssMasterNode :: String +ssMasterNode = "master_node" + +ssNodeList :: String +ssNodeList = "node_list" + +ssNodePrimaryIps :: String +ssNodePrimaryIps = "node_primary_ips" + +ssNodeSecondaryIps :: String +ssNodeSecondaryIps = "node_secondary_ips" + +ssOfflineNodes :: String +ssOfflineNodes = "offline_nodes" + +ssOnlineNodes :: String +ssOnlineNodes = "online_nodes" + +ssPrimaryIpFamily :: String +ssPrimaryIpFamily = "primary_ip_family" + +ssInstanceList :: String +ssInstanceList = "instance_list" + +ssReleaseVersion :: String +ssReleaseVersion = "release_version" + +ssHypervisorList :: String +ssHypervisorList = "hypervisor_list" + +ssMaintainNodeHealth :: String +ssMaintainNodeHealth = "maintain_node_health" + +ssUidPool :: String +ssUidPool = "uid_pool" + +ssNodegroups :: String +ssNodegroups = "nodegroups" + +ssNetworks :: String +ssNetworks = "networks" + +-- | This is not a complete SSCONF key, but the prefix for the +-- hypervisor keys +ssHvparamsPref :: String +ssHvparamsPref = "hvparams_" + +-- * Hvparams keys + +ssHvparamsXenChroot :: String +ssHvparamsXenChroot = ssHvparamsPref ++ htChroot + +ssHvparamsXenFake :: String +ssHvparamsXenFake = ssHvparamsPref ++ htFake + +ssHvparamsXenHvm :: String +ssHvparamsXenHvm = ssHvparamsPref ++ htXenHvm + +ssHvparamsXenKvm :: String +ssHvparamsXenKvm = ssHvparamsPref ++ htKvm + +ssHvparamsXenLxc :: String +ssHvparamsXenLxc = ssHvparamsPref ++ htLxc + +ssHvparamsXenPvm :: String +ssHvparamsXenPvm = ssHvparamsPref ++ htXenPvm + +validSsHvparamsKeys :: FrozenSet String +validSsHvparamsKeys = + ConstantUtils.mkSet [ssHvparamsXenChroot, + ssHvparamsXenLxc, + ssHvparamsXenFake, + ssHvparamsXenHvm, + ssHvparamsXenKvm, + ssHvparamsXenPvm] + +ssFilePerms :: Int +ssFilePerms = 0o444 + +-- | Cluster wide default parameters +defaultEnabledHypervisor :: String +defaultEnabledHypervisor = htXenPvm + +hvcGlobals :: FrozenSet String +hvcGlobals = + ConstantUtils.mkSet [hvMigrationBandwidth, + hvMigrationMode, + hvMigrationPort, + hvXenCmd] + +ndcGlobals :: FrozenSet String +ndcGlobals = ConstantUtils.mkSet [ndExclusiveStorage] + +-- | All of the following values are quite arbitrary - there are no +-- "good" defaults, these must be customised per-site +ispecsMinmaxDefaults :: Map String (Map String Int) +ispecsMinmaxDefaults = + Map.fromList + [(ispecsMin, + Map.fromList + [(ConstantUtils.ispecMemSize, Types.iSpecMemorySize Types.defMinISpec), + (ConstantUtils.ispecCpuCount, Types.iSpecCpuCount Types.defMinISpec), + (ConstantUtils.ispecDiskCount, Types.iSpecDiskCount Types.defMinISpec), + (ConstantUtils.ispecDiskSize, Types.iSpecDiskSize Types.defMinISpec), + (ConstantUtils.ispecNicCount, Types.iSpecNicCount Types.defMinISpec), + (ConstantUtils.ispecSpindleUse, Types.iSpecSpindleUse Types.defMinISpec)]), + (ispecsMax, + Map.fromList + [(ConstantUtils.ispecMemSize, Types.iSpecMemorySize Types.defMaxISpec), + (ConstantUtils.ispecCpuCount, Types.iSpecCpuCount Types.defMaxISpec), + (ConstantUtils.ispecDiskCount, Types.iSpecDiskCount Types.defMaxISpec), + (ConstantUtils.ispecDiskSize, Types.iSpecDiskSize Types.defMaxISpec), + (ConstantUtils.ispecNicCount, Types.iSpecNicCount Types.defMaxISpec), + (ConstantUtils.ispecSpindleUse, Types.iSpecSpindleUse Types.defMaxISpec)])] + +masterPoolSizeDefault :: Int +masterPoolSizeDefault = 10 + +-- * Exclusive storage + +-- | Error margin used to compare physical disks +partMargin :: Double +partMargin = 0.01 + +-- | Space reserved when creating instance disks +partReserved :: Double +partReserved = 0.02 + -- * Confd confdProtocolVersion :: Int @@ -3087,6 +3617,33 @@ confdDefaultReqCoverage = 6 confdClientExpireTimeout :: Int confdClientExpireTimeout = 10 +-- | Maximum UDP datagram size. +-- +-- On IPv4: 64K - 20 (ip header size) - 8 (udp header size) = 65507 +-- On IPv6: 64K - 40 (ip6 header size) - 8 (udp header size) = 65487 +-- (assuming we can't use jumbo frames) +-- We just set this to 60K, which should be enough +maxUdpDataSize :: Int +maxUdpDataSize = 61440 + +-- * User-id pool minimum/maximum acceptable user-ids + +uidpoolUidMin :: Int +uidpoolUidMin = 0 + +-- | Assuming 32 bit user-ids +uidpoolUidMax :: Integer +uidpoolUidMax = 2 ^ 32 - 1 + +-- | Name or path of the pgrep command +pgrep :: String +pgrep = "pgrep" + +-- | Name of the node group that gets created at cluster init or +-- upgrade +initialNodeGroupName :: String +initialNodeGroupName = "default" + -- * Possible values for NodeGroup.alloc_policy allocPolicyLastResort :: String @@ -3116,6 +3673,55 @@ qemuimgPath = AutoConf.qemuimgPath htools :: Bool htools = AutoConf.htools +-- | The hail iallocator +iallocHail :: String +iallocHail = "hail" + +-- * Fake opcodes for functions that have hooks attached to them via +-- backend.RunLocalHooks + +fakeOpMasterTurndown :: String +fakeOpMasterTurndown = "OP_CLUSTER_IP_TURNDOWN" + +fakeOpMasterTurnup :: String +fakeOpMasterTurnup = "OP_CLUSTER_IP_TURNUP" + +-- * SSH key types + +sshkDsa :: String +sshkDsa = "dsa" + +sshkRsa :: String +sshkRsa = "rsa" + +sshkAll :: FrozenSet String +sshkAll = ConstantUtils.mkSet [sshkRsa, sshkDsa] + +-- * SSH authorized key types + +sshakDss :: String +sshakDss = "ssh-dss" + +sshakRsa :: String +sshakRsa = "ssh-rsa" + +sshakAll :: FrozenSet String +sshakAll = ConstantUtils.mkSet [sshakDss, sshakRsa] + +-- * SSH setup + +sshsClusterName :: String +sshsClusterName = "cluster_name" + +sshsSshHostKey :: String +sshsSshHostKey = "ssh_host_key" + +sshsSshRootKey :: String +sshsSshRootKey = "ssh_root_key" + +sshsNodeDaemonCertificate :: String +sshsNodeDaemonCertificate = "node_daemon_certificate" + -- * Key files for SSH daemon sshHostDsaPriv :: String @@ -3130,6 +3736,45 @@ sshHostRsaPriv = sshConfigDir ++ "/ssh_host_rsa_key" sshHostRsaPub :: String sshHostRsaPub = sshHostRsaPriv ++ ".pub" +-- * Node daemon setup + +ndsClusterName :: String +ndsClusterName = "cluster_name" + +ndsNodeDaemonCertificate :: String +ndsNodeDaemonCertificate = "node_daemon_certificate" + +ndsSsconf :: String +ndsSsconf = "ssconf" + +ndsStartNodeDaemon :: String +ndsStartNodeDaemon = "start_node_daemon" + +-- * The source reasons for the execution of an OpCode + +opcodeReasonSrcClient :: String +opcodeReasonSrcClient = "gnt:client" + +opcodeReasonSrcNoded :: String +opcodeReasonSrcNoded = "gnt:daemon:noded" + +opcodeReasonSrcOpcode :: String +opcodeReasonSrcOpcode = "gnt:opcode" + +opcodeReasonSrcRlib2 :: String +opcodeReasonSrcRlib2 = "gnt:library:rlib2" + +opcodeReasonSrcUser :: String +opcodeReasonSrcUser = "gnt:user" + +opcodeReasonSources :: FrozenSet String +opcodeReasonSources = + ConstantUtils.mkSet [opcodeReasonSrcClient, + opcodeReasonSrcNoded, + opcodeReasonSrcOpcode, + opcodeReasonSrcRlib2, + opcodeReasonSrcUser] + -- | Path generating random UUID randomUuidFile :: String randomUuidFile = ConstantUtils.randomUuidFile @@ -3154,16 +3799,16 @@ autoRepairTagSuspended = autoRepairTagPrefix ++ "suspend:" -- * Auto-repair levels autoRepairFailover :: String -autoRepairFailover = "failover" +autoRepairFailover = Types.autoRepairTypeToRaw ArFailover autoRepairFixStorage :: String -autoRepairFixStorage = "fix-storage" +autoRepairFixStorage = Types.autoRepairTypeToRaw ArFixStorage autoRepairMigrate :: String -autoRepairMigrate = "migrate" +autoRepairMigrate = Types.autoRepairTypeToRaw ArMigrate autoRepairReinstall :: String -autoRepairReinstall = "reinstall" +autoRepairReinstall = Types.autoRepairTypeToRaw ArReinstall autoRepairAllTypes :: FrozenSet String autoRepairAllTypes = @@ -3175,13 +3820,13 @@ autoRepairAllTypes = -- * Auto-repair results autoRepairEnoperm :: String -autoRepairEnoperm = "enoperm" +autoRepairEnoperm = Types.autoRepairResultToRaw ArEnoperm autoRepairFailure :: String -autoRepairFailure = "failure" +autoRepairFailure = Types.autoRepairResultToRaw ArFailure autoRepairSuccess :: String -autoRepairSuccess = "success" +autoRepairSuccess = Types.autoRepairResultToRaw ArSuccess autoRepairAllResults :: FrozenSet String autoRepairAllResults =