openvox 8.19.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/CHANGELOG.md +19 -0
- data/CODEOWNERS +11 -0
- data/CODE_OF_CONDUCT.md +70 -0
- data/Gemfile +87 -0
- data/Guardfile.example +76 -0
- data/LICENSE +202 -0
- data/README.md +63 -0
- data/Rakefile +170 -0
- data/bin/puppet +10 -0
- data/conf/environment.conf +18 -0
- data/conf/fileserver.conf +32 -0
- data/conf/hiera.yaml +11 -0
- data/conf/puppet.conf +6 -0
- data/examples/enc/regexp_nodes/classes/databases +2 -0
- data/examples/enc/regexp_nodes/classes/webservers +2 -0
- data/examples/enc/regexp_nodes/environment/development +2 -0
- data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
- data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
- data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
- data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
- data/examples/hiera/README.md +102 -0
- data/examples/hiera/data/common.yaml +12 -0
- data/examples/hiera/data/dc1.yaml +6 -0
- data/examples/hiera/hiera.yaml +15 -0
- data/examples/hiera/modules/ntp/data/common.yaml +4 -0
- data/examples/hiera/modules/ntp/hiera.yaml +9 -0
- data/examples/hiera/modules/ntp/manifests/config.pp +18 -0
- data/examples/hiera/modules/ntp/templates/ntp.conf.epp +3 -0
- data/examples/hiera/modules/users/manifests/common.pp +9 -0
- data/examples/hiera/modules/users/manifests/dc1.pp +9 -0
- data/examples/hiera/site.pp +3 -0
- data/examples/nagios/check_puppet.rb +123 -0
- data/ext/README.md +13 -0
- data/ext/build_defaults.yaml +18 -0
- data/ext/debian/puppet.default +4 -0
- data/ext/debian/puppet.init +113 -0
- data/ext/hiera/hiera.yaml +15 -0
- data/ext/osx/puppet.plist +32 -0
- data/ext/project_data.yaml +20 -0
- data/ext/redhat/client.init +169 -0
- data/ext/redhat/client.sysconfig +2 -0
- data/ext/solaris/smf/puppet +44 -0
- data/ext/solaris/smf/puppet.xml +46 -0
- data/ext/suse/client.init +141 -0
- data/ext/systemd/puppet.service +26 -0
- 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/windows/service/daemon.bat +6 -0
- data/ext/windows/service/daemon.rb +219 -0
- data/install.rb +428 -0
- data/lib/hiera/puppet_function.rb +86 -0
- data/lib/hiera/scope.rb +92 -0
- data/lib/hiera_puppet.rb +78 -0
- data/lib/puppet/agent/disabler.rb +55 -0
- data/lib/puppet/agent/locker.rb +46 -0
- data/lib/puppet/agent.rb +178 -0
- data/lib/puppet/application/agent.rb +527 -0
- data/lib/puppet/application/apply.rb +435 -0
- data/lib/puppet/application/catalog.rb +6 -0
- data/lib/puppet/application/config.rb +7 -0
- data/lib/puppet/application/describe.rb +255 -0
- data/lib/puppet/application/device.rb +440 -0
- data/lib/puppet/application/doc.rb +232 -0
- data/lib/puppet/application/epp.rb +7 -0
- data/lib/puppet/application/face_base.rb +277 -0
- data/lib/puppet/application/facts.rb +11 -0
- data/lib/puppet/application/filebucket.rb +324 -0
- data/lib/puppet/application/generate.rb +7 -0
- data/lib/puppet/application/help.rb +7 -0
- data/lib/puppet/application/indirection_base.rb +6 -0
- data/lib/puppet/application/lookup.rb +433 -0
- data/lib/puppet/application/module.rb +6 -0
- data/lib/puppet/application/node.rb +6 -0
- data/lib/puppet/application/parser.rb +7 -0
- data/lib/puppet/application/plugin.rb +6 -0
- data/lib/puppet/application/report.rb +6 -0
- data/lib/puppet/application/resource.rb +264 -0
- data/lib/puppet/application/script.rb +266 -0
- data/lib/puppet/application/ssl.rb +331 -0
- data/lib/puppet/application.rb +596 -0
- data/lib/puppet/application_support.rb +69 -0
- data/lib/puppet/coercion.rb +42 -0
- data/lib/puppet/compilable_resource_type.rb +17 -0
- data/lib/puppet/concurrent/lock.rb +15 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +18 -0
- data/lib/puppet/concurrent.rb +4 -0
- data/lib/puppet/configurer/downloader.rb +91 -0
- data/lib/puppet/configurer/fact_handler.rb +51 -0
- data/lib/puppet/configurer/plugin_handler.rb +61 -0
- data/lib/puppet/configurer.rb +759 -0
- data/lib/puppet/confine/any.rb +28 -0
- data/lib/puppet/confine/boolean.rb +47 -0
- data/lib/puppet/confine/exists.rb +21 -0
- data/lib/puppet/confine/false.rb +27 -0
- data/lib/puppet/confine/feature.rb +18 -0
- data/lib/puppet/confine/true.rb +28 -0
- data/lib/puppet/confine/variable.rb +61 -0
- data/lib/puppet/confine.rb +86 -0
- data/lib/puppet/confine_collection.rb +54 -0
- data/lib/puppet/confiner.rb +48 -0
- data/lib/puppet/context/trusted_information.rb +122 -0
- data/lib/puppet/context.rb +190 -0
- data/lib/puppet/daemon.rb +198 -0
- data/lib/puppet/data_binding.rb +16 -0
- data/lib/puppet/datatypes/error.rb +23 -0
- data/lib/puppet/datatypes/impl/error.rb +42 -0
- data/lib/puppet/datatypes.rb +218 -0
- data/lib/puppet/defaults.rb +2316 -0
- data/lib/puppet/environments.rb +599 -0
- data/lib/puppet/error.rb +142 -0
- data/lib/puppet/etc.rb +185 -0
- data/lib/puppet/external/dot.rb +315 -0
- data/lib/puppet/face/catalog/select.rb +51 -0
- data/lib/puppet/face/catalog.rb +167 -0
- data/lib/puppet/face/config.rb +266 -0
- data/lib/puppet/face/epp.rb +565 -0
- data/lib/puppet/face/facts.rb +176 -0
- data/lib/puppet/face/generate.rb +69 -0
- data/lib/puppet/face/help/action.erb +89 -0
- data/lib/puppet/face/help/face.erb +114 -0
- data/lib/puppet/face/help/global.erb +16 -0
- data/lib/puppet/face/help/man.erb +152 -0
- data/lib/puppet/face/help.rb +260 -0
- data/lib/puppet/face/module/changes.rb +44 -0
- data/lib/puppet/face/module/install.rb +149 -0
- data/lib/puppet/face/module/list.rb +271 -0
- data/lib/puppet/face/module/uninstall.rb +91 -0
- data/lib/puppet/face/module/upgrade.rb +89 -0
- data/lib/puppet/face/module.rb +21 -0
- data/lib/puppet/face/node/clean.rb +109 -0
- data/lib/puppet/face/node.rb +45 -0
- data/lib/puppet/face/parser.rb +226 -0
- data/lib/puppet/face/plugin.rb +62 -0
- data/lib/puppet/face/report.rb +54 -0
- data/lib/puppet/face/resource.rb +55 -0
- data/lib/puppet/face.rb +14 -0
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/feature/base.rb +76 -0
- data/lib/puppet/feature/bolt.rb +5 -0
- data/lib/puppet/feature/cfpropertylist.rb +5 -0
- data/lib/puppet/feature/eventlog.rb +7 -0
- data/lib/puppet/feature/hiera_eyaml.rb +5 -0
- data/lib/puppet/feature/hocon.rb +5 -0
- data/lib/puppet/feature/libuser.rb +10 -0
- data/lib/puppet/feature/msgpack.rb +5 -0
- data/lib/puppet/feature/pe_license.rb +6 -0
- data/lib/puppet/feature/pson.rb +6 -0
- data/lib/puppet/feature/selinux.rb +5 -0
- data/lib/puppet/feature/ssh.rb +5 -0
- data/lib/puppet/feature/telnet.rb +5 -0
- data/lib/puppet/feature/zlib.rb +7 -0
- data/lib/puppet/ffi/posix/constants.rb +16 -0
- data/lib/puppet/ffi/posix/functions.rb +25 -0
- data/lib/puppet/ffi/posix.rb +12 -0
- data/lib/puppet/ffi/windows/api_types.rb +313 -0
- data/lib/puppet/ffi/windows/constants.rb +406 -0
- data/lib/puppet/ffi/windows/functions.rb +629 -0
- data/lib/puppet/ffi/windows/structs.rb +339 -0
- data/lib/puppet/ffi/windows.rb +14 -0
- data/lib/puppet/file_bucket/dipper.rb +183 -0
- data/lib/puppet/file_bucket/file.rb +131 -0
- data/lib/puppet/file_bucket.rb +6 -0
- data/lib/puppet/file_serving/base.rb +94 -0
- data/lib/puppet/file_serving/configuration/parser.rb +116 -0
- data/lib/puppet/file_serving/configuration.rb +116 -0
- data/lib/puppet/file_serving/content.rb +45 -0
- data/lib/puppet/file_serving/fileset.rb +190 -0
- data/lib/puppet/file_serving/http_metadata.rb +61 -0
- data/lib/puppet/file_serving/metadata.rb +174 -0
- data/lib/puppet/file_serving/mount/file.rb +126 -0
- data/lib/puppet/file_serving/mount/locales.rb +35 -0
- data/lib/puppet/file_serving/mount/modules.rb +29 -0
- data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
- data/lib/puppet/file_serving/mount/plugins.rb +35 -0
- data/lib/puppet/file_serving/mount/scripts.rb +27 -0
- data/lib/puppet/file_serving/mount/tasks.rb +26 -0
- data/lib/puppet/file_serving/mount.rb +41 -0
- data/lib/puppet/file_serving/terminus_helper.rb +33 -0
- data/lib/puppet/file_serving/terminus_selector.rb +33 -0
- data/lib/puppet/file_serving.rb +5 -0
- data/lib/puppet/file_system/file_impl.rb +189 -0
- data/lib/puppet/file_system/jruby.rb +25 -0
- data/lib/puppet/file_system/memory_file.rb +82 -0
- data/lib/puppet/file_system/memory_impl.rb +103 -0
- data/lib/puppet/file_system/path_pattern.rb +95 -0
- data/lib/puppet/file_system/posix.rb +52 -0
- data/lib/puppet/file_system/uniquefile.rb +190 -0
- data/lib/puppet/file_system/windows.rb +224 -0
- data/lib/puppet/file_system.rb +421 -0
- data/lib/puppet/forge/cache.rb +61 -0
- data/lib/puppet/forge/errors.rb +113 -0
- data/lib/puppet/forge/repository.rb +98 -0
- data/lib/puppet/forge.rb +257 -0
- data/lib/puppet/functions/abs.rb +64 -0
- data/lib/puppet/functions/alert.rb +16 -0
- data/lib/puppet/functions/all.rb +106 -0
- data/lib/puppet/functions/annotate.rb +110 -0
- data/lib/puppet/functions/any.rb +111 -0
- data/lib/puppet/functions/assert_type.rb +96 -0
- data/lib/puppet/functions/binary_file.rb +35 -0
- data/lib/puppet/functions/break.rb +49 -0
- data/lib/puppet/functions/call.rb +81 -0
- data/lib/puppet/functions/camelcase.rb +63 -0
- data/lib/puppet/functions/capitalize.rb +62 -0
- data/lib/puppet/functions/ceiling.rb +38 -0
- data/lib/puppet/functions/chomp.rb +58 -0
- data/lib/puppet/functions/chop.rb +68 -0
- data/lib/puppet/functions/compare.rb +127 -0
- data/lib/puppet/functions/contain.rb +58 -0
- data/lib/puppet/functions/convert_to.rb +36 -0
- data/lib/puppet/functions/crit.rb +16 -0
- data/lib/puppet/functions/debug.rb +16 -0
- data/lib/puppet/functions/defined.rb +163 -0
- data/lib/puppet/functions/dig.rb +70 -0
- data/lib/puppet/functions/downcase.rb +91 -0
- data/lib/puppet/functions/each.rb +169 -0
- data/lib/puppet/functions/emerg.rb +16 -0
- data/lib/puppet/functions/empty.rb +87 -0
- data/lib/puppet/functions/epp.rb +50 -0
- data/lib/puppet/functions/err.rb +16 -0
- data/lib/puppet/functions/eyaml_lookup_key.rb +103 -0
- data/lib/puppet/functions/filter.rb +138 -0
- data/lib/puppet/functions/find_file.rb +50 -0
- data/lib/puppet/functions/find_template.rb +65 -0
- data/lib/puppet/functions/flatten.rb +66 -0
- data/lib/puppet/functions/floor.rb +38 -0
- data/lib/puppet/functions/get.rb +152 -0
- data/lib/puppet/functions/getvar.rb +89 -0
- data/lib/puppet/functions/group_by.rb +62 -0
- data/lib/puppet/functions/hiera.rb +91 -0
- data/lib/puppet/functions/hiera_array.rb +83 -0
- data/lib/puppet/functions/hiera_hash.rb +94 -0
- data/lib/puppet/functions/hiera_include.rb +107 -0
- data/lib/puppet/functions/hocon_data.rb +41 -0
- data/lib/puppet/functions/import.rb +9 -0
- data/lib/puppet/functions/include.rb +56 -0
- data/lib/puppet/functions/index.rb +168 -0
- data/lib/puppet/functions/info.rb +16 -0
- data/lib/puppet/functions/inline_epp.rb +61 -0
- data/lib/puppet/functions/join.rb +58 -0
- data/lib/puppet/functions/json_data.rb +33 -0
- data/lib/puppet/functions/keys.rb +27 -0
- data/lib/puppet/functions/length.rb +45 -0
- data/lib/puppet/functions/lest.rb +57 -0
- data/lib/puppet/functions/lookup.rb +224 -0
- data/lib/puppet/functions/lstrip.rb +59 -0
- data/lib/puppet/functions/map.rb +137 -0
- data/lib/puppet/functions/match.rb +133 -0
- data/lib/puppet/functions/max.rb +250 -0
- data/lib/puppet/functions/min.rb +249 -0
- data/lib/puppet/functions/module_directory.rb +43 -0
- data/lib/puppet/functions/new.rb +1013 -0
- data/lib/puppet/functions/next.rb +35 -0
- data/lib/puppet/functions/notice.rb +16 -0
- data/lib/puppet/functions/partition.rb +62 -0
- data/lib/puppet/functions/reduce.rb +159 -0
- data/lib/puppet/functions/regsubst.rb +100 -0
- data/lib/puppet/functions/require.rb +81 -0
- data/lib/puppet/functions/return.rb +17 -0
- data/lib/puppet/functions/reverse_each.rb +96 -0
- data/lib/puppet/functions/round.rb +26 -0
- data/lib/puppet/functions/rstrip.rb +59 -0
- data/lib/puppet/functions/scanf.rb +46 -0
- data/lib/puppet/functions/size.rb +15 -0
- data/lib/puppet/functions/slice.rb +127 -0
- data/lib/puppet/functions/sort.rb +76 -0
- data/lib/puppet/functions/split.rb +78 -0
- data/lib/puppet/functions/step.rb +100 -0
- data/lib/puppet/functions/strftime.rb +214 -0
- data/lib/puppet/functions/strip.rb +59 -0
- data/lib/puppet/functions/then.rb +80 -0
- data/lib/puppet/functions/tree_each.rb +198 -0
- data/lib/puppet/functions/type.rb +74 -0
- data/lib/puppet/functions/unique.rb +135 -0
- data/lib/puppet/functions/unwrap.rb +61 -0
- data/lib/puppet/functions/upcase.rb +91 -0
- data/lib/puppet/functions/values.rb +27 -0
- data/lib/puppet/functions/versioncmp.rb +41 -0
- data/lib/puppet/functions/warning.rb +16 -0
- data/lib/puppet/functions/with.rb +34 -0
- data/lib/puppet/functions/yaml_data.rb +45 -0
- data/lib/puppet/functions.rb +858 -0
- data/lib/puppet/generate/models/type/property.rb +73 -0
- data/lib/puppet/generate/models/type/type.rb +68 -0
- data/lib/puppet/generate/templates/type/pcore.erb +42 -0
- data/lib/puppet/generate/type.rb +255 -0
- data/lib/puppet/gettext/config.rb +282 -0
- data/lib/puppet/gettext/module_translations.rb +43 -0
- data/lib/puppet/gettext/stubs.rb +13 -0
- data/lib/puppet/graph/key.rb +28 -0
- data/lib/puppet/graph/prioritizer.rb +31 -0
- data/lib/puppet/graph/rb_tree_map.rb +407 -0
- data/lib/puppet/graph/relationship_graph.rb +286 -0
- data/lib/puppet/graph/sequential_prioritizer.rb +33 -0
- data/lib/puppet/graph/simple_graph.rb +552 -0
- data/lib/puppet/graph.rb +11 -0
- data/lib/puppet/http/client.rb +529 -0
- data/lib/puppet/http/dns.rb +159 -0
- data/lib/puppet/http/errors.rb +50 -0
- data/lib/puppet/http/external_client.rb +89 -0
- data/lib/puppet/http/factory.rb +53 -0
- data/lib/puppet/http/pool.rb +174 -0
- data/lib/puppet/http/pool_entry.rb +19 -0
- data/lib/puppet/http/proxy.rb +139 -0
- data/lib/puppet/http/redirector.rb +87 -0
- data/lib/puppet/http/resolver/server_list.rb +88 -0
- data/lib/puppet/http/resolver/settings.rb +24 -0
- data/lib/puppet/http/resolver/srv.rb +42 -0
- data/lib/puppet/http/resolver.rb +50 -0
- data/lib/puppet/http/response.rb +104 -0
- data/lib/puppet/http/response_converter.rb +25 -0
- data/lib/puppet/http/response_net_http.rb +43 -0
- data/lib/puppet/http/retry_after_handler.rb +78 -0
- data/lib/puppet/http/service/ca.rb +133 -0
- data/lib/puppet/http/service/compiler.rb +356 -0
- data/lib/puppet/http/service/file_server.rb +200 -0
- data/lib/puppet/http/service/puppetserver.rb +54 -0
- data/lib/puppet/http/service/report.rb +62 -0
- data/lib/puppet/http/service.rb +177 -0
- data/lib/puppet/http/session.rb +124 -0
- data/lib/puppet/http/site.rb +44 -0
- data/lib/puppet/http.rb +48 -0
- data/lib/puppet/indirector/catalog/compiler.rb +432 -0
- data/lib/puppet/indirector/catalog/json.rb +42 -0
- data/lib/puppet/indirector/catalog/msgpack.rb +8 -0
- data/lib/puppet/indirector/catalog/rest.rb +51 -0
- data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
- data/lib/puppet/indirector/catalog/yaml.rb +8 -0
- data/lib/puppet/indirector/code.rb +8 -0
- data/lib/puppet/indirector/data_binding/hiera.rb +8 -0
- data/lib/puppet/indirector/data_binding/none.rb +10 -0
- data/lib/puppet/indirector/direct_file_server.rb +20 -0
- data/lib/puppet/indirector/envelope.rb +13 -0
- data/lib/puppet/indirector/errors.rb +7 -0
- data/lib/puppet/indirector/exec.rb +40 -0
- data/lib/puppet/indirector/face.rb +142 -0
- data/lib/puppet/indirector/fact_search.rb +62 -0
- data/lib/puppet/indirector/facts/facter.rb +120 -0
- data/lib/puppet/indirector/facts/json.rb +29 -0
- data/lib/puppet/indirector/facts/memory.rb +11 -0
- data/lib/puppet/indirector/facts/network_device.rb +29 -0
- data/lib/puppet/indirector/facts/rest.rb +46 -0
- data/lib/puppet/indirector/facts/store_configs.rb +12 -0
- data/lib/puppet/indirector/facts/yaml.rb +31 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +268 -0
- data/lib/puppet/indirector/file_bucket_file/rest.rb +53 -0
- data/lib/puppet/indirector/file_bucket_file/selector.rb +54 -0
- data/lib/puppet/indirector/file_content/file.rb +9 -0
- data/lib/puppet/indirector/file_content/file_server.rb +9 -0
- data/lib/puppet/indirector/file_content/rest.rb +37 -0
- data/lib/puppet/indirector/file_content/selector.rb +32 -0
- data/lib/puppet/indirector/file_content.rb +7 -0
- data/lib/puppet/indirector/file_metadata/file.rb +9 -0
- data/lib/puppet/indirector/file_metadata/file_server.rb +9 -0
- data/lib/puppet/indirector/file_metadata/http.rb +49 -0
- data/lib/puppet/indirector/file_metadata/rest.rb +58 -0
- data/lib/puppet/indirector/file_metadata/selector.rb +32 -0
- data/lib/puppet/indirector/file_metadata.rb +7 -0
- data/lib/puppet/indirector/file_server.rb +57 -0
- data/lib/puppet/indirector/generic_http.rb +7 -0
- data/lib/puppet/indirector/hiera.rb +101 -0
- data/lib/puppet/indirector/indirection.rb +381 -0
- data/lib/puppet/indirector/json.rb +82 -0
- data/lib/puppet/indirector/memory.rb +37 -0
- data/lib/puppet/indirector/msgpack.rb +87 -0
- data/lib/puppet/indirector/node/exec.rb +70 -0
- data/lib/puppet/indirector/node/json.rb +9 -0
- data/lib/puppet/indirector/node/memory.rb +12 -0
- data/lib/puppet/indirector/node/msgpack.rb +9 -0
- data/lib/puppet/indirector/node/plain.rb +23 -0
- data/lib/puppet/indirector/node/rest.rb +31 -0
- data/lib/puppet/indirector/node/store_configs.rb +8 -0
- data/lib/puppet/indirector/node/yaml.rb +9 -0
- data/lib/puppet/indirector/none.rb +10 -0
- data/lib/puppet/indirector/plain.rb +11 -0
- data/lib/puppet/indirector/report/json.rb +36 -0
- data/lib/puppet/indirector/report/msgpack.rb +13 -0
- data/lib/puppet/indirector/report/processor.rb +63 -0
- data/lib/puppet/indirector/report/rest.rb +31 -0
- data/lib/puppet/indirector/report/yaml.rb +36 -0
- data/lib/puppet/indirector/request.rb +197 -0
- data/lib/puppet/indirector/resource/ral.rb +66 -0
- data/lib/puppet/indirector/resource/store_configs.rb +14 -0
- data/lib/puppet/indirector/resource/validator.rb +10 -0
- data/lib/puppet/indirector/rest.rb +66 -0
- data/lib/puppet/indirector/store_configs.rb +32 -0
- data/lib/puppet/indirector/terminus.rb +180 -0
- data/lib/puppet/indirector/yaml.rb +65 -0
- data/lib/puppet/indirector.rb +64 -0
- data/lib/puppet/info_service/class_information_service.rb +108 -0
- data/lib/puppet/info_service/plan_information_service.rb +38 -0
- data/lib/puppet/info_service/task_information_service.rb +45 -0
- data/lib/puppet/info_service.rb +27 -0
- data/lib/puppet/interface/action.rb +410 -0
- data/lib/puppet/interface/action_builder.rb +167 -0
- data/lib/puppet/interface/action_manager.rb +101 -0
- data/lib/puppet/interface/documentation.rb +363 -0
- data/lib/puppet/interface/face_collection.rb +141 -0
- data/lib/puppet/interface/option.rb +184 -0
- data/lib/puppet/interface/option_builder.rb +110 -0
- data/lib/puppet/interface/option_manager.rb +108 -0
- data/lib/puppet/interface.rb +240 -0
- data/lib/puppet/loaders.rb +31 -0
- data/lib/puppet/metatype/manager.rb +198 -0
- data/lib/puppet/module/plan.rb +166 -0
- data/lib/puppet/module/task.rb +288 -0
- data/lib/puppet/module.rb +487 -0
- data/lib/puppet/module_tool/applications/application.rb +96 -0
- data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
- data/lib/puppet/module_tool/applications/installer.rb +402 -0
- data/lib/puppet/module_tool/applications/uninstaller.rb +121 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +102 -0
- data/lib/puppet/module_tool/applications/upgrader.rb +288 -0
- data/lib/puppet/module_tool/applications.rb +14 -0
- data/lib/puppet/module_tool/checksums.rb +50 -0
- data/lib/puppet/module_tool/dependency.rb +42 -0
- data/lib/puppet/module_tool/errors/base.rb +17 -0
- data/lib/puppet/module_tool/errors/installer.rb +94 -0
- data/lib/puppet/module_tool/errors/shared.rb +228 -0
- data/lib/puppet/module_tool/errors/uninstaller.rb +51 -0
- data/lib/puppet/module_tool/errors/upgrader.rb +64 -0
- data/lib/puppet/module_tool/errors.rb +13 -0
- data/lib/puppet/module_tool/install_directory.rb +48 -0
- data/lib/puppet/module_tool/installed_modules.rb +99 -0
- data/lib/puppet/module_tool/local_tarball.rb +92 -0
- data/lib/puppet/module_tool/metadata.rb +227 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +199 -0
- data/lib/puppet/module_tool/tar/gnu.rb +23 -0
- data/lib/puppet/module_tool/tar/mini.rb +118 -0
- data/lib/puppet/module_tool/tar.rb +20 -0
- data/lib/puppet/module_tool.rb +194 -0
- data/lib/puppet/network/authconfig.rb +9 -0
- data/lib/puppet/network/authorization.rb +21 -0
- data/lib/puppet/network/client_request.rb +32 -0
- data/lib/puppet/network/format.rb +116 -0
- data/lib/puppet/network/format_handler.rb +110 -0
- data/lib/puppet/network/format_support.rb +140 -0
- data/lib/puppet/network/formats.rb +338 -0
- data/lib/puppet/network/http/api/indirected_routes.rb +270 -0
- data/lib/puppet/network/http/api/indirection_type.rb +33 -0
- data/lib/puppet/network/http/api/master/v3/environments.rb +4 -0
- data/lib/puppet/network/http/api/master/v3.rb +4 -0
- data/lib/puppet/network/http/api/master.rb +5 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +54 -0
- data/lib/puppet/network/http/api/server/v3.rb +40 -0
- data/lib/puppet/network/http/api/server.rb +12 -0
- data/lib/puppet/network/http/api.rb +41 -0
- data/lib/puppet/network/http/connection.rb +288 -0
- data/lib/puppet/network/http/error.rb +75 -0
- data/lib/puppet/network/http/handler.rb +213 -0
- data/lib/puppet/network/http/issues.rb +14 -0
- data/lib/puppet/network/http/memory_response.rb +15 -0
- data/lib/puppet/network/http/request.rb +83 -0
- data/lib/puppet/network/http/response.rb +25 -0
- data/lib/puppet/network/http/route.rb +104 -0
- data/lib/puppet/network/http.rb +30 -0
- data/lib/puppet/network/http_pool.rb +78 -0
- data/lib/puppet/network/uri.rb +20 -0
- data/lib/puppet/network.rb +5 -0
- data/lib/puppet/node/environment.rb +638 -0
- data/lib/puppet/node/facts.rb +165 -0
- data/lib/puppet/node/server_facts.rb +46 -0
- data/lib/puppet/node.rb +256 -0
- data/lib/puppet/pal/catalog_compiler.rb +107 -0
- data/lib/puppet/pal/compiler.rb +227 -0
- data/lib/puppet/pal/function_signature.rb +54 -0
- data/lib/puppet/pal/json_catalog_encoder.rb +76 -0
- data/lib/puppet/pal/pal_api.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +585 -0
- data/lib/puppet/pal/plan_signature.rb +73 -0
- data/lib/puppet/pal/script_compiler.rb +75 -0
- data/lib/puppet/pal/task_signature.rb +64 -0
- data/lib/puppet/parameter/boolean.rb +17 -0
- data/lib/puppet/parameter/package_options.rb +33 -0
- data/lib/puppet/parameter/path.rb +61 -0
- data/lib/puppet/parameter/value.rb +93 -0
- data/lib/puppet/parameter/value_collection.rb +213 -0
- data/lib/puppet/parameter.rb +590 -0
- data/lib/puppet/parser/abstract_compiler.rb +35 -0
- data/lib/puppet/parser/ast/block_expression.rb +17 -0
- data/lib/puppet/parser/ast/branch.rb +21 -0
- data/lib/puppet/parser/ast/hostclass.rb +29 -0
- data/lib/puppet/parser/ast/leaf.rb +84 -0
- data/lib/puppet/parser/ast/node.rb +19 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
- data/lib/puppet/parser/ast/resource.rb +66 -0
- data/lib/puppet/parser/ast/resource_instance.rb +13 -0
- data/lib/puppet/parser/ast/resourceparam.rb +33 -0
- data/lib/puppet/parser/ast/top_level_construct.rb +6 -0
- data/lib/puppet/parser/ast.rb +62 -0
- data/lib/puppet/parser/catalog_compiler.rb +56 -0
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +41 -0
- data/lib/puppet/parser/compiler/catalog_validator.rb +35 -0
- data/lib/puppet/parser/compiler.rb +616 -0
- data/lib/puppet/parser/e4_parser_adapter.rb +61 -0
- data/lib/puppet/parser/files.rb +95 -0
- data/lib/puppet/parser/functions/assert_type.rb +62 -0
- data/lib/puppet/parser/functions/binary_file.rb +26 -0
- data/lib/puppet/parser/functions/break.rb +41 -0
- data/lib/puppet/parser/functions/contain.rb +32 -0
- data/lib/puppet/parser/functions/create_resources.rb +114 -0
- data/lib/puppet/parser/functions/defined.rb +109 -0
- data/lib/puppet/parser/functions/dig.rb +40 -0
- data/lib/puppet/parser/functions/digest.rb +7 -0
- data/lib/puppet/parser/functions/each.rb +106 -0
- data/lib/puppet/parser/functions/epp.rb +40 -0
- data/lib/puppet/parser/functions/fail.rb +13 -0
- data/lib/puppet/parser/functions/file.rb +35 -0
- data/lib/puppet/parser/functions/filter.rb +81 -0
- data/lib/puppet/parser/functions/find_file.rb +29 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +46 -0
- data/lib/puppet/parser/functions/generate.rb +39 -0
- data/lib/puppet/parser/functions/hiera.rb +105 -0
- data/lib/puppet/parser/functions/hiera_array.rb +93 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +103 -0
- data/lib/puppet/parser/functions/hiera_include.rb +102 -0
- data/lib/puppet/parser/functions/include.rb +36 -0
- data/lib/puppet/parser/functions/inline_epp.rb +52 -0
- data/lib/puppet/parser/functions/inline_template.rb +28 -0
- data/lib/puppet/parser/functions/lest.rb +51 -0
- data/lib/puppet/parser/functions/lookup.rb +134 -0
- data/lib/puppet/parser/functions/map.rb +78 -0
- data/lib/puppet/parser/functions/match.rb +45 -0
- data/lib/puppet/parser/functions/md5.rb +7 -0
- data/lib/puppet/parser/functions/new.rb +992 -0
- data/lib/puppet/parser/functions/next.rb +40 -0
- data/lib/puppet/parser/functions/realize.rb +22 -0
- data/lib/puppet/parser/functions/reduce.rb +139 -0
- data/lib/puppet/parser/functions/regsubst.rb +65 -0
- data/lib/puppet/parser/functions/require.rb +43 -0
- data/lib/puppet/parser/functions/return.rb +94 -0
- data/lib/puppet/parser/functions/reverse_each.rb +85 -0
- data/lib/puppet/parser/functions/scanf.rb +40 -0
- data/lib/puppet/parser/functions/sha1.rb +7 -0
- data/lib/puppet/parser/functions/sha256.rb +7 -0
- data/lib/puppet/parser/functions/shellquote.rb +63 -0
- data/lib/puppet/parser/functions/slice.rb +41 -0
- data/lib/puppet/parser/functions/split.rb +29 -0
- data/lib/puppet/parser/functions/sprintf.rb +62 -0
- data/lib/puppet/parser/functions/step.rb +86 -0
- data/lib/puppet/parser/functions/strftime.rb +187 -0
- data/lib/puppet/parser/functions/tag.rb +15 -0
- data/lib/puppet/parser/functions/tagged.rb +24 -0
- data/lib/puppet/parser/functions/template.rb +42 -0
- data/lib/puppet/parser/functions/then.rb +75 -0
- data/lib/puppet/parser/functions/type.rb +55 -0
- data/lib/puppet/parser/functions/versioncmp.rb +31 -0
- data/lib/puppet/parser/functions/with.rb +30 -0
- data/lib/puppet/parser/functions.rb +324 -0
- data/lib/puppet/parser/parser_factory.rb +32 -0
- data/lib/puppet/parser/relationship.rb +90 -0
- data/lib/puppet/parser/resource/param.rb +37 -0
- data/lib/puppet/parser/resource.rb +353 -0
- data/lib/puppet/parser/scope.rb +1141 -0
- data/lib/puppet/parser/script_compiler.rb +123 -0
- data/lib/puppet/parser/templatewrapper.rb +105 -0
- data/lib/puppet/parser/type_loader.rb +151 -0
- data/lib/puppet/parser.rb +22 -0
- data/lib/puppet/plugins/configuration.rb +31 -0
- data/lib/puppet/plugins/syntax_checkers.rb +99 -0
- data/lib/puppet/plugins.rb +11 -0
- data/lib/puppet/pops/adaptable.rb +199 -0
- data/lib/puppet/pops/adapters.rb +159 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +732 -0
- data/lib/puppet/pops/evaluator/callable_signature.rb +108 -0
- data/lib/puppet/pops/evaluator/closure.rb +370 -0
- data/lib/puppet/pops/evaluator/collector_transformer.rb +237 -0
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +88 -0
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +30 -0
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +71 -0
- data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +269 -0
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +227 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +121 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +47 -0
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +83 -0
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
- data/lib/puppet/pops/evaluator/puppet_proc.rb +72 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +188 -0
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +225 -0
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +528 -0
- data/lib/puppet/pops/functions/dispatch.rb +107 -0
- data/lib/puppet/pops/functions/dispatcher.rb +76 -0
- data/lib/puppet/pops/functions/function.rb +137 -0
- data/lib/puppet/pops/issue_reporter.rb +140 -0
- data/lib/puppet/pops/issues.rb +933 -0
- data/lib/puppet/pops/label_provider.rb +92 -0
- data/lib/puppet/pops/loader/base_loader.rb +178 -0
- data/lib/puppet/pops/loader/dependency_loader.rb +95 -0
- data/lib/puppet/pops/loader/gem_support.rb +54 -0
- data/lib/puppet/pops/loader/generic_plan_instantiator.rb +30 -0
- data/lib/puppet/pops/loader/loader.rb +221 -0
- data/lib/puppet/pops/loader/loader_paths.rb +413 -0
- data/lib/puppet/pops/loader/module_loaders.rb +552 -0
- data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +88 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +97 -0
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +43 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +49 -0
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +130 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +104 -0
- data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
- data/lib/puppet/pops/loader/static_loader.rb +133 -0
- data/lib/puppet/pops/loader/task_instantiator.rb +46 -0
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +104 -0
- data/lib/puppet/pops/loader/typed_name.rb +56 -0
- data/lib/puppet/pops/loader/uri_helper.rb +24 -0
- data/lib/puppet/pops/loaders.rb +550 -0
- data/lib/puppet/pops/lookup/configured_data_provider.rb +95 -0
- data/lib/puppet/pops/lookup/context.rb +208 -0
- data/lib/puppet/pops/lookup/data_adapter.rb +29 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +146 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +128 -0
- data/lib/puppet/pops/lookup/data_provider.rb +94 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +37 -0
- data/lib/puppet/pops/lookup/explainer.rb +597 -0
- data/lib/puppet/pops/lookup/function_provider.rb +112 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +76 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +823 -0
- data/lib/puppet/pops/lookup/interpolation.rb +166 -0
- data/lib/puppet/pops/lookup/invocation.rb +272 -0
- data/lib/puppet/pops/lookup/key_recorder.rb +21 -0
- data/lib/puppet/pops/lookup/location_resolver.rb +101 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +533 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +101 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +94 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +92 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +96 -0
- data/lib/puppet/pops/lookup.rb +102 -0
- data/lib/puppet/pops/merge_strategy.rb +447 -0
- data/lib/puppet/pops/migration/migration_checker.rb +61 -0
- data/lib/puppet/pops/model/ast.pp +669 -0
- data/lib/puppet/pops/model/ast.rb +4776 -0
- data/lib/puppet/pops/model/ast_transformer.rb +131 -0
- data/lib/puppet/pops/model/factory.rb +1157 -0
- data/lib/puppet/pops/model/model_label_provider.rb +137 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +447 -0
- data/lib/puppet/pops/model/pn_transformer.rb +384 -0
- data/lib/puppet/pops/model/tree_dumper.rb +62 -0
- data/lib/puppet/pops/parser/code_merger.rb +29 -0
- data/lib/puppet/pops/parser/egrammar.ra +889 -0
- data/lib/puppet/pops/parser/eparser.rb +3184 -0
- data/lib/puppet/pops/parser/epp_parser.rb +52 -0
- data/lib/puppet/pops/parser/epp_support.rb +266 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +166 -0
- data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
- data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
- data/lib/puppet/pops/parser/lexer2.rb +789 -0
- data/lib/puppet/pops/parser/lexer_support.rb +221 -0
- data/lib/puppet/pops/parser/locatable.rb +23 -0
- data/lib/puppet/pops/parser/locator.rb +361 -0
- data/lib/puppet/pops/parser/parser_support.rb +252 -0
- data/lib/puppet/pops/parser/pn_parser.rb +318 -0
- data/lib/puppet/pops/parser/slurp_support.rb +119 -0
- data/lib/puppet/pops/patterns.rb +60 -0
- data/lib/puppet/pops/pcore.rb +136 -0
- data/lib/puppet/pops/pn.rb +239 -0
- data/lib/puppet/pops/puppet_stack.rb +63 -0
- data/lib/puppet/pops/resource/param.rb +56 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +296 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
- data/lib/puppet/pops/semantic_error.rb +31 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +182 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +224 -0
- data/lib/puppet/pops/serialization/deserializer.rb +83 -0
- data/lib/puppet/pops/serialization/extension.rb +166 -0
- data/lib/puppet/pops/serialization/from_data_converter.rb +231 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +21 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +16 -0
- data/lib/puppet/pops/serialization/json.rb +301 -0
- data/lib/puppet/pops/serialization/json_path.rb +129 -0
- data/lib/puppet/pops/serialization/object.rb +73 -0
- data/lib/puppet/pops/serialization/serializer.rb +144 -0
- data/lib/puppet/pops/serialization/time_factory.rb +68 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +316 -0
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +227 -0
- data/lib/puppet/pops/serialization.rb +45 -0
- data/lib/puppet/pops/time/timespan.rb +728 -0
- data/lib/puppet/pops/time/timestamp.rb +167 -0
- data/lib/puppet/pops/types/annotatable.rb +37 -0
- data/lib/puppet/pops/types/annotation.rb +73 -0
- data/lib/puppet/pops/types/class_loader.rb +134 -0
- data/lib/puppet/pops/types/implementation_registry.rb +137 -0
- data/lib/puppet/pops/types/iterable.rb +375 -0
- data/lib/puppet/pops/types/p_binary_type.rb +232 -0
- data/lib/puppet/pops/types/p_init_type.rb +241 -0
- data/lib/puppet/pops/types/p_meta_type.rb +95 -0
- data/lib/puppet/pops/types/p_object_type.rb +1142 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +229 -0
- data/lib/puppet/pops/types/p_runtime_type.rb +117 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
- data/lib/puppet/pops/types/p_sensitive_type.rb +81 -0
- data/lib/puppet/pops/types/p_timespan_type.rb +194 -0
- data/lib/puppet/pops/types/p_timestamp_type.rb +74 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +394 -0
- data/lib/puppet/pops/types/p_uri_type.rb +198 -0
- data/lib/puppet/pops/types/puppet_object.rb +41 -0
- data/lib/puppet/pops/types/recursion_guard.rb +142 -0
- data/lib/puppet/pops/types/ruby_generator.rb +477 -0
- data/lib/puppet/pops/types/ruby_method.rb +32 -0
- data/lib/puppet/pops/types/string_converter.rb +1144 -0
- data/lib/puppet/pops/types/tree_iterators.rb +250 -0
- data/lib/puppet/pops/types/type_acceptor.rb +27 -0
- data/lib/puppet/pops/types/type_asserter.rb +49 -0
- data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
- data/lib/puppet/pops/types/type_calculator.rb +829 -0
- data/lib/puppet/pops/types/type_conversion_error.rb +7 -0
- data/lib/puppet/pops/types/type_factory.rb +640 -0
- data/lib/puppet/pops/types/type_formatter.rb +796 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1105 -0
- data/lib/puppet/pops/types/type_parser.rb +690 -0
- data/lib/puppet/pops/types/type_set_reference.rb +62 -0
- data/lib/puppet/pops/types/type_with_members.rb +43 -0
- data/lib/puppet/pops/types/types.rb +3651 -0
- data/lib/puppet/pops/utils.rb +117 -0
- data/lib/puppet/pops/validation/checker4_0.rb +1155 -0
- data/lib/puppet/pops/validation/tasks_checker.rb +95 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
- data/lib/puppet/pops/validation.rb +462 -0
- data/lib/puppet/pops/visitable.rb +8 -0
- data/lib/puppet/pops/visitor.rb +136 -0
- data/lib/puppet/pops.rb +124 -0
- data/lib/puppet/property/boolean.rb +9 -0
- data/lib/puppet/property/ensure.rb +107 -0
- data/lib/puppet/property/keyvalue.rb +159 -0
- data/lib/puppet/property/list.rb +71 -0
- data/lib/puppet/property/ordered_list.rb +30 -0
- data/lib/puppet/property.rb +610 -0
- data/lib/puppet/provider/aix_object.rb +491 -0
- data/lib/puppet/provider/command.rb +27 -0
- data/lib/puppet/provider/confine.rb +8 -0
- data/lib/puppet/provider/exec/posix.rb +63 -0
- data/lib/puppet/provider/exec/shell.rb +27 -0
- data/lib/puppet/provider/exec/windows.rb +57 -0
- data/lib/puppet/provider/exec.rb +107 -0
- data/lib/puppet/provider/file/posix.rb +162 -0
- data/lib/puppet/provider/file/windows.rb +151 -0
- data/lib/puppet/provider/group/aix.rb +101 -0
- data/lib/puppet/provider/group/directoryservice.rb +24 -0
- data/lib/puppet/provider/group/groupadd.rb +180 -0
- data/lib/puppet/provider/group/ldap.rb +51 -0
- data/lib/puppet/provider/group/pw.rb +52 -0
- data/lib/puppet/provider/group/windows_adsi.rb +116 -0
- data/lib/puppet/provider/ldap.rb +143 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +522 -0
- data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
- data/lib/puppet/provider/nameservice/pw.rb +21 -0
- data/lib/puppet/provider/nameservice.rb +297 -0
- data/lib/puppet/provider/network_device.rb +74 -0
- data/lib/puppet/provider/package/aix.rb +171 -0
- data/lib/puppet/provider/package/appdmg.rb +113 -0
- data/lib/puppet/provider/package/apple.rb +49 -0
- data/lib/puppet/provider/package/apt.rb +265 -0
- data/lib/puppet/provider/package/aptitude.rb +35 -0
- data/lib/puppet/provider/package/aptrpm.rb +87 -0
- data/lib/puppet/provider/package/blastwave.rb +109 -0
- data/lib/puppet/provider/package/dnf.rb +57 -0
- data/lib/puppet/provider/package/dnfmodule.rb +143 -0
- data/lib/puppet/provider/package/dpkg.rb +191 -0
- data/lib/puppet/provider/package/fink.rb +99 -0
- data/lib/puppet/provider/package/freebsd.rb +49 -0
- data/lib/puppet/provider/package/gem.rb +296 -0
- data/lib/puppet/provider/package/hpux.rb +46 -0
- data/lib/puppet/provider/package/macports.rb +112 -0
- data/lib/puppet/provider/package/nim.rb +290 -0
- data/lib/puppet/provider/package/openbsd.rb +263 -0
- data/lib/puppet/provider/package/opkg.rb +85 -0
- data/lib/puppet/provider/package/pacman.rb +270 -0
- data/lib/puppet/provider/package/pip.rb +347 -0
- data/lib/puppet/provider/package/pip2.rb +18 -0
- data/lib/puppet/provider/package/pip3.rb +18 -0
- data/lib/puppet/provider/package/pkg.rb +300 -0
- data/lib/puppet/provider/package/pkgdmg.rb +159 -0
- data/lib/puppet/provider/package/pkgin.rb +88 -0
- data/lib/puppet/provider/package/pkgng.rb +178 -0
- data/lib/puppet/provider/package/pkgutil.rb +186 -0
- data/lib/puppet/provider/package/portage.rb +314 -0
- data/lib/puppet/provider/package/ports.rb +94 -0
- data/lib/puppet/provider/package/portupgrade.rb +233 -0
- data/lib/puppet/provider/package/puppet_gem.rb +25 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +174 -0
- data/lib/puppet/provider/package/rpm.rb +255 -0
- data/lib/puppet/provider/package/rug.rb +51 -0
- data/lib/puppet/provider/package/sun.rb +137 -0
- data/lib/puppet/provider/package/sunfreeware.rb +11 -0
- data/lib/puppet/provider/package/tdnf.rb +35 -0
- data/lib/puppet/provider/package/up2date.rb +40 -0
- data/lib/puppet/provider/package/urpmi.rb +57 -0
- data/lib/puppet/provider/package/windows/exe_package.rb +108 -0
- data/lib/puppet/provider/package/windows/msi_package.rb +72 -0
- data/lib/puppet/provider/package/windows/package.rb +113 -0
- data/lib/puppet/provider/package/windows.rb +131 -0
- data/lib/puppet/provider/package/xbps.rb +127 -0
- data/lib/puppet/provider/package/yum.rb +390 -0
- data/lib/puppet/provider/package/zypper.rb +206 -0
- data/lib/puppet/provider/package.rb +61 -0
- data/lib/puppet/provider/package_targetable.rb +71 -0
- data/lib/puppet/provider/parsedfile.rb +494 -0
- data/lib/puppet/provider/service/base.rb +135 -0
- data/lib/puppet/provider/service/bsd.rb +53 -0
- data/lib/puppet/provider/service/daemontools.rb +196 -0
- data/lib/puppet/provider/service/debian.rb +77 -0
- data/lib/puppet/provider/service/freebsd.rb +141 -0
- data/lib/puppet/provider/service/gentoo.rb +47 -0
- data/lib/puppet/provider/service/init.rb +194 -0
- data/lib/puppet/provider/service/launchd.rb +391 -0
- data/lib/puppet/provider/service/openbsd.rb +101 -0
- data/lib/puppet/provider/service/openrc.rb +72 -0
- data/lib/puppet/provider/service/openwrt.rb +37 -0
- data/lib/puppet/provider/service/rcng.rb +53 -0
- data/lib/puppet/provider/service/redhat.rb +75 -0
- data/lib/puppet/provider/service/runit.rb +107 -0
- data/lib/puppet/provider/service/service.rb +67 -0
- data/lib/puppet/provider/service/smf.rb +322 -0
- data/lib/puppet/provider/service/src.rb +147 -0
- data/lib/puppet/provider/service/systemd.rb +232 -0
- data/lib/puppet/provider/service/upstart.rb +385 -0
- data/lib/puppet/provider/service/windows.rb +179 -0
- data/lib/puppet/provider/user/aix.rb +365 -0
- data/lib/puppet/provider/user/directoryservice.rb +687 -0
- data/lib/puppet/provider/user/hpux.rb +93 -0
- data/lib/puppet/provider/user/ldap.rb +135 -0
- data/lib/puppet/provider/user/openbsd.rb +79 -0
- data/lib/puppet/provider/user/pw.rb +109 -0
- data/lib/puppet/provider/user/user_role_add.rb +243 -0
- data/lib/puppet/provider/user/useradd.rb +417 -0
- data/lib/puppet/provider/user/windows_adsi.rb +176 -0
- data/lib/puppet/provider.rb +613 -0
- data/lib/puppet/reference/configuration.rb +105 -0
- data/lib/puppet/reference/function.rb +19 -0
- data/lib/puppet/reference/indirection.rb +76 -0
- data/lib/puppet/reference/metaparameter.rb +35 -0
- data/lib/puppet/reference/providers.rb +119 -0
- data/lib/puppet/reference/report.rb +22 -0
- data/lib/puppet/reference/type.rb +111 -0
- data/lib/puppet/relationship.rb +85 -0
- data/lib/puppet/reports/http.rb +45 -0
- data/lib/puppet/reports/log.rb +15 -0
- data/lib/puppet/reports/store.rb +71 -0
- data/lib/puppet/reports.rb +95 -0
- data/lib/puppet/resource/catalog.rb +655 -0
- data/lib/puppet/resource/status.rb +231 -0
- data/lib/puppet/resource/type.rb +449 -0
- data/lib/puppet/resource/type_collection.rb +235 -0
- data/lib/puppet/resource.rb +673 -0
- data/lib/puppet/runtime.rb +67 -0
- data/lib/puppet/scheduler/job.rb +55 -0
- data/lib/puppet/scheduler/scheduler.rb +46 -0
- data/lib/puppet/scheduler/splay_job.rb +45 -0
- data/lib/puppet/scheduler/timer.rb +15 -0
- data/lib/puppet/scheduler.rb +18 -0
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/array_setting.rb +18 -0
- data/lib/puppet/settings/autosign_setting.rb +23 -0
- data/lib/puppet/settings/base_setting.rb +228 -0
- data/lib/puppet/settings/boolean_setting.rb +34 -0
- data/lib/puppet/settings/certificate_revocation_setting.rb +22 -0
- data/lib/puppet/settings/config_file.rb +148 -0
- data/lib/puppet/settings/directory_setting.rb +20 -0
- data/lib/puppet/settings/duration_setting.rb +33 -0
- data/lib/puppet/settings/enum_setting.rb +18 -0
- data/lib/puppet/settings/environment_conf.rb +228 -0
- data/lib/puppet/settings/errors.rb +14 -0
- data/lib/puppet/settings/file_or_directory_setting.rb +37 -0
- data/lib/puppet/settings/file_setting.rb +232 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +26 -0
- data/lib/puppet/settings/ini_file.rb +228 -0
- data/lib/puppet/settings/integer_setting.rb +19 -0
- data/lib/puppet/settings/path_setting.rb +10 -0
- data/lib/puppet/settings/port_setting.rb +17 -0
- data/lib/puppet/settings/priority_setting.rb +44 -0
- data/lib/puppet/settings/server_list_setting.rb +30 -0
- data/lib/puppet/settings/string_setting.rb +11 -0
- data/lib/puppet/settings/symbolic_enum_setting.rb +19 -0
- data/lib/puppet/settings/terminus_setting.rb +16 -0
- data/lib/puppet/settings/ttl_setting.rb +53 -0
- data/lib/puppet/settings/value_translator.rb +16 -0
- data/lib/puppet/settings.rb +1650 -0
- data/lib/puppet/ssl/base.rb +152 -0
- data/lib/puppet/ssl/certificate.rb +98 -0
- data/lib/puppet/ssl/certificate_request.rb +320 -0
- data/lib/puppet/ssl/certificate_request_attributes.rb +40 -0
- data/lib/puppet/ssl/certificate_signer.rb +39 -0
- data/lib/puppet/ssl/digest.rb +22 -0
- data/lib/puppet/ssl/error.rb +29 -0
- data/lib/puppet/ssl/oids.rb +199 -0
- data/lib/puppet/ssl/openssl_loader.rb +26 -0
- data/lib/puppet/ssl/ssl_context.rb +27 -0
- data/lib/puppet/ssl/ssl_provider.rb +354 -0
- data/lib/puppet/ssl/state_machine.rb +605 -0
- data/lib/puppet/ssl/verifier.rb +143 -0
- data/lib/puppet/ssl.rb +25 -0
- data/lib/puppet/syntax_checkers/base64.rb +42 -0
- data/lib/puppet/syntax_checkers/epp.rb +35 -0
- data/lib/puppet/syntax_checkers/json.rb +35 -0
- data/lib/puppet/syntax_checkers/pp.rb +35 -0
- data/lib/puppet/syntax_checkers.rb +5 -0
- data/lib/puppet/test/test_helper.rb +251 -0
- data/lib/puppet/thread_local.rb +6 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +225 -0
- data/lib/puppet/transaction/event.rb +171 -0
- data/lib/puppet/transaction/event_manager.rb +180 -0
- data/lib/puppet/transaction/persistence.rb +119 -0
- data/lib/puppet/transaction/report.rb +511 -0
- data/lib/puppet/transaction/resource_harness.rb +331 -0
- data/lib/puppet/transaction.rb +493 -0
- data/lib/puppet/trusted_external.rb +46 -0
- data/lib/puppet/type/component.rb +96 -0
- data/lib/puppet/type/exec.rb +730 -0
- data/lib/puppet/type/file/checksum.rb +54 -0
- data/lib/puppet/type/file/checksum_value.rb +56 -0
- data/lib/puppet/type/file/content.rb +180 -0
- data/lib/puppet/type/file/ctime.rb +22 -0
- data/lib/puppet/type/file/data_sync.rb +101 -0
- data/lib/puppet/type/file/ensure.rb +194 -0
- data/lib/puppet/type/file/group.rb +50 -0
- data/lib/puppet/type/file/mode.rb +192 -0
- data/lib/puppet/type/file/mtime.rb +21 -0
- data/lib/puppet/type/file/owner.rb +52 -0
- data/lib/puppet/type/file/selcontext.rb +143 -0
- data/lib/puppet/type/file/source.rb +380 -0
- data/lib/puppet/type/file/target.rb +86 -0
- data/lib/puppet/type/file/type.rb +21 -0
- data/lib/puppet/type/file.rb +1139 -0
- data/lib/puppet/type/filebucket.rb +123 -0
- data/lib/puppet/type/group.rb +238 -0
- data/lib/puppet/type/notify.rb +48 -0
- data/lib/puppet/type/package.rb +715 -0
- data/lib/puppet/type/resources.rb +192 -0
- data/lib/puppet/type/schedule.rb +441 -0
- data/lib/puppet/type/service.rb +310 -0
- data/lib/puppet/type/stage.rb +29 -0
- data/lib/puppet/type/tidy.rb +382 -0
- data/lib/puppet/type/user.rb +865 -0
- data/lib/puppet/type/whit.rb +35 -0
- data/lib/puppet/type.rb +2629 -0
- data/lib/puppet/util/at_fork/noop.rb +20 -0
- data/lib/puppet/util/at_fork/solaris.rb +158 -0
- data/lib/puppet/util/at_fork.rb +37 -0
- data/lib/puppet/util/autoload.rb +221 -0
- data/lib/puppet/util/backups.rb +88 -0
- data/lib/puppet/util/character_encoding.rb +83 -0
- data/lib/puppet/util/checksums.rb +380 -0
- data/lib/puppet/util/classgen.rb +223 -0
- data/lib/puppet/util/colors.rb +102 -0
- data/lib/puppet/util/command_line/puppet_option_parser.rb +89 -0
- data/lib/puppet/util/command_line/trollop.rb +847 -0
- data/lib/puppet/util/command_line.rb +198 -0
- data/lib/puppet/util/constant_inflector.rb +25 -0
- data/lib/puppet/util/diff.rb +80 -0
- data/lib/puppet/util/docs.rb +132 -0
- data/lib/puppet/util/errors.rb +161 -0
- data/lib/puppet/util/execution.rb +446 -0
- data/lib/puppet/util/execution_stub.rb +28 -0
- data/lib/puppet/util/feature.rb +129 -0
- data/lib/puppet/util/file_watcher.rb +31 -0
- data/lib/puppet/util/fileparsing.rb +404 -0
- data/lib/puppet/util/filetype.rb +358 -0
- data/lib/puppet/util/http_proxy.rb +6 -0
- data/lib/puppet/util/inifile.rb +335 -0
- data/lib/puppet/util/instance_loader.rb +69 -0
- data/lib/puppet/util/json.rb +94 -0
- data/lib/puppet/util/json_lockfile.rb +47 -0
- data/lib/puppet/util/ldap/connection.rb +75 -0
- data/lib/puppet/util/ldap/generator.rb +44 -0
- data/lib/puppet/util/ldap/manager.rb +283 -0
- data/lib/puppet/util/ldap.rb +4 -0
- data/lib/puppet/util/libuser.conf +15 -0
- data/lib/puppet/util/libuser.rb +13 -0
- data/lib/puppet/util/limits.rb +14 -0
- data/lib/puppet/util/lockfile.rb +66 -0
- data/lib/puppet/util/log/destination.rb +50 -0
- data/lib/puppet/util/log/destinations.rb +253 -0
- data/lib/puppet/util/log.rb +436 -0
- data/lib/puppet/util/logging.rb +304 -0
- data/lib/puppet/util/metaid.rb +22 -0
- data/lib/puppet/util/metric.rb +68 -0
- data/lib/puppet/util/monkey_patches.rb +114 -0
- data/lib/puppet/util/multi_match.rb +55 -0
- data/lib/puppet/util/network_device/base.rb +24 -0
- data/lib/puppet/util/network_device/config.rb +105 -0
- data/lib/puppet/util/network_device/transport/base.rb +26 -0
- data/lib/puppet/util/network_device/transport.rb +7 -0
- data/lib/puppet/util/network_device.rb +19 -0
- data/lib/puppet/util/package/version/debian.rb +177 -0
- data/lib/puppet/util/package/version/gem.rb +18 -0
- data/lib/puppet/util/package/version/pip.rb +173 -0
- data/lib/puppet/util/package/version/range/eq.rb +17 -0
- data/lib/puppet/util/package/version/range/gt.rb +17 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +17 -0
- data/lib/puppet/util/package/version/range/lt.rb +17 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +17 -0
- data/lib/puppet/util/package/version/range/min_max.rb +26 -0
- data/lib/puppet/util/package/version/range/simple.rb +13 -0
- data/lib/puppet/util/package/version/range.rb +57 -0
- data/lib/puppet/util/package/version/rpm.rb +75 -0
- data/lib/puppet/util/package.rb +43 -0
- data/lib/puppet/util/pidlock.rb +103 -0
- data/lib/puppet/util/platform.rb +72 -0
- data/lib/puppet/util/plist.rb +161 -0
- data/lib/puppet/util/posix.rb +206 -0
- data/lib/puppet/util/profiler/aggregate.rb +82 -0
- data/lib/puppet/util/profiler/around_profiler.rb +68 -0
- data/lib/puppet/util/profiler/logging.rb +50 -0
- data/lib/puppet/util/profiler/object_counts.rb +19 -0
- data/lib/puppet/util/profiler/wall_clock.rb +36 -0
- data/lib/puppet/util/profiler.rb +55 -0
- data/lib/puppet/util/provider_features.rb +183 -0
- data/lib/puppet/util/psych_support.rb +32 -0
- data/lib/puppet/util/rdoc/code_objects.rb +293 -0
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +902 -0
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1068 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +262 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +16 -0
- data/lib/puppet/util/rdoc/parser.rb +14 -0
- data/lib/puppet/util/rdoc.rb +54 -0
- data/lib/puppet/util/reference.rb +94 -0
- data/lib/puppet/util/resource_template.rb +63 -0
- data/lib/puppet/util/retry_action.rb +47 -0
- data/lib/puppet/util/rpm_compare.rb +196 -0
- data/lib/puppet/util/rubygems.rb +67 -0
- data/lib/puppet/util/run_mode.rb +164 -0
- data/lib/puppet/util/selinux.rb +331 -0
- data/lib/puppet/util/skip_tags.rb +15 -0
- data/lib/puppet/util/splayer.rb +20 -0
- data/lib/puppet/util/storage.rb +100 -0
- data/lib/puppet/util/suidmanager.rb +167 -0
- data/lib/puppet/util/symbolic_file_mode.rb +156 -0
- data/lib/puppet/util/tag_set.rb +29 -0
- data/lib/puppet/util/tagging.rb +131 -0
- data/lib/puppet/util/terminal.rb +18 -0
- data/lib/puppet/util/user_attr.rb +23 -0
- data/lib/puppet/util/warnings.rb +35 -0
- data/lib/puppet/util/watched_file.rb +40 -0
- data/lib/puppet/util/watcher/change_watcher.rb +35 -0
- data/lib/puppet/util/watcher/periodic_watcher.rb +38 -0
- data/lib/puppet/util/watcher/timer.rb +21 -0
- data/lib/puppet/util/watcher.rb +17 -0
- data/lib/puppet/util/windows/access_control_entry.rb +86 -0
- data/lib/puppet/util/windows/access_control_list.rb +116 -0
- data/lib/puppet/util/windows/adsi.rb +662 -0
- data/lib/puppet/util/windows/com.rb +228 -0
- data/lib/puppet/util/windows/daemon.rb +340 -0
- data/lib/puppet/util/windows/error.rb +86 -0
- data/lib/puppet/util/windows/eventlog.rb +191 -0
- data/lib/puppet/util/windows/file.rb +359 -0
- data/lib/puppet/util/windows/monkey_patches/process.rb +413 -0
- data/lib/puppet/util/windows/principal.rb +204 -0
- data/lib/puppet/util/windows/process.rb +360 -0
- data/lib/puppet/util/windows/registry.rb +443 -0
- data/lib/puppet/util/windows/root_certs.rb +110 -0
- data/lib/puppet/util/windows/security.rb +909 -0
- data/lib/puppet/util/windows/security_descriptor.rb +64 -0
- data/lib/puppet/util/windows/service.rb +708 -0
- data/lib/puppet/util/windows/sid.rb +291 -0
- data/lib/puppet/util/windows/string.rb +17 -0
- data/lib/puppet/util/windows/user.rb +551 -0
- data/lib/puppet/util/windows.rb +58 -0
- data/lib/puppet/util/yaml.rb +67 -0
- data/lib/puppet/util.rb +759 -0
- data/lib/puppet/vendor/require_vendored.rb +4 -0
- data/lib/puppet/vendor.rb +59 -0
- data/lib/puppet/version.rb +98 -0
- data/lib/puppet/x509/cert_provider.rb +405 -0
- data/lib/puppet/x509/pem_store.rb +57 -0
- data/lib/puppet/x509.rb +13 -0
- data/lib/puppet.rb +348 -0
- data/lib/puppet_pal.rb +10 -0
- data/lib/puppet_x.rb +16 -0
- data/locales/config.yaml +29 -0
- data/locales/en/puppet.po +19 -0
- data/locales/puppet.pot +9738 -0
- data/man/man5/puppet.conf.5 +1407 -0
- data/man/man8/puppet-agent.8 +135 -0
- data/man/man8/puppet-apply.8 +67 -0
- data/man/man8/puppet-catalog.8 +194 -0
- data/man/man8/puppet-config.8 +103 -0
- data/man/man8/puppet-describe.8 +35 -0
- data/man/man8/puppet-device.8 +83 -0
- data/man/man8/puppet-doc.8 +30 -0
- data/man/man8/puppet-epp.8 +232 -0
- data/man/man8/puppet-facts.8 +156 -0
- data/man/man8/puppet-filebucket.8 +134 -0
- data/man/man8/puppet-generate.8 +54 -0
- data/man/man8/puppet-help.8 +46 -0
- data/man/man8/puppet-lookup.8 +71 -0
- data/man/man8/puppet-module.8 +220 -0
- data/man/man8/puppet-node.8 +142 -0
- data/man/man8/puppet-parser.8 +87 -0
- data/man/man8/puppet-plugin.8 +50 -0
- data/man/man8/puppet-report.8 +84 -0
- data/man/man8/puppet-resource.8 +63 -0
- data/man/man8/puppet-script.8 +48 -0
- data/man/man8/puppet-ssl.8 +45 -0
- data/man/man8/puppet.8 +98 -0
- data/tasks/tag.rake +34 -0
- metadata +1336 -0
@@ -0,0 +1,829 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../puppet/concurrent/thread_local_singleton'
|
4
|
+
|
5
|
+
module Puppet::Pops
|
6
|
+
module Types
|
7
|
+
# The TypeCalculator can answer questions about puppet types.
|
8
|
+
#
|
9
|
+
# The Puppet type system is primarily based on sub-classing. When asking the type calculator to infer types from Ruby in general, it
|
10
|
+
# may not provide the wanted answer; it does not for instance take module inclusions and extensions into account. In general the type
|
11
|
+
# system should be unsurprising for anyone being exposed to the notion of type. The type `Data` may require a bit more explanation; this
|
12
|
+
# is an abstract type that includes all scalar types, as well as Array with an element type compatible with Data, and Hash with key
|
13
|
+
# compatible with scalar and elements compatible with Data. Expressed differently; Data is what you typically express using JSON (with
|
14
|
+
# the exception that the Puppet type system also includes Pattern (regular expression) as a scalar.
|
15
|
+
#
|
16
|
+
# Inference
|
17
|
+
# ---------
|
18
|
+
# The `infer(o)` method infers a Puppet type for scalar Ruby objects, and for Arrays and Hashes.
|
19
|
+
# The inference result is instance specific for single typed collections
|
20
|
+
# and allows answering questions about its embedded type. It does not however preserve multiple types in
|
21
|
+
# a collection, and can thus not answer questions like `[1,a].infer() =~ Array[Integer, String]` since the inference
|
22
|
+
# computes the common type Scalar when combining Integer and String.
|
23
|
+
#
|
24
|
+
# The `infer_generic(o)` method infers a generic Puppet type for scalar Ruby object, Arrays and Hashes.
|
25
|
+
# This inference result does not contain instance specific information; e.g. Array[Integer] where the integer
|
26
|
+
# range is the generic default. Just `infer` it also combines types into a common type.
|
27
|
+
#
|
28
|
+
# The `infer_set(o)` method works like `infer` but preserves all type information. It does not do any
|
29
|
+
# reduction into common types or ranges. This method of inference is best suited for answering questions
|
30
|
+
# about an object being an instance of a type. It correctly answers: `[1,a].infer_set() =~ Array[Integer, String]`
|
31
|
+
#
|
32
|
+
# The `generalize!(t)` method modifies an instance specific inference result to a generic. The method mutates
|
33
|
+
# the given argument. Basically, this removes string instances from String, and range from Integer and Float.
|
34
|
+
#
|
35
|
+
# Assignability
|
36
|
+
# -------------
|
37
|
+
# The `assignable?(t1, t2)` method answers if t2 conforms to t1. The type t2 may be an instance, in which case
|
38
|
+
# its type is inferred, or a type.
|
39
|
+
#
|
40
|
+
# Instance?
|
41
|
+
# ---------
|
42
|
+
# The `instance?(t, o)` method answers if the given object (instance) is an instance that is assignable to the given type.
|
43
|
+
#
|
44
|
+
# String
|
45
|
+
# ------
|
46
|
+
# Creates a string representation of a type.
|
47
|
+
#
|
48
|
+
# Creation of Type instances
|
49
|
+
# --------------------------
|
50
|
+
# Instance of the classes in the {Types type model} are used to denote a specific type. It is most convenient
|
51
|
+
# to use the {TypeFactory} when creating instances.
|
52
|
+
#
|
53
|
+
# @note
|
54
|
+
# In general, new instances of the wanted type should be created as they are assigned to models using containment, and a
|
55
|
+
# contained object can only be in one container at a time. Also, the type system may include more details in each type
|
56
|
+
# instance, such as if it may be nil, be empty, contain a certain count etc. Or put differently, the puppet types are not
|
57
|
+
# singletons.
|
58
|
+
#
|
59
|
+
# All types support `copy` which should be used when assigning a type where it is unknown if it is bound or not
|
60
|
+
# to a parent type. A check can be made with `t.eContainer().nil?`
|
61
|
+
#
|
62
|
+
# Equality and Hash
|
63
|
+
# -----------------
|
64
|
+
# Type instances are equal in terms of Ruby eql? and `==` if they describe the same type, but they are not `equal?` if they are not
|
65
|
+
# the same type instance. Two types that describe the same type have identical hash - this makes them usable as hash keys.
|
66
|
+
#
|
67
|
+
# Types and Subclasses
|
68
|
+
# --------------------
|
69
|
+
# In general, the type calculator should be used to answer questions if a type is a subtype of another (using {#assignable?}, or
|
70
|
+
# {#instance?} if the question is if a given object is an instance of a given type (or is a subtype thereof).
|
71
|
+
# Many of the types also have a Ruby subtype relationship; e.g. PHashType and PArrayType are both subtypes of PCollectionType, and
|
72
|
+
# PIntegerType, PFloatType, PStringType,... are subtypes of PScalarType. Even if it is possible to answer certain questions about
|
73
|
+
# type by looking at the Ruby class of the types this is considered an implementation detail, and such checks should in general
|
74
|
+
# be performed by the type_calculator which implements the type system semantics.
|
75
|
+
#
|
76
|
+
# The PRuntimeType
|
77
|
+
# -------------
|
78
|
+
# The PRuntimeType corresponds to a type in the runtime system (currently only supported runtime is 'ruby'). The
|
79
|
+
# type has a runtime_type_name that corresponds to a Ruby Class name.
|
80
|
+
# A Runtime[ruby] type can be used to describe any ruby class except for the puppet types that are specialized
|
81
|
+
# (i.e. PRuntimeType should not be used for Integer, String, etc. since there are specialized types for those).
|
82
|
+
# When the type calculator deals with PRuntimeTypes and checks for assignability, it determines the
|
83
|
+
# "common ancestor class" of two classes.
|
84
|
+
# This check is made based on the superclasses of the two classes being compared. In order to perform this, the
|
85
|
+
# classes must be present (i.e. they are resolved from the string form in the PRuntimeType to a
|
86
|
+
# loaded, instantiated Ruby Class). In general this is not a problem, since the question to produce the common
|
87
|
+
# super type for two objects means that the classes must be present or there would have been
|
88
|
+
# no instances present in the first place. If however the classes are not present, the type
|
89
|
+
# calculator will fall back and state that the two types at least have Any in common.
|
90
|
+
#
|
91
|
+
# @see TypeFactory for how to create instances of types
|
92
|
+
# @see TypeParser how to construct a type instance from a String
|
93
|
+
# @see Types for details about the type model
|
94
|
+
#
|
95
|
+
# Using the Type Calculator
|
96
|
+
# -----
|
97
|
+
# The type calculator can be directly used via its class methods. If doing time critical work and doing many
|
98
|
+
# calls to the type calculator, it is more performant to create an instance and invoke the corresponding
|
99
|
+
# instance methods. Note that inference is an expensive operation, rather than inferring the same thing
|
100
|
+
# several times, it is in general better to infer once and then copy the result if mutation to a more generic form is
|
101
|
+
# required.
|
102
|
+
#
|
103
|
+
# @api public
|
104
|
+
#
|
105
|
+
class TypeCalculator
|
106
|
+
extend Puppet::Concurrent::ThreadLocalSingleton
|
107
|
+
|
108
|
+
# @api public
|
109
|
+
def self.assignable?(t1, t2)
|
110
|
+
singleton.assignable?(t1, t2)
|
111
|
+
end
|
112
|
+
|
113
|
+
# Answers, does the given callable accept the arguments given in args (an array or a tuple)
|
114
|
+
# @param callable [PCallableType] - the callable
|
115
|
+
# @param args [PArrayType, PTupleType] args optionally including a lambda callable at the end
|
116
|
+
# @return [Boolean] true if the callable accepts the arguments
|
117
|
+
#
|
118
|
+
# @api public
|
119
|
+
def self.callable?(callable, args)
|
120
|
+
singleton.callable?(callable, args)
|
121
|
+
end
|
122
|
+
|
123
|
+
# @api public
|
124
|
+
def self.infer(o)
|
125
|
+
singleton.infer(o)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Infers a type if given object may have callable members, else returns nil.
|
129
|
+
# Caller must check for nil or if returned type supports members.
|
130
|
+
# This is a much cheaper call than doing a call to the general infer(o) method.
|
131
|
+
#
|
132
|
+
# @api private
|
133
|
+
def self.infer_callable_methods_t(o)
|
134
|
+
# If being a value that cannot have Pcore based methods callable from Puppet Language
|
135
|
+
if o.is_a?(String) ||
|
136
|
+
o.is_a?(Numeric) ||
|
137
|
+
o.is_a?(TrueClass) ||
|
138
|
+
o.is_a?(FalseClass) ||
|
139
|
+
o.is_a?(Regexp) ||
|
140
|
+
o.instance_of?(Array) ||
|
141
|
+
o.instance_of?(Hash) ||
|
142
|
+
Types::PUndefType::DEFAULT.instance?(o)
|
143
|
+
|
144
|
+
return nil
|
145
|
+
end
|
146
|
+
|
147
|
+
# For other objects (e.g. PObjectType instances, and runtime types) full inference needed, since that will
|
148
|
+
# cover looking into the runtime type registry.
|
149
|
+
#
|
150
|
+
infer(o)
|
151
|
+
end
|
152
|
+
|
153
|
+
# @api public
|
154
|
+
def self.generalize(o)
|
155
|
+
singleton.generalize(o)
|
156
|
+
end
|
157
|
+
|
158
|
+
# @api public
|
159
|
+
def self.infer_set(o)
|
160
|
+
singleton.infer_set(o)
|
161
|
+
end
|
162
|
+
|
163
|
+
# @api public
|
164
|
+
def self.iterable(t)
|
165
|
+
singleton.iterable(t)
|
166
|
+
end
|
167
|
+
|
168
|
+
# @api public
|
169
|
+
#
|
170
|
+
def initialize
|
171
|
+
@infer_visitor = Visitor.new(nil, 'infer', 0, 0)
|
172
|
+
@extract_visitor = Visitor.new(nil, 'extract', 0, 0)
|
173
|
+
end
|
174
|
+
|
175
|
+
# Answers 'can an instance of type t2 be assigned to a variable of type t'.
|
176
|
+
# Does not accept nil/undef unless the type accepts it.
|
177
|
+
#
|
178
|
+
# @api public
|
179
|
+
#
|
180
|
+
def assignable?(t, t2)
|
181
|
+
if t.is_a?(Module)
|
182
|
+
t = type(t)
|
183
|
+
end
|
184
|
+
t.is_a?(PAnyType) ? t.assignable?(t2) : false
|
185
|
+
end
|
186
|
+
|
187
|
+
# Returns an iterable if the t represents something that can be iterated
|
188
|
+
def iterable(t)
|
189
|
+
# Create an iterable on the type if possible
|
190
|
+
Iterable.on(t)
|
191
|
+
end
|
192
|
+
|
193
|
+
# Answers, does the given callable accept the arguments given in args (an array or a tuple)
|
194
|
+
#
|
195
|
+
def callable?(callable, args)
|
196
|
+
callable.is_a?(PAnyType) && callable.callable?(args)
|
197
|
+
end
|
198
|
+
|
199
|
+
# Answers if the two given types describe the same type
|
200
|
+
def equals(left, right)
|
201
|
+
return false unless left.is_a?(PAnyType) && right.is_a?(PAnyType)
|
202
|
+
|
203
|
+
# Types compare per class only - an extra test must be made if the are mutually assignable
|
204
|
+
# to find all types that represent the same type of instance
|
205
|
+
#
|
206
|
+
left == right || (assignable?(right, left) && assignable?(left, right))
|
207
|
+
end
|
208
|
+
|
209
|
+
# Answers 'what is the Puppet Type corresponding to the given Ruby class'
|
210
|
+
# @param c [Module] the class for which a puppet type is wanted
|
211
|
+
# @api public
|
212
|
+
#
|
213
|
+
def type(c)
|
214
|
+
raise ArgumentError, 'Argument must be a Module' unless c.is_a? Module
|
215
|
+
|
216
|
+
# Can't use a visitor here since we don't have an instance of the class
|
217
|
+
if c <= Integer
|
218
|
+
type = PIntegerType::DEFAULT
|
219
|
+
elsif c == Float
|
220
|
+
type = PFloatType::DEFAULT
|
221
|
+
elsif c == Numeric
|
222
|
+
type = PNumericType::DEFAULT
|
223
|
+
elsif c == String
|
224
|
+
type = PStringType::DEFAULT
|
225
|
+
elsif c == Regexp
|
226
|
+
type = PRegexpType::DEFAULT
|
227
|
+
elsif c == NilClass
|
228
|
+
type = PUndefType::DEFAULT
|
229
|
+
elsif c == FalseClass || c == TrueClass
|
230
|
+
type = PBooleanType::DEFAULT
|
231
|
+
elsif c == Class
|
232
|
+
type = PTypeType::DEFAULT
|
233
|
+
elsif c == Array
|
234
|
+
# Assume array of any
|
235
|
+
type = PArrayType::DEFAULT
|
236
|
+
elsif c == Hash
|
237
|
+
# Assume hash of any
|
238
|
+
type = PHashType::DEFAULT
|
239
|
+
else
|
240
|
+
type = PRuntimeType.new(:ruby, c.name)
|
241
|
+
end
|
242
|
+
type
|
243
|
+
end
|
244
|
+
|
245
|
+
# Generalizes value specific types. The generalized type is returned.
|
246
|
+
# @api public
|
247
|
+
def generalize(o)
|
248
|
+
o.is_a?(PAnyType) ? o.generalize : o
|
249
|
+
end
|
250
|
+
|
251
|
+
# Answers 'what is the single common Puppet Type describing o', or if o is an Array or Hash, what is the
|
252
|
+
# single common type of the elements (or keys and elements for a Hash).
|
253
|
+
# @api public
|
254
|
+
#
|
255
|
+
def infer(o)
|
256
|
+
# Optimize the most common cases into direct calls.
|
257
|
+
# Explicit if/elsif/else is faster than case
|
258
|
+
case o
|
259
|
+
when String
|
260
|
+
infer_String(o)
|
261
|
+
when Integer # need subclasses for Ruby < 2.4
|
262
|
+
infer_Integer(o)
|
263
|
+
when Array
|
264
|
+
infer_Array(o)
|
265
|
+
when Hash
|
266
|
+
infer_Hash(o)
|
267
|
+
when Evaluator::PuppetProc
|
268
|
+
infer_PuppetProc(o)
|
269
|
+
else
|
270
|
+
@infer_visitor.visit_this_0(self, o)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
def infer_generic(o)
|
275
|
+
generalize(infer(o))
|
276
|
+
end
|
277
|
+
|
278
|
+
# Answers 'what is the set of Puppet Types of o'
|
279
|
+
# @api public
|
280
|
+
#
|
281
|
+
def infer_set(o)
|
282
|
+
if o.instance_of?(Array)
|
283
|
+
infer_set_Array(o)
|
284
|
+
elsif o.instance_of?(Hash)
|
285
|
+
infer_set_Hash(o)
|
286
|
+
elsif o.instance_of?(SemanticPuppet::Version)
|
287
|
+
infer_set_Version(o)
|
288
|
+
else
|
289
|
+
infer(o)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
# Answers 'is o an instance of type t'
|
294
|
+
# @api public
|
295
|
+
#
|
296
|
+
def self.instance?(t, o)
|
297
|
+
singleton.instance?(t, o)
|
298
|
+
end
|
299
|
+
|
300
|
+
# Answers 'is o an instance of type t'
|
301
|
+
# @api public
|
302
|
+
#
|
303
|
+
def instance?(t, o)
|
304
|
+
if t.is_a?(Module)
|
305
|
+
t = type(t)
|
306
|
+
end
|
307
|
+
t.is_a?(PAnyType) ? t.instance?(o) : false
|
308
|
+
end
|
309
|
+
|
310
|
+
# Answers if t is a puppet type
|
311
|
+
# @api public
|
312
|
+
#
|
313
|
+
def is_ptype?(t)
|
314
|
+
t.is_a?(PAnyType)
|
315
|
+
end
|
316
|
+
|
317
|
+
# Answers if t represents the puppet type PUndefType
|
318
|
+
# @api public
|
319
|
+
#
|
320
|
+
def is_pnil?(t)
|
321
|
+
t.nil? || t.is_a?(PUndefType)
|
322
|
+
end
|
323
|
+
|
324
|
+
# Answers, 'What is the common type of t1 and t2?'
|
325
|
+
#
|
326
|
+
# TODO: The current implementation should be optimized for performance
|
327
|
+
#
|
328
|
+
# @api public
|
329
|
+
#
|
330
|
+
def common_type(t1, t2)
|
331
|
+
raise ArgumentError, 'two types expected' unless (is_ptype?(t1) || is_pnil?(t1)) && (is_ptype?(t2) || is_pnil?(t2))
|
332
|
+
|
333
|
+
# TODO: This is not right since Scalar U Undef is Any
|
334
|
+
# if either is nil, the common type is the other
|
335
|
+
if is_pnil?(t1)
|
336
|
+
return t2
|
337
|
+
elsif is_pnil?(t2)
|
338
|
+
return t1
|
339
|
+
end
|
340
|
+
|
341
|
+
# If either side is Unit, it is the other type
|
342
|
+
if t1.is_a?(PUnitType)
|
343
|
+
return t2
|
344
|
+
elsif t2.is_a?(PUnitType)
|
345
|
+
return t1
|
346
|
+
end
|
347
|
+
|
348
|
+
# Simple case, one is assignable to the other
|
349
|
+
if assignable?(t1, t2)
|
350
|
+
return t1
|
351
|
+
elsif assignable?(t2, t1)
|
352
|
+
return t2
|
353
|
+
end
|
354
|
+
|
355
|
+
# when both are arrays, return an array with common element type
|
356
|
+
if t1.is_a?(PArrayType) && t2.is_a?(PArrayType)
|
357
|
+
return PArrayType.new(common_type(t1.element_type, t2.element_type))
|
358
|
+
end
|
359
|
+
|
360
|
+
# when both are hashes, return a hash with common key- and element type
|
361
|
+
if t1.is_a?(PHashType) && t2.is_a?(PHashType)
|
362
|
+
key_type = common_type(t1.key_type, t2.key_type)
|
363
|
+
value_type = common_type(t1.value_type, t2.value_type)
|
364
|
+
return PHashType.new(key_type, value_type)
|
365
|
+
end
|
366
|
+
|
367
|
+
# when both are host-classes, reduce to PHostClass[] (since one was not assignable to the other)
|
368
|
+
if t1.is_a?(PClassType) && t2.is_a?(PClassType)
|
369
|
+
return PClassType::DEFAULT
|
370
|
+
end
|
371
|
+
|
372
|
+
# when both are resources, reduce to Resource[T] or Resource[] (since one was not assignable to the other)
|
373
|
+
if t1.is_a?(PResourceType) && t2.is_a?(PResourceType)
|
374
|
+
# only Resource[] unless the type name is the same
|
375
|
+
return t1.type_name == t2.type_name ? PResourceType.new(t1.type_name, nil) : PResourceType::DEFAULT
|
376
|
+
end
|
377
|
+
|
378
|
+
# Integers have range, expand the range to the common range
|
379
|
+
if t1.is_a?(PIntegerType) && t2.is_a?(PIntegerType)
|
380
|
+
return PIntegerType.new([t1.numeric_from, t2.numeric_from].min, [t1.numeric_to, t2.numeric_to].max)
|
381
|
+
end
|
382
|
+
|
383
|
+
# Floats have range, expand the range to the common range
|
384
|
+
if t1.is_a?(PFloatType) && t2.is_a?(PFloatType)
|
385
|
+
return PFloatType.new([t1.numeric_from, t2.numeric_from].min, [t1.numeric_to, t2.numeric_to].max)
|
386
|
+
end
|
387
|
+
|
388
|
+
if t1.is_a?(PStringType) && (t2.is_a?(PStringType) || t2.is_a?(PEnumType))
|
389
|
+
if t2.is_a?(PEnumType)
|
390
|
+
return t1.value.nil? ? PEnumType::DEFAULT : PEnumType.new(t2.values | [t1.value])
|
391
|
+
end
|
392
|
+
|
393
|
+
if t1.size_type.nil? || t2.size_type.nil?
|
394
|
+
return t1.value.nil? || t2.value.nil? ? PStringType::DEFAULT : PEnumType.new([t1.value, t2.value])
|
395
|
+
end
|
396
|
+
|
397
|
+
return PStringType.new(common_type(t1.size_type, t2.size_type))
|
398
|
+
end
|
399
|
+
|
400
|
+
if t1.is_a?(PPatternType) && t2.is_a?(PPatternType)
|
401
|
+
return PPatternType.new(t1.patterns | t2.patterns)
|
402
|
+
end
|
403
|
+
|
404
|
+
if t1.is_a?(PEnumType) && (t2.is_a?(PStringType) || t2.is_a?(PEnumType))
|
405
|
+
# The common type is one that complies with either set
|
406
|
+
if t2.is_a?(PEnumType)
|
407
|
+
return PEnumType.new(t1.values | t2.values)
|
408
|
+
end
|
409
|
+
|
410
|
+
return t2.value.nil? ? PEnumType::DEFAULT : PEnumType.new(t1.values | [t2.value])
|
411
|
+
end
|
412
|
+
|
413
|
+
if t1.is_a?(PVariantType) && t2.is_a?(PVariantType)
|
414
|
+
# The common type is one that complies with either set
|
415
|
+
return PVariantType.maybe_create(t1.types | t2.types)
|
416
|
+
end
|
417
|
+
|
418
|
+
if t1.is_a?(PRegexpType) && t2.is_a?(PRegexpType)
|
419
|
+
# if they were identical, the general rule would return a parameterized regexp
|
420
|
+
# since they were not, the result is a generic regexp type
|
421
|
+
return PRegexpType::DEFAULT
|
422
|
+
end
|
423
|
+
|
424
|
+
if t1.is_a?(PCallableType) && t2.is_a?(PCallableType)
|
425
|
+
# They do not have the same signature, and one is not assignable to the other,
|
426
|
+
# what remains is the most general form of Callable
|
427
|
+
return PCallableType::DEFAULT
|
428
|
+
end
|
429
|
+
|
430
|
+
# Common abstract types, from most specific to most general
|
431
|
+
if common_numeric?(t1, t2)
|
432
|
+
return PNumericType::DEFAULT
|
433
|
+
end
|
434
|
+
|
435
|
+
if common_scalar_data?(t1, t2)
|
436
|
+
return PScalarDataType::DEFAULT
|
437
|
+
end
|
438
|
+
|
439
|
+
if common_scalar?(t1, t2)
|
440
|
+
return PScalarType::DEFAULT
|
441
|
+
end
|
442
|
+
|
443
|
+
if common_data?(t1, t2)
|
444
|
+
return TypeFactory.data
|
445
|
+
end
|
446
|
+
|
447
|
+
# Meta types Type[Integer] + Type[String] => Type[Data]
|
448
|
+
if t1.is_a?(PTypeType) && t2.is_a?(PTypeType)
|
449
|
+
return PTypeType.new(common_type(t1.type, t2.type))
|
450
|
+
end
|
451
|
+
|
452
|
+
if common_rich_data?(t1, t2)
|
453
|
+
return TypeFactory.rich_data
|
454
|
+
end
|
455
|
+
|
456
|
+
# If both are Runtime types
|
457
|
+
if t1.is_a?(PRuntimeType) && t2.is_a?(PRuntimeType)
|
458
|
+
if t1.runtime == t2.runtime && t1.runtime_type_name == t2.runtime_type_name
|
459
|
+
return t1
|
460
|
+
end
|
461
|
+
|
462
|
+
# finding the common super class requires that names are resolved to class
|
463
|
+
# NOTE: This only supports runtime type of :ruby
|
464
|
+
c1 = ClassLoader.provide_from_type(t1)
|
465
|
+
c2 = ClassLoader.provide_from_type(t2)
|
466
|
+
if c1 && c2
|
467
|
+
c2_superclasses = superclasses(c2)
|
468
|
+
superclasses(c1).each do |c1_super|
|
469
|
+
c2_superclasses.each do |c2_super|
|
470
|
+
if c1_super == c2_super
|
471
|
+
return PRuntimeType.new(:ruby, c1_super.name)
|
472
|
+
end
|
473
|
+
end
|
474
|
+
end
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
478
|
+
# They better both be Any type, or the wrong thing was asked and nil is returned
|
479
|
+
t1.is_a?(PAnyType) && t2.is_a?(PAnyType) ? PAnyType::DEFAULT : nil
|
480
|
+
end
|
481
|
+
|
482
|
+
# Produces the superclasses of the given class, including the class
|
483
|
+
def superclasses(c)
|
484
|
+
result = [c]
|
485
|
+
while s = c.superclass # rubocop:disable Lint/AssignmentInCondition
|
486
|
+
result << s
|
487
|
+
c = s
|
488
|
+
end
|
489
|
+
result
|
490
|
+
end
|
491
|
+
|
492
|
+
# Reduces an enumerable of types to a single common type.
|
493
|
+
# @api public
|
494
|
+
#
|
495
|
+
def reduce_type(enumerable)
|
496
|
+
enumerable.reduce(nil) { |memo, t| common_type(memo, t) }
|
497
|
+
end
|
498
|
+
|
499
|
+
# Reduce an enumerable of objects to a single common type
|
500
|
+
# @api public
|
501
|
+
#
|
502
|
+
def infer_and_reduce_type(enumerable)
|
503
|
+
reduce_type(enumerable.map { |o| infer(o) })
|
504
|
+
end
|
505
|
+
|
506
|
+
# The type of all modules is PTypeType
|
507
|
+
# @api private
|
508
|
+
#
|
509
|
+
def infer_Module(o)
|
510
|
+
PTypeType.new(PRuntimeType.new(:ruby, o.name))
|
511
|
+
end
|
512
|
+
|
513
|
+
# @api private
|
514
|
+
def infer_Closure(o)
|
515
|
+
o.type
|
516
|
+
end
|
517
|
+
|
518
|
+
# @api private
|
519
|
+
def infer_Iterator(o)
|
520
|
+
PIteratorType.new(o.element_type)
|
521
|
+
end
|
522
|
+
|
523
|
+
# @api private
|
524
|
+
def infer_Function(o)
|
525
|
+
o.class.dispatcher.to_type
|
526
|
+
end
|
527
|
+
|
528
|
+
# @api private
|
529
|
+
def infer_Object(o)
|
530
|
+
if o.is_a?(PuppetObject)
|
531
|
+
o._pcore_type
|
532
|
+
else
|
533
|
+
name = o.class.name
|
534
|
+
return PRuntimeType.new(:ruby, nil) if name.nil? # anonymous class that doesn't implement PuppetObject is impossible to infer
|
535
|
+
|
536
|
+
ir = Loaders.implementation_registry
|
537
|
+
type = ir.nil? ? nil : ir.type_for_module(name)
|
538
|
+
return PRuntimeType.new(:ruby, name) if type.nil?
|
539
|
+
|
540
|
+
if type.is_a?(PObjectType) && type.parameterized?
|
541
|
+
type = PObjectTypeExtension.create_from_instance(type, o)
|
542
|
+
end
|
543
|
+
type
|
544
|
+
end
|
545
|
+
end
|
546
|
+
|
547
|
+
# The type of all types is PTypeType
|
548
|
+
# @api private
|
549
|
+
#
|
550
|
+
def infer_PAnyType(o)
|
551
|
+
PTypeType.new(o)
|
552
|
+
end
|
553
|
+
|
554
|
+
# The type of all types is PTypeType
|
555
|
+
# This is the metatype short circuit.
|
556
|
+
# @api private
|
557
|
+
#
|
558
|
+
def infer_PTypeType(o)
|
559
|
+
PTypeType.new(o)
|
560
|
+
end
|
561
|
+
|
562
|
+
# @api private
|
563
|
+
def infer_String(o)
|
564
|
+
PStringType.new(o)
|
565
|
+
end
|
566
|
+
|
567
|
+
# @api private
|
568
|
+
def infer_Float(o)
|
569
|
+
PFloatType.new(o, o)
|
570
|
+
end
|
571
|
+
|
572
|
+
# @api private
|
573
|
+
def infer_Integer(o)
|
574
|
+
PIntegerType.new(o, o)
|
575
|
+
end
|
576
|
+
|
577
|
+
# @api private
|
578
|
+
def infer_Regexp(o)
|
579
|
+
PRegexpType.new(o)
|
580
|
+
end
|
581
|
+
|
582
|
+
# @api private
|
583
|
+
def infer_NilClass(o)
|
584
|
+
PUndefType::DEFAULT
|
585
|
+
end
|
586
|
+
|
587
|
+
# @api private
|
588
|
+
# @param o [Proc]
|
589
|
+
def infer_Proc(o)
|
590
|
+
min = 0
|
591
|
+
max = 0
|
592
|
+
mapped_types = o.parameters.map do |p|
|
593
|
+
case p[0]
|
594
|
+
when :rest
|
595
|
+
max = :default
|
596
|
+
break PAnyType::DEFAULT
|
597
|
+
when :req
|
598
|
+
min += 1
|
599
|
+
end
|
600
|
+
max += 1
|
601
|
+
PAnyType::DEFAULT
|
602
|
+
end
|
603
|
+
param_types = Types::PTupleType.new(mapped_types, Types::PIntegerType.new(min, max))
|
604
|
+
Types::PCallableType.new(param_types)
|
605
|
+
end
|
606
|
+
|
607
|
+
# @api private
|
608
|
+
def infer_PuppetProc(o)
|
609
|
+
infer_Closure(o.closure)
|
610
|
+
end
|
611
|
+
|
612
|
+
# Inference of :default as PDefaultType, and all other are Ruby[Symbol]
|
613
|
+
# @api private
|
614
|
+
def infer_Symbol(o)
|
615
|
+
case o
|
616
|
+
when :default
|
617
|
+
PDefaultType::DEFAULT
|
618
|
+
when :undef
|
619
|
+
PUndefType::DEFAULT
|
620
|
+
else
|
621
|
+
infer_Object(o)
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
# @api private
|
626
|
+
def infer_Sensitive(o)
|
627
|
+
PSensitiveType.new(infer(o.unwrap))
|
628
|
+
end
|
629
|
+
|
630
|
+
# @api private
|
631
|
+
def infer_Timespan(o)
|
632
|
+
PTimespanType.new(o, o)
|
633
|
+
end
|
634
|
+
|
635
|
+
# @api private
|
636
|
+
def infer_Timestamp(o)
|
637
|
+
PTimestampType.new(o, o)
|
638
|
+
end
|
639
|
+
|
640
|
+
# @api private
|
641
|
+
def infer_TrueClass(o)
|
642
|
+
PBooleanType::TRUE
|
643
|
+
end
|
644
|
+
|
645
|
+
# @api private
|
646
|
+
def infer_FalseClass(o)
|
647
|
+
PBooleanType::FALSE
|
648
|
+
end
|
649
|
+
|
650
|
+
# @api private
|
651
|
+
def infer_URI(o)
|
652
|
+
PURIType.new(o)
|
653
|
+
end
|
654
|
+
|
655
|
+
# @api private
|
656
|
+
# A Puppet::Parser::Resource, or Puppet::Resource
|
657
|
+
#
|
658
|
+
def infer_Resource(o)
|
659
|
+
# Only Puppet::Resource can have a title that is a symbol :undef, a PResource cannot.
|
660
|
+
# A mapping must be made to empty string. A nil value will result in an error later
|
661
|
+
title = o.title
|
662
|
+
title = '' if :undef == title
|
663
|
+
PTypeType.new(PResourceType.new(o.type.to_s, title))
|
664
|
+
end
|
665
|
+
|
666
|
+
# @api private
|
667
|
+
def infer_Array(o)
|
668
|
+
if o.instance_of?(Array)
|
669
|
+
if o.empty?
|
670
|
+
PArrayType::EMPTY
|
671
|
+
else
|
672
|
+
PArrayType.new(infer_and_reduce_type(o), size_as_type(o))
|
673
|
+
end
|
674
|
+
else
|
675
|
+
infer_Object(o)
|
676
|
+
end
|
677
|
+
end
|
678
|
+
|
679
|
+
# @api private
|
680
|
+
def infer_Binary(o)
|
681
|
+
PBinaryType::DEFAULT
|
682
|
+
end
|
683
|
+
|
684
|
+
# @api private
|
685
|
+
def infer_Version(o)
|
686
|
+
PSemVerType::DEFAULT
|
687
|
+
end
|
688
|
+
|
689
|
+
# @api private
|
690
|
+
def infer_VersionRange(o)
|
691
|
+
PSemVerRangeType::DEFAULT
|
692
|
+
end
|
693
|
+
|
694
|
+
# @api private
|
695
|
+
def infer_Hash(o)
|
696
|
+
if o.instance_of?(Hash)
|
697
|
+
if o.empty?
|
698
|
+
PHashType::EMPTY
|
699
|
+
else
|
700
|
+
ktype = infer_and_reduce_type(o.keys)
|
701
|
+
etype = infer_and_reduce_type(o.values)
|
702
|
+
PHashType.new(ktype, etype, size_as_type(o))
|
703
|
+
end
|
704
|
+
else
|
705
|
+
infer_Object(o)
|
706
|
+
end
|
707
|
+
end
|
708
|
+
|
709
|
+
def size_as_type(collection)
|
710
|
+
size = collection.size
|
711
|
+
PIntegerType.new(size, size)
|
712
|
+
end
|
713
|
+
|
714
|
+
# Common case for everything that intrinsically only has a single type
|
715
|
+
def infer_set_Object(o)
|
716
|
+
infer(o)
|
717
|
+
end
|
718
|
+
|
719
|
+
def infer_set_Array(o)
|
720
|
+
if o.empty?
|
721
|
+
PArrayType::EMPTY
|
722
|
+
else
|
723
|
+
PTupleType.new(o.map { |x| infer_set(x) })
|
724
|
+
end
|
725
|
+
end
|
726
|
+
|
727
|
+
def infer_set_Hash(o)
|
728
|
+
if o.empty?
|
729
|
+
PHashType::EMPTY
|
730
|
+
elsif o.keys.all? { |k| PStringType::NON_EMPTY.instance?(k) }
|
731
|
+
PStructType.new(o.each_pair.map { |k, v| PStructElement.new(PStringType.new(k), infer_set(v)) })
|
732
|
+
else
|
733
|
+
ktype = PVariantType.maybe_create(o.keys.map { |k| infer_set(k) })
|
734
|
+
etype = PVariantType.maybe_create(o.values.map { |e| infer_set(e) })
|
735
|
+
PHashType.new(unwrap_single_variant(ktype), unwrap_single_variant(etype), size_as_type(o))
|
736
|
+
end
|
737
|
+
end
|
738
|
+
|
739
|
+
# @api private
|
740
|
+
def infer_set_Version(o)
|
741
|
+
PSemVerType.new([SemanticPuppet::VersionRange.new(o, o)])
|
742
|
+
end
|
743
|
+
|
744
|
+
def unwrap_single_variant(possible_variant)
|
745
|
+
if possible_variant.is_a?(PVariantType) && possible_variant.types.size == 1
|
746
|
+
possible_variant.types[0]
|
747
|
+
else
|
748
|
+
possible_variant
|
749
|
+
end
|
750
|
+
end
|
751
|
+
|
752
|
+
# Transform int range to a size constraint
|
753
|
+
# if range == nil the constraint is 1,1
|
754
|
+
# if range.from == nil min size = 1
|
755
|
+
# if range.to == nil max size == Infinity
|
756
|
+
#
|
757
|
+
def size_range(range)
|
758
|
+
return [1, 1] if range.nil?
|
759
|
+
|
760
|
+
from = range.from
|
761
|
+
to = range.to
|
762
|
+
x = from.nil? ? 1 : from
|
763
|
+
y = to.nil? ? TheInfinity : to
|
764
|
+
[x, y]
|
765
|
+
end
|
766
|
+
|
767
|
+
# @api private
|
768
|
+
def self.is_kind_of_callable?(t, optional = true)
|
769
|
+
t.is_a?(PAnyType) && t.kind_of_callable?(optional)
|
770
|
+
end
|
771
|
+
|
772
|
+
def max(a, b)
|
773
|
+
a >= b ? a : b
|
774
|
+
end
|
775
|
+
|
776
|
+
def min(a, b)
|
777
|
+
a <= b ? a : b
|
778
|
+
end
|
779
|
+
|
780
|
+
# Produces the tuple entry at the given index given a tuple type, its from/to constraints on the last
|
781
|
+
# type, and an index.
|
782
|
+
# Produces nil if the index is out of bounds
|
783
|
+
# from must be less than to, and from may not be less than 0
|
784
|
+
#
|
785
|
+
# @api private
|
786
|
+
#
|
787
|
+
def tuple_entry_at(tuple_t, from, to, index)
|
788
|
+
regular = (tuple_t.types.size - 1)
|
789
|
+
if index < regular
|
790
|
+
tuple_t.types[index]
|
791
|
+
elsif index < regular + to
|
792
|
+
# in the varargs part
|
793
|
+
tuple_t.types[-1]
|
794
|
+
else
|
795
|
+
nil
|
796
|
+
end
|
797
|
+
end
|
798
|
+
|
799
|
+
# Debugging to_s to reduce the amount of output
|
800
|
+
def to_s
|
801
|
+
'[a TypeCalculator]'
|
802
|
+
end
|
803
|
+
|
804
|
+
private
|
805
|
+
|
806
|
+
def common_rich_data?(t1, t2)
|
807
|
+
d = TypeFactory.rich_data
|
808
|
+
d.assignable?(t1) && d.assignable?(t2)
|
809
|
+
end
|
810
|
+
|
811
|
+
def common_data?(t1, t2)
|
812
|
+
d = TypeFactory.data
|
813
|
+
d.assignable?(t1) && d.assignable?(t2)
|
814
|
+
end
|
815
|
+
|
816
|
+
def common_scalar_data?(t1, t2)
|
817
|
+
PScalarDataType::DEFAULT.assignable?(t1) && PScalarDataType::DEFAULT.assignable?(t2)
|
818
|
+
end
|
819
|
+
|
820
|
+
def common_scalar?(t1, t2)
|
821
|
+
PScalarType::DEFAULT.assignable?(t1) && PScalarType::DEFAULT.assignable?(t2)
|
822
|
+
end
|
823
|
+
|
824
|
+
def common_numeric?(t1, t2)
|
825
|
+
PNumericType::DEFAULT.assignable?(t1) && PNumericType::DEFAULT.assignable?(t2)
|
826
|
+
end
|
827
|
+
end
|
828
|
+
end
|
829
|
+
end
|