puppet 4.2.3-x64-mingw32 → 4.3.0-x64-mingw32
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
@@ -0,0 +1,33 @@
|
|
1
|
+
# Abstract class for a catalog validator that can be registered with the compiler to run at
|
2
|
+
# a certain stage.
|
3
|
+
class Puppet::Parser::Compiler
|
4
|
+
class CatalogValidator
|
5
|
+
PRE_FINISH = :pre_finish
|
6
|
+
FINAL = :final
|
7
|
+
|
8
|
+
# Returns true if the validator should run at the given stage. The default
|
9
|
+
# implementation will only run at stage `FINAL`
|
10
|
+
#
|
11
|
+
# @param stage [Symbol] One of the stage constants defined in this class
|
12
|
+
# @return [Boolean] true if the validator should run at the given stage
|
13
|
+
#
|
14
|
+
def self.validation_stage?(stage)
|
15
|
+
FINAL.equal?(stage)
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :catalog
|
19
|
+
|
20
|
+
# @param catalog [Puppet::Resource::Catalog] The catalog to validate
|
21
|
+
def initialize(catalog)
|
22
|
+
@catalog = catalog
|
23
|
+
end
|
24
|
+
|
25
|
+
# Validate some aspect of the catalog and raise a `CatalogValidationError` on failure
|
26
|
+
def validate
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class CatalogValidationError < Puppet::Error
|
31
|
+
include Puppet::ExternalFileError
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Puppet::Parser::Compiler
|
2
|
+
# Validator that asserts that all capability resources that are referenced by 'consume' or 'require' has
|
3
|
+
# been exported by some other resource in the environment
|
4
|
+
class CatalogValidator::EnvironmentRelationshipValidator < CatalogValidator
|
5
|
+
|
6
|
+
def validate
|
7
|
+
assumed_exports = {}
|
8
|
+
exported = {}
|
9
|
+
catalog.resources.each do |resource|
|
10
|
+
next unless resource.is_a?(Puppet::Parser::Resource)
|
11
|
+
resource.eachparam do |param|
|
12
|
+
pclass = Puppet::Type.metaparamclass(param.name)
|
13
|
+
validate_relationship(resource, param, assumed_exports, exported) if !pclass.nil? && pclass < Puppet::Type::RelationshipMetaparam
|
14
|
+
end
|
15
|
+
end
|
16
|
+
assumed_exports.each_pair do |key, (param, cap)|
|
17
|
+
raise CatalogValidationError.new("Capability '#{cap}' referenced by '#{param.name}' is never exported", param.file, param.line) unless exported.include?(key)
|
18
|
+
end
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def validate_relationship(resource, param, assumed_exports, exported)
|
25
|
+
case param.name
|
26
|
+
when :require, :consume
|
27
|
+
add_capability_ref(param, param.value, assumed_exports)
|
28
|
+
when :export
|
29
|
+
add_exported(resource, param, param.value, exported)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_capability_ref(param, value, assumed_exports)
|
34
|
+
case value
|
35
|
+
when Array
|
36
|
+
value.each { |v| add_capability_ref(param, v, assumed_exports) }
|
37
|
+
when Puppet::Resource
|
38
|
+
rt = value.resource_type
|
39
|
+
unless rt.nil? || !rt.is_capability?
|
40
|
+
title_key = catalog.title_key_for_ref(value.ref)
|
41
|
+
assumed_exports[title_key] = [param, value]
|
42
|
+
end
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_exported(resource, param, value, hash)
|
48
|
+
case value
|
49
|
+
when Array
|
50
|
+
value.each { |v| add_exported(resource, param, v, hash) }
|
51
|
+
when Puppet::Resource
|
52
|
+
rt = value.resource_type
|
53
|
+
unless rt.nil? || !rt.is_capability?
|
54
|
+
title_key = catalog.title_key_for_ref(value.ref)
|
55
|
+
if hash.include?(title_key)
|
56
|
+
raise CatalogValidationError.new("'#{value}' is exported by both '#{hash[title_key]}' and '#{resource}'", param.file, param.line)
|
57
|
+
else
|
58
|
+
hash[title_key] = resource
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Puppet::Parser::Compiler
|
2
|
+
# Validator that asserts that only 'require', 'consume', and 'export' is used when declaring relationships
|
3
|
+
# to capability resources.
|
4
|
+
class CatalogValidator::RelationshipValidator < CatalogValidator
|
5
|
+
def validate
|
6
|
+
catalog.resources.each do |resource|
|
7
|
+
next unless resource.is_a?(Puppet::Parser::Resource)
|
8
|
+
resource.eachparam do |param|
|
9
|
+
pclass = Puppet::Type.metaparamclass(param.name)
|
10
|
+
validate_relationship(param) if !pclass.nil? && pclass < Puppet::Type::RelationshipMetaparam
|
11
|
+
end
|
12
|
+
end
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def validate_relationship(param)
|
19
|
+
unless [:require, :consume, :export].find {|pname| pname == param.name }
|
20
|
+
raise CatalogValidationError.new("'#{param.name}' is not a valid relationship to a capability", param.file, param.line) if has_capability?(param.value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def has_capability?(value)
|
25
|
+
case value
|
26
|
+
when Array
|
27
|
+
value.find { |v| has_capability?(v) }
|
28
|
+
when Puppet::Resource
|
29
|
+
rt = value.resource_type
|
30
|
+
!rt.nil? && rt.is_capability?
|
31
|
+
else
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Puppet::Parser::Compiler
|
2
|
+
# Validator that asserts that only application components can appear inside a site.
|
3
|
+
class CatalogValidator::SiteValidator < CatalogValidator
|
4
|
+
def self.validation_stage?(stage)
|
5
|
+
PRE_FINISH.equal?(stage)
|
6
|
+
end
|
7
|
+
|
8
|
+
def validate
|
9
|
+
the_site_resource = catalog.resource('Site', 'site')
|
10
|
+
return unless the_site_resource
|
11
|
+
|
12
|
+
catalog.downstream_from_vertex(the_site_resource).keys.each do |r|
|
13
|
+
unless r.is_application_component? || r.resource_type.application?
|
14
|
+
raise CatalogValidationError.new("Only application components can appear inside a site - #{r} is not allowed", r.file, r.line)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'puppet/parser/compiler'
|
2
|
+
|
3
|
+
class Puppet::Parser::EnvironmentCompiler < Puppet::Parser::Compiler
|
4
|
+
def self.compile(env)
|
5
|
+
begin
|
6
|
+
$env_module_directories = nil
|
7
|
+
env.check_for_reparse
|
8
|
+
|
9
|
+
node = Puppet::Node.new(env)
|
10
|
+
node.environment = env
|
11
|
+
new(node).compile
|
12
|
+
rescue => detail
|
13
|
+
message = "#{detail} in environment #{env.name}"
|
14
|
+
Puppet.log_exception(detail, message)
|
15
|
+
raise Puppet::Error, message, detail.backtrace
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_catalog_validators
|
20
|
+
super
|
21
|
+
add_catalog_validator(CatalogValidator::SiteValidator)
|
22
|
+
add_catalog_validator(CatalogValidator::EnvironmentRelationshipValidator)
|
23
|
+
end
|
24
|
+
|
25
|
+
def compile
|
26
|
+
Puppet.override(@context_overrides, "For compiling environment catalog #{environment.name}") do
|
27
|
+
@catalog.environment_instance = environment
|
28
|
+
|
29
|
+
Puppet::Util::Profiler.profile("Env Compile: Created settings scope", [:compiler, :create_settings_scope]) { create_settings_scope }
|
30
|
+
|
31
|
+
activate_binder
|
32
|
+
|
33
|
+
Puppet::Util::Profiler.profile("Env Compile: Evaluated main", [:compiler, :evaluate_main]) { evaluate_main }
|
34
|
+
|
35
|
+
Puppet::Util::Profiler.profile("Env Compile: Evaluated site", [:compiler, :evaluate_site]) { evaluate_site }
|
36
|
+
|
37
|
+
Puppet::Util::Profiler.profile("Env Compile: Evaluated application instances", [:compiler, :evaluate_applications]) { evaluate_applications }
|
38
|
+
|
39
|
+
Puppet::Util::Profiler.profile("Env Compile: Prune", [:compiler, :prune_catalog]) { prune_catalog }
|
40
|
+
|
41
|
+
Puppet::Util::Profiler.profile("Env Compile: Validate Catalog pre-finish", [:compiler, :validate_pre_finish]) do
|
42
|
+
validate_catalog(CatalogValidator::PRE_FINISH)
|
43
|
+
end
|
44
|
+
|
45
|
+
Puppet::Util::Profiler.profile("Env Compile: Finished catalog", [:compiler, :finish_catalog]) { finish }
|
46
|
+
|
47
|
+
fail_on_unevaluated
|
48
|
+
|
49
|
+
Puppet::Util::Profiler.profile("Env Compile: Validate Catalog final", [:compiler, :validate_final]) do
|
50
|
+
validate_catalog(CatalogValidator::FINAL)
|
51
|
+
end
|
52
|
+
|
53
|
+
if block_given?
|
54
|
+
yield @catalog
|
55
|
+
else
|
56
|
+
@catalog
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# @api private
|
62
|
+
def prune_catalog
|
63
|
+
prune_env_catalog
|
64
|
+
end
|
65
|
+
|
66
|
+
# Prunes the catalog by dropping all resources that are not contained under the Site (if a site expression is used).
|
67
|
+
# As a consequence all edges to/from dropped resources are also dropped.
|
68
|
+
# Once the pruning is performed, this compiler returns the pruned list when calling the #resources method.
|
69
|
+
# The pruning does not alter the order of resources in the resources list.
|
70
|
+
#
|
71
|
+
def prune_env_catalog
|
72
|
+
# Everything under Class[main], that is not under (inclusive of) Site[site] should be pruned as those resources
|
73
|
+
# are intended for nodes in a node catalog.
|
74
|
+
#
|
75
|
+
the_main_class_resource = @catalog.resource('Class', '')
|
76
|
+
the_site_resource = @catalog.resource('Site', 'site')
|
77
|
+
|
78
|
+
# Get downstream vertexes returns a hash where the keys are the resources and values nesting level
|
79
|
+
rooted_in_main = @catalog.downstream_from_vertex(the_main_class_resource).keys
|
80
|
+
|
81
|
+
to_be_removed =
|
82
|
+
if the_site_resource
|
83
|
+
keep_from_site = @catalog.downstream_from_vertex(the_site_resource).keys
|
84
|
+
keep_from_site << the_site_resource
|
85
|
+
rooted_in_main - keep_from_site
|
86
|
+
else
|
87
|
+
rooted_in_main
|
88
|
+
end
|
89
|
+
|
90
|
+
@catalog.remove_resource(*to_be_removed)
|
91
|
+
# The compiler keeps a list of added resources, this shadows that list with the now pruned result
|
92
|
+
@pruned_resources = @catalog.resources
|
93
|
+
end
|
94
|
+
|
95
|
+
def add_resource(scope, resource)
|
96
|
+
@resources << resource
|
97
|
+
@catalog.add_resource(resource)
|
98
|
+
|
99
|
+
if !resource.class? && resource[:stage]
|
100
|
+
raise ArgumentError, "Only classes can set 'stage'; normal resources like #{resource} cannot change run stage"
|
101
|
+
end
|
102
|
+
|
103
|
+
# Stages should not be inside of classes. They are always a
|
104
|
+
# top-level container, regardless of where they appear in the
|
105
|
+
# manifest.
|
106
|
+
return if resource.stage?
|
107
|
+
|
108
|
+
# This adds a resource to the class it lexically appears in in the
|
109
|
+
# manifest.
|
110
|
+
unless resource.class?
|
111
|
+
@catalog.add_edge(scope.resource, resource)
|
112
|
+
end
|
113
|
+
resource.mark_unevaluated_consumer if is_capability_consumer?(resource)
|
114
|
+
assert_app_in_site(scope, resource)
|
115
|
+
end
|
116
|
+
|
117
|
+
def evaluate_ast_node()
|
118
|
+
# Do nothing, the environment catalog is not built for a particular node.
|
119
|
+
end
|
120
|
+
|
121
|
+
def on_empty_site
|
122
|
+
Puppet.warning("Environment Compiler: Could not find a site definition to evaluate")
|
123
|
+
end
|
124
|
+
|
125
|
+
def evaluate_applications
|
126
|
+
exceptwrap do
|
127
|
+
resources.select { |resource| type = resource.resource_type; type.is_a?(Puppet::Resource::Type) && type.application? }.each do |resource|
|
128
|
+
Puppet::Util::Profiler.profile("Evaluated application #{resource}", [:compiler, :evaluate_resource, resource]) do
|
129
|
+
resource.evaluate
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def evaluate_classes(titles, scope, lazy)
|
136
|
+
# Always lazy in an Environment compilation
|
137
|
+
super(titles, scope, true)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Overrides the regular compiler to be able to return the list of resources after a prune
|
141
|
+
# has taken place in the graph representation. Before a prune, the list is the same as in the regular
|
142
|
+
# compiler
|
143
|
+
#
|
144
|
+
def resources
|
145
|
+
@pruned_resources || super
|
146
|
+
end
|
147
|
+
|
148
|
+
def is_capability?(value)
|
149
|
+
if value.is_a?(Array)
|
150
|
+
value.find { |ev| is_capability?(ev) }
|
151
|
+
elsif value.is_a?(Puppet::Resource)
|
152
|
+
rstype = value.resource_type
|
153
|
+
rstype.nil? ? false : rstype.is_capability?
|
154
|
+
else
|
155
|
+
false
|
156
|
+
end
|
157
|
+
end
|
158
|
+
private :is_capability?
|
159
|
+
|
160
|
+
def is_capability_consumer?(resource)
|
161
|
+
resource.eachparam { |param| return true if (param.name == :consume || param.name == :require) && is_capability?(param.value) }
|
162
|
+
false
|
163
|
+
end
|
164
|
+
private :is_capability_consumer?
|
165
|
+
end
|
@@ -2,29 +2,59 @@ Puppet::Parser::Functions::newfunction(
|
|
2
2
|
:assert_type,
|
3
3
|
:type => :rvalue,
|
4
4
|
:arity => -3,
|
5
|
-
:doc =>
|
6
|
-
|
7
|
-
|
5
|
+
:doc => <<DOC
|
6
|
+
Returns the given value if it is of the given
|
7
|
+
[data type](https://docs.puppetlabs.com/puppet/latest/reference/lang_data.html), or
|
8
|
+
otherwise either raises an error or executes an optional two-parameter
|
9
|
+
[lambda](https://docs.puppetlabs.com/puppet/latest/reference/lang_lambdas.html).
|
8
10
|
|
9
|
-
|
11
|
+
The function takes two mandatory arguments, in this order:
|
10
12
|
|
11
|
-
|
13
|
+
1. The expected data type.
|
14
|
+
2. A value to compare against the expected data type.
|
12
15
|
|
13
|
-
Example
|
16
|
+
**Example**: Using `assert_type`
|
14
17
|
|
15
|
-
|
16
|
-
|
17
|
-
}
|
18
|
+
~~~ puppet
|
19
|
+
$raw_username = 'Amy Berry'
|
18
20
|
|
19
|
-
|
21
|
+
# Assert that $raw_username is a non-empty string and assign it to $valid_username.
|
22
|
+
$valid_username = assert_type(String[1], $raw_username)
|
20
23
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
24
|
+
# $valid_username contains "Amy Berry".
|
25
|
+
# If $raw_username was an empty string or a different data type, the Puppet run would
|
26
|
+
# fail with an "Expected type does not match actual" error.
|
27
|
+
~~~
|
28
|
+
|
29
|
+
You can use an optional lambda to provide enhanced feedback. The lambda takes two
|
30
|
+
mandatory parameters, in this order:
|
31
|
+
|
32
|
+
1. The expected data type as described in the function's first argument.
|
33
|
+
2. The actual data type of the value.
|
34
|
+
|
35
|
+
**Example**: Using `assert_type` with a warning and default value
|
36
|
+
|
37
|
+
~~~ puppet
|
38
|
+
$raw_username = 'Amy Berry'
|
39
|
+
|
40
|
+
# Assert that $raw_username is a non-empty string and assign it to $valid_username.
|
41
|
+
# If it isn't, output a warning describing the problem and use a default value.
|
42
|
+
$valid_username = assert_type(String[1], $raw_username) |$expected, $actual| {
|
43
|
+
warning( "The username should be \'${expected}\', not \'${actual}\'. Using 'anonymous'." )
|
44
|
+
'anonymous'
|
45
|
+
}
|
46
|
+
|
47
|
+
# $valid_username contains "Amy Berry".
|
48
|
+
# If $raw_username was an empty string, the Puppet run would set $valid_username to
|
49
|
+
# "anonymous" and output a warning: "The username should be 'String[1, default]', not
|
50
|
+
# 'String[0, 0]'. Using 'anonymous'."
|
51
|
+
~~~
|
52
|
+
|
53
|
+
For more information about data types, see the
|
54
|
+
[documentation](https://docs.puppetlabs.com/puppet/latest/reference/lang_data.html).
|
25
55
|
|
26
|
-
See the documentation for 'The Puppet Type System' for more information about types.
|
27
56
|
- Since 4.0.0
|
28
|
-
|
57
|
+
DOC
|
58
|
+
) do |args|
|
29
59
|
function_fail(["assert_type() is only available when parser/evaluator future is in effect"])
|
30
60
|
end
|
@@ -1,71 +1,108 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
1
|
+
Puppet::Parser::Functions::newfunction(
|
2
|
+
:defined,
|
3
|
+
:type => :rvalue,
|
4
|
+
:arity => -2,
|
5
|
+
:doc => <<DOC
|
6
|
+
Determines whether a given class or resource type is defined and returns a Boolean
|
7
|
+
value. You can also use `defined` to determine whether a specific resource is defined,
|
8
|
+
or whether a variable has a value (including `undef`, as opposed to the variable never
|
9
|
+
being declared or assigned).
|
10
|
+
|
11
|
+
This function takes at least one string argument, which can be a class name, type name,
|
12
|
+
resource reference, or variable reference of the form `'$name'`.
|
13
|
+
|
14
|
+
The `defined` function checks both native and defined types, including types
|
15
|
+
provided by modules. Types and classes are matched by their names. The function matches
|
16
|
+
resource declarations by using resource references.
|
17
|
+
|
18
|
+
**Examples**: Different types of `defined` function matches
|
19
|
+
|
20
|
+
~~~ puppet
|
21
|
+
# Matching resource types
|
22
|
+
defined("file")
|
23
|
+
defined("customtype")
|
24
|
+
|
25
|
+
# Matching defines and classes
|
26
|
+
defined("foo")
|
27
|
+
defined("foo::bar")
|
28
|
+
|
29
|
+
# Matching variables
|
30
|
+
defined('$name')
|
31
|
+
|
32
|
+
# Matching declared resources
|
33
|
+
defined(File['/tmp/file'])
|
34
|
+
~~~
|
35
|
+
|
36
|
+
Puppet depends on the configuration's evaluation order when checking whether a resource
|
37
|
+
is declared.
|
38
|
+
|
39
|
+
**Example**: Importance of evaluation order when using `defined`
|
40
|
+
|
41
|
+
~~~ puppet
|
42
|
+
# Assign values to $is_defined_before and $is_defined_after using identical `defined`
|
43
|
+
# functions.
|
44
|
+
|
45
|
+
$is_defined_before = defined(File['/tmp/file'])
|
46
|
+
|
47
|
+
file { "/tmp/file":
|
48
|
+
ensure => present,
|
49
|
+
}
|
50
|
+
|
51
|
+
$is_defined_after = defined(File['/tmp/file'])
|
52
|
+
|
53
|
+
# $is_defined_before returns false, but $is_defined_after returns true.
|
54
|
+
~~~
|
55
|
+
|
56
|
+
This order requirement only refers to evaluation order. The order of resources in the
|
57
|
+
configuration graph (e.g. with `before` or `require`) does not affect the `defined`
|
58
|
+
function's behavior.
|
59
|
+
|
60
|
+
> **Warning:** Avoid relying on the result of the `defined` function in modules, as you
|
61
|
+
> might not be able to guarantee the evaluation order well enough to produce consistent
|
62
|
+
> results. This can cause other code that relies on the function's result to behave
|
63
|
+
> inconsistently or fail.
|
64
|
+
|
65
|
+
If you pass more than one argument to `defined`, the function returns `true` if _any_
|
66
|
+
of the arguments are defined. You can also match resources by type, allowing you to
|
67
|
+
match conditions of different levels of specificity, such as whether a specific resource
|
68
|
+
is of a specific data type.
|
69
|
+
|
70
|
+
**Example**: Matching multiple resources and resources by different types with `defined`
|
71
|
+
|
72
|
+
~~~ puppet
|
73
|
+
file { "/tmp/file1":
|
74
|
+
ensure => file,
|
75
|
+
}
|
76
|
+
|
77
|
+
$tmp_file = file { "/tmp/file2":
|
78
|
+
ensure => file,
|
79
|
+
}
|
80
|
+
|
81
|
+
# Each of these statements return `true` ...
|
82
|
+
defined(File['/tmp/file1'])
|
83
|
+
defined(File['/tmp/file1'],File['/tmp/file2'])
|
84
|
+
defined(File['/tmp/file1'],File['/tmp/file2'],File['/tmp/file3'])
|
85
|
+
# ... but this returns `false`.
|
86
|
+
defined(File['/tmp/file3'])
|
87
|
+
|
88
|
+
# Each of these statements returns `true` ...
|
89
|
+
defined(Type[Resource['file','/tmp/file2']])
|
90
|
+
defined(Resource['file','/tmp/file2'])
|
91
|
+
defined(File['/tmp/file2'])
|
92
|
+
defined('$tmp_file')
|
93
|
+
# ... but each of these returns `false`.
|
94
|
+
defined(Type[Resource['exec','/tmp/file2']])
|
95
|
+
defined(Resource['exec','/tmp/file2'])
|
96
|
+
defined(File['/tmp/file3'])
|
97
|
+
defined('$tmp_file2')
|
98
|
+
~~~
|
99
|
+
|
100
|
+
- Since 2.7.0
|
101
|
+
- Since 3.6.0 variable reference and future parser types
|
102
|
+
- Since 3.8.1 type specific requests with future parser
|
103
|
+
- Since 4.0.0
|
104
|
+
DOC
|
105
|
+
) do |vals|
|
69
106
|
vals = [vals] unless vals.is_a?(Array)
|
70
107
|
vals.any? do |val|
|
71
108
|
case val
|