puppet 3.4.3 → 3.5.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- data/CONTRIBUTING.md +6 -6
- data/Gemfile +22 -16
- data/LICENSE +1 -1
- data/README.md +33 -11
- data/Rakefile +1 -1
- data/conf/auth.conf +4 -0
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/control +6 -6
- data/ext/ips/transforms +1 -1
- data/ext/nagios/naggen +1 -1
- data/ext/project_data.yaml +21 -1
- data/ext/puppet-test +3 -3
- data/ext/redhat/puppet.spec.erb +28 -2
- data/ext/suse/puppet.spec +1 -1
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/service/daemon.rb +99 -20
- data/lib/hiera_puppet.rb +2 -2
- data/lib/puppet.rb +68 -5
- data/lib/puppet/agent.rb +5 -1
- data/lib/puppet/application.rb +20 -11
- data/lib/puppet/application/agent.rb +1 -1
- data/lib/puppet/application/apply.rb +61 -41
- data/lib/puppet/application/cert.rb +3 -3
- data/lib/puppet/application/device.rb +7 -8
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +1 -1
- data/lib/puppet/application/queue.rb +9 -9
- data/lib/puppet/application/resource.rb +2 -2
- data/lib/puppet/bindings.rb +6 -6
- data/lib/puppet/configurer.rb +17 -14
- data/lib/puppet/configurer/fact_handler.rb +1 -1
- data/lib/puppet/confine/any.rb +26 -0
- data/lib/puppet/confine/exists.rb +1 -1
- data/lib/puppet/confiner.rb +1 -0
- data/lib/puppet/context.rb +55 -0
- data/lib/puppet/context/trusted_information.rb +56 -0
- data/lib/puppet/defaults.rb +97 -26
- data/lib/puppet/environments.rb +187 -0
- data/lib/puppet/error.rb +2 -1
- data/lib/puppet/external/pson/common.rb +1 -1
- data/lib/puppet/external/pson/pure/generator.rb +1 -1
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/config.rb +73 -15
- data/lib/puppet/face/file/store.rb +1 -1
- data/lib/puppet/face/help.rb +2 -1
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/help/global.erb +1 -0
- data/lib/puppet/face/help/man.erb +9 -8
- data/lib/puppet/face/module/list.rb +13 -7
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/parser.rb +11 -5
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +2 -2
- data/lib/puppet/feature/libuser.rb +1 -1
- data/lib/puppet/feature/msgpack.rb +2 -0
- data/lib/puppet/feature/rails.rb +2 -2
- data/lib/puppet/file_bucket/dipper.rb +9 -9
- data/lib/puppet/file_bucket/file.rb +9 -5
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +3 -3
- data/lib/puppet/file_serving/content.rb +2 -2
- data/lib/puppet/file_serving/fileset.rb +4 -4
- data/lib/puppet/file_serving/metadata.rb +69 -15
- data/lib/puppet/file_serving/mount/file.rb +1 -1
- data/lib/puppet/file_system.rb +361 -1
- data/lib/puppet/file_system/file18.rb +3 -3
- data/lib/puppet/file_system/file19.rb +3 -3
- data/lib/puppet/file_system/file19windows.rb +18 -23
- data/lib/puppet/file_system/file_impl.rb +145 -0
- data/lib/puppet/file_system/memory_file.rb +23 -9
- data/lib/puppet/file_system/memory_impl.rb +64 -0
- data/lib/puppet/forge.rb +4 -3
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/graph/relationship_graph.rb +7 -7
- data/lib/puppet/indirector.rb +1 -0
- data/lib/puppet/indirector/catalog/compiler.rb +3 -30
- data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
- data/lib/puppet/indirector/catalog/static_compiler.rb +3 -7
- data/lib/puppet/indirector/data_binding/hiera.rb +1 -1
- data/lib/puppet/indirector/direct_file_server.rb +2 -2
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/face.rb +3 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +25 -15
- data/lib/puppet/indirector/file_metadata/file.rb +1 -1
- data/lib/puppet/indirector/file_server.rb +1 -1
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +4 -4
- data/lib/puppet/indirector/key/file.rb +8 -5
- data/lib/puppet/indirector/ldap.rb +1 -1
- data/lib/puppet/indirector/memory.rb +4 -0
- data/lib/puppet/indirector/msgpack.rb +82 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +3 -3
- data/lib/puppet/indirector/node/msgpack.rb +7 -0
- data/lib/puppet/indirector/node/yaml.rb +15 -0
- data/lib/puppet/indirector/queue.rb +3 -2
- data/lib/puppet/indirector/report/msgpack.rb +11 -0
- data/lib/puppet/indirector/request.rb +17 -20
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +3 -13
- data/lib/puppet/indirector/rest.rb +6 -7
- data/lib/puppet/indirector/ssl_file.rb +7 -7
- data/lib/puppet/indirector/yaml.rb +9 -13
- data/lib/puppet/metatype/manager.rb +12 -7
- data/lib/puppet/module.rb +14 -9
- data/lib/puppet/module_tool.rb +21 -26
- data/lib/puppet/module_tool/applications/application.rb +1 -1
- data/lib/puppet/module_tool/applications/generator.rb +2 -1
- data/lib/puppet/module_tool/applications/installer.rb +9 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +10 -7
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +11 -8
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/contents_description.rb +2 -0
- data/lib/puppet/module_tool/dependency.rb +4 -5
- data/lib/puppet/module_tool/errors.rb +2 -0
- data/lib/puppet/module_tool/install_directory.rb +3 -0
- data/lib/puppet/module_tool/metadata.rb +3 -5
- data/lib/puppet/module_tool/modulefile.rb +3 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +6 -1
- data/lib/puppet/module_tool/skeleton.rb +3 -0
- data/lib/puppet/module_tool/tar.rb +3 -0
- data/lib/puppet/network/auth_config_parser.rb +1 -1
- data/lib/puppet/network/authconfig.rb +5 -2
- data/lib/puppet/network/authentication.rb +7 -2
- data/lib/puppet/network/authorization.rb +2 -2
- data/lib/puppet/network/format_support.rb +4 -0
- data/lib/puppet/network/formats.rb +9 -14
- data/lib/puppet/network/http.rb +11 -0
- data/lib/puppet/network/http/api.rb +0 -2
- data/lib/puppet/network/http/api/v1.rb +146 -11
- data/lib/puppet/network/http/api/v2.rb +32 -0
- data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
- data/lib/puppet/network/http/api/v2/environments.rb +21 -0
- data/lib/puppet/network/http/connection.rb +94 -37
- data/lib/puppet/network/http/error.rb +69 -0
- data/lib/puppet/network/http/handler.rb +28 -196
- data/lib/puppet/network/http/issues.rb +9 -0
- data/lib/puppet/network/http/memory_response.rb +13 -0
- data/lib/puppet/network/http/rack/rest.rb +10 -18
- data/lib/puppet/network/http/request.rb +56 -0
- data/lib/puppet/network/http/response.rb +11 -0
- data/lib/puppet/network/http/route.rb +91 -0
- data/lib/puppet/network/http/webrick.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +7 -12
- data/lib/puppet/network/http_pool.rb +3 -3
- data/lib/puppet/network/rights.rb +4 -4
- data/lib/puppet/node.rb +23 -14
- data/lib/puppet/node/environment.rb +149 -125
- data/lib/puppet/node/facts.rb +6 -5
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/block_expression.rb +1 -6
- data/lib/puppet/parser/ast/collexpr.rb +54 -2
- data/lib/puppet/parser/ast/lambda.rb +9 -0
- data/lib/puppet/parser/ast/leaf.rb +15 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
- data/lib/puppet/parser/code_merger.rb +13 -0
- data/lib/puppet/parser/collector.rb +1 -1
- data/lib/puppet/parser/compiler.rb +28 -30
- data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
- data/lib/puppet/parser/e_parser_adapter.rb +0 -1
- data/lib/puppet/parser/files.rb +12 -7
- data/lib/puppet/parser/functions.rb +36 -29
- data/lib/puppet/parser/functions/collect.rb +1 -1
- data/lib/puppet/parser/functions/defined.rb +40 -16
- data/lib/puppet/parser/functions/each.rb +55 -41
- data/lib/puppet/parser/functions/epp.rb +41 -0
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/file.rb +1 -1
- data/lib/puppet/parser/functions/filter.rb +68 -16
- data/lib/puppet/parser/functions/generate.rb +1 -1
- data/lib/puppet/parser/functions/include.rb +3 -2
- data/lib/puppet/parser/functions/inline_epp.rb +79 -0
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +127 -27
- data/lib/puppet/parser/functions/map.rb +64 -12
- data/lib/puppet/parser/functions/reduce.rb +40 -16
- data/lib/puppet/parser/functions/select.rb +1 -1
- data/lib/puppet/parser/functions/slice.rb +42 -23
- data/lib/puppet/parser/grammar.ra +3 -0
- data/lib/puppet/parser/lexer.rb +10 -9
- data/lib/puppet/parser/parser.rb +15 -12
- data/lib/puppet/parser/parser_factory.rb +26 -1
- data/lib/puppet/parser/parser_support.rb +13 -4
- data/lib/puppet/parser/resource.rb +1 -1
- data/lib/puppet/parser/scope.rb +246 -97
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +13 -2
- data/lib/puppet/pops.rb +15 -1
- data/lib/puppet/pops/adapters.rb +64 -32
- data/lib/puppet/pops/binder/binder.rb +122 -150
- data/lib/puppet/pops/binder/binder_issues.rb +1 -21
- data/lib/puppet/pops/binder/bindings_checker.rb +0 -20
- data/lib/puppet/pops/binder/bindings_composer.rb +4 -70
- data/lib/puppet/pops/binder/bindings_factory.rb +16 -58
- data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -3
- data/lib/puppet/pops/binder/bindings_loader.rb +13 -4
- data/lib/puppet/pops/binder/bindings_model.rb +17 -31
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +2 -20
- data/lib/puppet/pops/binder/config/binder_config.rb +8 -40
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +2 -43
- data/lib/puppet/pops/binder/config/issues.rb +1 -21
- data/lib/puppet/pops/binder/injector.rb +86 -7
- data/lib/puppet/pops/binder/injector_entry.rb +6 -2
- data/lib/puppet/pops/binder/key_factory.rb +7 -1
- data/lib/puppet/pops/binder/lookup.rb +191 -0
- data/lib/puppet/pops/binder/producers.rb +5 -5
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +2 -3
- data/lib/puppet/pops/binder/system_bindings.rb +4 -16
- data/lib/puppet/pops/containment.rb +72 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
- data/lib/puppet/pops/evaluator/closure.rb +57 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
- data/lib/puppet/pops/issue_reporter.rb +8 -4
- data/lib/puppet/pops/issues.rb +199 -4
- data/lib/puppet/pops/label_provider.rb +5 -0
- data/lib/puppet/pops/model/ast_transformer.rb +55 -31
- data/lib/puppet/pops/model/ast_tree_dumper.rb +9 -1
- data/lib/puppet/pops/model/factory.rb +265 -111
- data/lib/puppet/pops/model/model.rb +179 -140
- data/lib/puppet/pops/model/model_label_provider.rb +38 -9
- data/lib/puppet/pops/model/model_tree_dumper.rb +38 -13
- data/lib/puppet/pops/parser/code_merger.rb +17 -0
- data/lib/puppet/pops/parser/egrammar.ra +110 -61
- data/lib/puppet/pops/parser/eparser.rb +1415 -1092
- data/lib/puppet/pops/parser/epp_parser.rb +51 -0
- data/lib/puppet/pops/parser/epp_support.rb +247 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +53 -15
- data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
- data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
- data/lib/puppet/pops/parser/lexer.rb +83 -192
- data/lib/puppet/pops/parser/lexer2.rb +684 -0
- data/lib/puppet/pops/parser/lexer_support.rb +107 -0
- data/lib/puppet/pops/parser/locatable.rb +23 -0
- data/lib/puppet/pops/parser/locator.rb +291 -0
- data/lib/puppet/pops/parser/makefile +1 -8
- data/lib/puppet/pops/parser/parser_support.rb +76 -48
- data/lib/puppet/pops/parser/slurp_support.rb +95 -0
- data/lib/puppet/pops/patterns.rb +13 -4
- data/lib/puppet/pops/types/class_loader.rb +2 -2
- data/lib/puppet/pops/types/enumeration.rb +34 -0
- data/lib/puppet/pops/types/type_calculator.rb +983 -58
- data/lib/puppet/pops/types/type_factory.rb +203 -15
- data/lib/puppet/pops/types/type_parser.rb +355 -12
- data/lib/puppet/pops/types/types.rb +314 -24
- data/lib/puppet/pops/utils.rb +23 -7
- data/lib/puppet/pops/validation.rb +14 -8
- data/lib/puppet/pops/validation/checker3_1.rb +17 -12
- data/lib/puppet/pops/validation/checker4_0.rb +514 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
- data/lib/puppet/pops/visitor.rb +146 -4
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider.rb +47 -26
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/augeas/augeas.rb +11 -11
- data/lib/puppet/provider/cron/crontab.rb +10 -1
- data/lib/puppet/provider/exec.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/file/posix.rb +2 -2
- data/lib/puppet/provider/file/windows.rb +15 -9
- data/lib/puppet/provider/group/aix.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +3 -3
- data/lib/puppet/provider/mount.rb +7 -0
- data/lib/puppet/provider/mount/parsed.rb +0 -1
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +3 -3
- data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/appdmg.rb +1 -4
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/blastwave.rb +1 -1
- data/lib/puppet/provider/package/fink.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +3 -3
- data/lib/puppet/provider/package/openbsd.rb +6 -4
- data/lib/puppet/provider/package/pacman.rb +58 -5
- data/lib/puppet/provider/package/pip.rb +2 -2
- data/lib/puppet/provider/package/pkgdmg.rb +25 -10
- data/lib/puppet/provider/package/pkgin.rb +48 -23
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/ports.rb +1 -1
- data/lib/puppet/provider/package/portupgrade.rb +7 -7
- data/lib/puppet/provider/package/rpm.rb +16 -8
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/selboolean/getsetsebool.rb +1 -1
- data/lib/puppet/provider/selmodule/semodule.rb +5 -5
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +3 -3
- data/lib/puppet/provider/service/daemontools.rb +20 -20
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/freebsd.rb +3 -3
- data/lib/puppet/provider/service/gentoo.rb +2 -2
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +4 -4
- data/lib/puppet/provider/service/redhat.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +4 -4
- data/lib/puppet/provider/service/service.rb +3 -4
- data/lib/puppet/provider/service/smf.rb +1 -1
- data/lib/puppet/provider/service/src.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +4 -4
- data/lib/puppet/provider/service/upstart.rb +22 -7
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +3 -3
- data/lib/puppet/provider/user/aix.rb +5 -5
- data/lib/puppet/provider/user/directoryservice.rb +8 -5
- data/lib/puppet/provider/user/ldap.rb +1 -1
- data/lib/puppet/provider/user/pw.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +19 -5
- data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
- data/lib/puppet/provider/zone/solaris.rb +4 -4
- data/lib/puppet/rails.rb +16 -11
- data/lib/puppet/rails/benchmark.rb +1 -1
- data/lib/puppet/rails/resource.rb +5 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/report.rb +1 -1
- data/lib/puppet/relationship.rb +10 -5
- data/lib/puppet/reports/http.rb +8 -2
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/store.rb +3 -3
- data/lib/puppet/reports/tagmail.rb +4 -4
- data/lib/puppet/resource.rb +37 -44
- data/lib/puppet/resource/catalog.rb +18 -20
- data/lib/puppet/resource/status.rb +7 -6
- data/lib/puppet/resource/type.rb +6 -5
- data/lib/puppet/resource/type_collection.rb +2 -2
- data/lib/puppet/run.rb +9 -8
- data/lib/puppet/settings.rb +395 -244
- data/lib/puppet/settings/base_setting.rb +10 -4
- data/lib/puppet/settings/config_file.rb +81 -44
- data/lib/puppet/settings/directory_setting.rb +1 -2
- data/lib/puppet/settings/file_setting.rb +12 -5
- data/lib/puppet/settings/ini_file.rb +171 -0
- data/lib/puppet/ssl/base.rb +4 -0
- data/lib/puppet/ssl/certificate_authority.rb +16 -11
- data/lib/puppet/ssl/certificate_authority/interface.rb +3 -2
- data/lib/puppet/ssl/certificate_factory.rb +50 -5
- data/lib/puppet/ssl/certificate_request.rb +2 -2
- data/lib/puppet/ssl/certificate_request_attributes.rb +1 -1
- data/lib/puppet/ssl/certificate_revocation_list.rb +3 -1
- data/lib/puppet/ssl/host.rb +9 -8
- data/lib/puppet/ssl/inventory.rb +1 -1
- data/lib/puppet/ssl/key.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/status.rb +8 -7
- data/lib/puppet/test/test_helper.rb +35 -4
- data/lib/puppet/transaction/event.rb +6 -5
- data/lib/puppet/transaction/report.rb +10 -10
- data/lib/puppet/type.rb +1 -3
- data/lib/puppet/type/augeas.rb +2 -1
- data/lib/puppet/type/cron.rb +41 -11
- data/lib/puppet/type/exec.rb +5 -5
- data/lib/puppet/type/file.rb +42 -4
- data/lib/puppet/type/file/content.rb +5 -6
- data/lib/puppet/type/file/ensure.rb +3 -3
- data/lib/puppet/type/file/source.rb +12 -6
- data/lib/puppet/type/file/target.rb +5 -5
- data/lib/puppet/type/k5login.rb +4 -4
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/package.rb +79 -3
- data/lib/puppet/type/resources.rb +34 -5
- data/lib/puppet/type/selboolean.rb +1 -1
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -1
- data/lib/puppet/type/sshkey.rb +2 -1
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/user.rb +4 -1
- data/lib/puppet/type/yumrepo.rb +219 -344
- data/lib/puppet/type/zone.rb +15 -5
- data/lib/puppet/util.rb +14 -13
- data/lib/puppet/util/adsi.rb +19 -3
- data/lib/puppet/util/autoload.rb +27 -24
- data/lib/puppet/util/backups.rb +6 -6
- data/lib/puppet/util/checksums.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/colors.rb +4 -12
- data/lib/puppet/util/command_line.rb +2 -2
- data/lib/puppet/util/command_line/trollop.rb +3 -3
- data/lib/puppet/util/docs.rb +2 -2
- data/lib/puppet/util/errors.rb +8 -1
- data/lib/puppet/util/execution.rb +12 -5
- data/lib/puppet/util/filetype.rb +5 -5
- data/lib/puppet/util/inifile.rb +19 -4
- data/lib/puppet/util/instrumentation/data.rb +5 -0
- data/lib/puppet/util/instrumentation/indirection_probe.rb +6 -1
- data/lib/puppet/util/instrumentation/listener.rb +6 -1
- data/lib/puppet/util/json_lockfile.rb +4 -1
- data/lib/puppet/util/ldap/connection.rb +1 -1
- data/lib/puppet/util/lockfile.rb +10 -6
- data/lib/puppet/util/log.rb +6 -1
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/metric.rb +9 -4
- data/lib/puppet/util/nagios_maker.rb +26 -1
- data/lib/puppet/util/network_device.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +1 -1
- data/lib/puppet/util/network_device/transport/ssh.rb +3 -3
- data/lib/puppet/util/plugins.rb +1 -1
- data/lib/puppet/util/profiler.rb +13 -1
- data/lib/puppet/util/pson.rb +1 -1
- data/lib/puppet/util/queue/stomp.rb +2 -2
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +19 -19
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/retryaction.rb +1 -1
- data/lib/puppet/util/selinux.rb +2 -2
- data/lib/puppet/util/storage.rb +3 -3
- data/lib/puppet/util/symbolic_file_mode.rb +1 -1
- data/lib/puppet/util/tag_set.rb +15 -3
- data/lib/puppet/util/tagging.rb +12 -17
- data/lib/puppet/util/watched_file.rb +1 -1
- data/lib/puppet/util/watcher.rb +1 -1
- data/lib/puppet/util/windows/error.rb +2 -2
- data/lib/puppet/util/windows/file.rb +20 -4
- data/lib/puppet/util/windows/registry.rb +2 -2
- data/lib/puppet/vendor/safe_yaml/CHANGES.md +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +1 -21
- data/lib/puppetx/puppet/syntax_checker.rb +1 -1
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +9 -11
- data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
- data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
- data/spec/fixtures/{unit/pops/binder/hiera2/yaml_backend/empty/common.yaml → integration/node/environment/sitedir/03_empty.pp} +0 -0
- data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
- data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
- data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +3 -12
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/{awesome/lib/puppetx/awesome → awesome2/lib/puppetx/awesome2}/echo_scheme_handler.rb +2 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +2 -2
- data/spec/fixtures/unit/provider/service/systemd/{list_units → list_units_services} +0 -1
- data/spec/integration/agent/logging_spec.rb +1 -1
- data/spec/integration/application/apply_spec.rb +78 -3
- data/spec/integration/application/doc_spec.rb +3 -2
- data/spec/integration/configurer_spec.rb +5 -3
- data/spec/integration/directory_environments_spec.rb +50 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +4 -5
- data/spec/integration/network/authconfig_spec.rb +4 -4
- data/spec/integration/network/formats_spec.rb +1 -1
- data/spec/integration/node/environment_spec.rb +67 -15
- data/spec/integration/node/facts_spec.rb +1 -1
- data/spec/integration/node_spec.rb +1 -1
- data/spec/integration/parser/catalog_spec.rb +100 -60
- data/spec/integration/parser/compiler_spec.rb +102 -13
- data/spec/integration/parser/future_compiler_spec.rb +416 -0
- data/spec/integration/parser/parser_spec.rb +44 -105
- data/spec/integration/parser/scope_spec.rb +614 -528
- data/spec/integration/provider/cron/crontab_spec.rb +21 -0
- data/spec/integration/provider/mount_spec.rb +15 -2
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/resource/type_collection_spec.rb +3 -4
- data/spec/integration/ssl/autosign_spec.rb +1 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
- data/spec/integration/ssl/host_spec.rb +1 -1
- data/spec/integration/transaction_spec.rb +13 -13
- data/spec/integration/type/exec_spec.rb +2 -2
- data/spec/integration/type/file_spec.rb +114 -41
- data/spec/integration/type/nagios_spec.rb +80 -0
- data/spec/integration/type/tidy_spec.rb +2 -2
- data/spec/integration/util/execution_spec.rb +17 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +1 -1
- data/spec/integration/util/windows/security_spec.rb +27 -2
- data/spec/lib/matchers/include.rb +27 -0
- data/spec/lib/matchers/include_spec.rb +32 -0
- data/spec/lib/matchers/json.rb +135 -79
- data/spec/lib/matchers/match_tokens2.rb +74 -0
- data/spec/lib/matchers/resource.rb +35 -0
- data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
- data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
- data/spec/lib/puppet/indirector_testing.rb +12 -2
- data/spec/lib/puppet_spec/files.rb +1 -0
- data/spec/lib/puppet_spec/matchers.rb +5 -0
- data/spec/lib/puppet_spec/modules.rb +1 -1
- data/spec/lib/puppet_spec/scope.rb +14 -0
- data/spec/shared_behaviours/file_server_terminus.rb +2 -2
- data/spec/spec_helper.rb +47 -17
- data/spec/unit/agent_spec.rb +8 -1
- data/spec/unit/application/agent_spec.rb +5 -4
- data/spec/unit/application/apply_spec.rb +34 -15
- data/spec/unit/application/device_spec.rb +27 -32
- data/spec/unit/application/doc_spec.rb +4 -4
- data/spec/unit/application/filebucket_spec.rb +1 -1
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +5 -16
- data/spec/unit/configurer_spec.rb +2 -2
- data/spec/unit/confine/exists_spec.rb +5 -5
- data/spec/unit/context/trusted_information_spec.rb +124 -0
- data/spec/unit/context_spec.rb +74 -0
- data/spec/unit/environments_spec.rb +126 -0
- data/spec/unit/face/config_spec.rb +31 -16
- data/spec/unit/face/module/build_spec.rb +1 -0
- data/spec/unit/face/module/install_spec.rb +21 -104
- data/spec/unit/face/module/list_spec.rb +52 -36
- data/spec/unit/face/module/uninstall_spec.rb +18 -25
- data/spec/unit/face/parser_spec.rb +39 -23
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/base_spec.rb +9 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -2
- data/spec/unit/file_serving/configuration_spec.rb +7 -7
- data/spec/unit/file_serving/content_spec.rb +7 -12
- data/spec/unit/file_serving/fileset_spec.rb +49 -53
- data/spec/unit/file_serving/metadata_spec.rb +83 -32
- data/spec/unit/file_serving/mount/file_spec.rb +10 -10
- data/spec/unit/file_system/tempfile_spec.rb +3 -3
- data/spec/unit/file_system_spec.rb +508 -0
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/hiera/scope_spec.rb +6 -2
- data/spec/unit/hiera_puppet_spec.rb +13 -6
- data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +42 -11
- data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
- data/spec/unit/indirector/facts/facter_spec.rb +5 -5
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
- data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
- data/spec/unit/indirector/file_server_spec.rb +4 -4
- data/spec/unit/indirector/json_spec.rb +6 -6
- data/spec/unit/indirector/key/file_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +191 -0
- data/spec/unit/indirector/node/active_record_spec.rb +1 -1
- data/spec/unit/indirector/node/ldap_spec.rb +16 -7
- data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
- data/spec/unit/indirector/node/plain_spec.rb +1 -1
- data/spec/unit/indirector/queue_spec.rb +1 -1
- data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
- data/spec/unit/indirector/request_spec.rb +16 -8
- data/spec/unit/indirector/rest_spec.rb +0 -4
- data/spec/unit/indirector/ssl_file_spec.rb +12 -11
- data/spec/unit/indirector/yaml_spec.rb +4 -4
- data/spec/unit/man_spec.rb +32 -0
- data/spec/unit/module_spec.rb +60 -46
- data/spec/unit/module_tool/applications/checksummer_spec.rb +1 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +53 -16
- data/spec/unit/module_tool/applications/uninstaller_spec.rb +26 -25
- data/spec/unit/module_tool/tar_spec.rb +1 -1
- data/spec/unit/module_tool_spec.rb +17 -90
- data/spec/unit/network/authconfig_spec.rb +3 -4
- data/spec/unit/network/authentication_spec.rb +20 -6
- data/spec/unit/network/authorization_spec.rb +11 -1
- data/spec/unit/network/formats_spec.rb +32 -9
- data/spec/unit/network/http/api/v1_spec.rb +365 -62
- data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
- data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
- data/spec/unit/network/http/api/v2_spec.rb +14 -0
- data/spec/unit/network/http/connection_spec.rb +39 -5
- data/spec/unit/network/http/error_spec.rb +30 -0
- data/spec/unit/network/http/handler_spec.rb +69 -419
- data/spec/unit/network/http/rack/rest_spec.rb +20 -28
- data/spec/unit/network/http/route_spec.rb +75 -0
- data/spec/unit/network/http/webrick/rest_spec.rb +21 -58
- data/spec/unit/network/http_pool_spec.rb +3 -3
- data/spec/unit/network/rights_spec.rb +2 -2
- data/spec/unit/node/environment_spec.rb +108 -89
- data/spec/unit/node/facts_spec.rb +5 -12
- data/spec/unit/node_spec.rb +22 -22
- data/spec/unit/parser/ast/collection_spec.rb +1 -1
- data/spec/unit/parser/ast/leaf_spec.rb +2 -0
- data/spec/unit/parser/ast/resource_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +5 -3
- data/spec/unit/parser/files_spec.rb +40 -50
- data/spec/unit/parser/functions/defined_spec.rb +80 -18
- data/spec/unit/parser/functions/epp_spec.rb +88 -0
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +4 -1
- data/spec/unit/parser/functions/generate_spec.rb +6 -2
- data/spec/unit/parser/functions/hiera_array_spec.rb +5 -2
- data/spec/unit/parser/functions/hiera_hash_spec.rb +4 -1
- data/spec/unit/parser/functions/hiera_include_spec.rb +6 -3
- data/spec/unit/parser/functions/hiera_spec.rb +5 -2
- data/spec/unit/parser/functions/include_spec.rb +0 -1
- data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
- data/spec/unit/parser/functions/lookup_spec.rb +66 -16
- data/spec/unit/parser/functions_spec.rb +25 -91
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/filter_spec.rb +56 -0
- data/spec/unit/parser/methods/map_spec.rb +94 -5
- data/spec/unit/parser/methods/reduce_spec.rb +10 -0
- data/spec/unit/parser/methods/shared.rb +2 -18
- data/spec/unit/parser/methods/slice_spec.rb +39 -1
- data/spec/unit/parser/parser_spec.rb +14 -10
- data/spec/unit/parser/resource_spec.rb +3 -9
- data/spec/unit/parser/scope_spec.rb +81 -78
- data/spec/unit/parser/type_loader_spec.rb +0 -4
- data/spec/unit/pops/benchmark_spec.rb +142 -0
- data/spec/unit/pops/binder/binder_spec.rb +15 -34
- data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -41
- data/spec/unit/pops/binder/bindings_composer_spec.rb +6 -31
- data/spec/unit/pops/binder/config/binder_config_spec.rb +5 -18
- data/spec/unit/pops/binder/injector_spec.rb +76 -81
- data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
- data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
- data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
- data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
- data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
- data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
- data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
- data/spec/unit/pops/factory_spec.rb +6 -29
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/model/ast_transformer_spec.rb +6 -9
- data/spec/unit/pops/model/model_spec.rb +2 -2
- data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +4 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
- data/spec/unit/pops/parser/lexer_spec.rb +25 -86
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +29 -4
- data/spec/unit/pops/parser/parse_calls_spec.rb +10 -6
- data/spec/unit/pops/parser/parse_conditionals_spec.rb +0 -9
- data/spec/unit/pops/parser/parse_containers_spec.rb +43 -12
- data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
- data/spec/unit/pops/parser/parse_resource_spec.rb +14 -0
- data/spec/unit/pops/parser/parser_spec.rb +3 -1
- data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +4 -4
- data/spec/unit/pops/transformer/transform_calls_spec.rb +41 -6
- data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -9
- data/spec/unit/pops/transformer/transform_containers_spec.rb +12 -4
- data/spec/unit/pops/types/enumeration_spec.rb +50 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1171 -196
- data/spec/unit/pops/types/type_factory_spec.rb +108 -4
- data/spec/unit/pops/types/type_parser_spec.rb +114 -10
- data/spec/unit/pops/validator/validator_spec.rb +36 -1
- data/spec/unit/provider/augeas/augeas_spec.rb +39 -16
- data/spec/unit/provider/cron/parsed_spec.rb +27 -31
- data/spec/unit/provider/file/posix_spec.rb +2 -2
- data/spec/unit/provider/group/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/mount_spec.rb +12 -1
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
- data/spec/unit/provider/package/apt_spec.rb +1 -1
- data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
- data/spec/unit/provider/package/gem_spec.rb +12 -0
- data/spec/unit/provider/package/msi_spec.rb +4 -0
- data/spec/unit/provider/package/openbsd_spec.rb +10 -10
- data/spec/unit/provider/package/pacman_spec.rb +36 -7
- data/spec/unit/provider/package/pkgin_spec.rb +57 -55
- data/spec/unit/provider/package/rpm_spec.rb +51 -6
- data/spec/unit/provider/service/base_spec.rb +4 -4
- data/spec/unit/provider/service/daemontools_spec.rb +8 -13
- data/spec/unit/provider/service/freebsd_spec.rb +3 -3
- data/spec/unit/provider/service/gentoo_spec.rb +24 -24
- data/spec/unit/provider/service/init_spec.rb +15 -15
- data/spec/unit/provider/service/openbsd_spec.rb +16 -16
- data/spec/unit/provider/service/openrc_spec.rb +20 -20
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +5 -8
- data/spec/unit/provider/service/src_spec.rb +4 -4
- data/spec/unit/provider/service/systemd_spec.rb +24 -14
- data/spec/unit/provider/service/upstart_spec.rb +12 -4
- data/spec/unit/provider/service/windows_spec.rb +1 -1
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +21 -23
- data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
- data/spec/unit/provider/user/useradd_spec.rb +43 -15
- data/spec/unit/provider/user/windows_adsi_spec.rb +1 -0
- data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
- data/spec/unit/provider/zone/solaris_spec.rb +1 -1
- data/spec/unit/provider_spec.rb +120 -62
- data/spec/unit/rails/host_spec.rb +1 -1
- data/spec/unit/rails/param_value_spec.rb +4 -0
- data/spec/unit/relationship_spec.rb +4 -4
- data/spec/unit/reports/http_spec.rb +14 -3
- data/spec/unit/reports/rrdgraph_spec.rb +0 -1
- data/spec/unit/reports/store_spec.rb +2 -2
- data/spec/unit/resource/catalog_spec.rb +17 -29
- data/spec/unit/resource/status_spec.rb +1 -1
- data/spec/unit/resource/type_collection_spec.rb +28 -47
- data/spec/unit/resource/type_spec.rb +12 -23
- data/spec/unit/resource_spec.rb +54 -93
- data/spec/unit/run_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/config_file_spec.rb +68 -15
- data/spec/unit/settings/file_setting_spec.rb +2 -2
- data/spec/unit/settings/ini_file_spec.rb +184 -0
- data/spec/unit/settings_spec.rb +137 -79
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +3 -1
- data/spec/unit/ssl/certificate_authority_spec.rb +11 -9
- data/spec/unit/ssl/certificate_factory_spec.rb +19 -4
- data/spec/unit/ssl/certificate_request_attributes_spec.rb +1 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +101 -72
- data/spec/unit/ssl/host_spec.rb +8 -20
- data/spec/unit/ssl/inventory_spec.rb +2 -2
- data/spec/unit/ssl/key_spec.rb +4 -4
- data/spec/unit/status_spec.rb +6 -4
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -11
- data/spec/unit/transaction/event_spec.rb +2 -2
- data/spec/unit/transaction/report_spec.rb +24 -15
- data/spec/unit/transaction/resource_harness_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +39 -1
- data/spec/unit/type/file/content_spec.rb +4 -5
- data/spec/unit/type/file/ctime_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +5 -4
- data/spec/unit/type/file/mtime_spec.rb +1 -1
- data/spec/unit/type/file/source_spec.rb +30 -7
- data/spec/unit/type/file_spec.rb +8 -8
- data/spec/unit/type/k5login_spec.rb +3 -3
- data/spec/unit/type/nagios_spec.rb +6 -0
- data/spec/unit/type/package/package_settings_spec.rb +135 -0
- data/spec/unit/type/package_spec.rb +13 -1
- data/spec/unit/type/resources_spec.rb +155 -0
- data/spec/unit/type/service_spec.rb +3 -3
- data/spec/unit/type/ssh_authorized_key_spec.rb +96 -93
- data/spec/unit/type/sshkey_spec.rb +39 -30
- data/spec/unit/type/tidy_spec.rb +19 -12
- data/spec/unit/type/user_spec.rb +47 -2
- data/spec/unit/type/whit_spec.rb +2 -2
- data/spec/unit/type/yumrepo_spec.rb +32 -177
- data/spec/unit/type/zone_spec.rb +2 -2
- data/spec/unit/type_spec.rb +11 -0
- data/spec/unit/util/adsi_spec.rb +48 -1
- data/spec/unit/util/autoload_spec.rb +24 -39
- data/spec/unit/util/backups_spec.rb +25 -28
- data/spec/unit/util/checksums_spec.rb +1 -3
- data/spec/unit/util/colors_spec.rb +14 -0
- data/spec/unit/util/docs_spec.rb +9 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/filetype_spec.rb +7 -7
- data/spec/unit/util/instrumentation/data_spec.rb +3 -1
- data/spec/unit/util/instrumentation/indirection_probe_spec.rb +2 -0
- data/spec/unit/util/instrumentation/listener_spec.rb +3 -2
- data/spec/unit/util/json_lockfile_spec.rb +25 -4
- data/spec/unit/util/lockfile_spec.rb +49 -7
- data/spec/unit/util/log/destinations_spec.rb +1 -0
- data/spec/unit/util/log_spec.rb +1 -1
- data/spec/unit/util/metric_spec.rb +1 -1
- data/spec/unit/util/pidlock_spec.rb +6 -6
- data/spec/unit/util/pson_spec.rb +2 -2
- data/spec/unit/util/rdoc/parser_spec.rb +32 -29
- data/spec/unit/util/resource_template_spec.rb +3 -3
- data/spec/unit/util/selinux_spec.rb +5 -5
- data/spec/unit/util/storage_spec.rb +4 -4
- data/spec/unit/util/tag_set_spec.rb +1 -1
- data/spec/unit/util/watcher_spec.rb +1 -4
- data/spec/unit/util/yaml_spec.rb +2 -2
- data/spec/unit/util_spec.rb +7 -7
- data/tasks/benchmark.rake +0 -1
- data/tasks/parallel.rake +408 -0
- data/tasks/yard.rake +59 -0
- metadata +2889 -2782
- checksums.yaml +0 -7
- data/README_DEVELOPER.md +0 -809
- data/lib/puppet/file_system/file.rb +0 -271
- data/lib/puppet/network/http/rack/httphandler.rb +0 -13
- data/lib/puppet/pops/binder/hiera2.rb +0 -10
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +0 -148
- data/lib/puppet/pops/binder/hiera2/config.rb +0 -69
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +0 -68
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +0 -36
- data/lib/puppet/pops/binder/hiera2/issues.rb +0 -67
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +0 -18
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +0 -21
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +0 -67
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +0 -92
- data/lib/puppet/pops/parser/grammar.ra +0 -746
- data/lib/puppet/provider/port/parsed.rb +0 -173
- data/lib/puppet/type/port.rb +0 -119
- data/lib/puppetx/puppet/hiera2_backend.rb +0 -31
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +0 -18
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +0 -13
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +0 -4
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +0 -11
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +0 -3
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +0 -11
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +0 -9
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +0 -5
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +0 -10
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +0 -7
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +0 -4
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +0 -2
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +0 -8
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +0 -1
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +0 -2
- data/spec/unit/file_system/file_spec.rb +0 -486
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +0 -74
- data/spec/unit/pops/binder/hiera2/config_spec.rb +0 -61
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +0 -33
@@ -0,0 +1,51 @@
|
|
1
|
+
# The EppParser is a specialized Puppet Parser that starts parsing in Epp Text mode
|
2
|
+
class Puppet::Pops::Parser::EppParser < Puppet::Pops::Parser::Parser
|
3
|
+
|
4
|
+
# Initializes the epp parser support by creating a new instance of {Puppet::Pops::Parser::Lexer}
|
5
|
+
# configured to start in Epp Lexing mode.
|
6
|
+
# @return [void]
|
7
|
+
#
|
8
|
+
def initvars
|
9
|
+
self.lexer = Puppet::Pops::Parser::Lexer2.new()# {:mode => :epp})
|
10
|
+
end
|
11
|
+
|
12
|
+
# Parses a file expected to contain epp text/DSL logic.
|
13
|
+
def parse_file(file)
|
14
|
+
unless FileTest.exist?(file)
|
15
|
+
unless file =~ /\.epp$/
|
16
|
+
file = file + ".epp"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
@lexer.file = file
|
20
|
+
_parse()
|
21
|
+
end
|
22
|
+
|
23
|
+
# Performs the parsing and returns the resulting model.
|
24
|
+
# The lexer holds state, and this is setup with {#parse_string}, or {#parse_file}.
|
25
|
+
#
|
26
|
+
# TODO: deal with options containing origin (i.e. parsing a string from externally known location).
|
27
|
+
# TODO: should return the model, not a Hostclass
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
#
|
31
|
+
def _parse()
|
32
|
+
begin
|
33
|
+
@yydebug = false
|
34
|
+
main = yyparse(@lexer,:scan_epp)
|
35
|
+
# #Commented out now because this hides problems in the racc grammar while developing
|
36
|
+
# # TODO include this when test coverage is good enough.
|
37
|
+
# rescue Puppet::ParseError => except
|
38
|
+
# except.line ||= @lexer.line
|
39
|
+
# except.file ||= @lexer.file
|
40
|
+
# except.pos ||= @lexer.pos
|
41
|
+
# raise except
|
42
|
+
# rescue => except
|
43
|
+
# raise Puppet::ParseError.new(except.message, @lexer.file, @lexer.line, @lexer.pos, except)
|
44
|
+
end
|
45
|
+
return main
|
46
|
+
ensure
|
47
|
+
@lexer.clear
|
48
|
+
@namestack = []
|
49
|
+
@definitions = []
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
# This module is an integral part of the Lexer.
|
2
|
+
# It handles scanning of EPP (Embedded Puppet), a form of string/expression interpolation similar to ERB.
|
3
|
+
#
|
4
|
+
require 'strscan'
|
5
|
+
module Puppet::Pops::Parser::EppSupport
|
6
|
+
|
7
|
+
TOKEN_RENDER_STRING = [:RENDER_STRING, nil, 0]
|
8
|
+
TOKEN_RENDER_EXPR = [:RENDER_EXPR, nil, 0]
|
9
|
+
|
10
|
+
# Scans all of the content and returns it in an array
|
11
|
+
# Note that the terminating [false, false] token is included in the result.
|
12
|
+
#
|
13
|
+
def fullscan_epp
|
14
|
+
result = []
|
15
|
+
scan_epp {|token, value| result.push([token, value]) }
|
16
|
+
result
|
17
|
+
end
|
18
|
+
|
19
|
+
# A block must be passed to scan. It will be called with two arguments, a symbol for the token,
|
20
|
+
# and an instance of LexerSupport::TokenValue
|
21
|
+
# PERFORMANCE NOTE: The TokenValue is designed to reduce the amount of garbage / temporary data
|
22
|
+
# and to only convert the lexer's internal tokens on demand. It is slightly more costly to create an
|
23
|
+
# instance of a class defined in Ruby than an Array or Hash, but the gain is much bigger since transformation
|
24
|
+
# logic is avoided for many of its members (most are never used (e.g. line/pos information which is only of
|
25
|
+
# value in general for error messages, and for some expressions (which the lexer does not know about).
|
26
|
+
#
|
27
|
+
def scan_epp
|
28
|
+
# PERFORMANCE note: it is faster to access local variables than instance variables.
|
29
|
+
# This makes a small but notable difference since instance member access is avoided for
|
30
|
+
# every token in the lexed content.
|
31
|
+
#
|
32
|
+
scn = @scanner
|
33
|
+
ctx = @lexing_context
|
34
|
+
queue = @token_queue
|
35
|
+
|
36
|
+
lex_error "Internal Error: No string or file given to lexer to process." unless scn
|
37
|
+
|
38
|
+
ctx[:epp_mode] = :text
|
39
|
+
enqueue_completed([:EPP_START, nil, 0], 0)
|
40
|
+
|
41
|
+
interpolate_epp
|
42
|
+
|
43
|
+
# This is the lexer's main loop
|
44
|
+
until queue.empty? && scn.eos? do
|
45
|
+
if token = queue.shift || lex_token
|
46
|
+
yield [ ctx[:after] = token[0], token[1] ]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
if ctx[:epp_open_position]
|
50
|
+
lex_error("Unbalanced epp tag, reached <eof> without closing tag.", ctx[:epp_position])
|
51
|
+
end
|
52
|
+
|
53
|
+
# Signals end of input
|
54
|
+
yield [false, false]
|
55
|
+
end
|
56
|
+
|
57
|
+
def interpolate_epp(skip_leading=false)
|
58
|
+
scn = @scanner
|
59
|
+
ctx = @lexing_context
|
60
|
+
eppscanner = EppScanner.new(scn)
|
61
|
+
before = scn.pos
|
62
|
+
|
63
|
+
s = eppscanner.scan(skip_leading)
|
64
|
+
|
65
|
+
case eppscanner.mode
|
66
|
+
when :text
|
67
|
+
# Should be at end of scan, or something is terribly wrong
|
68
|
+
lex_error("Internal error: template scanner returns text mode and is not and end of input") unless @scanner.eos?
|
69
|
+
if s
|
70
|
+
# s may be nil if scanned text ends with an epp tag (i.e. no trailing text).
|
71
|
+
enqueue_completed([:RENDER_STRING, s, scn.pos - before], before)
|
72
|
+
end
|
73
|
+
ctx[:epp_open_position] = nil
|
74
|
+
# do nothing else, scanner is at the end
|
75
|
+
|
76
|
+
when :error
|
77
|
+
lex_error(eppscanner.message())
|
78
|
+
|
79
|
+
when :epp
|
80
|
+
# It is meaningless to render empty string segments, and it is harmful to do this at
|
81
|
+
# the start of the scan as it prevents specification of parameters with <%- ($x, $y) -%>
|
82
|
+
#
|
83
|
+
if s && s.length > 0
|
84
|
+
enqueue_completed([:RENDER_STRING, s, scn.pos - before], before)
|
85
|
+
end
|
86
|
+
# switch epp_mode to general (embedded) pp logic (non rendered result)
|
87
|
+
ctx[:epp_mode] = :epp
|
88
|
+
ctx[:epp_open_position] = scn.pos
|
89
|
+
|
90
|
+
when :expr
|
91
|
+
# It is meaningless to render an empty string segment
|
92
|
+
if s && s.length > 0
|
93
|
+
enqueue_completed([:RENDER_STRING, s, scn.pos - before], before)
|
94
|
+
end
|
95
|
+
enqueue_completed(TOKEN_RENDER_EXPR, before)
|
96
|
+
# switch mode to "epp expr interpolation"
|
97
|
+
ctx[:epp_mode] = :expr
|
98
|
+
ctx[:epp_open_position] = scn.pos
|
99
|
+
else
|
100
|
+
lex_error("Internal Error, Unknown mode #{eppscanner.mode} returned by template scanner")
|
101
|
+
end
|
102
|
+
nil
|
103
|
+
end
|
104
|
+
|
105
|
+
# A scanner specialized in processing text with embedded EPP (Embedded Puppet) tags.
|
106
|
+
# The scanner is initialized with a StringScanner which it mutates as scanning takes place.
|
107
|
+
# The intent is to use one instance of EppScanner per wanted scan, and this instance represents
|
108
|
+
# the state after the scan.
|
109
|
+
#
|
110
|
+
# @example Sample usage
|
111
|
+
# a = "some text <% pp code %> some more text"
|
112
|
+
# scan = StringScanner.new(a)
|
113
|
+
# eppscan = EppScanner.new(scan)
|
114
|
+
# str = eppscan.scan
|
115
|
+
# eppscan.mode # => :epp
|
116
|
+
# eppscan.lines # => 0
|
117
|
+
# eppscan
|
118
|
+
#
|
119
|
+
# The scanner supports
|
120
|
+
# * scanning text until <%, <%-, <%=
|
121
|
+
# * while scanning text:
|
122
|
+
# * tokens <%% and %%> are translated to <% and %> respetively and is returned as text.
|
123
|
+
# * tokens <%# and %> (or ending with -%>) and the enclosed text is a comment and is not included in the returned text
|
124
|
+
# * text following a comment that ends with -%> gets trailing whitespace (up to and including a line break) trimmed
|
125
|
+
# and this whitespace is not included in the returned text.
|
126
|
+
# * The continuation {#mode} is set to one of:
|
127
|
+
# * `:epp` - for a <% token
|
128
|
+
# * `:expr` - for a <%= token
|
129
|
+
# * `:text` - when there was no continuation mode (e.g. when input ends with text)
|
130
|
+
# * ':error` - if the tokens are unbalanced (reaching the end without a closing matching token). An error message
|
131
|
+
# is then also available via the method {#message}.
|
132
|
+
#
|
133
|
+
# Note that the intent is to use this specialized scanner to scan the text parts, when continuation mode is `:epp` or `:expr`
|
134
|
+
# the pp lexer should advance scanning (using the string scanner) until it reaches and consumes a `-%>` or '%>´ token. If it
|
135
|
+
# finds a `-%> token it should pass this on as a `skip_leading` parameter when it performs the next {#scan}.
|
136
|
+
#
|
137
|
+
class EppScanner
|
138
|
+
# The original scanner used by the lexer/container using EppScanner
|
139
|
+
attr_reader :scanner
|
140
|
+
|
141
|
+
# The resulting mode after the scan.
|
142
|
+
# The mode is one of `:text` (the initial mode), `:epp` embedded code (no output), `:expr` (embedded
|
143
|
+
# expression), or `:error`
|
144
|
+
#
|
145
|
+
attr_reader :mode
|
146
|
+
|
147
|
+
# An error message if `mode == :error`, `nil` otherwise.
|
148
|
+
attr_reader :message
|
149
|
+
|
150
|
+
# If the first scan should skip leading whitespace (typically detected by the pp lexer when the
|
151
|
+
# pp mode end-token is found (i.e. `-%>`) and then passed on to the scanner.
|
152
|
+
#
|
153
|
+
attr_reader :skip_leading
|
154
|
+
|
155
|
+
# Creates an EppScanner based on a StringScanner that represents the state where EppScanner should start scanning.
|
156
|
+
# The given scanner will be mutated (i.e. position moved) to reflect the EppScanner's end state after a scan.
|
157
|
+
#
|
158
|
+
def initialize(scanner)
|
159
|
+
@scanner = scanner
|
160
|
+
end
|
161
|
+
|
162
|
+
# Scans from the current position in the configured scanner, advances this scanner's position until the end
|
163
|
+
# of the input, or to the first position after a mode switching token (`<%`, `<%-` or `<%=`). Number of processed
|
164
|
+
# lines and continuation mode can be obtained via {#lines}, and {#mode}.
|
165
|
+
#
|
166
|
+
# @return [String, nil] the scanned and processed text, or nil if at the end of the input.
|
167
|
+
#
|
168
|
+
def scan(skip_leading=false)
|
169
|
+
@mode = :text
|
170
|
+
@skip_leading = skip_leading
|
171
|
+
|
172
|
+
return nil if scanner.eos?
|
173
|
+
s = ""
|
174
|
+
until scanner.eos?
|
175
|
+
part = @scanner.scan_until(/(<%)|\z/)
|
176
|
+
if @skip_leading
|
177
|
+
part.gsub!(/^[ \t]*\r?\n?/,'')
|
178
|
+
@skip_leading = false
|
179
|
+
end
|
180
|
+
# The spec for %%> is to transform it into a literal %>. This is done here, as %%> otherwise would go
|
181
|
+
# undetected in text mode. (i.e. it is not really necessary to escape %> with %%> in text mode unless
|
182
|
+
# adding checks stating that a literal %> is illegal in text (unbalanced).
|
183
|
+
#
|
184
|
+
part.gsub!(/%%>/, '%>')
|
185
|
+
s += part
|
186
|
+
case @scanner.peek(1)
|
187
|
+
when ""
|
188
|
+
# at the end
|
189
|
+
# if s ends with <% then this is an error (unbalanced <% %>)
|
190
|
+
if s.end_with? "<%"
|
191
|
+
@mode = :error
|
192
|
+
@message = "Unbalanced embedded expression - opening <% and reaching end of input"
|
193
|
+
else
|
194
|
+
mode = :epp
|
195
|
+
end
|
196
|
+
return s
|
197
|
+
|
198
|
+
when "-"
|
199
|
+
# trim trailing whitespace on same line from accumulated s
|
200
|
+
# return text and signal switch to pp mode
|
201
|
+
@scanner.getch # drop the -
|
202
|
+
s.gsub!(/\r?\n?[ \t]*<%\z/, '')
|
203
|
+
@mode = :epp
|
204
|
+
return s
|
205
|
+
|
206
|
+
when "%"
|
207
|
+
# verbatim text
|
208
|
+
# keep the scanned <%, and continue scanning after skipping one %
|
209
|
+
# (i.e. do nothing here)
|
210
|
+
@scanner.getch # drop the % to get a literal <% in the output
|
211
|
+
|
212
|
+
when "="
|
213
|
+
# expression
|
214
|
+
# return text and signal switch to expression mode
|
215
|
+
# drop the scanned <%, and skip past -%>, or %>, but also skip %%>
|
216
|
+
@scanner.getch # drop the =
|
217
|
+
s.slice!(-2..-1)
|
218
|
+
@mode = :expr
|
219
|
+
return s
|
220
|
+
|
221
|
+
when "#"
|
222
|
+
# template comment
|
223
|
+
# drop the scanned <%, and skip past -%>, or %>, but also skip %%>
|
224
|
+
s.slice!(-2..-1)
|
225
|
+
|
226
|
+
# unless there is an immediate termination i.e. <%#%> scan for the next %> that is not
|
227
|
+
# preceded by a % (i.e. skip %%>)
|
228
|
+
part = scanner.scan_until(/[^%]%>/)
|
229
|
+
unless part
|
230
|
+
@message = "Reaching end after opening <%# without seeing %>"
|
231
|
+
@mode = :error
|
232
|
+
return s
|
233
|
+
end
|
234
|
+
@skip_leading = true if part.end_with?("-%>")
|
235
|
+
# Continue scanning for more text
|
236
|
+
|
237
|
+
else
|
238
|
+
# Switch to pp after having removed the <%
|
239
|
+
s.slice!(-2..-1)
|
240
|
+
@mode = :epp
|
241
|
+
return s
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
#
|
4
4
|
class Puppet::Pops::Parser::EvaluatingParser
|
5
5
|
|
6
|
+
attr_reader :parser
|
7
|
+
|
6
8
|
def initialize()
|
7
9
|
@parser = Puppet::Pops::Parser::Parser.new()
|
8
10
|
end
|
@@ -17,9 +19,10 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
17
19
|
# Also a possible improvement (if the YAML parser returns positions) is to provide correct output of position.
|
18
20
|
#
|
19
21
|
begin
|
20
|
-
assert_and_report(
|
22
|
+
assert_and_report(parser.parse_string(s))
|
21
23
|
rescue Puppet::ParseError => e
|
22
|
-
|
24
|
+
# TODO: This is not quite right, why does not the exception have the correct file?
|
25
|
+
e.file = @file_source unless e.file.is_a?(String) && !e.file.empty?
|
23
26
|
raise e
|
24
27
|
end
|
25
28
|
end
|
@@ -27,7 +30,7 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
27
30
|
def parse_file(file)
|
28
31
|
@file_source = file
|
29
32
|
clear()
|
30
|
-
assert_and_report(
|
33
|
+
assert_and_report(parser.parse_file(file))
|
31
34
|
end
|
32
35
|
|
33
36
|
def evaluate_string(scope, s, file_source='unknown')
|
@@ -49,34 +52,38 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
49
52
|
ast.safeevaluate(scope)
|
50
53
|
end
|
51
54
|
|
55
|
+
def validate(parse_result)
|
56
|
+
resulting_acceptor = acceptor()
|
57
|
+
validator(resulting_acceptor).validate(parse_result)
|
58
|
+
resulting_acceptor
|
59
|
+
end
|
60
|
+
|
52
61
|
def acceptor()
|
53
|
-
|
54
|
-
@acceptor
|
62
|
+
Puppet::Pops::Validation::Acceptor.new
|
55
63
|
end
|
56
64
|
|
57
|
-
def validator()
|
58
|
-
|
65
|
+
def validator(acceptor)
|
66
|
+
Puppet::Pops::Validation::ValidatorFactory_3_1.new().validator(acceptor)
|
59
67
|
end
|
60
68
|
|
61
69
|
def assert_and_report(parse_result)
|
62
70
|
return nil unless parse_result
|
63
|
-
|
64
|
-
|
65
|
-
Puppet::Pops::Adapters::OriginAdapter.adapt(parse_result.model).origin = @file_source
|
71
|
+
if parse_result.source_ref.nil? or parse_result.source_ref == ''
|
72
|
+
parse_result.source_ref = @file_source
|
66
73
|
end
|
67
|
-
|
74
|
+
validation_result = validate(parse_result)
|
68
75
|
|
69
76
|
max_errors = Puppet[:max_errors]
|
70
77
|
max_warnings = Puppet[:max_warnings] + 1
|
71
78
|
max_deprecations = Puppet[:max_deprecations] + 1
|
72
79
|
|
73
80
|
# If there are warnings output them
|
74
|
-
warnings =
|
81
|
+
warnings = validation_result.warnings
|
75
82
|
if warnings.size > 0
|
76
83
|
formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new
|
77
84
|
emitted_w = 0
|
78
85
|
emitted_dw = 0
|
79
|
-
|
86
|
+
validation_result.warnings.each {|w|
|
80
87
|
if w.severity == :deprecation
|
81
88
|
# Do *not* call Puppet.deprecation_warning it is for internal deprecation, not
|
82
89
|
# deprecation of constructs in manifests! (It is not designed for that purpose even if
|
@@ -93,12 +100,11 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
93
100
|
end
|
94
101
|
|
95
102
|
# If there were errors, report the first found. Use a puppet style formatter.
|
96
|
-
errors =
|
103
|
+
errors = validation_result.errors
|
97
104
|
if errors.size > 0
|
98
105
|
formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new
|
99
106
|
if errors.size == 1 || max_errors <= 1
|
100
107
|
# raise immediately
|
101
|
-
require 'debugger'; debugger
|
102
108
|
raise Puppet::ParseError.new(formatter.format(errors[0]))
|
103
109
|
end
|
104
110
|
emitted = 0
|
@@ -128,6 +134,8 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
128
134
|
# The method makes an exception for the two character sequences \$ and \s. They
|
129
135
|
# will not be escaped since they have a special meaning in puppet syntax.
|
130
136
|
#
|
137
|
+
# TODO: Handle \uXXXX characters ??
|
138
|
+
#
|
131
139
|
# @param x [String] The string to quote and "unparse"
|
132
140
|
# @return [String] The quoted string
|
133
141
|
#
|
@@ -159,4 +167,34 @@ class Puppet::Pops::Parser::EvaluatingParser
|
|
159
167
|
escaped << p unless p.nil?
|
160
168
|
escaped << '"'
|
161
169
|
end
|
170
|
+
|
171
|
+
# This is a temporary solution to making it possible to use the new evaluator. The main class
|
172
|
+
# will eventually have this behavior instead of using transformation to Puppet 3.x AST
|
173
|
+
class Transitional < Puppet::Pops::Parser::EvaluatingParser
|
174
|
+
|
175
|
+
def evaluator
|
176
|
+
@@evaluator ||= Puppet::Pops::Evaluator::EvaluatorImpl.new()
|
177
|
+
@@evaluator
|
178
|
+
end
|
179
|
+
|
180
|
+
def evaluate(scope, model)
|
181
|
+
return nil unless model
|
182
|
+
evaluator.evaluate(model, scope)
|
183
|
+
end
|
184
|
+
|
185
|
+
def validator(acceptor)
|
186
|
+
Puppet::Pops::Validation::ValidatorFactory_4_0.new().validator(acceptor)
|
187
|
+
end
|
188
|
+
|
189
|
+
# Create a closure that can be called in the given scope
|
190
|
+
def closure(model, scope)
|
191
|
+
Puppet::Pops::Evaluator::Closure.new(evaluator, model, scope)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
class EvaluatingEppParser < Transitional
|
196
|
+
def initialize()
|
197
|
+
@parser = Puppet::Pops::Parser::EppParser.new()
|
198
|
+
end
|
199
|
+
end
|
162
200
|
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Puppet::Pops::Parser::HeredocSupport
|
2
|
+
|
3
|
+
# Pattern for heredoc `@(endtag[:syntax][/escapes])
|
4
|
+
# Produces groups for endtag (group 1), syntax (group 2), and escapes (group 3)
|
5
|
+
#
|
6
|
+
PATTERN_HEREDOC = %r{@\(([^:/\r\n\)]+)(?::[:blank:]*([a-z][a-zA-Z0-9_+]+)[:blank:]*)?(?:/((?:\w|[$])*)[:blank:]*)?\)}
|
7
|
+
|
8
|
+
|
9
|
+
def heredoc
|
10
|
+
scn = @scanner
|
11
|
+
ctx = @lexing_context
|
12
|
+
locator = @locator
|
13
|
+
before = scn.pos
|
14
|
+
|
15
|
+
# scanner is at position before @(
|
16
|
+
# find end of the heredoc spec
|
17
|
+
str = scn.scan_until(/\)/) || lexer.lex_error("Unclosed parenthesis after '@(' followed by '#{followed_by}'")
|
18
|
+
pos_after_heredoc = scn.pos
|
19
|
+
|
20
|
+
# Note: allows '+' as separator in syntax, but this needs validation as empty segments are not allowed
|
21
|
+
unless md = str.match(PATTERN_HEREDOC)
|
22
|
+
lex_error("Invalid syntax in heredoc expected @(endtag[:syntax][/escapes])")
|
23
|
+
end
|
24
|
+
endtag = md[1]
|
25
|
+
syntax = md[2] || ''
|
26
|
+
escapes = md[3]
|
27
|
+
|
28
|
+
endtag.strip!
|
29
|
+
|
30
|
+
# Is this a dq string style heredoc? (endtag enclosed in "")
|
31
|
+
if endtag =~ /^"(.*)"$/
|
32
|
+
dqstring_style = true
|
33
|
+
endtag = $1.strip
|
34
|
+
end
|
35
|
+
|
36
|
+
lexer.lex_error("Missing endtag in heredoc") unless endtag.length >= 1
|
37
|
+
|
38
|
+
resulting_escapes = []
|
39
|
+
if escapes
|
40
|
+
escapes = "trnsuL$" if escapes.length < 1
|
41
|
+
|
42
|
+
escapes = escapes.split('')
|
43
|
+
unless escapes.length == escapes.uniq.length
|
44
|
+
lex_error("An escape char for @() may only appear once. Got '#{escapes.join(', ')}")
|
45
|
+
end
|
46
|
+
resulting_escapes = ["\\"]
|
47
|
+
escapes.each do |e|
|
48
|
+
case e
|
49
|
+
when "t", "r", "n", "s", "u", "$"
|
50
|
+
resulting_escapes << e
|
51
|
+
when "L"
|
52
|
+
resulting_escapes += ["\n", "\r\n"]
|
53
|
+
else
|
54
|
+
lex_error("Invalid heredoc escape char. Only t, r, n, s, u, L, $ allowed. Got '#{e}'")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Produce a heredoc token to make the syntax available to the grammar
|
60
|
+
enqueue_completed([:HEREDOC, syntax, pos_after_heredoc - before], before)
|
61
|
+
|
62
|
+
# If this is the second or subsequent heredoc on the line, the lexing context's :newline_jump contains
|
63
|
+
# the position after the \n where the next heredoc text should scan. If not set, this is the first
|
64
|
+
# and it should start scanning after the first found \n (or if not found == error).
|
65
|
+
|
66
|
+
if ctx[:newline_jump]
|
67
|
+
scn.pos = lexing_context[:newline_jump]
|
68
|
+
else
|
69
|
+
scn.scan_until(/\n/) || lex_error("Heredoc without any following lines of text")
|
70
|
+
end
|
71
|
+
# offset 0 for the heredoc, and its line number
|
72
|
+
heredoc_offset = scn.pos
|
73
|
+
heredoc_line = locator.line_for_offset(heredoc_offset)-1
|
74
|
+
|
75
|
+
# Compute message to emit if there is no end (to make it refer to the opening heredoc position).
|
76
|
+
eof_message = positioned_message("Heredoc without end-tagged line")
|
77
|
+
|
78
|
+
# Text from this position (+ lexing contexts offset for any preceding heredoc) is heredoc until a line
|
79
|
+
# that terminates the heredoc is found.
|
80
|
+
|
81
|
+
# (Endline in EBNF form): WS* ('|' WS*)? ('-' WS*)? endtag WS* \r? (\n|$)
|
82
|
+
endline_pattern = /([[:blank:]]*)(?:([|])[[:blank:]]*)?(?:(\-)[[:blank:]]*)?#{Regexp.escape(endtag)}[[:blank:]]*\r?(?:\n|\z)/
|
83
|
+
lines = []
|
84
|
+
while !scn.eos? do
|
85
|
+
one_line = scn.scan_until(/(?:\n|\z)/) || lexer.lex_error_without_pos(eof_message)
|
86
|
+
if md = one_line.match(endline_pattern)
|
87
|
+
leading = md[1]
|
88
|
+
has_margin = md[2] == '|'
|
89
|
+
remove_break = md[3] == '-'
|
90
|
+
# Record position where next heredoc (from same line as current @()) should start scanning for content
|
91
|
+
ctx[:newline_jump] = scn.pos
|
92
|
+
|
93
|
+
|
94
|
+
# Process captured lines - remove leading, and trailing newline
|
95
|
+
str = heredoc_text(lines, leading, has_margin, remove_break)
|
96
|
+
|
97
|
+
# Use a new lexer instance configured with a sub-locator to enable correct positioning
|
98
|
+
sublexer = self.class.new()
|
99
|
+
locator = Puppet::Pops::Parser::Locator::SubLocator.sub_locator(str,
|
100
|
+
locator.file, heredoc_line, heredoc_offset, leading.length())
|
101
|
+
|
102
|
+
# Emit a token that provides the grammar with location information about the lines on which the heredoc
|
103
|
+
# content is based.
|
104
|
+
enqueue([:SUBLOCATE,
|
105
|
+
Puppet::Pops::Parser::LexerSupport::TokenValue.new([:SUBLOCATE,
|
106
|
+
lines, lines.reduce(0) {|size, s| size + s.length} ],
|
107
|
+
heredoc_offset,
|
108
|
+
locator)])
|
109
|
+
|
110
|
+
sublexer.lex_unquoted_string(str, locator, resulting_escapes, dqstring_style)
|
111
|
+
sublexer.interpolate_uq_to(self)
|
112
|
+
# Continue scan after @(...)
|
113
|
+
scn.pos = pos_after_heredoc
|
114
|
+
return
|
115
|
+
else
|
116
|
+
lines << one_line
|
117
|
+
end
|
118
|
+
end
|
119
|
+
lex_error_without_pos(eof_message)
|
120
|
+
end
|
121
|
+
|
122
|
+
# Produces the heredoc text string given the individual (unprocessed) lines as an array.
|
123
|
+
# @param lines [Array<String>] unprocessed lines of text in the heredoc w/o terminating line
|
124
|
+
# @param leading [String] the leading text up (up to pipe or other terminating char)
|
125
|
+
# @param has_margin [Boolean] if the left margin should be adjusted as indicated by `leading`
|
126
|
+
# @param remove_break [Boolean] if the line break (\r?\n) at the end of the last line should be removed or not
|
127
|
+
#
|
128
|
+
def heredoc_text(lines, leading, has_margin, remove_break)
|
129
|
+
if has_margin
|
130
|
+
leading_pattern = /^#{Regexp.escape(leading)}/
|
131
|
+
lines = lines.collect {|s| s.gsub(leading_pattern, '') }
|
132
|
+
end
|
133
|
+
result = lines.join('')
|
134
|
+
result.gsub!(/\r?\n$/, '') if remove_break
|
135
|
+
result
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
end
|