module Puppet.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 Control.Lens
data Preferences = Preferences
{ _manifestPath :: FilePath
, _modulesPath :: FilePath
, _templatesPath :: FilePath
, _prefPDB :: PuppetDBAPI
, _natTypes :: Container PuppetTypeMethods
, _prefExtFuncs :: Container ( [PValue] -> InterpreterMonad PValue )
, _hieraPath :: Maybe FilePath
}
makeClassy ''Preferences
genPreferences :: FilePath
-> IO Preferences
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"))