puppet 3.2.4 → 3.3.0.rc2
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/COMMITTERS.md +101 -42
- data/Gemfile +15 -4
- data/README.md +5 -1
- data/README_DEVELOPER.md +117 -54
- data/Rakefile +4 -0
- data/ext/build_defaults.yaml +3 -2
- data/ext/debian/puppet-common.manpages +33 -1
- data/ext/gentoo/init.d/puppet +1 -1
- data/ext/gentoo/init.d/puppetmaster +1 -1
- data/ext/redhat/puppet.spec.erb +0 -1
- data/install.rb +2 -1
- data/lib/hiera/backend/puppet_backend.rb +1 -1
- data/lib/puppet/application.rb +10 -9
- data/lib/puppet/application/agent.rb +87 -93
- data/lib/puppet/application/apply.rb +0 -2
- data/lib/puppet/application/device.rb +3 -3
- data/lib/puppet/application/kick.rb +2 -2
- data/lib/puppet/application/master.rb +41 -19
- data/lib/puppet/application/queue.rb +5 -3
- data/lib/puppet/bindings.rb +147 -0
- data/lib/puppet/configurer.rb +25 -15
- data/lib/puppet/configurer/fact_handler.rb +2 -9
- data/lib/puppet/daemon.rb +44 -33
- data/lib/puppet/defaults.rb +57 -26
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/dot.rb +2 -2
- data/lib/puppet/external/nagios/base.rb +1 -6
- data/lib/puppet/external/pson/common.rb +2 -2
- data/lib/puppet/external/pson/pure/generator.rb +2 -2
- data/lib/puppet/external/pson/pure/parser.rb +1 -1
- data/lib/puppet/face/ca.rb +1 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/help.rb +2 -2
- data/lib/puppet/face/module/list.rb +2 -2
- data/lib/puppet/feature/rails.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +0 -1
- data/lib/puppet/file_serving/base.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +20 -14
- data/lib/puppet/forge.rb +0 -32
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/errors.rb +3 -3
- data/lib/puppet/forge/repository.rb +7 -42
- data/lib/puppet/graph.rb +11 -0
- data/lib/puppet/graph/key.rb +26 -0
- data/lib/puppet/graph/prioritizer.rb +29 -0
- data/lib/puppet/graph/random_prioritizer.rb +16 -0
- data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
- data/lib/puppet/graph/relationship_graph.rb +246 -0
- data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
- data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
- data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
- data/lib/puppet/indirector.rb +2 -2
- data/lib/puppet/indirector/catalog/compiler.rb +10 -7
- data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
- data/lib/puppet/indirector/certificate/rest.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +2 -2
- data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
- data/lib/puppet/indirector/facts/network_device.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
- data/lib/puppet/indirector/indirection.rb +2 -2
- data/lib/puppet/indirector/memory.rb +9 -0
- data/lib/puppet/indirector/node/ldap.rb +2 -4
- data/lib/puppet/indirector/report/processor.rb +1 -2
- data/lib/puppet/indirector/report/rest.rb +1 -1
- data/lib/puppet/indirector/request.rb +32 -10
- data/lib/puppet/indirector/resource/rest.rb +1 -1
- data/lib/puppet/indirector/resource_type/parser.rb +31 -12
- data/lib/puppet/interface.rb +1 -1
- data/lib/puppet/interface/documentation.rb +7 -11
- data/lib/puppet/interface/option.rb +1 -1
- data/lib/puppet/interface/option_builder.rb +1 -1
- data/lib/puppet/metatype/manager.rb +2 -2
- data/lib/puppet/module.rb +7 -1
- data/lib/puppet/module_tool.rb +1 -1
- data/lib/puppet/module_tool/applications/application.rb +10 -0
- data/lib/puppet/module_tool/applications/installer.rb +6 -3
- data/lib/puppet/module_tool/dependency.rb +2 -0
- data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
- data/lib/puppet/module_tool/metadata.rb +25 -13
- data/lib/puppet/module_tool/modulefile.rb +7 -7
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
- data/lib/puppet/module_tool/skeleton.rb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
- data/lib/puppet/network/auth_config_parser.rb +3 -0
- data/lib/puppet/network/authconfig.rb +0 -1
- data/lib/puppet/network/authorization.rb +1 -1
- data/lib/puppet/network/authstore.rb +2 -2
- data/lib/puppet/network/format_handler.rb +25 -114
- data/lib/puppet/network/format_support.rb +106 -0
- data/lib/puppet/network/formats.rb +10 -4
- data/lib/puppet/network/http/compression.rb +1 -1
- data/lib/puppet/network/http/connection.rb +76 -32
- data/lib/puppet/network/http/handler.rb +122 -61
- data/lib/puppet/network/http/rack/rest.rb +1 -1
- data/lib/puppet/network/http/webrick/rest.rb +9 -3
- data/lib/puppet/network/http_pool.rb +2 -2
- data/lib/puppet/network/resolver.rb +1 -0
- data/lib/puppet/network/server.rb +5 -81
- data/lib/puppet/node/environment.rb +256 -13
- data/lib/puppet/node/facts.rb +28 -2
- data/lib/puppet/parameter.rb +27 -18
- data/lib/puppet/parameter/boolean.rb +20 -0
- data/lib/puppet/parameter/path.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +1 -1
- data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
- data/lib/puppet/parser/ast/casestatement.rb +0 -3
- data/lib/puppet/parser/ast/lambda.rb +25 -6
- data/lib/puppet/parser/ast/leaf.rb +10 -3
- data/lib/puppet/parser/ast/nop.rb +1 -1
- data/lib/puppet/parser/ast/resource_override.rb +0 -2
- data/lib/puppet/parser/compiler.rb +92 -34
- data/lib/puppet/parser/files.rb +0 -5
- data/lib/puppet/parser/functions/create_resources.rb +23 -46
- data/lib/puppet/parser/functions/each.rb +0 -2
- data/lib/puppet/parser/functions/extlookup.rb +2 -2
- data/lib/puppet/parser/functions/foreach.rb +0 -2
- data/lib/puppet/parser/functions/hiera_include.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +44 -0
- data/lib/puppet/parser/functions/slice.rb +1 -1
- data/lib/puppet/parser/grammar.ra +0 -1
- data/lib/puppet/parser/lexer.rb +0 -1
- data/lib/puppet/parser/parser.rb +0 -1
- data/lib/puppet/parser/parser_factory.rb +3 -2
- data/lib/puppet/parser/parser_support.rb +1 -1
- data/lib/puppet/parser/relationship.rb +1 -1
- data/lib/puppet/parser/scope.rb +49 -24
- data/lib/puppet/parser/type_loader.rb +13 -18
- data/lib/puppet/pops.rb +45 -0
- data/lib/puppet/pops/adaptable.rb +2 -2
- data/lib/puppet/pops/adapters.rb +4 -0
- data/lib/puppet/pops/binder/binder.rb +421 -0
- data/lib/puppet/pops/binder/binder_issues.rb +142 -0
- data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
- data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
- data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
- data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
- data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
- data/lib/puppet/pops/binder/bindings_model.rb +215 -0
- data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
- data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
- data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
- data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
- data/lib/puppet/pops/binder/config/issues.rb +106 -0
- data/lib/puppet/pops/binder/hiera2.rb +10 -0
- data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
- data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
- data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
- data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
- data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
- data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
- data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
- data/lib/puppet/pops/binder/injector.rb +688 -0
- data/lib/puppet/pops/binder/injector_entry.rb +53 -0
- data/lib/puppet/pops/binder/key_factory.rb +61 -0
- data/lib/puppet/pops/binder/producers.rb +829 -0
- data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
- data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
- data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
- data/lib/puppet/pops/binder/system_bindings.rb +72 -0
- data/lib/puppet/pops/issue_reporter.rb +75 -0
- data/lib/puppet/pops/issues.rb +9 -5
- data/lib/puppet/pops/model/ast_transformer.rb +4 -4
- data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +25 -13
- data/lib/puppet/pops/model/model.rb +1 -1
- data/lib/puppet/pops/model/tree_dumper.rb +2 -2
- data/lib/puppet/pops/parser/egrammar.ra +0 -1
- data/lib/puppet/pops/parser/eparser.rb +1 -2
- data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
- data/lib/puppet/pops/parser/lexer.rb +8 -6
- data/lib/puppet/pops/types/class_loader.rb +118 -0
- data/lib/puppet/pops/types/type_calculator.rb +557 -0
- data/lib/puppet/pops/types/type_factory.rb +147 -0
- data/lib/puppet/pops/types/type_parser.rb +117 -0
- data/lib/puppet/pops/types/types.rb +132 -0
- data/lib/puppet/pops/validation.rb +146 -17
- data/lib/puppet/pops/validation/checker3_1.rb +1 -1
- data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
- data/lib/puppet/property.rb +3 -3
- data/lib/puppet/property/keyvalue.rb +1 -1
- data/lib/puppet/provider.rb +2 -2
- data/lib/puppet/provider/aixobject.rb +19 -21
- data/lib/puppet/provider/augeas/augeas.rb +3 -1
- data/lib/puppet/provider/command.rb +2 -2
- data/lib/puppet/provider/group/aix.rb +1 -1
- data/lib/puppet/provider/group/ldap.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +3 -8
- data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
- data/lib/puppet/provider/mount.rb +8 -3
- data/lib/puppet/provider/nameservice.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +0 -1
- data/lib/puppet/provider/package/dpkg.rb +86 -32
- data/lib/puppet/provider/package/fink.rb +0 -2
- data/lib/puppet/provider/package/freebsd.rb +0 -2
- data/lib/puppet/provider/package/openbsd.rb +57 -10
- data/lib/puppet/provider/package/opkg.rb +0 -1
- data/lib/puppet/provider/package/pacman.rb +0 -1
- data/lib/puppet/provider/package/pip.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +17 -6
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +9 -1
- data/lib/puppet/provider/package/ports.rb +2 -2
- data/lib/puppet/provider/package/rpm.rb +29 -12
- data/lib/puppet/provider/package/rug.rb +1 -1
- data/lib/puppet/provider/package/urpmi.rb +11 -15
- data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
- data/lib/puppet/provider/package/windows/package.rb +1 -26
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +22 -3
- data/lib/puppet/provider/parsedfile.rb +1 -12
- data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +3 -3
- data/lib/puppet/provider/service/debian.rb +1 -1
- data/lib/puppet/provider/service/init.rb +14 -20
- data/lib/puppet/provider/service/openrc.rb +3 -1
- data/lib/puppet/provider/service/redhat.rb +5 -8
- data/lib/puppet/provider/service/runit.rb +3 -2
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/sshkey/parsed.rb +0 -2
- data/lib/puppet/provider/user/aix.rb +25 -12
- data/lib/puppet/provider/user/directoryservice.rb +4 -7
- data/lib/puppet/provider/user/ldap.rb +0 -1
- data/lib/puppet/provider/user/user_role_add.rb +2 -0
- data/lib/puppet/provider/user/useradd.rb +1 -1
- data/lib/puppet/provider/zone/solaris.rb +1 -2
- data/lib/puppet/reference/metaparameter.rb +1 -1
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/reports/rrdgraph.rb +1 -1
- data/lib/puppet/reports/tagmail.rb +1 -1
- data/lib/puppet/resource.rb +16 -4
- data/lib/puppet/resource/catalog.rb +111 -173
- data/lib/puppet/resource/status.rb +42 -3
- data/lib/puppet/resource/type.rb +33 -46
- data/lib/puppet/resource/type_collection.rb +19 -15
- data/lib/puppet/run.rb +5 -1
- data/lib/puppet/scheduler/scheduler.rb +14 -15
- data/lib/puppet/settings.rb +78 -41
- data/lib/puppet/settings/boolean_setting.rb +0 -2
- data/lib/puppet/settings/config_file.rb +0 -2
- data/lib/puppet/settings/directory_setting.rb +0 -2
- data/lib/puppet/settings/duration_setting.rb +0 -2
- data/lib/puppet/settings/enum_setting.rb +16 -0
- data/lib/puppet/settings/file_setting.rb +0 -2
- data/lib/puppet/settings/path_setting.rb +0 -2
- data/lib/puppet/settings/string_setting.rb +0 -3
- data/lib/puppet/settings/terminus_setting.rb +0 -2
- data/lib/puppet/ssl/certificate_authority.rb +102 -9
- data/lib/puppet/test/test_helper.rb +1 -0
- data/lib/puppet/transaction.rb +130 -292
- data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
- data/lib/puppet/transaction/event.rb +16 -1
- data/lib/puppet/transaction/report.rb +34 -14
- data/lib/puppet/transaction/resource_harness.rb +16 -19
- data/lib/puppet/type.rb +59 -53
- data/lib/puppet/type/component.rb +0 -2
- data/lib/puppet/type/cron.rb +13 -2
- data/lib/puppet/type/exec.rb +5 -7
- data/lib/puppet/type/file.rb +9 -32
- data/lib/puppet/type/file/content.rb +4 -1
- data/lib/puppet/type/file/ctime.rb +3 -1
- data/lib/puppet/type/file/ensure.rb +1 -1
- data/lib/puppet/type/file/mode.rb +0 -1
- data/lib/puppet/type/file/mtime.rb +2 -1
- data/lib/puppet/type/group.rb +7 -9
- data/lib/puppet/type/host.rb +1 -2
- data/lib/puppet/type/mcx.rb +0 -1
- data/lib/puppet/type/mount.rb +38 -6
- data/lib/puppet/type/package.rb +2 -2
- data/lib/puppet/type/resources.rb +5 -4
- data/lib/puppet/type/schedule.rb +1 -4
- data/lib/puppet/type/selmodule.rb +1 -1
- data/lib/puppet/type/service.rb +1 -3
- data/lib/puppet/type/tidy.rb +3 -3
- data/lib/puppet/type/user.rb +9 -13
- data/lib/puppet/type/yumrepo.rb +11 -7
- data/lib/puppet/util.rb +14 -7
- data/lib/puppet/util/autoload.rb +0 -1
- data/lib/puppet/util/backups.rb +1 -3
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/constant_inflector.rb +1 -2
- data/lib/puppet/util/errors.rb +1 -0
- data/lib/puppet/util/file_watcher.rb +28 -0
- data/lib/puppet/util/fileparsing.rb +1 -3
- data/lib/puppet/util/filetype.rb +0 -1
- data/lib/puppet/util/http_proxy.rb +38 -0
- data/lib/puppet/util/ldap/manager.rb +1 -2
- data/lib/puppet/util/log.rb +31 -10
- data/lib/puppet/util/log/destinations.rb +0 -50
- data/lib/puppet/util/metric.rb +8 -1
- data/lib/puppet/util/monkey_patches.rb +14 -148
- data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +6 -9
- data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
- data/lib/puppet/util/pidlock.rb +3 -0
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
- data/lib/puppet/util/retryaction.rb +0 -1
- data/lib/puppet/util/symbolic_file_mode.rb +5 -1
- data/lib/puppet/util/tagging.rb +0 -2
- data/lib/puppet/util/warnings.rb +3 -0
- data/lib/puppet/util/watched_file.rb +37 -0
- data/lib/puppet/util/watcher.rb +17 -0
- data/lib/puppet/util/watcher/change_watcher.rb +33 -0
- data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
- data/lib/puppet/util/watcher/timer.rb +19 -0
- data/lib/puppet/util/windows/user.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppetx.rb +109 -0
- data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
- data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
- data/lib/puppetx/puppet/syntax_checker.rb +91 -0
- data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
- data/lib/semver.rb +1 -1
- data/man/man8/puppet-kick.8 +1 -1
- data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
- data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
- data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
- data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
- data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
- data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
- data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
- data/spec/integration/agent/logging_spec.rb +178 -0
- data/spec/integration/configurer_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -6
- data/spec/integration/network/authconfig_spec.rb +19 -0
- data/spec/integration/network/server/webrick_spec.rb +10 -11
- data/spec/integration/parser/catalog_spec.rb +85 -0
- data/spec/integration/provider/cron/crontab_spec.rb +11 -0
- data/spec/integration/provider/mount_spec.rb +1 -0
- data/spec/integration/transaction_spec.rb +8 -8
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/settings_spec.rb +58 -11
- data/spec/lib/matchers/include_in_order.rb +21 -0
- data/spec/lib/matchers/include_in_order_spec.rb +30 -0
- data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
- data/spec/lib/puppet_spec/compiler.rb +24 -0
- data/spec/lib/puppet_spec/pops.rb +16 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/unit/application/agent_spec.rb +145 -145
- data/spec/unit/application/apply_spec.rb +1 -1
- data/spec/unit/application/doc_spec.rb +1 -1
- data/spec/unit/application/face_base_spec.rb +3 -3
- data/spec/unit/application/facts_spec.rb +1 -0
- data/spec/unit/application/master_spec.rb +0 -15
- data/spec/unit/application/queue_spec.rb +6 -12
- data/spec/unit/application/resource_spec.rb +1 -1
- data/spec/unit/configurer/fact_handler_spec.rb +19 -50
- data/spec/unit/configurer_spec.rb +23 -7
- data/spec/unit/daemon_spec.rb +97 -121
- data/spec/unit/defaults_spec.rb +44 -0
- data/spec/unit/face/node_spec.rb +2 -2
- data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
- data/spec/unit/file_serving/configuration_spec.rb +2 -2
- data/spec/unit/file_serving/mount/file_spec.rb +4 -4
- data/spec/unit/forge/repository_spec.rb +9 -29
- data/spec/unit/graph/key_spec.rb +41 -0
- data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
- data/spec/unit/graph/relationship_graph_spec.rb +393 -0
- data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
- data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
- data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
- data/spec/unit/hiera_puppet_spec.rb +1 -1
- data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
- data/spec/unit/indirector/face_spec.rb +1 -1
- data/spec/unit/indirector/facts/facter_spec.rb +11 -1
- data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
- data/spec/unit/indirector/hiera_spec.rb +1 -1
- data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
- data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
- data/spec/unit/indirector/request_spec.rb +92 -39
- data/spec/unit/indirector/rest_spec.rb +1 -0
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/interface/option_builder_spec.rb +1 -0
- data/spec/unit/interface/option_spec.rb +1 -0
- data/spec/unit/interface_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
- data/spec/unit/module_tool/metadata_spec.rb +13 -0
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/format_handler_spec.rb +33 -282
- data/spec/unit/network/format_support_spec.rb +199 -0
- data/spec/unit/network/formats_spec.rb +2 -2
- data/spec/unit/network/http/connection_spec.rb +88 -7
- data/spec/unit/network/http/handler_spec.rb +271 -249
- data/spec/unit/network/http/rack/rest_spec.rb +1 -1
- data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
- data/spec/unit/network/http_pool_spec.rb +40 -0
- data/spec/unit/network/server_spec.rb +18 -207
- data/spec/unit/node/facts_spec.rb +68 -17
- data/spec/unit/other/selinux_spec.rb +24 -20
- data/spec/unit/parameter/boolean_spec.rb +25 -0
- data/spec/unit/parameter/value_collection_spec.rb +7 -7
- data/spec/unit/parameter_spec.rb +10 -13
- data/spec/unit/parser/ast/function_spec.rb +4 -4
- data/spec/unit/parser/ast/leaf_spec.rb +45 -6
- data/spec/unit/parser/collector_spec.rb +3 -3
- data/spec/unit/parser/compiler_spec.rb +4 -3
- data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
- data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
- data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
- data/spec/unit/parser/functions/lookup_spec.rb +96 -0
- data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
- data/spec/unit/parser/functions/split_spec.rb +2 -2
- data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
- data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
- data/spec/unit/parser/functions_spec.rb +7 -7
- data/spec/unit/parser/lexer_spec.rb +1 -1
- data/spec/unit/parser/methods/collect_spec.rb +43 -0
- data/spec/unit/parser/resource_spec.rb +9 -9
- data/spec/unit/parser/scope_spec.rb +45 -2
- data/spec/unit/parser/type_loader_spec.rb +159 -175
- data/spec/unit/pops/binder/binder_spec.rb +62 -0
- data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
- data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
- data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
- data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
- data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
- data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
- data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
- data/spec/unit/pops/binder/injector_spec.rb +789 -0
- data/spec/unit/pops/containment_spec.rb +1 -0
- data/spec/unit/pops/issues_spec.rb +1 -1
- data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
- data/spec/unit/pops/parser/lexer_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
- data/spec/unit/pops/parser/parser_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
- data/spec/unit/pops/types/type_factory_spec.rb +65 -0
- data/spec/unit/pops/types/type_parser_spec.rb +93 -0
- data/spec/unit/property/list_spec.rb +1 -1
- data/spec/unit/property/ordered_list_spec.rb +1 -1
- data/spec/unit/provider/aixobject_spec.rb +101 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
- data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
- data/spec/unit/provider/mount/parsed_spec.rb +44 -56
- data/spec/unit/provider/mount_spec.rb +11 -2
- data/spec/unit/provider/naginator_spec.rb +8 -0
- data/spec/unit/provider/package/apt_spec.rb +5 -1
- data/spec/unit/provider/package/aptitude_spec.rb +9 -5
- data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
- data/spec/unit/provider/package/dpkg_spec.rb +274 -99
- data/spec/unit/provider/package/openbsd_spec.rb +84 -1
- data/spec/unit/provider/package/opkg_spec.rb +3 -3
- data/spec/unit/provider/package/pip_spec.rb +16 -0
- data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
- data/spec/unit/provider/package/rpm_spec.rb +112 -21
- data/spec/unit/provider/package/urpmi.rb +80 -0
- data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
- data/spec/unit/provider/package/yum_spec.rb +85 -0
- data/spec/unit/provider/package/zypper_spec.rb +25 -6
- data/spec/unit/provider/parsedfile_spec.rb +3 -2
- data/spec/unit/provider/service/init_spec.rb +10 -10
- data/spec/unit/provider/service/openrc_spec.rb +16 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +7 -0
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
- data/spec/unit/provider/user/aix_spec.rb +89 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
- data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
- data/spec/unit/provider_spec.rb +2 -13
- data/spec/unit/reports/http_spec.rb +1 -1
- data/spec/unit/resource/catalog_spec.rb +23 -97
- data/spec/unit/resource/resource_type.json +34 -0
- data/spec/unit/resource/status_spec.rb +56 -0
- data/spec/unit/resource/type_collection_spec.rb +6 -6
- data/spec/unit/resource/type_spec.rb +25 -5
- data/spec/unit/resource_spec.rb +68 -24
- data/spec/unit/run_spec.rb +16 -0
- data/spec/unit/scheduler/scheduler_spec.rb +14 -27
- data/spec/unit/semver_spec.rb +5 -0
- data/spec/unit/settings/enum_setting_spec.rb +27 -0
- data/spec/unit/settings_spec.rb +53 -44
- data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
- data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
- data/spec/unit/transaction/event_manager_spec.rb +2 -2
- data/spec/unit/transaction/event_spec.rb +57 -0
- data/spec/unit/transaction/report_spec.rb +66 -0
- data/spec/unit/transaction/resource_harness_spec.rb +27 -20
- data/spec/unit/transaction_spec.rb +182 -390
- data/spec/unit/type/augeas_spec.rb +3 -3
- data/spec/unit/type/component_spec.rb +0 -9
- data/spec/unit/type/computer_spec.rb +1 -1
- data/spec/unit/type/cron_spec.rb +2 -2
- data/spec/unit/type/exec_spec.rb +4 -2
- data/spec/unit/type/file/content_spec.rb +11 -0
- data/spec/unit/type/file/group_spec.rb +1 -1
- data/spec/unit/type/file_spec.rb +16 -8
- data/spec/unit/type/mount_spec.rb +445 -259
- data/spec/unit/type/package_spec.rb +4 -4
- data/spec/unit/type/resources_spec.rb +30 -1
- data/spec/unit/type/user_spec.rb +26 -3
- data/spec/unit/type/yumrepo_spec.rb +7 -27
- data/spec/unit/type/zone_spec.rb +4 -1
- data/spec/unit/type_spec.rb +66 -33
- data/spec/unit/util/backups_spec.rb +3 -3
- data/spec/unit/util/http_proxy_spec.rb +83 -0
- data/spec/unit/util/log_spec.rb +79 -8
- data/spec/unit/util/metric_spec.rb +12 -0
- data/spec/unit/util/monkey_patches_spec.rb +6 -0
- data/spec/unit/util/network_device/config_spec.rb +26 -64
- data/spec/unit/util/pidlock_spec.rb +4 -1
- data/spec/unit/util/tagging_spec.rb +5 -9
- data/spec/unit/util/warnings_spec.rb +1 -1
- data/spec/unit/util/watched_file_spec.rb +52 -0
- data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
- data/spec/unit/util/watcher_spec.rb +56 -0
- data/spec/unit/util_spec.rb +16 -0
- metadata +2767 -2576
- data/ext/debian/puppet.manpages +0 -32
- data/ext/osx/PackageInfo.plist +0 -36
- data/ext/osx/createpackage.sh +0 -187
- data/ext/redhat/rundir-perms.patch +0 -28
- data/lib/puppet/external/base64.rb +0 -19
- data/lib/puppet/util/graph.rb +0 -27
- data/lib/puppet/util/loadedfile.rb +0 -61
- data/lib/puppet/util/log_paths.rb +0 -22
- data/lib/puppet/util/subclass_loader.rb +0 -78
- data/spec/monkey_patches/publicize_methods.rb +0 -11
- data/spec/unit/util/loadedfile_spec.rb +0 -71
@@ -0,0 +1,46 @@
|
|
1
|
+
# A provider of labels for bindings model object, producing a human name for the model object.
|
2
|
+
# @api private
|
3
|
+
#
|
4
|
+
class Puppet::Pops::Binder::BindingsLabelProvider < Puppet::Pops::LabelProvider
|
5
|
+
def initialize
|
6
|
+
@@label_visitor ||= Puppet::Pops::Visitor.new(self,"label",0,0)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Produces a label for the given object without article.
|
10
|
+
# @return [String] a human readable label
|
11
|
+
#
|
12
|
+
def label o
|
13
|
+
@@label_visitor.visit(o)
|
14
|
+
end
|
15
|
+
|
16
|
+
def label_PObjectType o ; "#{Puppet::Pops::Types::TypeFactory.label(o)}" end
|
17
|
+
def label_ProducerDescriptor o ; "Producer" end
|
18
|
+
def label_NonCachingProducerDescriptor o ; "Non Caching Producer" end
|
19
|
+
def label_ConstantProducerDescriptor o ; "Producer['#{o.value}']" end
|
20
|
+
def label_EvaluatingProducerDescriptor o ; "Evaluating Producer" end
|
21
|
+
def label_InstanceProducerDescriptor o ; "Producer[#{o.class_name}]" end
|
22
|
+
def label_LookupProducerDescriptor o ; "Lookup Producer[#{o.name}]" end
|
23
|
+
def label_HashLookupProducerDescriptor o ; "Hash Lookup Producer[#{o.name}][#{o.key}]" end
|
24
|
+
def label_FirstFoundProducerDescriptor o ; "First Found Producer" end
|
25
|
+
def label_ProducerProducerDescriptor o ; "Producer[Producer]" end
|
26
|
+
def label_MultibindProducerDescriptor o ; "Multibind Producer" end
|
27
|
+
def label_ArrayMultibindProducerDescriptor o ; "Array Multibind Producer" end
|
28
|
+
def label_HashMultibindProducerDescriptor o ; "Hash Multibind Producer" end
|
29
|
+
def label_Bindings o ; "Bindings" end
|
30
|
+
def label_NamedBindings o ; "Named Bindings" end
|
31
|
+
def label_Category o ; "Category '#{o.categorization}/#{o.value}'" end
|
32
|
+
def label_CategorizedBindings o ; "Categorized Bindings" end
|
33
|
+
def label_LayeredBindings o ; "Layered Bindings" end
|
34
|
+
def label_NamedLayer o ; "Layer '#{o.name}'" end
|
35
|
+
def label_EffectiveCategories o ; "Effective Categories" end
|
36
|
+
def label_ContributedBindings o ; "Contributed Bindings" end
|
37
|
+
def label_NamedArgument o ; "Named Argument" end
|
38
|
+
|
39
|
+
def label_Binding(o)
|
40
|
+
'Binding' + (o.multibind_id.nil? ? '' : ' In Multibind')
|
41
|
+
end
|
42
|
+
def label_Multibinding(o)
|
43
|
+
'Multibinding' + (o.multibind_id.nil? ? '' : ' In Multibind')
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'rgen/metamodel_builder'
|
2
|
+
|
3
|
+
# The ClassLoader provides a Class instance given a class name or a meta-type.
|
4
|
+
# If the class is not already loaded, it is loaded using the Puppet Autoloader.
|
5
|
+
# This means it can load a class from a gem, or from puppet modules.
|
6
|
+
#
|
7
|
+
class Puppet::Pops::Binder::BindingsLoader
|
8
|
+
@autoloader = Puppet::Util::Autoload.new("BindingsLoader", "puppet/bindings", :wrap => false)
|
9
|
+
|
10
|
+
# Returns a XXXXX given a fully qualified class name.
|
11
|
+
# Lookup of class is never relative to the calling namespace.
|
12
|
+
# @param name [String, Array<String>, Array<Symbol>, Puppet::Pops::Types::PObjectType] A fully qualified
|
13
|
+
# class name String (e.g. '::Foo::Bar', 'Foo::Bar'), a PObjectType, or a fully qualified name in Array form where each part
|
14
|
+
# is either a String or a Symbol, e.g. `%w{Puppetx Puppetlabs SomeExtension}`.
|
15
|
+
# @return [Class, nil] the looked up class or nil if no such class is loaded
|
16
|
+
# @raise ArgumentError If the given argument has the wrong type
|
17
|
+
# @api public
|
18
|
+
#
|
19
|
+
def self.provide(scope, name)
|
20
|
+
case name
|
21
|
+
when String
|
22
|
+
provide_from_string(scope, name)
|
23
|
+
|
24
|
+
when Array
|
25
|
+
provide_from_name_path(scope, name.join('::'), name)
|
26
|
+
|
27
|
+
else
|
28
|
+
raise ArgumentError, "Cannot provide a bindings from a '#{name.class.name}'"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# If loadable name exists relative to a a basedir or not. Returns the loadable path as a side effect.
|
33
|
+
# @return [String, nil] a loadable path for the given name, or nil
|
34
|
+
#
|
35
|
+
def self.loadable?(basedir, name)
|
36
|
+
# note, "lib" is added by the autoloader
|
37
|
+
#
|
38
|
+
paths_for_name(name).find {|p| File.exists?(File.join(basedir, "lib/puppet/bindings", p)+'.rb') }
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def self.provide_from_string(scope, name)
|
44
|
+
name_path = name.split('::')
|
45
|
+
# always from the root, so remove an empty first segment
|
46
|
+
if name_path[0].empty?
|
47
|
+
name_path = name_path[1..-1]
|
48
|
+
end
|
49
|
+
provide_from_name_path(scope, name, name_path)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.provide_from_name_path(scope, name, name_path)
|
53
|
+
# If bindings is already loaded, try this first
|
54
|
+
result = Puppet::Bindings.resolve(scope, name)
|
55
|
+
|
56
|
+
unless result
|
57
|
+
# Attempt to load it using the auto loader
|
58
|
+
paths_for_name(name).find {|path| @autoloader.load(path) }
|
59
|
+
result = Puppet::Bindings.resolve(scope, name)
|
60
|
+
end
|
61
|
+
result
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.paths_for_name(fq_name)
|
65
|
+
[de_camel(fq_name), downcased_path(fq_name)]
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.downcased_path(fq_name)
|
69
|
+
fq_name.to_s.gsub(/::/, '/').downcase
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.de_camel(fq_name)
|
73
|
+
fq_name.to_s.gsub(/::/, '/').
|
74
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
75
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
76
|
+
tr("-", "_").
|
77
|
+
downcase
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,215 @@
|
|
1
|
+
require 'rgen/metamodel_builder'
|
2
|
+
|
3
|
+
# The Bindings model is a model of Key to Producer mappings (bindings).
|
4
|
+
# The central concept is that a Bindings is a nested structure of bindings.
|
5
|
+
# A top level Bindings should be a NamedBindings (the name is used primarily
|
6
|
+
# in error messages). A Key is a Type/Name combination.
|
7
|
+
#
|
8
|
+
# TODO: In this version, references to "any object" uses the class Object,
|
9
|
+
# but this is only temporary. The intent is to use specific Puppet Objects
|
10
|
+
# that are typed using the Puppet Type System (to enable serialization).
|
11
|
+
#
|
12
|
+
# @see Puppet::Pops::Binder::BindingsFactory The BindingsFactory for more details on how to create model instances.
|
13
|
+
# @api public
|
14
|
+
module Puppet::Pops::Binder::Bindings
|
15
|
+
|
16
|
+
# @abstract
|
17
|
+
# @api public
|
18
|
+
#
|
19
|
+
class AbstractBinding < Puppet::Pops::Model::PopsObject
|
20
|
+
abstract
|
21
|
+
end
|
22
|
+
|
23
|
+
# An abstract producer
|
24
|
+
# @abstract
|
25
|
+
# @api public
|
26
|
+
#
|
27
|
+
class ProducerDescriptor < Puppet::Pops::Model::PopsObject
|
28
|
+
abstract
|
29
|
+
contains_one_uni 'transformer', Puppet::Pops::Model::LambdaExpression
|
30
|
+
end
|
31
|
+
|
32
|
+
# All producers are singleton producers unless wrapped in a non caching producer
|
33
|
+
# where each lookup produces a new instance. It is an error to have a nesting level > 1
|
34
|
+
# and to nest a NonCachingProducerDescriptor.
|
35
|
+
#
|
36
|
+
# @api public
|
37
|
+
#
|
38
|
+
class NonCachingProducerDescriptor < ProducerDescriptor
|
39
|
+
contains_one_uni 'producer', ProducerDescriptor
|
40
|
+
end
|
41
|
+
|
42
|
+
# Produces a constant value (i.e. something of {Puppet::Pops::Types::PDataType PDataType})
|
43
|
+
# @api public
|
44
|
+
#
|
45
|
+
class ConstantProducerDescriptor < ProducerDescriptor
|
46
|
+
# TODO: This should be a typed Puppet Object
|
47
|
+
has_attr 'value', Object
|
48
|
+
end
|
49
|
+
|
50
|
+
# Produces a value by evaluating a Puppet DSL expression
|
51
|
+
# @api public
|
52
|
+
#
|
53
|
+
class EvaluatingProducerDescriptor < ProducerDescriptor
|
54
|
+
contains_one_uni 'expression', Puppet::Pops::Model::Expression
|
55
|
+
end
|
56
|
+
|
57
|
+
# An InstanceProducer creates an instance of the given class
|
58
|
+
# Arguments are passed to the class' `new` operator in the order they are given.
|
59
|
+
# @api public
|
60
|
+
#
|
61
|
+
class InstanceProducerDescriptor < ProducerDescriptor
|
62
|
+
# TODO: This should be a typed Puppet Object ??
|
63
|
+
has_many_attr 'arguments', Object, :upperBound => -1
|
64
|
+
has_attr 'class_name', String
|
65
|
+
end
|
66
|
+
|
67
|
+
# A ProducerProducerDescriptor, describes that the produced instance is itself a Producer
|
68
|
+
# that should be used to produce the value.
|
69
|
+
# @api public
|
70
|
+
#
|
71
|
+
class ProducerProducerDescriptor < ProducerDescriptor
|
72
|
+
contains_one_uni 'producer', ProducerDescriptor, :lowerBound => 1
|
73
|
+
end
|
74
|
+
|
75
|
+
# Produces a value by looking up another key (type/name)
|
76
|
+
# @api public
|
77
|
+
#
|
78
|
+
class LookupProducerDescriptor < ProducerDescriptor
|
79
|
+
contains_one_uni 'type', Puppet::Pops::Types::PObjectType
|
80
|
+
has_attr 'name', String
|
81
|
+
end
|
82
|
+
|
83
|
+
# Produces a value by looking up another multibound key, and then looking up
|
84
|
+
# the detail using a detail_key.
|
85
|
+
# This is used to produce a specific service of a given type (such as a SyntaxChecker for the syntax "json").
|
86
|
+
# @api public
|
87
|
+
#
|
88
|
+
class HashLookupProducerDescriptor < LookupProducerDescriptor
|
89
|
+
has_attr 'key', String
|
90
|
+
end
|
91
|
+
|
92
|
+
# Produces a value by looking up each producer in turn. The first existing producer wins.
|
93
|
+
# @api public
|
94
|
+
#
|
95
|
+
class FirstFoundProducerDescriptor < ProducerDescriptor
|
96
|
+
contains_many_uni 'producers', LookupProducerDescriptor
|
97
|
+
end
|
98
|
+
|
99
|
+
# @api public
|
100
|
+
# @abstract
|
101
|
+
class MultibindProducerDescriptor < ProducerDescriptor
|
102
|
+
abstract
|
103
|
+
end
|
104
|
+
|
105
|
+
# Used in a Multibind of Array type unless it has a producer. May explicitly be used as well.
|
106
|
+
# @api public
|
107
|
+
#
|
108
|
+
class ArrayMultibindProducerDescriptor < MultibindProducerDescriptor
|
109
|
+
end
|
110
|
+
|
111
|
+
# Used in a Multibind of Hash type unless it has a producer. May explicitly be used as well.
|
112
|
+
# @api public
|
113
|
+
#
|
114
|
+
class HashMultibindProducerDescriptor < MultibindProducerDescriptor
|
115
|
+
end
|
116
|
+
|
117
|
+
# Plays the role of "Hash[String, Object] entry" but with keys in defined order.
|
118
|
+
#
|
119
|
+
# @api public
|
120
|
+
#
|
121
|
+
class NamedArgument < Puppet::Pops::Model::PopsObject
|
122
|
+
has_attr 'name', String, :lowerBound => 1
|
123
|
+
has_attr 'value', Object, :lowerBound => 1
|
124
|
+
end
|
125
|
+
|
126
|
+
# Binds a type/name combination to a producer. Optionally marking the bindidng as being abstract, or being an
|
127
|
+
# override of another binding. Optionally, the binding defines producer arguments passed to the producer when
|
128
|
+
# it is created.
|
129
|
+
#
|
130
|
+
# @api public
|
131
|
+
class Binding < AbstractBinding
|
132
|
+
contains_one_uni 'type', Puppet::Pops::Types::PObjectType
|
133
|
+
has_attr 'name', String
|
134
|
+
has_attr 'override', Boolean
|
135
|
+
has_attr 'abstract', Boolean
|
136
|
+
# If set is a contribution in a multibind
|
137
|
+
has_attr 'multibind_id', String, :lowerBound => 0
|
138
|
+
# Invariant: Only multibinds may have lowerBound 0, all regular Binding must have a producer.
|
139
|
+
contains_one_uni 'producer', ProducerDescriptor, :lowerBound => 0
|
140
|
+
contains_many_uni 'producer_args', NamedArgument, :lowerBound => 0
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
# A multibinding is a binding other bindings can contribute to.
|
145
|
+
#
|
146
|
+
# @api public
|
147
|
+
class Multibinding < Binding
|
148
|
+
has_attr 'id', String
|
149
|
+
end
|
150
|
+
|
151
|
+
# A container of Binding instances
|
152
|
+
# @api public
|
153
|
+
#
|
154
|
+
class Bindings < AbstractBinding
|
155
|
+
contains_many_uni 'bindings', AbstractBinding
|
156
|
+
end
|
157
|
+
|
158
|
+
# The top level container of bindings can have a name (for error messages, logging, tracing).
|
159
|
+
# May be nested.
|
160
|
+
# @api public
|
161
|
+
#
|
162
|
+
class NamedBindings < Bindings
|
163
|
+
has_attr 'name', String
|
164
|
+
end
|
165
|
+
|
166
|
+
# A category predicate (the request has to be in this category).
|
167
|
+
# @api public
|
168
|
+
#
|
169
|
+
class Category < Puppet::Pops::Model::PopsObject
|
170
|
+
has_attr 'categorization', String, :lowerBound => 1
|
171
|
+
has_attr 'value', String, :lowerBound => 1
|
172
|
+
end
|
173
|
+
|
174
|
+
# A container of Binding instances that are in effect when the
|
175
|
+
# predicates (min one) evaluates to true. Multiple predicates are handles as an 'and'.
|
176
|
+
# Note that 'or' semantics are handled by repeating the same rules.
|
177
|
+
# @api public
|
178
|
+
#
|
179
|
+
class CategorizedBindings < Bindings
|
180
|
+
contains_many_uni 'predicates', Category, :lowerBound => 1
|
181
|
+
end
|
182
|
+
|
183
|
+
# A named layer of bindings having the same priority.
|
184
|
+
# @api public
|
185
|
+
class NamedLayer < Puppet::Pops::Model::PopsObject
|
186
|
+
has_attr 'name', String, :lowerBound => 1
|
187
|
+
contains_many_uni 'bindings', NamedBindings
|
188
|
+
end
|
189
|
+
|
190
|
+
# A list of layers with bindings in descending priority order.
|
191
|
+
# @api public
|
192
|
+
#
|
193
|
+
class LayeredBindings < Puppet::Pops::Model::PopsObject
|
194
|
+
contains_many_uni 'layers', NamedLayer
|
195
|
+
end
|
196
|
+
|
197
|
+
# A list of categories consisting of categroization name and category value (i.e. the *state of the request*)
|
198
|
+
# @api public
|
199
|
+
#
|
200
|
+
class EffectiveCategories < Puppet::Pops::Model::PopsObject
|
201
|
+
# The order is from highest precedence to lowest
|
202
|
+
contains_many_uni 'categories', Category
|
203
|
+
end
|
204
|
+
|
205
|
+
# ContributedBindings is a named container of one or more NamedBindings.
|
206
|
+
# The intent is that a bindings producer returns a ContributedBindings which in addition to the bindings
|
207
|
+
# may optionally contain provider's opinion about the precedence of categories, and their category values.
|
208
|
+
# This enables merging of bindings, and validation of consistency.
|
209
|
+
#
|
210
|
+
# @api public
|
211
|
+
#
|
212
|
+
class ContributedBindings < NamedLayer
|
213
|
+
contains_one_uni 'effective_categories', EffectiveCategories
|
214
|
+
end
|
215
|
+
end
|
@@ -0,0 +1,205 @@
|
|
1
|
+
|
2
|
+
# Dumps a Pops::Binder::Bindings model in reverse polish notation; i.e. LISP style
|
3
|
+
# The intention is to use this for debugging output
|
4
|
+
# TODO: BAD NAME - A DUMP is a Ruby Serialization
|
5
|
+
# NOTE: use :break, :indent, :dedent in lists to do just that
|
6
|
+
#
|
7
|
+
class Puppet::Pops::Binder::BindingsModelDumper < Puppet::Pops::Model::TreeDumper
|
8
|
+
Bindings = Puppet::Pops::Binder::Bindings
|
9
|
+
|
10
|
+
attr_reader :type_calculator
|
11
|
+
attr_reader :expression_dumper
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
super
|
15
|
+
@type_calculator = Puppet::Pops::Types::TypeCalculator.new()
|
16
|
+
@expression_dumper = Puppet::Pops::Model::ModelTreeDumper.new()
|
17
|
+
end
|
18
|
+
|
19
|
+
def dump_BindingsFactory o
|
20
|
+
do_dump(o.model)
|
21
|
+
end
|
22
|
+
|
23
|
+
def dump_BindingsBuilder o
|
24
|
+
do_dump(o.model)
|
25
|
+
end
|
26
|
+
|
27
|
+
def dump_BindingsContainerBuilder o
|
28
|
+
do_dump(o.model)
|
29
|
+
end
|
30
|
+
|
31
|
+
def dump_NamedLayer o
|
32
|
+
result = ['named-layer', (o.name.nil? ? '<no-name>': o.name), :indent]
|
33
|
+
if o.bindings
|
34
|
+
o.bindings.each do |b|
|
35
|
+
result << :break
|
36
|
+
result << do_dump(b)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
result << :dedent
|
40
|
+
result
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
def dump_Array o
|
45
|
+
o.collect {|e| do_dump(e) }
|
46
|
+
end
|
47
|
+
|
48
|
+
def dump_ASTArray o
|
49
|
+
["[]"] + o.children.collect {|x| do_dump(x)}
|
50
|
+
end
|
51
|
+
|
52
|
+
def dump_ASTHash o
|
53
|
+
["{}"] + o.value.sort_by{|k,v| k.to_s}.collect {|x| [do_dump(x[0]), do_dump(x[1])]}
|
54
|
+
end
|
55
|
+
|
56
|
+
def dump_Integer o
|
57
|
+
o.to_s
|
58
|
+
end
|
59
|
+
|
60
|
+
# Dump a Ruby String in single quotes unless it is a number.
|
61
|
+
def dump_String o
|
62
|
+
"'#{o}'"
|
63
|
+
end
|
64
|
+
|
65
|
+
def dump_NilClass o
|
66
|
+
"()"
|
67
|
+
end
|
68
|
+
|
69
|
+
def dump_Object o
|
70
|
+
['dev-error-no-polymorph-dump-for:', o.class.to_s, o.to_s]
|
71
|
+
end
|
72
|
+
|
73
|
+
def is_nop? o
|
74
|
+
o.nil? || o.is_a?(Model::Nop) || o.is_a?(AST::Nop)
|
75
|
+
end
|
76
|
+
|
77
|
+
def dump_ProducerDescriptor o
|
78
|
+
result = [o.class.name]
|
79
|
+
result << expression_dumper.dump(o.transformer) if o.transformer
|
80
|
+
result
|
81
|
+
end
|
82
|
+
|
83
|
+
def dump_NonCachingProducerDescriptor o
|
84
|
+
dump_ProducerDescriptor(o) + do_dump(o.producer)
|
85
|
+
end
|
86
|
+
|
87
|
+
def dump_ConstantProducerDescriptor o
|
88
|
+
['constant', do_dump(o.value)]
|
89
|
+
end
|
90
|
+
|
91
|
+
def dump_EvaluatingProducerDescriptor o
|
92
|
+
result = dump_ProducerDescriptor(o)
|
93
|
+
result << expression_dumper.dump(o.expression)
|
94
|
+
end
|
95
|
+
|
96
|
+
def dump_InstanceProducerDescriptor
|
97
|
+
# TODO: o.arguments, o. transformer
|
98
|
+
['instance', o.class_name]
|
99
|
+
end
|
100
|
+
|
101
|
+
def dump_ProducerProducerDescriptor o
|
102
|
+
# skip the transformer lambda...
|
103
|
+
result = ['producer-producer', do_dump(o.producer)]
|
104
|
+
result << expression_dumper.dump(o.transformer) if o.transformer
|
105
|
+
result
|
106
|
+
end
|
107
|
+
|
108
|
+
def dump_LookupProducerDescriptor o
|
109
|
+
['lookup', do_dump(o.type), o.name]
|
110
|
+
end
|
111
|
+
|
112
|
+
def dump_PObjectType o
|
113
|
+
type_calculator.string(o)
|
114
|
+
end
|
115
|
+
|
116
|
+
def dump_HashLookupProducerDescriptor o
|
117
|
+
# TODO: transformer lambda
|
118
|
+
result = ['hash-lookup', do_dump(o.type), o.name, "[#{do_dump(o.key)}]"]
|
119
|
+
result << expression_dumper.dump(o.transformer) if o.transformer
|
120
|
+
result
|
121
|
+
end
|
122
|
+
|
123
|
+
def dump_FirstFoundProducerDescriptor o
|
124
|
+
# TODO: transformer lambda
|
125
|
+
['first-found', do_dump(o.producers)]
|
126
|
+
end
|
127
|
+
|
128
|
+
def dump_ArrayMultibindProducerDescriptor o
|
129
|
+
['multibind-array']
|
130
|
+
end
|
131
|
+
|
132
|
+
def dump_HashMultibindProducerDescriptor o
|
133
|
+
['multibind-hash']
|
134
|
+
end
|
135
|
+
|
136
|
+
def dump_NamedArgument o
|
137
|
+
"#{o.name} => #{do_dump(o.value)}"
|
138
|
+
end
|
139
|
+
|
140
|
+
def dump_Binding o
|
141
|
+
result = ['bind']
|
142
|
+
result << 'override' if o.override
|
143
|
+
result << 'abstract' if o.abstract
|
144
|
+
result.concat([do_dump(o.type), o.name])
|
145
|
+
result << "(in #{o.multibind_id})" if o.multibind_id
|
146
|
+
result << ['to', do_dump(o.producer)] + do_dump(o.producer_args)
|
147
|
+
result
|
148
|
+
end
|
149
|
+
|
150
|
+
def dump_Multibinding o
|
151
|
+
result = ['multibind', o.id]
|
152
|
+
result << 'override' if o.override
|
153
|
+
result << 'abstract' if o.abstract
|
154
|
+
result.concat([do_dump(o.type), o.name])
|
155
|
+
result << "(in #{o.multibind_id})" if o.multibind_id
|
156
|
+
result << ['to', do_dump(o.producer)] + do_dump(o.producer_args)
|
157
|
+
result
|
158
|
+
end
|
159
|
+
|
160
|
+
def dump_Bindings o
|
161
|
+
do_dump(o.bindings)
|
162
|
+
end
|
163
|
+
|
164
|
+
def dump_NamedBindings o
|
165
|
+
result = ['named-bindings', o.name, :indent]
|
166
|
+
o.bindings.each do |b|
|
167
|
+
result << :break
|
168
|
+
result << do_dump(b)
|
169
|
+
end
|
170
|
+
result << :dedent
|
171
|
+
result
|
172
|
+
end
|
173
|
+
|
174
|
+
def dump_Category o
|
175
|
+
['category', o.categorization, do_dump(o.value)]
|
176
|
+
end
|
177
|
+
|
178
|
+
def dump_CategorizedBindings o
|
179
|
+
result = ['when', do_dump(o.predicates), :indent]
|
180
|
+
o.bindings.each do |b|
|
181
|
+
result << :break
|
182
|
+
result << do_dump(b)
|
183
|
+
end
|
184
|
+
result << :dedent
|
185
|
+
result
|
186
|
+
end
|
187
|
+
|
188
|
+
def dump_LayeredBindings o
|
189
|
+
result = ['layers', :indent]
|
190
|
+
o.layers.each do |layer|
|
191
|
+
result << :break
|
192
|
+
result << do_dump(layer)
|
193
|
+
end
|
194
|
+
result << :dedent
|
195
|
+
result
|
196
|
+
end
|
197
|
+
|
198
|
+
def dump_EffectiveCategories o
|
199
|
+
['categories', do_dump(o.categories)]
|
200
|
+
end
|
201
|
+
|
202
|
+
def dump_ContributedBindings o
|
203
|
+
['contributed', o.name, do_dump(o.effective_categories), do_dump(o.bindings)]
|
204
|
+
end
|
205
|
+
end
|