diff --git a/Makefile.am b/Makefile.am index e4c2fa752845cd343c96b7ccf2f2bd1e4ab26538..ea5669dca93e680660a2a973d2da102c34f5aa95 100644 --- a/Makefile.am +++ b/Makefile.am @@ -974,6 +974,7 @@ HS_LIB_SRCS = \ src/Ganeti/Logging/WriterLog.hs \ src/Ganeti/Luxi.hs \ src/Ganeti/MaintD/Server.hs \ + src/Ganeti/MaintD/Utils.hs \ src/Ganeti/Network.hs \ src/Ganeti/Objects.hs \ src/Ganeti/Objects/BitArray.hs \ diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs index 8c98e1f2780d33144c11511aa06870c49d56e5e2..350c445a1d5d91749be25465a10466356dc69550 100644 --- a/src/Ganeti/Constants.hs +++ b/src/Ganeti/Constants.hs @@ -4787,6 +4787,9 @@ _opcodeReasonSrcMasterd = _opcodeReasonSrcDaemon ++ ":masterd" opcodeReasonSrcNoded :: String opcodeReasonSrcNoded = _opcodeReasonSrcDaemon ++ ":noded" +opcodeReasonSrcMaintd :: String +opcodeReasonSrcMaintd = _opcodeReasonSrcDaemon ++ ":maintd" + opcodeReasonSrcOpcode :: String opcodeReasonSrcOpcode = "gnt:opcode" diff --git a/src/Ganeti/MaintD/Utils.hs b/src/Ganeti/MaintD/Utils.hs new file mode 100644 index 0000000000000000000000000000000000000000..1002507aea3dbf4c22c2dd96760a4df4f0183e61 --- /dev/null +++ b/src/Ganeti/MaintD/Utils.hs @@ -0,0 +1,53 @@ +{-| Utility functions for the maintenance daemon. + +-} + +{- + +Copyright (C) 2015 Google Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +-} + +module Ganeti.MaintD.Utils + ( annotateOpCode + ) where + +import Control.Lens.Setter (over) + +import qualified Ganeti.Constants as C +import Ganeti.JQueue (reasonTrailTimestamp) +import Ganeti.JQueue.Objects (Timestamp) +import Ganeti.OpCodes (OpCode, MetaOpCode, wrapOpCode) +import Ganeti.OpCodes.Lens (metaParamsL, opReasonL) + +-- | Wrap an `OpCode` into a `MetaOpCode` and adding an indication +-- that the `OpCode` was submitted by the maintenance daemon. +annotateOpCode :: String -> Timestamp -> OpCode -> MetaOpCode +annotateOpCode reason ts = + over (metaParamsL . opReasonL) + (++ [(C.opcodeReasonSrcMaintd, reason, reasonTrailTimestamp ts)]) + . wrapOpCode