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
@@ -1,5 +1,8 @@
|
|
1
1
|
require 'puppet/indirector/none'
|
2
2
|
|
3
3
|
class Puppet::DataBinding::None < Puppet::Indirector::None
|
4
|
-
desc "A Dummy terminus that always
|
4
|
+
desc "A Dummy terminus that always throws :no_such_key for data lookups."
|
5
|
+
def find(request)
|
6
|
+
throw :no_such_key
|
7
|
+
end
|
5
8
|
end
|
@@ -1,15 +1,23 @@
|
|
1
1
|
require 'puppet/indirector/code'
|
2
2
|
require 'puppet/file_bucket/file'
|
3
3
|
require 'puppet/util/checksums'
|
4
|
+
require 'puppet/util/diff'
|
4
5
|
require 'fileutils'
|
5
6
|
|
6
7
|
module Puppet::FileBucketFile
|
7
8
|
class File < Puppet::Indirector::Code
|
8
9
|
include Puppet::Util::Checksums
|
10
|
+
include Puppet::Util::Diff
|
9
11
|
|
10
12
|
desc "Store files in a directory set based on their checksums."
|
11
13
|
|
12
14
|
def find(request)
|
15
|
+
request.options[:bucket_path] ||= Puppet[:bucketdir]
|
16
|
+
# If filebucket mode is 'list'
|
17
|
+
if request.options[:list_all]
|
18
|
+
return nil unless ::File.exists?(request.options[:bucket_path])
|
19
|
+
return list(request)
|
20
|
+
end
|
13
21
|
checksum, files_original_path = request_to_checksum_and_path(request)
|
14
22
|
contents_file = path_for(request.options[:bucket_path], checksum, 'contents')
|
15
23
|
paths_file = path_for(request.options[:bucket_path], checksum, 'paths')
|
@@ -18,7 +26,8 @@ module Puppet::FileBucketFile
|
|
18
26
|
if request.options[:diff_with]
|
19
27
|
other_contents_file = path_for(request.options[:bucket_path], request.options[:diff_with], 'contents')
|
20
28
|
raise "could not find diff_with #{request.options[:diff_with]}" unless Puppet::FileSystem.exist?(other_contents_file)
|
21
|
-
|
29
|
+
raise "Unable to diff on this platform" unless Puppet[:diff] != ""
|
30
|
+
return diff(Puppet::FileSystem.path_string(contents_file), Puppet::FileSystem.path_string(other_contents_file))
|
22
31
|
else
|
23
32
|
Puppet.info "FileBucket read #{checksum}"
|
24
33
|
model.new(Puppet::FileSystem.binread(contents_file))
|
@@ -28,6 +37,54 @@ module Puppet::FileBucketFile
|
|
28
37
|
end
|
29
38
|
end
|
30
39
|
|
40
|
+
def list(request)
|
41
|
+
if request.remote?
|
42
|
+
raise Puppet::Error, "Listing remote file buckets is not allowed"
|
43
|
+
end
|
44
|
+
|
45
|
+
fromdate = request.options[:fromdate] || "0:0:0 1-1-1970"
|
46
|
+
todate = request.options[:todate] || Time.now.strftime("%F %T")
|
47
|
+
begin
|
48
|
+
to = Time.parse(todate)
|
49
|
+
rescue ArgumentError
|
50
|
+
raise Puppet::Error, "Error while parsing 'todate'"
|
51
|
+
end
|
52
|
+
begin
|
53
|
+
from = Time.parse(fromdate)
|
54
|
+
rescue ArgumentError
|
55
|
+
raise Puppet::Error, "Error while parsing 'fromdate'"
|
56
|
+
end
|
57
|
+
# Setting hash's default value to [], needed by the following loop
|
58
|
+
bucket = Hash.new {[]}
|
59
|
+
msg = ""
|
60
|
+
# Get all files with mtime between 'from' and 'to'
|
61
|
+
Pathname.new(request.options[:bucket_path]).find { |item|
|
62
|
+
if item.file? and item.basename.to_s == "paths"
|
63
|
+
filenames = item.read.strip.split("\n")
|
64
|
+
filestat = Time.parse(item.stat.mtime.to_s)
|
65
|
+
if from <= filestat and filestat <= to
|
66
|
+
filenames.each do |filename|
|
67
|
+
bucket[filename] += [[ item.stat.mtime , item.parent.basename ]]
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
}
|
72
|
+
# Sort the results
|
73
|
+
bucket.each { |filename, contents|
|
74
|
+
contents.sort_by! do |item|
|
75
|
+
item[0]
|
76
|
+
end
|
77
|
+
}
|
78
|
+
# Build the output message. Sorted by names then by dates
|
79
|
+
bucket.sort.each { |filename,contents|
|
80
|
+
contents.each { |mtime, chksum|
|
81
|
+
date = mtime.strftime("%F %T")
|
82
|
+
msg += "#{chksum} #{date} #{filename}\n"
|
83
|
+
}
|
84
|
+
}
|
85
|
+
return model.new(msg)
|
86
|
+
end
|
87
|
+
|
31
88
|
def head(request)
|
32
89
|
checksum, files_original_path = request_to_checksum_and_path(request)
|
33
90
|
contents_file = path_for(request.options[:bucket_path], checksum, 'contents')
|
@@ -18,6 +18,7 @@ class Puppet::Indirector::Hiera < Puppet::Indirector::Terminus
|
|
18
18
|
def find(request)
|
19
19
|
not_found = Object.new
|
20
20
|
options = request.options
|
21
|
+
Puppet.debug { "Performing a hiera indirector lookup of #{request.key} with options #{options.inspect}" }
|
21
22
|
value = hiera.lookup(request.key, not_found, Hiera::Scope.new(options[:variables]), nil, convert_merge(options[:merge]))
|
22
23
|
throw :no_such_key if value.equal?(not_found)
|
23
24
|
value
|
@@ -34,8 +35,11 @@ class Puppet::Indirector::Hiera < Puppet::Indirector::Terminus
|
|
34
35
|
def convert_merge(merge)
|
35
36
|
case merge
|
36
37
|
when nil
|
38
|
+
when 'first'
|
37
39
|
# Nil is OK. Defaults to Hiera :priority
|
38
40
|
nil
|
41
|
+
when Puppet::Pops::MergeStrategy
|
42
|
+
convert_merge(merge.configuration)
|
39
43
|
when 'unique'
|
40
44
|
# Equivalent to Hiera :array
|
41
45
|
:array
|
@@ -17,7 +17,7 @@ class Puppet::Indirector::JSON < Puppet::Indirector::Terminus
|
|
17
17
|
|
18
18
|
Puppet::Util.replace_file(filename, 0660) {|f| f.print to_json(request.instance) }
|
19
19
|
rescue TypeError => detail
|
20
|
-
Puppet.log_exception "Could not save #{self.name} #{request.key}: #{detail}"
|
20
|
+
Puppet.log_exception(detail, "Could not save #{self.name} #{request.key}: #{detail}")
|
21
21
|
end
|
22
22
|
|
23
23
|
def destroy(request)
|
@@ -23,7 +23,7 @@ class Puppet::Indirector::Msgpack < Puppet::Indirector::Terminus
|
|
23
23
|
|
24
24
|
Puppet::Util.replace_file(filename, 0660) {|f| f.print to_msgpack(request.instance) }
|
25
25
|
rescue TypeError => detail
|
26
|
-
Puppet.log_exception "Could not save #{self.name} #{request.key}: #{detail}"
|
26
|
+
Puppet.log_exception(detail, "Could not save #{self.name} #{request.key}: #{detail}")
|
27
27
|
end
|
28
28
|
|
29
29
|
def destroy(request)
|
@@ -243,15 +243,14 @@ class Puppet::Indirector::Request
|
|
243
243
|
@port = uri.port.to_i
|
244
244
|
end
|
245
245
|
|
246
|
-
|
247
|
-
|
248
|
-
if uri.scheme == '
|
249
|
-
@
|
250
|
-
|
246
|
+
# filebucket:// is only used internally to pass request details
|
247
|
+
# from Dipper objects to the indirector. The wire always uses HTTPS.
|
248
|
+
if uri.scheme == 'filebucket'
|
249
|
+
@protocol = 'https'
|
250
|
+
else
|
251
|
+
@protocol = uri.scheme
|
251
252
|
end
|
252
253
|
|
253
|
-
|
254
|
-
@key ||= ''
|
255
|
-
self.environment = env unless env == ''
|
254
|
+
@key = URI.unescape(uri.path.sub(/^\//, ''))
|
256
255
|
end
|
257
256
|
end
|
@@ -27,7 +27,7 @@ class Puppet::Indirector::ResourceType::Parser < Puppet::Indirector::Code
|
|
27
27
|
krt = resource_types_in(request.environment)
|
28
28
|
|
29
29
|
# This is a bit ugly.
|
30
|
-
[:hostclass, :definition, :node].each do |type|
|
30
|
+
[:hostclass, :definition, :application, :node].each do |type|
|
31
31
|
# We have to us 'find_<type>' here because it will
|
32
32
|
# load any missing types from disk, whereas the plain
|
33
33
|
# '<type>' method only returns from memory.
|
@@ -66,14 +66,16 @@ class Puppet::Indirector::ResourceType::Parser < Puppet::Indirector::Code
|
|
66
66
|
krt.hostclasses.values
|
67
67
|
when "defined_type"
|
68
68
|
krt.definitions.values
|
69
|
+
when "application"
|
70
|
+
krt.applications.values
|
69
71
|
when "node"
|
70
72
|
krt.nodes.values
|
71
73
|
when nil
|
72
|
-
result_candidates = [krt.hostclasses.values, krt.definitions.values, krt.nodes.values]
|
74
|
+
result_candidates = [krt.hostclasses.values, krt.definitions.values, krt.applications.values, krt.nodes.values]
|
73
75
|
else
|
74
76
|
raise ArgumentError, "Unrecognized kind filter: " +
|
75
77
|
"'#{request.options[:kind]}', expected one " +
|
76
|
-
" of 'class', 'defined_type', or 'node'."
|
78
|
+
" of 'class', 'defined_type', 'application', or 'node'."
|
77
79
|
end
|
78
80
|
|
79
81
|
result = result_candidates.flatten.reject { |t| t.name == "" }
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'puppet'
|
2
|
+
require 'puppet/pops'
|
3
|
+
require 'puppet/pops/evaluator/literal_evaluator'
|
4
|
+
|
5
|
+
class Puppet::InfoService::ClassInformationService
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@file_to_result = {}
|
9
|
+
@parser = Puppet::Pops::Parser::EvaluatingParser.new()
|
10
|
+
end
|
11
|
+
|
12
|
+
def classes_per_environment(env_file_hash)
|
13
|
+
# In this version of puppet there is only one way to parse manifests, as feature switches per environment
|
14
|
+
# are added or removed, this logic needs to change to compute the result per environment with the correct
|
15
|
+
# feature flags in effect.
|
16
|
+
|
17
|
+
unless env_file_hash.is_a?(Hash)
|
18
|
+
raise ArgumentError, 'Given argument must be a Hash'
|
19
|
+
end
|
20
|
+
|
21
|
+
result = {}
|
22
|
+
|
23
|
+
# for each environment
|
24
|
+
# for each file
|
25
|
+
# if file already processed, use last result or error
|
26
|
+
#
|
27
|
+
env_file_hash.each do |env, files|
|
28
|
+
env_result = result[env] = {}
|
29
|
+
files.each do |f|
|
30
|
+
env_result[f] = result_of(f)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
result
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def type_parser
|
39
|
+
# Safe to cache this as it would otherwise constantly build up the visitor cache
|
40
|
+
@@type_parser ||= Puppet::Pops::Types::TypeParser.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def literal_evaluator
|
44
|
+
@@literal_evaluator ||= Puppet::Pops::Evaluator::LiteralEvaluator.new
|
45
|
+
end
|
46
|
+
|
47
|
+
def result_of(f)
|
48
|
+
entry = @file_to_result[f]
|
49
|
+
if entry.nil?
|
50
|
+
@file_to_result[f] = entry = parse_file(f)
|
51
|
+
end
|
52
|
+
entry
|
53
|
+
end
|
54
|
+
|
55
|
+
def parse_file(f)
|
56
|
+
begin
|
57
|
+
parse_result = @parser.parse_file(f)
|
58
|
+
parse_result.definitions.select {|d| d.is_a?(Puppet::Pops::Model::HostClassDefinition)}.map do |d|
|
59
|
+
{:name => d.name,
|
60
|
+
:params => params = d.parameters.map {|p| extract_param(p) }
|
61
|
+
}
|
62
|
+
end
|
63
|
+
rescue StandardError => e
|
64
|
+
{:error => e.message }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def extract_param(p)
|
69
|
+
extract_default(extract_type({:name => p.name}, p), p)
|
70
|
+
end
|
71
|
+
|
72
|
+
def extract_type(structure, p)
|
73
|
+
return structure if p.type_expr.nil?
|
74
|
+
structure[:type] = typeexpr_to_string(p.type_expr)
|
75
|
+
structure
|
76
|
+
end
|
77
|
+
|
78
|
+
def extract_default(structure, p)
|
79
|
+
value_expr = p.value
|
80
|
+
return structure if value_expr.nil?
|
81
|
+
default_value = value_as_literal(value_expr)
|
82
|
+
if !default_value.nil?
|
83
|
+
structure[:default_literal] = default_value
|
84
|
+
return structure
|
85
|
+
end
|
86
|
+
structure[:default_source] = extract_value_source(value_expr)
|
87
|
+
structure
|
88
|
+
end
|
89
|
+
|
90
|
+
def typeexpr_to_string(type_expr)
|
91
|
+
begin
|
92
|
+
type_parser.interpret_any(type_expr).to_s
|
93
|
+
rescue Puppet::ParseError
|
94
|
+
# type is to complex - contains expressions that are not literal
|
95
|
+
nil
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def value_as_literal(value_expr)
|
100
|
+
catch(:not_literal) do
|
101
|
+
return literal_evaluator.literal(value_expr)
|
102
|
+
end
|
103
|
+
nil
|
104
|
+
end
|
105
|
+
|
106
|
+
# Extracts the source for the expression
|
107
|
+
def extract_value_source(value_expr)
|
108
|
+
position = Puppet::Pops::Adapters::SourcePosAdapter.adapt(value_expr)
|
109
|
+
position.extract_tree_text
|
110
|
+
end
|
111
|
+
end
|
@@ -15,15 +15,16 @@ module Puppet::ModuleTool
|
|
15
15
|
attr_accessor :module_name
|
16
16
|
|
17
17
|
DEFAULTS = {
|
18
|
-
'name'
|
19
|
-
'version'
|
20
|
-
'author'
|
21
|
-
'summary'
|
22
|
-
'license'
|
23
|
-
'source'
|
24
|
-
'project_page'
|
25
|
-
'issues_url'
|
26
|
-
'dependencies'
|
18
|
+
'name' => nil,
|
19
|
+
'version' => nil,
|
20
|
+
'author' => nil,
|
21
|
+
'summary' => nil,
|
22
|
+
'license' => 'Apache-2.0',
|
23
|
+
'source' => '',
|
24
|
+
'project_page' => nil,
|
25
|
+
'issues_url' => nil,
|
26
|
+
'dependencies' => Set.new.freeze,
|
27
|
+
'data_provider' => nil,
|
27
28
|
}
|
28
29
|
|
29
30
|
def initialize
|
@@ -52,6 +53,7 @@ module Puppet::ModuleTool
|
|
52
53
|
process_name(data) if data['name']
|
53
54
|
process_version(data) if data['version']
|
54
55
|
process_source(data) if data['source']
|
56
|
+
process_data_provider(data) if data['data_provider']
|
55
57
|
merge_dependencies(data) if data['dependencies']
|
56
58
|
|
57
59
|
@data.merge!(data)
|
@@ -128,6 +130,10 @@ module Puppet::ModuleTool
|
|
128
130
|
validate_version(data['version'])
|
129
131
|
end
|
130
132
|
|
133
|
+
def process_data_provider(data)
|
134
|
+
validate_data_provider(data['data_provider'])
|
135
|
+
end
|
136
|
+
|
131
137
|
# Do basic parsing of the source parameter. If the source is hosted on
|
132
138
|
# GitHub, we can predict sensible defaults for both project_page and
|
133
139
|
# issues_url.
|
@@ -188,6 +194,23 @@ module Puppet::ModuleTool
|
|
188
194
|
raise ArgumentError, "Invalid 'version' field in metadata.json: #{err}"
|
189
195
|
end
|
190
196
|
|
197
|
+
# Validates that the given _value_ is a symbolic name that starts with a letter
|
198
|
+
# and then contains only letters, digits, or underscore. Will raise an ArgumentError
|
199
|
+
# if that's not the case.
|
200
|
+
#
|
201
|
+
# @param value [Object] The value to be tested
|
202
|
+
def validate_data_provider(value)
|
203
|
+
err = nil
|
204
|
+
if value.is_a?(String)
|
205
|
+
unless value =~ /^[a-zA-Z][a-zA-Z0-9_]*$/
|
206
|
+
err = value =~ /^[a-zA-Z]/ ? 'contains non-alphanumeric characters' : 'must begin with a letter'
|
207
|
+
end
|
208
|
+
else
|
209
|
+
err = 'must be a string'
|
210
|
+
end
|
211
|
+
raise ArgumentError, "field 'data_provider' #{err}" if err
|
212
|
+
end
|
213
|
+
|
191
214
|
# Validates that the version range can be parsed by Semantic.
|
192
215
|
def validate_version_range(version_range)
|
193
216
|
Semantic::VersionRange.parse(version_range)
|
@@ -2,78 +2,82 @@
|
|
2
2
|
|
3
3
|
#### Table of Contents
|
4
4
|
|
5
|
-
1. [
|
6
|
-
|
7
|
-
3. [Setup - The basics of getting started with <%= metadata.name %>](#setup)
|
5
|
+
1. [Description](#description)
|
6
|
+
1. [Setup - The basics of getting started with <%= metadata.name %>](#setup)
|
8
7
|
* [What <%= metadata.name %> affects](#what-<%= metadata.name %>-affects)
|
9
8
|
* [Setup requirements](#setup-requirements)
|
10
9
|
* [Beginning with <%= metadata.name %>](#beginning-with-<%= metadata.name %>)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
1. [Usage - Configuration options and additional functionality](#usage)
|
11
|
+
1. [Reference - An under-the-hood peek at what the module is doing and how](#reference)
|
12
|
+
1. [Limitations - OS compatibility, etc.](#limitations)
|
13
|
+
1. [Development - Guide for contributing to the module](#development)
|
15
14
|
|
16
|
-
##
|
15
|
+
## Description
|
17
16
|
|
18
|
-
|
19
|
-
This is your 30
|
20
|
-
OS/Puppet version it works with.
|
17
|
+
Start with a one- or two-sentence summary of what the module does and/or what
|
18
|
+
problem it solves. This is your 30-second elevator pitch for your module.
|
19
|
+
Consider including OS/Puppet version it works with.
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
If applicable, this section should have a brief description of the technology
|
25
|
-
the module integrates with and what that integration enables. This section
|
21
|
+
You can give more descriptive information in a second paragraph. This paragraph
|
26
22
|
should answer the questions: "What does this module *do*?" and "Why would I use
|
27
|
-
it?"
|
28
|
-
|
29
|
-
If your module has a range of functionality (installation, configuration,
|
30
|
-
management, etc.) this is the time to mention it.
|
23
|
+
it?" If your module has a range of functionality (installation, configuration,
|
24
|
+
management, etc.), this is the time to mention it.
|
31
25
|
|
32
26
|
## Setup
|
33
27
|
|
34
|
-
### What <%= metadata.name %> affects
|
28
|
+
### What <%= metadata.name %> affects **OPTIONAL**
|
29
|
+
|
30
|
+
If it's obvious what your module touches, you can skip this section. For
|
31
|
+
example, folks can probably figure out that your mysql_instance module affects
|
32
|
+
their MySQL instances.
|
33
|
+
|
34
|
+
If there's more that they should know about, though, this is the place to mention:
|
35
35
|
|
36
36
|
* A list of files, packages, services, or operations that the module will alter,
|
37
|
-
impact, or execute
|
38
|
-
*
|
39
|
-
*
|
37
|
+
impact, or execute.
|
38
|
+
* Dependencies that your module automatically installs.
|
39
|
+
* Warnings or other important notices.
|
40
40
|
|
41
41
|
### Setup Requirements **OPTIONAL**
|
42
42
|
|
43
43
|
If your module requires anything extra before setting up (pluginsync enabled,
|
44
44
|
etc.), mention it here.
|
45
45
|
|
46
|
-
|
46
|
+
If your most recent release breaks compatibility or requires particular steps
|
47
|
+
for upgrading, you might want to include an additional "Upgrading" section
|
48
|
+
here.
|
47
49
|
|
48
|
-
|
50
|
+
### Beginning with <%= metadata.name %>
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
52
|
+
The very basic steps needed for a user to get the module up and running. This
|
53
|
+
can include setup steps, if necessary, or it can be an example of the most
|
54
|
+
basic use of the module.
|
53
55
|
|
54
56
|
## Usage
|
55
57
|
|
56
|
-
|
57
|
-
|
58
|
+
This section is where you describe how to customize, configure, and do the
|
59
|
+
fancy stuff with your module here. It's especially helpful if you include usage
|
60
|
+
examples and code samples for doing things with your module.
|
58
61
|
|
59
62
|
## Reference
|
60
63
|
|
61
|
-
Here, list
|
62
|
-
|
63
|
-
|
64
|
-
|
64
|
+
Here, include a complete list of your module's classes, types, providers,
|
65
|
+
facts, along with the parameters for each. Users refer to this section (thus
|
66
|
+
the name "Reference") to find specific details; most users don't read it per
|
67
|
+
se.
|
65
68
|
|
66
69
|
## Limitations
|
67
70
|
|
68
|
-
This is where you list OS compatibility, version compatibility, etc.
|
71
|
+
This is where you list OS compatibility, version compatibility, etc. If there
|
72
|
+
are Known Issues, you might want to include them under their own heading here.
|
69
73
|
|
70
74
|
## Development
|
71
75
|
|
72
76
|
Since your module is awesome, other users will want to play with it. Let them
|
73
77
|
know what the ground rules for contributing are.
|
74
78
|
|
75
|
-
## Release Notes/Contributors/Etc **Optional**
|
79
|
+
## Release Notes/Contributors/Etc. **Optional**
|
76
80
|
|
77
81
|
If you aren't using changelog, put your release notes here (though you should
|
78
|
-
consider using changelog). You
|
79
|
-
necessary or important to include here. Please use the `## ` header.
|
82
|
+
consider using changelog). You can also add any additional sections you feel
|
83
|
+
are necessary or important to include here. Please use the `## ` header.
|