let extract x = tryFromObj ("invalid data for group '" ++ u ++ "'") a x
name <- extract "name"
apol <- extract "alloc_policy"
+ nets <- extract "networks"
ipol <- extract "ipolicy"
tags <- extract "tags"
- return (u, Group.create name u apol ipol tags)
+ return (u, Group.create name u apol nets ipol tags)
-- | Top-level parser.
--
xapol <- convert "alloc_policy" apol
xipol <- convert "ipolicy" ipol
xtags <- convert "tags" tags
- return (xuuid, Group.create xname xuuid xapol xipol xtags)
+ -- TODO: parse networks to which this group is connected
+ return (xuuid, Group.create xname xuuid xapol [] xipol xtags)
parseGroup v = fail ("Invalid group query result: " ++ show v)
apol <- extract "alloc_policy"
ipol <- extract "ipolicy"
tags <- extract "tags"
- return (uuid, Group.create name uuid apol ipol tags)
+ -- TODO: parse networks to which this group is connected
+ return (uuid, Group.create name uuid apol [] ipol tags)
-- | Parse cluster data from the info resource.
parseCluster :: JSObject JSValue -> Result ([String], IPolicy, String)
(fromIntegral disk) disk
(fromIntegral cpu) False spindles grpIndex
) [1..ncount]
+ -- TODO: parse networks to which this group is connected
grp = Group.create (printf "group-%02d" grpIndex)
- (printf "fake-uuid-%02d" grpIndex) apol defIPolicy []
+ (printf "fake-uuid-%02d" grpIndex) apol [] defIPolicy []
return (Group.setIdx grp grpIndex, nodes)
-- | Builds the cluster data from node\/instance files.
loadGroup [name, gid, apol, tags] = do
xapol <- allocPolicyFromRaw apol
let xtags = commaSplit tags
- return (gid, Group.create name gid xapol defIPolicy xtags)
+ -- TODO: parse networks to which this group is connected
+ return (gid, Group.create name gid xapol [] defIPolicy xtags)
loadGroup s = fail $ "Invalid/incomplete group data: '" ++ show s ++ "'"
, uuid :: T.GroupID -- ^ The UUID of the group
, idx :: T.Gdx -- ^ Internal index for book-keeping
, allocPolicy :: T.AllocPolicy -- ^ The allocation policy for this group
+ , networks :: [T.NetworkID] -- ^ The networks connected to this group
, iPolicy :: T.IPolicy -- ^ The instance policy for this group
, allTags :: [String] -- ^ The tags for this group
} deriving (Show, Eq)
-- * Initialization functions
-- | Create a new group.
-create :: String -> T.GroupID -> T.AllocPolicy -> T.IPolicy -> [String] -> Group
-create name_init id_init apol_init ipol_init tags_init =
+create :: String -- ^ The node name
+ -> T.GroupID -- ^ The UUID of the group
+ -> T.AllocPolicy -- ^ The allocation policy for this group
+ -> [T.NetworkID] -- ^ The networks connected to this group
+ -> T.IPolicy -- ^ The instance policy for this group
+ -> [String] -- ^ The tags for this group
+ -> Group
+create name_init id_init apol_init nets_init ipol_init tags_init =
Group { name = name_init
, uuid = id_init
, allocPolicy = apol_init
+ , networks = nets_init
, iPolicy = ipol_init
, allTags = tags_init
, idx = -1
, AllocPolicy(..)
, allocPolicyFromRaw
, allocPolicyToRaw
+ , NetworkID
, InstanceStatus(..)
, instanceStatusFromRaw
, instanceStatusToRaw
-- | Currently used, possibly to allocate, unallocable.
type AllocStats = (AllocInfo, AllocInfo, AllocInfo)
+-- | The network UUID type.
+type NetworkID = String
+
-- | Instance specification type.
$(THH.buildObject "ISpec" "iSpec"
[ THH.renameField "MemorySize" $ THH.simpleField C.ispecMemSize [t| Int |]
],
"spindle-ratio": 32.0
},
+ "networks": [],
"alloc_policy": "preferred",
"tags": [],
"name": "default"
"vcpu-ratio": 4.0
},
"name": "default",
+ "networks": [],
"tags": []
}
},
"vcpu-ratio": 4.0
},
"name": "default",
+ "networks": [],
"tags": []
}
},
"spindle-ratio": 32.0
},
"alloc_policy": "preferred",
+ "networks": [],
"tags": [],
"name": "default"
},
"spindle-ratio": 32.0
},
"alloc_policy": "preferred",
+ "networks": [],
"tags": [],
"name": "empty"
}
"spindle-ratio": 32.0
},
"alloc_policy": "preferred",
+ "networks": [],
"tags": [],
"name": "default"
}
"spindle-ratio": 32.0
},
"alloc_policy": "preferred",
+ "networks": [],
"tags": [],
"name": "default"
}
defGroup :: Group.Group
defGroup = flip Group.setIdx 0 $
Group.create "default" Types.defaultGroupID Types.AllocPreferred
- nullIPolicy []
+ [] nullIPolicy []
-- | Default group, as a (singleton) 'Group.List'.
defGroupList :: Group.List