.( .      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         !"#$%&'()*+,-% Safe-Inferred!./0123456789:;<=>?@ABCDEFGHIJKLMN!./0123456789:;<=>?@ABCDEFGHIJKLMN./0KJIHGFEDCBA@?>=<;:987654321LNM Safe-InferredOPQRSTUVWXYZ[\]^_`abcdefghOPQRSTUVWXYZ[\]^_`abcdefghOPQRSTUVWXYZ[\]^_`abcdefgh Safe-Inferred ijklmnopqrsjopqrs ijklmnopqrsNonetuvwxyz{|}~ tuvwxyz{|}~ Safe-InferredNone     None9Returns the absolute pathname of the current executable. DNote that for scripts and interactive sessions, this is the path to  the interpreter (e.g. ghci.)  (Stolen from base 4.6.0) Strict readFile See System.FilePath.Posix See System.FilePath.Posix Drop the filename.  ) dropFileName x == fst (splitFileName x) (See System.FilePath.Posix) *Split a filename into directory and file. combine is the inverse.  R Valid x => uncurry (</>) (splitFileName x) == x || fst (splitFileName x) == "./" , Valid x => isValid (fst (splitFileName x)) 6 splitFileName "file/bob.txt" == ("file/", "bob.txt") ( splitFileName "file/" == ("file/", "") & splitFileName "bob" == ("./", "bob") ( Posix: splitFileName "/" == ("/","") * Windows: splitFileName "c:" == ("c:","") (See System.FilePath.Posix) . Safe-Inferred1 LExpressions will be described with a and b being the first and second field  of the constructor. False expression 6True expression, this could have been better to use a : Resolved resource reference : terminal a ? b (b should be a >)  a ! a a !~ b a =~ b (b should be a E) a < b a <= b a >= b a > b a != b a == b a | b a & b a >> b a << b a * b a / b !a - b "a + b #a in b $a[b] %The actual puppet statements &FThis is a magic statement that is used to hold the spurious top level N statements that comes in the same file as the correct top level statement J that is stored in the second field. The first field contains pairs of P filenames and statements. This is designed so that the interpreter can know + whether it has already been evaluated. )Same as * , but for <| |>. *(This is the resource collection syntax (<<| |>> ). It holds K the conditional expression, and an eventual list of overrides. This is P important as the same token conveys two distinct Puppet concepts : resource ' collection and resource overrides. +#The define declaration is like the , except it can't  inherit from anything. ,EThe class declaration holds the class name, the optional name of the O class it inherits from, a list of parameters with optional default values, , and the list of statements it contains. -IThe pairs hold on the left a value that is resolved as a boolean, and on K the right the list of statements that correspond to this. This will be  generated by if/then/0else statement, but also by the case statement. .This works like 0 , but the   holds the resource  name. /?This is a resource default declaration, such as File {owner => 'root'; F }. It holds the resource type and the list of default parameters. 0CThis holds the resource type, name, parameter list and virtuality. 51This holds the node name and list of statements. G | This holds the variable name and the expression that it represents. :The :@ type represents a Puppet value. It is the terminal in a puppet    ;'This is special and quite hackish too. BGReference to a variable. The string contains what is acutally typed in  the manifest. EIA Puppet Regexp. This is very hackish as it alters the behaviour of some ) functions (such as conditional values). F)An interpolable string, represented as a : list. GString literal. HIThis type is used to differenciate the distinct top level types that are  exposed by the DSL. IEThis one is special. It represents top level statements that are not J part of a node, define or class. It is defined as spurious because it is ? not what you are supposed to be. Also the caching system doesn't like  them too much right now. JThis is for classes. KThis is for defines. LThis is for node entries. OThis function returns the H" of a statement if it is either a 6 node, class or define. It returns Nothing otherwise. I  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQG  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQGMNHLKJIO:GFEDCBA@?>=<;6987%543210/.-,+*)('& $#"!  PQ $#"!  %543210/.-,+*)('&6987: GFEDCBA@?>=<;HLKJIMNOPQ Safe-InferredR:This shows the parsed AST a bit like the original syntax. S*Useful for displaying a map of variables. RSRSRS RSNoneaHQuery used for realizing a resources, when its type and title is known. b'Collects all resources of a given type cCollections based on tags. d$Used to emulate collections such as `Type ||prmname == "prmval" ||` TUVWXYZ[\]^_`abcdefgTUVWXYZ[\]^_`abcdefgX`_^]\[ZYTWVUabcdefg TWVUX`_^]\[ZYabcdefgNone1h1This is the map of all edges associated with the .  The key is (source, target). i.The monad all the interpreter lives in. It is  with a state. jEThe most important data structure for the interpreter. It stores its internal state. lFThe list of scopes. It works like a stack, and its initial value must  be [["::"]]8. It is a stack of lists of strings. These lists can be G one element wide (usual case), or two elements (inheritance), so that - variables could be assigned to both scopes. mEThe list of known variables. It should be noted that the interpreter E tries to resolve them as soon as it can, so that it can store their  current scope. nDThe list of classes that have already been included, along with the  place where this happened. oFList of defaults to apply. All defaults are applied at the end of the - interpretation of each top level statement. p Stores the value of the current . qDCurrent position of the evaluated statement. This is mostly used to  give useful error messages. rList of " top levels"1 that have been parsed inside another top level. D Their behaviour is curently non canonical as the scoping rules are  unclear. sEThis is a function that, given the type of a top level statement and  its name, should return it. tList of warnings. uCA bit complicated, this stores the collection functions. These are I functions that determine whether a resource should be collected or not. H It can optionally store overrides, which will be applied in the end on 4 all resources. It can also store a PuppetDB query. vGThis stores unresolved relationships, because the original string name  can'*t be resolved. Fieds are [ ( [dstrelations], srcresource, type, pos ) ] wYFunction that takes either a text content or a filename, the current scope and a list of : variables. It returns an error or the computed template. xBFunction that takes a request type (resources, nodes, facts, ..), 6 a query, and returns a resolved value from puppetDB. y/The Lua state, used for user supplied content. z&The list of registered user functions {The list of native types. |%Horrible hack to kind of support the defined function ~$A data type to hold defaults values Type of update/<override, so they can be applied in the correct order. This M part is probably not behaving like vanilla puppet, as it turns out this are J many fairly acceptable behaviours and the correct one is not documented. ;This is a fully resolved resource that will be used in the .  Resource ID. Resource name. Resource type. Resource parameters. Resource relations. #Resource scope when it was defined 1Source code position of the resource definition. Resource relation, made of a ,  pair. 0Resource identifier, made of a type, name pair. KThis describes the resources before the final resolution. This is required ,as they must somehow be collected while the %s are interpreted, but the necessary  7s are not yet available. This is because in Puppet the %# order should not alter the catalog' s content. OThe relations are not stored here, as they are pushed into a separate internal #data structure by the interpreter. &Resource ID, used in the Puppet YAML. Resource name. Resource type. Resource parameters. Resource virtuality. #Resource scope when it was defined 1Source code position of the resource definition. HThis type holds a value that is either from the ASL or a fully resolved  String. GThis type holds a value that is either from the ASL or fully resolved. DThe list of resolved values that are used to define everything in a   and in the resolved parts of a . They are to be  compared with the s. Relationship link type. CThis is the potentially unsolved list of resources in the catalog. LThis is a function type than can be bound. It is the type of all subsequent  validators. "Types for the native type system. ;Used for puppetDB queries, converting values to CResources #This is the set of meta parameters khijklmnopqrstuvwxyz{|}~fhijklmnopqrstuvwxyz{|}~f~jklmnopqrstuvwxyz{|}ih2hijklmnopqrstuvwxyz{|}~ None HThis helper will validate resources given a list of fields. It will run  and then . WThis validator checks that no unknown parameters have been set (except metaparameters) KThis validator always accept the resources, but add the default parameters  (such as title). 7Helper function that runs a validor on a ResolvedArray ;This checks that a given parameter is a string. If it is a  or " it will convert them to strings. HMakes sure that the parameter, if defined, has a value among this list. 3This fills the default values of unset parameters. ,Checks that a given parameter, if set, is a  . If it is a   it will attempt to parse it.  Copies the name9 value into the parameter if this is not set. It implies  the  validator. &Checks that a given parameter is set. AHelper that takes a list of stuff and will generate a validator. NoneNone  NoneNoneNoneNoneNone None!None  "None         None/The map of native types. They are described in Puppet.NativeTypes.Helpers. #None None NonePP NoneRuns a puppet function in the i monad. It takes a state, Ffunction name and list of arguments. It returns a valid Puppet value. GInitializes the Lua state. The argument is the modules directory. Each / subdirectory will be traversed for functions.  The default location is /lib/puppet/parser/ functions. "Obviously releases the Lua state.   None The path to the manifests. The path to the modules. The path to the template. Size of the compiler pool. Size of the parser pool. Size of the template pool. CA function that takes a query type, a query and might return stuff The list of native types. Generates the  structure from a single path.  genPrefs "/etc/puppet"  Generates  from pairs of strings. $ genFacts [("hostname","test.com")]    $None  !"#$%&'()*+,"%)  !"#$%&'()*+,%None -./012345678 -.012345678 -./012345678 None'This function returns an error, or the  of resources to 8 apply, the map of all edges between resources, and the  of  exported resources. L9:The "get statements"2 function. Given a top level type and its name it , should return the corresponding statement. The " get template"1 function. Given a file name, a scope name and a < list of variables, it should return the computed template. The "puppetDB Rest API"- function. Given the machine fqdn, a request > type (resources, nodes, facts, ..) and a query, it returns a  JSON value, or some error. Name of the node. Facts of this node. PPath to the modules, for user plugins. If set to Nothing, plugins are disabled. The list of native types ;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~L9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NoneNoneNone This is a parser for Puppet  s. D      D  None DHelper function that takes a filename and parses its content in the  monad.     None DThis is a high level function, that will initialize the parsing and 'interpretation infrastructure from the  structure, and will return a %function that will take a node name, # and return either an error or the ], along with the dependency graph and catalog of exported resources. It also return a few IO Hfunctions that can be used in order to query the daemon for statistics, following the format in  Puppet.Stats. PIt will internaly initialize several threads that communicate with channels. It $should scale well, althrough it hasn'*t really been tested yet. It should cache Nthe ASL of every .pp file, and could use a bit of memory. As a comparison, it fits in 60 MB with the author'3s manifests, but really breathes when given 300 MB Qof heap space. In this configuration, even if it spawns a ruby process for every =template evaluation, it is way faster than the puppet stack. QIt is recommended to ask for as many parser and interpreter threads as there are CPUs. ?It can optionnaly talk with PuppetDB, by setting an URL in the  data 1structure. The recommended way to set it to http:localhost:8080 and set a SSH  tunnel :  ( ssh -L 8080:localhost:8080 puppet.host  Known bugs : ? It might be buggy when top level statements that are not classdefinenodes <are altered, or when files loaded with require are changed. B Exported resources are supported through the PuppetDB interface. N The catalog is not computed exactly the same way Puppet does. Take a look at Puppet.Interpreter.Catalog for a list of differences. ) Parsing incompatibilities are listed in Puppet.DSL.Parser. L There might be race conditions because file status are checked before they Mare opened. This means the program might end with an exception when the file (is not existent. This will need fixing. ,   ! NoneEInitializes a daemon made for running tests, using the specific test  puppetDB Retrieves content on disk "Runs a multiline regexp $DLet you sequence several checks with the same input. Useful for the  | checkResource function %FSame thing but without output, even more useful for the checkResource  | function &2Gets a resource parameter value as a (Maybe Text) -#Run tests on several hosts at once + FMight contain the URL of the actual PuppetDB, used for getting facts. Path to the manifests The facter function  !"#$%&'()*+,-hijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-!  !"#$%'&)(*+,-$  !"#$%&'()*+,-&'()*++,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`6abcdefghijklmnopqrsstuvwxyz{y|}~                          !"#$%&'()*+,-./01223456789:;<=>?@ABCDEFGHIJKLM2N346OPQ789:;<=>?@ABCDEFGHIK6RmSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxxyz{|}~6    !!!!!""""""######         $ $$$$$$$$$$$$%%%%%%% %!%"%#%$%% & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A  B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n opqrstSTUXYuZ[v^_wxyz{\|}~language-puppet-0.4.0Puppet.DSL.Parser Puppet.StatsPuppet.DSL.TypesPuppet.DSL.PrinterPuppetDB.QueryPuppet.Interpreter.TypesPuppet.NativeTypes.HelpersPuppet.NativeTypes PuppetDB.RestPuppet.PrintersPuppet.Plugins Puppet.InitPuppet.Interpreter.CatalogPuppetDB.TestDBPuppet.JsonCatalogPuppet.DSL.Loader Puppet.DaemonPuppet.TestingErb.Ruby Erb.ParserPaths_language_puppetPuppet.Interpreter.RubyRandom SafeProcess Puppet.UtilsPuppet.NativeTypes.FilePuppet.NativeTypes.CronPuppet.NativeTypes.ExecPuppet.NativeTypes.GroupPuppet.NativeTypes.HostPuppet.NativeTypes.MountPuppet.NativeTypes.PackagePuppet.NativeTypes.UserPuppet.NativeTypes.ZoneRecordPuppet.NativeTypes.SshSecure Erb.Evaluate Erb.ComputePuppet.Interpreter.Functions parsec-3.1.3Text.Parsec.PrimparseMStats StatsTable StatsPointgetStatsnewStatsmeasuremeasure_getTimetime ExpressionBFalseBTrueResolvedResourceReferenceValueConditionalValue NegOperation NotOperationNotRegexpOperationRegexpOperationUnderOperationUnderEqualOperationAboveEqualOperationAboveOperationDifferentOperationEqualOperation OrOperation AndOperationShiftRightOperationShiftLeftOperationMultiplyOperation DivOperationMinusOperation PlusOperationIsElementOperationLookupOperation Statement TopContainerMainFunctionCallDependenceChainVirtualResourceCollectionResourceCollectionDefineDeclarationClassDeclarationConditionalStatementResourceOverrideResourceDefaultResourceRequireImportIncludeVariableAssignmentNode VirtualityExportedVirtualNormal Undefined PuppetBool FunctionCall PuppetHash PuppetArrayResourceReferenceEmptyVariableReferenceIntegerDouble PuppetRegexp InterpolableLiteral TopLevelType TopSpuriousTopClass TopDefineTopNode ParametersconvertTopLevelcapitalizeResType capitalize'showAST showVarMapQueryTermsTermOperatorONotOOrOAndOUnderEOOverEOUnderOOverOEqual queryRealize collectAll collectTag collectParam showOperator getOperator showQueryEdgeMap CatalogMonad ScopeStatecurScope curVariables curClasses curDefaultscurResIdcurPosnestedtoplevelsgetStatementsFunction getWarnings curCollectunresolvedRelscomputeTemplateFunctionpuppetDBFunctionluaState userFunctions nativeTypesdefinedResourcescurrentDependencyStack ResDefaults ROverride RDefaults RelUpdateTypeUPlusUDefault UOverrideUNormal ScopeName FinalCatalog RResourcerridrrnamerrtyperrparams rrelationsrrscoperrposRelation ResIdentifier CResourcecridcrnamecrtypecrparams crvirtualitycrscopepos GeneralString GeneralValue ResolvedValueResolvedUndefined ResolvedHash ResolvedArrayResolvedRReference ResolvedBoolResolvedDouble ResolvedIntResolvedRegexpResolvedStringLinkInfoLinkType RSubscribeRBeforeRRequireRNotifyFactsCatalogPuppetTypeMethodspuppetvalidate puppetfieldsPuppetTypeValidatePuppetTypeNameparseResourceReference json2puppetrr2jsongeneralizeValueEgeneralizeValueRgeneralizeStringEgeneralizeStringSmetaparametersgetPos modifyScope modifyDepsmodifyVariables modifyClassesincrementResId setStatePos pushWarning pushCollect pushUnresReladdDefinedResource saveVariables showScope throwPosErroraddAlias insertparamfaketype defaulttypedefaultValidatecheckParameterList addDefaultsrunarraystringstringsstring'values defaultvalueintegerintegers integer''nameval addAlias' mandatoryparameterFunctionsfullyQualifiednoTrailingSlashfullyQualifiedsfullyQualified'rarrayipaddr checkipv4inrangebaseNativeTypes runRequest pdbRequest rawRequestshowResshowRRes showFCatalogshowRRef showValuegetFiles puppetFuncinitLuacloseLuaPrefsmanifestmodules templatescompilepoolsize parsepoolsize erbpoolsize puppetDBquerynatTypesgenPrefsgenFacts getCataloginitTestDBFunctionsprref mkJsonCatalog fakeResourceres2JSonrv2json catalog2JSon exprparsermparser parseFile initDaemonTest SingleTest TestFirstOk TestGroup TestMonad TestResult TestsState getCoveragetestFileSourcesrunTests testCatalog testingDaemongetFileContent getResource fileContentcheckResources checkResourceisEnsure isPresentisAbsentegrepsha1sum sequenceChecksequenceCheck_ getParameterM getParameterequalParameterequalOrAbsentParameterequalParameters.> toByteString runFullTests RubyStatementPutsErrorBlockOperation MethodCallObjectArraydeflexerparensbracesoperatorsymbol reservedOp whiteSpacenaturalOrFloat identifierrubyexpressiontableterm scopeLookup blockinfo stringLiteral doubleQuoted singleQuoted objecttermvariablereference rubystatement textblockW textblock rubyblock erbparser parseErbFilecatchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileName RandState_array_left_initf_nextmixbitstwistvalNvalM initGenrand nextStateinitGenrandBigintrandInitrbGenrandInt32 limitedRandsafeReadProcessTimeoutsafeCreateProcesssafeReadProcessterminateProcessGroupmGetExecutablePath readFile' takeBaseName takeDirectory dropFileName splitFileName RegexpSplit UnmatchedMatched c_readlinkreadSymbolicLinktshowdq readDecimaltextElemgetDirectoryContents regexpAll isMatched regexpMatchedregexpUnmatched regexpSplit getMatches$fFunctorRegexpSplitbase Data.Monoid<>mconcatmappendmemptyMonoidgetDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProductgetFirstFirstgetLastLast$fIsStringExpression$fIsStringValuettext showStatement showConditionshowOptionalParametershowExpressionBuildershowExpressionshowAssignmentsshowAssignmenttransformers-0.3.0.0Control.Monad.Trans.ErrorErrorT aeson-0.6.1.0Data.Aeson.Types.Internal $fErrorText$fFromJSONCResource$fFromJSONResolvedValue$fToJSONResolvedValue$fIsStringResolvedValue nativeFile parametersetparameterfunctions validateFile validateModevalidateSourceOrContent nativeCron validateCronvrangevrange'parsevalcheckint checkint' nativeExec validateExecfullyQualifiedOrPath nativeGroup validateGroup nativeHost validateHost checkhostnamecheckhostname'checkhostname'' nativeMount validateMountPackagingFeatures Versionable Upgradeable UninstallableUninstallOptions Purgeable InstallableInstallOptionsHoldable nativePackageisFeatureSupported getFeature checkFeaturesvalidatePackage nativeUser validateUsernativeZoneRecordvalidateZoneRecordvalidateMandatoriesnativeSshSecure userOrTarget keyIfPresentvalidateSshSecure fakeTypes defaultTypes rubyEvaluateevalrubyevalExpression getVariable evalValuea2icommasep commaretsep showuniqueresgetDirContentscheckForSubFiles getLuaFiles loadLuaFile$fStackValueResolvedValueTemplateAnswer TemplateQueryinitTemplateDaemon templateQuerytemplateDaemoncomputeTemplatesaveTmpContentcomputeTemplateWRubymintercgetTemplateFile renderStringtoRubytoRuby' puppetMD5 puppetSHA1 puppetMysql fqdn_randmysql_passwordregsubst versioncmpfile puppetSplitgeneratepdbresourcequeryregmatch qualifiedreadintcomputeCatalogresolveResourcefinalizeResourcecollectionChecksprocessOverrideretrieveRemoteResourcesextractRelationsresolveRelationshipfinalizeRelationsfinalResolutioncreateResourceMap getstatement pushDefaults emptyDefaultsgetCurDefaultspushDependency popDependency pushScopepopScopegetScope addLoaded getNextIdsetPosqualify putVariable setModuleNameaddNestedTopLevel addWarning addCollect addUnresRel checkDefinepartitionParamsRelations checkLoaded resolveParams addParameters applyDefaultsapplyDefaults' mergeParamsevaluateDefinehandleDelayedActions addResourceevaluateStatementsloadClassVariable evaluateClassaddClassDependencytryResolveExpressiontryResolveGeneralValueresolveGeneralValuetryResolveExpressionStringrstringrstringsresolveExpressionresolveExpressionStringtryResolveValuetryResolveValueStringgetRelationParameterType pushRealizeexecuteFunctioncompareExpressioncompareSemiResolvedcompareGeneralValue compareValuescompareRValuestryResolveBooleanresolveBooleanresolveGeneralStringcollectionFunctiongeneralValue2ExpressiongeneralValue2Valueresolved2expressionarithmeticOperationstringTransformExportedResources updatePDBtoBoolevaluateQueryResourcequeryPDBreservedlowerFirstChar puppetBoolhashRefpuppetVariableOrHashLookupmakeLookupOperation identstringpuppetResourceReferencepuppetResourceOverride puppetInclude puppetRequirepuppetQualifiedNamepuppetQualifiedReferencepuppetFunctionCallpuppetArrayRaw puppetArray puppetHashpuppetAssignmentnodeDeclarationpuppetVariablevariableAssignment puppetLiteralpuppetLiteralValue puppetRegexppuppetRegexpExprsingleQuotedStringdoubleQuotedStringpuppetInterpolableStringdoubleQuotedStringContent stringEscapepuppetUndefined puppetNumericpuppetResourceGrouppuppetResourceCollectionresourceArrayDeclarationresourceDeclarationpuppetResourceDefaultspuppetClassParameterpuppetClassParameterspuppetClassDefinition puppetDefinepuppetIfStyleConditionpuppetElseIfConditionpuppetElseConditionpuppetIfCondition puppetCasepuppetRegexpCase defaultCasecondsToExpressioncondToExpressionpuppetCaseConditionpuppetMainFunctionCall puppetChains puppetImport stmtparserParsedCacheResponse CacheUpdated NoCacheEntry RCacheEntry CacheErrorParsedCacheQueryInvalidateCacheFileUpdateParsedData GetParsedData CacheEntry ParserMessage RStatement QStatement DaemonMessageRCatalogQCataloglogDebuglogInfo logWarninglogErrormastergCataloginitParserDaemonextractFStatus getFileInfogetFirstFileInfo checkFileInfocompilefilelistfindFile globImportloadUpdateFilereparseStatements reparseFile loadImport loadRelatedhandlePRequestpmaster getStatementsinitParsedDaemongetParsedInformationupdateParsedInformationinvalidateCachedFile parsedmaster getSourceTestR SingleTestR TestGroupRnewState failedTestsshowResT sourceToPathunsinglerunTest