puppet 4.2.3 → 4.3.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.
- data/Gemfile +3 -0
- data/README.md +1 -1
- data/ext/debian/puppet.init +0 -1
- data/ext/debian/puppet.logrotate +14 -5
- data/ext/osx/puppet.plist +0 -2
- data/ext/redhat/client.init +13 -5
- data/ext/redhat/logrotate +15 -3
- data/ext/redhat/puppet.spec.erb +5 -1
- data/ext/redhat/server.init +1 -1
- data/ext/systemd/puppet.service +1 -0
- data/lib/puppet.rb +12 -0
- data/lib/puppet/agent.rb +4 -4
- data/lib/puppet/agent/locker.rb +11 -2
- data/lib/puppet/application/agent.rb +5 -1
- data/lib/puppet/application/apply.rb +4 -0
- data/lib/puppet/application/filebucket.rb +78 -4
- data/lib/puppet/application/lookup.rb +356 -0
- data/lib/puppet/application/master.rb +3 -0
- data/lib/puppet/configurer.rb +9 -5
- data/lib/puppet/context.rb +16 -1
- data/lib/puppet/context/trusted_information.rb +21 -1
- data/lib/puppet/daemon.rb +17 -13
- data/lib/puppet/data_binding.rb +4 -2
- data/lib/puppet/data_providers.rb +12 -13
- data/lib/puppet/data_providers/data_adapter.rb +7 -68
- data/lib/puppet/data_providers/data_function_support.rb +5 -26
- data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
- data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
- data/lib/puppet/data_providers/hiera_config.rb +106 -0
- data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
- data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
- data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
- data/lib/puppet/data_providers/hiera_support.rb +37 -0
- data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
- data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
- data/lib/puppet/defaults.rb +12 -2
- data/lib/puppet/error.rb +4 -0
- data/lib/puppet/face/module/changes.rb +2 -1
- data/lib/puppet/feature/cfacter.rb +1 -0
- data/lib/puppet/file_bucket/dipper.rb +58 -2
- data/lib/puppet/functions.rb +2 -4
- data/lib/puppet/functions/assert_type.rb +48 -12
- data/lib/puppet/functions/defined.rb +79 -48
- data/lib/puppet/functions/each.rb +85 -27
- data/lib/puppet/functions/filter.rb +58 -23
- data/lib/puppet/functions/hiera.rb +76 -3
- data/lib/puppet/functions/hiera_array.rb +65 -3
- data/lib/puppet/functions/hiera_hash.rb +74 -2
- data/lib/puppet/functions/hiera_include.rb +75 -2
- data/lib/puppet/functions/lookup.rb +19 -17
- data/lib/puppet/functions/map.rb +56 -21
- data/lib/puppet/functions/match.rb +29 -12
- data/lib/puppet/functions/reduce.rb +95 -58
- data/lib/puppet/functions/versioncmp.rb +36 -0
- data/lib/puppet/functions/with.rb +15 -7
- data/lib/puppet/indirector/catalog/compiler.rb +3 -3
- data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
- data/lib/puppet/indirector/data_binding/none.rb +4 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/request.rb +7 -8
- data/lib/puppet/indirector/resource_type/parser.rb +5 -3
- data/lib/puppet/info_service.rb +7 -0
- data/lib/puppet/info_service/class_information_service.rb +111 -0
- data/lib/puppet/module_tool/metadata.rb +32 -9
- data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
- data/lib/puppet/network/authconfig.rb +21 -1
- data/lib/puppet/network/authorization.rb +8 -1
- data/lib/puppet/network/http/api/master/v3.rb +7 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
- data/lib/puppet/node/environment.rb +9 -2
- data/lib/puppet/parser.rb +3 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
- data/lib/puppet/parser/compiler.rb +302 -12
- data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
- data/lib/puppet/parser/environment_compiler.rb +165 -0
- data/lib/puppet/parser/functions/assert_type.rb +46 -16
- data/lib/puppet/parser/functions/defined.rb +105 -68
- data/lib/puppet/parser/functions/each.rb +85 -27
- data/lib/puppet/parser/functions/filter.rb +59 -23
- data/lib/puppet/parser/functions/hiera.rb +83 -27
- data/lib/puppet/parser/functions/hiera_array.rb +71 -28
- data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
- data/lib/puppet/parser/functions/hiera_include.rb +81 -40
- data/lib/puppet/parser/functions/map.rb +55 -20
- data/lib/puppet/parser/functions/match.rb +27 -12
- data/lib/puppet/parser/functions/reduce.rb +97 -60
- data/lib/puppet/parser/functions/with.rb +16 -8
- data/lib/puppet/parser/resource.rb +98 -19
- data/lib/puppet/plugins/configuration.rb +3 -2
- data/lib/puppet/plugins/data_providers.rb +12 -60
- data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
- data/lib/puppet/plugins/data_providers/registry.rb +84 -0
- data/lib/puppet/pops.rb +19 -17
- data/lib/puppet/pops/adapters.rb +12 -0
- data/lib/puppet/pops/binder/binder.rb +2 -2
- data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
- data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
- data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
- data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
- data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
- data/lib/puppet/pops/binder/injector.rb +4 -4
- data/lib/puppet/pops/binder/key_factory.rb +3 -9
- data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
- data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
- data/lib/puppet/pops/evaluator/closure.rb +8 -8
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
- data/lib/puppet/pops/functions/dispatcher.rb +3 -3
- data/lib/puppet/pops/issues.rb +1 -1
- data/lib/puppet/pops/label_provider.rb +1 -1
- data/lib/puppet/pops/lookup.rb +25 -47
- data/lib/puppet/pops/lookup/explainer.rb +402 -0
- data/lib/puppet/pops/lookup/invocation.rb +117 -0
- data/lib/puppet/pops/merge_strategy.rb +73 -5
- data/lib/puppet/pops/model/factory.rb +34 -0
- data/lib/puppet/pops/model/model_label_provider.rb +10 -1
- data/lib/puppet/pops/model/model_meta.rb +15 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
- data/lib/puppet/pops/parser/code_merger.rb +13 -1
- data/lib/puppet/pops/parser/egrammar.ra +56 -3
- data/lib/puppet/pops/parser/eparser.rb +1549 -1352
- data/lib/puppet/pops/parser/lexer2.rb +31 -6
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +25 -13
- data/lib/puppet/pops/types/enumeration.rb +1 -2
- data/lib/puppet/pops/types/type_asserter.rb +16 -15
- data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
- data/lib/puppet/pops/types/type_calculator.rb +171 -1020
- data/lib/puppet/pops/types/type_factory.rb +87 -148
- data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
- data/lib/puppet/pops/types/type_parser.rb +116 -127
- data/lib/puppet/pops/types/types.rb +1394 -255
- data/lib/puppet/pops/types/types_meta.rb +0 -234
- data/lib/puppet/pops/validation.rb +7 -2
- data/lib/puppet/pops/validation/checker4_0.rb +28 -0
- data/lib/puppet/provider/augeas/augeas.rb +50 -0
- data/lib/puppet/provider/group/directoryservice.rb +10 -0
- data/lib/puppet/provider/package/dnf.rb +41 -0
- data/lib/puppet/provider/package/gem.rb +7 -2
- data/lib/puppet/provider/package/rpm.rb +1 -0
- data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
- data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
- data/lib/puppet/provider/package/windows/package.rb +9 -1
- data/lib/puppet/provider/package/yum.rb +14 -9
- data/lib/puppet/provider/service/bsd.rb +1 -1
- data/lib/puppet/provider/service/debian.rb +21 -0
- data/lib/puppet/provider/service/init.rb +6 -0
- data/lib/puppet/provider/service/rcng.rb +51 -0
- data/lib/puppet/provider/service/redhat.rb +2 -1
- data/lib/puppet/provider/service/smf.rb +43 -2
- data/lib/puppet/provider/service/src.rb +27 -0
- data/lib/puppet/provider/service/systemd.rb +15 -3
- data/lib/puppet/provider/sshkey/parsed.rb +19 -9
- data/lib/puppet/reference/report.rb +9 -12
- data/lib/puppet/reports.rb +5 -1
- data/lib/puppet/resource.rb +50 -73
- data/lib/puppet/resource/capability_finder.rb +95 -0
- data/lib/puppet/resource/catalog.rb +47 -7
- data/lib/puppet/resource/status.rb +0 -2
- data/lib/puppet/resource/type.rb +238 -44
- data/lib/puppet/resource/type_collection.rb +60 -2
- data/lib/puppet/settings.rb +2 -2
- data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
- data/lib/puppet/ssl/oids.rb +9 -1
- data/lib/puppet/transaction.rb +4 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
- data/lib/puppet/transaction/resource_harness.rb +9 -4
- data/lib/puppet/type.rb +74 -3
- data/lib/puppet/type/augeas.rb +8 -0
- data/lib/puppet/type/file/source.rb +14 -12
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/util/windows/security.rb +4 -1
- data/lib/puppet/util/windows/taskscheduler.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
- data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
- data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
- data/spec/integration/data_binding_spec.rb +229 -0
- data/spec/integration/file_bucket/file_spec.rb +2 -2
- data/spec/integration/parser/compiler_spec.rb +23 -19
- data/spec/integration/parser/resource_expressions_spec.rb +4 -4
- data/spec/integration/parser/undef_param_spec.rb +1 -1
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/type/package_spec.rb +2 -0
- data/spec/integration/util/windows/security_spec.rb +18 -0
- data/spec/lib/matchers/include_in_order.rb +2 -2
- data/spec/shared_behaviours/iterative_functions.rb +8 -8
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/agent/locker_spec.rb +4 -4
- data/spec/unit/agent_spec.rb +0 -8
- data/spec/unit/application/agent_spec.rb +5 -0
- data/spec/unit/application/apply_spec.rb +8 -0
- data/spec/unit/application/filebucket_spec.rb +87 -1
- data/spec/unit/application/lookup_spec.rb +195 -0
- data/spec/unit/appmgmt_spec.rb +657 -0
- data/spec/unit/capability_spec.rb +414 -0
- data/spec/unit/configurer_spec.rb +7 -1
- data/spec/unit/context/trusted_information_spec.rb +24 -1
- data/spec/unit/daemon_spec.rb +18 -8
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
- data/spec/unit/file_bucket/dipper_spec.rb +210 -1
- data/spec/unit/functions/assert_type_spec.rb +5 -7
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +2 -2
- data/spec/unit/functions/lookup_spec.rb +200 -9
- data/spec/unit/functions/regsubst_spec.rb +17 -8
- data/spec/unit/functions/scanf_spec.rb +1 -1
- data/spec/unit/functions/split_spec.rb +2 -2
- data/spec/unit/functions/versioncmp_spec.rb +36 -0
- data/spec/unit/functions4_spec.rb +58 -72
- data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
- data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
- data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
- data/spec/unit/indirector/request_spec.rb +8 -8
- data/spec/unit/info_service_spec.rb +236 -0
- data/spec/unit/module_tool/metadata_spec.rb +31 -2
- data/spec/unit/network/authconfig_spec.rb +62 -32
- data/spec/unit/network/authorization_spec.rb +30 -2
- data/spec/unit/network/http/connection_spec.rb +14 -19
- data/spec/unit/parser/compiler_spec.rb +86 -2
- data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
- data/spec/unit/parser/resource_spec.rb +2 -20
- data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
- data/spec/unit/pops/binder/injector_spec.rb +3 -3
- data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
- data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -11
- data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
- data/spec/unit/pops/label_provider_spec.rb +5 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +33 -7
- data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
- data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +18 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
- data/spec/unit/pops/types/type_factory_spec.rb +12 -12
- data/spec/unit/pops/types/type_parser_spec.rb +7 -12
- data/spec/unit/pops/validator/validator_spec.rb +25 -0
- data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
- data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
- data/spec/unit/provider/package/dnf_spec.rb +92 -0
- data/spec/unit/provider/package/gem_spec.rb +7 -0
- data/spec/unit/provider/package/rpm_spec.rb +25 -2
- data/spec/unit/provider/package/windows/package_spec.rb +41 -0
- data/spec/unit/provider/package/yum_spec.rb +21 -13
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
- data/spec/unit/provider/service/debian_spec.rb +27 -0
- data/spec/unit/provider/service/rcng_spec.rb +41 -0
- data/spec/unit/provider/service/redhat_spec.rb +8 -1
- data/spec/unit/provider/service/smf_spec.rb +30 -5
- data/spec/unit/provider/service/src_spec.rb +19 -4
- data/spec/unit/provider/service/systemd_spec.rb +78 -29
- data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
- data/spec/unit/reports_spec.rb +10 -0
- data/spec/unit/resource/capability_finder_spec.rb +56 -0
- data/spec/unit/resource/catalog_spec.rb +31 -8
- data/spec/unit/resource/type_collection_spec.rb +23 -2
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +22 -4
- data/spec/unit/settings_spec.rb +90 -1
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
- data/spec/unit/ssl/oids_spec.rb +8 -0
- data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
- data/spec/unit/transaction/report_spec.rb +24 -1
- data/spec/unit/type/package_spec.rb +1 -0
- data/spec/unit/type/user_spec.rb +14 -7
- data/spec/unit/type_spec.rb +1 -1
- metadata +169 -5
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
- data/spec/integration/data_binding.rb +0 -104
@@ -17,10 +17,28 @@ class Puppet::Context::TrustedInformation
|
|
17
17
|
# @return [Hash{Object => Object}]
|
18
18
|
attr_reader :extensions
|
19
19
|
|
20
|
+
# The domain name derived from the validated certificate name
|
21
|
+
#
|
22
|
+
# @return [String]
|
23
|
+
attr_reader :domain
|
24
|
+
|
25
|
+
# The hostname derived from the validated certificate name
|
26
|
+
#
|
27
|
+
# @return [String]
|
28
|
+
attr_reader :hostname
|
29
|
+
|
20
30
|
def initialize(authenticated, certname, extensions)
|
21
31
|
@authenticated = authenticated.freeze
|
22
32
|
@certname = certname.freeze
|
23
33
|
@extensions = extensions.freeze
|
34
|
+
if @certname
|
35
|
+
hostname, domain = @certname.split('.', 2)
|
36
|
+
else
|
37
|
+
hostname = nil
|
38
|
+
domain = nil
|
39
|
+
end
|
40
|
+
@hostname = hostname.freeze
|
41
|
+
@domain = domain.freeze
|
24
42
|
end
|
25
43
|
|
26
44
|
def self.remote(authenticated, node_name, certificate)
|
@@ -50,7 +68,9 @@ class Puppet::Context::TrustedInformation
|
|
50
68
|
{
|
51
69
|
'authenticated'.freeze => authenticated,
|
52
70
|
'certname'.freeze => certname,
|
53
|
-
'extensions'.freeze => extensions
|
71
|
+
'extensions'.freeze => extensions,
|
72
|
+
'hostname'.freeze => hostname,
|
73
|
+
'domain'.freeze => domain,
|
54
74
|
}.freeze
|
55
75
|
end
|
56
76
|
end
|
data/lib/puppet/daemon.rb
CHANGED
@@ -24,6 +24,7 @@ class Puppet::Daemon
|
|
24
24
|
SIGNAL_CHECK_INTERVAL = 5
|
25
25
|
|
26
26
|
attr_accessor :agent, :server, :argv
|
27
|
+
attr_reader :signals
|
27
28
|
|
28
29
|
def initialize(pidfile, scheduler = Puppet::Scheduler::Scheduler.new())
|
29
30
|
@scheduler = scheduler
|
@@ -87,12 +88,9 @@ class Puppet::Daemon
|
|
87
88
|
|
88
89
|
def reload
|
89
90
|
return unless agent
|
90
|
-
if agent.running?
|
91
|
-
Puppet.notice "Not triggering already-running agent"
|
92
|
-
return
|
93
|
-
end
|
94
|
-
|
95
91
|
agent.run({:splay => false})
|
92
|
+
rescue Puppet::LockError
|
93
|
+
Puppet.notice "Not triggering already-running agent"
|
96
94
|
end
|
97
95
|
|
98
96
|
def restart
|
@@ -107,13 +105,21 @@ class Puppet::Daemon
|
|
107
105
|
# Trap a couple of the main signals. This should probably be handled
|
108
106
|
# in a way that anyone else can register callbacks for traps, but, eh.
|
109
107
|
def set_signal_traps
|
110
|
-
|
111
|
-
# extended signals not supported under windows
|
112
|
-
signals.update({:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs }) unless Puppet.features.microsoft_windows?
|
113
|
-
signals.each do |signal, method|
|
108
|
+
[:INT, :TERM].each do |signal|
|
114
109
|
Signal.trap(signal) do
|
115
|
-
Puppet.notice "Caught #{signal};
|
116
|
-
|
110
|
+
Puppet.notice "Caught #{signal}; exiting"
|
111
|
+
stop
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# extended signals not supported under windows
|
116
|
+
if !Puppet.features.microsoft_windows?
|
117
|
+
signals = {:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs }
|
118
|
+
signals.each do |signal, method|
|
119
|
+
Signal.trap(signal) do
|
120
|
+
Puppet.notice "Caught #{signal}; storing #{method}"
|
121
|
+
@signals << method
|
122
|
+
end
|
117
123
|
end
|
118
124
|
end
|
119
125
|
end
|
@@ -132,8 +138,6 @@ class Puppet::Daemon
|
|
132
138
|
end
|
133
139
|
|
134
140
|
def start
|
135
|
-
set_signal_traps
|
136
|
-
|
137
141
|
create_pidfile
|
138
142
|
|
139
143
|
raise Puppet::DevError, "Daemons must have an agent, server, or both" unless agent or server
|
data/lib/puppet/data_binding.rb
CHANGED
@@ -2,11 +2,13 @@ require 'puppet/indirector'
|
|
2
2
|
|
3
3
|
# A class for managing data lookups
|
4
4
|
class Puppet::DataBinding
|
5
|
-
class LookupError < Puppet::Error; end
|
6
|
-
|
7
5
|
# Set up indirection, so that data can be looked for in the compiler
|
8
6
|
extend Puppet::Indirector
|
9
7
|
|
10
8
|
indirects(:data_binding, :terminus_setting => :data_binding_terminus,
|
11
9
|
:doc => "Where to find external data bindings.")
|
10
|
+
|
11
|
+
class LookupError < Puppet::PreformattedError; end
|
12
|
+
|
13
|
+
class RecursiveLookupError < Puppet::DataBinding::LookupError; end
|
12
14
|
end
|
@@ -4,28 +4,27 @@ module Puppet::DataProviders
|
|
4
4
|
unless @loaded
|
5
5
|
require 'puppet/pops'
|
6
6
|
require 'puppet/data_providers/data_adapter'
|
7
|
+
require 'puppet/data_providers/lookup_adapter'
|
7
8
|
end
|
8
9
|
@loaded = true
|
9
10
|
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
# @deprecated use `lookup_adapter(lookup_invocation).lookup` instead
|
13
|
+
def self.lookup_in_environment(name, lookup_invocation, merge)
|
14
|
+
Puppet.deprecation_warning('The method Puppet::DataProviders.lookup_in_environment is deprecated and will be removed in the next major release of Puppet.')
|
15
|
+
lookup_adapter(lookup_invocation).lookup_in_environment(name, lookup_invocation, Puppet::Pops::MergeStrategy.strategy(merge))
|
15
16
|
end
|
16
17
|
|
17
18
|
MODULE_NAME = 'module_name'.freeze
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
# @deprecated use `adapter(lookup_invocation).lookup` instead
|
21
|
+
def self.lookup_in_module(name, lookup_invocation, merge)
|
22
|
+
Puppet.deprecation_warning('The method Puppet::DataProviders.lookup_in_module is deprecated and will be removed in the next major release of Puppet.')
|
23
|
+
lookup_adapter(lookup_invocation).lookup_in_module(name, lookup_invocation, Puppet::Pops::MergeStrategy.strategy(merge))
|
24
|
+
end
|
24
25
|
|
26
|
+
def self.lookup_adapter(lookup_invocation)
|
25
27
|
assert_loaded()
|
26
|
-
|
27
|
-
data_provider = adapter.module_provider(module_name)
|
28
|
-
throw :no_such_key if data_provider.nil?
|
29
|
-
data_provider.lookup(name, scope, merge)
|
28
|
+
LookupAdapter.adapt(lookup_invocation.scope.environment)
|
30
29
|
end
|
31
30
|
end
|
@@ -1,11 +1,15 @@
|
|
1
1
|
# A DataAdapter adapts an object with a Hash of data
|
2
2
|
#
|
3
3
|
class Puppet::DataProviders::DataAdapter < Puppet::Pops::Adaptable::Adapter
|
4
|
+
include Puppet::Plugins::DataProviders
|
5
|
+
|
4
6
|
attr_accessor :data
|
5
|
-
attr_accessor :env_provider
|
6
7
|
|
7
|
-
def
|
8
|
-
|
8
|
+
def self.create_adapter(o)
|
9
|
+
new
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize
|
9
13
|
@data = {}
|
10
14
|
end
|
11
15
|
|
@@ -23,69 +27,4 @@ class Puppet::DataProviders::DataAdapter < Puppet::Pops::Adaptable::Adapter
|
|
23
27
|
end
|
24
28
|
@data[name] = value
|
25
29
|
end
|
26
|
-
|
27
|
-
def env_provider
|
28
|
-
@env_provider ||= initialize_env_provider
|
29
|
-
end
|
30
|
-
|
31
|
-
def module_provider(module_name)
|
32
|
-
# Test if the key is present for the given module_name. It might be there even if the
|
33
|
-
# value is nil (which indicates that no module provider is configured for the given name)
|
34
|
-
unless @data.include?(module_name)
|
35
|
-
@data[module_name] = initialize_module_provider(module_name)
|
36
|
-
end
|
37
|
-
@data[module_name]
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.create_adapter(environment)
|
41
|
-
new(environment)
|
42
|
-
end
|
43
|
-
|
44
|
-
def initialize_module_provider(module_name)
|
45
|
-
# Support running tests without an injector being configured == using a null implementation
|
46
|
-
unless injector = Puppet.lookup(:injector) { nil }
|
47
|
-
return Puppet::Plugins::DataProviders::ModuleDataProvider.new()
|
48
|
-
end
|
49
|
-
# Get the registry of module to provider implementation name
|
50
|
-
module_service_type = Puppet::Plugins::DataProviders.hash_of_per_module_data_provider
|
51
|
-
module_service_name = Puppet::Plugins::DataProviders::PER_MODULE_DATA_PROVIDER_KEY
|
52
|
-
module_service = Puppet.lookup(:injector).lookup(nil, module_service_type, module_service_name)
|
53
|
-
provider_name = module_service[module_name] || 'none'
|
54
|
-
|
55
|
-
service_type = Puppet::Plugins::DataProviders.hash_of_module_data_providers
|
56
|
-
service_name = Puppet::Plugins::DataProviders::MODULE_DATA_PROVIDERS_KEY
|
57
|
-
|
58
|
-
# Get the service (registry of known implementations)
|
59
|
-
service = Puppet.lookup(:injector).lookup(nil, service_type, service_name)
|
60
|
-
provider = service[provider_name]
|
61
|
-
unless provider
|
62
|
-
raise Puppet::Error.new("Environment '#{@env.name}', cannot find module_data_provider '#{provider_name}'")
|
63
|
-
end
|
64
|
-
provider
|
65
|
-
end
|
66
|
-
|
67
|
-
def initialize_env_provider
|
68
|
-
# Get the environment's configuration since we need to know which data provider
|
69
|
-
# should be used (includes 'none' which gets a null implementation).
|
70
|
-
#
|
71
|
-
env_conf = Puppet.lookup(:environments).get_conf(@env.name)
|
72
|
-
|
73
|
-
# Get the data provider and find the bound implementation
|
74
|
-
# TODO: PUP-1640, drop the nil check when legacy env support is dropped
|
75
|
-
provider_name = env_conf.nil? ? 'none' : env_conf.environment_data_provider
|
76
|
-
service_type = Puppet::Plugins::DataProviders.hash_of_environment_data_providers
|
77
|
-
service_name = Puppet::Plugins::DataProviders::ENV_DATA_PROVIDERS_KEY
|
78
|
-
|
79
|
-
# Get the service (registry of known implementations)
|
80
|
-
# Support running tests without an injector being configured == using a null implementation
|
81
|
-
unless injector = Puppet.lookup(:injector) { nil }
|
82
|
-
return Puppet::Plugins::DataProviders::EnvironmentDataProvider.new()
|
83
|
-
end
|
84
|
-
service = Puppet.lookup(:injector).lookup(nil, service_type, service_name)
|
85
|
-
provider = service[provider_name]
|
86
|
-
unless provider
|
87
|
-
raise Puppet::Error.new("Environment '#{@env.name}', cannot find environment_data_provider '#{provider_name}'")
|
88
|
-
end
|
89
|
-
provider
|
90
|
-
end
|
91
30
|
end
|
@@ -1,30 +1,9 @@
|
|
1
1
|
module Puppet::DataProviders::DataFunctionSupport
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# This makes it possible to return data that is tailored for the request.
|
6
|
-
# The class including this module must implement `loader(scope)` to return the apropriate loader.
|
7
|
-
#
|
8
|
-
# If a block is given, it will be called to validate the data hash when it is retrieved from a function call. The
|
9
|
-
# block must return the validated data or raise a {Puppet::Error} to indicate that the data is invalid.
|
10
|
-
# The block is not called when the data is found in the compiler or in the cache.
|
11
|
-
#
|
12
|
-
# @param key [String] The data key such as the name of a module or the constant 'environment'
|
13
|
-
# @param scope [Parser::Scope] The scope
|
14
|
-
# @return [Hash] The data hash for the given _key_
|
15
|
-
# @yield An optional block that can be used for validation of the data returned from the function
|
16
|
-
# @yieldparam [Hash] data The data to validate
|
17
|
-
# @yieldreturn [Hash] The validated data
|
18
|
-
#
|
19
|
-
def data(key, scope, &block)
|
20
|
-
compiler = scope.compiler
|
21
|
-
adapter = Puppet::DataProviders::DataAdapter.get(compiler) || Puppet::DataProviders::DataAdapter.adapt(compiler)
|
22
|
-
adapter.data[key] ||= initialize_data_from_function("#{key}::data", key, scope, &block)
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize_data_from_function(name, key, scope)
|
2
|
+
def initialize_data(data_key, lookup_invocation)
|
3
|
+
name = "#{data_key}::data"
|
4
|
+
scope = lookup_invocation.scope
|
26
5
|
Puppet::Util::Profiler.profile("Called #{name}", [ :functions, name ]) do
|
27
|
-
loader = loader(
|
6
|
+
loader = loader(data_key, scope)
|
28
7
|
if loader && func = loader.load(:function, name)
|
29
8
|
# function found, call without arguments, must return a Hash
|
30
9
|
# TODO: Validate the function - to ensure it does not contain unwanted side effects
|
@@ -37,7 +16,7 @@ module Puppet::DataProviders::DataFunctionSupport
|
|
37
16
|
# validate result if block given
|
38
17
|
result = yield(result) if block_given?
|
39
18
|
else
|
40
|
-
raise Puppet::Error.new("
|
19
|
+
raise Puppet::Error.new("Cannot find the function '#{name}' - required when using 'function' data provider scheme")
|
41
20
|
end
|
42
21
|
result
|
43
22
|
end
|
@@ -11,16 +11,6 @@ module Puppet::DataProviders; end
|
|
11
11
|
class Puppet::DataProviders::FunctionEnvDataProvider < Puppet::Plugins::DataProviders::EnvironmentDataProvider
|
12
12
|
include Puppet::DataProviders::DataFunctionSupport
|
13
13
|
|
14
|
-
def lookup(name, scope, merge)
|
15
|
-
begin
|
16
|
-
hash = data('environment', scope)
|
17
|
-
throw :no_such_key unless hash.include?(name)
|
18
|
-
hash[name]
|
19
|
-
rescue *Puppet::Error => detail
|
20
|
-
raise Puppet::DataBinding::LookupError.new(detail.message, detail)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
14
|
def loader(key, scope)
|
25
15
|
# This loader allows the data function to be private or public in the environment
|
26
16
|
scope.compiler.loaders.private_environment_loader
|
@@ -9,30 +9,8 @@ module Puppet::DataProviders; end
|
|
9
9
|
# is only produced once per compilation.
|
10
10
|
#
|
11
11
|
class Puppet::DataProviders::FunctionModuleDataProvider < Puppet::Plugins::DataProviders::ModuleDataProvider
|
12
|
-
MODULE_NAME = 'module_name'.freeze
|
13
12
|
include Puppet::DataProviders::DataFunctionSupport
|
14
13
|
|
15
|
-
def lookup(name, scope, merge)
|
16
|
-
# Do not attempt to do a lookup in a module unless the name is qualified.
|
17
|
-
qual_index = name.index('::')
|
18
|
-
throw :no_such_key if qual_index.nil?
|
19
|
-
module_name = name[0..qual_index-1]
|
20
|
-
begin
|
21
|
-
hash = data(module_name, scope) do | data |
|
22
|
-
module_prefix = "#{module_name}::"
|
23
|
-
data.each_pair do |k,v|
|
24
|
-
unless k.is_a?(String) && k.start_with?(module_prefix)
|
25
|
-
raise Puppet::Error, "Module data for module '#{module_name}' must use keys qualified with the name of the module"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
throw :no_such_key unless hash.include?(name)
|
30
|
-
hash[name]
|
31
|
-
rescue *Puppet::Error => detail
|
32
|
-
raise Puppet::DataBinding::LookupError.new(detail.message, detail)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
14
|
def loader(key, scope)
|
37
15
|
scope.compiler.loaders.private_loader_for_module(key)
|
38
16
|
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require_relative 'hiera_interpolate'
|
3
|
+
|
4
|
+
module Puppet::DataProviders
|
5
|
+
class HieraConfig
|
6
|
+
include Puppet::Plugins::DataProviders
|
7
|
+
include HieraInterpolate
|
8
|
+
|
9
|
+
DEFAULT_CONFIG = {
|
10
|
+
'version' => 4,
|
11
|
+
'datadir' => 'data',
|
12
|
+
'hierarchy' => [
|
13
|
+
{
|
14
|
+
'name' => 'common',
|
15
|
+
'backend' => 'yaml'
|
16
|
+
}
|
17
|
+
]
|
18
|
+
}.freeze
|
19
|
+
|
20
|
+
def self.config_type
|
21
|
+
@@CONFIG_TYPE ||= create_config_type
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.symkeys_to_string(struct)
|
25
|
+
case(struct)
|
26
|
+
when Hash
|
27
|
+
Hash[struct.map { |k,v| [k.to_s, symkeys_to_string(v)] }]
|
28
|
+
when Array
|
29
|
+
struct.map { |v| symkeys_to_string(v) }
|
30
|
+
else
|
31
|
+
struct
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.create_config_type
|
36
|
+
hierarchy_elem_type_base = 'Struct[{'\
|
37
|
+
'backend=>String[1],'\
|
38
|
+
'name=>String[1],'\
|
39
|
+
'datadir=>Optional[String[1]]'
|
40
|
+
|
41
|
+
hierarchy_elem_type_v1 = hierarchy_elem_type_base + ',path=>String[1]}]'
|
42
|
+
hierarchy_elem_type_v2 = hierarchy_elem_type_base + ',paths=>Array[String[1]]}]'
|
43
|
+
hierarchy_elem_type_v3 = hierarchy_elem_type_base + '}]'
|
44
|
+
|
45
|
+
Puppet::Pops::Types::TypeParser.new.parse('Struct[{'\
|
46
|
+
'version=>Integer[4],'\
|
47
|
+
"hierarchy=>Optional[Array[Variant[#{hierarchy_elem_type_v1},#{hierarchy_elem_type_v2},#{hierarchy_elem_type_v3}]]],"\
|
48
|
+
'datadir=>Optional[String[1]]}]')
|
49
|
+
end
|
50
|
+
private_class_method :create_config_type
|
51
|
+
|
52
|
+
attr_reader :config_path, :version
|
53
|
+
|
54
|
+
# Creates a new HieraConfig from the given _config_root_. This is where the 'hiera.yaml' is expected to be found
|
55
|
+
# and is also the base location used when resolving relative paths.
|
56
|
+
#
|
57
|
+
# @param config_root [Pathname] Absolute path to the configuration root
|
58
|
+
# @api public
|
59
|
+
def initialize(config_root)
|
60
|
+
@config_root = config_root
|
61
|
+
@config_path = config_root + 'hiera.yaml'
|
62
|
+
if @config_path.exist?
|
63
|
+
@config = validate_config(HieraConfig.symkeys_to_string(YAML.load_file(@config_path)))
|
64
|
+
@config['hierarchy'] ||= DEFAULT_CONFIG['hierarchy']
|
65
|
+
@config['datadir'] ||= DEFAULT_CONFIG['datadir']
|
66
|
+
else
|
67
|
+
@config = DEFAULT_CONFIG
|
68
|
+
end
|
69
|
+
@version = @config['version']
|
70
|
+
end
|
71
|
+
|
72
|
+
def create_data_providers(lookup_invocation)
|
73
|
+
injector = Puppet.lookup(:injector)
|
74
|
+
service_type = Registry.hash_of_path_based_data_provider_factories
|
75
|
+
default_datadir = @config['datadir']
|
76
|
+
|
77
|
+
# Hashes enumerate their values in the order that the corresponding keys were inserted so it's safe to use
|
78
|
+
# a hash for the data_providers.
|
79
|
+
data_providers = {}
|
80
|
+
@config['hierarchy'].each do |he|
|
81
|
+
name = he['name']
|
82
|
+
raise Puppet::DataBinding::LookupError, "#{path}: Name '#{name}' defined more than once" if data_providers.include?(name)
|
83
|
+
original_paths = he['paths']
|
84
|
+
if original_paths.nil?
|
85
|
+
single_path = he['path']
|
86
|
+
single_path = name if single_path.nil?
|
87
|
+
original_paths = [single_path]
|
88
|
+
end
|
89
|
+
paths = original_paths.map { |path| interpolate(path, lookup_invocation, false)}
|
90
|
+
provider_name = he['backend']
|
91
|
+
provider_factory = injector.lookup(nil, service_type, PATH_BASED_DATA_PROVIDER_FACTORIES_KEY)[provider_name]
|
92
|
+
raise Puppet::DataBinding::LookupError, "#{@config_path}: No data provider is registered for backend '#{provider_name}' " unless provider_factory
|
93
|
+
|
94
|
+
datadir = @config_root + (he['datadir'] || default_datadir)
|
95
|
+
resolved_paths = provider_factory.resolve_paths(datadir, original_paths, paths, lookup_invocation)
|
96
|
+
data_providers[name] = provider_factory.create(name, resolved_paths)
|
97
|
+
end
|
98
|
+
data_providers.values
|
99
|
+
end
|
100
|
+
|
101
|
+
def validate_config(hiera_config)
|
102
|
+
Puppet::Pops::Types::TypeAsserter.assert_instance_of(@config_path, self.class.config_type, hiera_config)
|
103
|
+
end
|
104
|
+
private :validate_config
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# This file is loaded by the autoloader, and it does not find the hiera support unless required relative
|
2
|
+
require_relative 'hiera_support'
|
3
|
+
|
4
|
+
module Puppet::DataProviders
|
5
|
+
class HieraEnvDataProvider < Puppet::Plugins::DataProviders::EnvironmentDataProvider
|
6
|
+
include HieraSupport
|
7
|
+
|
8
|
+
# Return the root of the environment found in the given _scope_
|
9
|
+
#
|
10
|
+
# @param data_key [String] not used
|
11
|
+
# @param scope [Puppet::Parser::Scope] the parser scope where the environment is found
|
12
|
+
# @return [Pathname] Path to root of the environment
|
13
|
+
def provider_root(_, scope)
|
14
|
+
Pathname.new(scope.environment.configuration.path_to_env)
|
15
|
+
end
|
16
|
+
protected :provider_root
|
17
|
+
end
|
18
|
+
end
|