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,67 @@
|
|
1
|
+
# Similar to {Puppet::Pops::Binder::SchemeHandler::ModuleHieraScheme ModuleHieraScheme} but path is
|
2
|
+
# relative to the `$confdir` instead of relative to a module root.
|
3
|
+
#
|
4
|
+
# Does not handle wild-cards.
|
5
|
+
# @api public
|
6
|
+
class Puppet::Pops::Binder::SchemeHandler::ConfdirHieraScheme < Puppetx::Puppet::BindingsSchemeHandler
|
7
|
+
|
8
|
+
# (Puppetx::Puppet::BindingsSchemeHandler.contributed_bindings)
|
9
|
+
#
|
10
|
+
def contributed_bindings(uri, scope, composer)
|
11
|
+
split_path = uri.path.split('/')
|
12
|
+
name = split_path[1]
|
13
|
+
confdir = composer.confdir
|
14
|
+
provider = Puppet::Pops::Binder::Hiera2::BindingsProvider.new(uri.to_s, File.join(confdir, uri.path), composer.acceptor)
|
15
|
+
provider.load_bindings(scope)
|
16
|
+
end
|
17
|
+
|
18
|
+
# This handler does not support wildcards.
|
19
|
+
# The given uri is simply returned in an array.
|
20
|
+
# @param uri [URI] the uri to expand
|
21
|
+
# @return [Array<URI>] the uri wrapped in an array
|
22
|
+
# @todo Handle optional and possibly hiera-1 hiera.yaml config file in the expected location (the same as missing)
|
23
|
+
# @api public
|
24
|
+
#
|
25
|
+
def expand_included(uri, composer)
|
26
|
+
result = []
|
27
|
+
if config_exist?(uri, composer)
|
28
|
+
result << uri unless is_ignored_hiera_version?(uri, composer)
|
29
|
+
else
|
30
|
+
result << uri unless is_optional?(uri)
|
31
|
+
end
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
# This handler does not support wildcards.
|
36
|
+
# The given uri is simply returned in an array.
|
37
|
+
# @param uri [URI] the uri to expand
|
38
|
+
# @return [Array<URI>] the uri wrapped in an array
|
39
|
+
# @api public
|
40
|
+
#
|
41
|
+
def expand_excluded(uri, composer)
|
42
|
+
[uri]
|
43
|
+
end
|
44
|
+
|
45
|
+
def config_exist?(uri, composer)
|
46
|
+
File.exist?(File.join(composer.confdir, uri.path, 'hiera.yaml'))
|
47
|
+
end
|
48
|
+
|
49
|
+
# A hiera.yaml that exists, is readable, can be loaded, and does not have version >= 2 set is ignored.
|
50
|
+
# All other conditions are reported as 'not ignored' even if there are errors; these will be handled later
|
51
|
+
# as if the hiera.yaml is a hiera-2 file.
|
52
|
+
# @api private
|
53
|
+
def is_ignored_hiera_version?(uri, composer)
|
54
|
+
config_file = File.join(composer.confdir, uri.path, 'hiera.yaml')
|
55
|
+
begin
|
56
|
+
data = YAML.load_file(config_file)
|
57
|
+
if data.is_a?(Hash)
|
58
|
+
ver = data[:version] || data['version']
|
59
|
+
return ver.nil? || ver < 2
|
60
|
+
end
|
61
|
+
rescue Errno::ENOENT
|
62
|
+
rescue Errno::ENOTDIR
|
63
|
+
rescue ::SyntaxError => e
|
64
|
+
end
|
65
|
+
return false
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'puppet/pops/binder/scheme_handler/symbolic_scheme'
|
2
|
+
|
3
|
+
# Similar to {Puppet::Pops::Binder::SchemeHandler::ModuleScheme ModuleScheme}, but relative to the config root.
|
4
|
+
# Does not support wildcard expansion.
|
5
|
+
#
|
6
|
+
# URI
|
7
|
+
# ---
|
8
|
+
# The URI scheme is `confdir:/[<FQN>]['?' | [?optional]` where FQN is the fully qualified name of the bindings to load.
|
9
|
+
# The referecence is made optional by using a URI query of `?` or `?optional`.
|
10
|
+
#
|
11
|
+
# @todo
|
12
|
+
# If the file to load is outside of the file system rooted at $confdir (in a gem, or just on the Ruby path), it can not
|
13
|
+
# be marked as optional as it will always be ignored.
|
14
|
+
#
|
15
|
+
class Puppet::Pops::Binder::SchemeHandler::ConfdirScheme < Puppet::Pops::Binder::SchemeHandler::SymbolicScheme
|
16
|
+
|
17
|
+
def expand_included(uri, composer)
|
18
|
+
fqn = fqn_from_path(uri)[1]
|
19
|
+
if is_optional?(uri)
|
20
|
+
if Puppet::Pops::Binder::BindingsLoader.loadable?(composer.confdir, fqn)
|
21
|
+
[URI.parse('confdir:/' + fqn)]
|
22
|
+
else
|
23
|
+
[]
|
24
|
+
end
|
25
|
+
else
|
26
|
+
# assume it exists (do not give error if not, since it may be excluded later)
|
27
|
+
[URI.parse('confdir:/' + fqn)]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def expand_excluded(uri, composer)
|
32
|
+
[URI.parse("confdir:/#{fqn_from_path(uri)[1]}")]
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# The `module-hiera:` scheme uses the path to denote a directory relative to a module root
|
2
|
+
# The path starts with the name of the module, or '*' to denote *any module*.
|
3
|
+
#
|
4
|
+
# @example All root hiera.yaml from all modules.
|
5
|
+
# module-hiera:/*
|
6
|
+
#
|
7
|
+
# @example The hiera.yaml from the module `foo`'s relative path `<foo root>/bar`.
|
8
|
+
# module-hiera:/foo/bar
|
9
|
+
#
|
10
|
+
class Puppet::Pops::Binder::SchemeHandler::ModuleHieraScheme < Puppetx::Puppet::BindingsSchemeHandler
|
11
|
+
# (Puppetx::Puppet::BindingsSchemeHandler.contributed_bindings)
|
12
|
+
# @api public
|
13
|
+
def contributed_bindings(uri, scope, composer)
|
14
|
+
split_path = uri.path.split('/')
|
15
|
+
name = split_path[1]
|
16
|
+
mod = composer.name_to_module[name]
|
17
|
+
provider = Puppet::Pops::Binder::Hiera2::BindingsProvider.new(uri.to_s, File.join(mod.path, split_path[ 2..-1 ]), composer.acceptor)
|
18
|
+
provider.load_bindings(scope)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Expands URIs with wildcards and checks optionality.
|
22
|
+
# @param uri [URI] the uri to possibly expand
|
23
|
+
# @return [Array<URI>] the URIs to include
|
24
|
+
# @api public
|
25
|
+
#
|
26
|
+
def expand_included(uri, composer)
|
27
|
+
result = []
|
28
|
+
split_path = uri.path.split('/')
|
29
|
+
if split_path.size > 1 && split_path[-1].empty?
|
30
|
+
split_path.delete_at(-1)
|
31
|
+
end
|
32
|
+
|
33
|
+
# 0 = "", since a URI with a path must start with '/'
|
34
|
+
# 1 = '*' or the module name
|
35
|
+
case split_path[ 1 ]
|
36
|
+
when '*'
|
37
|
+
# create new URIs, one per module name that has a hiera.yaml file relative to its root
|
38
|
+
composer.name_to_module.each_pair do | name, mod |
|
39
|
+
if File.exist?(File.join(mod.path, split_path[ 2..-1 ], 'hiera.yaml' ))
|
40
|
+
path_parts =["", name] + split_path[2..-1]
|
41
|
+
result << URI.parse('module-hiera:'+File.join(path_parts))
|
42
|
+
end
|
43
|
+
end
|
44
|
+
when nil
|
45
|
+
raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
|
46
|
+
else
|
47
|
+
# If uri has query that is empty, or the text 'optional' skip this uri if it does not exist
|
48
|
+
if query = uri.query()
|
49
|
+
if query == '' || query == 'optional'
|
50
|
+
if File.exist?(File.join(mod.path, split_path[ 2..-1 ], 'hiera.yaml' ))
|
51
|
+
result << URI.parse('module-hiera:' + uri.path)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
else
|
55
|
+
# assume it exists (do not give error since it may be excluded later)
|
56
|
+
result << URI.parse('module-hiera:' + File.join(split_path))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
result
|
60
|
+
end
|
61
|
+
|
62
|
+
# Expands URIs with wildcards and checks optionality.
|
63
|
+
# @param uri [URI] the uri to possibly expand
|
64
|
+
# @return [Array<URI>] the URIs to exclude
|
65
|
+
# @api public
|
66
|
+
#
|
67
|
+
def expand_excluded(uri, composer)
|
68
|
+
result = []
|
69
|
+
split_path = uri.path.split('/')
|
70
|
+
if split_path.size > 1 && split_path[-1].empty?
|
71
|
+
split_path.delete_at(-1)
|
72
|
+
end
|
73
|
+
|
74
|
+
# 0 = "", since a URI with a path must start with '/'
|
75
|
+
# 1 = '*' or the module name
|
76
|
+
case split_path[ 1 ]
|
77
|
+
when '*'
|
78
|
+
# create new URIs, one per module name that has a hiera.yaml file relative to its root
|
79
|
+
composer.name_to_module.each_pair do | name, mod |
|
80
|
+
path_parts =["", mod.name] + split_path[2..-1]
|
81
|
+
result << URI.parse('module-hiera:'+File.join(path_parts))
|
82
|
+
end
|
83
|
+
|
84
|
+
when nil
|
85
|
+
raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
|
86
|
+
else
|
87
|
+
# create a clean copy (get rid of optional, fragments etc. and a trailing "/")
|
88
|
+
result << URI.parse('module-hiera:' + File.join(split_path))
|
89
|
+
end
|
90
|
+
result
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'puppet/pops/binder/scheme_handler/symbolic_scheme'
|
2
|
+
|
3
|
+
# The module scheme allows loading bindings using the Puppet autoloader.
|
4
|
+
# Optional uris are handled by checking if the symbolic name can be resolved to a loadable file
|
5
|
+
# from modules.
|
6
|
+
#
|
7
|
+
# URI
|
8
|
+
# ---
|
9
|
+
# The uri is on the format: `module:/[fqn][? | ?optional]` where `fqn` is a fully qualified bindings name
|
10
|
+
# starting with the module name or '*' to denote 'any module'. A URI query of `?` or `?optional` makes the
|
11
|
+
# request optional; if no loadable file is found, it is simply skipped.
|
12
|
+
#
|
13
|
+
#
|
14
|
+
# @todo
|
15
|
+
# Does currently only support checking of optionality against files under a module. If the result should be loaded
|
16
|
+
# from any other location it can not be marked as optional as it will be ignored.
|
17
|
+
#
|
18
|
+
class Puppet::Pops::Binder::SchemeHandler::ModuleScheme < Puppet::Pops::Binder::SchemeHandler::SymbolicScheme
|
19
|
+
|
20
|
+
# Expands URIs with wildcards and checks optionality.
|
21
|
+
# @param uri [URI] the uri to possibly expand
|
22
|
+
# @return [Array<URI>] the URIs to include
|
23
|
+
# @api public
|
24
|
+
#
|
25
|
+
def expand_included(uri, composer)
|
26
|
+
result = []
|
27
|
+
split_name, fqn = fqn_from_path(uri)
|
28
|
+
|
29
|
+
# supports wild card in the module name
|
30
|
+
case split_name[0]
|
31
|
+
when '*'
|
32
|
+
# create new URIs, one per module name that has a corresponding .rb file relative to its
|
33
|
+
# '<root>/lib/puppet/bindings/'
|
34
|
+
#
|
35
|
+
composer.name_to_module.each_pair do | mod_name, mod |
|
36
|
+
expanded_name_parts = [mod_name] + split_name[1..-1]
|
37
|
+
expanded_name = expanded_name_parts.join('::')
|
38
|
+
if Puppet::Pops::Binder::BindingsLoader.loadable?(mod.path, expanded_name)
|
39
|
+
result << URI.parse('module:/' + expanded_name)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
when nil
|
43
|
+
raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
|
44
|
+
else
|
45
|
+
joined_name = split_name.join('::')
|
46
|
+
# skip optional uri if it does not exist
|
47
|
+
if is_optional?(uri)
|
48
|
+
mod = composer.name_to_module[split_name[0]]
|
49
|
+
if mod && Puppet::Binder::BindingsLoader.loadable?(mod.path, joined_name)
|
50
|
+
result << URI.parse('module:/' + joined_name)
|
51
|
+
end
|
52
|
+
else
|
53
|
+
# assume it exists (do not give error if not, since it may be excluded later)
|
54
|
+
result << URI.parse('module:/' + joined_name)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
result
|
58
|
+
end
|
59
|
+
|
60
|
+
# Expands URIs with wildcards
|
61
|
+
# @param uri [URI] the uri to possibly expand
|
62
|
+
# @return [Array<URI>] the URIs to exclude
|
63
|
+
# @api public
|
64
|
+
#
|
65
|
+
def expand_excluded(uri, composer)
|
66
|
+
result = []
|
67
|
+
split_name, fqn = fqn_from_path(uri)
|
68
|
+
|
69
|
+
case split_name[ 0 ]
|
70
|
+
when '*'
|
71
|
+
# create new URIs, one per module name
|
72
|
+
composer.name_to_module.each_pair do | name, mod |
|
73
|
+
result << URI.parse('module:/' + ([name] + split_name).join('::'))
|
74
|
+
end
|
75
|
+
|
76
|
+
when nil
|
77
|
+
raise ArgumentError, "Bad bindings uri, the #{uri} has neither module name or wildcard '*' in its first path position"
|
78
|
+
else
|
79
|
+
# create a clean copy (get rid of optional, fragments etc. and any trailing stuff
|
80
|
+
result << URI.parse('module:/' + split_name.join('::'))
|
81
|
+
end
|
82
|
+
result
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# Abstract base class for schemes based on symbolic names of bindings.
|
2
|
+
# This class helps resolve symbolic names by computing a path from a fully qualified name (fqn).
|
3
|
+
# There are also helper methods do determine if the symbolic name contains a wild-card ('*') in the first
|
4
|
+
# portion of the fqn (with the convention that '*' means 'any module').
|
5
|
+
#
|
6
|
+
# @abstract
|
7
|
+
# @api public
|
8
|
+
#
|
9
|
+
class Puppet::Pops::Binder::SchemeHandler::SymbolicScheme < Puppetx::Puppet::BindingsSchemeHandler
|
10
|
+
|
11
|
+
# Shared implementation for module: and confdir: since the distinction is only in checks if a symbolic name
|
12
|
+
# exists as a loadable file or not. Once this method is called it is assumed that the name is relative
|
13
|
+
# and that it should exist relative to some loadable ruby location.
|
14
|
+
#
|
15
|
+
# TODO: this needs to be changed once ARM-8 Puppet DSL concrete syntax is also supported.
|
16
|
+
# @api public
|
17
|
+
#
|
18
|
+
def contributed_bindings(uri, scope, composer)
|
19
|
+
fqn = fqn_from_path(uri)[1]
|
20
|
+
bindings = Puppet::Pops::Binder::BindingsLoader.provide(scope, fqn)
|
21
|
+
raise ArgumentError, "Cannot load bindings '#{uri}' - no bindings found." unless bindings
|
22
|
+
# Must clone as the the rest mutates the model
|
23
|
+
cloned_bindings = Marshal.load(Marshal.dump(bindings))
|
24
|
+
# Give no effective categories (i.e. ok with whatever categories there is)
|
25
|
+
Puppet::Pops::Binder::BindingsFactory.contributed_bindings(fqn, cloned_bindings, nil)
|
26
|
+
end
|
27
|
+
|
28
|
+
# @api private
|
29
|
+
def fqn_from_path(uri)
|
30
|
+
split_path = uri.path.split('/')
|
31
|
+
if split_path.size > 1 && split_path[-1].empty?
|
32
|
+
split_path.delete_at(-1)
|
33
|
+
end
|
34
|
+
|
35
|
+
fqn = split_path[ 1 ]
|
36
|
+
raise ArgumentError, "Module scheme binding reference has no name." unless fqn
|
37
|
+
split_name = fqn.split('::')
|
38
|
+
# drop leading '::'
|
39
|
+
split_name.shift if split_name[0] && split_name[0].empty?
|
40
|
+
[split_name, split_name.join('::')]
|
41
|
+
end
|
42
|
+
|
43
|
+
# True if super thinks it is optional or if it contains a wildcard.
|
44
|
+
# @return [Boolean] true if the uri represents an optional set of bindings.
|
45
|
+
# @api public
|
46
|
+
def is_optional?(uri)
|
47
|
+
super(uri) || has_wildcard?(uri)
|
48
|
+
end
|
49
|
+
|
50
|
+
# @api private
|
51
|
+
def has_wildcard?(uri)
|
52
|
+
(path = uri.path) && path.split('/')[1].start_with?('*::')
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
class Puppet::Pops::Binder::SystemBindings
|
2
|
+
# Constant with name used for bindings used during initialization of injector
|
3
|
+
ENVIRONMENT_BOOT_BINDINGS_NAME = 'puppet::env::injector::boot'
|
4
|
+
|
5
|
+
Factory = Puppet::Pops::Binder::BindingsFactory
|
6
|
+
@extension_bindings = Factory.named_bindings("puppet::extensions")
|
7
|
+
@default_bindings = Factory.named_bindings("puppet::default")
|
8
|
+
# Bindings in effect when real injector is created
|
9
|
+
@injector_boot_bindings = Factory.named_bindings("puppet::injector_boot")
|
10
|
+
|
11
|
+
def self.extensions()
|
12
|
+
@extension_bindings
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.default_bindings()
|
16
|
+
@default_bindings
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.injector_boot_bindings()
|
20
|
+
@injector_boot_bindings
|
21
|
+
end
|
22
|
+
|
23
|
+
# def self.env_boot_bindings()
|
24
|
+
# Puppet::Bindings[Puppet::Pops::Binder::SystemBindings::ENVIRONMENT_BOOT_BINDINGS_NAME]
|
25
|
+
# end
|
26
|
+
|
27
|
+
def self.final_contribution
|
28
|
+
effective_categories = Factory.categories([['common', 'true']])
|
29
|
+
Factory.contributed_bindings("puppet-final", [deep_clone(@extension_bindings.model)], effective_categories)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.default_contribution
|
33
|
+
effective_categories = Factory.categories([['common', 'true']])
|
34
|
+
Factory.contributed_bindings("puppet-default", [deep_clone(@default_bindings.model)], effective_categories)
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.injector_boot_contribution(env_boot_bindings)
|
38
|
+
# Compose the injector_boot_bindings contributed from the puppet runtime book (i.e. defaults for
|
39
|
+
# extensions that should be active in the boot injector - see Puppetx initialization.
|
40
|
+
#
|
41
|
+
bindings = [deep_clone(@injector_boot_bindings.model), deep_clone(@injector_default_bindings)]
|
42
|
+
|
43
|
+
# Add the bindings that come from the bindings_composer as it may define custom extensions added in the bindings
|
44
|
+
# configuration. (i.e. bindings required to be able to lookup using bindings schemes and backends when
|
45
|
+
# configuring the real injector).
|
46
|
+
#
|
47
|
+
bindings << env_boot_bindings unless env_boot_bindings.nil?
|
48
|
+
|
49
|
+
# Use an 'extension' category for extension bindings to allow them to override the default
|
50
|
+
# bindings since they are placed in the same layer (this is done to avoid having a separate layer).
|
51
|
+
# The purpose for allowing overrides is that someone may want to replace say 'yaml' with a different version,
|
52
|
+
# (say one that uses a YAML implementation that actually works ok in ruby 1.8.7 ;-)), an encrypted parser, etc.
|
53
|
+
effective_categories = Factory.categories([['extension', 'true'],['common', 'true']])
|
54
|
+
|
55
|
+
# return the composition and the cateogires.
|
56
|
+
Factory.contributed_bindings("puppet-injector-boot", bindings, effective_categories)
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.factory()
|
60
|
+
Puppet::Pops::Binder::BindingsFactory
|
61
|
+
end
|
62
|
+
|
63
|
+
def self.type_factory()
|
64
|
+
Puppet::Pops::Types::TypeFactory
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def self.deep_clone(o)
|
70
|
+
Marshal.load(Marshal.dump(o))
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
class Puppet::Pops::IssueReporter
|
2
|
+
|
3
|
+
# @param acceptor [Puppet::Pops::Validation::Acceptor] the acceptor containing reported issues
|
4
|
+
# @option options [String] :message (nil) A message text to use as prefix in a single Error message
|
5
|
+
# @option options [Boolean] :emit_warnings (false) A message text to use as prefix in a single Error message
|
6
|
+
# @option options [Boolean] :emit_errors (true) whether errors should be emitted or only given message
|
7
|
+
# @option options [Exception] :exception_class (Puppet::ParseError) The exception to raise
|
8
|
+
#
|
9
|
+
def self.assert_and_report(acceptor, options)
|
10
|
+
return unless acceptor
|
11
|
+
|
12
|
+
max_errors = Puppet[:max_errors]
|
13
|
+
max_warnings = Puppet[:max_warnings] + 1
|
14
|
+
max_deprecations = Puppet[:max_deprecations] + 1
|
15
|
+
emit_warnings = options[:emit_warnings] || false
|
16
|
+
emit_errors = options[:emit_errors] || true
|
17
|
+
emit_message = options[:message]
|
18
|
+
emit_exception = options[:exception_class] || Puppet::ParseError
|
19
|
+
|
20
|
+
# If there are warnings output them
|
21
|
+
warnings = acceptor.warnings
|
22
|
+
if emit_warnings && warnings.size > 0
|
23
|
+
formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new
|
24
|
+
emitted_w = 0
|
25
|
+
emitted_dw = 0
|
26
|
+
acceptor.warnings.each do |w|
|
27
|
+
if w.severity == :deprecation
|
28
|
+
# Do *not* call Puppet.deprecation_warning it is for internal deprecation, not
|
29
|
+
# deprecation of constructs in manifests! (It is not designed for that purpose even if
|
30
|
+
# used throughout the code base).
|
31
|
+
#
|
32
|
+
Puppet.warning(formatter.format(w)) if emitted_dw < max_deprecations
|
33
|
+
emitted_dw += 1
|
34
|
+
else
|
35
|
+
Puppet.warning(formatter.format(w)) if emitted_w < max_warnings
|
36
|
+
emitted_w += 1
|
37
|
+
end
|
38
|
+
break if emitted_w > max_warnings && emitted_dw > max_deprecations # but only then
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# If there were errors, report the first found. Use a puppet style formatter.
|
43
|
+
errors = acceptor.errors
|
44
|
+
if errors.size > 0
|
45
|
+
unless emit_errors
|
46
|
+
raise emit_exception.new(emit_message)
|
47
|
+
end
|
48
|
+
formatter = Puppet::Pops::Validation::DiagnosticFormatterPuppetStyle.new
|
49
|
+
if errors.size == 1 || max_errors <= 1
|
50
|
+
# raise immediately
|
51
|
+
raise emit_exception.new(format_with_prefix(emit_message, formatter.format(errors[0])))
|
52
|
+
end
|
53
|
+
emitted = 0
|
54
|
+
if emit_message
|
55
|
+
Puppet.err(emit_message)
|
56
|
+
end
|
57
|
+
errors.each do |e|
|
58
|
+
Puppet.err(formatter.format(e))
|
59
|
+
emitted += 1
|
60
|
+
break if emitted >= max_errors
|
61
|
+
end
|
62
|
+
warnings_message = (emit_warnings && warnings.size > 0) ? ", and #{warnings.size} warnings" : ""
|
63
|
+
giving_up_message = "Found #{errors.size} errors#{warnings_message}. Giving up"
|
64
|
+
exception = emit_exception.new(giving_up_message)
|
65
|
+
exception.file = errors[0].file
|
66
|
+
raise exception
|
67
|
+
end
|
68
|
+
parse_result
|
69
|
+
end
|
70
|
+
|
71
|
+
def self.format_with_prefix(prefix, message)
|
72
|
+
return message unless prefix
|
73
|
+
[prefix, message].join(' ')
|
74
|
+
end
|
75
|
+
end
|