puppet 4.3.0 → 4.4.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.
- checksums.yaml +7 -0
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/hiera/scope.rb +1 -1
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +45 -47
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +6 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +16 -8
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +140 -387
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +16 -9
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +65 -28
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +17 -0
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/collection_spec.rb +8 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/json_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +88 -47
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +99 -50
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +46 -38
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
module Puppet::Pops
|
|
2
|
+
module Evaluator
|
|
1
3
|
# A Closure represents logic bound to a particular scope.
|
|
2
4
|
# As long as the runtime (basically the scope implementation) has the behavior of Puppet 3x it is not
|
|
3
5
|
# safe to return and later use this closure.
|
|
@@ -11,7 +13,7 @@
|
|
|
11
13
|
# Note that this class is a CallableSignature, and the methods defined there should be used
|
|
12
14
|
# as the API for obtaining information in a callable-implementation agnostic way.
|
|
13
15
|
#
|
|
14
|
-
class
|
|
16
|
+
class Closure < CallableSignature
|
|
15
17
|
attr_reader :evaluator
|
|
16
18
|
attr_reader :model
|
|
17
19
|
attr_reader :enclosing_scope
|
|
@@ -25,22 +27,7 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
25
27
|
# Evaluates a closure in its enclosing scope after having matched given arguments with parameters (from left to right)
|
|
26
28
|
# @api public
|
|
27
29
|
def call(*args)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
tc = Puppet::Pops::Types::TypeCalculator.singleton
|
|
31
|
-
final_args = tc.infer_set(parameters.reduce([]) do |tmp_args, param|
|
|
32
|
-
if param.captures_rest
|
|
33
|
-
tmp_args.concat(variable_bindings[param.name])
|
|
34
|
-
else
|
|
35
|
-
tmp_args << variable_bindings[param.name]
|
|
36
|
-
end
|
|
37
|
-
end)
|
|
38
|
-
|
|
39
|
-
if type.callable?(final_args)
|
|
40
|
-
@evaluator.evaluate_block_with_bindings(@enclosing_scope, variable_bindings, @model.body)
|
|
41
|
-
else
|
|
42
|
-
raise ArgumentError, Puppet::Pops::Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], final_args)
|
|
43
|
-
end
|
|
30
|
+
call_with_scope(@enclosing_scope, args)
|
|
44
31
|
end
|
|
45
32
|
|
|
46
33
|
# This method makes a Closure compatible with a Dispatch. This is used when the closure is wrapped in a Function
|
|
@@ -48,46 +35,32 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
48
35
|
# checks of the argument type/arity validity).
|
|
49
36
|
# @api private
|
|
50
37
|
def invoke(instance, calling_scope, args, &block)
|
|
51
|
-
|
|
38
|
+
@enclosing_scope.with_global_scope do |global_scope|
|
|
39
|
+
call_with_scope(global_scope, args, &block)
|
|
40
|
+
end
|
|
52
41
|
end
|
|
53
42
|
|
|
54
43
|
# Call closure with argument assignment by name
|
|
55
44
|
def call_by_name(args_hash, enforce_parameters)
|
|
56
45
|
if enforce_parameters
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
scope_hash = {}
|
|
63
|
-
parameters.each do |p|
|
|
64
|
-
name = p.name
|
|
65
|
-
if (arg_value = args_hash[name]).nil?
|
|
46
|
+
# Push a temporary parameter scope used while resolving the parameter defaults
|
|
47
|
+
@enclosing_scope.with_parameter_scope(parameter_names) do |param_scope|
|
|
48
|
+
args_hash.each { |k, v| param_scope[k] = v unless v.nil? && parameter_names.include?(k) }
|
|
49
|
+
parameters.each do |p|
|
|
50
|
+
name = p.name
|
|
66
51
|
# only set result of default expr if it is defined (it is otherwise not possible to differentiate
|
|
67
52
|
# between explicit undef and no default expression
|
|
68
|
-
|
|
69
|
-
|
|
53
|
+
arg = args_hash[name]
|
|
54
|
+
if arg.nil? && !p.value.nil?
|
|
55
|
+
param_scope[name] = param_scope.evaluate(name, p.value, @enclosing_scope, @evaluator)
|
|
70
56
|
end
|
|
71
|
-
else
|
|
72
|
-
scope_hash[name] = arg_value
|
|
73
57
|
end
|
|
58
|
+
args_hash = param_scope.to_hash
|
|
74
59
|
end
|
|
75
|
-
|
|
76
|
-
missing = parameters.select { |p| !scope_hash.include?(p.name) }
|
|
77
|
-
if missing.any?
|
|
78
|
-
raise ArgumentError, "Too few arguments; no value given for required parameters #{missing.collect(&:name).join(" ,")}"
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
tc = Puppet::Pops::Types::TypeCalculator.singleton
|
|
82
|
-
final_args = tc.infer_set(parameter_names.collect { |param| scope_hash[param] })
|
|
83
|
-
if !type.callable?(final_args)
|
|
84
|
-
raise ArgumentError, Puppet::Pops::Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], final_args)
|
|
85
|
-
end
|
|
86
|
-
else
|
|
87
|
-
scope_hash = args_hash
|
|
60
|
+
Types::TypeMismatchDescriber.validate_parameters(closure_name, params_struct, args_hash)
|
|
88
61
|
end
|
|
89
62
|
|
|
90
|
-
@evaluator.evaluate_block_with_bindings(@enclosing_scope,
|
|
63
|
+
@evaluator.evaluate_block_with_bindings(@enclosing_scope, args_hash, @model.body)
|
|
91
64
|
end
|
|
92
65
|
|
|
93
66
|
def parameters
|
|
@@ -111,6 +84,11 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
111
84
|
@callable ||= create_callable_type
|
|
112
85
|
end
|
|
113
86
|
|
|
87
|
+
# @api public
|
|
88
|
+
def params_struct
|
|
89
|
+
@params_struct ||= create_params_struct
|
|
90
|
+
end
|
|
91
|
+
|
|
114
92
|
# @api public
|
|
115
93
|
def last_captures_rest?
|
|
116
94
|
last = @model.parameters[-1]
|
|
@@ -130,7 +108,7 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
130
108
|
CLOSURE_NAME
|
|
131
109
|
end
|
|
132
110
|
|
|
133
|
-
class Named <
|
|
111
|
+
class Named < Closure
|
|
134
112
|
def initialize(name, evaluator, model, scope)
|
|
135
113
|
@name = name
|
|
136
114
|
super(evaluator, model, scope)
|
|
@@ -143,52 +121,70 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
143
121
|
|
|
144
122
|
private
|
|
145
123
|
|
|
146
|
-
def
|
|
147
|
-
variable_bindings =
|
|
124
|
+
def call_with_scope(scope, args)
|
|
125
|
+
variable_bindings = combine_values_with_parameters(scope, args)
|
|
126
|
+
|
|
127
|
+
tc = Types::TypeCalculator.singleton
|
|
128
|
+
final_args = tc.infer_set(parameters.reduce([]) do |tmp_args, param|
|
|
129
|
+
if param.captures_rest
|
|
130
|
+
tmp_args.concat(variable_bindings[param.name])
|
|
131
|
+
else
|
|
132
|
+
tmp_args << variable_bindings[param.name]
|
|
133
|
+
end
|
|
134
|
+
end)
|
|
148
135
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
136
|
+
if type.callable?(final_args)
|
|
137
|
+
@evaluator.evaluate_block_with_bindings(scope, variable_bindings, @model.body)
|
|
138
|
+
else
|
|
139
|
+
raise ArgumentError, Types::TypeMismatchDescriber.describe_signatures(closure_name, [self], final_args)
|
|
140
|
+
end
|
|
141
|
+
end
|
|
152
142
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
143
|
+
def combine_values_with_parameters(scope, args)
|
|
144
|
+
scope.with_parameter_scope(parameter_names) do |param_scope|
|
|
145
|
+
parameters.each_with_index do |parameter, index|
|
|
146
|
+
param_captures = parameter.captures_rest
|
|
147
|
+
default_expression = parameter.value
|
|
148
|
+
|
|
149
|
+
if index >= args.size
|
|
150
|
+
if default_expression
|
|
151
|
+
# not given, has default
|
|
152
|
+
value = param_scope.evaluate(parameter.name, default_expression, scope, @evaluator)
|
|
153
|
+
|
|
154
|
+
if param_captures && !value.is_a?(Array)
|
|
155
|
+
# correct non array default value
|
|
156
|
+
value = [value]
|
|
157
|
+
end
|
|
158
|
+
else
|
|
159
|
+
# not given, does not have default
|
|
160
|
+
if param_captures
|
|
161
|
+
# default for captures rest is an empty array
|
|
162
|
+
value = []
|
|
163
|
+
else
|
|
164
|
+
@evaluator.fail(Issues::MISSING_REQUIRED_PARAMETER, parameter, { :param_name => parameter.name })
|
|
165
|
+
end
|
|
160
166
|
end
|
|
161
167
|
else
|
|
162
|
-
|
|
168
|
+
given_argument = args[index]
|
|
163
169
|
if param_captures
|
|
164
|
-
#
|
|
165
|
-
value = []
|
|
170
|
+
# get excess arguments
|
|
171
|
+
value = args[(parameter_count-1)..-1]
|
|
172
|
+
# If the input was a single nil, or undef, and there is a default, use the default
|
|
173
|
+
# This supports :undef in case it was used in a 3x data structure and it is passed as an arg
|
|
174
|
+
#
|
|
175
|
+
if value.size == 1 && (given_argument.nil? || given_argument == :undef) && default_expression
|
|
176
|
+
value = param_scope.evaluate(parameter.name, default_expression, scope, @evaluator)
|
|
177
|
+
# and ensure it is an array
|
|
178
|
+
value = [value] unless value.is_a?(Array)
|
|
179
|
+
end
|
|
166
180
|
else
|
|
167
|
-
|
|
181
|
+
value = given_argument
|
|
168
182
|
end
|
|
169
183
|
end
|
|
170
|
-
|
|
171
|
-
given_argument = args[index]
|
|
172
|
-
if param_captures
|
|
173
|
-
# get excess arguments
|
|
174
|
-
value = args[(parameter_count-1)..-1]
|
|
175
|
-
# If the input was a single nil, or undef, and there is a default, use the default
|
|
176
|
-
# This supports :undef in case it was used in a 3x data structure and it is passed as an arg
|
|
177
|
-
#
|
|
178
|
-
if value.size == 1 && (given_argument.nil? || given_argument == :undef) && default_expression
|
|
179
|
-
value = @evaluator.evaluate(default_expression, @enclosing_scope)
|
|
180
|
-
# and ensure it is an array
|
|
181
|
-
value = [value] unless value.is_a?(Array)
|
|
182
|
-
end
|
|
183
|
-
else
|
|
184
|
-
value = given_argument
|
|
185
|
-
end
|
|
184
|
+
param_scope[parameter.name] = value
|
|
186
185
|
end
|
|
187
|
-
|
|
188
|
-
variable_bindings[parameter.name] = value
|
|
186
|
+
param_scope.to_hash
|
|
189
187
|
end
|
|
190
|
-
|
|
191
|
-
variable_bindings
|
|
192
188
|
end
|
|
193
189
|
|
|
194
190
|
def create_callable_type()
|
|
@@ -196,35 +192,14 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
196
192
|
range = [0, 0]
|
|
197
193
|
in_optional_parameters = false
|
|
198
194
|
parameters.each do |param|
|
|
199
|
-
type =
|
|
200
|
-
@evaluator.evaluate(param.type_expr, @enclosing_scope)
|
|
201
|
-
else
|
|
202
|
-
Puppet::Pops::Types::PAnyType::DEFAULT
|
|
203
|
-
end
|
|
204
|
-
|
|
205
|
-
if param.captures_rest && type.is_a?(Puppet::Pops::Types::PArrayType)
|
|
206
|
-
# An array on a slurp parameter is how a size range is defined for a
|
|
207
|
-
# slurp (Array[Integer, 1, 3] *$param). However, the callable that is
|
|
208
|
-
# created can't have the array in that position or else type checking
|
|
209
|
-
# will require the parameters to be arrays, which isn't what is
|
|
210
|
-
# intended. The array type contains the intended information and needs
|
|
211
|
-
# to be unpacked.
|
|
212
|
-
param_range = type.size_range
|
|
213
|
-
type = type.element_type
|
|
214
|
-
elsif param.captures_rest && !type.is_a?(Puppet::Pops::Types::PArrayType)
|
|
215
|
-
param_range = ANY_NUMBER_RANGE
|
|
216
|
-
elsif param.value
|
|
217
|
-
param_range = OPTIONAL_SINGLE_RANGE
|
|
218
|
-
else
|
|
219
|
-
param_range = REQUIRED_SINGLE_RANGE
|
|
220
|
-
end
|
|
195
|
+
type, param_range = create_param_type(param)
|
|
221
196
|
|
|
222
197
|
types << type
|
|
223
198
|
|
|
224
199
|
if param_range[0] == 0
|
|
225
200
|
in_optional_parameters = true
|
|
226
201
|
elsif param_range[0] != 0 && in_optional_parameters
|
|
227
|
-
@evaluator.fail(
|
|
202
|
+
@evaluator.fail(Issues::REQUIRED_PARAMETER_AFTER_OPTIONAL, param, { :param_name => param.name })
|
|
228
203
|
end
|
|
229
204
|
|
|
230
205
|
range[0] += param_range[0]
|
|
@@ -235,7 +210,46 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
235
210
|
range[1] = :default
|
|
236
211
|
end
|
|
237
212
|
|
|
238
|
-
|
|
213
|
+
Types::TypeFactory.callable(*(types + range))
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def create_params_struct
|
|
217
|
+
type_factory = Types::TypeFactory
|
|
218
|
+
members = {}
|
|
219
|
+
|
|
220
|
+
parameters.each do |param|
|
|
221
|
+
arg_type, param_range = create_param_type(param)
|
|
222
|
+
key_type = type_factory.string(nil, param.name.to_s)
|
|
223
|
+
key_type = type_factory.optional(key_type) unless param.value.nil?
|
|
224
|
+
members[key_type] = arg_type
|
|
225
|
+
end
|
|
226
|
+
type_factory.struct(members)
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def create_param_type(param)
|
|
230
|
+
type = if param.type_expr
|
|
231
|
+
@evaluator.evaluate(param.type_expr, @enclosing_scope)
|
|
232
|
+
else
|
|
233
|
+
Types::PAnyType::DEFAULT
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
if param.captures_rest && type.is_a?(Types::PArrayType)
|
|
237
|
+
# An array on a slurp parameter is how a size range is defined for a
|
|
238
|
+
# slurp (Array[Integer, 1, 3] *$param). However, the callable that is
|
|
239
|
+
# created can't have the array in that position or else type checking
|
|
240
|
+
# will require the parameters to be arrays, which isn't what is
|
|
241
|
+
# intended. The array type contains the intended information and needs
|
|
242
|
+
# to be unpacked.
|
|
243
|
+
param_range = type.size_range
|
|
244
|
+
type = type.element_type
|
|
245
|
+
elsif param.captures_rest && !type.is_a?(Types::PArrayType)
|
|
246
|
+
param_range = ANY_NUMBER_RANGE
|
|
247
|
+
elsif param.value
|
|
248
|
+
param_range = OPTIONAL_SINGLE_RANGE
|
|
249
|
+
else
|
|
250
|
+
param_range = REQUIRED_SINGLE_RANGE
|
|
251
|
+
end
|
|
252
|
+
[type, param_range]
|
|
239
253
|
end
|
|
240
254
|
|
|
241
255
|
# Produces information about parameters compatible with a 4x Function (which can have multiple signatures)
|
|
@@ -247,3 +261,5 @@ class Puppet::Pops::Evaluator::Closure < Puppet::Pops::Evaluator::CallableSignat
|
|
|
247
261
|
OPTIONAL_SINGLE_RANGE = [0, 1]
|
|
248
262
|
REQUIRED_SINGLE_RANGE = [1, 1]
|
|
249
263
|
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
module Puppet::Pops
|
|
2
|
+
module Evaluator
|
|
3
|
+
class CollectorTransformer
|
|
2
4
|
|
|
3
5
|
def initialize
|
|
4
|
-
@@query_visitor ||=
|
|
5
|
-
@@match_visitor ||=
|
|
6
|
-
@@evaluator ||=
|
|
7
|
-
@@compare_operator ||=
|
|
6
|
+
@@query_visitor ||= Visitor.new(nil, "query", 1, 1)
|
|
7
|
+
@@match_visitor ||= Visitor.new(nil, "match", 1, 1)
|
|
8
|
+
@@evaluator ||= EvaluatorImpl.new
|
|
9
|
+
@@compare_operator ||= CompareOperator.new()
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
def transform(o, scope)
|
|
11
|
-
raise ArgumentError, "Expected CollectExpression" unless o.is_a?
|
|
13
|
+
raise ArgumentError, "Expected CollectExpression" unless o.is_a? Model::CollectExpression
|
|
12
14
|
|
|
13
|
-
raise "LHS is not a type" unless o.type_expr.is_a?
|
|
15
|
+
raise "LHS is not a type" unless o.type_expr.is_a? Model::QualifiedReference
|
|
14
16
|
type = o.type_expr.value().downcase()
|
|
15
17
|
|
|
16
18
|
if type == 'class'
|
|
@@ -20,7 +22,7 @@ class Puppet::Pops::Evaluator::CollectorTransformer
|
|
|
20
22
|
resource_type = scope.find_resource_type(type)
|
|
21
23
|
fail "Resource type #{type} doesn't exist" unless resource_type
|
|
22
24
|
|
|
23
|
-
adapter =
|
|
25
|
+
adapter = Adapters::SourcePosAdapter.adapt(o)
|
|
24
26
|
line_num = adapter.line
|
|
25
27
|
position = adapter.pos
|
|
26
28
|
file_path = adapter.locator.file
|
|
@@ -38,11 +40,11 @@ class Puppet::Pops::Evaluator::CollectorTransformer
|
|
|
38
40
|
code = query_unless_nop(o.query, scope)
|
|
39
41
|
|
|
40
42
|
case o.query
|
|
41
|
-
when
|
|
42
|
-
newcoll =
|
|
43
|
-
when
|
|
43
|
+
when Model::VirtualQuery
|
|
44
|
+
newcoll = Collectors::CatalogCollector.new(scope, resource_type.name, code, overrides)
|
|
45
|
+
when Model::ExportedQuery
|
|
44
46
|
match = match_unless_nop(o.query, scope)
|
|
45
|
-
newcoll =
|
|
47
|
+
newcoll = Collectors::ExportedCollector.new(scope, resource_type.name, match, code, overrides)
|
|
46
48
|
end
|
|
47
49
|
|
|
48
50
|
scope.compiler.add_collection(newcoll)
|
|
@@ -61,13 +63,13 @@ protected
|
|
|
61
63
|
end
|
|
62
64
|
|
|
63
65
|
def query_unless_nop(query, scope)
|
|
64
|
-
unless query.expr.nil? || query.expr.is_a?(
|
|
66
|
+
unless query.expr.nil? || query.expr.is_a?(Model::Nop)
|
|
65
67
|
query(query.expr, scope)
|
|
66
68
|
end
|
|
67
69
|
end
|
|
68
70
|
|
|
69
71
|
def match_unless_nop(query, scope)
|
|
70
|
-
unless query.expr.nil? || query.expr.is_a?(
|
|
72
|
+
unless query.expr.nil? || query.expr.is_a?(Model::Nop)
|
|
71
73
|
match(query.expr, scope)
|
|
72
74
|
end
|
|
73
75
|
end
|
|
@@ -125,6 +127,14 @@ protected
|
|
|
125
127
|
end
|
|
126
128
|
end
|
|
127
129
|
|
|
130
|
+
def query_AccessExpression(o, scope)
|
|
131
|
+
pops_object = @@evaluator.evaluate(o, scope)
|
|
132
|
+
|
|
133
|
+
# Convert to Puppet 3 style objects since that is how they are represented
|
|
134
|
+
# in the catalog.
|
|
135
|
+
@@evaluator.convert(pops_object, scope, nil)
|
|
136
|
+
end
|
|
137
|
+
|
|
128
138
|
def query_VariableExpression(o, scope)
|
|
129
139
|
@@evaluator.evaluate(o, scope)
|
|
130
140
|
end
|
|
@@ -157,6 +167,14 @@ protected
|
|
|
157
167
|
raise ArgumentError, "Cannot transform object of class #{o.class}"
|
|
158
168
|
end
|
|
159
169
|
|
|
170
|
+
def match_AccessExpression(o, scope)
|
|
171
|
+
pops_object = @@evaluator.evaluate(o, scope)
|
|
172
|
+
|
|
173
|
+
# Convert to Puppet 3 style objects since that is how they are represented
|
|
174
|
+
# in the catalog.
|
|
175
|
+
@@evaluator.convert(pops_object, scope, nil)
|
|
176
|
+
end
|
|
177
|
+
|
|
160
178
|
def match_AndExpression(o, scope)
|
|
161
179
|
left_match = match(o.left_expr, scope)
|
|
162
180
|
right_match = match(o.right_expr, scope)
|
|
@@ -207,3 +225,5 @@ protected
|
|
|
207
225
|
raise ArgumentError, "Cannot transform object of class #{o.class}"
|
|
208
226
|
end
|
|
209
227
|
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
module Puppet::Pops
|
|
2
|
+
module Evaluator
|
|
1
3
|
# Compares the puppet DSL way
|
|
2
4
|
#
|
|
3
5
|
# ==Equality
|
|
@@ -6,20 +8,20 @@
|
|
|
6
8
|
# Hashes are equal to hashes if they have the same size and keys and values #equals.
|
|
7
9
|
# All other objects are equal if they are ruby #== equal
|
|
8
10
|
#
|
|
9
|
-
class
|
|
10
|
-
include
|
|
11
|
+
class CompareOperator
|
|
12
|
+
include Utils
|
|
11
13
|
|
|
12
14
|
# Provides access to the Puppet 3.x runtime (scope, etc.)
|
|
13
15
|
# This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
|
|
14
16
|
#
|
|
15
|
-
include
|
|
17
|
+
include Runtime3Support
|
|
16
18
|
|
|
17
19
|
def initialize
|
|
18
|
-
@@equals_visitor ||=
|
|
19
|
-
@@compare_visitor ||=
|
|
20
|
-
@@match_visitor ||=
|
|
21
|
-
@@include_visitor ||=
|
|
22
|
-
@type_calculator =
|
|
20
|
+
@@equals_visitor ||= Visitor.new(self, "equals", 1, 1)
|
|
21
|
+
@@compare_visitor ||= Visitor.new(self, "cmp", 1, 1)
|
|
22
|
+
@@match_visitor ||= Visitor.new(self, "match", 2, 2)
|
|
23
|
+
@@include_visitor ||= Visitor.new(self, "include", 2, 2)
|
|
24
|
+
@type_calculator = Types::TypeCalculator.new()
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
def equals (a, b)
|
|
@@ -143,7 +145,7 @@ class Puppet::Pops::Evaluator::CompareOperator
|
|
|
143
145
|
# Always set match data, a "not found" should not keep old match data visible
|
|
144
146
|
set_match_data(matched, scope) # creates ephemeral
|
|
145
147
|
return !!matched
|
|
146
|
-
when
|
|
148
|
+
when Types::PAnyType
|
|
147
149
|
a.each {|element| return true if @type_calculator.instance?(b, element) }
|
|
148
150
|
return false
|
|
149
151
|
else
|
|
@@ -193,3 +195,5 @@ class Puppet::Pops::Evaluator::CompareOperator
|
|
|
193
195
|
equals(left, default, scope)
|
|
194
196
|
end
|
|
195
197
|
end
|
|
198
|
+
end
|
|
199
|
+
end
|
|
@@ -66,18 +66,19 @@ class Puppet::Pops::Evaluator::EppEvaluator
|
|
|
66
66
|
|
|
67
67
|
parameters_specified = body.body.parameters_specified
|
|
68
68
|
if parameters_specified || template_args_set
|
|
69
|
-
# no epp params or user provided arguments in a hash, epp() logic
|
|
70
|
-
# only sees global + what was given
|
|
71
|
-
closure_scope = scope.find_global_scope
|
|
72
69
|
enforce_parameters = parameters_specified
|
|
73
70
|
else
|
|
74
|
-
# no epp params and no arguments were given => inline_epp() logic
|
|
75
|
-
# sees all local variables, epp() all global
|
|
76
|
-
closure_scope = use_global_scope_only ? scope.find_global_scope : scope
|
|
77
71
|
enforce_parameters = true
|
|
78
72
|
end
|
|
79
|
-
|
|
80
|
-
|
|
73
|
+
|
|
74
|
+
# inline_epp() logic sees all local variables, epp() all global
|
|
75
|
+
if use_global_scope_only
|
|
76
|
+
scope.with_global_scope do |global_scope|
|
|
77
|
+
parser.closure(body, global_scope).call_by_name(template_args, enforce_parameters)
|
|
78
|
+
end
|
|
79
|
+
else
|
|
80
|
+
parser.closure(body, scope).call_by_name(template_args, enforce_parameters)
|
|
81
|
+
end
|
|
81
82
|
end
|
|
82
83
|
|
|
83
84
|
def self.handle_template_args(func_name, template_args)
|