diff --git a/htools/Ganeti/Config.hs b/htools/Ganeti/Config.hs index 04c9d118e0965583412aa242748ee81b4db870c4..226351731666d4ef9bdedc4badcb901f0145630c 100644 --- a/htools/Ganeti/Config.hs +++ b/htools/Ganeti/Config.hs @@ -205,7 +205,7 @@ buildLinkIpInstnameMap cfg = instances in foldl' (\accum (iname, nic) -> let pparams = nicNicparams nic - fparams = fillNICParams defparams pparams + fparams = fillNicParams defparams pparams link = nicpLink fparams in case nicIp nic of Nothing -> accum diff --git a/htools/Ganeti/Objects.hs b/htools/Ganeti/Objects.hs index 581119bfe08cbefbcccbb2ea90ef6ff1ea9a173c..d20edb413d8595a6e4f4081fe1425cce95366269 100644 --- a/htools/Ganeti/Objects.hs +++ b/htools/Ganeti/Objects.hs @@ -29,19 +29,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -} module Ganeti.Objects - ( NICMode(..) - , PartialNICParams(..) - , FilledNICParams(..) - , fillNICParams - , PartialNIC(..) + ( HvParams + , OsParams + , NICMode(..) + , PartialNicParams(..) + , FilledNicParams(..) + , fillNicParams + , PartialNic(..) , DiskMode(..) , DiskType(..) , DiskLogicalId(..) , Disk(..) , DiskTemplate(..) - , PartialBEParams(..) - , FilledBEParams(..) - , fillBEParams + , PartialBeParams(..) + , FilledBeParams(..) + , fillBeParams , Hypervisor(..) , AdminState(..) , adminStateFromRaw @@ -58,10 +60,16 @@ module Ganeti.Objects , FilledIPolicy(..) , PartialIPolicy(..) , fillIPolicy + , DiskParams , NodeGroup(..) , IpFamily(..) , ipFamilyToVersion , fillDict + , ClusterHvParams + , OsHvParams + , ClusterBeParams + , ClusterOsParams + , ClusterNicParams , Cluster(..) , ConfigData(..) ) where @@ -86,6 +94,15 @@ fillDict defaults custom skip_keys = let updated = Map.union custom defaults in foldl' (flip Map.delete) updated skip_keys +-- | The hypervisor parameter type. This is currently a simple map, +-- without type checking on key/value pairs. +type HvParams = Container JSValue + +-- | The OS parameters type. This is, and will remain, a string +-- container, since the keys are dynamically declared by the OSes, and +-- the values are always strings. +type OsParams = Container String + -- * NIC definitions $(declareSADT "NICMode" @@ -94,15 +111,15 @@ $(declareSADT "NICMode" ]) $(makeJSONInstance ''NICMode) -$(buildParam "NIC" "nicp" +$(buildParam "Nic" "nicp" [ simpleField "mode" [t| NICMode |] , simpleField "link" [t| String |] ]) -$(buildObject "PartialNIC" "nic" +$(buildObject "PartialNic" "nic" [ simpleField "mac" [t| String |] , optionalField $ simpleField "ip" [t| String |] - , simpleField "nicparams" [t| PartialNICParams |] + , simpleField "nicparams" [t| PartialNicParams |] ]) -- * Disk definitions @@ -282,7 +299,7 @@ $(declareSADT "AdminState" ]) $(makeJSONInstance ''AdminState) -$(buildParam "BE" "bep" $ +$(buildParam "Be" "bep" $ [ simpleField "minmem" [t| Int |] , simpleField "maxmem" [t| Int |] , simpleField "vcpus" [t| Int |] @@ -293,15 +310,15 @@ $(buildObject "Instance" "inst" $ [ simpleField "name" [t| String |] , simpleField "primary_node" [t| String |] , simpleField "os" [t| String |] - , simpleField "hypervisor" [t| String |] --- , simpleField "hvparams" [t| [(String, String)] |] - , simpleField "beparams" [t| PartialBEParams |] --- , simpleField "osparams" [t| [(String, String)] |] + , simpleField "hypervisor" [t| Hypervisor |] + , simpleField "hvparams" [t| HvParams |] + , simpleField "beparams" [t| PartialBeParams |] + , simpleField "osparams" [t| OsParams |] , simpleField "admin_state" [t| AdminState |] - , simpleField "nics" [t| [PartialNIC] |] + , simpleField "nics" [t| [PartialNic] |] , simpleField "disks" [t| [Disk] |] , simpleField "disk_template" [t| DiskTemplate |] - , optionalField $ simpleField "network_port" [t| Int |] + , optionalField $ simpleField "network_port" [t| Int |] ] ++ timeStampFields ++ uuidFields @@ -407,12 +424,16 @@ $(declareSADT "AllocPolicy" ]) $(makeJSONInstance ''AllocPolicy) +-- | The disk parameters type. +type DiskParams = Container (Container JSValue) + $(buildObject "NodeGroup" "group" $ [ simpleField "name" [t| String |] , defaultField [| [] |] $ simpleField "members" [t| [String] |] , simpleField "ndparams" [t| PartialNDParams |] , simpleField "alloc_policy" [t| AllocPolicy |] , simpleField "ipolicy" [t| PartialIPolicy |] + , simpleField "diskparams" [t| DiskParams |] ] ++ timeStampFields ++ uuidFields @@ -432,43 +453,61 @@ ipFamilyToVersion :: IpFamily -> Int ipFamilyToVersion IpFamilyV4 = C.ip4Version ipFamilyToVersion IpFamilyV6 = C.ip6Version +-- | Cluster HvParams (hvtype to hvparams mapping). +type ClusterHvParams = Container HvParams + +-- | Cluster Os-HvParams (os to hvparams mapping). +type OsHvParams = Container ClusterHvParams + +-- | Cluser BeParams. +type ClusterBeParams = Container FilledBeParams + +-- | Cluster OsParams. +type ClusterOsParams = Container OsParams + +-- | Cluster NicParams. +type ClusterNicParams = Container FilledNicParams + +-- | Cluster UID Pool, list (low, high) UID ranges. +type UidPool = [(Int, Int)] + -- * Cluster definitions $(buildObject "Cluster" "cluster" $ - [ simpleField "rsahostkeypub" [t| String |] - , simpleField "highest_used_port" [t| Int |] - , simpleField "tcpudp_port_pool" [t| [Int] |] - , simpleField "mac_prefix" [t| String |] - , simpleField "volume_group_name" [t| String |] - , simpleField "reserved_lvs" [t| [String] |] - , optionalField $ simpleField "drbd_usermode_helper" [t| String |] --- , simpleField "default_bridge" [t| String |] --- , simpleField "default_hypervisor" [t| String |] - , simpleField "master_node" [t| String |] - , simpleField "master_ip" [t| String |] - , simpleField "master_netdev" [t| String |] - , simpleField "master_netmask" [t| Int |] - , simpleField "use_external_mip_script" [t| Bool |] - , simpleField "cluster_name" [t| String |] - , simpleField "file_storage_dir" [t| String |] - , simpleField "shared_file_storage_dir" [t| String |] - , simpleField "enabled_hypervisors" [t| [String] |] --- , simpleField "hvparams" [t| [(String, [(String, String)])] |] --- , simpleField "os_hvp" [t| [(String, String)] |] - , simpleField "beparams" [t| Container FilledBEParams |] - , simpleField "osparams" [t| Container (Container String) |] - , simpleField "nicparams" [t| Container FilledNICParams |] - , simpleField "ndparams" [t| FilledNDParams |] - , simpleField "candidate_pool_size" [t| Int |] - , simpleField "modify_etc_hosts" [t| Bool |] - , simpleField "modify_ssh_setup" [t| Bool |] - , simpleField "maintain_node_health" [t| Bool |] - , simpleField "uid_pool" [t| [(Int, Int)] |] - , simpleField "default_iallocator" [t| String |] - , simpleField "hidden_os" [t| [String] |] - , simpleField "blacklisted_os" [t| [String] |] - , simpleField "primary_ip_family" [t| IpFamily |] - , simpleField "prealloc_wipe_disks" [t| Bool |] - , simpleField "ipolicy" [t| FilledIPolicy |] + [ simpleField "rsahostkeypub" [t| String |] + , simpleField "highest_used_port" [t| Int |] + , simpleField "tcpudp_port_pool" [t| [Int] |] + , simpleField "mac_prefix" [t| String |] + , simpleField "volume_group_name" [t| String |] + , simpleField "reserved_lvs" [t| [String] |] + , optionalField $ + simpleField "drbd_usermode_helper" [t| String |] + , simpleField "master_node" [t| String |] + , simpleField "master_ip" [t| String |] + , simpleField "master_netdev" [t| String |] + , simpleField "master_netmask" [t| Int |] + , simpleField "use_external_mip_script" [t| Bool |] + , simpleField "cluster_name" [t| String |] + , simpleField "file_storage_dir" [t| String |] + , simpleField "shared_file_storage_dir" [t| String |] + , simpleField "enabled_hypervisors" [t| [String] |] + , simpleField "hvparams" [t| ClusterHvParams |] + , simpleField "os_hvp" [t| OsHvParams |] + , simpleField "beparams" [t| ClusterBeParams |] + , simpleField "osparams" [t| ClusterOsParams |] + , simpleField "nicparams" [t| ClusterNicParams |] + , simpleField "ndparams" [t| FilledNDParams |] + , simpleField "diskparams" [t| DiskParams |] + , simpleField "candidate_pool_size" [t| Int |] + , simpleField "modify_etc_hosts" [t| Bool |] + , simpleField "modify_ssh_setup" [t| Bool |] + , simpleField "maintain_node_health" [t| Bool |] + , simpleField "uid_pool" [t| UidPool |] + , simpleField "default_iallocator" [t| String |] + , simpleField "hidden_os" [t| [String] |] + , simpleField "blacklisted_os" [t| [String] |] + , simpleField "primary_ip_family" [t| IpFamily |] + , simpleField "prealloc_wipe_disks" [t| Bool |] + , simpleField "ipolicy" [t| FilledIPolicy |] ] ++ serialFields ++ timeStampFields