ganeti-3.1: Cluster-based virtualization management software
Safe HaskellSafe-Inferred
LanguageHaskell2010

Ganeti.WConfd.TempRes

Description

Pure functions for manipulating reservations of temporary objects

NOTE: Reservations aren't released specifically, they're just all released at the end of a job. This could be improved in the future.

Synopsis

Documentation

data TempRes j a #

A polymorphic data structure for managing temporary resources assigned to jobs.

Instances

Instances details
(Ord j, Ord a) => Monoid (TempRes j a) # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

mempty :: TempRes j a

mappend :: TempRes j a -> TempRes j a -> TempRes j a

mconcat :: [TempRes j a] -> TempRes j a

(Ord j, Ord a) => Semigroup (TempRes j a) # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

(<>) :: TempRes j a -> TempRes j a -> TempRes j a

sconcat :: NonEmpty (TempRes j a) -> TempRes j a

stimes :: Integral b => b -> TempRes j a -> TempRes j a

(Show j, Show a) => Show (TempRes j a) # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

showsPrec :: Int -> TempRes j a -> ShowS

show :: TempRes j a -> String

showList :: [TempRes j a] -> ShowS

(Eq j, Eq a) => Eq (TempRes j a) # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

(==) :: TempRes j a -> TempRes j a -> Bool

(/=) :: TempRes j a -> TempRes j a -> Bool

(Ord j, Ord a) => Ord (TempRes j a) # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

compare :: TempRes j a -> TempRes j a -> Ordering

(<) :: TempRes j a -> TempRes j a -> Bool

(<=) :: TempRes j a -> TempRes j a -> Bool

(>) :: TempRes j a -> TempRes j a -> Bool

(>=) :: TempRes j a -> TempRes j a -> Bool

max :: TempRes j a -> TempRes j a -> TempRes j a

min :: TempRes j a -> TempRes j a -> TempRes j a

(JSON j, Ord j, JSON a, Ord a) => JSON (TempRes j a) # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

readJSON :: JSValue -> Result (TempRes j a)

showJSON :: TempRes j a -> JSValue

readJSONs :: JSValue -> Result [TempRes j a]

showJSONs :: [TempRes j a] -> JSValue

mkTempRes :: MultiMap j a -> TempRes j a #

Create a temporary reservations from a given multi-map.

data TempResState #

The state of the temporary reservations

Instances

Instances details
Show TempResState # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

showsPrec :: Int -> TempResState -> ShowS

show :: TempResState -> String

showList :: [TempResState] -> ShowS

ArrayObject TempResState # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

toJSArray :: TempResState -> [JSValue] #

fromJSArray :: [JSValue] -> Result TempResState #

DictObject TempResState # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

toDict :: TempResState -> [(String, JSValue)] #

fromDictWKeys :: [(String, JSValue)] -> WriterT UsedKeys Result TempResState #

fromDict :: [(String, JSValue)] -> Result TempResState #

Eq TempResState # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

(==) :: TempResState -> TempResState -> Bool

(/=) :: TempResState -> TempResState -> Bool

JSON TempResState # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

readJSON :: JSValue -> Result TempResState

showJSON :: TempResState -> JSValue

readJSONs :: JSValue -> Result [TempResState]

showJSONs :: [TempResState] -> JSValue

type NodeUUID = ByteString #

type InstanceUUID = ByteString #

type DiskUUID = ByteString #

type NetworkUUID = ByteString #

type DRBDMinor = Int #

type DRBDMap = Map NodeUUID (Map DRBDMinor DiskUUID) #

A map of the usage of DRBD minors

computeDRBDMap :: MonadError GanetiException m => ConfigData -> TempResState -> m DRBDMap #

Compute the map of used DRBD minor/nodes. Report any duplicate entries as an error.

Unlike computeDRBDMap', includes entries for all nodes, even if empty.

computeDRBDMap' :: MonadError GanetiException m => ConfigData -> TempResState -> m DRBDMap' #

Compute the map of used DRBD minor/nodes, including possible duplicates. An error is returned if the configuration isn't consistent (for example if a referenced disk is missing etc.).

allocateDRBDMinor :: (MonadError GanetiException m, MonadState TempResState m) => ConfigData -> DiskUUID -> [NodeUUID] -> m [DRBDMinor] #

releaseDRBDMinors :: MonadState TempResState m => DiskUUID -> m () #

type MAC = String #

generateMAC :: (RandomGen g, MonadError GanetiException m, Functor m) => g -> ClientId -> Maybe NetworkUUID -> ConfigData -> StateT TempResState m MAC #

reserveMAC :: (MonadError GanetiException m, MonadState TempResState m, Functor m) => ClientId -> MAC -> ConfigData -> m () #

generateDRBDSecret :: (RandomGen g, MonadError GanetiException m, Functor m) => g -> ClientId -> ConfigData -> StateT TempResState m DRBDSecret #

reserveLV :: (MonadError GanetiException m, MonadState TempResState m, Functor m) => ClientId -> LogicalVolume -> ConfigData -> m () #

data IPv4ResAction #

Types of IPv4 reservation actions.

Constructors

IPv4Reserve 
IPv4Release 

Instances

Instances details
Bounded IPv4ResAction # 
Instance details

Defined in Ganeti.WConfd.TempRes

Enum IPv4ResAction # 
Instance details

Defined in Ganeti.WConfd.TempRes

Show IPv4ResAction # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

showsPrec :: Int -> IPv4ResAction -> ShowS

show :: IPv4ResAction -> String

showList :: [IPv4ResAction] -> ShowS

Eq IPv4ResAction # 
Instance details

Defined in Ganeti.WConfd.TempRes

Ord IPv4ResAction # 
Instance details

Defined in Ganeti.WConfd.TempRes

JSON IPv4ResAction # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

readJSON :: JSValue -> Result IPv4ResAction

showJSON :: IPv4ResAction -> JSValue

readJSONs :: JSValue -> Result [IPv4ResAction]

showJSONs :: [IPv4ResAction] -> JSValue

data IPv4Reservation #

The values stored in the IPv4 reservation table.

Instances

Instances details
Show IPv4Reservation # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

showsPrec :: Int -> IPv4Reservation -> ShowS

show :: IPv4Reservation -> String

showList :: [IPv4Reservation] -> ShowS

Eq IPv4Reservation # 
Instance details

Defined in Ganeti.WConfd.TempRes

Ord IPv4Reservation # 
Instance details

Defined in Ganeti.WConfd.TempRes

JSON IPv4Reservation # 
Instance details

Defined in Ganeti.WConfd.TempRes

Methods

readJSON :: JSValue -> Result IPv4Reservation

showJSON :: IPv4Reservation -> JSValue

readJSONs :: JSValue -> Result [IPv4Reservation]

showJSONs :: [IPv4Reservation] -> JSValue

reserveIp #

Arguments

:: (MonadError GanetiException m, MonadState TempResState m, Functor m) 
=> ClientId 
-> NetworkUUID 
-> Ip4Address 
-> Bool

whether to check externally reserved IPs

-> ConfigData 
-> m () 

Reserve a given IPv4 address for use by an instance.

releaseIp :: (MonadError GanetiException m, MonadState TempResState m, Functor m) => ClientId -> NetworkUUID -> Ip4Address -> m () #

Give a specific IP address back to an IP pool. The IP address is returned to the IP pool designated by network id and marked as reserved.

generateIp :: (MonadError GanetiException m, MonadState TempResState m, Functor m) => ClientId -> NetworkUUID -> ConfigData -> m Ip4Address #

commitReleaseIp :: (MonadError GanetiException m, Functor m) => NetworkUUID -> Ip4Address -> ConfigData -> m ConfigData #

Immediately release an IP address, without using the reservations pool.

commitReservedIps :: (MonadError GanetiException m, Functor m, MonadLog m) => ClientId -> TempResState -> ConfigData -> m ConfigData #

Commit all reserved/released IP address to an IP pool. The IP addresses are taken from the network's IP pool and marked as reserved/free for instances.

Note that the reservations are kept, they are supposed to be cleaned when a job finishes.

dropAllReservations :: ClientId -> State TempResState () #

Removes all resources reserved by a given job.

If a new reservation resource type is added, it must be added here as well.

isReserved :: (Ord a, Ord j) => a -> TempRes j a -> Bool #

Tests if a given value is reserved for a given job.

reserve :: (MonadError GanetiException m, Show a, Ord a, Ord j) => j -> a -> TempRes j a -> m (TempRes j a) #

Tries to reserve a given value for a given job.

dropReservationsFor :: (Ord a, Ord j) => j -> TempRes j a -> TempRes j a #

reserved :: (Ord a, Ord j) => TempRes j a -> Set a #