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,24 +1,24 @@
|
|
|
1
|
+
module Puppet::Pops
|
|
2
|
+
module Evaluator
|
|
1
3
|
# AccessOperator handles operator []
|
|
2
4
|
# This operator is part of evaluation.
|
|
3
5
|
#
|
|
4
|
-
class
|
|
6
|
+
class AccessOperator
|
|
5
7
|
# Provides access to the Puppet 3.x runtime (scope, etc.)
|
|
6
8
|
# This separation has been made to make it easier to later migrate the evaluator to an improved runtime.
|
|
7
9
|
#
|
|
8
|
-
include
|
|
10
|
+
include Runtime3Support
|
|
9
11
|
|
|
10
|
-
Issues = Puppet::Pops::Issues
|
|
11
|
-
TYPEFACTORY = Puppet::Pops::Types::TypeFactory
|
|
12
12
|
EMPTY_STRING = ''.freeze
|
|
13
13
|
|
|
14
14
|
attr_reader :semantic
|
|
15
15
|
|
|
16
16
|
# Initialize with AccessExpression to enable reporting issues
|
|
17
|
-
# @param access_expression [
|
|
17
|
+
# @param access_expression [Model::AccessExpression] the semantic object being evaluated
|
|
18
18
|
# @return [void]
|
|
19
19
|
#
|
|
20
20
|
def initialize(access_expression)
|
|
21
|
-
@@access_visitor ||=
|
|
21
|
+
@@access_visitor ||= Visitor.new(self, "access", 2, nil)
|
|
22
22
|
@semantic = access_expression
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -36,10 +36,10 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
36
36
|
keys.flatten!
|
|
37
37
|
result = case keys.size
|
|
38
38
|
when 0
|
|
39
|
-
fail(
|
|
39
|
+
fail(Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
|
40
40
|
when 1
|
|
41
41
|
# Note that Ruby 1.8.7 requires a length of 1 to produce a String
|
|
42
|
-
k1 = coerce_numeric(keys[0], @semantic.keys, scope)
|
|
42
|
+
k1 = coerce_numeric(keys[0], @semantic.keys[0], scope)
|
|
43
43
|
bad_access_key_type(o, 0, k1, Integer) unless k1.is_a?(Integer)
|
|
44
44
|
k2 = 1
|
|
45
45
|
k1 = k1 < 0 ? o.length + k1 : k1 # abs pos
|
|
@@ -50,8 +50,8 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
50
50
|
o[ k1, k2 ]
|
|
51
51
|
end
|
|
52
52
|
when 2
|
|
53
|
-
k1 = coerce_numeric(keys[0], @semantic.keys, scope)
|
|
54
|
-
k2 = coerce_numeric(keys[1], @semantic.keys, scope)
|
|
53
|
+
k1 = coerce_numeric(keys[0], @semantic.keys[0], scope)
|
|
54
|
+
k2 = coerce_numeric(keys[1], @semantic.keys[1], scope)
|
|
55
55
|
[k1, k2].each_with_index { |k,i| bad_access_key_type(o, i, k, Integer) unless k.is_a?(Integer) }
|
|
56
56
|
|
|
57
57
|
k1 = k1 < 0 ? o.length + k1 : k1 # abs pos (negative is count from end)
|
|
@@ -63,7 +63,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
63
63
|
end
|
|
64
64
|
o[ k1, k2 ]
|
|
65
65
|
else
|
|
66
|
-
fail(
|
|
66
|
+
fail(Issues::BAD_STRING_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
|
67
67
|
end
|
|
68
68
|
# Specified as: an index outside of range, or empty result == empty string
|
|
69
69
|
(result.nil? || result.empty?) ? EMPTY_STRING : result
|
|
@@ -75,10 +75,10 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
75
75
|
keys.flatten!
|
|
76
76
|
unless keys.size == 1
|
|
77
77
|
blamed = keys.size == 0 ? @semantic : @semantic.keys[1]
|
|
78
|
-
fail(
|
|
78
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, blamed, :base_type => o, :min=>1, :actual => keys.size)
|
|
79
79
|
end
|
|
80
80
|
assert_keys(keys, o, 1, 1, String, Regexp)
|
|
81
|
-
|
|
81
|
+
Types::TypeFactory.regexp(*keys)
|
|
82
82
|
end
|
|
83
83
|
|
|
84
84
|
# Evaluates <ary>[] with 1 or 2 arguments. One argument is an index lookup, two arguments is a slice from/to.
|
|
@@ -87,7 +87,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
87
87
|
keys.flatten!
|
|
88
88
|
case keys.size
|
|
89
89
|
when 0
|
|
90
|
-
fail(
|
|
90
|
+
fail(Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
|
91
91
|
when 1
|
|
92
92
|
key = coerce_numeric(keys[0], @semantic.keys[0], scope)
|
|
93
93
|
unless key.is_a?(Integer)
|
|
@@ -114,7 +114,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
114
114
|
result = o[ k1, k2 ]
|
|
115
115
|
result.nil? ? [] : result
|
|
116
116
|
else
|
|
117
|
-
fail(
|
|
117
|
+
fail(Issues::BAD_ARRAY_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
|
118
118
|
end
|
|
119
119
|
end
|
|
120
120
|
|
|
@@ -132,7 +132,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
132
132
|
end
|
|
133
133
|
case result.size
|
|
134
134
|
when 0
|
|
135
|
-
fail(
|
|
135
|
+
fail(Issues::BAD_HASH_SLICE_ARITY, @semantic.left_expr, {:actual => keys.size})
|
|
136
136
|
when 1
|
|
137
137
|
result.pop
|
|
138
138
|
else
|
|
@@ -145,35 +145,35 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
145
145
|
def access_PEnumType(o, scope, keys)
|
|
146
146
|
keys.flatten!
|
|
147
147
|
assert_keys(keys, o, 1, Float::INFINITY, String)
|
|
148
|
-
|
|
148
|
+
Types::TypeFactory.enum(*keys)
|
|
149
149
|
end
|
|
150
150
|
|
|
151
151
|
def access_PVariantType(o, scope, keys)
|
|
152
152
|
keys.flatten!
|
|
153
|
-
assert_keys(keys, o, 1, Float::INFINITY,
|
|
154
|
-
|
|
153
|
+
assert_keys(keys, o, 1, Float::INFINITY, Types::PAnyType)
|
|
154
|
+
Types::TypeFactory.variant(*keys)
|
|
155
155
|
end
|
|
156
156
|
|
|
157
157
|
def access_PTupleType(o, scope, keys)
|
|
158
158
|
keys.flatten!
|
|
159
|
-
if
|
|
160
|
-
size_type =
|
|
159
|
+
if Types::TypeFactory.is_range_parameter?(keys[-2]) && Types::TypeFactory.is_range_parameter?(keys[-1])
|
|
160
|
+
size_type = Types::TypeFactory.range(keys[-2], keys[-1])
|
|
161
161
|
keys = keys[0, keys.size - 2]
|
|
162
|
-
elsif
|
|
163
|
-
size_type =
|
|
162
|
+
elsif Types::TypeFactory.is_range_parameter?(keys[-1])
|
|
163
|
+
size_type = Types::TypeFactory.range(keys[-1], :default)
|
|
164
164
|
keys = keys[0, keys.size - 1]
|
|
165
165
|
end
|
|
166
|
-
assert_keys(keys, o, 1, Float::INFINITY,
|
|
167
|
-
|
|
166
|
+
assert_keys(keys, o, 1, Float::INFINITY, Types::PAnyType)
|
|
167
|
+
Types::TypeFactory.tuple(keys, size_type)
|
|
168
168
|
end
|
|
169
169
|
|
|
170
170
|
def access_PCallableType(o, scope, keys)
|
|
171
|
-
|
|
171
|
+
Types::TypeFactory.callable(*keys)
|
|
172
172
|
end
|
|
173
173
|
|
|
174
174
|
def access_PStructType(o, scope, keys)
|
|
175
175
|
assert_keys(keys, o, 1, 1, Hash)
|
|
176
|
-
|
|
176
|
+
Types::TypeFactory.struct(keys[0])
|
|
177
177
|
end
|
|
178
178
|
|
|
179
179
|
def access_PStringType(o, scope, keys)
|
|
@@ -184,9 +184,9 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
184
184
|
when 2
|
|
185
185
|
size_t = collection_size_t(0, keys[0], keys[1])
|
|
186
186
|
else
|
|
187
|
-
fail(
|
|
187
|
+
fail(Issues::BAD_STRING_SLICE_ARITY, @semantic, {:actual => keys.size})
|
|
188
188
|
end
|
|
189
|
-
|
|
189
|
+
Types::TypeFactory.string(size_t)
|
|
190
190
|
end
|
|
191
191
|
|
|
192
192
|
# Asserts type of each key and calls fail with BAD_TYPE_SPECIFICATION
|
|
@@ -200,7 +200,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
200
200
|
def assert_keys(keys, o, min, max, *allowed_classes)
|
|
201
201
|
size = keys.size
|
|
202
202
|
unless size.between?(min, max || Float::INFINITY)
|
|
203
|
-
fail(
|
|
203
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, :base_type => o, :min=>1, :max => max, :actual => keys.size)
|
|
204
204
|
end
|
|
205
205
|
keys.each_with_index do |k, i|
|
|
206
206
|
unless allowed_classes.any? {|clazz| k.is_a?(clazz) }
|
|
@@ -210,7 +210,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
210
210
|
end
|
|
211
211
|
|
|
212
212
|
def bad_access_key_type(lhs, key_index, actual, *expected_classes)
|
|
213
|
-
fail(
|
|
213
|
+
fail(Issues::BAD_SLICE_KEY_TYPE, @semantic.keys[key_index], {
|
|
214
214
|
:left_value => lhs,
|
|
215
215
|
:actual => bad_key_type_name(actual),
|
|
216
216
|
:expected_classes => expected_classes
|
|
@@ -224,14 +224,14 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
224
224
|
when :default
|
|
225
225
|
'Default'
|
|
226
226
|
else
|
|
227
|
-
|
|
227
|
+
Types::TypeCalculator.generalize(Types::TypeCalculator.infer(actual)).to_s
|
|
228
228
|
end
|
|
229
229
|
end
|
|
230
230
|
|
|
231
231
|
def bad_type_specialization_key_type(type, key_index, actual, *expected_classes)
|
|
232
|
-
label_provider =
|
|
232
|
+
label_provider = Model::ModelLabelProvider.new()
|
|
233
233
|
expected = expected_classes.map {|c| label_provider.label(c) }.join(' or ')
|
|
234
|
-
fail(
|
|
234
|
+
fail(Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[key_index], {
|
|
235
235
|
:type => type,
|
|
236
236
|
:message => "Cannot use #{bad_key_type_name(actual)} where #{expected} is expected"
|
|
237
237
|
})
|
|
@@ -239,24 +239,24 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
239
239
|
|
|
240
240
|
def access_PPatternType(o, scope, keys)
|
|
241
241
|
keys.flatten!
|
|
242
|
-
assert_keys(keys, o, 1, Float::INFINITY, String, Regexp,
|
|
243
|
-
|
|
242
|
+
assert_keys(keys, o, 1, Float::INFINITY, String, Regexp, Types::PPatternType, Types::PRegexpType)
|
|
243
|
+
Types::TypeFactory.pattern(*keys)
|
|
244
244
|
end
|
|
245
245
|
|
|
246
246
|
def access_POptionalType(o, scope, keys)
|
|
247
247
|
keys.flatten!
|
|
248
248
|
if keys.size == 1
|
|
249
249
|
type = keys[0]
|
|
250
|
-
unless type.is_a?(
|
|
250
|
+
unless type.is_a?(Types::PAnyType)
|
|
251
251
|
if type.is_a?(String)
|
|
252
|
-
type =
|
|
252
|
+
type = Types::TypeFactory.string(nil, type)
|
|
253
253
|
else
|
|
254
|
-
fail(
|
|
254
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Optional-Type', :actual => type.class})
|
|
255
255
|
end
|
|
256
256
|
end
|
|
257
|
-
|
|
257
|
+
Types::POptionalType.new(type)
|
|
258
258
|
else
|
|
259
|
-
fail(
|
|
259
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Optional-Type', :min => 1, :actual => keys.size})
|
|
260
260
|
end
|
|
261
261
|
end
|
|
262
262
|
|
|
@@ -264,32 +264,32 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
264
264
|
keys.flatten!
|
|
265
265
|
case keys.size
|
|
266
266
|
when 0
|
|
267
|
-
|
|
267
|
+
Types::TypeFactory.not_undef
|
|
268
268
|
when 1
|
|
269
269
|
type = keys[0]
|
|
270
270
|
case type
|
|
271
271
|
when String
|
|
272
|
-
type =
|
|
273
|
-
when
|
|
274
|
-
type = nil if type.class ==
|
|
272
|
+
type = Types::TypeFactory.string(nil, type)
|
|
273
|
+
when Types::PAnyType
|
|
274
|
+
type = nil if type.class == Types::PAnyType
|
|
275
275
|
else
|
|
276
|
-
fail(
|
|
276
|
+
fail(Issues::BAD_NOT_UNDEF_SLICE_TYPE, @semantic.keys[0], {:base_type => 'NotUndef-Type', :actual => type.class})
|
|
277
277
|
end
|
|
278
|
-
|
|
278
|
+
Types::TypeFactory.not_undef(type)
|
|
279
279
|
else
|
|
280
|
-
fail(
|
|
280
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'NotUndef-Type', :min => 0, :max => 1, :actual => keys.size})
|
|
281
281
|
end
|
|
282
282
|
end
|
|
283
283
|
|
|
284
284
|
def access_PType(o, scope, keys)
|
|
285
285
|
keys.flatten!
|
|
286
286
|
if keys.size == 1
|
|
287
|
-
unless keys[0].is_a?(
|
|
288
|
-
fail(
|
|
287
|
+
unless keys[0].is_a?(Types::PAnyType)
|
|
288
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Type-Type', :actual => keys[0].class})
|
|
289
289
|
end
|
|
290
|
-
|
|
290
|
+
Types::PType.new(keys[0])
|
|
291
291
|
else
|
|
292
|
-
fail(
|
|
292
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {:base_type => 'Type-Type', :min => 1, :actual => keys.size})
|
|
293
293
|
end
|
|
294
294
|
end
|
|
295
295
|
|
|
@@ -297,34 +297,34 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
297
297
|
keys.flatten!
|
|
298
298
|
assert_keys(keys, o, 2, 2, String, String)
|
|
299
299
|
# create runtime type based on runtime and name of class, (not inference of key's type)
|
|
300
|
-
|
|
300
|
+
Types::TypeFactory.runtime(*keys)
|
|
301
301
|
end
|
|
302
302
|
|
|
303
303
|
def access_PIntegerType(o, scope, keys)
|
|
304
304
|
keys.flatten!
|
|
305
305
|
unless keys.size.between?(1, 2)
|
|
306
|
-
fail(
|
|
306
|
+
fail(Issues::BAD_INTEGER_SLICE_ARITY, @semantic, {:actual => keys.size})
|
|
307
307
|
end
|
|
308
308
|
keys.each_with_index do |x, index|
|
|
309
|
-
fail(
|
|
309
|
+
fail(Issues::BAD_INTEGER_SLICE_TYPE, @semantic.keys[index],
|
|
310
310
|
{:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
|
|
311
311
|
end
|
|
312
|
-
|
|
312
|
+
Types::PIntegerType.new(*keys)
|
|
313
313
|
end
|
|
314
314
|
|
|
315
315
|
def access_PFloatType(o, scope, keys)
|
|
316
316
|
keys.flatten!
|
|
317
317
|
unless keys.size.between?(1, 2)
|
|
318
|
-
fail(
|
|
318
|
+
fail(Issues::BAD_FLOAT_SLICE_ARITY, @semantic, {:actual => keys.size})
|
|
319
319
|
end
|
|
320
320
|
keys.each_with_index do |x, index|
|
|
321
|
-
fail(
|
|
321
|
+
fail(Issues::BAD_FLOAT_SLICE_TYPE, @semantic.keys[index],
|
|
322
322
|
{:actual => x.class}) unless (x.is_a?(Float) || x.is_a?(Integer) || x == :default)
|
|
323
323
|
end
|
|
324
324
|
from, to = keys
|
|
325
325
|
from = from == :default || from.nil? ? nil : Float(from)
|
|
326
326
|
to = to == :default || to.nil? ? nil : Float(to)
|
|
327
|
-
|
|
327
|
+
Types::PFloatType.new(from, to)
|
|
328
328
|
end
|
|
329
329
|
|
|
330
330
|
# A Hash can create a new Hash type, one arg sets value type, two args sets key and value type in new type.
|
|
@@ -334,21 +334,21 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
334
334
|
def access_PHashType(o, scope, keys)
|
|
335
335
|
keys.flatten!
|
|
336
336
|
keys[0,2].each_with_index do |k, index|
|
|
337
|
-
unless k.is_a?(
|
|
338
|
-
fail(
|
|
337
|
+
unless k.is_a?(Types::PAnyType)
|
|
338
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[index], {:base_type => 'Hash-Type', :actual => k.class})
|
|
339
339
|
end
|
|
340
340
|
end
|
|
341
341
|
case keys.size
|
|
342
342
|
when 2
|
|
343
|
-
|
|
343
|
+
Types::PHashType.new(keys[0], keys[1], nil)
|
|
344
344
|
when 3
|
|
345
345
|
size_t = keys[2]
|
|
346
|
-
size_t =
|
|
347
|
-
|
|
346
|
+
size_t = Types::PIntegerType.new(size_t) unless size_t.is_a?(Types::PIntegerType)
|
|
347
|
+
Types::PHashType.new(keys[0], keys[1], size_t)
|
|
348
348
|
when 4
|
|
349
|
-
|
|
349
|
+
Types::PHashType.new(keys[0], keys[1], collection_size_t(1, keys[2], keys[3]))
|
|
350
350
|
else
|
|
351
|
-
fail(
|
|
351
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic, {
|
|
352
352
|
:base_type => 'Hash-Type', :min => 2, :max => 4, :actual => keys.size
|
|
353
353
|
})
|
|
354
354
|
end
|
|
@@ -363,10 +363,10 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
363
363
|
when 2
|
|
364
364
|
size_t = collection_size_t(1, keys[0], keys[1])
|
|
365
365
|
else
|
|
366
|
-
fail(
|
|
366
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic,
|
|
367
367
|
{:base_type => 'Collection-Type', :min => 1, :max => 2, :actual => keys.size})
|
|
368
368
|
end
|
|
369
|
-
|
|
369
|
+
Types::PCollectionType.new(size_t)
|
|
370
370
|
end
|
|
371
371
|
|
|
372
372
|
# An Array can create a new Array type. It is not possible to create a collection of Array types.
|
|
@@ -381,25 +381,25 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
381
381
|
when 3
|
|
382
382
|
size_t = collection_size_t(1, keys[1], keys[2])
|
|
383
383
|
else
|
|
384
|
-
fail(
|
|
384
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, @semantic,
|
|
385
385
|
{:base_type => 'Array-Type', :min => 1, :max => 3, :actual => keys.size})
|
|
386
386
|
end
|
|
387
|
-
unless keys[0].is_a?(
|
|
388
|
-
fail(
|
|
387
|
+
unless keys[0].is_a?(Types::PAnyType)
|
|
388
|
+
fail(Issues::BAD_TYPE_SLICE_TYPE, @semantic.keys[0], {:base_type => 'Array-Type', :actual => keys[0].class})
|
|
389
389
|
end
|
|
390
|
-
|
|
390
|
+
Types::PArrayType.new(keys[0], size_t)
|
|
391
391
|
end
|
|
392
392
|
|
|
393
393
|
# Produces an PIntegerType (range) given one or two keys.
|
|
394
394
|
def collection_size_t(start_index, *keys)
|
|
395
|
-
if keys.size == 1 && keys[0].is_a?(
|
|
395
|
+
if keys.size == 1 && keys[0].is_a?(Types::PIntegerType)
|
|
396
396
|
keys[0]
|
|
397
397
|
else
|
|
398
398
|
keys.each_with_index do |x, index|
|
|
399
|
-
fail(
|
|
399
|
+
fail(Issues::BAD_COLLECTION_SLICE_TYPE, @semantic.keys[start_index + index],
|
|
400
400
|
{:actual => x.class}) unless (x.is_a?(Integer) || x == :default)
|
|
401
401
|
end
|
|
402
|
-
|
|
402
|
+
Types::PIntegerType.new(*keys)
|
|
403
403
|
end
|
|
404
404
|
end
|
|
405
405
|
|
|
@@ -408,7 +408,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
408
408
|
def access_Resource(o, scope, keys)
|
|
409
409
|
# To access a Puppet::Resource as if it was a PResourceType, simply infer it, and take the type of
|
|
410
410
|
# the parameterized meta type (i.e. Type[Resource[the_resource_type, the_resource_title]])
|
|
411
|
-
t =
|
|
411
|
+
t = Types::TypeCalculator.infer(o).type
|
|
412
412
|
# must map "undefined title" from resource to nil
|
|
413
413
|
t.title = nil if t.title == EMPTY_STRING
|
|
414
414
|
access(t, scope, *keys)
|
|
@@ -430,8 +430,8 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
430
430
|
blamed = keys.size == 0 ? @semantic : @semantic.keys[0]
|
|
431
431
|
|
|
432
432
|
if keys.size == 0
|
|
433
|
-
fail(
|
|
434
|
-
:base_type =>
|
|
433
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, blamed,
|
|
434
|
+
:base_type => o.to_s, :min => 1, :max => -1, :actual => 0)
|
|
435
435
|
end
|
|
436
436
|
|
|
437
437
|
# Must know which concrete resource type to operate on in all cases.
|
|
@@ -439,19 +439,19 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
439
439
|
# type_name is LHS type_name if set, else the first given arg
|
|
440
440
|
type_name = o.type_name || keys.shift
|
|
441
441
|
type_name = case type_name
|
|
442
|
-
when
|
|
442
|
+
when Types::PResourceType
|
|
443
443
|
type_name.type_name
|
|
444
444
|
when String
|
|
445
445
|
type_name.downcase
|
|
446
446
|
else
|
|
447
447
|
# blame given left expression if it defined the type, else the first given key expression
|
|
448
448
|
blame = o.type_name.nil? ? @semantic.keys[0] : @semantic.left_expr
|
|
449
|
-
fail(
|
|
449
|
+
fail(Issues::ILLEGAL_RESOURCE_SPECIALIZATION, blame, {:actual => bad_key_type_name(type_name)})
|
|
450
450
|
end
|
|
451
451
|
|
|
452
452
|
# type name must conform
|
|
453
|
-
if type_name !~
|
|
454
|
-
fail(
|
|
453
|
+
if type_name !~ Patterns::CLASSREF
|
|
454
|
+
fail(Issues::ILLEGAL_CLASSREF, blamed, {:name=>type_name})
|
|
455
455
|
end
|
|
456
456
|
|
|
457
457
|
# The result is an array if multiple titles are given, or if titles are specified with an array
|
|
@@ -467,7 +467,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
467
467
|
# Return an empty array
|
|
468
468
|
#
|
|
469
469
|
if keys.empty? && keys_orig_size > 0
|
|
470
|
-
optionally_fail(
|
|
470
|
+
optionally_fail(Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
|
|
471
471
|
return result_type_array ? [] : nil
|
|
472
472
|
end
|
|
473
473
|
|
|
@@ -475,12 +475,12 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
475
475
|
# lookup resource and return one or more parameter values
|
|
476
476
|
resource = find_resource(scope, o.type_name, o.title)
|
|
477
477
|
unless resource
|
|
478
|
-
fail(
|
|
478
|
+
fail(Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => o.type_name, :title => o.title})
|
|
479
479
|
end
|
|
480
480
|
|
|
481
481
|
result = keys.map do |k|
|
|
482
482
|
unless is_parameter_of_resource?(scope, resource, k)
|
|
483
|
-
fail(
|
|
483
|
+
fail(Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
|
|
484
484
|
{:type_name => o.type_name, :title => o.title, :param_name=>k})
|
|
485
485
|
end
|
|
486
486
|
get_resource_parameter_value(scope, resource, k)
|
|
@@ -493,13 +493,13 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
493
493
|
result = keys.each_with_index.map do |t, i|
|
|
494
494
|
unless t.is_a?(String) || t == :no_title
|
|
495
495
|
index = keys_orig_size != keys.size ? i+1 : i
|
|
496
|
-
fail(
|
|
496
|
+
fail(Issues::BAD_TYPE_SPECIALIZATION, @semantic.keys[index], {
|
|
497
497
|
:type => o,
|
|
498
498
|
:message => "Cannot use #{bad_key_type_name(t)} where a resource title String is expected"
|
|
499
499
|
})
|
|
500
500
|
end
|
|
501
501
|
|
|
502
|
-
|
|
502
|
+
Types::PResourceType.new(type_name, t == :no_title ? nil : t)
|
|
503
503
|
end
|
|
504
504
|
# returns single type if request was for a single entity, else an array of types (possibly empty)
|
|
505
505
|
return result_type_array ? result : result.pop
|
|
@@ -510,8 +510,8 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
510
510
|
keys_orig_size = keys.size
|
|
511
511
|
|
|
512
512
|
if keys_orig_size == 0
|
|
513
|
-
fail(
|
|
514
|
-
:base_type =>
|
|
513
|
+
fail(Issues::BAD_TYPE_SLICE_ARITY, blamed,
|
|
514
|
+
:base_type => o.to_s, :min => 1, :max => -1, :actual => 0)
|
|
515
515
|
end
|
|
516
516
|
|
|
517
517
|
# The result is an array if multiple classnames are given, or if classnames are specified with an array
|
|
@@ -526,7 +526,7 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
526
526
|
# Return an empty array
|
|
527
527
|
#
|
|
528
528
|
if keys.empty? && keys_orig_size > 0
|
|
529
|
-
optionally_fail(
|
|
529
|
+
optionally_fail(Issues::EMPTY_RESOURCE_SPECIALIZATION, blamed)
|
|
530
530
|
return result_type_array ? [] : nil
|
|
531
531
|
end
|
|
532
532
|
|
|
@@ -536,18 +536,18 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
536
536
|
# does not have a title. This should probably be deprecated.
|
|
537
537
|
#
|
|
538
538
|
result = keys.each_with_index.map do |c, i|
|
|
539
|
-
name = if c.is_a?(
|
|
539
|
+
name = if c.is_a?(Types::PResourceType) && !c.type_name.nil? && c.title.nil?
|
|
540
540
|
# type_name is already downcase. Don't waste time trying to downcase again
|
|
541
541
|
c.type_name
|
|
542
542
|
elsif c.is_a?(String)
|
|
543
543
|
c.downcase
|
|
544
544
|
else
|
|
545
|
-
fail(
|
|
545
|
+
fail(Issues::ILLEGAL_HOSTCLASS_NAME, @semantic.keys[i], {:name => c})
|
|
546
546
|
end
|
|
547
547
|
|
|
548
|
-
if name =~
|
|
548
|
+
if name =~ Patterns::NAME
|
|
549
549
|
# Remove leading '::' since all references are global, and 3x runtime does the wrong thing
|
|
550
|
-
|
|
550
|
+
Types::PHostClassType.new(name.sub(/^::/, EMPTY_STRING))
|
|
551
551
|
else
|
|
552
552
|
fail(Issues::ILLEGAL_NAME, @semantic.keys[i], {:name=>c})
|
|
553
553
|
end
|
|
@@ -560,12 +560,12 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
560
560
|
if is_parameter_of_resource?(scope, resource, k)
|
|
561
561
|
get_resource_parameter_value(scope, resource, k)
|
|
562
562
|
else
|
|
563
|
-
fail(
|
|
563
|
+
fail(Issues::UNKNOWN_RESOURCE_PARAMETER, @semantic,
|
|
564
564
|
{:type_name => 'Class', :title => o.class_name, :param_name=>k})
|
|
565
565
|
end
|
|
566
566
|
end
|
|
567
567
|
else
|
|
568
|
-
fail(
|
|
568
|
+
fail(Issues::UNKNOWN_RESOURCE, @semantic, {:type_name => 'Class', :title => o.class_name})
|
|
569
569
|
end
|
|
570
570
|
end
|
|
571
571
|
|
|
@@ -573,3 +573,5 @@ class Puppet::Pops::Evaluator::AccessOperator
|
|
|
573
573
|
return result_type_array ? result : result.pop
|
|
574
574
|
end
|
|
575
575
|
end
|
|
576
|
+
end
|
|
577
|
+
end
|