puppet 3.4.3 → 3.5.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -6,49 +6,31 @@ module Puppet::Pops::Binder::Config
|
|
6
6
|
#
|
7
7
|
class BinderConfig
|
8
8
|
|
9
|
-
# The
|
10
|
-
#
|
11
|
-
# category value, and the path that is later used by the backend to read
|
12
|
-
# the bindings for that category
|
9
|
+
# The layering configuration is an array of layers from most to least significant.
|
10
|
+
# Each layer is represented by a Hash containing :name and :include and optionally :exclude
|
13
11
|
#
|
14
12
|
# @return [Array<Hash<String, String>, Hash<String, Array<String>>]
|
15
13
|
# @api public
|
16
14
|
#
|
17
15
|
attr_reader :layering_config
|
18
16
|
|
19
|
-
# @return [Array<Array(String, String)>] Array of Category tuples where Strings are not evaluated.
|
20
|
-
# @api public
|
21
|
-
#
|
22
|
-
attr_reader :categorization
|
23
|
-
|
24
17
|
# @return <Hash<String, String>] ({}) optional mapping of bindings-scheme to handler class name
|
25
18
|
attr_reader :scheme_extensions
|
26
19
|
|
27
|
-
# @return <Hash<String, String>] ({}) optional mapping of hiera backend name to backend class name
|
28
|
-
attr_reader :hiera_backends
|
29
20
|
|
30
21
|
# @return [String] the loaded config file
|
31
22
|
attr_accessor :config_file
|
32
23
|
|
33
24
|
DEFAULT_LAYERS = [
|
34
|
-
{ 'name' => 'site', 'include' => [
|
35
|
-
{ 'name' => 'modules', 'include' => [
|
36
|
-
]
|
37
|
-
|
38
|
-
DEFAULT_CATEGORIES = [
|
39
|
-
['node', "${fqdn}"],
|
40
|
-
['osfamily', "${osfamily}"],
|
41
|
-
['environment', "${environment}"],
|
42
|
-
['common', "true"]
|
25
|
+
{ 'name' => 'site', 'include' => [ 'confdir:/default?optional'] },
|
26
|
+
{ 'name' => 'modules', 'include' => [ 'module:/*::default'] },
|
43
27
|
]
|
44
28
|
|
45
29
|
DEFAULT_SCHEME_EXTENSIONS = {}
|
46
30
|
|
47
|
-
DEFAULT_HIERA_BACKENDS_EXTENSIONS = {}
|
48
|
-
|
49
31
|
def default_config()
|
50
32
|
# This is hardcoded now, but may be a user supplied default configuration later
|
51
|
-
{'version' => 1, 'layers' => default_layers
|
33
|
+
{'version' => 1, 'layers' => default_layers }
|
52
34
|
end
|
53
35
|
|
54
36
|
def confdir()
|
@@ -72,20 +54,20 @@ module Puppet::Pops::Binder::Config
|
|
72
54
|
rootdir = confdir
|
73
55
|
if rootdir.is_a?(String)
|
74
56
|
expanded_config_file = File.expand_path(File.join(rootdir, '/binder_config.yaml'))
|
75
|
-
if Puppet::FileSystem
|
57
|
+
if Puppet::FileSystem.exist?(expanded_config_file)
|
76
58
|
@config_file = expanded_config_file
|
77
59
|
end
|
78
60
|
else
|
79
61
|
raise ArgumentError, "No Puppet settings 'confdir', or it is not a String"
|
80
62
|
end
|
81
63
|
when String
|
82
|
-
unless Puppet::FileSystem
|
64
|
+
unless Puppet::FileSystem.exist?(@config_file)
|
83
65
|
raise ArgumentError, "Cannot find the given binder configuration file '#{@config_file}'"
|
84
66
|
end
|
85
67
|
else
|
86
68
|
raise ArgumentError, "The setting binder_config is expected to be a String, got: #{@config_file.class.name}."
|
87
69
|
end
|
88
|
-
unless @config_file.is_a?(String) && Puppet::FileSystem
|
70
|
+
unless @config_file.is_a?(String) && Puppet::FileSystem.exist?(@config_file)
|
89
71
|
@config_file = nil # use defaults
|
90
72
|
end
|
91
73
|
|
@@ -103,14 +85,10 @@ module Puppet::Pops::Binder::Config
|
|
103
85
|
|
104
86
|
unless diagnostics.errors?
|
105
87
|
@layering_config = data['layers'] or default_layers
|
106
|
-
@categorization = data['categories'] or default_categories
|
107
88
|
@scheme_extensions = (data['extensions'] and data['extensions']['scheme_handlers'] or default_scheme_extensions)
|
108
|
-
@hiera_backends = (data['extensions'] and data['extensions']['hiera_backends'] or default_hiera_backends_extensions)
|
109
89
|
else
|
110
90
|
@layering_config = []
|
111
|
-
@categorization = {}
|
112
91
|
@scheme_extensions = {}
|
113
|
-
@hiera_backends = {}
|
114
92
|
end
|
115
93
|
end
|
116
94
|
|
@@ -121,19 +99,9 @@ module Puppet::Pops::Binder::Config
|
|
121
99
|
DEFAULT_LAYERS
|
122
100
|
end
|
123
101
|
|
124
|
-
# @api private
|
125
|
-
def default_categories
|
126
|
-
DEFAULT_CATEGORIES
|
127
|
-
end
|
128
|
-
|
129
102
|
# @api private
|
130
103
|
def default_scheme_extensions
|
131
104
|
DEFAULT_SCHEME_EXTENSIONS
|
132
105
|
end
|
133
|
-
|
134
|
-
# @api private
|
135
|
-
def default_hiera_backends_extensions
|
136
|
-
DEFAULT_HIERA_BACKENDS_EXTENSIONS
|
137
|
-
end
|
138
106
|
end
|
139
107
|
end
|
@@ -42,12 +42,6 @@ module Puppet::Pops::Binder::Config
|
|
42
42
|
accept(Issues::CONFIG_LAYERS_MISSING, config_file)
|
43
43
|
end
|
44
44
|
|
45
|
-
if categories = (data['categories'] || data[:categories])
|
46
|
-
check_categories(categories, config_file)
|
47
|
-
else
|
48
|
-
accept(Issues::CONFIG_CATEGORIES_MISSING, config_file)
|
49
|
-
end
|
50
|
-
|
51
45
|
if version = (data['version'] or data[:version])
|
52
46
|
accept(Issues::CONFIG_WRONG_VERSION, config_file, {:expected => 1, :actual => version}) unless version == 1
|
53
47
|
else
|
@@ -97,29 +91,6 @@ module Puppet::Pops::Binder::Config
|
|
97
91
|
end
|
98
92
|
end
|
99
93
|
|
100
|
-
def check_categories(categories, config_file)
|
101
|
-
unless categories.is_a?(Array)
|
102
|
-
accept(Issues::CATEGORIES_IS_NOT_ARRAY, config_file, :klass => categories.class)
|
103
|
-
else
|
104
|
-
categories.each { |entry| check_category(entry, config_file) }
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
def check_category(category, config_file)
|
109
|
-
type = @type_calculator.infer(category)
|
110
|
-
unless @type_calculator.assignable?(@array_of_string_type, type)
|
111
|
-
accept(Issues::CATEGORY_IS_NOT_ARRAY, config_file, :type => @type_calculator.string(type))
|
112
|
-
return
|
113
|
-
end
|
114
|
-
unless category.size == 2
|
115
|
-
accept(Issues::CATEGORY_NOT_TWO_STRINGS, config_file, :count => category.size)
|
116
|
-
return
|
117
|
-
end
|
118
|
-
unless category[0] =~ /[a-z][a-zA-Z0-9_]*/
|
119
|
-
accept(Issues::INVALID_CATEGORY_NAME, config_file, :name => category[0])
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
94
|
# references to bindings is a single String URI, or an array of String URI
|
124
95
|
# @param kind [String] 'include' or 'exclude' (used in issue messages)
|
125
96
|
# @param value [String, Array<String>] one or more String URI binding references
|
@@ -131,12 +102,7 @@ module Puppet::Pops::Binder::Config
|
|
131
102
|
value.each {|ref| check_reference(ref, kind, config_file) }
|
132
103
|
end
|
133
104
|
|
134
|
-
# A reference is a URI in string form having
|
135
|
-
# - module-hiera
|
136
|
-
# - confdir-hiera
|
137
|
-
# - enc
|
138
|
-
#
|
139
|
-
# and with a path (at least '/')
|
105
|
+
# A reference is a URI in string form having a scheme and a path (at least '/')
|
140
106
|
#
|
141
107
|
def check_reference(value, kind, config_file)
|
142
108
|
begin
|
@@ -161,7 +127,7 @@ module Puppet::Pops::Binder::Config
|
|
161
127
|
end
|
162
128
|
# check known extensions
|
163
129
|
extensions.each_key do |key|
|
164
|
-
unless ['scheme_handlers'
|
130
|
+
unless ['scheme_handlers'].include? key
|
165
131
|
accept(Issues::UNKNOWN_EXTENSION, config_file, :extension => key)
|
166
132
|
end
|
167
133
|
end
|
@@ -171,13 +137,6 @@ module Puppet::Pops::Binder::Config
|
|
171
137
|
accept(Issues::EXTENSION_BINDING_NOT_HASH, config_file, :extension => 'scheme_handlers', :actual => binding_schemes.class.name)
|
172
138
|
end
|
173
139
|
end
|
174
|
-
|
175
|
-
if hiera_backends = extensions['hiera_backends']
|
176
|
-
unless hiera_backends.is_a?(Hash)
|
177
|
-
accept(Issues::EXTENSION_BINDING_NOT_HASH, config_file, :extension => 'hiera_backends', :actual => hiera_backends.class.name)
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
140
|
end
|
182
141
|
end
|
183
142
|
end
|
@@ -24,30 +24,10 @@ module Puppet::Pops::Binder::Config::Issues
|
|
24
24
|
"The configuration file '#{semantic}' has no 'version' entry in the top level hash"
|
25
25
|
end
|
26
26
|
|
27
|
-
CONFIG_CATEGORIES_MISSING = issue :CONFIG_CATEGORIES_MISSING do
|
28
|
-
"The configuration file '#{semantic}' has no 'categories' entry in the top level hash"
|
29
|
-
end
|
30
|
-
|
31
27
|
LAYERS_IS_NOT_ARRAY = issue :LAYERS_IS_NOT_ARRAY, :klass do
|
32
28
|
"The configuration file '#{semantic}' should contain a 'layers' key with an Array value, got: #{klass.name}"
|
33
29
|
end
|
34
30
|
|
35
|
-
CATEGORIES_IS_NOT_ARRAY = issue :CATEGORIES_IS_NOT_ARRAY, :klass do
|
36
|
-
"The configuration file '#{semantic}' should contain a 'categories' key with an Array value, got: #{klass.name}"
|
37
|
-
end
|
38
|
-
|
39
|
-
CATEGORY_IS_NOT_ARRAY = issue :CATEGORY_IS_NOT_ARRAY, :klass do
|
40
|
-
"The configuration file '#{semantic}' each entry in 'categories' should be an Array(String, String), got: #{klass.name}"
|
41
|
-
end
|
42
|
-
|
43
|
-
CATEGORY_NOT_TWO_STRINGS = issue :CATEGORY_NOT_TWO_STRINGS, :count do
|
44
|
-
"The configuration file '#{semantic}' each entry in 'categories' should be an array with 2 strings, got: #{count}"
|
45
|
-
end
|
46
|
-
|
47
|
-
INVALID_CATEGORY_NAME = issue :INVALID_CATEGORY_NAME, :name do
|
48
|
-
"The configuration file '#{semantic}' contains the invalid category: '#{name}', must match /[a-z][a-zA-Z0-9_]*/"
|
49
|
-
end
|
50
|
-
|
51
31
|
LAYER_IS_NOT_HASH = issue :LAYER_IS_NOT_HASH, :klass do
|
52
32
|
"The configuration file '#{semantic}' should contain one hash per layer, got #{klass.name} instead of Hash"
|
53
33
|
end
|
@@ -100,7 +80,7 @@ module Puppet::Pops::Binder::Config::Issues
|
|
100
80
|
"The configuration file '#{semantic}' contains '#{extension}', expected: Hash, but got: #{actual}."
|
101
81
|
end
|
102
82
|
|
103
|
-
UNKNOWN_EXTENSION = issue :UNKNOWN_EXTENSION, :
|
83
|
+
UNKNOWN_EXTENSION = issue :UNKNOWN_EXTENSION, :extension do
|
104
84
|
"The configuration file '#{semantic}' contains the unknown extension: #{extension}."
|
105
85
|
end
|
106
86
|
end
|
@@ -70,7 +70,7 @@
|
|
70
70
|
#
|
71
71
|
# Access to key factory and type calculator
|
72
72
|
# -----------------------------------------
|
73
|
-
# It is important to use the same key factory, and type calculator as the binder. It is therefor possible to
|
73
|
+
# It is important to use the same key factory, and type calculator as the binder. It is therefor possible to obtain
|
74
74
|
# these with the methods {#key_factory}, and {#type_calculator}.
|
75
75
|
#
|
76
76
|
# Special support for producers
|
@@ -86,6 +86,73 @@ class Puppet::Pops::Binder::Injector
|
|
86
86
|
|
87
87
|
Producers = Puppet::Pops::Binder::Producers
|
88
88
|
|
89
|
+
def self.create_from_model(layered_bindings_model)
|
90
|
+
self.new(Puppet::Pops::Binder::Binder.new(layered_bindings_model))
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.create_from_hash(name, key_value_hash)
|
94
|
+
factory = Puppet::Pops::Binder::BindingsFactory
|
95
|
+
named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
|
96
|
+
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
|
97
|
+
self.new(Puppet::Pops::Binder::Binder.new(layered_bindings))
|
98
|
+
end
|
99
|
+
|
100
|
+
# Creates an injector with a single bindings layer created with the given name, and the bindings
|
101
|
+
# produced by the given block. The block is evaluated with self bound to a BindingsContainerBuilder.
|
102
|
+
#
|
103
|
+
# @example
|
104
|
+
# Injector.create('mysettings') do
|
105
|
+
# bind('name').to(42)
|
106
|
+
# end
|
107
|
+
#
|
108
|
+
# @api public
|
109
|
+
#
|
110
|
+
def self.create(name, &block)
|
111
|
+
factory = Puppet::Pops::Binder::BindingsFactory
|
112
|
+
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
|
113
|
+
self.new(Puppet::Pops::Binder::Binder.new(layered_bindings))
|
114
|
+
end
|
115
|
+
|
116
|
+
# Creates an overriding injector with a single bindings layer
|
117
|
+
# created with the given name, and the bindings produced by the given block.
|
118
|
+
# The block is evaluated with self bound to a BindingsContainerBuilder.
|
119
|
+
#
|
120
|
+
# @example
|
121
|
+
# an_injector.override('myoverrides') do
|
122
|
+
# bind('name').to(43)
|
123
|
+
# end
|
124
|
+
#
|
125
|
+
# @api public
|
126
|
+
#
|
127
|
+
def override(name, &block)
|
128
|
+
factory = Puppet::Pops::Binder::BindingsFactory
|
129
|
+
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',factory.named_bindings(name, &block).model))
|
130
|
+
self.class.new(Puppet::Pops::Binder::Binder.new(layered_bindings, @impl.binder))
|
131
|
+
end
|
132
|
+
|
133
|
+
# Creates an overriding injector with bindings from a bindings model (a LayeredBindings) which
|
134
|
+
# may consists of multiple layers of bindings.
|
135
|
+
#
|
136
|
+
# @api public
|
137
|
+
#
|
138
|
+
def override_with_model(layered_bindings)
|
139
|
+
unless layered_bindings.is_a?(Puppet::Pops::Binder::Bindings::LayeredBindings)
|
140
|
+
raise ArgumentError, "Expected a LayeredBindings model, got '#{bindings_model.class}'"
|
141
|
+
end
|
142
|
+
self.class.new(Puppet::Pops::Binder::Binder.new(layered_bindings, @impl.binder))
|
143
|
+
end
|
144
|
+
|
145
|
+
# Creates an overriding injector with a single bindings layer
|
146
|
+
# created with the given name, and the bindings given in the key_value_hash
|
147
|
+
# @api public
|
148
|
+
#
|
149
|
+
def override_with_hash(name, key_value_hash)
|
150
|
+
factory = Puppet::Pops::Binder::BindingsFactory
|
151
|
+
named_bindings = factory.named_bindings(name) { key_value_hash.each {|k,v| bind.name(k).to(v) }}
|
152
|
+
layered_bindings = factory.layered_bindings(factory.named_layer(name+'-layer',named_bindings.model))
|
153
|
+
self.class.new(Puppet::Pops::Binder::Binder.new(layered_bindings, @impl.binder))
|
154
|
+
end
|
155
|
+
|
89
156
|
# An Injector is initialized with a configured {Puppet::Pops::Binder::Binder Binder}.
|
90
157
|
#
|
91
158
|
# @param configured_binder [Puppet::Pops::Binder::Binder,nil] The configured binder containing effective bindings. A given value
|
@@ -94,11 +161,11 @@ class Puppet::Pops::Binder::Injector
|
|
94
161
|
#
|
95
162
|
# @api public
|
96
163
|
#
|
97
|
-
def initialize(configured_binder)
|
164
|
+
def initialize(configured_binder, parent_injector = nil)
|
98
165
|
if configured_binder.nil?
|
99
166
|
@impl = Private::NullInjectorImpl.new()
|
100
167
|
else
|
101
|
-
@impl = Private::InjectorImpl.new(configured_binder)
|
168
|
+
@impl = Private::InjectorImpl.new(configured_binder, parent_injector)
|
102
169
|
end
|
103
170
|
end
|
104
171
|
|
@@ -305,7 +372,11 @@ module Private
|
|
305
372
|
else
|
306
373
|
val
|
307
374
|
end
|
375
|
+
end
|
308
376
|
|
377
|
+
# @api private
|
378
|
+
def binder
|
379
|
+
nil
|
309
380
|
end
|
310
381
|
|
311
382
|
# @api private
|
@@ -345,8 +416,14 @@ module Private
|
|
345
416
|
|
346
417
|
attr_reader :type_calculator
|
347
418
|
|
348
|
-
|
349
|
-
|
419
|
+
attr_reader :binder
|
420
|
+
|
421
|
+
def initialize(configured_binder, parent_injector = nil)
|
422
|
+
@binder = configured_binder
|
423
|
+
@parent = parent_injector
|
424
|
+
|
425
|
+
# TODO: Different error message
|
426
|
+
raise ArgumentError, "Given Binder is not configured" unless configured_binder #&& configured_binder.configured?()
|
350
427
|
@entries = configured_binder.injector_entries()
|
351
428
|
|
352
429
|
# It is essential that the injector uses the same key factory as the binder since keys must be
|
@@ -406,6 +483,7 @@ module Private
|
|
406
483
|
# @api private
|
407
484
|
def lookup_type(scope, type, name='')
|
408
485
|
val = lookup_key(scope, named_key(type, name))
|
486
|
+
return nil if val.nil?
|
409
487
|
unless key_factory.type_calculator.instance?(type, val)
|
410
488
|
raise ArgumentError, "Type error: incompatible type, #{type_error_detail(type, val)}"
|
411
489
|
end
|
@@ -427,7 +505,8 @@ module Private
|
|
427
505
|
@recursion_lock.push(key)
|
428
506
|
case entry = get_entry(key)
|
429
507
|
when NilClass
|
430
|
-
nil
|
508
|
+
@parent ? @parent.lookup_key(scope, key) : nil
|
509
|
+
|
431
510
|
when Puppet::Pops::Binder::InjectorEntry
|
432
511
|
val = produce(scope, entry)
|
433
512
|
return nil if val.nil?
|
@@ -685,4 +764,4 @@ module Private
|
|
685
764
|
end
|
686
765
|
end
|
687
766
|
end
|
688
|
-
end
|
767
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# @api public
|
4
4
|
#
|
5
5
|
class Puppet::Pops::Binder::InjectorEntry
|
6
|
-
# @return [Object] An opaque object representing the precedence
|
6
|
+
# @return [Object] An opaque (comparable) object representing the precedence
|
7
7
|
# @api public
|
8
8
|
attr_reader :precedence
|
9
9
|
|
@@ -18,7 +18,7 @@ class Puppet::Pops::Binder::InjectorEntry
|
|
18
18
|
attr_accessor :cached_producer
|
19
19
|
|
20
20
|
# @api private
|
21
|
-
def initialize(
|
21
|
+
def initialize(binding, precedence = 0)
|
22
22
|
@precedence = precedence.freeze
|
23
23
|
@binding = binding
|
24
24
|
@cached_producer = nil
|
@@ -42,6 +42,10 @@ class Puppet::Pops::Binder::InjectorEntry
|
|
42
42
|
binding.abstract
|
43
43
|
end
|
44
44
|
|
45
|
+
def is_final?
|
46
|
+
binding.final
|
47
|
+
end
|
48
|
+
|
45
49
|
# Compares against another InjectorEntry by comparing precedence.
|
46
50
|
# @param injector_entry [InjectorEntry] entry to compare against.
|
47
51
|
# @return [Integer] 1, if this entry has higher precedence, 0 if equal, and -1 if given entry has higher precedence.
|
@@ -35,6 +35,12 @@ class Puppet::Pops::Binder::KeyFactory
|
|
35
35
|
"mc_#{multibind_id}"
|
36
36
|
end
|
37
37
|
|
38
|
+
# @api public
|
39
|
+
def multibind_contribution_key_to_id(contributions_key)
|
40
|
+
# removes the leading "mc_" from the key to get the multibind_id
|
41
|
+
contributions_key[3..-1]
|
42
|
+
end
|
43
|
+
|
38
44
|
# @api public
|
39
45
|
def is_named?(key)
|
40
46
|
key.is_a?(Array) && key[1] && !key[1].empty?
|
@@ -58,4 +64,4 @@ class Puppet::Pops::Binder::KeyFactory
|
|
58
64
|
return nil unless key.is_a?(Array)
|
59
65
|
key[0]
|
60
66
|
end
|
61
|
-
end
|
67
|
+
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
# This class is the backing implementation of the Puppet function 'lookup'.
|
2
|
+
# See puppet/parser/functions/lookup.rb for documentation.
|
3
|
+
#
|
4
|
+
class Puppet::Pops::Binder::Lookup
|
5
|
+
|
6
|
+
def self.parse_lookup_args(args)
|
7
|
+
options = {}
|
8
|
+
pblock = if args[-1].respond_to?(:puppet_lambda)
|
9
|
+
args.pop
|
10
|
+
end
|
11
|
+
|
12
|
+
case args.size
|
13
|
+
when 1
|
14
|
+
# name, or all options
|
15
|
+
if args[ 0 ].is_a?(Hash)
|
16
|
+
options = to_symbolic_hash(args[ 0 ])
|
17
|
+
else
|
18
|
+
options[ :name ] = args[ 0 ]
|
19
|
+
end
|
20
|
+
|
21
|
+
when 2
|
22
|
+
# name and type, or name and options
|
23
|
+
if args[ 1 ].is_a?(Hash)
|
24
|
+
options = to_symbolic_hash(args[ 1 ])
|
25
|
+
options[:name] = args[ 0 ] # silently overwrite option with given name
|
26
|
+
else
|
27
|
+
options[:name] = args[ 0 ]
|
28
|
+
options[:type] = args[ 1 ]
|
29
|
+
end
|
30
|
+
|
31
|
+
when 3
|
32
|
+
# name, type, default (no options)
|
33
|
+
options[ :name ] = args[ 0 ]
|
34
|
+
options[ :type ] = args[ 1 ]
|
35
|
+
options[ :default ] = args[ 2 ]
|
36
|
+
else
|
37
|
+
raise Puppet::ParseError, "The lookup function accepts 1-3 arguments, got #{args.size}"
|
38
|
+
end
|
39
|
+
options[:pblock] = pblock
|
40
|
+
options
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.to_symbolic_hash(input)
|
44
|
+
names = [:name, :type, :default, :accept_undef, :extra, :override]
|
45
|
+
options = {}
|
46
|
+
names.each {|n| options[n] = undef_as_nil(input[n.to_s] || input[n]) }
|
47
|
+
options
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.type_mismatch(type_calculator, expected, got)
|
51
|
+
"has wrong type, expected #{type_calculator.string(expected)}, got #{type_calculator.string(got)}"
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.fail(msg)
|
55
|
+
raise Puppet::ParseError, "Function lookup() " + msg
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.fail_lookup(names)
|
59
|
+
name_part = if names.size == 1
|
60
|
+
"the name '#{names[0]}'"
|
61
|
+
else
|
62
|
+
"any of the names ['" + names.join(', ') + "']"
|
63
|
+
end
|
64
|
+
fail("did not find a value for #{name_part}")
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.validate_options(options, type_calculator)
|
68
|
+
type_parser = Puppet::Pops::Types::TypeParser.new
|
69
|
+
name_type = type_parser.parse('Variant[Array[String], String]')
|
70
|
+
|
71
|
+
if is_nil_or_undef?(options[:name]) || options[:name].is_a?(Array) && options[:name].empty?
|
72
|
+
fail ("requires a name, or array of names. Got nothing to lookup.")
|
73
|
+
end
|
74
|
+
|
75
|
+
t = type_calculator.infer(options[:name])
|
76
|
+
if ! type_calculator.assignable?(name_type, t)
|
77
|
+
fail("given 'name' argument, #{type_mismatch(type_calculator, options[:name], t)}")
|
78
|
+
end
|
79
|
+
|
80
|
+
# unless a type is already given (future case), parse the type (or default 'Data'), fails if invalid type is given
|
81
|
+
unless options[:type].is_a?(Puppet::Pops::Types::PAbstractType)
|
82
|
+
options[:type] = type_parser.parse(options[:type] || 'Data')
|
83
|
+
end
|
84
|
+
|
85
|
+
# default value must comply with the given type
|
86
|
+
if options[:default]
|
87
|
+
t = type_calculator.infer(options[:default])
|
88
|
+
if ! type_calculator.assignable?(options[:type], t)
|
89
|
+
fail("'default' value #{type_mismatch(type_calculator, options[:type], t)}")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
if options[:extra] && !options[:extra].is_a?(Hash)
|
94
|
+
# do not perform inference here, it is enough to know that it is not a hash
|
95
|
+
fail("'extra' value must be a Hash, got #{options[:extra].class}")
|
96
|
+
end
|
97
|
+
options[:extra] = {} unless options[:extra]
|
98
|
+
|
99
|
+
if options[:override] && !options[:override].is_a?(Hash)
|
100
|
+
# do not perform inference here, it is enough to know that it is not a hash
|
101
|
+
fail("'override' value must be a Hash, got #{options[:extra].class}")
|
102
|
+
end
|
103
|
+
options[:override] = {} unless options[:override]
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.nil_as_undef(x)
|
108
|
+
x.nil? ? :undef : x
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.undef_as_nil(x)
|
112
|
+
is_nil_or_undef?(x) ? nil : x
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.is_nil_or_undef?(x)
|
116
|
+
x.nil? || x == :undef
|
117
|
+
end
|
118
|
+
|
119
|
+
# This is used as a marker - a value that cannot (at least not easily) by mistake be found in
|
120
|
+
# hiera data.
|
121
|
+
#
|
122
|
+
class PrivateNotFoundMarker; end
|
123
|
+
|
124
|
+
def self.search_for(scope, type, name, options)
|
125
|
+
# search in order, override, injector, hiera, then extra
|
126
|
+
if !(result = options[:override][name]).nil?
|
127
|
+
result
|
128
|
+
elsif !(result = scope.compiler.injector.lookup(scope, type, name)).nil?
|
129
|
+
result
|
130
|
+
else
|
131
|
+
result = scope.function_hiera([name, PrivateNotFoundMarker])
|
132
|
+
if !result.nil? && result != PrivateNotFoundMarker
|
133
|
+
result
|
134
|
+
else
|
135
|
+
options[:extra][name]
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# This is the method called from the puppet/parser/functions/lookup.rb
|
141
|
+
# @param args [Array] array following the puppet function call conventions
|
142
|
+
def self.lookup(scope, args)
|
143
|
+
type_calculator = Puppet::Pops::Types::TypeCalculator.new
|
144
|
+
options = parse_lookup_args(args)
|
145
|
+
validate_options(options, type_calculator)
|
146
|
+
names = [options[:name]].flatten
|
147
|
+
type = options[:type]
|
148
|
+
|
149
|
+
result_with_name = names.reduce([]) do |memo, name|
|
150
|
+
break memo if !memo[1].nil?
|
151
|
+
[name, search_for(scope, type, name, options)]
|
152
|
+
end
|
153
|
+
|
154
|
+
result = if result_with_name[1].nil?
|
155
|
+
# not found, use default (which may be nil), the default is already type checked
|
156
|
+
options[:default]
|
157
|
+
else
|
158
|
+
# injector.lookup is type-safe already do no need to type check the result
|
159
|
+
result_with_name[1]
|
160
|
+
end
|
161
|
+
|
162
|
+
result = if pblock = options[:pblock]
|
163
|
+
result2 = case pblock.parameter_count
|
164
|
+
when 1
|
165
|
+
pblock.call(scope, nil_as_undef(result))
|
166
|
+
when 2
|
167
|
+
pblock.call(scope, result_with_name[ 0 ], nil_as_undef(result))
|
168
|
+
else
|
169
|
+
pblock.call(scope, result_with_name[ 0 ], nil_as_undef(result), nil_as_undef(options[ :default ]))
|
170
|
+
end
|
171
|
+
|
172
|
+
# if the given result was returned, there is not need to type-check it again
|
173
|
+
if !result2.equal?(result)
|
174
|
+
t = type_calculator.infer(undef_as_nil(result2))
|
175
|
+
if !type_calculator.assignable?(type, t)
|
176
|
+
fail "the value produced by the given code block #{type_mismatch(type_calculator, type, t)}"
|
177
|
+
end
|
178
|
+
end
|
179
|
+
result2
|
180
|
+
else
|
181
|
+
result
|
182
|
+
end
|
183
|
+
|
184
|
+
# Finally, the result if nil must be acceptable or an error is raised
|
185
|
+
if is_nil_or_undef?(result) && !options[:accept_undef]
|
186
|
+
fail_lookup(names)
|
187
|
+
else
|
188
|
+
nil_as_undef(result)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|