module Puppet.Preferences (
setupPreferences
, HasPreferences(..)
, Preferences(Preferences)
) where
import Puppet.Utils
import Puppet.Interpreter.Types
import Puppet.Plugins
import Puppet.NativeTypes
import Puppet.NativeTypes.Helpers
import Puppet.Stdlib
import PuppetDB.Dummy
import qualified Data.Text as T
import qualified Data.HashMap.Strict as HM
import qualified Data.HashSet as HS
import Control.Lens
data Preferences m = Preferences
{ _manifestPath :: FilePath
, _modulesPath :: FilePath
, _templatesPath :: FilePath
, _prefPDB :: PuppetDBAPI m
, _natTypes :: Container NativeTypeMethods
, _prefExtFuncs :: Container ( [PValue] -> InterpreterMonad PValue )
, _hieraPath :: Maybe FilePath
, _ignoredmodules :: HS.HashSet T.Text
}
makeClassy ''Preferences
genPreferences :: FilePath
-> IO (Preferences IO)
genPreferences basedir = do
let manifestdir = basedir <> "/manifests"
modulesdir = basedir <> "/modules"
templatedir = basedir <> "/templates"
typenames <- fmap (map takeBaseName) (getFiles (T.pack modulesdir) "lib/puppet/type" ".rb")
let loadedTypes = HM.fromList (map defaulttype typenames)
return $ Preferences manifestdir modulesdir templatedir dummyPuppetDB (baseNativeTypes `HM.union` loadedTypes) (stdlibFunctions) (Just (basedir <> "/hiera.yaml")) mempty
setupPreferences :: FilePath -> (Preferences IO -> Preferences IO) -> IO (Preferences IO)
setupPreferences basedir k =
fmap k (genPreferences basedir)