puppet 4.2.0 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +5 -7
- data/README.md +1 -1
- data/Rakefile +20 -0
- data/ext/debian/puppet.init +0 -1
- data/ext/debian/puppet.logrotate +14 -5
- data/ext/osx/puppet.plist +2 -4
- data/ext/project_data.yaml +1 -1
- data/ext/redhat/client.init +65 -12
- data/ext/redhat/logrotate +15 -3
- data/ext/redhat/puppet.spec.erb +5 -1
- data/ext/redhat/server.init +1 -1
- data/ext/solaris/smf/puppet +44 -0
- data/ext/solaris/smf/puppet.xml +44 -0
- data/ext/suse/client.init +27 -27
- data/ext/suse/server.init +2 -2
- data/ext/systemd/puppet.service +1 -0
- data/install.rb +21 -39
- data/lib/hiera/puppet_function.rb +5 -5
- data/lib/puppet/agent/locker.rb +11 -2
- data/lib/puppet/agent.rb +4 -4
- data/lib/puppet/application/agent.rb +28 -14
- data/lib/puppet/application/apply.rb +17 -4
- data/lib/puppet/application/cert.rb +16 -0
- data/lib/puppet/application/filebucket.rb +78 -4
- data/lib/puppet/application/lookup.rb +356 -0
- data/lib/puppet/application/master.rb +5 -1
- data/lib/puppet/configurer.rb +9 -5
- data/lib/puppet/context/trusted_information.rb +21 -1
- data/lib/puppet/context.rb +16 -1
- data/lib/puppet/daemon.rb +17 -13
- data/lib/puppet/data_binding.rb +4 -2
- 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/data_providers.rb +12 -13
- data/lib/puppet/defaults.rb +14 -3
- data/lib/puppet/environments.rb +94 -6
- 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/file_system/windows.rb +3 -1
- 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/epp.rb +29 -37
- data/lib/puppet/functions/filter.rb +60 -25
- 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 +77 -4
- data/lib/puppet/functions/inline_epp.rb +44 -71
- 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/functions.rb +2 -4
- 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/indirection.rb +6 -1
- 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/class_information_service.rb +111 -0
- data/lib/puppet/info_service.rb +7 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
- 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/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
- data/lib/puppet/network/authconfig.rb +21 -1
- data/lib/puppet/network/authorization.rb +8 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
- data/lib/puppet/network/http/api/master/v3.rb +7 -1
- data/lib/puppet/node/environment.rb +9 -2
- data/lib/puppet/node.rb +11 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
- 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/compiler/catalog_validator.rb +33 -0
- data/lib/puppet/parser/compiler.rb +300 -12
- 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/epp.rb +29 -37
- 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/inline_epp.rb +35 -60
- data/lib/puppet/parser/functions/inline_template.rb +2 -2
- 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 +103 -21
- data/lib/puppet/parser.rb +3 -0
- data/lib/puppet/plugins/configuration.rb +3 -2
- data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
- data/lib/puppet/plugins/data_providers/registry.rb +84 -0
- data/lib/puppet/plugins/data_providers.rb +12 -60
- 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 +10 -6
- 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 +11 -3
- data/lib/puppet/pops/label_provider.rb +1 -1
- data/lib/puppet/pops/lookup/explainer.rb +402 -0
- data/lib/puppet/pops/lookup/invocation.rb +117 -0
- data/lib/puppet/pops/lookup.rb +25 -47
- data/lib/puppet/pops/merge_strategy.rb +73 -5
- data/lib/puppet/pops/model/factory.rb +38 -3
- data/lib/puppet/pops/model/model_label_provider.rb +10 -1
- data/lib/puppet/pops/model/model_meta.rb +19 -1
- 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 +65 -2
- data/lib/puppet/pops/parser/eparser.rb +1569 -1241
- data/lib/puppet/pops/parser/lexer2.rb +32 -1
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/parser_support.rb +25 -13
- data/lib/puppet/pops/patterns.rb +3 -0
- 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 +118 -129
- data/lib/puppet/pops/types/types.rb +1394 -255
- data/lib/puppet/pops/types/types_meta.rb +0 -234
- data/lib/puppet/pops/validation/checker4_0.rb +49 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +3 -1
- data/lib/puppet/pops/validation.rb +7 -2
- data/lib/puppet/pops.rb +19 -17
- data/lib/puppet/provider/augeas/augeas.rb +50 -0
- data/lib/puppet/provider/exec.rb +6 -1
- 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/nim.rb +1 -1
- 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 +20 -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/launchd.rb +36 -7
- 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 +25 -5
- data/lib/puppet/provider/sshkey/parsed.rb +19 -9
- data/lib/puppet/provider/zone/solaris.rb +2 -2
- data/lib/puppet/reference/configuration.rb +10 -4
- data/lib/puppet/reference/report.rb +9 -12
- data/lib/puppet/reports.rb +5 -1
- 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/resource.rb +50 -73
- data/lib/puppet/settings/file_setting.rb +10 -9
- 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/additional_resource_generator.rb +71 -8
- data/lib/puppet/transaction/resource_harness.rb +9 -4
- data/lib/puppet/transaction.rb +8 -1
- data/lib/puppet/type/augeas.rb +8 -0
- data/lib/puppet/type/file/source.rb +14 -12
- data/lib/puppet/type/package.rb +9 -6
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/type.rb +78 -7
- data/lib/puppet/util/command_line.rb +4 -0
- data/lib/puppet/util/execution.rb +18 -2
- data/lib/puppet/util/tagging.rb +7 -1
- data/lib/puppet/util/windows/adsi.rb +5 -2
- data/lib/puppet/util/windows/security.rb +4 -1
- data/lib/puppet/util/windows/taskscheduler.rb +1 -1
- data/lib/puppet/util.rb +9 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +12 -0
- 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 +30 -24
- data/spec/integration/parser/resource_expressions_spec.rb +4 -4
- data/spec/integration/parser/undef_param_spec.rb +1 -1
- data/spec/integration/provider/package_spec.rb +3 -1
- data/spec/integration/resource/catalog_spec.rb +1 -1
- data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
- data/spec/integration/ssl/certificate_request_spec.rb +0 -1
- data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
- data/spec/integration/ssl/host_spec.rb +0 -1
- data/spec/integration/type/package_spec.rb +2 -0
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- 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 +9 -1
- data/spec/unit/application/filebucket_spec.rb +88 -2
- data/spec/unit/application/lookup_spec.rb +195 -0
- data/spec/unit/application/master_spec.rb +2 -2
- data/spec/unit/application_spec.rb +3 -3
- 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/environments_spec.rb +2 -0
- data/spec/unit/face/node_spec.rb +1 -1
- data/spec/unit/file_bucket/dipper_spec.rb +210 -1
- data/spec/unit/file_serving/configuration_spec.rb +1 -1
- data/spec/unit/file_system_spec.rb +20 -0
- 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/filter_spec.rb +18 -0
- data/spec/unit/functions/hiera_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/graph/sequential_prioritizer_spec.rb +1 -1
- 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/indirection_spec.rb +13 -2
- data/spec/unit/indirector/request_spec.rb +8 -8
- data/spec/unit/indirector/ssl_file_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +236 -0
- data/spec/unit/module_tool/application_spec.rb +1 -1
- data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
- 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/authstore_spec.rb +1 -1
- data/spec/unit/network/http/compression_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +14 -19
- data/spec/unit/network/http/handler_spec.rb +0 -5
- data/spec/unit/network/rights_spec.rb +3 -3
- data/spec/unit/node_spec.rb +27 -0
- data/spec/unit/parser/ast/leaf_spec.rb +1 -1
- 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 +20 -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 +39 -0
- 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 +15 -12
- data/spec/unit/pops/validator/validator_spec.rb +68 -0
- data/spec/unit/property_spec.rb +1 -1
- 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/nim_spec.rb +6 -6
- 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 +35 -12
- data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
- data/spec/unit/provider/service/debian_spec.rb +28 -0
- data/spec/unit/provider/service/gentoo_spec.rb +1 -0
- data/spec/unit/provider/service/init_spec.rb +6 -0
- data/spec/unit/provider/service/launchd_spec.rb +85 -10
- data/spec/unit/provider/service/openrc_spec.rb +1 -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 +20 -4
- data/spec/unit/provider/service/systemd_spec.rb +79 -29
- data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -1
- data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +2 -1
- data/spec/unit/provider/zone/solaris_spec.rb +19 -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 +23 -5
- data/spec/unit/settings/file_setting_spec.rb +31 -0
- data/spec/unit/settings_spec.rb +91 -2
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
- data/spec/unit/ssl/certificate_authority_spec.rb +5 -3
- data/spec/unit/ssl/host_spec.rb +2 -2
- 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/transaction_spec.rb +7 -0
- data/spec/unit/type/exec_spec.rb +16 -8
- data/spec/unit/type/host_spec.rb +4 -4
- data/spec/unit/type/package_spec.rb +1 -0
- data/spec/unit/type/tidy_spec.rb +4 -4
- data/spec/unit/type/user_spec.rb +14 -7
- data/spec/unit/type/vlan_spec.rb +1 -1
- data/spec/unit/type_spec.rb +1 -1
- data/spec/unit/util/ldap/generator_spec.rb +1 -1
- data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
- data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
- data/spec/unit/util/network_device_spec.rb +1 -1
- data/spec/unit/util/storage_spec.rb +5 -1
- data/spec/unit/util/windows/adsi_spec.rb +13 -0
- data/spec/unit/util_spec.rb +21 -2
- metadata +173 -7
- data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
- data/spec/integration/data_binding.rb +0 -104
|
@@ -46,7 +46,7 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
|
46
46
|
|
|
47
47
|
it "should directly use provided nodes for a local request" do
|
|
48
48
|
Puppet::Node.indirection.expects(:find).never
|
|
49
|
-
@compiler.expects(:compile).with(@node)
|
|
49
|
+
@compiler.expects(:compile).with(@node, nil)
|
|
50
50
|
@request.stubs(:options).returns(:use_node => @node)
|
|
51
51
|
@request.stubs(:remote?).returns(false)
|
|
52
52
|
@compiler.find(@request)
|
|
@@ -63,7 +63,7 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
|
63
63
|
it "should use the authenticated node name if no request key is provided" do
|
|
64
64
|
@request.stubs(:key).returns(nil)
|
|
65
65
|
Puppet::Node.indirection.expects(:find).with(@name, anything).returns(@node)
|
|
66
|
-
@compiler.expects(:compile).with(@node)
|
|
66
|
+
@compiler.expects(:compile).with(@node, nil)
|
|
67
67
|
@compiler.find(@request)
|
|
68
68
|
end
|
|
69
69
|
|
|
@@ -71,7 +71,7 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
|
71
71
|
@request.expects(:key).returns "my_node"
|
|
72
72
|
|
|
73
73
|
Puppet::Node.indirection.expects(:find).with("my_node", anything).returns @node
|
|
74
|
-
@compiler.expects(:compile).with(@node)
|
|
74
|
+
@compiler.expects(:compile).with(@node, nil)
|
|
75
75
|
@compiler.find(@request)
|
|
76
76
|
end
|
|
77
77
|
|
|
@@ -88,7 +88,7 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
|
88
88
|
it "should pass the found node to the compiler for compiling" do
|
|
89
89
|
Puppet::Node.indirection.expects(:find).with(@name, anything).returns(@node)
|
|
90
90
|
config = mock 'config'
|
|
91
|
-
Puppet::Parser::Compiler.expects(:compile).with(@node)
|
|
91
|
+
Puppet::Parser::Compiler.expects(:compile).with(@node, nil)
|
|
92
92
|
@compiler.find(@request)
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -119,11 +119,31 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
|
119
119
|
|
|
120
120
|
it "should return the results of compiling as the catalog" do
|
|
121
121
|
Puppet::Node.indirection.stubs(:find).returns(@node)
|
|
122
|
-
|
|
123
|
-
|
|
122
|
+
catalog = Puppet::Resource::Catalog.new(@node.name)
|
|
123
|
+
Puppet::Parser::Compiler.stubs(:compile).returns catalog
|
|
124
|
+
|
|
125
|
+
expect(@compiler.find(@request)).to equal(catalog)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "passes the code_id from the request to the compiler" do
|
|
129
|
+
Puppet::Node.indirection.stubs(:find).returns(@node)
|
|
130
|
+
code_id = 'b59e5df0578ef411f773ee6c33d8073c50e7b8fe'
|
|
131
|
+
@request.options[:code_id] = code_id
|
|
132
|
+
|
|
133
|
+
Puppet::Parser::Compiler.expects(:compile).with(anything, code_id)
|
|
134
|
+
|
|
135
|
+
@compiler.find(@request)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "returns a catalog with the code_id from the request" do
|
|
139
|
+
Puppet::Node.indirection.stubs(:find).returns(@node)
|
|
140
|
+
code_id = 'b59e5df0578ef411f773ee6c33d8073c50e7b8fe'
|
|
141
|
+
@request.options[:code_id] = code_id
|
|
142
|
+
|
|
143
|
+
catalog = Puppet::Resource::Catalog.new(@node.name, @node.environment, code_id)
|
|
144
|
+
Puppet::Parser::Compiler.stubs(:compile).returns catalog
|
|
124
145
|
|
|
125
|
-
|
|
126
|
-
expect(@compiler.find(@request)).to equal(result)
|
|
146
|
+
expect(@compiler.find(@request).code_id).to eq(code_id)
|
|
127
147
|
end
|
|
128
148
|
end
|
|
129
149
|
|
|
@@ -34,6 +34,10 @@ describe Puppet::Resource::Catalog::StaticCompiler do
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
describe "#find" do
|
|
37
|
+
before :each do
|
|
38
|
+
subject.stubs(:store_content)
|
|
39
|
+
end
|
|
40
|
+
|
|
37
41
|
it "returns a catalog" do
|
|
38
42
|
expect(subject.find(request)).to be_a_kind_of(Puppet::Resource::Catalog)
|
|
39
43
|
end
|
|
@@ -45,7 +49,8 @@ describe Puppet::Resource::Catalog::StaticCompiler do
|
|
|
45
49
|
|
|
46
50
|
describe "a catalog with file resources containing source parameters with puppet:// URIs" do
|
|
47
51
|
it "filters file resource source URI's to checksums" do
|
|
48
|
-
|
|
52
|
+
subject.stubs(:compile).returns(build_catalog)
|
|
53
|
+
|
|
49
54
|
resource_catalog = subject.find(request)
|
|
50
55
|
resource_catalog.resources.each do |resource|
|
|
51
56
|
next unless resource.type == "File"
|
|
@@ -56,7 +61,8 @@ describe Puppet::Resource::Catalog::StaticCompiler do
|
|
|
56
61
|
|
|
57
62
|
it "does not modify file resources with non-puppet:// URI's" do
|
|
58
63
|
uri = "/this/is/not/a/puppet/uri.txt"
|
|
59
|
-
|
|
64
|
+
subject.stubs(:compile).returns(build_catalog(:source => uri))
|
|
65
|
+
|
|
60
66
|
resource_catalog = subject.find(request)
|
|
61
67
|
resource_catalog.resources.each do |resource|
|
|
62
68
|
next unless resource.type == "File"
|
|
@@ -65,16 +71,41 @@ describe Puppet::Resource::Catalog::StaticCompiler do
|
|
|
65
71
|
end
|
|
66
72
|
end
|
|
67
73
|
|
|
68
|
-
it "copies the owner, group and mode from the
|
|
69
|
-
|
|
74
|
+
it "copies the owner, group and mode from the fileserver" do
|
|
75
|
+
subject.stubs(:compile).returns(build_catalog)
|
|
76
|
+
|
|
70
77
|
resource_catalog = subject.find(request)
|
|
71
78
|
resource_catalog.resources.each do |resource|
|
|
72
79
|
next unless resource.type == "File"
|
|
73
|
-
expect(resource[:owner]).to eq(0)
|
|
74
|
-
expect(resource[:group]).to eq(0)
|
|
75
|
-
expect(resource[:mode]).to eq(
|
|
80
|
+
expect(resource[:owner]).to eq("0")
|
|
81
|
+
expect(resource[:group]).to eq("0")
|
|
82
|
+
expect(resource[:mode]).to eq("644")
|
|
76
83
|
end
|
|
77
84
|
end
|
|
85
|
+
|
|
86
|
+
it "ignores recurse when source refers to a file" do
|
|
87
|
+
path = File.expand_path('/tmp/foo')
|
|
88
|
+
metadata = fileserver_metadata(:path => path)
|
|
89
|
+
metadata.relative_path = '.'
|
|
90
|
+
|
|
91
|
+
Puppet::FileServing::Metadata.indirection.stubs(:search).returns([metadata])
|
|
92
|
+
Puppet::FileServing::Metadata.indirection.stubs(:find).returns(metadata)
|
|
93
|
+
|
|
94
|
+
catalog = Puppet::Resource::Catalog.new(request)
|
|
95
|
+
catalog.add_resource(
|
|
96
|
+
Puppet::Resource.new('file', path,
|
|
97
|
+
:parameters => {
|
|
98
|
+
:recurse => true,
|
|
99
|
+
:source => 'puppet:///modules/mymodule/foo'
|
|
100
|
+
}
|
|
101
|
+
)
|
|
102
|
+
)
|
|
103
|
+
subject.stubs(:compile).returns(catalog)
|
|
104
|
+
|
|
105
|
+
resource = subject.find(request).resources.first
|
|
106
|
+
expect(resource[:ensure]).to eq('file')
|
|
107
|
+
expect(resource.title).to eq(path)
|
|
108
|
+
end
|
|
78
109
|
end
|
|
79
110
|
end
|
|
80
111
|
|
|
@@ -120,19 +151,6 @@ describe Puppet::Resource::Catalog::StaticCompiler do
|
|
|
120
151
|
|
|
121
152
|
# Spec helper methods
|
|
122
153
|
|
|
123
|
-
def stub_the_compiler(options = {:stub_methods => [:store_content]})
|
|
124
|
-
# Build a resource catalog suitable for specifying the behavior of the
|
|
125
|
-
# static compiler.
|
|
126
|
-
compiler = mock('indirection terminus compiler')
|
|
127
|
-
compiler.stubs(:find).returns(build_catalog(options))
|
|
128
|
-
subject.stubs(:compiler).returns(compiler)
|
|
129
|
-
# Mock the store content method to prevent copying the contents to the
|
|
130
|
-
# file bucket.
|
|
131
|
-
(options[:stub_methods] || []).each do |mthd|
|
|
132
|
-
subject.stubs(mthd)
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
154
|
def build_catalog(options = {})
|
|
137
155
|
options = options.dup
|
|
138
156
|
options[:source] ||= 'puppet:///modules/mymodule/config_file.txt'
|
|
@@ -20,9 +20,9 @@ describe Puppet::DataBinding::None do
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
describe "the behavior of the find method" do
|
|
23
|
-
it "should just
|
|
23
|
+
it "should just throw :no_such_key" do
|
|
24
24
|
data_binding = Puppet::DataBinding::None.new
|
|
25
|
-
expect
|
|
25
|
+
expect { data_binding.find('fake_request') }.to throw_symbol(:no_such_key)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
@@ -109,6 +109,57 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
|
|
|
109
109
|
let(:not_bucketed_plaintext) { "other stuff" }
|
|
110
110
|
let(:not_bucketed_checksum) { digest(not_bucketed_plaintext) }
|
|
111
111
|
|
|
112
|
+
describe "when listing the filebucket" do
|
|
113
|
+
it "should return false/nil when the bucket is empty" do
|
|
114
|
+
expect(Puppet::FileBucket::File.indirection.find("#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar", :list_all => true)).to eq(nil)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "raises when the request is remote" do
|
|
118
|
+
Puppet[:bucketdir] = tmpdir('bucket')
|
|
119
|
+
|
|
120
|
+
request = Puppet::Indirector::Request.new(:file_bucket_file, :find, "#{digest_algorithm}/#{checksum}/foo/bar", nil, :list_all => true)
|
|
121
|
+
request.node = 'client.example.com'
|
|
122
|
+
|
|
123
|
+
expect {
|
|
124
|
+
Puppet::FileBucketFile::File.new.find(request)
|
|
125
|
+
}.to raise_error(Puppet::Error, "Listing remote file buckets is not allowed")
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should return the list of bucketed files in a human readable way" do
|
|
129
|
+
checksum1 = save_bucket_file("I'm the contents of a file", '/foo/bar1')
|
|
130
|
+
checksum2 = save_bucket_file("I'm the contents of another file", '/foo/bar2')
|
|
131
|
+
checksum3 = save_bucket_file("I'm the modified content of a existing file", '/foo/bar1')
|
|
132
|
+
|
|
133
|
+
# Use the first checksum as we know it's stored in the bucket
|
|
134
|
+
find_result = Puppet::FileBucket::File.indirection.find("#{digest_algorithm}/#{checksum1}/foo/bar1", :list_all => true)
|
|
135
|
+
|
|
136
|
+
# The list is sort order from date and file name, so first and third checksums come before the second
|
|
137
|
+
date_pattern = '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}'
|
|
138
|
+
expect(find_result.to_s).to match(Regexp.new("^#{checksum1} #{date_pattern} foo/bar1\\n#{checksum3} #{date_pattern} foo/bar1\\n#{checksum2} #{date_pattern} foo/bar2\\n$"))
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "should fail in an informative way when provided dates are not in the right format" do
|
|
142
|
+
contents = "I'm the contents of a file"
|
|
143
|
+
save_bucket_file(contents, '/foo/bar1')
|
|
144
|
+
expect {
|
|
145
|
+
Puppet::FileBucket::File.indirection.find(
|
|
146
|
+
"#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar",
|
|
147
|
+
:list_all => true,
|
|
148
|
+
:todate => "0:0:0 1-1-1970",
|
|
149
|
+
:fromdate => "WEIRD"
|
|
150
|
+
)
|
|
151
|
+
}.to raise_error(Puppet::Error, /fromdate/)
|
|
152
|
+
expect {
|
|
153
|
+
Puppet::FileBucket::File.indirection.find(
|
|
154
|
+
"#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar",
|
|
155
|
+
:list_all => true,
|
|
156
|
+
:todate => "WEIRD",
|
|
157
|
+
:fromdate => Time.now
|
|
158
|
+
)
|
|
159
|
+
}.to raise_error(Puppet::Error, /todate/)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
112
163
|
describe "when supplying a path" do
|
|
113
164
|
it "should return false/nil if the file isn't bucketed" do
|
|
114
165
|
expect(Puppet::FileBucket::File.indirection.head("#{digest_algorithm}/#{not_bucketed_checksum}/foo/bar")).to eq(false)
|
|
@@ -177,7 +228,7 @@ describe Puppet::FileBucketFile::File, :uses_checksums => true do
|
|
|
177
228
|
checksum2 = save_bucket_file("foo\nbiz\nbaz")
|
|
178
229
|
|
|
179
230
|
diff = Puppet::FileBucket::File.indirection.find("#{digest_algorithm}/#{checksum1}", :diff_with => checksum2)
|
|
180
|
-
expect(diff).to
|
|
231
|
+
expect(diff).to include("-bar\n+biz\n")
|
|
181
232
|
end
|
|
182
233
|
|
|
183
234
|
it "should raise an exception if the hash to diff against isn't found" do
|
|
@@ -115,7 +115,7 @@ describe Puppet::Indirector::Indirection do
|
|
|
115
115
|
describe "when initializing" do
|
|
116
116
|
# (LAK) I've no idea how to test this, really.
|
|
117
117
|
it "should store a reference to itself before it consumes its options" do
|
|
118
|
-
expect { @indirection = Puppet::Indirector::Indirection.new(Object.new, :testingness, :not_valid_option) }.to raise_error
|
|
118
|
+
expect { @indirection = Puppet::Indirector::Indirection.new(Object.new, :testingness, :not_valid_option) }.to raise_error(NoMethodError, /undefined method/)
|
|
119
119
|
expect(Puppet::Indirector::Indirection.instance(:testingness)).to be_instance_of(Puppet::Indirector::Indirection)
|
|
120
120
|
Puppet::Indirector::Indirection.instance(:testingness).delete
|
|
121
121
|
end
|
|
@@ -393,6 +393,17 @@ describe Puppet::Indirector::Indirection do
|
|
|
393
393
|
|
|
394
394
|
@indirection.find("/my/key")
|
|
395
395
|
end
|
|
396
|
+
|
|
397
|
+
it "should fail if saving to the cache fails but log the exception" do
|
|
398
|
+
@cache.stubs(:find).returns nil
|
|
399
|
+
|
|
400
|
+
@terminus.stubs(:find).returns(@instance)
|
|
401
|
+
@cache.stubs(:save).raises RuntimeError
|
|
402
|
+
|
|
403
|
+
Puppet.expects(:log_exception)
|
|
404
|
+
|
|
405
|
+
expect { @indirection.find("/my/key") }.to raise_error
|
|
406
|
+
end
|
|
396
407
|
end
|
|
397
408
|
end
|
|
398
409
|
|
|
@@ -509,7 +520,7 @@ describe Puppet::Indirector::Indirection do
|
|
|
509
520
|
|
|
510
521
|
@cache.expects(:save).never
|
|
511
522
|
@terminus.expects(:save).raises "eh"
|
|
512
|
-
expect { @indirection.save(@instance) }.to raise_error
|
|
523
|
+
expect { @indirection.save(@instance) }.to raise_error(RuntimeError, /eh/)
|
|
513
524
|
end
|
|
514
525
|
end
|
|
515
526
|
end
|
|
@@ -116,32 +116,32 @@ describe Puppet::Indirector::Request do
|
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
it "should set the protocol to the URI scheme" do
|
|
119
|
-
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/
|
|
119
|
+
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/", nil).protocol).to eq("http")
|
|
120
120
|
end
|
|
121
121
|
|
|
122
122
|
it "should set the server if a server is provided" do
|
|
123
|
-
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/
|
|
123
|
+
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/", nil).server).to eq("host")
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
it "should set the server and port if both are provided" do
|
|
127
|
-
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host:543/
|
|
127
|
+
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host:543/", nil).port).to eq(543)
|
|
128
128
|
end
|
|
129
129
|
|
|
130
130
|
it "should default to the masterport if the URI scheme is 'puppet'" do
|
|
131
131
|
Puppet[:masterport] = "321"
|
|
132
|
-
expect(Puppet::Indirector::Request.new(:ind, :method, "puppet://host/
|
|
132
|
+
expect(Puppet::Indirector::Request.new(:ind, :method, "puppet://host/", nil).port).to eq(321)
|
|
133
133
|
end
|
|
134
134
|
|
|
135
135
|
it "should use the provided port if the URI scheme is not 'puppet'" do
|
|
136
|
-
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/
|
|
136
|
+
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/", nil).port).to eq(80)
|
|
137
137
|
end
|
|
138
138
|
|
|
139
|
-
it "should set the request key to the unescaped
|
|
140
|
-
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/
|
|
139
|
+
it "should set the request key to the unescaped path from the URI" do
|
|
140
|
+
expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/stuff with spaces", nil).key).to eq("stuff with spaces")
|
|
141
141
|
end
|
|
142
142
|
|
|
143
143
|
it "should set the :uri attribute to the full URI" do
|
|
144
|
-
expect(Puppet::Indirector::Request.new(:ind, :method, "http:///
|
|
144
|
+
expect(Puppet::Indirector::Request.new(:ind, :method, "http:///a/path/stu ff", nil).uri).to eq('http:///a/path/stu ff')
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
it "should not parse relative URI" do
|
|
@@ -108,7 +108,7 @@ describe Puppet::Indirector::SslFile do
|
|
|
108
108
|
"//?/c:/foo",
|
|
109
109
|
].each do |input|
|
|
110
110
|
it "should resist directory traversal attacks (#{input.inspect})" do
|
|
111
|
-
expect { @searcher.path(input) }.to raise_error
|
|
111
|
+
expect { @searcher.path(input) }.to raise_error(ArgumentError, /invalid key/)
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
@@ -82,7 +82,7 @@ describe Puppet::Indirector::Yaml do
|
|
|
82
82
|
"//?/c:/foo",
|
|
83
83
|
].each do |input|
|
|
84
84
|
it "should resist directory traversal attacks (#{input.inspect})" do
|
|
85
|
-
expect { @store.path(input) }.to raise_error
|
|
85
|
+
expect { @store.path(input) }.to raise_error(ArgumentError)
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
88
|
end
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'puppet_spec/files'
|
|
3
|
+
|
|
4
|
+
require 'puppet/pops'
|
|
5
|
+
require 'puppet/info_service'
|
|
6
|
+
require 'puppet/pops/evaluator/literal_evaluator'
|
|
7
|
+
|
|
8
|
+
describe "Puppet::InfoService" do
|
|
9
|
+
context 'classes_per_environment service' do
|
|
10
|
+
include PuppetSpec::Files
|
|
11
|
+
|
|
12
|
+
let(:code_dir) do
|
|
13
|
+
dir_containing('manifests', {
|
|
14
|
+
'foo.pp' => <<-CODE,
|
|
15
|
+
class foo($foo_a, Integer $foo_b, String $foo_c = 'c default value') { }
|
|
16
|
+
class foo2($foo2_a, Integer $foo2_b, String $foo2_c = 'c default value') { }
|
|
17
|
+
CODE
|
|
18
|
+
'bar.pp' => <<-CODE,
|
|
19
|
+
class bar($bar_a, Integer $bar_b, String $bar_c = 'c default value') { }
|
|
20
|
+
class bar2($bar2_a, Integer $bar2_b, String $bar2_c = 'c default value') { }
|
|
21
|
+
CODE
|
|
22
|
+
'fee.pp' => <<-CODE,
|
|
23
|
+
class fee(Integer $fee_a = 1+1) { }
|
|
24
|
+
CODE
|
|
25
|
+
'fum.pp' => <<-CODE,
|
|
26
|
+
class fum($fum_a) { }
|
|
27
|
+
CODE
|
|
28
|
+
'nothing.pp' => <<-CODE,
|
|
29
|
+
# not much to see here, move along
|
|
30
|
+
CODE
|
|
31
|
+
'borked.pp' => <<-CODE,
|
|
32
|
+
class Borked($Herp+$Derp) {}
|
|
33
|
+
CODE
|
|
34
|
+
})
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "errors if not given a hash" do
|
|
38
|
+
expect{ Puppet::InfoService.classes_per_environment("you wassup?")}.to raise_error(ArgumentError, 'Given argument must be a Hash')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "returns empty hash if given nothing" do
|
|
42
|
+
expect(Puppet::InfoService.classes_per_environment({})).to eq({})
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "produces classes and parameters from a given file" do
|
|
46
|
+
files = ['foo.pp'].map {|f| File.join(code_dir, f) }
|
|
47
|
+
result = Puppet::InfoService.classes_per_environment({'production' => files })
|
|
48
|
+
expect(result).to eq({
|
|
49
|
+
"production"=>{
|
|
50
|
+
"#{code_dir}/foo.pp"=>[
|
|
51
|
+
{:name=>"foo",
|
|
52
|
+
:params=>[
|
|
53
|
+
{:name=>"foo_a"},
|
|
54
|
+
{:name=>"foo_b", :type=>"Integer"},
|
|
55
|
+
{:name=>"foo_c", :type=>"String", :default_literal=>"c default value"}
|
|
56
|
+
]},
|
|
57
|
+
{:name=>"foo2",
|
|
58
|
+
:params=>[
|
|
59
|
+
{:name=>"foo2_a"},
|
|
60
|
+
{:name=>"foo2_b", :type=>"Integer"},
|
|
61
|
+
{:name=>"foo2_c", :type=>"String", :default_literal=>"c default value"}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
]} # end production env
|
|
65
|
+
})
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "produces classes and parameters from multiple files in same environment" do
|
|
69
|
+
files = ['foo.pp', 'bar.pp'].map {|f| File.join(code_dir, f) }
|
|
70
|
+
result = Puppet::InfoService.classes_per_environment({'production' => files })
|
|
71
|
+
expect(result).to eq({
|
|
72
|
+
"production"=>{
|
|
73
|
+
"#{code_dir}/foo.pp"=>[
|
|
74
|
+
{:name=>"foo",
|
|
75
|
+
:params=>[
|
|
76
|
+
{:name=>"foo_a"},
|
|
77
|
+
{:name=>"foo_b", :type=>"Integer"},
|
|
78
|
+
{:name=>"foo_c", :type=>"String", :default_literal=>"c default value"}
|
|
79
|
+
]},
|
|
80
|
+
{:name=>"foo2",
|
|
81
|
+
:params=>[
|
|
82
|
+
{:name=>"foo2_a"},
|
|
83
|
+
{:name=>"foo2_b", :type=>"Integer"},
|
|
84
|
+
{:name=>"foo2_c", :type=>"String", :default_literal=>"c default value"}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"#{code_dir}/bar.pp"=>[
|
|
89
|
+
{:name=>"bar",
|
|
90
|
+
:params=>[
|
|
91
|
+
{:name=>"bar_a"},
|
|
92
|
+
{:name=>"bar_b", :type=>"Integer"},
|
|
93
|
+
{:name=>"bar_c", :type=>"String", :default_literal=>"c default value"}
|
|
94
|
+
]},
|
|
95
|
+
{:name=>"bar2",
|
|
96
|
+
:params=>[
|
|
97
|
+
{:name=>"bar2_a"},
|
|
98
|
+
{:name=>"bar2_b", :type=>"Integer"},
|
|
99
|
+
{:name=>"bar2_c", :type=>"String", :default_literal=>"c default value"}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
|
|
104
|
+
} # end production env
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "produces classes and parameters from multiple files in multiple environments" do
|
|
110
|
+
files_production = ['foo.pp', 'bar.pp'].map {|f| File.join(code_dir, f) }
|
|
111
|
+
files_test = ['fee.pp', 'fum.pp'].map {|f| File.join(code_dir, f) }
|
|
112
|
+
result = Puppet::InfoService.classes_per_environment({
|
|
113
|
+
'production' => files_production,
|
|
114
|
+
'test' => files_test
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
expect(result).to eq({
|
|
118
|
+
"production"=>{
|
|
119
|
+
"#{code_dir}/foo.pp"=>[
|
|
120
|
+
{:name=>"foo",
|
|
121
|
+
:params=>[
|
|
122
|
+
{:name=>"foo_a"},
|
|
123
|
+
{:name=>"foo_b", :type=>"Integer"},
|
|
124
|
+
{:name=>"foo_c", :type=>"String", :default_literal=>"c default value"}
|
|
125
|
+
]},
|
|
126
|
+
{:name=>"foo2",
|
|
127
|
+
:params=>[
|
|
128
|
+
{:name=>"foo2_a"},
|
|
129
|
+
{:name=>"foo2_b", :type=>"Integer"},
|
|
130
|
+
{:name=>"foo2_c", :type=>"String", :default_literal=>"c default value"}
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
"#{code_dir}/bar.pp"=>[
|
|
135
|
+
{:name=>"bar",
|
|
136
|
+
:params=>[
|
|
137
|
+
{:name=>"bar_a"},
|
|
138
|
+
{:name=>"bar_b", :type=>"Integer"},
|
|
139
|
+
{:name=>"bar_c", :type=>"String", :default_literal=>"c default value"}
|
|
140
|
+
]},
|
|
141
|
+
{:name=>"bar2",
|
|
142
|
+
:params=>[
|
|
143
|
+
{:name=>"bar2_a"},
|
|
144
|
+
{:name=>"bar2_b", :type=>"Integer"},
|
|
145
|
+
{:name=>"bar2_c", :type=>"String", :default_literal=>"c default value"}
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
}, # end production env
|
|
150
|
+
"test"=>{
|
|
151
|
+
"#{code_dir}/fee.pp"=>[
|
|
152
|
+
{:name=>"fee",
|
|
153
|
+
:params=>[
|
|
154
|
+
{:name=>"fee_a", :type=>"Integer", :default_source=>"1+1"}
|
|
155
|
+
]},
|
|
156
|
+
],
|
|
157
|
+
"#{code_dir}/fum.pp"=>[
|
|
158
|
+
{:name=>"fum",
|
|
159
|
+
:params=>[
|
|
160
|
+
{:name=>"fum_a"}
|
|
161
|
+
]},
|
|
162
|
+
],
|
|
163
|
+
} # end test env
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it "avoids parsing file more than once when environments have same feature flag set" do
|
|
169
|
+
# in this version of puppet, all environments are equal in this respect
|
|
170
|
+
result = Puppet::Pops::Parser::EvaluatingParser.new.parse_file("#{code_dir}/fum.pp")
|
|
171
|
+
Puppet::Pops::Parser::EvaluatingParser.any_instance.expects(:parse_file).with("#{code_dir}/fum.pp").returns(result).once
|
|
172
|
+
files_production = ['fum.pp'].map {|f| File.join(code_dir, f) }
|
|
173
|
+
files_test = files_production
|
|
174
|
+
|
|
175
|
+
result = Puppet::InfoService.classes_per_environment({
|
|
176
|
+
'production' => files_production,
|
|
177
|
+
'test' => files_test
|
|
178
|
+
})
|
|
179
|
+
expect(result).to eq({
|
|
180
|
+
"production"=>{ "#{code_dir}/fum.pp"=>[ {:name=>"fum", :params=>[ {:name=>"fum_a"}]}]},
|
|
181
|
+
"test" =>{ "#{code_dir}/fum.pp"=>[ {:name=>"fum", :params=>[ {:name=>"fum_a"}]}]}
|
|
182
|
+
}
|
|
183
|
+
)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "produces expression string if a default value is not literal" do
|
|
187
|
+
files = ['fee.pp'].map {|f| File.join(code_dir, f) }
|
|
188
|
+
result = Puppet::InfoService.classes_per_environment({'production' => files })
|
|
189
|
+
expect(result).to eq({
|
|
190
|
+
"production"=>{
|
|
191
|
+
"#{code_dir}/fee.pp"=>[
|
|
192
|
+
{:name=>"fee",
|
|
193
|
+
:params=>[
|
|
194
|
+
{:name=>"fee_a", :type=>"Integer", :default_source=>"1+1"}
|
|
195
|
+
]},
|
|
196
|
+
]} # end production env
|
|
197
|
+
})
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it "produces no type entry if type is not given" do
|
|
201
|
+
files = ['fum.pp'].map {|f| File.join(code_dir, f) }
|
|
202
|
+
result = Puppet::InfoService.classes_per_environment({'production' => files })
|
|
203
|
+
expect(result).to eq({
|
|
204
|
+
"production"=>{
|
|
205
|
+
"#{code_dir}/fum.pp"=>[
|
|
206
|
+
{:name=>"fum",
|
|
207
|
+
:params=>[
|
|
208
|
+
{:name=>"fum_a" }
|
|
209
|
+
]},
|
|
210
|
+
]} # end production env
|
|
211
|
+
})
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it "produces error entry if file is broken" do
|
|
215
|
+
files = ['borked.pp'].map {|f| File.join(code_dir, f) }
|
|
216
|
+
result = Puppet::InfoService.classes_per_environment({'production' => files })
|
|
217
|
+
expect(result).to eq({
|
|
218
|
+
"production"=>{
|
|
219
|
+
"#{code_dir}/borked.pp"=>
|
|
220
|
+
{:error=>"Syntax error at '+' at #{code_dir}/borked.pp:1:30",
|
|
221
|
+
},
|
|
222
|
+
} # end production env
|
|
223
|
+
})
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "produces empty {} if parsed result has no classes" do
|
|
227
|
+
files = ['nothing.pp'].map {|f| File.join(code_dir, f) }
|
|
228
|
+
result = Puppet::InfoService.classes_per_environment({'production' => files })
|
|
229
|
+
expect(result).to eq({
|
|
230
|
+
"production"=>{
|
|
231
|
+
"#{code_dir}/nothing.pp"=> []
|
|
232
|
+
},
|
|
233
|
+
})
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
@@ -18,7 +18,7 @@ describe Puppet::ModuleTool::Applications::Application do
|
|
|
18
18
|
|
|
19
19
|
bad_versions.each do |ver|
|
|
20
20
|
it "should not accept version string #{ver}" do
|
|
21
|
-
expect { app.parse_filename("puppetlabs-ntp-#{ver}") }.to raise_error
|
|
21
|
+
expect { app.parse_filename("puppetlabs-ntp-#{ver}") }.to raise_error(ArgumentError, /(Invalid version format|Could not parse filename)/)
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
end
|
|
@@ -9,7 +9,7 @@ describe Puppet::ModuleTool::Metadata do
|
|
|
9
9
|
subject { metadata }
|
|
10
10
|
|
|
11
11
|
%w[ name version author summary license source project_page issues_url
|
|
12
|
-
dependencies dashed_name release_name description ].each do |prop|
|
|
12
|
+
dependencies dashed_name release_name description data_provider].each do |prop|
|
|
13
13
|
describe "##{prop}" do
|
|
14
14
|
it "responds to the property" do
|
|
15
15
|
subject.send(prop)
|
|
@@ -224,6 +224,35 @@ describe Puppet::ModuleTool::Metadata do
|
|
|
224
224
|
expect(subject.dependencies.size).to eq(1)
|
|
225
225
|
end
|
|
226
226
|
end
|
|
227
|
+
|
|
228
|
+
context 'with valid data_provider' do
|
|
229
|
+
let(:data) { {'data_provider' => 'the_name'} }
|
|
230
|
+
|
|
231
|
+
it 'validates the provider correctly' do
|
|
232
|
+
expect { subject }.not_to raise_error
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it 'returns the provider' do
|
|
236
|
+
expect(subject.data_provider).to eq('the_name')
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
context 'with invalid data_provider' do
|
|
241
|
+
let(:data) { }
|
|
242
|
+
|
|
243
|
+
it "raises exception unless argument starts with a letter" do
|
|
244
|
+
expect { metadata.update('data_provider' => '_the_name') }.to raise_error(ArgumentError, /field 'data_provider' must begin with a letter/)
|
|
245
|
+
expect { metadata.update('data_provider' => '') }.to raise_error(ArgumentError, /field 'data_provider' must begin with a letter/)
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "raises exception if argument contains non-alphanumeric characters" do
|
|
249
|
+
expect { metadata.update('data_provider' => 'the::name') }.to raise_error(ArgumentError, /field 'data_provider' contains non-alphanumeric characters/)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it "raises exception unless argument is a string" do
|
|
253
|
+
expect { metadata.update('data_provider' => 23) }.to raise_error(ArgumentError, /field 'data_provider' must be a string/)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
227
256
|
end
|
|
228
257
|
|
|
229
258
|
describe '#dashed_name' do
|
|
@@ -271,7 +300,7 @@ describe Puppet::ModuleTool::Metadata do
|
|
|
271
300
|
subject { metadata.to_hash }
|
|
272
301
|
|
|
273
302
|
it "contains the default set of keys" do
|
|
274
|
-
expect(subject.keys.sort).to eq(%w[ name version author summary license source issues_url project_page dependencies ].sort)
|
|
303
|
+
expect(subject.keys.sort).to eq(%w[ name version author summary license source issues_url project_page dependencies data_provider].sort)
|
|
275
304
|
end
|
|
276
305
|
|
|
277
306
|
describe "['license']" do
|