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
@@ -84,7 +84,7 @@ class Puppet::Parser::TemplateWrapper
|
|
84
84
|
|
85
85
|
# @api private
|
86
86
|
def file=(filename)
|
87
|
-
unless @__file__ = Puppet::Parser::Files.find_template(filename, scope.compiler.environment
|
87
|
+
unless @__file__ = Puppet::Parser::Files.find_template(filename, scope.compiler.environment)
|
88
88
|
raise Puppet::ParseError, "Could not find template '#{filename}'"
|
89
89
|
end
|
90
90
|
|
@@ -5,7 +5,6 @@ require 'puppet/parser/parser_factory'
|
|
5
5
|
|
6
6
|
class Puppet::Parser::TypeLoader
|
7
7
|
extend Forwardable
|
8
|
-
include Puppet::Node::Environment::Helper
|
9
8
|
|
10
9
|
# Import manifest files that match a given file glob pattern.
|
11
10
|
#
|
@@ -50,6 +49,18 @@ class Puppet::Parser::TypeLoader
|
|
50
49
|
self.environment = env
|
51
50
|
end
|
52
51
|
|
52
|
+
def environment
|
53
|
+
@environment
|
54
|
+
end
|
55
|
+
|
56
|
+
def environment=(env)
|
57
|
+
if env.is_a?(String) or env.is_a?(Symbol)
|
58
|
+
@environment = Puppet.lookup(:environments).get(env)
|
59
|
+
else
|
60
|
+
@environment = env
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
53
64
|
# Try to load the object with the given fully qualified name.
|
54
65
|
def try_load_fqname(type, fqname)
|
55
66
|
return nil if fqname == "" # special-case main.
|
@@ -101,7 +112,7 @@ class Puppet::Parser::TypeLoader
|
|
101
112
|
# The use case is that parsing for the purpose of searching for information
|
102
113
|
# should not abort. There is currently one such use case in indirector/resourcetype/parser
|
103
114
|
#
|
104
|
-
|
115
|
+
if Puppet.lookup(:squelch_parse_errors) {|| false }
|
105
116
|
begin
|
106
117
|
loaded_asts << parse_file(file)
|
107
118
|
rescue => e
|
data/lib/puppet/pops.rb
CHANGED
@@ -25,6 +25,7 @@ module Puppet
|
|
25
25
|
require 'puppet/pops/types/type_factory'
|
26
26
|
require 'puppet/pops/types/type_parser'
|
27
27
|
require 'puppet/pops/types/class_loader'
|
28
|
+
require 'puppet/pops/types/enumeration'
|
28
29
|
end
|
29
30
|
|
30
31
|
module Model
|
@@ -54,11 +55,11 @@ module Puppet
|
|
54
55
|
require 'puppet/pops/binder/injector_entry'
|
55
56
|
require 'puppet/pops/binder/key_factory'
|
56
57
|
require 'puppet/pops/binder/injector'
|
57
|
-
require 'puppet/pops/binder/hiera2'
|
58
58
|
require 'puppet/pops/binder/bindings_composer'
|
59
59
|
require 'puppet/pops/binder/bindings_model_dumper'
|
60
60
|
require 'puppet/pops/binder/system_bindings'
|
61
61
|
require 'puppet/pops/binder/bindings_loader'
|
62
|
+
require 'puppet/pops/binder/lookup'
|
62
63
|
|
63
64
|
module Config
|
64
65
|
require 'puppet/pops/binder/config/binder_config'
|
@@ -71,15 +72,28 @@ module Puppet
|
|
71
72
|
module Parser
|
72
73
|
require 'puppet/pops/parser/eparser'
|
73
74
|
require 'puppet/pops/parser/parser_support'
|
75
|
+
require 'puppet/pops/parser/locator'
|
76
|
+
require 'puppet/pops/parser/locatable'
|
74
77
|
require 'puppet/pops/parser/lexer'
|
78
|
+
require 'puppet/pops/parser/lexer2'
|
75
79
|
require 'puppet/pops/parser/evaluating_parser'
|
80
|
+
require 'puppet/pops/parser/epp_parser'
|
76
81
|
end
|
77
82
|
|
78
83
|
module Validation
|
79
84
|
require 'puppet/pops/validation/checker3_1'
|
80
85
|
require 'puppet/pops/validation/validator_factory_3_1'
|
86
|
+
require 'puppet/pops/validation/checker4_0'
|
87
|
+
require 'puppet/pops/validation/validator_factory_4_0'
|
88
|
+
end
|
89
|
+
|
90
|
+
module Evaluator
|
91
|
+
require 'puppet/pops/evaluator/runtime3_support'
|
92
|
+
require 'puppet/pops/evaluator/evaluator_impl'
|
93
|
+
require 'puppet/pops/evaluator/epp_evaluator'
|
81
94
|
end
|
82
95
|
end
|
83
96
|
|
97
|
+
require 'puppet/parser/ast/pops_bridge'
|
84
98
|
require 'puppet/bindings'
|
85
99
|
end
|
data/lib/puppet/pops/adapters.rb
CHANGED
@@ -10,46 +10,78 @@ module Puppet::Pops::Adapters
|
|
10
10
|
attr_accessor :documentation
|
11
11
|
end
|
12
12
|
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# Instances of SourcePosAdapter is then used on other objects in a model to
|
16
|
-
# describe their relative position versus the origin.
|
17
|
-
#
|
18
|
-
# @see Puppet::Pops::Utils#find_adapter
|
19
|
-
#
|
20
|
-
class OriginAdapter < Puppet::Pops::Adaptable::Adapter
|
21
|
-
# @return [String] the origin of the adapted (usually a filename)
|
22
|
-
attr_accessor :origin
|
23
|
-
end
|
24
|
-
|
25
|
-
# A SourcePosAdapter describes a position relative to an origin. (Typically an {OriginAdapter} is
|
26
|
-
# associated with the root of a model. This origin has a URI to the resource, and a line number.
|
27
|
-
# The offset in the SourcePosAdapter is then relative to this origin.
|
28
|
-
# (This somewhat complex structure makes it possible to correctly refer to a source position
|
13
|
+
# A SourcePosAdapter holds a reference to a *Positioned* object (object that has offset and length).
|
14
|
+
# This somewhat complex structure makes it possible to correctly refer to a source position
|
29
15
|
# in source that is embedded in some resource; a parser only sees the embedded snippet of source text
|
30
|
-
# and does not know where it was embedded
|
16
|
+
# and does not know where it was embedded. It also enables lazy evaluation of source positions (they are
|
17
|
+
# rarely needed - typically just when there is an error to report.
|
31
18
|
#
|
32
|
-
# @
|
19
|
+
# @note It is relatively expensive to compute line and position on line - it is not something that
|
20
|
+
# should be done for every token or model object.
|
21
|
+
#
|
22
|
+
# @see Puppet::Pops::Utils#find_adapter, Puppet::Pops::Utils#find_closest_positioned
|
33
23
|
#
|
34
24
|
class SourcePosAdapter < Puppet::Pops::Adaptable::Adapter
|
35
|
-
|
36
|
-
|
25
|
+
attr_accessor :locator
|
26
|
+
|
27
|
+
def self.create_adapter(o)
|
28
|
+
new(o)
|
29
|
+
end
|
30
|
+
|
31
|
+
def initialize(o)
|
32
|
+
@adapted = o
|
33
|
+
end
|
34
|
+
|
35
|
+
def locator
|
36
|
+
# The locator is always the parent locator, all positioned objects are positioned within their
|
37
|
+
# parent. If a positioned object also has a locator that locator is for its children!
|
38
|
+
#
|
39
|
+
@locator ||= find_locator(@adapted.eContainer)
|
40
|
+
end
|
41
|
+
|
42
|
+
def find_locator(o)
|
43
|
+
if o.nil?
|
44
|
+
raise ArgumentError, "InternalError: SourcePosAdapter for something that has no locator among parents"
|
45
|
+
end
|
46
|
+
case
|
47
|
+
when o.is_a?(Puppet::Pops::Model::Program)
|
48
|
+
return o.locator
|
49
|
+
# TODO_HEREDOC use case of SubLocator instead
|
50
|
+
when o.is_a?(Puppet::Pops::Model::SubLocatedExpression) && !(found_locator = o.locator).nil?
|
51
|
+
return found_locator
|
52
|
+
when adapter = self.class.get(o)
|
53
|
+
return adapter.locator
|
54
|
+
else
|
55
|
+
find_locator(o.eContainer)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
private :find_locator
|
37
59
|
|
38
|
-
|
39
|
-
|
60
|
+
def offset
|
61
|
+
@adapted.offset
|
62
|
+
end
|
40
63
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
attr_accessor :offset
|
64
|
+
def length
|
65
|
+
@adapted.length
|
66
|
+
end
|
45
67
|
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
|
68
|
+
# Produces the line number for the given offset.
|
69
|
+
# @note This is an expensive operation
|
70
|
+
#
|
71
|
+
def line
|
72
|
+
locator.line_for_offset(offset)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Produces the position on the line of the given offset.
|
76
|
+
# @note This is an expensive operation
|
77
|
+
#
|
78
|
+
def pos
|
79
|
+
locator.pos_on_line(offset)
|
80
|
+
end
|
50
81
|
|
51
|
-
|
52
|
-
|
82
|
+
# Extracts the text represented by this source position (the string is obtained from the locator)
|
83
|
+
def extract_text
|
84
|
+
locator.string.slice(offset, length)
|
53
85
|
end
|
54
86
|
end
|
55
87
|
|
@@ -1,107 +1,64 @@
|
|
1
1
|
# The Binder is responsible for processing layered bindings that can be used to setup an Injector.
|
2
2
|
#
|
3
|
-
# An instance should be created
|
4
|
-
#
|
5
|
-
# effective categories (filtering out everything that does not apply, handle overrides, abstract entries etc.).
|
3
|
+
# An instance should be created and a call to {#define_layers} should be made which will process the layered bindings
|
4
|
+
# (handle overrides, abstract entries etc.).
|
6
5
|
# The constructed hash with `key => InjectorEntry` mappings is obtained as {#injector_entries}, and is used to initialize an
|
7
6
|
# {Puppet::Pops::Binder::Injector Injector}.
|
8
7
|
#
|
9
8
|
# @api public
|
10
9
|
#
|
11
10
|
class Puppet::Pops::Binder::Binder
|
12
|
-
|
11
|
+
|
13
12
|
# @api private
|
14
|
-
|
13
|
+
attr_reader :injector_entries
|
15
14
|
|
16
15
|
# @api private
|
17
|
-
|
16
|
+
attr :id_index
|
18
17
|
|
19
18
|
# @api private
|
20
|
-
attr_reader :
|
19
|
+
attr_reader :key_factory
|
21
20
|
|
21
|
+
# A parent Binder or nil
|
22
22
|
# @api private
|
23
|
-
attr_reader :
|
23
|
+
attr_reader :parent
|
24
24
|
|
25
|
+
# The next anonymous key to use
|
25
26
|
# @api private
|
26
|
-
attr_reader :
|
27
|
+
attr_reader :anonymous_key
|
27
28
|
|
28
|
-
#
|
29
|
-
# @api
|
30
|
-
|
31
|
-
attr_reader :configured
|
29
|
+
# This binder's precedence
|
30
|
+
# @api private
|
31
|
+
attr_reader :binder_precedence
|
32
32
|
|
33
33
|
# @api public
|
34
|
-
def initialize
|
35
|
-
@
|
36
|
-
@
|
34
|
+
def initialize(layered_bindings, parent_binder=nil)
|
35
|
+
@parent = parent_binder
|
36
|
+
@id_index = Hash.new() { |k, v| [] }
|
37
|
+
|
37
38
|
@key_factory = Puppet::Pops::Binder::KeyFactory.new()
|
38
39
|
|
39
40
|
# Resulting hash of all key -> binding
|
40
41
|
@injector_entries = {}
|
41
42
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
def configured?()
|
51
|
-
configured()
|
52
|
-
end
|
53
|
-
|
54
|
-
# Defines the effective categories in precedence order (highest precedence first).
|
55
|
-
# The 'common' (lowest precedence) category should not be included in the list.
|
56
|
-
# A sanity check is made that there are no more than 1000 categorizations (which is pretty wild).
|
57
|
-
#
|
58
|
-
# The term 'effective categories' refers to the evaluated list of tuples (categorization, category-value) represented with
|
59
|
-
# an instance of Puppet::Pops::Binder::Bindings::EffectiveCategories.
|
60
|
-
#
|
61
|
-
# @param effective_categories [Puppet::Pops::Binder::Bindings::EffectiveCategories] effective categories (i.e. with evaluated values)
|
62
|
-
# @raise ArgumentError if this binder is already configured
|
63
|
-
# @raise ArgumentError if the argument is not an EffectiveCategories
|
64
|
-
# @raise ArgumentError if there is an attempt to redefine a category (non unique, or 'common').
|
65
|
-
# @return [Puppet::Pops::Binder::Binder] self
|
66
|
-
# @api public
|
67
|
-
#
|
68
|
-
def define_categories(effective_categories)
|
69
|
-
raise ArgumentError, "This categories are already defined. Cannot redefine." unless @category_precedences.empty?
|
70
|
-
|
71
|
-
# Note: a model instance is used since a Hash does not have a defined order in all Rubies.
|
72
|
-
unless effective_categories.is_a?(Puppet::Pops::Binder::Bindings::EffectiveCategories)
|
73
|
-
raise ArgumentError, "Expected Puppet::Pops::Binder::Bindings::EffectiveCategories, but got a: #{effective_categories.class}"
|
74
|
-
end
|
75
|
-
categories = effective_categories.categories
|
76
|
-
raise ArgumentError, "Category limit (#{PRECEDENCE_MAX}) exceeded" unless categories.size <= PRECEDENCE_MAX
|
77
|
-
|
78
|
-
# Automatically add the 'common' category with lowest precedence
|
79
|
-
@category_precedences['common'] = 0
|
80
|
-
|
81
|
-
# if categories contains "common", it should be last - simply drop it if present
|
82
|
-
if last = categories[-1]
|
83
|
-
if last.categorization == 'common'
|
84
|
-
categories.delete_at(-1)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
# Process the given categories (highest precedence is first in the list)
|
88
|
-
categories.each_with_index do |c, index|
|
89
|
-
cname = c.categorization
|
90
|
-
raise ArgumentError, "Attempt to redefine categorization: #{cname}" if @category_precedences[cname]
|
91
|
-
@category_precedences[cname] = PRECEDENCE_MAX - index
|
92
|
-
@category_values[cname] = c.value
|
43
|
+
if @parent.nil?
|
44
|
+
@anonymous_key = 0
|
45
|
+
@binder_precedence = 0
|
46
|
+
else
|
47
|
+
# First anonymous key is the parent's next (non incremented key). (The parent can not change, it is
|
48
|
+
# the final, free key).
|
49
|
+
@anonymous_key = @parent.anonymous_key
|
50
|
+
@binder_precedence = @parent.binder_precedence + 1
|
93
51
|
end
|
94
|
-
|
52
|
+
define_layers(layered_bindings)
|
95
53
|
end
|
96
54
|
|
97
55
|
# Binds layers from highest to lowest as defined by the given LayeredBindings.
|
98
56
|
# @note
|
99
|
-
#
|
57
|
+
# The model should have been
|
100
58
|
# validated to get better error messages if the model is invalid. This implementation expects the model
|
101
59
|
# to be valid, and any errors raised will be more technical runtime errors.
|
102
60
|
#
|
103
61
|
# @param layered_bindings [Puppet::Pops::Binder::Bindings::LayeredBindings] the named and ordered layers
|
104
|
-
# @raise ArgumentError if categories have not been defined
|
105
62
|
# @raise ArgumentError if this binder is already configured
|
106
63
|
# @raise ArgumentError if bindings with unresolved 'override' surfaces as an effective binding
|
107
64
|
# @raise ArgumentError if the given argument has the wrong type, or if model is invalid in some way
|
@@ -109,27 +66,76 @@ class Puppet::Pops::Binder::Binder
|
|
109
66
|
# @api public
|
110
67
|
#
|
111
68
|
def define_layers(layered_bindings)
|
112
|
-
raise ArgumentError, "This binder is already configured. Cannot redefine its content." if configured?()
|
113
69
|
|
114
|
-
raise ArgumentError, "Categories must be defined first" if @category_precedences.empty?
|
115
70
|
LayerProcessor.new(self, key_factory).bind(layered_bindings)
|
116
|
-
|
117
|
-
|
71
|
+
contribution_keys = []
|
72
|
+
# make one pass over entries to collect contributions, and check overrides
|
73
|
+
injector_entries.each do |k,v|
|
74
|
+
if key_factory.is_contributions_key?(k)
|
75
|
+
contribution_keys << [k,v]
|
76
|
+
elsif !v.is_resolved?()
|
118
77
|
raise ArgumentError, "Binding with unresolved 'override' detected: #{self.class.format_binding(v.binding)}}"
|
78
|
+
else
|
79
|
+
# if binding has an id, add it to the index
|
80
|
+
add_id_to_index(v.binding)
|
119
81
|
end
|
120
82
|
end
|
121
|
-
|
122
|
-
|
123
|
-
|
83
|
+
|
84
|
+
# If a lower level binder has contributions for a key also contributed to in this binder
|
85
|
+
# they must included in the higher shadowing contribution.
|
86
|
+
# If a contribution is made to an id that is defined in a parent
|
87
|
+
# contribute to an id that is defined in a lower binder, it must be promoted to this binder (copied) or
|
88
|
+
# there is risk of making the lower level injector dirty.
|
89
|
+
#
|
90
|
+
contribution_keys.each do |kv|
|
91
|
+
parent_contribution = lookup_in_parent(kv[0])
|
92
|
+
next unless parent_contribution
|
93
|
+
injector_entries[kv[0]] = kv[1] + parent_contributions
|
94
|
+
|
95
|
+
# key the multibind_id from the contribution key
|
96
|
+
multibind_id = key_factory.multibind_contribution_key_to_id(kv[0])
|
97
|
+
promote_matching_bindings(self, @parent, multibind_id)
|
98
|
+
end
|
124
99
|
end
|
100
|
+
private :define_layers
|
125
101
|
|
126
102
|
# @api private
|
127
103
|
def next_anonymous_key
|
128
|
-
tmp = @
|
129
|
-
@
|
104
|
+
tmp = @anonymous_key
|
105
|
+
@anonymous_key += 1
|
130
106
|
tmp
|
131
107
|
end
|
132
108
|
|
109
|
+
def add_id_to_index(binding)
|
110
|
+
return unless binding.is_a?(Puppet::Pops::Binder::Bindings::Multibinding) && !(id = binding.id).nil?
|
111
|
+
@id_index[id] = @id_index[id] << binding
|
112
|
+
end
|
113
|
+
|
114
|
+
def promote_matching_bindings(to_binder, from_binder, multibind_id)
|
115
|
+
return if from_binder.nil?
|
116
|
+
from_binder.id_index[ multibind_id ].each do |binding|
|
117
|
+
key = key_factory.binding_key(binding)
|
118
|
+
entry = lookup(key)
|
119
|
+
unless entry.precedence == @binder_precedence
|
120
|
+
# it is from a lower layer it must be promoted
|
121
|
+
injector_entries[ key ] = Puppet::Pops::Binder::InjectorEntry.new(binding, binder_precedence)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
# recursive "up the parent chain" to promote all
|
125
|
+
promote_matching_bindings(to_binder, from_binder.parent, multibind_id)
|
126
|
+
end
|
127
|
+
|
128
|
+
def lookup_in_parent(key)
|
129
|
+
@parent.nil? ? nil : @parent.lookup(key)
|
130
|
+
end
|
131
|
+
|
132
|
+
def lookup(key)
|
133
|
+
if x = injector_entries[key]
|
134
|
+
return x
|
135
|
+
end
|
136
|
+
@parent ? @parent.lookup(key) : nil
|
137
|
+
end
|
138
|
+
|
133
139
|
# @api private
|
134
140
|
def self.format_binding(b)
|
135
141
|
type_name = Puppet::Pops::Types::TypeCalculator.new().string(b.type)
|
@@ -163,18 +169,16 @@ class Puppet::Pops::Binder::Binder
|
|
163
169
|
# @api private
|
164
170
|
#
|
165
171
|
class LayerProcessor
|
166
|
-
attr :effective_prec
|
167
|
-
attr :prec_stack
|
168
172
|
attr :bindings
|
169
173
|
attr :binder
|
170
174
|
attr :key_factory
|
171
175
|
attr :contributions
|
176
|
+
attr :binder_precedence
|
172
177
|
|
173
178
|
def initialize(binder, key_factory)
|
174
179
|
@binder = binder
|
180
|
+
@binder_precedence = binder.binder_precedence
|
175
181
|
@key_factory = key_factory
|
176
|
-
@prec_stack = []
|
177
|
-
@effective_prec = nil
|
178
182
|
@bindings = []
|
179
183
|
@contributions = []
|
180
184
|
@@bind_visitor ||= Puppet::Pops::Visitor.new(nil,"bind",0,0)
|
@@ -184,14 +188,14 @@ class Puppet::Pops::Binder::Binder
|
|
184
188
|
# @api private
|
185
189
|
#
|
186
190
|
def add(b)
|
187
|
-
bindings << Puppet::Pops::Binder::InjectorEntry.new(
|
191
|
+
bindings << Puppet::Pops::Binder::InjectorEntry.new(b, binder_precedence)
|
188
192
|
end
|
189
193
|
|
190
194
|
# Add a multibind contribution
|
191
195
|
# @api private
|
192
196
|
#
|
193
197
|
def add_contribution(b)
|
194
|
-
contributions << Puppet::Pops::Binder::InjectorEntry.new(
|
198
|
+
contributions << Puppet::Pops::Binder::InjectorEntry.new(b, binder_precedence)
|
195
199
|
end
|
196
200
|
|
197
201
|
# Bind given abstract binding
|
@@ -201,35 +205,41 @@ class Puppet::Pops::Binder::Binder
|
|
201
205
|
@@bind_visitor.visit_this(self, binding)
|
202
206
|
end
|
203
207
|
|
204
|
-
# @return [Puppet::Pops::Binder::InjectorEntry] the entry with the highest
|
208
|
+
# @return [Puppet::Pops::Binder::InjectorEntry] the entry with the highest precedence
|
205
209
|
# @api private
|
206
210
|
def highest(b1, b2)
|
207
|
-
|
208
|
-
|
209
|
-
b1
|
210
|
-
|
211
|
-
b2
|
212
|
-
|
213
|
-
|
211
|
+
if b1.is_abstract? != b2.is_abstract?
|
212
|
+
# if one is abstract and the other is not, the non abstract wins
|
213
|
+
b1.is_abstract? ? b2 : b1
|
214
|
+
else
|
215
|
+
case b1.precedence <=> b2.precedence
|
216
|
+
when 1
|
217
|
+
b1
|
218
|
+
when -1
|
219
|
+
b2
|
220
|
+
when 0
|
221
|
+
raise_conflicting_binding(b1, b2)
|
222
|
+
end
|
214
223
|
end
|
215
224
|
end
|
216
225
|
|
217
226
|
# Raises a conflicting bindings error given two InjectorEntry's with same precedence in the same layer
|
218
227
|
# (if they are in different layers, something is seriously wrong)
|
219
228
|
def raise_conflicting_binding(b1, b2)
|
220
|
-
b1_layer_name, b1_bindings_name =
|
221
|
-
b2_layer_name, b2_bindings_name =
|
229
|
+
b1_layer_name, b1_bindings_name = binder.class.get_named_binding_layer_and_name(b1.binding)
|
230
|
+
b2_layer_name, b2_bindings_name = binder.class.get_named_binding_layer_and_name(b2.binding)
|
222
231
|
|
223
|
-
|
224
|
-
|
232
|
+
finality_msg = (b1.is_final? || b2.is_final?) ? ". Override of final binding not allowed" : ''
|
233
|
+
|
234
|
+
# TODO: Use of layer_name is not very good, it is not guaranteed to be unique
|
225
235
|
unless b1_layer_name == b2_layer_name
|
226
236
|
raise ArgumentError, [
|
227
|
-
'
|
237
|
+
'Conflicting binding for',
|
228
238
|
"'#{b1.binding.name}'",
|
229
239
|
'being resolved across layers',
|
230
240
|
"'#{b1_layer_name}' and",
|
231
241
|
"'#{b2_layer_name}'"
|
232
|
-
].join(' ')
|
242
|
+
].join(' ')+finality_msg
|
233
243
|
end
|
234
244
|
|
235
245
|
# Conflicting bindings made from the same source
|
@@ -241,7 +251,7 @@ class Puppet::Pops::Binder::Binder
|
|
241
251
|
"'#{b1_layer_name}', ",
|
242
252
|
'both from:',
|
243
253
|
"'#{b1_bindings_name}'"
|
244
|
-
].join(' ')
|
254
|
+
].join(' ')+finality_msg
|
245
255
|
end
|
246
256
|
|
247
257
|
# Conflicting bindings from different sources
|
@@ -253,7 +263,7 @@ class Puppet::Pops::Binder::Binder
|
|
253
263
|
'from:',
|
254
264
|
"'#{b1_bindings_name}', and",
|
255
265
|
"'#{b2_bindings_name}'"
|
256
|
-
].join(' ')
|
266
|
+
].join(' ')+finality_msg
|
257
267
|
end
|
258
268
|
|
259
269
|
|
@@ -276,33 +286,6 @@ class Puppet::Pops::Binder::Binder
|
|
276
286
|
! binding.multibind_id.nil?
|
277
287
|
end
|
278
288
|
|
279
|
-
# @api private
|
280
|
-
def push_precedences(precedences)
|
281
|
-
prec_stack.push(precedences)
|
282
|
-
@effective_prec = nil # clear cache
|
283
|
-
end
|
284
|
-
|
285
|
-
# @api private
|
286
|
-
def pop_precedences()
|
287
|
-
prec_stack.pop()
|
288
|
-
@effective_prec = nil # clear cache
|
289
|
-
end
|
290
|
-
|
291
|
-
# Returns the effective precedence as an array with highest precedence first.
|
292
|
-
# Internally the precedence is an array with the highest precedence first.
|
293
|
-
#
|
294
|
-
# @api private
|
295
|
-
#
|
296
|
-
def effective_prec()
|
297
|
-
unless @effective_prec
|
298
|
-
@effective_prec = prec_stack.flatten.uniq.sort.reverse
|
299
|
-
if @effective_prec.size == 0
|
300
|
-
@effective_prec = [ 0 ] # i.e. "common"
|
301
|
-
end
|
302
|
-
end
|
303
|
-
@effective_prec
|
304
|
-
end
|
305
|
-
|
306
289
|
# @api private
|
307
290
|
def bind_Binding(o)
|
308
291
|
if is_contribution?(o)
|
@@ -323,27 +306,6 @@ class Puppet::Pops::Binder::Binder
|
|
323
306
|
o.bindings.each {|b| bind(b) }
|
324
307
|
end
|
325
308
|
|
326
|
-
# Process CategorizedBindings by calculating precedence, and then if satisfying the predicates, process the contained
|
327
|
-
# bindings.
|
328
|
-
# @api private
|
329
|
-
#
|
330
|
-
def bind_CategorizedBindings(o)
|
331
|
-
precedences = o.predicates.collect do |p|
|
332
|
-
prec = binder.category_precedences[p.categorization]
|
333
|
-
|
334
|
-
# Skip bindings if the categorization is not present, or
|
335
|
-
# if the category value is not the effective value for the categorization
|
336
|
-
# Ignore the value for the common category (it is not possible to state common 'false' etc.)
|
337
|
-
#
|
338
|
-
return unless prec
|
339
|
-
return unless binder.category_values[p.categorization] == p.value.downcase || p.categorization == 'common'
|
340
|
-
prec
|
341
|
-
end
|
342
|
-
push_precedences(precedences)
|
343
|
-
o.bindings.each {|b| bind(b) }
|
344
|
-
pop_precedences()
|
345
|
-
end
|
346
|
-
|
347
309
|
# Process layered bindings from highest to lowest layer
|
348
310
|
# @api private
|
349
311
|
#
|
@@ -380,12 +342,22 @@ class Puppet::Pops::Binder::Binder
|
|
380
342
|
bindings.each do |b|
|
381
343
|
bkey = key(b.binding)
|
382
344
|
|
383
|
-
# ignore if a higher layer defined it, but ensure override gets resolved
|
345
|
+
# ignore if a higher layer defined it (unless the lower is final), but ensure override gets resolved
|
346
|
+
# (override is not resolved across binders)
|
384
347
|
if x = binder.injector_entries[bkey]
|
348
|
+
if b.is_final?
|
349
|
+
raise_conflicting_binding(x, b)
|
350
|
+
end
|
385
351
|
x.mark_override_resolved()
|
386
352
|
next
|
387
353
|
end
|
388
354
|
|
355
|
+
# If a lower (parent) binder exposes a final binding it may not be overridden
|
356
|
+
#
|
357
|
+
if (x = binder.lookup_in_parent(bkey)) && x.is_final?
|
358
|
+
raise_conflicting_binding(x, b)
|
359
|
+
end
|
360
|
+
|
389
361
|
# if already found in this layer, one wins (and resolves override), or it is an error
|
390
362
|
existing = this_layer[bkey]
|
391
363
|
winner = existing ? highest(existing, b) : b
|