On 11/04/2014 09:09 PM, Joshua Hoblitt wrote: > On 11/04/2014 01:04 PM, Andy Parker wrote: >> >> >> It would also provide at lot more confidence that a manifest is >> 4x safe >> if it passes `puppet parser validate`. Without that you'd have >> to worry >> about conditional expressions silently changing their result >> between 3x >> and 4x. >> >> >> The error would have to be at runtime, so puppet parser validate >> would not uncover these kinds of issues (except perhaps in trivial >> cases where it could be done). I have an experiment for creating a >> type inference system, but it is no where near complete enough to be >> a static type analysis system for puppet 4, and even then it would >> have to give up in far too many cases without yet more changes to the >> language. > Your absolutely right but `puppet master --compile localhost > --manifest manifests/role/db.pp` would work. Similarly, rspec-puppet > tests would catch an exception from building the catalog even if there > isn't coverage of the expression result. Perhaps an option could be > added to the parser face to eval expressions? > Actually, I think I'm full of it. It appears that although the master face accepts the --manifest, --modulepath, etc. flags in combination with --compile they don't have any visible effect on the generated catalog (my catalogs are so large it was hard to tell). In any event, the magic behavior I was hallucinating was parsing the supplied manifest and then evaluating it with cached facts (is --compile pulling facts out of inventory?).
Upon further consideration, there are significant problems with trying to implement a generic parse+evaluate checker that can be used in the same manner as `puppet parser validate` on arbitrary DSL code. Defined but not declared classes / defined types may fail due to mandatory params, the use of evaluation order dependent functions (defined(), getparam(), etc.) and the `$caller_module_name != $module_name` idiom are all gotchas. Still, I wonder if it's possible to use the parser to fish out the names of classes without mandatory parameters from of a series of manifests and automagically perform the equivalent of rspec-puppet|`it { should compile }' or 'it { should compile.with_all_deps }`|? I suppose facter would either need to be invoked locally or an external corpus of facts would need to be supplied. Hmm. -Josh -- -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-dev/545A3805.1090006%40hoblitt.com. For more options, visit https://groups.google.com/d/optout.