module Puppet.Init where
import Puppet.Interpreter.Types
import Puppet.NativeTypes
import Puppet.NativeTypes.Helpers
import Puppet.Plugins
import qualified PuppetDB.Query as PDB
import Puppet.Utils
import Data.Aeson
import qualified Data.Map as Map
import qualified Data.Vector as V
import qualified Data.Text as T
data Prefs = Prefs {
manifest :: T.Text,
modules :: T.Text,
templates :: T.Text,
compilepoolsize :: Int,
parsepoolsize :: Int,
erbpoolsize :: Int,
puppetDBquery :: T.Text -> PDB.Query -> IO (Either String Value),
natTypes :: Map.Map PuppetTypeName PuppetTypeMethods
}
genPrefs :: T.Text -> IO Prefs
genPrefs basedir = do
let manifestdir = basedir <> "/manifests"
modulesdir = basedir <> "/modules"
templatedir = basedir <> "/templates"
typenames <- fmap (map takeBaseName) (getFiles modulesdir "lib/puppet/type" ".rb")
let loadedTypes = Map.fromList (map defaulttype typenames)
cstpdb :: T.Text -> PDB.Query -> IO (Either String Value)
cstpdb _ _ = return (Right (Array V.empty))
return $ Prefs manifestdir modulesdir templatedir 1 1 1 cstpdb (Map.union baseNativeTypes loadedTypes)
genFacts :: [(T.Text,T.Text)] -> Facts
genFacts = Map.fromList . concatMap (\(a,b) -> [(a, ResolvedString b), ("::" <> a, ResolvedString b)])