b9-1.0.0: src/lib/B9/B9Config/Podman.hs
module B9.B9Config.Podman
( podmanConfigToCPDocument,
defaultPodmanConfig,
parsePodmanConfig,
PodmanConfig (..),
podmanNetworkId,
podmanCapabilities,
)
where
import B9.B9Config.Container
import Control.Lens (makeLenses)
import Data.ConfigFile.B9Extras
data PodmanConfig
= PodmanConfig
{ _podmanNetworkId :: Maybe String,
_podmanCapabilities :: [ContainerCapability]
}
deriving (Read, Show, Eq)
makeLenses ''PodmanConfig
defaultPodmanConfig :: PodmanConfig
defaultPodmanConfig =
PodmanConfig
Nothing
[ CAP_MKNOD,
CAP_SYS_ADMIN,
CAP_SYS_CHROOT,
CAP_SETGID,
CAP_SETUID,
CAP_NET_BIND_SERVICE,
CAP_SETPCAP,
CAP_SYS_PTRACE,
CAP_SYS_MODULE
]
cfgFileSection :: String
cfgFileSection = "podman"
networkIdK :: String
networkIdK = "network"
podmanConfigToCPDocument ::
PodmanConfig -> CPDocument -> Either CPError CPDocument
podmanConfigToCPDocument c cp = do
cp1 <- addSectionCP cp cfgFileSection
cp2 <-
setShowCP cp1 cfgFileSection networkIdK $
_podmanNetworkId c
containerCapsToCPDocument cp2 cfgFileSection $
_podmanCapabilities c
parsePodmanConfig :: CPDocument -> Either CPError PodmanConfig
parsePodmanConfig cp =
let getr :: (CPGet a) => CPOptionSpec -> Either CPError a
getr = readCP cp cfgFileSection
in PodmanConfig
<$> getr networkIdK
<*> parseContainerCapabilities cp cfgFileSection