puppet 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/hiera/scope.rb +1 -1
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +45 -47
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +6 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +16 -8
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +140 -387
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +16 -9
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +65 -28
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +17 -0
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/collection_spec.rb +8 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/json_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +88 -47
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +99 -50
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +46 -38
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
#
|
|
4
4
|
class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
|
|
5
5
|
|
|
6
|
-
LOOKUP_OPTIONS =
|
|
6
|
+
LOOKUP_OPTIONS = Puppet::Pops::Lookup::LOOKUP_OPTIONS
|
|
7
|
+
LOOKUP_OPTIONS_PREFIX = LOOKUP_OPTIONS + '.'
|
|
8
|
+
LOOKUP_OPTIONS_PREFIX.freeze
|
|
7
9
|
HASH = 'hash'.freeze
|
|
8
10
|
MERGE = 'merge'.freeze
|
|
9
11
|
|
|
@@ -29,12 +31,43 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
|
|
|
29
31
|
# @throws :no_such_key if the given key is not found
|
|
30
32
|
#
|
|
31
33
|
def lookup(key, lookup_invocation, merge)
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
# The 'lookup_options' key is reserved and not found as normal data
|
|
35
|
+
if key == LOOKUP_OPTIONS || key.start_with?(LOOKUP_OPTIONS_PREFIX)
|
|
36
|
+
lookup_invocation.with(:invalid_key, LOOKUP_OPTIONS) do
|
|
37
|
+
throw :no_such_key
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
lookup_invocation.top_key ||= key
|
|
42
|
+
merge_explained = false
|
|
43
|
+
if lookup_invocation.explain_options?
|
|
44
|
+
catch(:no_such_key) do
|
|
45
|
+
module_name = extract_module_name(key) unless key == Puppet::Pops::Lookup::GLOBAL
|
|
46
|
+
lookup_invocation.module_name = module_name
|
|
47
|
+
if lookup_invocation.only_explain_options?
|
|
48
|
+
do_lookup(LOOKUP_OPTIONS, lookup_invocation, HASH)
|
|
49
|
+
return nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Bypass cache and do a "normal" lookup of the lookup_options
|
|
53
|
+
lookup_invocation.with(:meta, LOOKUP_OPTIONS) do
|
|
54
|
+
key_options = do_lookup(LOOKUP_OPTIONS, lookup_invocation, HASH)[key]
|
|
55
|
+
merge = key_options[MERGE] unless key_options.nil?
|
|
56
|
+
merge_explained = true
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
elsif merge.nil?
|
|
60
|
+
# Used cached lookup_options
|
|
61
|
+
merge = lookup_merge_options(key, lookup_invocation)
|
|
62
|
+
lookup_invocation.report_merge_source('lookup_options') unless merge.nil?
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if merge_explained
|
|
66
|
+
# Merge lookup is explained in detail so we need to explain the data in a section
|
|
67
|
+
# on the same level to avoid confusion
|
|
68
|
+
lookup_invocation.with(:data, key) { do_lookup(key, lookup_invocation, merge) }
|
|
69
|
+
else
|
|
70
|
+
do_lookup(key, lookup_invocation, merge)
|
|
38
71
|
end
|
|
39
72
|
end
|
|
40
73
|
|
|
@@ -44,13 +77,15 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
|
|
|
44
77
|
lookup_invocation.with(:global, terminus) do
|
|
45
78
|
catch(:no_such_key) do
|
|
46
79
|
return lookup_invocation.report_found(name, Puppet::DataBinding.indirection.find(name,
|
|
47
|
-
{ :environment => @env
|
|
80
|
+
{ :environment => @env, :variables => lookup_invocation.scope, :merge => merge_strategy }))
|
|
48
81
|
end
|
|
49
82
|
lookup_invocation.report_not_found(name)
|
|
50
83
|
throw :no_such_key
|
|
51
84
|
end
|
|
52
|
-
rescue Puppet::DataBinding::LookupError =>
|
|
53
|
-
|
|
85
|
+
rescue Puppet::DataBinding::LookupError => detail
|
|
86
|
+
error = Puppet::Error.new("Lookup of key '#{lookup_invocation.top_key}' failed: #{detail.message}")
|
|
87
|
+
error.set_backtrace(detail.backtrace)
|
|
88
|
+
raise error
|
|
54
89
|
end
|
|
55
90
|
|
|
56
91
|
# @api private
|
|
@@ -60,7 +95,7 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
|
|
|
60
95
|
|
|
61
96
|
# @api private
|
|
62
97
|
def lookup_in_module(name, lookup_invocation, merge_strategy)
|
|
63
|
-
module_name = extract_module_name(name)
|
|
98
|
+
module_name = lookup_invocation.module_name || extract_module_name(name)
|
|
64
99
|
|
|
65
100
|
# Do not attempt to do a lookup in a module unless the name is qualified.
|
|
66
101
|
throw :no_such_key if module_name.nil?
|
|
@@ -95,41 +130,52 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
|
|
|
95
130
|
module_name = extract_module_name(name)
|
|
96
131
|
|
|
97
132
|
# Retrieve the options for the module. We use nil as a key in case we have none
|
|
98
|
-
|
|
99
|
-
if options.nil? && !@lookup_options.include?(module_name)
|
|
133
|
+
if !@lookup_options.include?(module_name)
|
|
100
134
|
options = retrieve_lookup_options(module_name, lookup_invocation, Puppet::Pops::MergeStrategy.strategy(HASH))
|
|
101
135
|
raise Puppet::DataBinding::LookupError.new("value of #{LOOKUP_OPTIONS} must be a hash") unless options.nil? || options.is_a?(Hash)
|
|
102
136
|
@lookup_options[module_name] = options
|
|
137
|
+
else
|
|
138
|
+
options = @lookup_options[module_name]
|
|
103
139
|
end
|
|
104
140
|
options.nil? ? nil : options[name]
|
|
105
141
|
end
|
|
106
142
|
|
|
107
143
|
private
|
|
108
144
|
|
|
145
|
+
def do_lookup(key, lookup_invocation, merge)
|
|
146
|
+
merge_strategy = Puppet::Pops::MergeStrategy.strategy(merge)
|
|
147
|
+
lookup_invocation.with(:merge, merge_strategy) do
|
|
148
|
+
result = merge_strategy.merge_lookup([:lookup_global, :lookup_in_environment, :lookup_in_module]) { |m| send(m, key, lookup_invocation, merge_strategy) }
|
|
149
|
+
lookup_invocation.report_result(result)
|
|
150
|
+
result
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
109
154
|
# Retrieve lookup options that applies when using a specific module (i.e. a merge of the pre-cached
|
|
110
155
|
# `env_lookup_options` and the module specific data)
|
|
111
156
|
def retrieve_lookup_options(module_name, lookup_invocation, merge_strategy)
|
|
112
|
-
lookup_invocation.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
157
|
+
meta_invocation = Puppet::Pops::Lookup::Invocation.new(lookup_invocation.scope)
|
|
158
|
+
meta_invocation.top_key = lookup_invocation.top_key
|
|
159
|
+
env_opts = env_lookup_options(meta_invocation, merge_strategy)
|
|
160
|
+
unless module_name.nil? || @env.module(module_name).nil?
|
|
161
|
+
catch(:no_such_key) do
|
|
162
|
+
meta_invocation.module_name = module_name
|
|
163
|
+
options = module_provider(module_name).lookup(LOOKUP_OPTIONS, meta_invocation, merge_strategy)
|
|
164
|
+
options = merge_strategy.merge(env_opts, options) unless env_opts.nil?
|
|
165
|
+
return options
|
|
120
166
|
end
|
|
121
|
-
options.nil? ? env_opts : options
|
|
122
167
|
end
|
|
168
|
+
env_opts
|
|
123
169
|
end
|
|
124
170
|
|
|
125
171
|
# Retrieve and cache lookup options specific to the environment that this adapter is attached to (i.e. a merge
|
|
126
172
|
# of global and environment lookup options).
|
|
127
|
-
def env_lookup_options(
|
|
128
|
-
|
|
173
|
+
def env_lookup_options(meta_invocation, merge_strategy)
|
|
174
|
+
if !instance_variable_defined?(:@env_lookup_options)
|
|
129
175
|
@env_lookup_options = nil
|
|
130
176
|
catch(:no_such_key) do
|
|
131
177
|
@env_lookup_options = merge_strategy.merge_lookup([:lookup_global, :lookup_in_environment]) do |m|
|
|
132
|
-
send(m, LOOKUP_OPTIONS,
|
|
178
|
+
send(m, LOOKUP_OPTIONS, meta_invocation, merge_strategy)
|
|
133
179
|
end
|
|
134
180
|
end
|
|
135
181
|
end
|
|
@@ -170,7 +216,8 @@ class Puppet::DataProviders::LookupAdapter < Puppet::DataProviders::DataAdapter
|
|
|
170
216
|
unless provider
|
|
171
217
|
raise Puppet::Error.new("Environment '#{@env.name}', cannot find module_data_provider '#{provider_name}'")
|
|
172
218
|
end
|
|
173
|
-
|
|
219
|
+
# Provider is configured per module but cached using environment life cycle so it must be cloned
|
|
220
|
+
provider.clone
|
|
174
221
|
end
|
|
175
222
|
|
|
176
223
|
def initialize_env_provider
|
|
@@ -5,8 +5,8 @@ require_relative 'hiera_interpolate'
|
|
|
5
5
|
|
|
6
6
|
module Puppet::DataProviders
|
|
7
7
|
class YamlDataProviderFactory < Puppet::Plugins::DataProviders::FileBasedDataProviderFactory
|
|
8
|
-
def create(name, paths)
|
|
9
|
-
YamlDataProvider.new(name, paths)
|
|
8
|
+
def create(name, paths, parent_data_provider)
|
|
9
|
+
YamlDataProvider.new(name, paths, parent_data_provider)
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def path_extension
|
data/lib/puppet/defaults.rb
CHANGED
|
@@ -111,10 +111,11 @@ module Puppet
|
|
|
111
111
|
|
|
112
112
|
Valid values for this setting are:
|
|
113
113
|
|
|
114
|
-
* `deprecations` --- disables deprecation warnings.
|
|
114
|
+
* `deprecations` --- disables deprecation warnings.
|
|
115
|
+
* `undefined_variables` --- disables warnings about non existing variables.",
|
|
115
116
|
:hook => proc do |value|
|
|
116
117
|
values = munge(value)
|
|
117
|
-
valid = %w[deprecations]
|
|
118
|
+
valid = %w[deprecations undefined_variables]
|
|
118
119
|
invalid = values - (values & valid)
|
|
119
120
|
if not invalid.empty?
|
|
120
121
|
raise ArgumentError, "Cannot disable unrecognized warning types #{invalid.inspect}. Valid values are #{valid.inspect}."
|
|
@@ -147,6 +148,17 @@ module Puppet
|
|
|
147
148
|
:type => :boolean,
|
|
148
149
|
:desc => "Whether to enable experimental performance profiling",
|
|
149
150
|
},
|
|
151
|
+
:static_catalogs => {
|
|
152
|
+
:default => true,
|
|
153
|
+
:type => :boolean,
|
|
154
|
+
:desc => "Whether to compile a static catalog."
|
|
155
|
+
},
|
|
156
|
+
:strict_environment_mode => {
|
|
157
|
+
:default => false,
|
|
158
|
+
:type => :boolean,
|
|
159
|
+
:desc => "Whether the agent specified environment should be considered authoritative,
|
|
160
|
+
causing the run to fail if the retrieved catalog does not match it.",
|
|
161
|
+
},
|
|
150
162
|
:autoflush => {
|
|
151
163
|
:default => true,
|
|
152
164
|
:type => :boolean,
|
|
@@ -233,11 +245,11 @@ module Puppet
|
|
|
233
245
|
be set in `[master]`, `[agent]`, or an environment config section.",
|
|
234
246
|
:call_hook => :on_define_and_write,
|
|
235
247
|
:hook => proc do |value|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
paths =
|
|
248
|
+
Puppet::Util.set_env('PATH', '') if Puppet::Util.get_env('PATH').nil?
|
|
249
|
+
Puppet::Util.set_env('PATH', value) unless value == 'none'
|
|
250
|
+
paths = Puppet::Util.get_env('PATH').split(File::PATH_SEPARATOR)
|
|
239
251
|
Puppet::Util::Platform.default_paths.each do |path|
|
|
240
|
-
|
|
252
|
+
Puppet::Util.set_env('PATH', Puppet::Util.get_env('PATH') + File::PATH_SEPARATOR + path) unless paths.include?(path)
|
|
241
253
|
end
|
|
242
254
|
value
|
|
243
255
|
end
|
|
@@ -272,7 +284,7 @@ module Puppet
|
|
|
272
284
|
|
|
273
285
|
This setting must have a value set to enable **directory environments.** The
|
|
274
286
|
recommended value is `$codedir/environments`. For more details, see
|
|
275
|
-
|
|
287
|
+
https://docs.puppetlabs.com/puppet/latest/reference/environments.html",
|
|
276
288
|
:type => :path,
|
|
277
289
|
},
|
|
278
290
|
:always_cache_features => {
|
|
@@ -484,9 +496,10 @@ module Puppet
|
|
|
484
496
|
},
|
|
485
497
|
:environment_data_provider => {
|
|
486
498
|
:default => "none",
|
|
487
|
-
:desc => "The name of a registered environment data provider
|
|
488
|
-
and registered providers are 'none' (no
|
|
489
|
-
|
|
499
|
+
:desc => "The name of a registered environment data provider used when obtaining environment
|
|
500
|
+
specific data. The three built in and registered providers are 'none' (no data), 'function' (data
|
|
501
|
+
obtained by calling the function 'environment::data()') and 'hiera' (data obtained using a data
|
|
502
|
+
provider configured using a hiera.yaml file in root of the environment).
|
|
490
503
|
Other environment data providers may be registered in modules on the module path. For such
|
|
491
504
|
custom data providers see the respective module documentation."
|
|
492
505
|
},
|
|
@@ -571,15 +584,15 @@ module Puppet
|
|
|
571
584
|
`certname` setting as its requested Subject CN.
|
|
572
585
|
|
|
573
586
|
This is the name used when managing a node's permissions in
|
|
574
|
-
[auth.conf](
|
|
587
|
+
[auth.conf](https://docs.puppetlabs.com/puppet/latest/reference/config_file_auth.html).
|
|
575
588
|
In most cases, it is also used as the node's name when matching
|
|
576
|
-
[node definitions](
|
|
589
|
+
[node definitions](https://docs.puppetlabs.com/puppet/latest/reference/lang_node_definitions.html)
|
|
577
590
|
and requesting data from an ENC. (This can be changed with the `node_name_value`
|
|
578
591
|
and `node_name_fact` settings, although you should only do so if you have
|
|
579
592
|
a compelling reason.)
|
|
580
593
|
|
|
581
594
|
A node's certname is available in Puppet manifests as `$trusted['certname']`. (See
|
|
582
|
-
[Facts and Built-In Variables](
|
|
595
|
+
[Facts and Built-In Variables](https://docs.puppetlabs.com/puppet/latest/reference/lang_facts_and_builtin_vars.html)
|
|
583
596
|
for more details.)
|
|
584
597
|
|
|
585
598
|
* For best compatibility, you should limit the value of `certname` to
|
|
@@ -780,6 +793,21 @@ EOT
|
|
|
780
793
|
:values => ["md5", "sha256"],
|
|
781
794
|
:desc => 'Which digest algorithm to use for file resources and the filebucket.
|
|
782
795
|
Valid values are md5, sha256. Default is md5.',
|
|
796
|
+
},
|
|
797
|
+
:supported_checksum_types => {
|
|
798
|
+
:default => ['md5', 'sha256'],
|
|
799
|
+
:type => :array,
|
|
800
|
+
:desc => 'Checksum types supported by this agent for use in file resources of a
|
|
801
|
+
static catalog. Values must be comma-separated. Valid types are md5,
|
|
802
|
+
md5lite, sha256, sha256lite, sha1, sha1lite, mtime, ctime.',
|
|
803
|
+
:hook => proc do |value|
|
|
804
|
+
values = munge(value)
|
|
805
|
+
valid = ['md5', 'md5lite', 'sha256', 'sha256lite', 'sha1', 'sha1lite', 'mtime', 'ctime']
|
|
806
|
+
invalid = values.reject {|alg| valid.include?(alg)}
|
|
807
|
+
if not invalid.empty?
|
|
808
|
+
raise ArgumentError, "Unrecognized checksum types #{invalid} are not supported. Valid values are #{valid}."
|
|
809
|
+
end
|
|
810
|
+
end
|
|
783
811
|
}
|
|
784
812
|
)
|
|
785
813
|
|
|
@@ -895,7 +923,7 @@ EOT
|
|
|
895
923
|
the request.
|
|
896
924
|
|
|
897
925
|
For info on autosign configuration files, see
|
|
898
|
-
[the guide to Puppet's config files](http://docs.puppetlabs.com/
|
|
926
|
+
[the guide to Puppet's config files](http://docs.puppetlabs.com/puppet/latest/reference/config_about_settings.html).",
|
|
899
927
|
},
|
|
900
928
|
:allow_duplicate_certs => {
|
|
901
929
|
:default => false,
|
|
@@ -968,7 +996,7 @@ EOT
|
|
|
968
996
|
directory environments instead. If you need to use something other than the
|
|
969
997
|
environment's `manifests` directory as the main manifest, you can set
|
|
970
998
|
`manifest` in environment.conf. For more info, see
|
|
971
|
-
|
|
999
|
+
https://docs.puppetlabs.com/puppet/latest/reference/environments.html",
|
|
972
1000
|
},
|
|
973
1001
|
:modulepath => {
|
|
974
1002
|
:default => "",
|
|
@@ -982,7 +1010,7 @@ EOT
|
|
|
982
1010
|
directory environments instead. If you need to use something other than the
|
|
983
1011
|
default modulepath of `<ACTIVE ENVIRONMENT'S MODULES DIR>:$basemodulepath`,
|
|
984
1012
|
you can set `modulepath` in environment.conf. For more info, see
|
|
985
|
-
|
|
1013
|
+
https://docs.puppetlabs.com/puppet/latest/reference/environments.html",
|
|
986
1014
|
},
|
|
987
1015
|
:config_version => {
|
|
988
1016
|
:default => "",
|
|
@@ -994,7 +1022,7 @@ EOT
|
|
|
994
1022
|
Setting a global value for config_version in puppet.conf is not allowed
|
|
995
1023
|
(but it can be overridden from the commandline). Please set a
|
|
996
1024
|
per-environment value in environment.conf instead. For more info, see
|
|
997
|
-
|
|
1025
|
+
https://docs.puppetlabs.com/puppet/latest/reference/environments.html",
|
|
998
1026
|
}
|
|
999
1027
|
)
|
|
1000
1028
|
|
|
@@ -1106,7 +1134,7 @@ EOT
|
|
|
1106
1134
|
These are the modules that will be used by _all_ environments. Note that
|
|
1107
1135
|
the `modules` directory of the active environment will have priority over
|
|
1108
1136
|
any global directories. For more info, see
|
|
1109
|
-
|
|
1137
|
+
https://docs.puppetlabs.com/puppet/latest/reference/environments.html",
|
|
1110
1138
|
},
|
|
1111
1139
|
:ssl_client_header => {
|
|
1112
1140
|
:default => "HTTP_X_CLIENT_DN",
|
|
@@ -1282,7 +1310,7 @@ EOT
|
|
|
1282
1310
|
For control over logging destinations, see the `--logdest` command line
|
|
1283
1311
|
option in the manual pages for puppet master, puppet agent, and puppet
|
|
1284
1312
|
apply. You can see man pages by running `puppet <SUBCOMMAND> --help`,
|
|
1285
|
-
or read them online at
|
|
1313
|
+
or read them online at https://docs.puppetlabs.com/references/latest/man/."
|
|
1286
1314
|
},
|
|
1287
1315
|
:server => {
|
|
1288
1316
|
:default => "puppet",
|
|
@@ -1327,7 +1355,7 @@ EOT
|
|
|
1327
1355
|
event _would_ have been sent.
|
|
1328
1356
|
|
|
1329
1357
|
**Important note:**
|
|
1330
|
-
[The `noop` metaparameter](
|
|
1358
|
+
[The `noop` metaparameter](https://docs.puppetlabs.com/references/latest/metaparameter.html#noop)
|
|
1331
1359
|
allows you to apply individual resources in noop mode, and will override
|
|
1332
1360
|
the global value of the `noop` setting. This means a resource with
|
|
1333
1361
|
`noop => false` _will_ be changed if necessary, even when running puppet
|
|
@@ -1412,7 +1440,16 @@ EOT
|
|
|
1412
1440
|
:default => false,
|
|
1413
1441
|
:type => :boolean,
|
|
1414
1442
|
:desc => "Whether to sleep for a pseudo-random (but consistent) amount of time before
|
|
1415
|
-
a run.
|
|
1443
|
+
a run.
|
|
1444
|
+
|
|
1445
|
+
For example, without `splay` enabled, your agent checks in every 30
|
|
1446
|
+
minutes at :01 and :31 past the hour. After enabling `splay`, the agent
|
|
1447
|
+
will wait the pseudorandom sleep time, say eight minutes, and then check
|
|
1448
|
+
in every 30 minutes, at :09 and :39 after the hour. If you restart the
|
|
1449
|
+
same agent at 12:45 PM, it will wait its eight minutes, and check in at
|
|
1450
|
+
12:52 PM, and every 30 minutes after that, at 1:22 PM, 1:52 PM, and so
|
|
1451
|
+
on. Other agents will have different sleep times, and so will check in
|
|
1452
|
+
at different times even if they are all restarted at the same time.",
|
|
1416
1453
|
},
|
|
1417
1454
|
:clientbucketdir => {
|
|
1418
1455
|
:default => "$vardir/clientbucket",
|
|
@@ -1564,7 +1601,11 @@ EOT
|
|
|
1564
1601
|
:pluginsync => {
|
|
1565
1602
|
:default => true,
|
|
1566
1603
|
:type => :boolean,
|
|
1567
|
-
:desc => "Whether plugins should be synced with the central server.
|
|
1604
|
+
:desc => "Whether plugins should be synced with the central server. This setting is
|
|
1605
|
+
deprecated.",
|
|
1606
|
+
:hook => proc { |value|
|
|
1607
|
+
Puppet.deprecation_warning "Setting 'pluginsync' is deprecated."
|
|
1608
|
+
}
|
|
1568
1609
|
},
|
|
1569
1610
|
|
|
1570
1611
|
:pluginsignore => {
|
|
@@ -1600,6 +1641,12 @@ EOT
|
|
|
1600
1641
|
only resources tagged with the specified tags will be applied.
|
|
1601
1642
|
Values must be comma-separated.",
|
|
1602
1643
|
},
|
|
1644
|
+
:skip_tags => {
|
|
1645
|
+
:default => "",
|
|
1646
|
+
:desc => "Tags to use to filter resources. If this is set, then
|
|
1647
|
+
only resources not tagged with the specified tags will be applied.
|
|
1648
|
+
Values must be comma-separated.",
|
|
1649
|
+
},
|
|
1603
1650
|
:evaltrace => {
|
|
1604
1651
|
:default => false,
|
|
1605
1652
|
:type => :boolean,
|
data/lib/puppet/environments.rb
CHANGED
|
@@ -40,6 +40,8 @@ module Puppet::Environments
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def clear_all
|
|
43
|
+
root = Puppet.lookup(:root_environment) { nil }
|
|
44
|
+
root.instance_variable_set(:@static_catalogs, nil) unless root.nil?
|
|
43
45
|
end
|
|
44
46
|
end
|
|
45
47
|
|
|
@@ -110,7 +112,7 @@ module Puppet::Environments
|
|
|
110
112
|
def get_conf(name)
|
|
111
113
|
env = get(name)
|
|
112
114
|
if env
|
|
113
|
-
Puppet::Settings::EnvironmentConf.static_for(env)
|
|
115
|
+
Puppet::Settings::EnvironmentConf.static_for(env, 0, Puppet[:static_catalogs])
|
|
114
116
|
else
|
|
115
117
|
nil
|
|
116
118
|
end
|
data/lib/puppet/face/config.rb
CHANGED
|
@@ -9,7 +9,7 @@ Puppet::Face.define(:config, '0.0.1') do
|
|
|
9
9
|
|
|
10
10
|
description "This subcommand can inspect and modify settings from Puppet's
|
|
11
11
|
'puppet.conf' configuration file. For documentation about individual settings,
|
|
12
|
-
see
|
|
12
|
+
see https://docs.puppetlabs.com/references/latest/configuration.html."
|
|
13
13
|
|
|
14
14
|
option "--section SECTION_NAME" do
|
|
15
15
|
default_to { "main" }
|
data/lib/puppet/face/epp.rb
CHANGED
|
@@ -172,7 +172,7 @@ Puppet::Face.define(:epp, '0.0.1') do
|
|
|
172
172
|
|
|
173
173
|
show_filename = templates.count > 1
|
|
174
174
|
dumps = templates.each do |file|
|
|
175
|
-
buffer.print dump_parse(
|
|
175
|
+
buffer.print dump_parse(Puppet::FileSystem.read(file, :encoding => 'utf-8'), file, options, show_filename)
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
if !missing_files.empty?
|
|
@@ -23,7 +23,7 @@ settings, so you can specify `--server <servername>`, or
|
|
|
23
23
|
`--run_mode <runmode>` as an argument.
|
|
24
24
|
|
|
25
25
|
See the configuration file documentation at
|
|
26
|
-
<
|
|
26
|
+
<https://docs.puppetlabs.com/references/stable/configuration.html> for the
|
|
27
27
|
full list of acceptable parameters. A commented list of all
|
|
28
28
|
configuration options can also be generated by running puppet with
|
|
29
29
|
`--genconfig`.
|
|
@@ -21,7 +21,7 @@ Puppet::Face.define(:module, '1.0.0') do
|
|
|
21
21
|
|
|
22
22
|
$ puppet module install puppetlabs-vcsrepo
|
|
23
23
|
Preparing to install into /etc/puppetlabs/code/modules ...
|
|
24
|
-
Downloading from
|
|
24
|
+
Downloading from https://forgeapi.puppetlabs.com ...
|
|
25
25
|
Installing -- do not interrupt ...
|
|
26
26
|
/etc/puppetlabs/code/modules
|
|
27
27
|
└── puppetlabs-vcsrepo (v0.0.4)
|
|
@@ -30,7 +30,7 @@ Puppet::Face.define(:module, '1.0.0') do
|
|
|
30
30
|
|
|
31
31
|
$ puppet module install puppetlabs-vcsrepo --environment development
|
|
32
32
|
Preparing to install into /etc/puppetlabs/code/environments/development/modules ...
|
|
33
|
-
Downloading from
|
|
33
|
+
Downloading from https://forgeapi.puppetlabs.com ...
|
|
34
34
|
Installing -- do not interrupt ...
|
|
35
35
|
/etc/puppetlabs/code/environments/development/modules
|
|
36
36
|
└── puppetlabs-vcsrepo (v0.0.4)
|
|
@@ -39,7 +39,7 @@ Puppet::Face.define(:module, '1.0.0') do
|
|
|
39
39
|
|
|
40
40
|
$ puppet module install puppetlabs-vcsrepo -v 0.0.4
|
|
41
41
|
Preparing to install into /etc/puppetlabs/modules ...
|
|
42
|
-
Downloading from
|
|
42
|
+
Downloading from https://forgeapi.puppetlabs.com ...
|
|
43
43
|
Installing -- do not interrupt ...
|
|
44
44
|
/etc/puppetlabs/code/modules
|
|
45
45
|
└── puppetlabs-vcsrepo (v0.0.4)
|
|
@@ -48,7 +48,7 @@ Puppet::Face.define(:module, '1.0.0') do
|
|
|
48
48
|
|
|
49
49
|
$ puppet module install puppetlabs-vcsrepo --target-dir=/opt/puppetlabs/puppet/modules
|
|
50
50
|
Preparing to install into /opt/puppetlabs/puppet/modules ...
|
|
51
|
-
Downloading from
|
|
51
|
+
Downloading from https://forgeapi.puppetlabs.com ...
|
|
52
52
|
Installing -- do not interrupt ...
|
|
53
53
|
/opt/puppetlabs/puppet/modules
|
|
54
54
|
└── puppetlabs-vcsrepo (v0.0.4)
|
|
@@ -57,7 +57,7 @@ Puppet::Face.define(:module, '1.0.0') do
|
|
|
57
57
|
|
|
58
58
|
$ puppet module install puppetlabs-vcsrepo --target-dir=/opt/puppetlabs/puppet/modules --modulepath /etc/puppetlabs/code/modules
|
|
59
59
|
Preparing to install into /opt/puppetlabs/puppet/modules ...
|
|
60
|
-
Downloading from
|
|
60
|
+
Downloading from https://forgeapi.puppetlabs.com ...
|
|
61
61
|
Installing -- do not interrupt ...
|
|
62
62
|
/opt/puppetlabs/puppet/modules
|
|
63
63
|
└── puppetlabs-vcsrepo (v0.0.4)
|
|
@@ -66,7 +66,7 @@ Puppet::Face.define(:module, '1.0.0') do
|
|
|
66
66
|
|
|
67
67
|
$ puppet module install puppetlabs-vcsrepo-0.0.4.tar.gz
|
|
68
68
|
Preparing to install into /etc/puppetlabs/code/modules ...
|
|
69
|
-
Downloading from
|
|
69
|
+
Downloading from https://forgeapi.puppetlabs.com ...
|
|
70
70
|
Installing -- do not interrupt ...
|
|
71
71
|
/etc/puppetlabs/code/modules
|
|
72
72
|
└── puppetlabs-vcsrepo (v0.0.4)
|
data/lib/puppet/face/parser.rb
CHANGED
|
@@ -107,7 +107,7 @@ Puppet::Face.define(:parser, '0.0.1') do
|
|
|
107
107
|
missing_files = files - available_files
|
|
108
108
|
|
|
109
109
|
dumps = available_files.collect do |file|
|
|
110
|
-
dump_parse(
|
|
110
|
+
dump_parse(Puppet::FileSystem.read(file, :encoding => 'utf-8'), file, options)
|
|
111
111
|
end.join("")
|
|
112
112
|
|
|
113
113
|
if missing_files.empty?
|
|
@@ -146,13 +146,16 @@ Puppet::Face.define(:parser, '0.0.1') do
|
|
|
146
146
|
# @api private
|
|
147
147
|
def validate_manifest(manifest = nil)
|
|
148
148
|
env = Puppet.lookup(:current_environment)
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
149
|
+
loaders = Puppet::Pops::Loaders.new(env)
|
|
150
|
+
Puppet.override( {:loaders => loaders } , 'For puppet parser validate') do
|
|
151
|
+
begin
|
|
152
|
+
validation_environment = manifest ? env.override_with(:manifest => manifest) : env
|
|
153
|
+
validation_environment.check_for_reparse
|
|
154
|
+
validation_environment.known_resource_types.clear
|
|
155
|
+
rescue => detail
|
|
156
|
+
Puppet.log_exception(detail)
|
|
157
|
+
exit(1)
|
|
158
|
+
end
|
|
159
|
+
end
|
|
157
160
|
end
|
|
158
161
|
end
|
data/lib/puppet/face/status.rb
CHANGED
|
@@ -37,7 +37,8 @@ Puppet::Indirector::Face.define(:status, '0.0.1') do
|
|
|
37
37
|
This action requires that the server's `auth.conf` file allow find
|
|
38
38
|
access to the `status` REST terminus. Puppet agent does not use this
|
|
39
39
|
facility, and it is turned off by default. See
|
|
40
|
-
<
|
|
40
|
+
<https://docs.puppetlabs.com/puppet/latest/reference/config_file_auth.html>
|
|
41
|
+
for more details.
|
|
41
42
|
EOT
|
|
42
43
|
find.examples <<-'EOT'
|
|
43
44
|
Check the status of the configured puppet master:
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'puppet/file_serving/metadata'
|
|
2
|
+
|
|
3
|
+
# Simplified metadata representation, suitable for the information
|
|
4
|
+
# that is available from HTTP headers.
|
|
5
|
+
class Puppet::FileServing::HttpMetadata < Puppet::FileServing::Metadata
|
|
6
|
+
|
|
7
|
+
def initialize(http_response, path = '/dev/null')
|
|
8
|
+
super(path)
|
|
9
|
+
|
|
10
|
+
# ignore options that do not apply to HTTP metadata
|
|
11
|
+
@owner = @group = @mode = nil
|
|
12
|
+
|
|
13
|
+
# hash available checksums for eventual collection
|
|
14
|
+
@checksums = {}
|
|
15
|
+
# use a default mtime in case there is no usable HTTP header
|
|
16
|
+
@checksums[:mtime] = "{mtime}#{Time.now}"
|
|
17
|
+
|
|
18
|
+
if checksum = http_response['content-md5']
|
|
19
|
+
# convert base64 digest to hex
|
|
20
|
+
checksum = checksum.unpack("m0").first.unpack("H*").first
|
|
21
|
+
@checksums[:md5] = "{md5}#{checksum}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
if last_modified = http_response['last-modified']
|
|
25
|
+
mtime = DateTime.httpdate(last_modified).to_time
|
|
26
|
+
@checksums[:mtime] = "{mtime}#{mtime}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
@ftype = 'file'
|
|
30
|
+
|
|
31
|
+
self
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Override of the parent class method. Does not call super!
|
|
35
|
+
# We can only return metadata that was extracted from the
|
|
36
|
+
# HTTP headers during #initialize.
|
|
37
|
+
def collect
|
|
38
|
+
# Prefer the checksum_type from the indirector request options
|
|
39
|
+
# but fall back to the alternative otherwise
|
|
40
|
+
[ @checksum_type, :md5, :mtime ].each do |type|
|
|
41
|
+
@checksum_type = type
|
|
42
|
+
@checksum = @checksums[type]
|
|
43
|
+
return if @checksum
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -3,6 +3,7 @@ require 'puppet/indirector'
|
|
|
3
3
|
require 'puppet/file_serving'
|
|
4
4
|
require 'puppet/file_serving/base'
|
|
5
5
|
require 'puppet/util/checksums'
|
|
6
|
+
require 'uri'
|
|
6
7
|
|
|
7
8
|
# A class that handles retrieving file metadata.
|
|
8
9
|
class Puppet::FileServing::Metadata < Puppet::FileServing::Base
|
|
@@ -12,7 +13,7 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base
|
|
|
12
13
|
extend Puppet::Indirector
|
|
13
14
|
indirects :file_metadata, :terminus_class => :selector
|
|
14
15
|
|
|
15
|
-
attr_reader :path, :owner, :group, :mode, :checksum_type, :checksum, :ftype, :destination, :source_permissions
|
|
16
|
+
attr_reader :path, :owner, :group, :mode, :checksum_type, :checksum, :ftype, :destination, :source_permissions, :content_uri
|
|
16
17
|
|
|
17
18
|
PARAM_ORDER = [:mode, :ftype, :owner, :group]
|
|
18
19
|
|
|
@@ -28,6 +29,18 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base
|
|
|
28
29
|
@source_permissions = source_permissions.intern
|
|
29
30
|
end
|
|
30
31
|
|
|
32
|
+
def content_uri=(path)
|
|
33
|
+
begin
|
|
34
|
+
uri = URI.parse(URI.escape(path))
|
|
35
|
+
rescue URI::InvalidURIError => detail
|
|
36
|
+
raise(ArgumentError, "Could not understand URI #{path}: #{detail}")
|
|
37
|
+
end
|
|
38
|
+
raise(ArgumentError, "Cannot use opaque URLs '#{path}'") unless uri.hierarchical?
|
|
39
|
+
raise(ArgumentError, "Must use URLs of type puppet as content URI") if uri.scheme != "puppet"
|
|
40
|
+
|
|
41
|
+
@content_uri = path
|
|
42
|
+
end
|
|
43
|
+
|
|
31
44
|
class MetaStat
|
|
32
45
|
extend Forwardable
|
|
33
46
|
|
|
@@ -121,6 +134,8 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base
|
|
|
121
134
|
@checksum_type ||= Puppet[:digest_algorithm]
|
|
122
135
|
@ftype = data.delete('type')
|
|
123
136
|
@destination = data.delete('destination')
|
|
137
|
+
@source = data.delete('source')
|
|
138
|
+
@content_uri = data.delete('content_uri')
|
|
124
139
|
super(path,data)
|
|
125
140
|
end
|
|
126
141
|
|
|
@@ -136,7 +151,8 @@ class Puppet::FileServing::Metadata < Puppet::FileServing::Base
|
|
|
136
151
|
},
|
|
137
152
|
'type' => ftype,
|
|
138
153
|
'destination' => destination,
|
|
139
|
-
}
|
|
154
|
+
}.merge(content_uri ? {'content_uri' => content_uri} : {})
|
|
155
|
+
.merge(source ? {'source' => source} : {})
|
|
140
156
|
)
|
|
141
157
|
end
|
|
142
158
|
|