puppet 4.3.2 → 4.4.0
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.
- checksums.yaml +4 -4
- 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/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/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 +4 -4
- 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/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- 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.rb +2 -2
- 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/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- 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/map.rb +6 -14
- 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/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- 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/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 +3 -0
- 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.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- 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/map.rb +1 -1
- 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/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- 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 +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -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 +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -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 +16 -12
- 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.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -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 +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- 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 +11 -7
- 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 +138 -381
- 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 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- 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/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 +5 -8
- 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/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- 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/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.rb +15 -12
- 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 +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- 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.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- 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/filebucket.rb +1 -1
- 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/util.rb +109 -22
- 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 +4 -4
- 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 +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- 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 +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- 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/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/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/manifests/init.pp +3 -1
- 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/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/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 +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- 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/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- 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/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 +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- 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 +61 -5
- 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/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 +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- 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 +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -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 -373
- 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 +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- 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 +47 -34
- 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/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- 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 +96 -57
- 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 +4 -4
- 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 +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- 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.rb +0 -22
- 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/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/lib/puppet/agent.rb
CHANGED
@@ -41,7 +41,7 @@ class Puppet::Agent
|
|
41
41
|
result = run_in_fork(should_fork) do
|
42
42
|
with_client do |client|
|
43
43
|
begin
|
44
|
-
client_args = client_options.merge(:pluginsync => Puppet
|
44
|
+
client_args = client_options.merge(:pluginsync => Puppet::Configurer.should_pluginsync?)
|
45
45
|
lock { client.run(client_args) }
|
46
46
|
rescue Puppet::LockError
|
47
47
|
Puppet.notice "Run of #{client_class} already in progress; skipping (#{lockfile_path} exists)"
|
@@ -155,7 +155,7 @@ specify '--server <servername>' as an argument. Boolean settings translate into
|
|
155
155
|
'--setting' and '--no-setting' pairs.
|
156
156
|
|
157
157
|
See the configuration file documentation at
|
158
|
-
|
158
|
+
https://docs.puppetlabs.com/references/stable/configuration.html for the
|
159
159
|
full list of acceptable settings. A commented list of all settings can also be
|
160
160
|
generated by running puppet agent with '--genconfig'.
|
161
161
|
|
@@ -404,7 +404,9 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
|
|
404
404
|
# we want the last report to be persisted locally
|
405
405
|
Puppet::Transaction::Report.indirection.cache_class = :yaml
|
406
406
|
|
407
|
-
if Puppet[:
|
407
|
+
if Puppet[:noop]
|
408
|
+
Puppet::Resource::Catalog.indirection.cache_class = nil
|
409
|
+
elsif Puppet[:catalog_cache_terminus]
|
408
410
|
Puppet::Resource::Catalog.indirection.cache_class = Puppet[:catalog_cache_terminus]
|
409
411
|
end
|
410
412
|
|
@@ -74,7 +74,7 @@ valid setting, so you can specify '--tags <class>,<tag>'
|
|
74
74
|
as an argument.
|
75
75
|
|
76
76
|
See the configuration file documentation at
|
77
|
-
|
77
|
+
https://docs.puppetlabs.com/references/stable/configuration.html for the
|
78
78
|
full list of acceptable parameters. A commented list of all
|
79
79
|
configuration options can also be generated by running puppet with
|
80
80
|
'--genconfig'.
|
@@ -175,7 +175,7 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
|
|
175
175
|
if options[:catalog] == "-"
|
176
176
|
text = $stdin.read
|
177
177
|
else
|
178
|
-
text = ::
|
178
|
+
text = Puppet::FileSystem.read(options[:catalog], :encoding => 'utf-8')
|
179
179
|
end
|
180
180
|
catalog = read_catalog(text)
|
181
181
|
apply_catalog(catalog)
|
@@ -239,7 +239,7 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
|
|
239
239
|
$stderr.puts "#{file} is not readable"
|
240
240
|
exit(63)
|
241
241
|
end
|
242
|
-
node.classes = ::
|
242
|
+
node.classes = Puppet::FileSystem.read(file, :encoding => 'utf-8').split(/[\s\n]+/)
|
243
243
|
end
|
244
244
|
end
|
245
245
|
|
@@ -315,7 +315,10 @@ Copyright (c) 2011 Puppet Labs, LLC Licensed under the Apache 2.0 License
|
|
315
315
|
|
316
316
|
Puppet.settings.use :main, :agent, :ssl
|
317
317
|
|
318
|
-
|
318
|
+
|
319
|
+
if Puppet[:noop]
|
320
|
+
Puppet::Resource::Catalog.indirection.cache_class = nil
|
321
|
+
elsif Puppet[:catalog_cache_terminus]
|
319
322
|
Puppet::Resource::Catalog.indirection.cache_class = Puppet[:catalog_cache_terminus]
|
320
323
|
end
|
321
324
|
|
@@ -164,7 +164,7 @@ setting, so you can specify '--ssldir <directory>' as an
|
|
164
164
|
argument.
|
165
165
|
|
166
166
|
See the configuration file documentation at
|
167
|
-
|
167
|
+
https://docs.puppetlabs.com/references/stable/configuration.html for the
|
168
168
|
full list of acceptable parameters. A commented list of all
|
169
169
|
configuration options can also be generated by running puppet cert with
|
170
170
|
'--genconfig'.
|
@@ -199,7 +199,7 @@ Licensed under the Apache 2.0 License
|
|
199
199
|
|
200
200
|
require 'puppet/configurer'
|
201
201
|
configurer = Puppet::Configurer.new
|
202
|
-
configurer.run(:network_device => true, :pluginsync => Puppet
|
202
|
+
configurer.run(:network_device => true, :pluginsync => Puppet::Configurer.should_pluginsync?)
|
203
203
|
rescue => detail
|
204
204
|
Puppet.log_exception(detail)
|
205
205
|
# If we rescued an error, then we return 1 as the exit code
|
@@ -73,7 +73,7 @@ setting, so you can specify '--ssldir <directory>' as an
|
|
73
73
|
argument.
|
74
74
|
|
75
75
|
See the configuration file documentation at
|
76
|
-
|
76
|
+
https://docs.puppetlabs.com/references/stable/configuration.html for the
|
77
77
|
full list of acceptable parameters. A commented list of all
|
78
78
|
configuration options can also be generated by running puppet with
|
79
79
|
'--genconfig'.
|
@@ -48,7 +48,7 @@ OPTIONS
|
|
48
48
|
Any configuration setting which is valid in the configuration file is
|
49
49
|
also a valid long argument, e.g. '--server=master.domain.com'. See the
|
50
50
|
configuration file documentation at
|
51
|
-
|
51
|
+
https://docs.puppetlabs.com/references/latest/configuration.html for
|
52
52
|
the full list of acceptable settings.
|
53
53
|
|
54
54
|
* --archive_files:
|
@@ -214,7 +214,7 @@ the puppet lookup function linked to above.
|
|
214
214
|
|
215
215
|
EXAMPLE
|
216
216
|
-------
|
217
|
-
If you wanted to lookup 'key_name' within the scope of the master, you would
|
217
|
+
If you wanted to lookup 'key_name' within the scope of the master, you would
|
218
218
|
call lookup like this:
|
219
219
|
$ puppet lookup key_name
|
220
220
|
|
@@ -302,11 +302,11 @@ Copyright (c) 2015 Puppet Labs, LLC Licensed under the Apache 2.0 License
|
|
302
302
|
renderer = Puppet::Network::FormatHandler.format(format == :json ? :pson : format)
|
303
303
|
raise "Unknown rendering format '#{format}'" if renderer.nil?
|
304
304
|
|
305
|
-
type = options.include?(:type) ? Puppet::Pops::Types::TypeParser.new.parse(options[:type]) : nil
|
306
305
|
|
307
306
|
generate_scope do |scope|
|
308
307
|
lookup_invocation = Puppet::Pops::Lookup::Invocation.new(scope, {}, {}, explain ? Puppet::Pops::Lookup::Explainer.new(explain_options, only_explain_options) : nil)
|
309
308
|
begin
|
309
|
+
type = options.include?(:type) ? Puppet::Pops::Types::TypeParser.new.parse(options[:type], scope) : nil
|
310
310
|
result = Puppet::Pops::Lookup.lookup(keys, type, options[:default_value], use_default_value, merge_options, lookup_invocation)
|
311
311
|
puts renderer.render(result) unless explain
|
312
312
|
rescue Puppet::DataBinding::LookupError
|
@@ -335,9 +335,9 @@ Copyright (c) 2015 Puppet Labs, LLC Licensed under the Apache 2.0 License
|
|
335
335
|
if fact_file
|
336
336
|
original_facts = node.parameters
|
337
337
|
if fact_file.end_with?("json")
|
338
|
-
given_facts = JSON.parse(
|
338
|
+
given_facts = JSON.parse(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
|
339
339
|
else
|
340
|
-
given_facts = YAML.load(
|
340
|
+
given_facts = YAML.load(Puppet::FileSystem.read(fact_file, :encoding => 'utf-8'))
|
341
341
|
end
|
342
342
|
|
343
343
|
unless given_facts.instance_of?(Hash)
|
@@ -61,7 +61,7 @@ specify '--server <servername>' as an argument. Boolean settings translate into
|
|
61
61
|
'--setting' and '--no-setting' pairs.
|
62
62
|
|
63
63
|
See the configuration file documentation at
|
64
|
-
|
64
|
+
https://docs.puppetlabs.com/references/stable/configuration.html for the
|
65
65
|
full list of acceptable settings. A commented list of all settings can also be
|
66
66
|
generated by running puppet master with '--genconfig'.
|
67
67
|
|
@@ -92,7 +92,7 @@ generated by running puppet master with '--genconfig'.
|
|
92
92
|
valid JSON.
|
93
93
|
|
94
94
|
* --masterport:
|
95
|
-
The port on which to listen for traffic.
|
95
|
+
The port on which to listen for traffic. The default port is 8140.
|
96
96
|
(This is a Puppet setting, and can go in puppet.conf.)
|
97
97
|
|
98
98
|
* --verbose:
|
@@ -72,7 +72,7 @@ setting, so you can specify '--ssldir <directory>' as an
|
|
72
72
|
argument.
|
73
73
|
|
74
74
|
See the configuration file documentation at
|
75
|
-
|
75
|
+
https://docs.puppetlabs.com/references/stable/configuration.html for the
|
76
76
|
full list of acceptable parameters. A commented list of all
|
77
77
|
configuration options can also be generated by running puppet with
|
78
78
|
'--genconfig'.
|
data/lib/puppet/configurer.rb
CHANGED
@@ -22,6 +22,18 @@ class Puppet::Configurer
|
|
22
22
|
"Puppet configuration client"
|
23
23
|
end
|
24
24
|
|
25
|
+
def self.should_pluginsync?
|
26
|
+
if Puppet.settings.set_by_cli?(:pluginsync) || Puppet.settings.set_by_config?(:pluginsync)
|
27
|
+
Puppet[:pluginsync]
|
28
|
+
else
|
29
|
+
if Puppet[:use_cached_catalog]
|
30
|
+
false
|
31
|
+
else
|
32
|
+
true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
25
37
|
def execute_postrun_command
|
26
38
|
execute_from_setting(:postrun_command)
|
27
39
|
end
|
@@ -47,26 +59,46 @@ class Puppet::Configurer
|
|
47
59
|
def initialize(factory = Puppet::Configurer::DownloaderFactory.new)
|
48
60
|
@running = false
|
49
61
|
@splayed = false
|
62
|
+
@cached_catalog_status = 'not_used'
|
50
63
|
@environment = Puppet[:environment]
|
51
64
|
@transaction_uuid = SecureRandom.uuid
|
65
|
+
@static_catalog = true
|
66
|
+
@checksum_type = Puppet[:supported_checksum_types]
|
52
67
|
@handler = Puppet::Configurer::PluginHandler.new(factory)
|
53
68
|
end
|
54
69
|
|
55
70
|
# Get the remote catalog, yo. Returns nil if no catalog can be found.
|
56
71
|
def retrieve_catalog(query_options)
|
57
72
|
query_options ||= {}
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
73
|
+
if (Puppet[:use_cached_catalog] && result = retrieve_catalog_from_cache(query_options))
|
74
|
+
@cached_catalog_status = 'explicitly_requested'
|
75
|
+
|
76
|
+
Puppet.info "Using cached catalog from environment '#{result.environment}'"
|
77
|
+
else
|
78
|
+
result = retrieve_new_catalog(query_options)
|
79
|
+
|
80
|
+
if !result
|
81
|
+
if !Puppet[:usecacheonfailure]
|
82
|
+
Puppet.warning "Not using cache on failed catalog"
|
83
|
+
return nil
|
84
|
+
end
|
85
|
+
|
86
|
+
result = retrieve_catalog_from_cache(query_options)
|
87
|
+
|
88
|
+
if result
|
89
|
+
# don't use use cached catalog if it doesn't match server specified environment
|
90
|
+
if @node_environment && result.environment != @environment
|
91
|
+
Puppet.err "Not using cached catalog because its environment '#{result.environment}' does not match '#{@environment}'"
|
92
|
+
return nil
|
93
|
+
end
|
94
|
+
|
95
|
+
@cached_catalog_status = 'on_failure'
|
96
|
+
Puppet.info "Using cached catalog from environment '#{result.environment}'"
|
97
|
+
end
|
63
98
|
end
|
64
|
-
result = retrieve_catalog_from_cache(query_options)
|
65
99
|
end
|
66
100
|
|
67
|
-
|
68
|
-
|
69
|
-
convert_catalog(result, @duration)
|
101
|
+
result
|
70
102
|
end
|
71
103
|
|
72
104
|
# Convert a plain resource catalog into our full host catalog.
|
@@ -100,12 +132,32 @@ class Puppet::Configurer
|
|
100
132
|
def prepare_and_retrieve_catalog(options, query_options)
|
101
133
|
# set report host name now that we have the fact
|
102
134
|
options[:report].host = Puppet[:node_name_value]
|
135
|
+
query_options[:transaction_uuid] = @transaction_uuid
|
136
|
+
query_options[:static_catalog] = @static_catalog
|
137
|
+
|
138
|
+
# Query params don't enforce ordered evaluation, so munge this list into a
|
139
|
+
# dot-separated string.
|
140
|
+
query_options[:checksum_type] = @checksum_type.join('.')
|
141
|
+
|
142
|
+
# apply passes in ral catalog
|
143
|
+
catalog = options.delete(:catalog)
|
144
|
+
return catalog if catalog
|
103
145
|
|
104
|
-
|
105
|
-
|
106
|
-
|
146
|
+
# retrieve_catalog returns json catalog
|
147
|
+
catalog = retrieve_catalog(query_options)
|
148
|
+
return convert_catalog(catalog, @duration) if catalog
|
149
|
+
|
150
|
+
Puppet.err "Could not retrieve catalog; skipping run"
|
151
|
+
nil
|
152
|
+
end
|
153
|
+
|
154
|
+
def prepare_and_retrieve_catalog_from_cache
|
155
|
+
result = retrieve_catalog_from_cache({:transaction_uuid => @transaction_uuid, :static_catalog => @static_catalog})
|
156
|
+
if result
|
157
|
+
Puppet.info "Using cached catalog from environment '#{result.environment}'"
|
158
|
+
return convert_catalog(result, @duration)
|
107
159
|
end
|
108
|
-
|
160
|
+
nil
|
109
161
|
end
|
110
162
|
|
111
163
|
# Retrieve (optionally) and apply a catalog. If a catalog is passed in
|
@@ -149,6 +201,28 @@ class Puppet::Configurer
|
|
149
201
|
|
150
202
|
Puppet::Util::Log.newdestination(report)
|
151
203
|
|
204
|
+
# If a cached catalog is explicitly requested, attempt to retrieve it. Skip the node request,
|
205
|
+
# don't pluginsync and switch to the catalog's environment if we successfully retrieve it.
|
206
|
+
if Puppet[:use_cached_catalog]
|
207
|
+
if catalog = prepare_and_retrieve_catalog_from_cache
|
208
|
+
options[:catalog] = catalog
|
209
|
+
@cached_catalog_status = 'explicitly_requested'
|
210
|
+
|
211
|
+
if @environment != catalog.environment && !Puppet[:strict_environment_mode]
|
212
|
+
Puppet.notice "Local environment: '#{@environment}' doesn't match the environment of the cached catalog '#{catalog.environment}', switching agent to '#{catalog.environment}'."
|
213
|
+
@environment = catalog.environment
|
214
|
+
end
|
215
|
+
|
216
|
+
report.environment = @environment
|
217
|
+
else
|
218
|
+
# Don't try to retrieve a catalog from the cache again after we've already
|
219
|
+
# failed to do so the first time.
|
220
|
+
Puppet[:use_cached_catalog] = false
|
221
|
+
Puppet[:usecacheonfailure] = false
|
222
|
+
options[:pluginsync] = Puppet::Configurer.should_pluginsync?
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
152
226
|
begin
|
153
227
|
unless Puppet[:node_name_fact].empty?
|
154
228
|
query_options = get_facts(options)
|
@@ -157,7 +231,7 @@ class Puppet::Configurer
|
|
157
231
|
configured_environment = Puppet[:environment] if Puppet.settings.set_by_config?(:environment)
|
158
232
|
|
159
233
|
# We only need to find out the environment to run in if we don't already have a catalog
|
160
|
-
unless options[:catalog]
|
234
|
+
unless (options[:catalog] || Puppet[:strict_environment_mode])
|
161
235
|
begin
|
162
236
|
if node = Puppet::Node.indirection.find(Puppet[:node_name_value],
|
163
237
|
:environment => Puppet::Node::Environment.remote(@environment),
|
@@ -172,6 +246,8 @@ class Puppet::Configurer
|
|
172
246
|
node.environment = Puppet::Node::Environment.remote(node.environment_name)
|
173
247
|
end
|
174
248
|
|
249
|
+
@node_environment = node.environment.to_s
|
250
|
+
|
175
251
|
if node.environment.to_s != @environment
|
176
252
|
Puppet.notice "Local environment: '#{@environment}' doesn't match server specified node environment '#{node.environment}', switching agent to '#{node.environment}'."
|
177
253
|
@environment = node.environment.to_s
|
@@ -200,13 +276,17 @@ class Puppet::Configurer
|
|
200
276
|
Puppet.push_context({:current_environment => local_node_environment}, "Local node environment for configurer transaction")
|
201
277
|
|
202
278
|
query_options = get_facts(options) unless query_options
|
203
|
-
query_options[:transaction_uuid] = @transaction_uuid
|
204
279
|
query_options[:configured_environment] = configured_environment
|
205
280
|
|
206
281
|
unless catalog = prepare_and_retrieve_catalog(options, query_options)
|
207
282
|
return nil
|
208
283
|
end
|
209
284
|
|
285
|
+
if Puppet[:strict_environment_mode] && catalog.environment != @environment
|
286
|
+
Puppet.err "Not using catalog because its environment '#{catalog.environment}' does not match agent specified environment '#{@environment}' and strict_environment_mode is set"
|
287
|
+
return nil
|
288
|
+
end
|
289
|
+
|
210
290
|
# Here we set the local environment based on what we get from the
|
211
291
|
# catalog. Since a change in environment means a change in facts, and
|
212
292
|
# facts may be used to determine which catalog we get, we need to
|
@@ -221,7 +301,6 @@ class Puppet::Configurer
|
|
221
301
|
report.environment = @environment
|
222
302
|
|
223
303
|
query_options = get_facts(options)
|
224
|
-
query_options[:transaction_uuid] = @transaction_uuid
|
225
304
|
query_options[:configured_environment] = configured_environment
|
226
305
|
|
227
306
|
return nil unless catalog = prepare_and_retrieve_catalog(options, query_options)
|
@@ -229,6 +308,10 @@ class Puppet::Configurer
|
|
229
308
|
end
|
230
309
|
|
231
310
|
execute_prerun_command or return nil
|
311
|
+
|
312
|
+
options[:report].code_id = catalog.code_id
|
313
|
+
options[:report].catalog_uuid = catalog.catalog_uuid
|
314
|
+
options[:report].cached_catalog_status = @cached_catalog_status
|
232
315
|
apply_catalog(catalog, options)
|
233
316
|
report.exit_status
|
234
317
|
rescue => detail
|
@@ -238,11 +321,7 @@ class Puppet::Configurer
|
|
238
321
|
execute_postrun_command or return nil
|
239
322
|
end
|
240
323
|
ensure
|
241
|
-
|
242
|
-
# pick up on new functions installed by gems or new modules being added
|
243
|
-
# without the daemon being restarted.
|
244
|
-
$env_module_directories = nil
|
245
|
-
|
324
|
+
report.cached_catalog_status ||= @cached_catalog_status
|
246
325
|
Puppet::Util::Log.close(report)
|
247
326
|
send_report(report)
|
248
327
|
Puppet.pop_context
|
@@ -286,7 +365,6 @@ class Puppet::Configurer
|
|
286
365
|
result = Puppet::Resource::Catalog.indirection.find(Puppet[:node_name_value],
|
287
366
|
query_options.merge(:ignore_terminus => true, :environment => Puppet::Node::Environment.remote(@environment)))
|
288
367
|
end
|
289
|
-
Puppet.notice "Using cached catalog"
|
290
368
|
result
|
291
369
|
rescue => detail
|
292
370
|
Puppet.log_exception(detail, "Could not retrieve catalog from cache: #{detail}")
|
@@ -27,6 +27,8 @@ module Puppet::DataProviders
|
|
27
27
|
Hash[struct.map { |k,v| [k.to_s, symkeys_to_string(v)] }]
|
28
28
|
when Array
|
29
29
|
struct.map { |v| symkeys_to_string(v) }
|
30
|
+
when nil
|
31
|
+
{}
|
30
32
|
else
|
31
33
|
struct
|
32
34
|
end
|
@@ -70,6 +72,18 @@ module Puppet::DataProviders
|
|
70
72
|
end
|
71
73
|
|
72
74
|
def create_data_providers(lookup_invocation)
|
75
|
+
Puppet.deprecation_warning('Method HieraConfig#create_data_providers is deprecated. Use create_configured_data_providers instead')
|
76
|
+
create_configured_data_providers(lookup_invocation, nil)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Creates the data providers for this config
|
80
|
+
#
|
81
|
+
# @param lookup_invocation [Puppet::Pops::Lookup::Invocation] Invocation data containing scope, overrides, and defaults
|
82
|
+
# @param parent_data_provider [Puppet::Plugins::DataProviders::DataProvider] The data provider that loaded this configuration
|
83
|
+
# @return [Array[DataProvider]] the created providers
|
84
|
+
#
|
85
|
+
# @api private
|
86
|
+
def create_configured_data_providers(lookup_invocation, parent_data_provider)
|
73
87
|
injector = Puppet.lookup(:injector)
|
74
88
|
service_type = Registry.hash_of_path_based_data_provider_factories
|
75
89
|
default_datadir = @config['datadir']
|
@@ -92,14 +106,25 @@ module Puppet::DataProviders
|
|
92
106
|
raise Puppet::DataBinding::LookupError, "#{@config_path}: No data provider is registered for backend '#{provider_name}' " unless provider_factory
|
93
107
|
|
94
108
|
datadir = @config_root + (he['datadir'] || default_datadir)
|
95
|
-
|
96
|
-
|
109
|
+
data_providers[name] = create_data_provider(parent_data_provider, provider_factory, name,
|
110
|
+
provider_factory.resolve_paths(datadir, original_paths, paths, lookup_invocation))
|
97
111
|
end
|
98
112
|
data_providers.values
|
99
113
|
end
|
100
114
|
|
115
|
+
def create_data_provider(parent_data_provider, provider_factory, name, resolved_paths)
|
116
|
+
provider_factory_version = provider_factory.respond_to?(:version) ? provider_factory.version : 1
|
117
|
+
if provider_factory_version == 1
|
118
|
+
# Version 1 is not aware of the parent provider
|
119
|
+
provider_factory.create(name, resolved_paths)
|
120
|
+
else
|
121
|
+
provider_factory.create(name, resolved_paths, parent_data_provider)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
private :create_data_provider
|
125
|
+
|
101
126
|
def validate_config(hiera_config)
|
102
|
-
Puppet::Pops::Types::TypeAsserter.assert_instance_of(@config_path, self.class.config_type, hiera_config)
|
127
|
+
Puppet::Pops::Types::TypeAsserter.assert_instance_of(["The Hiera Configuration at '%s'", @config_path], self.class.config_type, hiera_config)
|
103
128
|
end
|
104
129
|
private :validate_config
|
105
130
|
end
|
@@ -5,31 +5,46 @@ require_relative 'hiera_config'
|
|
5
5
|
#
|
6
6
|
module Puppet::DataProviders::HieraInterpolate
|
7
7
|
def interpolate(subject, lookup_invocation, allow_methods)
|
8
|
-
|
8
|
+
case subject
|
9
|
+
when String
|
10
|
+
subject.index('%{').nil? ? subject : interpolate_string(subject, lookup_invocation, allow_methods)
|
11
|
+
when Array
|
12
|
+
subject.map { |element| interpolate(element, lookup_invocation, allow_methods) }
|
13
|
+
when Hash
|
14
|
+
Hash[subject.map { |k, v| [k, interpolate(v, lookup_invocation, allow_methods)] }]
|
15
|
+
else
|
16
|
+
subject
|
17
|
+
end
|
18
|
+
end
|
9
19
|
|
10
|
-
|
11
|
-
subject.gsub(/%\{([^\}]+)\}/) do |match|
|
12
|
-
method_key, key = get_method_and_data($1, allow_methods)
|
13
|
-
is_alias = method_key == 'alias'
|
20
|
+
private
|
14
21
|
|
15
|
-
|
16
|
-
|
22
|
+
def interpolate_string(subject, lookup_invocation, allow_methods)
|
23
|
+
lookup_invocation.with(:interpolate, subject) do
|
24
|
+
subject.gsub(/%\{([^\}]*)\}/) do |match|
|
25
|
+
expr = $1
|
26
|
+
# Leading and trailing spaces inside an interpolation expression are insignificant
|
27
|
+
expr.strip!
|
28
|
+
unless expr.empty? || expr == '::'
|
29
|
+
method_key, key = get_method_and_data(expr, allow_methods)
|
30
|
+
is_alias = method_key == 'alias'
|
17
31
|
|
18
|
-
|
19
|
-
|
20
|
-
value = qualified_lookup(segments.drop(1), value) if segments.size > 1
|
21
|
-
value = lookup_invocation.check(key) { interpolate(value, lookup_invocation, allow_methods) } if value.is_a?(String)
|
32
|
+
# Alias is only permitted if the entire string is equal to the interpolate expression
|
33
|
+
raise Puppet::DataBinding::LookupError, "'alias' interpolation is only permitted if the expression is equal to the entire string" if is_alias && subject != match
|
22
34
|
|
23
|
-
|
24
|
-
|
35
|
+
segments = key.split('.')
|
36
|
+
value = interpolate_method(method_key).call(segments[0], lookup_invocation)
|
37
|
+
value = qualified_lookup(segments.drop(1), value) if segments.size > 1
|
38
|
+
value = lookup_invocation.check(key) { interpolate(value, lookup_invocation, allow_methods) }
|
25
39
|
|
40
|
+
# break gsub and return value immediately if this was an alias substitution. The value might be something other than a String
|
41
|
+
return value if is_alias
|
42
|
+
end
|
26
43
|
value || ''
|
27
44
|
end
|
28
45
|
end
|
29
46
|
end
|
30
47
|
|
31
|
-
private
|
32
|
-
|
33
48
|
def interpolate_method(method_key)
|
34
49
|
@@interpolate_methods ||= begin
|
35
50
|
global_lookup = lambda { |key, lookup_invocation| Puppet::Pops::Lookup.lookup(key, nil, '', true, nil, lookup_invocation) }
|