A      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    Safe-Infered   Safe-Infered Safe-Infered Safe-Infered Safe-Infered2LExpressions will be described with a and b being the first and second field  of the constructor. Not used anymore. False expression 6True expression, this could have been better to use a 1 Resolved resource reference 1 terminal a ? b (b should be a 4)  a ! a a !~ b a =~ b (b should be a ;) 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 ' , 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. 'CThis holds the resource type, name, parameter list and virtuality. ,1This holds the node name and list of statements. G | This holds the variable name and the expression that it represents. 1The 1@ type represents a Puppet value. It is the terminal in a puppet   2'This is special and quite hackish too. 8GReference to a variable. The string contains what is acutally typed in  the manifest. ;IA Puppet Regexp. This is very hackish as it alters the behaviour of some ) functions (such as conditional values). <)An interpolable string, represented as a 1 list. =String literal. >IThis type is used to differenciate the distinct top level types that are  exposed by the DSL. ?EThis 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. @This is for classes. AThis is for defines. BThis is for node entries. EThis function returns the >" of a statement if it is either a 6 node, class or define. It returns Nothing otherwise. E  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEE  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEECD>BA@?E1=<;:98765432-0/.,+*)('&%$#"!   ,+*)('&%$#"! -0/.1 =<;:98765432>BA@?CDE Safe-InferedF:This shows the parsed AST a bit like the original syntax. G*Useful for displaying a map of variables. FGFGFGFG Safe-Infered$H.The monad all the interpreter lives in. It is  with a state. IEThe most important data structure for the interpreter. It stores its internal state. KFThe list of scopes. It works like a stack, and its initial value must  be ["::"] LEThe 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. MDThe list of classes that have already been included, along with the  place where this happened. NFList of defaults to apply. All defaults are applied at the end of the - interpretation of each top level statement. O Stores the value of the current j. PDCurrent position of the evaluated statement. This is mostly used to  give useful error messages. QList 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. REThis is a function that, given the type of a top level statement and  its name, should return it. SList of warnings. TCA bit complicated, this stores the collection functions. These are I functions that determine whether a resource should be collected or not. UGThis stores unresolved relationships, because the original string name  can'*t be resolved. Fieds are [ ( [dstrelations], srcresource, type, pos ) ] V@Function that takes a filename, the current scope and a list of : variables. It returns an error or the computed template. WType 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. aResource name. bResource type. cResource parameters. dResource relations. e1Source code position of the resource definition. fResource relation, made of a {, g pair. g0Resource identifier, made of a type, name pair. hKThis 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. j&Resource ID, used in the Puppet YAML. kResource name. lResource type. mResource parameters. nResource virtuality. o1Source code position of the resource definition. pHThis type holds a value that is either from the ASL or a fully resolved  String. qGThis type holds a value that is either from the ASL or fully resolved. rDThe 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 1s. {Relationship link type. CThis is the potentially unsolved list of resources in the catalog. >HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>{~}|rzyxwvutsqphijklmnogf^_`abcde]\W[ZYXIJKLMNOPQRSTUVHHI JKLMNOPQRSTUVW[ZYX\]^_`abcdefghijklmnopqrzyxwvuts{~}| Safe-InferedThe path to the manifests. The path to the modules. The path to the template. Size of the compiler pool. Size of the parser pool. Generates the  structure from a single path.  genPrefs "/etc/puppet"  Generates  from pairs of strings. $ genFacts [("hostname","test.com")]  Safe-Infered Safe-Infered Safe-Infered LThis is a function type than can be bound. It is the type of all subsequent  validators. HThis helper will validate resources given a list of fields. It will run  and then . LThis validator checks that no unknown parameters have been set (except tag) KThis validator always accept the resources, but add the default parameters  (such as title and name). ;This checks that a given parameter is a string. If it is a x or w" 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 x . If it is a  z it will attempt to parse it. AHelper that takes a list of stuff and will generate a validator.  Safe-Infered Safe-Infered/The map of native types. They are described in Puppet.NativeTypes.Helpers.  Safe-Infered  Safe-InferedThe "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. Name of the node. Facts of this node.  Safe-InferedThis is a parser for Puppet s.   Safe-InferedDHelper function that takes a filename and parses its content in the  monad.   Safe-InferedDThis 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 ]. 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.  Known bugs : ? It might be buggy when top level statements that are not classdefinenodes <are altered, or when files loaded with require are changed. + Exported resources are not yet supported. 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.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWWXYZ[\\]^_`abcdefghijklmnoppqrstuvwxyyz{|}~                 ! " # $ % & ' ( ) * + , - . 0  Q language-puppet-0.1.3Puppet.DSL.ParserPuppet.DSL.TypesPuppet.DSL.PrinterPuppet.Interpreter.Types Puppet.InitPuppet.PrintersPuppet.NativeTypes.HelpersPuppet.NativeTypesPuppet.Interpreter.CatalogPuppet.DSL.Loader Puppet.DaemonErb.Ruby Erb.ParserPaths_language_puppet SafeProcess Erb.ComputePuppet.NativeTypes.FilePuppet.Interpreter.Functions parsec-3.1.3Text.Parsec.Primparse ExpressionErrorBFalseBTrueResolvedResourceReferenceValueConditionalValue NegOperation NotOperationNotRegexpOperationRegexpOperationUnderOperationUnderEqualOperationAboveEqualOperationAboveOperationDifferentOperationEqualOperation OrOperation AndOperationShiftRightOperationShiftLeftOperationMultiplyOperation DivOperationMinusOperation PlusOperationIsElementOperationLookupOperation Statement TopContainerMainFunctionCallDependenceChainVirtualResourceCollectionResourceCollectionDefineDeclarationClassDeclarationConditionalStatementResourceOverrideResourceDefaultResourceRequireImportIncludeVariableAssignmentNode VirtualityExportedVirtualNormal Undefined FunctionCall PuppetHash PuppetArrayResourceReferenceEmptyVariableReferenceIntegerDouble PuppetRegexp InterpolableLiteral TopLevelType TopSpuriousTopClass TopDefineTopNode ParametersconvertTopLevelshowAST showVarMap CatalogMonad ScopeStatecurScope curVariables curClasses curDefaultscurResIdcurPosnestedtoplevelsgetStatementsFunction getWarnings curCollectunresolvedRelscomputeTemplateFunction RelUpdateTypeUPlusUDefault UOverrideUNormal ScopeName FinalCatalog RResourcerridrrnamerrtyperrparams rrelationsrrposRelation ResIdentifier CResourcecridcrnamecrtypecrparams crvirtualitypos GeneralString GeneralValue ResolvedValueResolvedUndefined ResolvedHash ResolvedArrayResolvedRReference ResolvedBool ResolvedIntResolvedRegexpResolvedStringLinkType RRegisterRBeforeRRequireRNotifyFactsCataloggeneralizeValueEgeneralizeValueRgeneralizeStringEgeneralizeStringSPrefsmanifestmodules templatescompilepoolsize parsepoolsizegenPrefsgenFactsshowResshowRRes showFCatalogPuppetTypeMethodspuppetvalidate puppetfieldsPuppetTypeValidatePuppetTypeNamefaketype defaulttypedefaultValidatecheckParameterList addDefaultsstringvalues defaultvalue insertparamintegerparameterFunctions nativeTypes getCatalog exprparsermparser parseFile initDaemon RubyStatementPutsBlockOperation MethodCallObjectdeflexerparensbracesoperatorsymbol reservedOp whiteSpacenaturalOrFloat identifierrubyexpressiontableterm blockinfo objecttermvariablereference rubystatement textblock rubyblock erbparser parseErbFileversion getBinDir getLibDir getDataDir getLibexecDirgetDataFileNamesafeReadProcessTimeoutsafeCreateProcesssafeReadProcessterminateProcessGrouptransformers-0.2.2.0Control.Monad.Trans.ErrorErrorTinitTemplateDaemoncomputeTemplategetTemplateFile nativeFile fqdn_randmysql_passwordregsubstregmatch versioncmpfile