2012/10/5 Iustin Pop <[email protected]>:
> When initially implementing the node query, I thought the 'powered'
> field is a representation of the run-time powered status, which would
> make its query complex.
>
> In reality, it's a simple config query, which we can support
> easily. We also add a small helper, so that we don't hardcode the
> RSUnavail case in many places.
>
> Signed-off-by: Iustin Pop <[email protected]>
> ---
>  htools/Ganeti/Query/Common.hs |    5 +++++
>  htools/Ganeti/Query/Node.hs   |   13 ++++++++++---
>  2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/htools/Ganeti/Query/Common.hs b/htools/Ganeti/Query/Common.hs
> index 0149578..b9029bc 100644
> --- a/htools/Ganeti/Query/Common.hs
> +++ b/htools/Ganeti/Query/Common.hs
> @@ -25,6 +25,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
> MA
>
>  module Ganeti.Query.Common
>    ( rsNoData
> +  , rsUnavail
>    , rsNormal
>    , rsMaybe
>    , rsUnknown
> @@ -66,6 +67,10 @@ vTypeToQFT VTypeInt         = QFTNumber
>  rsNoData :: ResultEntry
>  rsNoData = ResultEntry RSNoData Nothing
>
> +-- | Helper for result for an entity which supports no such field.
> +rsUnavail :: ResultEntry
> +rsUnavail = ResultEntry RSUnavail Nothing
> +
>  -- | Helper to declare a normal result.
>  rsNormal :: (JSON a) => a -> ResultEntry
>  rsNormal a = ResultEntry RSNormal $ Just (showJSON a)
> diff --git a/htools/Ganeti/Query/Node.hs b/htools/Ganeti/Query/Node.hs
> index 01d0a89..163e517 100644
> --- a/htools/Ganeti/Query/Node.hs
> +++ b/htools/Ganeti/Query/Node.hs
> @@ -122,6 +122,15 @@ nodeRoleDoc =
>            "\"" ++ nodeRoleToRaw role ++ "\" for " ++ roleDescription role)
>     (reverse [minBound..maxBound]))
>
> +-- | Get node powered status.
> +getNodePower :: ConfigData -> Node -> ResultEntry
> +getNodePower cfg node =
> +  case getNodeNdParams cfg node of
> +    Nothing -> rsNoData
> +    Just ndp -> if null (ndpOobProgram ndp)
> +                  then rsUnavail
> +                  else rsNormal (nodePowered node)
> +
>  -- | List of all node fields.
>  nodeFields :: FieldList Node NodeRuntime
>  nodeFields =
> @@ -179,11 +188,9 @@ nodeFields =
>                            getNodeInstances cfg . nodeName))
>    , (FieldDefinition "role" "Role" QFTText nodeRoleDoc,
>       FieldConfig ((rsNormal .) . getNodeRole))
> -  -- FIXME: the powered state is special (has an different context,
> -  -- not runtime) in Python
>    , (FieldDefinition "powered" "Powered" QFTBool
>         "Whether node is thought to be powered on",
> -     missingRuntime)
> +     FieldConfig getNodePower)
>    -- FIXME: the two fields below are incomplete in Python, part of the
>    -- non-implemented node resource model; they are declared just for
>    -- parity, but are not functional
> --
> 1.7.10.4
>

LGTM (Sorry for double-posting to you, Iustin ;) )

Reply via email to