puppet 4.3.2-x64-mingw32 → 4.4.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.
- checksums.yaml +4 -4
- 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/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/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 +4 -4
- 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/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- 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.rb +2 -2
- 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/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- 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/map.rb +6 -14
- 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/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- 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/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 +3 -0
- 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.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- 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/map.rb +1 -1
- 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/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- 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 +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -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 +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -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 +16 -12
- 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.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -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 +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- 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 +11 -7
- 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 +138 -381
- 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 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- 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/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 +5 -8
- 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/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- 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/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.rb +15 -12
- 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 +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- 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.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- 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/filebucket.rb +1 -1
- 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/util.rb +109 -22
- 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 +4 -4
- 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 +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- 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 +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- 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/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/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/manifests/init.pp +3 -1
- 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/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/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 +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- 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/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- 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/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 +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- 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 +61 -5
- 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/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 +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- 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 +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -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 -373
- 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 +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- 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 +47 -34
- 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/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- 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 +96 -57
- 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 +4 -4
- 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 +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- 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.rb +0 -22
- 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/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
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'rgen/ecore/ecore'
|
2
|
+
|
3
|
+
# Literal values for
|
4
|
+
#
|
5
|
+
# * String
|
6
|
+
# * Numbers
|
7
|
+
# * Booleans
|
8
|
+
# * Undef (produces nil)
|
9
|
+
# * Array
|
10
|
+
# * Hash where keys must be Strings
|
11
|
+
# * QualifiedName
|
12
|
+
#
|
13
|
+
# Not considered literal:
|
14
|
+
#
|
15
|
+
# * QualifiedReference # i.e. File, FooBar
|
16
|
+
# * Default is not accepted as being literal
|
17
|
+
# * Regular Expression is not accepted as being literal
|
18
|
+
# * Hash with non String keys
|
19
|
+
# * String with interpolatin
|
20
|
+
#
|
21
|
+
class Puppet::Pops::Evaluator::JsonStrictLiteralEvaluator
|
22
|
+
#include Puppet::Pops::Utils
|
23
|
+
|
24
|
+
EMPTY_STRING = ''.freeze
|
25
|
+
COMMA_SEPARATOR = ', '.freeze
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
@@literal_visitor ||= Puppet::Pops::Visitor.new(self, "literal", 0, 0)
|
29
|
+
end
|
30
|
+
|
31
|
+
def literal(ast)
|
32
|
+
@@literal_visitor.visit_this_0(self, ast)
|
33
|
+
end
|
34
|
+
|
35
|
+
def literal_Object(o)
|
36
|
+
throw :not_literal
|
37
|
+
end
|
38
|
+
|
39
|
+
def literal_Factory(o)
|
40
|
+
literal(o.model)
|
41
|
+
end
|
42
|
+
|
43
|
+
def literal_Program(o)
|
44
|
+
literal(o.body)
|
45
|
+
end
|
46
|
+
|
47
|
+
def literal_LiteralString(o)
|
48
|
+
o.value
|
49
|
+
end
|
50
|
+
|
51
|
+
def literal_QualifiedName(o)
|
52
|
+
o.value
|
53
|
+
end
|
54
|
+
|
55
|
+
def literal_LiteralNumber(o)
|
56
|
+
o.value
|
57
|
+
end
|
58
|
+
|
59
|
+
def literal_LiteralBoolean(o)
|
60
|
+
o.value
|
61
|
+
end
|
62
|
+
|
63
|
+
def literal_LiteralUndef(o)
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def literal_ConcatenatedString(o)
|
68
|
+
# use double quoted string value if there is no interpolation
|
69
|
+
throw :not_literal unless o.segments.size == 1 && o.segments[0].is_a?(Puppet::Pops::Model::LiteralString)
|
70
|
+
o.segments[0].value
|
71
|
+
end
|
72
|
+
|
73
|
+
def literal_LiteralList(o)
|
74
|
+
o.values.map {|v| literal(v) }
|
75
|
+
end
|
76
|
+
|
77
|
+
def literal_LiteralHash(o)
|
78
|
+
o.entries.reduce({}) do |result, entry|
|
79
|
+
key = literal(entry.key)
|
80
|
+
throw :not_literal unless key.is_a?(String)
|
81
|
+
result[key] = literal(entry.value)
|
82
|
+
result
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Evaluator
|
1
3
|
# The RelationshipOperator implements the semantics of the -> <- ~> <~ operators creating relationships or notification
|
2
4
|
# relationships between the left and right hand side's references to resources.
|
3
5
|
#
|
@@ -6,14 +8,12 @@
|
|
6
8
|
# This is done to separate the concerns of the new evaluator from the 3x runtime; messy logic goes into the runtime support
|
7
9
|
# module. Later when more is cleaned up this can be simplified further.
|
8
10
|
#
|
9
|
-
class
|
11
|
+
class RelationshipOperator
|
10
12
|
|
11
13
|
# Provides access to the Puppet 3.x runtime (scope, etc.)
|
12
14
|
# This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
|
13
15
|
#
|
14
|
-
include
|
15
|
-
|
16
|
-
Issues = Puppet::Pops::Issues
|
16
|
+
include Runtime3Support
|
17
17
|
|
18
18
|
class IllegalRelationshipOperandError < RuntimeError
|
19
19
|
attr_reader :operand
|
@@ -30,11 +30,11 @@ class Puppet::Pops::Evaluator::RelationshipOperator
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def initialize
|
33
|
-
@type_transformer_visitor =
|
34
|
-
@type_calculator =
|
35
|
-
@type_parser =
|
33
|
+
@type_transformer_visitor = Visitor.new(self, "transform", 1, 1)
|
34
|
+
@type_calculator = Types::TypeCalculator.new()
|
35
|
+
@type_parser = Types::TypeParser.new()
|
36
36
|
|
37
|
-
tf =
|
37
|
+
tf = Types::TypeFactory
|
38
38
|
@catalog_type = tf.variant(tf.catalog_entry, tf.type_type(tf.catalog_entry))
|
39
39
|
end
|
40
40
|
|
@@ -51,19 +51,19 @@ class Puppet::Pops::Evaluator::RelationshipOperator
|
|
51
51
|
# A Resource is by definition a Catalog type, but of 3.x type
|
52
52
|
# @api private
|
53
53
|
def transform_Resource(o, scope)
|
54
|
-
|
54
|
+
Types::TypeFactory.resource(o.type, o.title)
|
55
55
|
end
|
56
56
|
|
57
57
|
# A string must be a type reference in string format
|
58
58
|
# @api private
|
59
59
|
def transform_String(o, scope)
|
60
|
-
assert_catalog_type(@type_parser.parse(o), scope)
|
60
|
+
assert_catalog_type(@type_parser.parse(o, scope), scope)
|
61
61
|
end
|
62
62
|
|
63
63
|
# A qualified name is short hand for a class with this name
|
64
64
|
# @api private
|
65
65
|
def transform_QualifiedName(o, scope)
|
66
|
-
|
66
|
+
Types::TypeFactory.host_class(o.value)
|
67
67
|
end
|
68
68
|
|
69
69
|
# Types are what they are, just check the type
|
@@ -165,3 +165,5 @@ class Puppet::Pops::Evaluator::RelationshipOperator
|
|
165
165
|
REVERSE_OPERATORS.include?(o.operator)
|
166
166
|
end
|
167
167
|
end
|
168
|
+
end
|
169
|
+
end
|
@@ -88,6 +88,11 @@ class Runtime3Converter
|
|
88
88
|
end
|
89
89
|
alias :convert2_Hash :convert_Hash
|
90
90
|
|
91
|
+
def convert_Iterator(o, scope, undef_value)
|
92
|
+
raise Puppet::Error, 'Use of an Iterator is not supported here'
|
93
|
+
end
|
94
|
+
alias :convert2_Iterator :convert_Iterator
|
95
|
+
|
91
96
|
def convert_Regexp(o, scope, undef_value)
|
92
97
|
# Puppet 3x cannot handle parameter values that are reqular expressions. Turn into regexp string in
|
93
98
|
# source form
|
@@ -1,16 +1,18 @@
|
|
1
|
+
module Puppet::Pops
|
2
|
+
module Evaluator
|
1
3
|
# A module with bindings between the new evaluator and the 3x runtime.
|
2
4
|
# The intention is to separate all calls into scope, compiler, resource, etc. in this module
|
3
5
|
# to make it easier to later refactor the evaluator for better implementations of the 3x classes.
|
4
6
|
#
|
5
7
|
# @api private
|
6
|
-
module
|
8
|
+
module Runtime3Support
|
7
9
|
|
8
10
|
NAME_SPACE_SEPARATOR = '::'.freeze
|
9
11
|
|
10
12
|
# Fails the evaluation of _semantic_ with a given issue.
|
11
13
|
#
|
12
|
-
# @param issue [
|
13
|
-
# @param semantic [
|
14
|
+
# @param issue [Issue] the issue to report
|
15
|
+
# @param semantic [ModelPopsObject] the object for which evaluation failed in some way. Used to determine origin.
|
14
16
|
# @param options [Hash] hash of optional named data elements for the given issue
|
15
17
|
# @return [!] this method does not return
|
16
18
|
# @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
|
@@ -24,8 +26,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
24
26
|
# Optionally (based on severity) Fails the evaluation of _semantic_ with a given issue
|
25
27
|
# If the given issue is configured to be of severity < :error it is only reported, and the function returns.
|
26
28
|
#
|
27
|
-
# @param issue [
|
28
|
-
# @param semantic [
|
29
|
+
# @param issue [Issue] the issue to report
|
30
|
+
# @param semantic [ModelPopsObject] the object for which evaluation failed in some way. Used to determine origin.
|
29
31
|
# @param options [Hash] hash of optional named data elements for the given issue
|
30
32
|
# @return [!] this method does not return
|
31
33
|
# @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
|
@@ -59,11 +61,11 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
59
61
|
#
|
60
62
|
if scope.bound?(name)
|
61
63
|
if Puppet::Parser::Scope::RESERVED_VARIABLE_NAMES.include?(name)
|
62
|
-
fail(
|
64
|
+
fail(Issues::ILLEGAL_RESERVED_ASSIGNMENT, o, {:name => name} )
|
63
65
|
elsif name == "server_facts" && Puppet[:trusted_server_facts]
|
64
|
-
fail(
|
66
|
+
fail(Issues::ILLEGAL_RESERVED_ASSIGNMENT, o, {:name => name} )
|
65
67
|
else
|
66
|
-
fail(
|
68
|
+
fail(Issues::ILLEGAL_REASSIGNMENT, o, {:name => name} )
|
67
69
|
end
|
68
70
|
end
|
69
71
|
scope.setvar(name, value)
|
@@ -86,8 +88,9 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
86
88
|
# if not set by a match expression.
|
87
89
|
#
|
88
90
|
unless name =~ Puppet::Pops::Patterns::NUMERIC_VAR_NAME
|
89
|
-
|
91
|
+
optionally_fail(Puppet::Pops::Issues::UNKNOWN_VARIABLE, o, {:name => name})
|
90
92
|
end
|
93
|
+
nil # in case unknown variable is configured as a warning
|
91
94
|
end
|
92
95
|
|
93
96
|
# Returns true if the variable of the given name is set in the given most nested scope. True is returned even if
|
@@ -136,10 +139,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
136
139
|
end
|
137
140
|
|
138
141
|
def set_scope_nesting_level(scope, level)
|
139
|
-
#
|
140
|
-
|
141
|
-
#
|
142
|
-
scope.unset_ephemeral_var(level)
|
142
|
+
# 3x uses this method to reset the level,
|
143
|
+
scope.pop_ephemerals(level)
|
143
144
|
end
|
144
145
|
|
145
146
|
# Adds a relationship between the given `source` and `target` of the given `relationship_type`
|
@@ -196,20 +197,20 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
196
197
|
# And if that is not enough, a source/target may be a Collector (a baked query that will be evaluated by the
|
197
198
|
# compiler - it is simply passed through here for processing by the compiler at the right time).
|
198
199
|
#
|
199
|
-
if source.is_a?(
|
200
|
+
if source.is_a?(Collectors::AbstractCollector)
|
200
201
|
# use verbatim - behavior defined by 3x
|
201
202
|
source_resource = source
|
202
203
|
else
|
203
204
|
# transform into the wonderful String representation in 3x
|
204
|
-
type, title =
|
205
|
+
type, title = Runtime3Converter.instance.catalog_type_to_split_type_title(source)
|
205
206
|
source_resource = Puppet::Resource.new(type, title)
|
206
207
|
end
|
207
|
-
if target.is_a?(
|
208
|
+
if target.is_a?(Collectors::AbstractCollector)
|
208
209
|
# use verbatim - behavior defined by 3x
|
209
210
|
target_resource = target
|
210
211
|
else
|
211
212
|
# transform into the wonderful String representation in 3x
|
212
|
-
type, title =
|
213
|
+
type, title = Runtime3Converter.instance.catalog_type_to_split_type_title(target)
|
213
214
|
target_resource = Puppet::Resource.new(type, title)
|
214
215
|
end
|
215
216
|
# Add the relationship to the compiler for later evaluation.
|
@@ -225,8 +226,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
225
226
|
# @return [Numeric] value `v` converted to Numeric.
|
226
227
|
#
|
227
228
|
def coerce_numeric(v, o, scope)
|
228
|
-
unless n =
|
229
|
-
fail(
|
229
|
+
unless n = Utils.to_n(v)
|
230
|
+
fail(Issues::NOT_NUMERIC, o, {:value => v})
|
230
231
|
end
|
231
232
|
n
|
232
233
|
end
|
@@ -258,35 +259,25 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
258
259
|
|
259
260
|
# Arguments must be mapped since functions are unaware of the new and magical creatures in 4x.
|
260
261
|
# NOTE: Passing an empty string last converts nil/:undef to empty string
|
261
|
-
mapped_args =
|
262
|
+
mapped_args = Runtime3Converter.map_args(args, scope, '')
|
262
263
|
result = scope.send("function_#{name}", mapped_args, &block)
|
263
264
|
# Prevent non r-value functions from leaking their result (they are not written to care about this)
|
264
265
|
Puppet::Parser::Functions.rvalue?(name) ? result : nil
|
265
266
|
end
|
266
267
|
|
267
268
|
def call_function(name, args, o, scope, &block)
|
268
|
-
|
269
|
-
loaders = scope.compiler.loaders
|
270
|
-
# find the loader that loaded the code, or use the private_environment_loader (sees env + all modules)
|
271
|
-
adapter = Puppet::Pops::Utils.find_adapter(o, Puppet::Pops::Adapters::LoaderAdapter)
|
272
|
-
|
273
|
-
# Use source location to determine calling module, or use the private_environment_loader (sees env + all modules)
|
274
|
-
# This is necessary since not all .pp files are loaded by a Puppet::Pops::Loader (see PUP-1833)
|
275
|
-
adapter ||= Puppet::Pops::Adapters::LoaderAdapter.adapt_by_source(scope, o)
|
276
|
-
|
277
|
-
loader = adapter.nil? ? loaders.private_environment_loader : adapter.loader
|
269
|
+
loader = Adapters::LoaderAdapter.loader_for_model_object(o, scope)
|
278
270
|
if loader && func = loader.load(:function, name)
|
279
271
|
Puppet::Util::Profiler.profile(name, [:functions, name]) do
|
280
272
|
return func.call(scope, *args, &block)
|
281
273
|
end
|
282
274
|
end
|
283
|
-
|
284
275
|
# Call via 3x API if function exists there
|
285
|
-
fail(
|
276
|
+
fail(Issues::UNKNOWN_FUNCTION, o, {:name => name}) unless Puppet::Parser::Functions.function(name)
|
286
277
|
|
287
278
|
# Arguments must be mapped since functions are unaware of the new and magical creatures in 4x.
|
288
279
|
# NOTE: Passing an empty string last converts nil/:undef to empty string
|
289
|
-
mapped_args =
|
280
|
+
mapped_args = Runtime3Converter.map_args(args, scope, '')
|
290
281
|
result = scope.send("function_#{name}", mapped_args, &block)
|
291
282
|
# Prevent non r-value functions from leaking their result (they are not written to care about this)
|
292
283
|
Puppet::Parser::Functions.rvalue?(name) ? result : nil
|
@@ -304,7 +295,7 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
304
295
|
end
|
305
296
|
|
306
297
|
def convert(value, scope, undef_value)
|
307
|
-
|
298
|
+
Runtime3Converter.convert(value, scope, undef_value)
|
308
299
|
end
|
309
300
|
|
310
301
|
CLASS_STRING = 'class'.freeze
|
@@ -315,6 +306,7 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
315
306
|
# a proper Issue. Now the result is "Error while evaluating a Resource Statement" with the message
|
316
307
|
# from the raised exception. (It may be good enough).
|
317
308
|
|
309
|
+
|
318
310
|
# resolve in scope.
|
319
311
|
fully_qualified_type, resource_titles = scope.resolve_type_and_titles(type_name, resource_titles)
|
320
312
|
|
@@ -380,8 +372,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
380
372
|
# A *=> results in an array of arrays
|
381
373
|
evaluated_parameters = evaluated_parameters.flatten
|
382
374
|
evaluated_resources.each do |r|
|
383
|
-
unless r.is_a?(
|
384
|
-
fail(
|
375
|
+
unless r.is_a?(Types::PResourceType) && r.type_name != 'class'
|
376
|
+
fail(Issues::ILLEGAL_OVERRIDEN_TYPE, o, {:actual => r} )
|
385
377
|
end
|
386
378
|
resource = Puppet::Parser::Resource.new(
|
387
379
|
r.type_name, r.title,
|
@@ -473,27 +465,27 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
473
465
|
end
|
474
466
|
|
475
467
|
def extract_file_line(o)
|
476
|
-
source_pos =
|
468
|
+
source_pos = Utils.find_closest_positioned(o)
|
477
469
|
return [nil, -1] unless source_pos
|
478
470
|
[source_pos.locator.file, source_pos.line]
|
479
471
|
end
|
480
472
|
|
481
473
|
def find_closest_positioned(o)
|
482
|
-
return nil if o.nil? || o.is_a?(
|
483
|
-
o.offset.nil? ? find_closest_positioned(o.eContainer) :
|
474
|
+
return nil if o.nil? || o.is_a?(Model::Program)
|
475
|
+
o.offset.nil? ? find_closest_positioned(o.eContainer) : Adapters::SourcePosAdapter.adapt(o)
|
484
476
|
end
|
485
477
|
|
486
478
|
# Creates a diagnostic producer
|
487
479
|
def diagnostic_producer
|
488
|
-
|
480
|
+
Validation::DiagnosticProducer.new(
|
489
481
|
ExceptionRaisingAcceptor.new(), # Raises exception on all issues
|
490
482
|
SeverityProducer.new(), # All issues are errors
|
491
|
-
|
483
|
+
Model::ModelLabelProvider.new())
|
492
484
|
end
|
493
485
|
|
494
486
|
# Configure the severity of failures
|
495
|
-
class SeverityProducer <
|
496
|
-
Issues =
|
487
|
+
class SeverityProducer < Validation::SeverityProducer
|
488
|
+
Issues = Issues
|
497
489
|
|
498
490
|
def initialize
|
499
491
|
super
|
@@ -505,6 +497,8 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
505
497
|
p[Issues::EMPTY_RESOURCE_SPECIALIZATION] = :ignore
|
506
498
|
end
|
507
499
|
|
500
|
+
p[Issues::UNKNOWN_VARIABLE] = Puppet[:strict_variables] ? :error : :warning
|
501
|
+
|
508
502
|
# Store config issues, ignore or warning
|
509
503
|
p[Issues::RT_NO_STORECONFIGS_EXPORT] = Puppet[:storeconfigs] ? :ignore : :warning
|
510
504
|
p[Issues::RT_NO_STORECONFIGS] = Puppet[:storeconfigs] ? :ignore : :warning
|
@@ -512,10 +506,10 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
512
506
|
end
|
513
507
|
|
514
508
|
# An acceptor of diagnostics that immediately raises an exception.
|
515
|
-
class ExceptionRaisingAcceptor <
|
509
|
+
class ExceptionRaisingAcceptor < Validation::Acceptor
|
516
510
|
def accept(diagnostic)
|
517
511
|
super
|
518
|
-
|
512
|
+
IssueReporter.assert_and_report(self, {
|
519
513
|
:message => "Evaluation Error:",
|
520
514
|
:emit_warnings => true, # log warnings
|
521
515
|
:exception_class => Puppet::PreformattedError
|
@@ -529,3 +523,5 @@ module Puppet::Pops::Evaluator::Runtime3Support
|
|
529
523
|
class EvaluationError < StandardError
|
530
524
|
end
|
531
525
|
end
|
526
|
+
end
|
527
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
|
-
|
1
|
+
module Puppet::Pops
|
2
|
+
class IssueReporter
|
2
3
|
|
3
|
-
# @param acceptor [
|
4
|
+
# @param acceptor [Validation::Acceptor] the acceptor containing reported issues
|
4
5
|
# @option options [String] :message (nil) A message text to use as prefix in
|
5
6
|
# a single Error message
|
6
7
|
# @option options [Boolean] :emit_warnings (false) whether warnings should be emitted
|
@@ -23,7 +24,7 @@ class Puppet::Pops::IssueReporter
|
|
23
24
|
# If there are warnings output them
|
24
25
|
warnings = acceptor.warnings
|
25
26
|
if emit_warnings && warnings.size > 0
|
26
|
-
formatter =
|
27
|
+
formatter = Validation::DiagnosticFormatterPuppetStyle.new
|
27
28
|
emitted_w = 0
|
28
29
|
emitted_dw = 0
|
29
30
|
acceptor.warnings.each do |w|
|
@@ -48,7 +49,7 @@ class Puppet::Pops::IssueReporter
|
|
48
49
|
unless emit_errors
|
49
50
|
raise emit_exception.new(emit_message)
|
50
51
|
end
|
51
|
-
formatter =
|
52
|
+
formatter = Validation::DiagnosticFormatterPuppetStyle.new
|
52
53
|
if errors.size == 1 || max_errors <= 1
|
53
54
|
# raise immediately
|
54
55
|
exception = create_exception(emit_exception, emit_message, formatter, errors[0])
|
@@ -111,3 +112,4 @@ class Puppet::Pops::IssueReporter
|
|
111
112
|
end
|
112
113
|
private_class_method :log_message
|
113
114
|
end
|
115
|
+
end
|
data/lib/puppet/pops/issues.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
# Defines classes to deal with issues, and message formatting and defines constants with Issues.
|
2
2
|
# @api public
|
3
3
|
#
|
4
|
-
module Puppet::Pops
|
4
|
+
module Puppet::Pops
|
5
|
+
module Issues
|
5
6
|
# Describes an issue, and can produce a message for an occurrence of the issue.
|
6
7
|
#
|
7
8
|
class Issue
|
@@ -48,7 +49,7 @@ module Puppet::Pops::Issues
|
|
48
49
|
# Evaluate the message block in the msg data's binding
|
49
50
|
msgdata.format(hash, &message_block)
|
50
51
|
rescue StandardError => e
|
51
|
-
|
52
|
+
MessageData
|
52
53
|
raise RuntimeError, "Error while reporting issue: #{issue_code}. #{e.message}", caller
|
53
54
|
end
|
54
55
|
end
|
@@ -73,19 +74,30 @@ module Puppet::Pops::Issues
|
|
73
74
|
instance_eval &block
|
74
75
|
end
|
75
76
|
|
76
|
-
#
|
77
|
-
# If given an argument,
|
78
|
-
#
|
77
|
+
# Obtains the label provider given as a key `:label` in the hash passed to #format. The label provider is
|
78
|
+
# return if no arguments are given. If given an argument, returns the result of calling #label on the label
|
79
|
+
# provider.
|
79
80
|
#
|
80
|
-
|
81
|
-
|
82
|
-
|
81
|
+
# @param args [Object] one object to obtain a label for or zero arguments to obtain the label provider
|
82
|
+
# @return [LabelProvider,String] the label provider or label depending on if an argument is given or not
|
83
|
+
# @raise [Puppet::Error] if no label provider is found
|
84
|
+
def label(*args)
|
85
|
+
args.empty? ? label_provider : label_provider.label(args[0])
|
86
|
+
end
|
87
|
+
|
88
|
+
# Returns the label provider given as key `:label` in the hash passed to #format.
|
89
|
+
# @return [LabelProvider] the label provider
|
90
|
+
# @raise [Puppet::Error] if no label provider is found
|
91
|
+
def label_provider
|
92
|
+
label_provider = @data[:label]
|
93
|
+
raise Puppet::Error, 'Label provider key :label must be set to produce the text of the message!' unless label_provider
|
94
|
+
label_provider
|
83
95
|
end
|
84
96
|
|
85
97
|
# Returns the label provider given as a key in the hash passed to #format.
|
86
98
|
#
|
87
99
|
def semantic
|
88
|
-
raise
|
100
|
+
raise Puppet::Error, 'Label provider key :semantic must be set to produce the text of the message!' unless @data[:semantic]
|
89
101
|
@data[:semantic]
|
90
102
|
end
|
91
103
|
end
|
@@ -166,7 +178,7 @@ module Puppet::Pops::Issues
|
|
166
178
|
|
167
179
|
# Variables are immutable, cannot reassign in the same assignment scope
|
168
180
|
ILLEGAL_REASSIGNMENT = hard_issue :ILLEGAL_REASSIGNMENT, :name do
|
169
|
-
if
|
181
|
+
if Validation::Checker4_0::RESERVED_PARAMETERS[name]
|
170
182
|
"Cannot reassign built in (or already assigned) variable '$#{name}'"
|
171
183
|
else
|
172
184
|
"Cannot reassign variable '$#{name}'"
|
@@ -347,6 +359,12 @@ module Puppet::Pops::Issues
|
|
347
359
|
"Attempt to use unsupported range in #{label.a_an(semantic)}, #{count} values given for max 1"
|
348
360
|
end
|
349
361
|
|
362
|
+
# Issues when expressions that are not implemented or activated in the current version are used.
|
363
|
+
#
|
364
|
+
UNSUPPORTED_EXPRESSION = issue :UNSUPPORTED_EXPRESSION do
|
365
|
+
"Expressions of type #{label.a_an(semantic)} are not supported in this version of Puppet"
|
366
|
+
end
|
367
|
+
|
350
368
|
ILLEGAL_RELATIONSHIP_OPERAND_TYPE = issue :ILLEGAL_RELATIONSHIP_OPERAND_TYPE, :operand do
|
351
369
|
"Illegal relationship operand, can not form a relationship with #{label.a_an(operand)}. A Catalog type is required."
|
352
370
|
end
|
@@ -488,7 +506,7 @@ module Puppet::Pops::Issues
|
|
488
506
|
end
|
489
507
|
|
490
508
|
DUPLICATE_ATTRIBUTE = issue :DUPLICATE_ATTRIBUE, :attribute do
|
491
|
-
"The attribute '#{attribute}' has already been set
|
509
|
+
"The attribute '#{attribute}' has already been set"
|
492
510
|
end
|
493
511
|
|
494
512
|
MISSING_TITLE = hard_issue :MISSING_TITLE do
|
@@ -687,4 +705,9 @@ module Puppet::Pops::Issues
|
|
687
705
|
HEREDOC_MULTIPLE_AT_ESCAPES = hard_issue :HEREDOC_MULTIPLE_AT_ESCAPES, :escapes do
|
688
706
|
"An escape char for @() may only appear once. Got '#{escapes.join(', ')}'"
|
689
707
|
end
|
708
|
+
|
709
|
+
ILLEGAL_BOM = hard_issue :ILLEGAL_BOM, :format_name, :bytes do
|
710
|
+
"Illegal #{format_name} Byte Order mark at beginning of input: #{bytes} - remove these from the puppet source"
|
711
|
+
end
|
712
|
+
end
|
690
713
|
end
|