openvox 7.37.1
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 +15 -0
- data/CODEOWNERS +11 -0
- data/CODE_OF_CONDUCT.md +70 -0
- data/CONTRIBUTING.md +161 -0
- data/Gemfile +82 -0
- data/Guardfile.example +76 -0
- data/LICENSE +202 -0
- data/README.md +68 -0
- data/Rakefile +160 -0
- data/bin/puppet +9 -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 +91 -0
- data/examples/hiera/etc/hiera.yaml +15 -0
- data/examples/hiera/etc/hieradb/common.yaml +3 -0
- data/examples/hiera/etc/hieradb/dc1.yaml +6 -0
- data/examples/hiera/etc/hieradb/development.yaml +2 -0
- data/examples/hiera/etc/puppet.conf +3 -0
- data/examples/hiera/modules/data/manifests/common.pp +4 -0
- data/examples/hiera/modules/ntp/manifests/config.pp +6 -0
- data/examples/hiera/modules/ntp/manifests/data.pp +4 -0
- data/examples/hiera/modules/ntp/templates/ntp.conf.erb +3 -0
- data/examples/hiera/modules/users/manifests/common.pp +4 -0
- data/examples/hiera/modules/users/manifests/dc1.pp +4 -0
- data/examples/hiera/modules/users/manifests/development.pp +4 -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 +225 -0
- data/install.rb +499 -0
- data/lib/hiera/puppet_function.rb +84 -0
- data/lib/hiera/scope.rb +90 -0
- data/lib/hiera_puppet.rb +80 -0
- data/lib/puppet/agent/disabler.rb +53 -0
- data/lib/puppet/agent/locker.rb +46 -0
- data/lib/puppet/agent.rb +176 -0
- data/lib/puppet/application/agent.rb +523 -0
- data/lib/puppet/application/apply.rb +428 -0
- data/lib/puppet/application/catalog.rb +4 -0
- data/lib/puppet/application/config.rb +5 -0
- data/lib/puppet/application/describe.rb +253 -0
- data/lib/puppet/application/device.rb +439 -0
- data/lib/puppet/application/doc.rb +233 -0
- data/lib/puppet/application/epp.rb +5 -0
- data/lib/puppet/application/face_base.rb +276 -0
- data/lib/puppet/application/facts.rb +9 -0
- data/lib/puppet/application/filebucket.rb +318 -0
- data/lib/puppet/application/generate.rb +5 -0
- data/lib/puppet/application/help.rb +5 -0
- data/lib/puppet/application/indirection_base.rb +4 -0
- data/lib/puppet/application/lookup.rb +433 -0
- data/lib/puppet/application/module.rb +4 -0
- data/lib/puppet/application/node.rb +4 -0
- data/lib/puppet/application/parser.rb +5 -0
- data/lib/puppet/application/plugin.rb +4 -0
- data/lib/puppet/application/report.rb +4 -0
- data/lib/puppet/application/resource.rb +254 -0
- data/lib/puppet/application/script.rb +264 -0
- data/lib/puppet/application/ssl.rb +323 -0
- data/lib/puppet/application.rb +596 -0
- data/lib/puppet/application_support.rb +68 -0
- data/lib/puppet/coercion.rb +40 -0
- data/lib/puppet/compilable_resource_type.rb +15 -0
- data/lib/puppet/concurrent/lock.rb +16 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +17 -0
- data/lib/puppet/concurrent.rb +2 -0
- data/lib/puppet/configurer/downloader.rb +85 -0
- data/lib/puppet/configurer/fact_handler.rb +50 -0
- data/lib/puppet/configurer/plugin_handler.rb +59 -0
- data/lib/puppet/configurer.rb +755 -0
- data/lib/puppet/confine/any.rb +26 -0
- data/lib/puppet/confine/boolean.rb +45 -0
- data/lib/puppet/confine/exists.rb +19 -0
- data/lib/puppet/confine/false.rb +25 -0
- data/lib/puppet/confine/feature.rb +17 -0
- data/lib/puppet/confine/true.rb +26 -0
- data/lib/puppet/confine/variable.rb +59 -0
- data/lib/puppet/confine.rb +83 -0
- data/lib/puppet/confine_collection.rb +51 -0
- data/lib/puppet/confiner.rb +46 -0
- data/lib/puppet/context/trusted_information.rb +120 -0
- data/lib/puppet/context.rb +188 -0
- data/lib/puppet/daemon.rb +182 -0
- data/lib/puppet/data_binding.rb +14 -0
- data/lib/puppet/datatypes/error.rb +21 -0
- data/lib/puppet/datatypes/impl/error.rb +40 -0
- data/lib/puppet/datatypes.rb +213 -0
- data/lib/puppet/defaults.rb +2277 -0
- data/lib/puppet/environments.rb +601 -0
- data/lib/puppet/error.rb +138 -0
- data/lib/puppet/etc.rb +180 -0
- data/lib/puppet/external/dot.rb +325 -0
- data/lib/puppet/external/pson/common.rb +374 -0
- data/lib/puppet/external/pson/pure/generator.rb +395 -0
- data/lib/puppet/external/pson/pure/parser.rb +308 -0
- data/lib/puppet/external/pson/pure.rb +15 -0
- data/lib/puppet/external/pson/version.rb +8 -0
- data/lib/puppet/face/catalog/select.rb +49 -0
- data/lib/puppet/face/catalog.rb +165 -0
- data/lib/puppet/face/config.rb +267 -0
- data/lib/puppet/face/epp.rb +566 -0
- data/lib/puppet/face/facts.rb +174 -0
- data/lib/puppet/face/generate.rb +66 -0
- data/lib/puppet/face/help/action.erb +90 -0
- data/lib/puppet/face/help/face.erb +115 -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 +242 -0
- data/lib/puppet/face/module/changes.rb +43 -0
- data/lib/puppet/face/module/install.rb +146 -0
- data/lib/puppet/face/module/list.rb +272 -0
- data/lib/puppet/face/module/uninstall.rb +89 -0
- data/lib/puppet/face/module/upgrade.rb +87 -0
- data/lib/puppet/face/module.rb +19 -0
- data/lib/puppet/face/node/clean.rb +107 -0
- data/lib/puppet/face/node.rb +43 -0
- data/lib/puppet/face/parser.rb +227 -0
- data/lib/puppet/face/plugin.rb +60 -0
- data/lib/puppet/face/report.rb +54 -0
- data/lib/puppet/face/resource.rb +53 -0
- data/lib/puppet/face.rb +12 -0
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/feature/base.rb +76 -0
- data/lib/puppet/feature/bolt.rb +3 -0
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/eventlog.rb +5 -0
- data/lib/puppet/feature/hiera_eyaml.rb +3 -0
- data/lib/puppet/feature/hocon.rb +3 -0
- data/lib/puppet/feature/libuser.rb +8 -0
- data/lib/puppet/feature/msgpack.rb +3 -0
- data/lib/puppet/feature/pe_license.rb +4 -0
- data/lib/puppet/feature/selinux.rb +3 -0
- data/lib/puppet/feature/ssh.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/feature/zlib.rb +5 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/windows/api_types.rb +311 -0
- data/lib/puppet/ffi/windows/constants.rb +404 -0
- data/lib/puppet/ffi/windows/functions.rb +628 -0
- data/lib/puppet/ffi/windows/structs.rb +338 -0
- data/lib/puppet/ffi/windows.rb +12 -0
- data/lib/puppet/file_bucket/dipper.rb +174 -0
- data/lib/puppet/file_bucket/file.rb +129 -0
- data/lib/puppet/file_bucket.rb +4 -0
- data/lib/puppet/file_serving/base.rb +86 -0
- data/lib/puppet/file_serving/configuration/parser.rb +113 -0
- data/lib/puppet/file_serving/configuration.rb +113 -0
- data/lib/puppet/file_serving/content.rb +43 -0
- data/lib/puppet/file_serving/fileset.rb +186 -0
- data/lib/puppet/file_serving/http_metadata.rb +62 -0
- data/lib/puppet/file_serving/metadata.rb +171 -0
- data/lib/puppet/file_serving/mount/file.rb +122 -0
- data/lib/puppet/file_serving/mount/locales.rb +35 -0
- data/lib/puppet/file_serving/mount/modules.rb +26 -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 +24 -0
- data/lib/puppet/file_serving/mount/tasks.rb +23 -0
- data/lib/puppet/file_serving/mount.rb +38 -0
- data/lib/puppet/file_serving/terminus_helper.rb +31 -0
- data/lib/puppet/file_serving/terminus_selector.rb +31 -0
- data/lib/puppet/file_serving.rb +3 -0
- data/lib/puppet/file_system/file_impl.rb +188 -0
- data/lib/puppet/file_system/jruby.rb +23 -0
- data/lib/puppet/file_system/memory_file.rb +79 -0
- data/lib/puppet/file_system/memory_impl.rb +99 -0
- data/lib/puppet/file_system/path_pattern.rb +93 -0
- data/lib/puppet/file_system/posix.rb +47 -0
- data/lib/puppet/file_system/uniquefile.rb +188 -0
- data/lib/puppet/file_system/windows.rb +213 -0
- data/lib/puppet/file_system.rb +419 -0
- data/lib/puppet/forge/cache.rb +60 -0
- data/lib/puppet/forge/errors.rb +114 -0
- data/lib/puppet/forge/repository.rb +95 -0
- data/lib/puppet/forge.rb +259 -0
- data/lib/puppet/functions/abs.rb +61 -0
- data/lib/puppet/functions/alert.rb +14 -0
- data/lib/puppet/functions/all.rb +104 -0
- data/lib/puppet/functions/annotate.rb +108 -0
- data/lib/puppet/functions/any.rb +109 -0
- data/lib/puppet/functions/assert_type.rb +93 -0
- data/lib/puppet/functions/binary_file.rb +32 -0
- data/lib/puppet/functions/break.rb +47 -0
- data/lib/puppet/functions/call.rb +80 -0
- data/lib/puppet/functions/camelcase.rb +62 -0
- data/lib/puppet/functions/capitalize.rb +61 -0
- data/lib/puppet/functions/ceiling.rb +37 -0
- data/lib/puppet/functions/chomp.rb +57 -0
- data/lib/puppet/functions/chop.rb +67 -0
- data/lib/puppet/functions/compare.rb +125 -0
- data/lib/puppet/functions/contain.rb +55 -0
- data/lib/puppet/functions/convert_to.rb +34 -0
- data/lib/puppet/functions/crit.rb +14 -0
- data/lib/puppet/functions/debug.rb +14 -0
- data/lib/puppet/functions/defined.rb +159 -0
- data/lib/puppet/functions/dig.rb +67 -0
- data/lib/puppet/functions/downcase.rb +89 -0
- data/lib/puppet/functions/each.rb +167 -0
- data/lib/puppet/functions/emerg.rb +14 -0
- data/lib/puppet/functions/empty.rb +85 -0
- data/lib/puppet/functions/epp.rb +49 -0
- data/lib/puppet/functions/err.rb +14 -0
- data/lib/puppet/functions/eyaml_lookup_key.rb +102 -0
- data/lib/puppet/functions/filter.rb +137 -0
- data/lib/puppet/functions/find_file.rb +44 -0
- data/lib/puppet/functions/find_template.rb +63 -0
- data/lib/puppet/functions/flatten.rb +64 -0
- data/lib/puppet/functions/floor.rb +37 -0
- data/lib/puppet/functions/get.rb +150 -0
- data/lib/puppet/functions/getvar.rb +87 -0
- data/lib/puppet/functions/group_by.rb +62 -0
- data/lib/puppet/functions/hiera.rb +89 -0
- data/lib/puppet/functions/hiera_array.rb +81 -0
- data/lib/puppet/functions/hiera_hash.rb +92 -0
- data/lib/puppet/functions/hiera_include.rb +104 -0
- data/lib/puppet/functions/hocon_data.rb +41 -0
- data/lib/puppet/functions/import.rb +7 -0
- data/lib/puppet/functions/include.rb +53 -0
- data/lib/puppet/functions/index.rb +167 -0
- data/lib/puppet/functions/info.rb +14 -0
- data/lib/puppet/functions/inline_epp.rb +60 -0
- data/lib/puppet/functions/join.rb +56 -0
- data/lib/puppet/functions/json_data.rb +33 -0
- data/lib/puppet/functions/keys.rb +25 -0
- data/lib/puppet/functions/length.rb +44 -0
- data/lib/puppet/functions/lest.rb +55 -0
- data/lib/puppet/functions/lookup.rb +224 -0
- data/lib/puppet/functions/lstrip.rb +58 -0
- data/lib/puppet/functions/map.rb +135 -0
- data/lib/puppet/functions/match.rb +130 -0
- data/lib/puppet/functions/max.rb +183 -0
- data/lib/puppet/functions/min.rb +182 -0
- data/lib/puppet/functions/module_directory.rb +41 -0
- data/lib/puppet/functions/new.rb +1011 -0
- data/lib/puppet/functions/next.rb +33 -0
- data/lib/puppet/functions/notice.rb +14 -0
- data/lib/puppet/functions/partition.rb +62 -0
- data/lib/puppet/functions/reduce.rb +162 -0
- data/lib/puppet/functions/regsubst.rb +101 -0
- data/lib/puppet/functions/require.rb +77 -0
- data/lib/puppet/functions/return.rb +15 -0
- data/lib/puppet/functions/reverse_each.rb +94 -0
- data/lib/puppet/functions/round.rb +24 -0
- data/lib/puppet/functions/rstrip.rb +58 -0
- data/lib/puppet/functions/scanf.rb +44 -0
- data/lib/puppet/functions/size.rb +15 -0
- data/lib/puppet/functions/slice.rb +124 -0
- data/lib/puppet/functions/sort.rb +74 -0
- data/lib/puppet/functions/split.rb +76 -0
- data/lib/puppet/functions/step.rb +98 -0
- data/lib/puppet/functions/strftime.rb +212 -0
- data/lib/puppet/functions/strip.rb +58 -0
- data/lib/puppet/functions/then.rb +77 -0
- data/lib/puppet/functions/tree_each.rb +197 -0
- data/lib/puppet/functions/type.rb +72 -0
- data/lib/puppet/functions/unique.rb +132 -0
- data/lib/puppet/functions/unwrap.rb +59 -0
- data/lib/puppet/functions/upcase.rb +89 -0
- data/lib/puppet/functions/values.rb +25 -0
- data/lib/puppet/functions/versioncmp.rb +40 -0
- data/lib/puppet/functions/warning.rb +14 -0
- data/lib/puppet/functions/with.rb +32 -0
- data/lib/puppet/functions/yaml_data.rb +45 -0
- data/lib/puppet/functions.rb +862 -0
- data/lib/puppet/generate/models/type/property.rb +70 -0
- data/lib/puppet/generate/models/type/type.rb +65 -0
- data/lib/puppet/generate/templates/type/pcore.erb +42 -0
- data/lib/puppet/generate/type.rb +249 -0
- data/lib/puppet/gettext/config.rb +275 -0
- data/lib/puppet/gettext/module_translations.rb +42 -0
- data/lib/puppet/gettext/stubs.rb +11 -0
- data/lib/puppet/graph/key.rb +26 -0
- data/lib/puppet/graph/prioritizer.rb +29 -0
- data/lib/puppet/graph/rb_tree_map.rb +388 -0
- data/lib/puppet/graph/relationship_graph.rb +284 -0
- data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
- data/lib/puppet/graph/simple_graph.rb +546 -0
- data/lib/puppet/graph.rb +9 -0
- data/lib/puppet/http/client.rb +525 -0
- data/lib/puppet/http/dns.rb +159 -0
- data/lib/puppet/http/errors.rb +48 -0
- data/lib/puppet/http/external_client.rb +88 -0
- data/lib/puppet/http/factory.rb +51 -0
- data/lib/puppet/http/pool.rb +172 -0
- data/lib/puppet/http/pool_entry.rb +17 -0
- data/lib/puppet/http/proxy.rb +137 -0
- data/lib/puppet/http/redirector.rb +85 -0
- data/lib/puppet/http/resolver/server_list.rb +87 -0
- data/lib/puppet/http/resolver/settings.rb +23 -0
- data/lib/puppet/http/resolver/srv.rb +41 -0
- data/lib/puppet/http/resolver.rb +48 -0
- data/lib/puppet/http/response.rb +102 -0
- data/lib/puppet/http/response_converter.rb +24 -0
- data/lib/puppet/http/response_net_http.rb +42 -0
- data/lib/puppet/http/retry_after_handler.rb +77 -0
- data/lib/puppet/http/service/ca.rb +101 -0
- data/lib/puppet/http/service/compiler.rb +353 -0
- data/lib/puppet/http/service/file_server.rb +198 -0
- data/lib/puppet/http/service/puppetserver.rb +53 -0
- data/lib/puppet/http/service/report.rb +64 -0
- data/lib/puppet/http/service.rb +182 -0
- data/lib/puppet/http/session.rb +122 -0
- data/lib/puppet/http/site.rb +42 -0
- data/lib/puppet/http.rb +46 -0
- data/lib/puppet/indirector/catalog/compiler.rb +431 -0
- data/lib/puppet/indirector/catalog/json.rb +40 -0
- data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
- data/lib/puppet/indirector/catalog/rest.rb +49 -0
- data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
- data/lib/puppet/indirector/catalog/yaml.rb +6 -0
- data/lib/puppet/indirector/code.rb +6 -0
- data/lib/puppet/indirector/data_binding/hiera.rb +7 -0
- data/lib/puppet/indirector/data_binding/none.rb +8 -0
- data/lib/puppet/indirector/direct_file_server.rb +17 -0
- data/lib/puppet/indirector/envelope.rb +11 -0
- data/lib/puppet/indirector/errors.rb +5 -0
- data/lib/puppet/indirector/exec.rb +38 -0
- data/lib/puppet/indirector/face.rb +153 -0
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +117 -0
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/memory.rb +9 -0
- data/lib/puppet/indirector/facts/network_device.rb +27 -0
- data/lib/puppet/indirector/facts/rest.rb +44 -0
- data/lib/puppet/indirector/facts/store_configs.rb +11 -0
- data/lib/puppet/indirector/facts/yaml.rb +29 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +262 -0
- data/lib/puppet/indirector/file_bucket_file/rest.rb +50 -0
- data/lib/puppet/indirector/file_bucket_file/selector.rb +53 -0
- data/lib/puppet/indirector/file_content/file.rb +7 -0
- data/lib/puppet/indirector/file_content/file_server.rb +7 -0
- data/lib/puppet/indirector/file_content/rest.rb +35 -0
- data/lib/puppet/indirector/file_content/selector.rb +30 -0
- data/lib/puppet/indirector/file_content.rb +5 -0
- data/lib/puppet/indirector/file_metadata/file.rb +7 -0
- data/lib/puppet/indirector/file_metadata/file_server.rb +7 -0
- data/lib/puppet/indirector/file_metadata/http.rb +47 -0
- data/lib/puppet/indirector/file_metadata/rest.rb +56 -0
- data/lib/puppet/indirector/file_metadata/selector.rb +30 -0
- data/lib/puppet/indirector/file_metadata.rb +5 -0
- data/lib/puppet/indirector/file_server.rb +54 -0
- data/lib/puppet/indirector/generic_http.rb +5 -0
- data/lib/puppet/indirector/hiera.rb +100 -0
- data/lib/puppet/indirector/indirection.rb +372 -0
- data/lib/puppet/indirector/json.rb +79 -0
- data/lib/puppet/indirector/memory.rb +34 -0
- data/lib/puppet/indirector/msgpack.rb +83 -0
- data/lib/puppet/indirector/node/exec.rb +70 -0
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/node/memory.rb +10 -0
- data/lib/puppet/indirector/node/msgpack.rb +7 -0
- data/lib/puppet/indirector/node/plain.rb +21 -0
- data/lib/puppet/indirector/node/rest.rb +29 -0
- data/lib/puppet/indirector/node/store_configs.rb +8 -0
- data/lib/puppet/indirector/node/yaml.rb +7 -0
- data/lib/puppet/indirector/none.rb +9 -0
- data/lib/puppet/indirector/plain.rb +9 -0
- data/lib/puppet/indirector/report/json.rb +34 -0
- data/lib/puppet/indirector/report/msgpack.rb +11 -0
- data/lib/puppet/indirector/report/processor.rb +60 -0
- data/lib/puppet/indirector/report/rest.rb +42 -0
- data/lib/puppet/indirector/report/yaml.rb +34 -0
- data/lib/puppet/indirector/request.rb +194 -0
- data/lib/puppet/indirector/resource/ral.rb +66 -0
- data/lib/puppet/indirector/resource/store_configs.rb +12 -0
- data/lib/puppet/indirector/resource/validator.rb +8 -0
- data/lib/puppet/indirector/rest.rb +64 -0
- data/lib/puppet/indirector/store_configs.rb +30 -0
- data/lib/puppet/indirector/terminus.rb +176 -0
- data/lib/puppet/indirector/yaml.rb +63 -0
- data/lib/puppet/indirector.rb +61 -0
- data/lib/puppet/info_service/class_information_service.rb +109 -0
- data/lib/puppet/info_service/plan_information_service.rb +36 -0
- data/lib/puppet/info_service/task_information_service.rb +44 -0
- data/lib/puppet/info_service.rb +26 -0
- data/lib/puppet/interface/action.rb +406 -0
- data/lib/puppet/interface/action_builder.rb +161 -0
- data/lib/puppet/interface/action_manager.rb +98 -0
- data/lib/puppet/interface/documentation.rb +357 -0
- data/lib/puppet/interface/face_collection.rb +137 -0
- data/lib/puppet/interface/option.rb +172 -0
- data/lib/puppet/interface/option_builder.rb +105 -0
- data/lib/puppet/interface/option_manager.rb +106 -0
- data/lib/puppet/interface.rb +239 -0
- data/lib/puppet/loaders.rb +30 -0
- data/lib/puppet/metatype/manager.rb +197 -0
- data/lib/puppet/module/plan.rb +159 -0
- data/lib/puppet/module/task.rb +283 -0
- data/lib/puppet/module.rb +475 -0
- data/lib/puppet/module_tool/applications/application.rb +91 -0
- data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
- data/lib/puppet/module_tool/applications/installer.rb +411 -0
- data/lib/puppet/module_tool/applications/uninstaller.rb +119 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +100 -0
- data/lib/puppet/module_tool/applications/upgrader.rb +282 -0
- data/lib/puppet/module_tool/applications.rb +12 -0
- data/lib/puppet/module_tool/checksums.rb +49 -0
- data/lib/puppet/module_tool/contents_description.rb +89 -0
- data/lib/puppet/module_tool/dependency.rb +41 -0
- data/lib/puppet/module_tool/errors/base.rb +15 -0
- data/lib/puppet/module_tool/errors/installer.rb +93 -0
- data/lib/puppet/module_tool/errors/shared.rb +227 -0
- data/lib/puppet/module_tool/errors/uninstaller.rb +50 -0
- data/lib/puppet/module_tool/errors/upgrader.rb +63 -0
- data/lib/puppet/module_tool/errors.rb +11 -0
- data/lib/puppet/module_tool/install_directory.rb +45 -0
- data/lib/puppet/module_tool/installed_modules.rb +96 -0
- data/lib/puppet/module_tool/local_tarball.rb +90 -0
- data/lib/puppet/module_tool/metadata.rb +221 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +181 -0
- data/lib/puppet/module_tool/tar/gnu.rb +19 -0
- data/lib/puppet/module_tool/tar/mini.rb +116 -0
- data/lib/puppet/module_tool/tar.rb +18 -0
- data/lib/puppet/module_tool.rb +194 -0
- data/lib/puppet/network/authconfig.rb +7 -0
- data/lib/puppet/network/authorization.rb +19 -0
- data/lib/puppet/network/client_request.rb +29 -0
- data/lib/puppet/network/format.rb +110 -0
- data/lib/puppet/network/format_handler.rb +108 -0
- data/lib/puppet/network/format_support.rb +139 -0
- data/lib/puppet/network/formats.rb +329 -0
- data/lib/puppet/network/http/api/indirected_routes.rb +277 -0
- data/lib/puppet/network/http/api/indirection_type.rb +32 -0
- data/lib/puppet/network/http/api/master/v3/environments.rb +3 -0
- data/lib/puppet/network/http/api/master/v3.rb +3 -0
- data/lib/puppet/network/http/api/master.rb +3 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
- data/lib/puppet/network/http/api/server/v3.rb +39 -0
- data/lib/puppet/network/http/api/server.rb +10 -0
- data/lib/puppet/network/http/api.rb +39 -0
- data/lib/puppet/network/http/connection.rb +286 -0
- data/lib/puppet/network/http/error.rb +73 -0
- data/lib/puppet/network/http/handler.rb +215 -0
- data/lib/puppet/network/http/issues.rb +12 -0
- data/lib/puppet/network/http/memory_response.rb +13 -0
- data/lib/puppet/network/http/request.rb +71 -0
- data/lib/puppet/network/http/response.rb +23 -0
- data/lib/puppet/network/http/route.rb +101 -0
- data/lib/puppet/network/http.rb +28 -0
- data/lib/puppet/network/http_pool.rb +77 -0
- data/lib/puppet/network/uri.rb +18 -0
- data/lib/puppet/network.rb +3 -0
- data/lib/puppet/node/environment.rb +635 -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 +108 -0
- data/lib/puppet/pal/compiler.rb +222 -0
- data/lib/puppet/pal/function_signature.rb +52 -0
- data/lib/puppet/pal/json_catalog_encoder.rb +71 -0
- data/lib/puppet/pal/pal_api.rb +15 -0
- data/lib/puppet/pal/pal_impl.rb +590 -0
- data/lib/puppet/pal/plan_signature.rb +71 -0
- data/lib/puppet/pal/script_compiler.rb +73 -0
- data/lib/puppet/pal/task_signature.rb +58 -0
- data/lib/puppet/parameter/boolean.rb +15 -0
- data/lib/puppet/parameter/package_options.rb +31 -0
- data/lib/puppet/parameter/path.rb +57 -0
- data/lib/puppet/parameter/value.rb +91 -0
- data/lib/puppet/parameter/value_collection.rb +212 -0
- data/lib/puppet/parameter.rb +589 -0
- data/lib/puppet/parser/abstract_compiler.rb +36 -0
- data/lib/puppet/parser/ast/block_expression.rb +15 -0
- data/lib/puppet/parser/ast/branch.rb +19 -0
- data/lib/puppet/parser/ast/hostclass.rb +27 -0
- data/lib/puppet/parser/ast/leaf.rb +81 -0
- data/lib/puppet/parser/ast/node.rb +17 -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 +10 -0
- data/lib/puppet/parser/ast/resourceparam.rb +31 -0
- data/lib/puppet/parser/ast/top_level_construct.rb +4 -0
- data/lib/puppet/parser/ast.rb +61 -0
- data/lib/puppet/parser/catalog_compiler.rb +56 -0
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +39 -0
- data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
- data/lib/puppet/parser/compiler.rb +615 -0
- data/lib/puppet/parser/e4_parser_adapter.rb +60 -0
- data/lib/puppet/parser/files.rb +93 -0
- data/lib/puppet/parser/functions/assert_type.rb +60 -0
- data/lib/puppet/parser/functions/binary_file.rb +24 -0
- data/lib/puppet/parser/functions/break.rb +39 -0
- data/lib/puppet/parser/functions/contain.rb +30 -0
- data/lib/puppet/parser/functions/create_resources.rb +110 -0
- data/lib/puppet/parser/functions/defined.rb +107 -0
- data/lib/puppet/parser/functions/dig.rb +38 -0
- data/lib/puppet/parser/functions/digest.rb +5 -0
- data/lib/puppet/parser/functions/each.rb +104 -0
- data/lib/puppet/parser/functions/epp.rb +39 -0
- data/lib/puppet/parser/functions/fail.rb +11 -0
- data/lib/puppet/parser/functions/file.rb +33 -0
- data/lib/puppet/parser/functions/filter.rb +79 -0
- data/lib/puppet/parser/functions/find_file.rb +28 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +44 -0
- data/lib/puppet/parser/functions/generate.rb +37 -0
- data/lib/puppet/parser/functions/hiera.rb +103 -0
- data/lib/puppet/parser/functions/hiera_array.rb +92 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +102 -0
- data/lib/puppet/parser/functions/hiera_include.rb +101 -0
- data/lib/puppet/parser/functions/include.rb +34 -0
- data/lib/puppet/parser/functions/inline_epp.rb +51 -0
- data/lib/puppet/parser/functions/inline_template.rb +26 -0
- data/lib/puppet/parser/functions/lest.rb +49 -0
- data/lib/puppet/parser/functions/lookup.rb +132 -0
- data/lib/puppet/parser/functions/map.rb +76 -0
- data/lib/puppet/parser/functions/match.rb +43 -0
- data/lib/puppet/parser/functions/md5.rb +5 -0
- data/lib/puppet/parser/functions/new.rb +991 -0
- data/lib/puppet/parser/functions/next.rb +38 -0
- data/lib/puppet/parser/functions/realize.rb +20 -0
- data/lib/puppet/parser/functions/reduce.rb +137 -0
- data/lib/puppet/parser/functions/regsubst.rb +62 -0
- data/lib/puppet/parser/functions/require.rb +40 -0
- data/lib/puppet/parser/functions/return.rb +92 -0
- data/lib/puppet/parser/functions/reverse_each.rb +83 -0
- data/lib/puppet/parser/functions/scanf.rb +38 -0
- data/lib/puppet/parser/functions/sha1.rb +5 -0
- data/lib/puppet/parser/functions/sha256.rb +5 -0
- data/lib/puppet/parser/functions/shellquote.rb +61 -0
- data/lib/puppet/parser/functions/slice.rb +39 -0
- data/lib/puppet/parser/functions/split.rb +28 -0
- data/lib/puppet/parser/functions/sprintf.rb +61 -0
- data/lib/puppet/parser/functions/step.rb +84 -0
- data/lib/puppet/parser/functions/strftime.rb +185 -0
- data/lib/puppet/parser/functions/tag.rb +12 -0
- data/lib/puppet/parser/functions/tagged.rb +21 -0
- data/lib/puppet/parser/functions/template.rb +39 -0
- data/lib/puppet/parser/functions/then.rb +73 -0
- data/lib/puppet/parser/functions/type.rb +53 -0
- data/lib/puppet/parser/functions/versioncmp.rb +30 -0
- data/lib/puppet/parser/functions/with.rb +28 -0
- data/lib/puppet/parser/functions.rb +321 -0
- data/lib/puppet/parser/parser_factory.rb +30 -0
- data/lib/puppet/parser/relationship.rb +84 -0
- data/lib/puppet/parser/resource/param.rb +35 -0
- data/lib/puppet/parser/resource.rb +351 -0
- data/lib/puppet/parser/scope.rb +1127 -0
- data/lib/puppet/parser/script_compiler.rb +123 -0
- data/lib/puppet/parser/templatewrapper.rb +104 -0
- data/lib/puppet/parser/type_loader.rb +150 -0
- data/lib/puppet/parser.rb +20 -0
- data/lib/puppet/plugins/configuration.rb +29 -0
- data/lib/puppet/plugins/syntax_checkers.rb +98 -0
- data/lib/puppet/plugins.rb +9 -0
- data/lib/puppet/pops/adaptable.rb +197 -0
- data/lib/puppet/pops/adapters.rb +156 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +719 -0
- data/lib/puppet/pops/evaluator/callable_signature.rb +107 -0
- data/lib/puppet/pops/evaluator/closure.rb +375 -0
- data/lib/puppet/pops/evaluator/collector_transformer.rb +234 -0
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +86 -0
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +29 -0
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +70 -0
- data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +254 -0
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +225 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +120 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +46 -0
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
- data/lib/puppet/pops/evaluator/puppet_proc.rb +69 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +185 -0
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +221 -0
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +535 -0
- data/lib/puppet/pops/functions/dispatch.rb +107 -0
- data/lib/puppet/pops/functions/dispatcher.rb +75 -0
- data/lib/puppet/pops/functions/function.rb +139 -0
- data/lib/puppet/pops/issue_reporter.rb +137 -0
- data/lib/puppet/pops/issues.rb +928 -0
- data/lib/puppet/pops/label_provider.rb +90 -0
- data/lib/puppet/pops/loader/base_loader.rb +178 -0
- data/lib/puppet/pops/loader/dependency_loader.rb +91 -0
- data/lib/puppet/pops/loader/gem_support.rb +51 -0
- data/lib/puppet/pops/loader/generic_plan_instantiator.rb +28 -0
- data/lib/puppet/pops/loader/loader.rb +221 -0
- data/lib/puppet/pops/loader/loader_paths.rb +412 -0
- data/lib/puppet/pops/loader/module_loaders.rb +556 -0
- data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +93 -0
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +39 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +45 -0
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +120 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +103 -0
- data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
- data/lib/puppet/pops/loader/static_loader.rb +131 -0
- data/lib/puppet/pops/loader/task_instantiator.rb +44 -0
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +100 -0
- data/lib/puppet/pops/loader/typed_name.rb +54 -0
- data/lib/puppet/pops/loader/uri_helper.rb +22 -0
- data/lib/puppet/pops/loaders.rb +546 -0
- data/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
- data/lib/puppet/pops/lookup/context.rb +199 -0
- data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
- data/lib/puppet/pops/lookup/data_provider.rb +92 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
- data/lib/puppet/pops/lookup/explainer.rb +595 -0
- data/lib/puppet/pops/lookup/function_provider.rb +110 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +775 -0
- data/lib/puppet/pops/lookup/interpolation.rb +155 -0
- data/lib/puppet/pops/lookup/invocation.rb +268 -0
- data/lib/puppet/pops/lookup/key_recorder.rb +18 -0
- data/lib/puppet/pops/lookup/location_resolver.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +528 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
- data/lib/puppet/pops/lookup.rb +97 -0
- data/lib/puppet/pops/merge_strategy.rb +441 -0
- data/lib/puppet/pops/migration/migration_checker.rb +58 -0
- data/lib/puppet/pops/model/ast.pp +669 -0
- data/lib/puppet/pops/model/ast.rb +4675 -0
- data/lib/puppet/pops/model/ast_transformer.rb +131 -0
- data/lib/puppet/pops/model/factory.rb +1155 -0
- data/lib/puppet/pops/model/model_label_provider.rb +134 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +445 -0
- data/lib/puppet/pops/model/pn_transformer.rb +385 -0
- data/lib/puppet/pops/model/tree_dumper.rb +59 -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 +51 -0
- data/lib/puppet/pops/parser/epp_support.rb +265 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +162 -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 +777 -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 +357 -0
- data/lib/puppet/pops/parser/parser_support.rb +251 -0
- data/lib/puppet/pops/parser/pn_parser.rb +317 -0
- data/lib/puppet/pops/parser/slurp_support.rb +118 -0
- data/lib/puppet/pops/patterns.rb +60 -0
- data/lib/puppet/pops/pcore.rb +135 -0
- data/lib/puppet/pops/pn.rb +236 -0
- data/lib/puppet/pops/puppet_stack.rb +61 -0
- data/lib/puppet/pops/resource/param.rb +55 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +294 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
- data/lib/puppet/pops/semantic_error.rb +29 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +180 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +222 -0
- data/lib/puppet/pops/serialization/deserializer.rb +80 -0
- data/lib/puppet/pops/serialization/extension.rb +158 -0
- data/lib/puppet/pops/serialization/from_data_converter.rb +224 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
- data/lib/puppet/pops/serialization/json.rb +297 -0
- data/lib/puppet/pops/serialization/json_path.rb +127 -0
- data/lib/puppet/pops/serialization/object.rb +70 -0
- data/lib/puppet/pops/serialization/serializer.rb +140 -0
- data/lib/puppet/pops/serialization/time_factory.rb +67 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +313 -0
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +226 -0
- data/lib/puppet/pops/serialization.rb +43 -0
- data/lib/puppet/pops/time/timespan.rb +716 -0
- data/lib/puppet/pops/time/timestamp.rb +160 -0
- data/lib/puppet/pops/types/annotatable.rb +36 -0
- data/lib/puppet/pops/types/annotation.rb +71 -0
- data/lib/puppet/pops/types/class_loader.rb +132 -0
- data/lib/puppet/pops/types/implementation_registry.rb +134 -0
- data/lib/puppet/pops/types/iterable.rb +365 -0
- data/lib/puppet/pops/types/p_binary_type.rb +232 -0
- data/lib/puppet/pops/types/p_init_type.rb +238 -0
- data/lib/puppet/pops/types/p_meta_type.rb +94 -0
- data/lib/puppet/pops/types/p_object_type.rb +1117 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +228 -0
- data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +190 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
- data/lib/puppet/pops/types/p_sensitive_type.rb +83 -0
- data/lib/puppet/pops/types/p_timespan_type.rb +192 -0
- data/lib/puppet/pops/types/p_timestamp_type.rb +73 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +387 -0
- data/lib/puppet/pops/types/p_uri_type.rb +190 -0
- data/lib/puppet/pops/types/puppet_object.rb +40 -0
- data/lib/puppet/pops/types/recursion_guard.rb +136 -0
- data/lib/puppet/pops/types/ruby_generator.rb +472 -0
- data/lib/puppet/pops/types/ruby_method.rb +31 -0
- data/lib/puppet/pops/types/string_converter.rb +1134 -0
- data/lib/puppet/pops/types/tree_iterators.rb +254 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +47 -0
- data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
- data/lib/puppet/pops/types/type_calculator.rb +822 -0
- data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
- data/lib/puppet/pops/types/type_factory.rb +631 -0
- data/lib/puppet/pops/types/type_formatter.rb +801 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1096 -0
- data/lib/puppet/pops/types/type_parser.rb +683 -0
- data/lib/puppet/pops/types/type_set_reference.rb +59 -0
- data/lib/puppet/pops/types/type_with_members.rb +43 -0
- data/lib/puppet/pops/types/types.rb +3633 -0
- data/lib/puppet/pops/utils.rb +119 -0
- data/lib/puppet/pops/validation/checker4_0.rb +1148 -0
- data/lib/puppet/pops/validation/tasks_checker.rb +93 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
- data/lib/puppet/pops/validation.rb +459 -0
- data/lib/puppet/pops/visitable.rb +6 -0
- data/lib/puppet/pops/visitor.rb +122 -0
- data/lib/puppet/pops.rb +121 -0
- data/lib/puppet/property/boolean.rb +7 -0
- data/lib/puppet/property/ensure.rb +106 -0
- data/lib/puppet/property/keyvalue.rb +158 -0
- data/lib/puppet/property/list.rb +70 -0
- data/lib/puppet/property/ordered_list.rb +29 -0
- data/lib/puppet/property.rb +611 -0
- data/lib/puppet/provider/aix_object.rb +485 -0
- data/lib/puppet/provider/command.rb +25 -0
- data/lib/puppet/provider/confine.rb +6 -0
- data/lib/puppet/provider/exec/posix.rb +60 -0
- data/lib/puppet/provider/exec/shell.rb +25 -0
- data/lib/puppet/provider/exec/windows.rb +55 -0
- data/lib/puppet/provider/exec.rb +105 -0
- data/lib/puppet/provider/file/posix.rb +144 -0
- data/lib/puppet/provider/file/windows.rb +152 -0
- data/lib/puppet/provider/group/aix.rb +99 -0
- data/lib/puppet/provider/group/directoryservice.rb +22 -0
- data/lib/puppet/provider/group/groupadd.rb +174 -0
- data/lib/puppet/provider/group/ldap.rb +48 -0
- data/lib/puppet/provider/group/pw.rb +51 -0
- data/lib/puppet/provider/group/windows_adsi.rb +113 -0
- data/lib/puppet/provider/ldap.rb +141 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +512 -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 +293 -0
- data/lib/puppet/provider/network_device.rb +74 -0
- data/lib/puppet/provider/package/aix.rb +169 -0
- data/lib/puppet/provider/package/appdmg.rb +111 -0
- data/lib/puppet/provider/package/apple.rb +47 -0
- data/lib/puppet/provider/package/apt.rb +262 -0
- data/lib/puppet/provider/package/aptitude.rb +35 -0
- data/lib/puppet/provider/package/aptrpm.rb +83 -0
- data/lib/puppet/provider/package/blastwave.rb +112 -0
- data/lib/puppet/provider/package/dnf.rb +50 -0
- data/lib/puppet/provider/package/dnfmodule.rb +141 -0
- data/lib/puppet/provider/package/dpkg.rb +192 -0
- data/lib/puppet/provider/package/fink.rb +97 -0
- data/lib/puppet/provider/package/freebsd.rb +47 -0
- data/lib/puppet/provider/package/gem.rb +293 -0
- data/lib/puppet/provider/package/hpux.rb +44 -0
- data/lib/puppet/provider/package/macports.rb +110 -0
- data/lib/puppet/provider/package/nim.rb +291 -0
- data/lib/puppet/provider/package/openbsd.rb +260 -0
- data/lib/puppet/provider/package/opkg.rb +82 -0
- data/lib/puppet/provider/package/pacman.rb +273 -0
- data/lib/puppet/provider/package/pip.rb +346 -0
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/pip3.rb +17 -0
- data/lib/puppet/provider/package/pkg.rb +295 -0
- data/lib/puppet/provider/package/pkgdmg.rb +153 -0
- data/lib/puppet/provider/package/pkgin.rb +87 -0
- data/lib/puppet/provider/package/pkgng.rb +173 -0
- data/lib/puppet/provider/package/pkgutil.rb +187 -0
- data/lib/puppet/provider/package/portage.rb +310 -0
- data/lib/puppet/provider/package/ports.rb +91 -0
- data/lib/puppet/provider/package/portupgrade.rb +240 -0
- data/lib/puppet/provider/package/puppet_gem.rb +34 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +171 -0
- data/lib/puppet/provider/package/rpm.rb +250 -0
- data/lib/puppet/provider/package/rug.rb +51 -0
- data/lib/puppet/provider/package/sun.rb +133 -0
- data/lib/puppet/provider/package/sunfreeware.rb +9 -0
- data/lib/puppet/provider/package/tdnf.rb +28 -0
- data/lib/puppet/provider/package/up2date.rb +40 -0
- data/lib/puppet/provider/package/urpmi.rb +55 -0
- data/lib/puppet/provider/package/windows/exe_package.rb +106 -0
- data/lib/puppet/provider/package/windows/msi_package.rb +70 -0
- data/lib/puppet/provider/package/windows/package.rb +110 -0
- data/lib/puppet/provider/package/windows.rb +130 -0
- data/lib/puppet/provider/package/yum.rb +387 -0
- data/lib/puppet/provider/package/zypper.rb +206 -0
- data/lib/puppet/provider/package.rb +59 -0
- data/lib/puppet/provider/package_targetable.rb +69 -0
- data/lib/puppet/provider/parsedfile.rb +490 -0
- data/lib/puppet/provider/service/base.rb +139 -0
- data/lib/puppet/provider/service/bsd.rb +51 -0
- data/lib/puppet/provider/service/daemontools.rb +193 -0
- data/lib/puppet/provider/service/debian.rb +75 -0
- data/lib/puppet/provider/service/freebsd.rb +143 -0
- data/lib/puppet/provider/service/gentoo.rb +45 -0
- data/lib/puppet/provider/service/init.rb +192 -0
- data/lib/puppet/provider/service/launchd.rb +384 -0
- data/lib/puppet/provider/service/openbsd.rb +100 -0
- data/lib/puppet/provider/service/openrc.rb +71 -0
- data/lib/puppet/provider/service/openwrt.rb +36 -0
- data/lib/puppet/provider/service/rcng.rb +51 -0
- data/lib/puppet/provider/service/redhat.rb +72 -0
- data/lib/puppet/provider/service/runit.rb +106 -0
- data/lib/puppet/provider/service/service.rb +68 -0
- data/lib/puppet/provider/service/smf.rb +317 -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 +182 -0
- data/lib/puppet/provider/user/aix.rb +361 -0
- data/lib/puppet/provider/user/directoryservice.rb +680 -0
- data/lib/puppet/provider/user/hpux.rb +95 -0
- data/lib/puppet/provider/user/ldap.rb +132 -0
- data/lib/puppet/provider/user/openbsd.rb +77 -0
- data/lib/puppet/provider/user/pw.rb +108 -0
- data/lib/puppet/provider/user/user_role_add.rb +239 -0
- data/lib/puppet/provider/user/useradd.rb +406 -0
- data/lib/puppet/provider/user/windows_adsi.rb +172 -0
- data/lib/puppet/provider.rb +612 -0
- data/lib/puppet/reference/configuration.rb +97 -0
- data/lib/puppet/reference/function.rb +17 -0
- data/lib/puppet/reference/indirection.rb +71 -0
- data/lib/puppet/reference/metaparameter.rb +33 -0
- data/lib/puppet/reference/providers.rb +117 -0
- data/lib/puppet/reference/report.rb +20 -0
- data/lib/puppet/reference/type.rb +109 -0
- data/lib/puppet/relationship.rb +84 -0
- data/lib/puppet/reports/http.rb +44 -0
- data/lib/puppet/reports/log.rb +14 -0
- data/lib/puppet/reports/store.rb +68 -0
- data/lib/puppet/reports.rb +93 -0
- data/lib/puppet/resource/catalog.rb +654 -0
- data/lib/puppet/resource/status.rb +229 -0
- data/lib/puppet/resource/type.rb +425 -0
- data/lib/puppet/resource/type_collection.rb +231 -0
- data/lib/puppet/resource.rb +663 -0
- data/lib/puppet/runtime.rb +65 -0
- data/lib/puppet/scheduler/job.rb +53 -0
- data/lib/puppet/scheduler/scheduler.rb +44 -0
- data/lib/puppet/scheduler/splay_job.rb +32 -0
- data/lib/puppet/scheduler/timer.rb +13 -0
- data/lib/puppet/scheduler.rb +16 -0
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/array_setting.rb +17 -0
- data/lib/puppet/settings/autosign_setting.rb +22 -0
- data/lib/puppet/settings/base_setting.rb +223 -0
- data/lib/puppet/settings/boolean_setting.rb +32 -0
- data/lib/puppet/settings/certificate_revocation_setting.rb +21 -0
- data/lib/puppet/settings/config_file.rb +146 -0
- data/lib/puppet/settings/directory_setting.rb +18 -0
- data/lib/puppet/settings/duration_setting.rb +32 -0
- data/lib/puppet/settings/enum_setting.rb +16 -0
- data/lib/puppet/settings/environment_conf.rb +224 -0
- data/lib/puppet/settings/errors.rb +11 -0
- data/lib/puppet/settings/file_or_directory_setting.rb +40 -0
- data/lib/puppet/settings/file_setting.rb +241 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/settings/ini_file.rb +226 -0
- data/lib/puppet/settings/integer_setting.rb +17 -0
- data/lib/puppet/settings/path_setting.rb +8 -0
- data/lib/puppet/settings/port_setting.rb +15 -0
- data/lib/puppet/settings/priority_setting.rb +43 -0
- data/lib/puppet/settings/server_list_setting.rb +29 -0
- data/lib/puppet/settings/string_setting.rb +9 -0
- data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
- data/lib/puppet/settings/terminus_setting.rb +14 -0
- data/lib/puppet/settings/ttl_setting.rb +51 -0
- data/lib/puppet/settings/value_translator.rb +14 -0
- data/lib/puppet/settings.rb +1642 -0
- data/lib/puppet/ssl/base.rb +149 -0
- data/lib/puppet/ssl/certificate.rb +96 -0
- data/lib/puppet/ssl/certificate_request.rb +324 -0
- data/lib/puppet/ssl/certificate_request_attributes.rb +37 -0
- data/lib/puppet/ssl/certificate_signer.rb +39 -0
- data/lib/puppet/ssl/digest.rb +20 -0
- data/lib/puppet/ssl/error.rb +26 -0
- data/lib/puppet/ssl/oids.rb +197 -0
- data/lib/puppet/ssl/openssl_loader.rb +24 -0
- data/lib/puppet/ssl/ssl_context.rb +25 -0
- data/lib/puppet/ssl/ssl_provider.rb +350 -0
- data/lib/puppet/ssl/state_machine.rb +474 -0
- data/lib/puppet/ssl/verifier.rb +142 -0
- data/lib/puppet/ssl.rb +23 -0
- data/lib/puppet/syntax_checkers/base64.rb +40 -0
- data/lib/puppet/syntax_checkers/epp.rb +34 -0
- data/lib/puppet/syntax_checkers/json.rb +35 -0
- data/lib/puppet/syntax_checkers/pp.rb +34 -0
- data/lib/puppet/syntax_checkers.rb +3 -0
- data/lib/puppet/test/test_helper.rb +265 -0
- data/lib/puppet/thread_local.rb +4 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +220 -0
- data/lib/puppet/transaction/event.rb +168 -0
- data/lib/puppet/transaction/event_manager.rb +179 -0
- data/lib/puppet/transaction/persistence.rb +119 -0
- data/lib/puppet/transaction/report.rb +504 -0
- data/lib/puppet/transaction/resource_harness.rb +323 -0
- data/lib/puppet/transaction.rb +491 -0
- data/lib/puppet/trusted_external.rb +41 -0
- data/lib/puppet/type/component.rb +89 -0
- data/lib/puppet/type/exec.rb +720 -0
- data/lib/puppet/type/file/checksum.rb +50 -0
- data/lib/puppet/type/file/checksum_value.rb +54 -0
- data/lib/puppet/type/file/content.rb +176 -0
- data/lib/puppet/type/file/ctime.rb +21 -0
- data/lib/puppet/type/file/data_sync.rb +98 -0
- data/lib/puppet/type/file/ensure.rb +195 -0
- data/lib/puppet/type/file/group.rb +48 -0
- data/lib/puppet/type/file/mode.rb +189 -0
- data/lib/puppet/type/file/mtime.rb +19 -0
- data/lib/puppet/type/file/owner.rb +51 -0
- data/lib/puppet/type/file/selcontext.rb +142 -0
- data/lib/puppet/type/file/source.rb +379 -0
- data/lib/puppet/type/file/target.rb +88 -0
- data/lib/puppet/type/file/type.rb +20 -0
- data/lib/puppet/type/file.rb +1133 -0
- data/lib/puppet/type/filebucket.rb +121 -0
- data/lib/puppet/type/group.rb +237 -0
- data/lib/puppet/type/notify.rb +47 -0
- data/lib/puppet/type/package.rb +713 -0
- data/lib/puppet/type/resources.rb +187 -0
- data/lib/puppet/type/schedule.rb +441 -0
- data/lib/puppet/type/service.rb +309 -0
- data/lib/puppet/type/stage.rb +27 -0
- data/lib/puppet/type/tidy.rb +376 -0
- data/lib/puppet/type/user.rb +859 -0
- data/lib/puppet/type/whit.rb +34 -0
- data/lib/puppet/type.rb +2676 -0
- data/lib/puppet/util/at_fork/noop.rb +18 -0
- data/lib/puppet/util/at_fork/solaris.rb +160 -0
- data/lib/puppet/util/at_fork.rb +35 -0
- data/lib/puppet/util/autoload.rb +215 -0
- data/lib/puppet/util/backups.rb +86 -0
- data/lib/puppet/util/character_encoding.rb +80 -0
- data/lib/puppet/util/checksums.rb +376 -0
- data/lib/puppet/util/classgen.rb +228 -0
- data/lib/puppet/util/colors.rb +100 -0
- data/lib/puppet/util/command_line/puppet_option_parser.rb +87 -0
- data/lib/puppet/util/command_line/trollop.rb +825 -0
- data/lib/puppet/util/command_line.rb +196 -0
- data/lib/puppet/util/constant_inflector.rb +24 -0
- data/lib/puppet/util/diff.rb +81 -0
- data/lib/puppet/util/docs.rb +128 -0
- data/lib/puppet/util/errors.rb +159 -0
- data/lib/puppet/util/execution.rb +424 -0
- data/lib/puppet/util/execution_stub.rb +26 -0
- data/lib/puppet/util/feature.rb +129 -0
- data/lib/puppet/util/file_watcher.rb +28 -0
- data/lib/puppet/util/fileparsing.rb +408 -0
- data/lib/puppet/util/filetype.rb +358 -0
- data/lib/puppet/util/http_proxy.rb +4 -0
- data/lib/puppet/util/inifile.rb +340 -0
- data/lib/puppet/util/instance_loader.rb +66 -0
- data/lib/puppet/util/json.rb +92 -0
- data/lib/puppet/util/json_lockfile.rb +44 -0
- data/lib/puppet/util/ldap/connection.rb +73 -0
- data/lib/puppet/util/ldap/generator.rb +42 -0
- data/lib/puppet/util/ldap/manager.rb +284 -0
- data/lib/puppet/util/ldap.rb +2 -0
- data/lib/puppet/util/libuser.conf +15 -0
- data/lib/puppet/util/libuser.rb +12 -0
- data/lib/puppet/util/limits.rb +12 -0
- data/lib/puppet/util/lockfile.rb +66 -0
- data/lib/puppet/util/log/destination.rb +49 -0
- data/lib/puppet/util/log/destinations.rb +253 -0
- data/lib/puppet/util/log.rb +427 -0
- data/lib/puppet/util/logging.rb +300 -0
- data/lib/puppet/util/metaid.rb +21 -0
- data/lib/puppet/util/metric.rb +65 -0
- data/lib/puppet/util/monkey_patches.rb +122 -0
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/base.rb +23 -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 +5 -0
- data/lib/puppet/util/network_device.rb +17 -0
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/package.rb +40 -0
- data/lib/puppet/util/pidlock.rb +102 -0
- data/lib/puppet/util/platform.rb +70 -0
- data/lib/puppet/util/plist.rb +161 -0
- data/lib/puppet/util/posix.rb +203 -0
- data/lib/puppet/util/profiler/aggregate.rb +85 -0
- data/lib/puppet/util/profiler/around_profiler.rb +67 -0
- data/lib/puppet/util/profiler/logging.rb +48 -0
- data/lib/puppet/util/profiler/object_counts.rb +17 -0
- data/lib/puppet/util/profiler/wall_clock.rb +35 -0
- data/lib/puppet/util/profiler.rb +53 -0
- data/lib/puppet/util/provider_features.rb +179 -0
- data/lib/puppet/util/psych_support.rb +30 -0
- data/lib/puppet/util/rdoc/code_objects.rb +295 -0
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +912 -0
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1085 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +259 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
- data/lib/puppet/util/rdoc/parser.rb +12 -0
- data/lib/puppet/util/rdoc.rb +53 -0
- data/lib/puppet/util/reference.rb +119 -0
- data/lib/puppet/util/resource_template.rb +61 -0
- data/lib/puppet/util/retry_action.rb +46 -0
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/rubygems.rb +67 -0
- data/lib/puppet/util/run_mode.rb +122 -0
- data/lib/puppet/util/selinux.rb +297 -0
- data/lib/puppet/util/skip_tags.rb +13 -0
- data/lib/puppet/util/splayer.rb +18 -0
- data/lib/puppet/util/storage.rb +100 -0
- data/lib/puppet/util/suidmanager.rb +166 -0
- data/lib/puppet/util/symbolic_file_mode.rb +156 -0
- data/lib/puppet/util/tag_set.rb +27 -0
- data/lib/puppet/util/tagging.rb +132 -0
- data/lib/puppet/util/terminal.rb +16 -0
- data/lib/puppet/util/user_attr.rb +21 -0
- data/lib/puppet/util/warnings.rb +31 -0
- data/lib/puppet/util/watched_file.rb +37 -0
- data/lib/puppet/util/watcher/change_watcher.rb +33 -0
- data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
- data/lib/puppet/util/watcher/timer.rb +19 -0
- data/lib/puppet/util/watcher.rb +17 -0
- data/lib/puppet/util/windows/access_control_entry.rb +84 -0
- data/lib/puppet/util/windows/access_control_list.rb +113 -0
- data/lib/puppet/util/windows/adsi.rb +654 -0
- data/lib/puppet/util/windows/com.rb +225 -0
- data/lib/puppet/util/windows/daemon.rb +343 -0
- data/lib/puppet/util/windows/error.rb +84 -0
- data/lib/puppet/util/windows/eventlog.rb +187 -0
- data/lib/puppet/util/windows/file.rb +355 -0
- data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
- data/lib/puppet/util/windows/principal.rb +201 -0
- data/lib/puppet/util/windows/process.rb +364 -0
- data/lib/puppet/util/windows/registry.rb +441 -0
- data/lib/puppet/util/windows/root_certs.rb +108 -0
- data/lib/puppet/util/windows/security.rb +907 -0
- data/lib/puppet/util/windows/security_descriptor.rb +62 -0
- data/lib/puppet/util/windows/service.rb +696 -0
- data/lib/puppet/util/windows/sid.rb +289 -0
- data/lib/puppet/util/windows/string.rb +15 -0
- data/lib/puppet/util/windows/user.rb +550 -0
- data/lib/puppet/util/windows.rb +51 -0
- data/lib/puppet/util/yaml.rb +65 -0
- data/lib/puppet/util.rb +808 -0
- data/lib/puppet/vendor/require_vendored.rb +4 -0
- data/lib/puppet/vendor.rb +57 -0
- data/lib/puppet/version.rb +95 -0
- data/lib/puppet/x509/cert_provider.rb +369 -0
- data/lib/puppet/x509/pem_store.rb +55 -0
- data/lib/puppet/x509.rb +11 -0
- data/lib/puppet.rb +345 -0
- data/lib/puppet_pal.rb +8 -0
- data/lib/puppet_x.rb +14 -0
- data/locales/config.yaml +29 -0
- data/locales/en/puppet.po +19 -0
- data/locales/puppet.pot +20 -0
- data/man/man5/puppet.conf.5 +2198 -0
- data/man/man8/puppet-agent.8 +203 -0
- data/man/man8/puppet-apply.8 +100 -0
- data/man/man8/puppet-catalog.8 +291 -0
- data/man/man8/puppet-config.8 +151 -0
- data/man/man8/puppet-describe.8 +51 -0
- data/man/man8/puppet-device.8 +119 -0
- data/man/man8/puppet-doc.8 +46 -0
- data/man/man8/puppet-epp.8 +377 -0
- data/man/man8/puppet-facts.8 +234 -0
- data/man/man8/puppet-filebucket.8 +166 -0
- data/man/man8/puppet-generate.8 +84 -0
- data/man/man8/puppet-help.8 +67 -0
- data/man/man8/puppet-lookup.8 +107 -0
- data/man/man8/puppet-module.8 +325 -0
- data/man/man8/puppet-node.8 +163 -0
- data/man/man8/puppet-parser.8 +130 -0
- data/man/man8/puppet-plugin.8 +73 -0
- data/man/man8/puppet-report.8 +127 -0
- data/man/man8/puppet-resource.8 +88 -0
- data/man/man8/puppet-script.8 +70 -0
- data/man/man8/puppet-ssl.8 +63 -0
- data/man/man8/puppet.8 +28 -0
- data/tasks/benchmark.rake +180 -0
- data/tasks/ci.rake +24 -0
- data/tasks/generate_ast_model.rake +90 -0
- data/tasks/generate_cert_fixtures.rake +194 -0
- data/tasks/manpages.rake +67 -0
- data/tasks/memwalk.rake +195 -0
- data/tasks/parallel.rake +410 -0
- data/tasks/parser.rake +22 -0
- data/tasks/yard.rake +59 -0
- metadata +1324 -0
@@ -0,0 +1,525 @@
|
|
1
|
+
# The HTTP client provides methods for making `GET`, `POST`, etc requests to
|
2
|
+
# HTTP(S) servers. It also provides methods for resolving Puppetserver REST
|
3
|
+
# service endpoints using SRV records and settings (such as `server_list`,
|
4
|
+
# `server`, `ca_server`, etc). Once a service endpoint has been resolved, there
|
5
|
+
# are methods for making REST requests (such as getting a node, sending facts,
|
6
|
+
# etc).
|
7
|
+
#
|
8
|
+
# The client uses persistent HTTP connections by default unless the `Connection:
|
9
|
+
# close` header is specified and supports streaming response bodies.
|
10
|
+
#
|
11
|
+
# By default the client only trusts the Puppet CA for HTTPS connections. However,
|
12
|
+
# if the `include_system_store` request option is set to true, then Puppet will
|
13
|
+
# trust certificates in the puppet-agent CA bundle.
|
14
|
+
#
|
15
|
+
# @example To access the HTTP client:
|
16
|
+
# client = Puppet.runtime[:http]
|
17
|
+
#
|
18
|
+
# @example To make an HTTP GET request:
|
19
|
+
# response = client.get(URI("http://www.example.com"))
|
20
|
+
#
|
21
|
+
# @example To make an HTTPS GET request, trusting the puppet CA and certs in Puppet's CA bundle:
|
22
|
+
# response = client.get(URI("https://www.example.com"), options: { include_system_store: true })
|
23
|
+
#
|
24
|
+
# @example To use a URL containing special characters, such as spaces:
|
25
|
+
# response = client.get(URI(Puppet::Util.uri_encode("https://www.example.com/path to file")))
|
26
|
+
#
|
27
|
+
# @example To pass query parameters:
|
28
|
+
# response = client.get(URI("https://www.example.com"), query: {'q' => 'puppet'})
|
29
|
+
#
|
30
|
+
# @example To pass custom headers:
|
31
|
+
# response = client.get(URI("https://www.example.com"), headers: {'Accept-Content' => 'application/json'})
|
32
|
+
#
|
33
|
+
# @example To check if the response is successful (2xx):
|
34
|
+
# response = client.get(URI("http://www.example.com"))
|
35
|
+
# puts response.success?
|
36
|
+
#
|
37
|
+
# @example To get the response code and reason:
|
38
|
+
# response = client.get(URI("http://www.example.com"))
|
39
|
+
# unless response.success?
|
40
|
+
# puts "HTTP #{response.code} #{response.reason}"
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# @example To read response headers:
|
44
|
+
# response = client.get(URI("http://www.example.com"))
|
45
|
+
# puts response['Content-Type']
|
46
|
+
#
|
47
|
+
# @example To stream the response body:
|
48
|
+
# client.get(URI("http://www.example.com")) do |response|
|
49
|
+
# if response.success?
|
50
|
+
# response.read_body do |data|
|
51
|
+
# puts data
|
52
|
+
# end
|
53
|
+
# end
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# @example To handle exceptions:
|
57
|
+
# begin
|
58
|
+
# client.get(URI("https://www.example.com"))
|
59
|
+
# rescue Puppet::HTTP::ResponseError => e
|
60
|
+
# puts "HTTP #{e.response.code} #{e.response.reason}"
|
61
|
+
# rescue Puppet::HTTP::ConnectionError => e
|
62
|
+
# puts "Connection error #{e.message}"
|
63
|
+
# rescue Puppet::SSL::SSLError => e
|
64
|
+
# puts "SSL error #{e.message}"
|
65
|
+
# rescue Puppet::HTTP::HTTPError => e
|
66
|
+
# puts "General HTTP error #{e.message}"
|
67
|
+
# end
|
68
|
+
#
|
69
|
+
# @example To route to the `:puppet` service:
|
70
|
+
# session = client.create_session
|
71
|
+
# service = session.route_to(:puppet)
|
72
|
+
#
|
73
|
+
# @example To make a node request:
|
74
|
+
# node = service.get_node(Puppet[:certname], environment: 'production')
|
75
|
+
#
|
76
|
+
# @example To submit facts:
|
77
|
+
# facts = Puppet::Indirection::Facts.indirection.find(Puppet[:certname])
|
78
|
+
# service.put_facts(Puppet[:certname], environment: 'production', facts: facts)
|
79
|
+
#
|
80
|
+
# @example To submit a report to the `:report` service:
|
81
|
+
# report = Puppet::Transaction::Report.new
|
82
|
+
# service = session.route_to(:report)
|
83
|
+
# service.put_report(Puppet[:certname], report, environment: 'production')
|
84
|
+
#
|
85
|
+
# @api public
|
86
|
+
class Puppet::HTTP::Client
|
87
|
+
|
88
|
+
attr_reader :pool
|
89
|
+
|
90
|
+
# Create a new http client instance. Use `Puppet.runtime[:http]` to get
|
91
|
+
# the current client instead of creating an instance of this class.
|
92
|
+
#
|
93
|
+
# @param [Puppet::HTTP::Pool] pool pool of persistent Net::HTTP
|
94
|
+
# connections
|
95
|
+
# @param [Puppet::SSL::SSLContext] ssl_context ssl context to be used for
|
96
|
+
# connections
|
97
|
+
# @param [Puppet::SSL::SSLContext] system_ssl_context the system ssl context
|
98
|
+
# used if :include_system_store is set to true
|
99
|
+
# @param [Integer] redirect_limit default number of HTTP redirections to allow
|
100
|
+
# in a given request. Can also be specified per-request.
|
101
|
+
# @param [Integer] retry_limit number of HTTP retries allowed in a given
|
102
|
+
# request
|
103
|
+
#
|
104
|
+
def initialize(pool: Puppet::HTTP::Pool.new(Puppet[:http_keepalive_timeout]), ssl_context: nil, system_ssl_context: nil, redirect_limit: 10, retry_limit: 100)
|
105
|
+
@pool = pool
|
106
|
+
@default_headers = {
|
107
|
+
'X-Puppet-Version' => Puppet.version,
|
108
|
+
'User-Agent' => Puppet[:http_user_agent],
|
109
|
+
}.freeze
|
110
|
+
@default_ssl_context = ssl_context
|
111
|
+
@default_system_ssl_context = system_ssl_context
|
112
|
+
@default_redirect_limit = redirect_limit
|
113
|
+
@retry_after_handler = Puppet::HTTP::RetryAfterHandler.new(retry_limit, Puppet[:runinterval])
|
114
|
+
end
|
115
|
+
|
116
|
+
# Create a new HTTP session. A session is the object through which services
|
117
|
+
# may be connected to and accessed.
|
118
|
+
#
|
119
|
+
# @return [Puppet::HTTP::Session] the newly created HTTP session
|
120
|
+
#
|
121
|
+
# @api public
|
122
|
+
def create_session
|
123
|
+
Puppet::HTTP::Session.new(self, build_resolvers)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Open a connection to the given URI. It is typically not necessary to call
|
127
|
+
# this method as the client will create connections as needed when a request
|
128
|
+
# is made.
|
129
|
+
#
|
130
|
+
# @param [URI] uri the connection destination
|
131
|
+
# @param [Hash] options
|
132
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
133
|
+
# be used for connections
|
134
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
135
|
+
# the system store for connection
|
136
|
+
def connect(uri, options: {}, &block)
|
137
|
+
start = Time.now
|
138
|
+
verifier = nil
|
139
|
+
connected = false
|
140
|
+
|
141
|
+
site = Puppet::HTTP::Site.from_uri(uri)
|
142
|
+
if site.use_ssl?
|
143
|
+
ssl_context = options.fetch(:ssl_context, nil)
|
144
|
+
include_system_store = options.fetch(:include_system_store, false)
|
145
|
+
ctx = resolve_ssl_context(ssl_context, include_system_store)
|
146
|
+
verifier = Puppet::SSL::Verifier.new(site.host, ctx)
|
147
|
+
end
|
148
|
+
|
149
|
+
@pool.with_connection(site, verifier) do |http|
|
150
|
+
connected = true
|
151
|
+
if block_given?
|
152
|
+
yield http
|
153
|
+
end
|
154
|
+
end
|
155
|
+
rescue Net::OpenTimeout => e
|
156
|
+
raise_error(_("Request to %{uri} timed out connect operation after %{elapsed} seconds") % {uri: uri, elapsed: elapsed(start)}, e, connected)
|
157
|
+
rescue Net::ReadTimeout => e
|
158
|
+
raise_error(_("Request to %{uri} timed out read operation after %{elapsed} seconds") % {uri: uri, elapsed: elapsed(start)}, e, connected)
|
159
|
+
rescue EOFError => e
|
160
|
+
raise_error(_("Request to %{uri} interrupted after %{elapsed} seconds") % {uri: uri, elapsed: elapsed(start)}, e, connected)
|
161
|
+
rescue Puppet::SSL::SSLError
|
162
|
+
raise
|
163
|
+
rescue Puppet::HTTP::HTTPError
|
164
|
+
raise
|
165
|
+
rescue => e
|
166
|
+
raise_error(_("Request to %{uri} failed after %{elapsed} seconds: %{message}") %
|
167
|
+
{uri: uri, elapsed: elapsed(start), message: e.message}, e, connected)
|
168
|
+
end
|
169
|
+
|
170
|
+
# These options apply to all HTTP request methods
|
171
|
+
#
|
172
|
+
# @!macro [new] request_options
|
173
|
+
# @param [Hash] options HTTP request options. Options not recognized by the
|
174
|
+
# HTTP implementation will be ignored.
|
175
|
+
# @option options [Puppet::SSL::SSLContext] :ssl_context (nil) ssl context to
|
176
|
+
# be used for connections
|
177
|
+
# @option options [Boolean] :include_system_store (false) if we should include
|
178
|
+
# the system store for connection
|
179
|
+
# @option options [Integer] :redirect_limit (10) The maximum number of HTTP
|
180
|
+
# redirections to allow for this request.
|
181
|
+
# @option options [Hash] :basic_auth A map of `:username` => `String` and
|
182
|
+
# `:password` => `String`
|
183
|
+
# @option options [String] :metric_id The metric id used to track metrics
|
184
|
+
# on requests.
|
185
|
+
|
186
|
+
# Submits a GET HTTP request to the given url
|
187
|
+
#
|
188
|
+
# @param [URI] url the location to submit the http request
|
189
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
190
|
+
# @param [Hash] params encoded and set as the url query
|
191
|
+
# @!macro request_options
|
192
|
+
#
|
193
|
+
# @yield [Puppet::HTTP::Response] if a block is given yields the response
|
194
|
+
#
|
195
|
+
# @return [Puppet::HTTP::Response] the response
|
196
|
+
#
|
197
|
+
# @api public
|
198
|
+
def get(url, headers: {}, params: {}, options: {}, &block)
|
199
|
+
url = encode_query(url, params)
|
200
|
+
|
201
|
+
request = Net::HTTP::Get.new(url, @default_headers.merge(headers))
|
202
|
+
|
203
|
+
execute_streaming(request, options: options, &block)
|
204
|
+
end
|
205
|
+
|
206
|
+
# Submits a HEAD HTTP request to the given url
|
207
|
+
#
|
208
|
+
# @param [URI] url the location to submit the http request
|
209
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
210
|
+
# @param [Hash] params encoded and set as the url query
|
211
|
+
# @!macro request_options
|
212
|
+
#
|
213
|
+
# @return [Puppet::HTTP::Response] the response
|
214
|
+
#
|
215
|
+
# @api public
|
216
|
+
def head(url, headers: {}, params: {}, options: {})
|
217
|
+
url = encode_query(url, params)
|
218
|
+
|
219
|
+
request = Net::HTTP::Head.new(url, @default_headers.merge(headers))
|
220
|
+
|
221
|
+
execute_streaming(request, options: options)
|
222
|
+
end
|
223
|
+
|
224
|
+
# Submits a PUT HTTP request to the given url
|
225
|
+
#
|
226
|
+
# @param [URI] url the location to submit the http request
|
227
|
+
# @param [String] body the body of the PUT request
|
228
|
+
# @param [Hash] headers merged with the default headers defined by the client. The
|
229
|
+
# `Content-Type` header is required and should correspond to the type of data passed
|
230
|
+
# as the `body` argument.
|
231
|
+
# @param [Hash] params encoded and set as the url query
|
232
|
+
# @!macro request_options
|
233
|
+
#
|
234
|
+
# @return [Puppet::HTTP::Response] the response
|
235
|
+
#
|
236
|
+
# @api public
|
237
|
+
def put(url, body, headers: {}, params: {}, options: {})
|
238
|
+
raise ArgumentError, "'put' requires a string 'body' argument" unless body.is_a?(String)
|
239
|
+
url = encode_query(url, params)
|
240
|
+
|
241
|
+
request = Net::HTTP::Put.new(url, @default_headers.merge(headers))
|
242
|
+
request.body = body
|
243
|
+
request.content_length = body.bytesize
|
244
|
+
|
245
|
+
raise ArgumentError, "'put' requires a 'content-type' header" unless request['Content-Type']
|
246
|
+
|
247
|
+
execute_streaming(request, options: options)
|
248
|
+
end
|
249
|
+
|
250
|
+
# Submits a POST HTTP request to the given url
|
251
|
+
#
|
252
|
+
# @param [URI] url the location to submit the http request
|
253
|
+
# @param [String] body the body of the POST request
|
254
|
+
# @param [Hash] headers merged with the default headers defined by the client. The
|
255
|
+
# `Content-Type` header is required and should correspond to the type of data passed
|
256
|
+
# as the `body` argument.
|
257
|
+
# @param [Hash] params encoded and set as the url query
|
258
|
+
# @!macro request_options
|
259
|
+
#
|
260
|
+
# @yield [Puppet::HTTP::Response] if a block is given yields the response
|
261
|
+
#
|
262
|
+
# @return [Puppet::HTTP::Response] the response
|
263
|
+
#
|
264
|
+
# @api public
|
265
|
+
def post(url, body, headers: {}, params: {}, options: {}, &block)
|
266
|
+
raise ArgumentError, "'post' requires a string 'body' argument" unless body.is_a?(String)
|
267
|
+
url = encode_query(url, params)
|
268
|
+
|
269
|
+
request = Net::HTTP::Post.new(url, @default_headers.merge(headers))
|
270
|
+
request.body = body
|
271
|
+
request.content_length = body.bytesize
|
272
|
+
|
273
|
+
raise ArgumentError, "'post' requires a 'content-type' header" unless request['Content-Type']
|
274
|
+
|
275
|
+
execute_streaming(request, options: options, &block)
|
276
|
+
end
|
277
|
+
|
278
|
+
# Submits a DELETE HTTP request to the given url.
|
279
|
+
#
|
280
|
+
# @param [URI] url the location to submit the http request
|
281
|
+
# @param [Hash] headers merged with the default headers defined by the client
|
282
|
+
# @param [Hash] params encoded and set as the url query
|
283
|
+
# @!macro request_options
|
284
|
+
#
|
285
|
+
# @return [Puppet::HTTP::Response] the response
|
286
|
+
#
|
287
|
+
# @api public
|
288
|
+
def delete(url, headers: {}, params: {}, options: {})
|
289
|
+
url = encode_query(url, params)
|
290
|
+
|
291
|
+
request = Net::HTTP::Delete.new(url, @default_headers.merge(headers))
|
292
|
+
|
293
|
+
execute_streaming(request, options: options)
|
294
|
+
end
|
295
|
+
|
296
|
+
# Close persistent connections in the pool.
|
297
|
+
#
|
298
|
+
# @return [void]
|
299
|
+
#
|
300
|
+
# @api public
|
301
|
+
def close
|
302
|
+
@pool.close
|
303
|
+
@default_ssl_context = nil
|
304
|
+
@default_system_ssl_context = nil
|
305
|
+
end
|
306
|
+
|
307
|
+
def default_ssl_context
|
308
|
+
cert = Puppet::X509::CertProvider.new
|
309
|
+
password = cert.load_private_key_password
|
310
|
+
|
311
|
+
ssl = Puppet::SSL::SSLProvider.new
|
312
|
+
ctx = ssl.load_context(certname: Puppet[:certname], password: password)
|
313
|
+
ssl.print(ctx)
|
314
|
+
ctx
|
315
|
+
rescue => e
|
316
|
+
# TRANSLATORS: `message` is an already translated string of why SSL failed to initialize
|
317
|
+
Puppet.log_exception(e, _("Failed to initialize SSL: %{message}") % { message: e.message })
|
318
|
+
# TRANSLATORS: `puppet agent -t` is a command and should not be translated
|
319
|
+
Puppet.err(_("Run `puppet agent -t`"))
|
320
|
+
raise e
|
321
|
+
end
|
322
|
+
|
323
|
+
protected
|
324
|
+
|
325
|
+
def encode_query(url, params)
|
326
|
+
return url if params.empty?
|
327
|
+
|
328
|
+
url = url.dup
|
329
|
+
url.query = encode_params(params)
|
330
|
+
url
|
331
|
+
end
|
332
|
+
|
333
|
+
private
|
334
|
+
|
335
|
+
# Connect or borrow a connection from the pool to the host and port associated
|
336
|
+
# with the request's URL. Then execute the HTTP request, retrying and
|
337
|
+
# following redirects as needed, and return the HTTP response. The response
|
338
|
+
# body will always be fully drained/consumed when this method returns.
|
339
|
+
#
|
340
|
+
# If a block is provided, then the response will be yielded to the caller,
|
341
|
+
# allowing the response body to be streamed.
|
342
|
+
#
|
343
|
+
# If the request/response did not result in an exception and the caller did
|
344
|
+
# not ask for the connection to be closed (via Connection: close), then the
|
345
|
+
# connection will be returned to the pool.
|
346
|
+
#
|
347
|
+
# @yieldparam [Puppet::HTTP::Response] response The final response, after
|
348
|
+
# following redirects and retrying
|
349
|
+
# @return [Puppet::HTTP::Response]
|
350
|
+
def execute_streaming(request, options: {}, &block)
|
351
|
+
redirector = Puppet::HTTP::Redirector.new(options.fetch(:redirect_limit, @default_redirect_limit))
|
352
|
+
|
353
|
+
basic_auth = options.fetch(:basic_auth, nil)
|
354
|
+
unless basic_auth
|
355
|
+
if request.uri.user && request.uri.password
|
356
|
+
basic_auth = { user: request.uri.user, password: request.uri.password }
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
redirects = 0
|
361
|
+
retries = 0
|
362
|
+
response = nil
|
363
|
+
done = false
|
364
|
+
|
365
|
+
while !done do
|
366
|
+
connect(request.uri, options: options) do |http|
|
367
|
+
apply_auth(request, basic_auth) if redirects.zero?
|
368
|
+
|
369
|
+
# don't call return within the `request` block
|
370
|
+
close_and_sleep = nil
|
371
|
+
http.request(request) do |nethttp|
|
372
|
+
response = Puppet::HTTP::ResponseNetHTTP.new(request.uri, nethttp)
|
373
|
+
begin
|
374
|
+
Puppet.debug("HTTP #{request.method.upcase} #{request.uri} returned #{response.code} #{response.reason}")
|
375
|
+
|
376
|
+
if redirector.redirect?(request, response)
|
377
|
+
request = redirector.redirect_to(request, response, redirects)
|
378
|
+
redirects += 1
|
379
|
+
next
|
380
|
+
elsif @retry_after_handler.retry_after?(request, response)
|
381
|
+
interval = @retry_after_handler.retry_after_interval(request, response, retries)
|
382
|
+
retries += 1
|
383
|
+
if interval
|
384
|
+
close_and_sleep = proc do
|
385
|
+
if http.started?
|
386
|
+
Puppet.debug("Closing connection for #{Puppet::HTTP::Site.from_uri(request.uri)}")
|
387
|
+
http.finish
|
388
|
+
end
|
389
|
+
Puppet.warning(_("Sleeping for %{interval} seconds before retrying the request") % { interval: interval })
|
390
|
+
::Kernel.sleep(interval)
|
391
|
+
end
|
392
|
+
next
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
if block_given?
|
397
|
+
yield response
|
398
|
+
else
|
399
|
+
response.body
|
400
|
+
end
|
401
|
+
ensure
|
402
|
+
# we need to make sure the response body is fully consumed before
|
403
|
+
# the connection is put back in the pool, otherwise the response
|
404
|
+
# for one request could leak into a future response.
|
405
|
+
response.drain
|
406
|
+
end
|
407
|
+
|
408
|
+
done = true
|
409
|
+
end
|
410
|
+
ensure
|
411
|
+
# If a server responded with a retry, make sure the connection is closed and then
|
412
|
+
# sleep the specified time.
|
413
|
+
close_and_sleep.call if close_and_sleep
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
response
|
418
|
+
end
|
419
|
+
|
420
|
+
def expand_into_parameters(data)
|
421
|
+
data.inject([]) do |params, key_value|
|
422
|
+
key, value = key_value
|
423
|
+
|
424
|
+
expanded_value = case value
|
425
|
+
when Array
|
426
|
+
value.collect { |val| [key, val] }
|
427
|
+
else
|
428
|
+
[key_value]
|
429
|
+
end
|
430
|
+
|
431
|
+
params.concat(expand_primitive_types_into_parameters(expanded_value))
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
def expand_primitive_types_into_parameters(data)
|
436
|
+
data.inject([]) do |params, key_value|
|
437
|
+
key, value = key_value
|
438
|
+
case value
|
439
|
+
when nil
|
440
|
+
params
|
441
|
+
when true, false, String, Symbol, Integer, Float
|
442
|
+
params << [key, value]
|
443
|
+
else
|
444
|
+
raise Puppet::HTTP::SerializationError, _("HTTP REST queries cannot handle values of type '%{klass}'") % { klass: value.class }
|
445
|
+
end
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
def encode_params(params)
|
450
|
+
params = expand_into_parameters(params)
|
451
|
+
params.map do |key, value|
|
452
|
+
"#{key}=#{Puppet::Util.uri_query_encode(value.to_s)}"
|
453
|
+
end.join('&')
|
454
|
+
end
|
455
|
+
|
456
|
+
def elapsed(start)
|
457
|
+
(Time.now - start).to_f.round(3)
|
458
|
+
end
|
459
|
+
|
460
|
+
def raise_error(message, cause, connected)
|
461
|
+
if connected
|
462
|
+
raise Puppet::HTTP::HTTPError.new(message, cause)
|
463
|
+
else
|
464
|
+
raise Puppet::HTTP::ConnectionError.new(message, cause)
|
465
|
+
end
|
466
|
+
end
|
467
|
+
|
468
|
+
def resolve_ssl_context(ssl_context, include_system_store)
|
469
|
+
if ssl_context
|
470
|
+
raise Puppet::HTTP::HTTPError, "The ssl_context and include_system_store parameters are mutually exclusive" if include_system_store
|
471
|
+
ssl_context
|
472
|
+
elsif include_system_store
|
473
|
+
system_ssl_context
|
474
|
+
else
|
475
|
+
@default_ssl_context || Puppet.lookup(:ssl_context)
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
479
|
+
def system_ssl_context
|
480
|
+
return @default_system_ssl_context if @default_system_ssl_context
|
481
|
+
|
482
|
+
cert_provider = Puppet::X509::CertProvider.new
|
483
|
+
cacerts = cert_provider.load_cacerts || []
|
484
|
+
|
485
|
+
ssl = Puppet::SSL::SSLProvider.new
|
486
|
+
@default_system_ssl_context = ssl.create_system_context(cacerts: cacerts, include_client_cert: true)
|
487
|
+
ssl.print(@default_system_ssl_context)
|
488
|
+
@default_system_ssl_context
|
489
|
+
end
|
490
|
+
|
491
|
+
def apply_auth(request, basic_auth)
|
492
|
+
if basic_auth
|
493
|
+
request.basic_auth(basic_auth[:user], basic_auth[:password])
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
def build_resolvers
|
498
|
+
resolvers = []
|
499
|
+
|
500
|
+
if Puppet[:use_srv_records]
|
501
|
+
resolvers << Puppet::HTTP::Resolver::SRV.new(self, domain: Puppet[:srv_domain])
|
502
|
+
end
|
503
|
+
|
504
|
+
server_list_setting = Puppet.settings.setting(:server_list)
|
505
|
+
if server_list_setting.value && !server_list_setting.value.empty?
|
506
|
+
# use server list to resolve all services
|
507
|
+
services = Puppet::HTTP::Service::SERVICE_NAMES.dup
|
508
|
+
|
509
|
+
# except if it's been explicitly set
|
510
|
+
if Puppet.settings.set_by_config?(:ca_server)
|
511
|
+
services.delete(:ca)
|
512
|
+
end
|
513
|
+
|
514
|
+
if Puppet.settings.set_by_config?(:report_server)
|
515
|
+
services.delete(:report)
|
516
|
+
end
|
517
|
+
|
518
|
+
resolvers << Puppet::HTTP::Resolver::ServerList.new(self, server_list_setting: server_list_setting, default_port: Puppet[:serverport], services: services)
|
519
|
+
end
|
520
|
+
|
521
|
+
resolvers << Puppet::HTTP::Resolver::Settings.new(self)
|
522
|
+
|
523
|
+
resolvers.freeze
|
524
|
+
end
|
525
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
require 'resolv'
|
2
|
+
|
3
|
+
module Puppet::HTTP
|
4
|
+
class DNS
|
5
|
+
|
6
|
+
class CacheEntry
|
7
|
+
attr_reader :records, :ttl, :resolution_time
|
8
|
+
|
9
|
+
def initialize(records)
|
10
|
+
@records = records
|
11
|
+
@resolution_time = Time.now
|
12
|
+
@ttl = choose_lowest_ttl(records)
|
13
|
+
end
|
14
|
+
|
15
|
+
def choose_lowest_ttl(records)
|
16
|
+
ttl = records.first.ttl
|
17
|
+
records.each do |rec|
|
18
|
+
if rec.ttl < ttl
|
19
|
+
ttl = rec.ttl
|
20
|
+
end
|
21
|
+
end
|
22
|
+
ttl
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(resolver = Resolv::DNS.new)
|
27
|
+
@resolver = resolver
|
28
|
+
|
29
|
+
# Stores DNS records per service, along with their TTL
|
30
|
+
# and the time at which they were resolved, for cache
|
31
|
+
# eviction.
|
32
|
+
@record_cache = {}
|
33
|
+
end
|
34
|
+
|
35
|
+
# Iterate through the list of records for this service
|
36
|
+
# and yield each server and port pair. Records are only fetched
|
37
|
+
# via DNS query the first time and cached for the duration of their
|
38
|
+
# service's TTL thereafter.
|
39
|
+
# @param [String] domain the domain to search for
|
40
|
+
# @param [Symbol] service_name the key of the service we are querying
|
41
|
+
# @yields [String, Integer] server and port of selected record
|
42
|
+
def each_srv_record(domain, service_name = :puppet, &block)
|
43
|
+
if (domain.nil? or domain.empty?)
|
44
|
+
Puppet.debug "Domain not known; skipping SRV lookup"
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
48
|
+
Puppet.debug "Searching for SRV records for domain: #{domain}"
|
49
|
+
|
50
|
+
case service_name
|
51
|
+
when :puppet then service = '_x-puppet'
|
52
|
+
when :file then service = '_x-puppet-fileserver'
|
53
|
+
else service = "_x-puppet-#{service_name}"
|
54
|
+
end
|
55
|
+
record_name = "#{service}._tcp.#{domain}"
|
56
|
+
|
57
|
+
if @record_cache.has_key?(service_name) && !expired?(service_name)
|
58
|
+
records = @record_cache[service_name].records
|
59
|
+
Puppet.debug "Using cached record for #{record_name}"
|
60
|
+
else
|
61
|
+
records = @resolver.getresources(record_name, Resolv::DNS::Resource::IN::SRV)
|
62
|
+
if records.size > 0
|
63
|
+
@record_cache[service_name] = CacheEntry.new(records)
|
64
|
+
end
|
65
|
+
Puppet.debug "Found #{records.size} SRV records for: #{record_name}"
|
66
|
+
end
|
67
|
+
|
68
|
+
if records.size == 0 && service_name != :puppet
|
69
|
+
# Try the generic :puppet service if no SRV records were found
|
70
|
+
# for the specific service.
|
71
|
+
each_srv_record(domain, :puppet, &block)
|
72
|
+
else
|
73
|
+
each_priority(records) do |recs|
|
74
|
+
while next_rr = recs.delete(find_weighted_server(recs)) #rubocop:disable Lint/AssignmentInCondition
|
75
|
+
Puppet.debug "Yielding next server of #{next_rr.target}:#{next_rr.port}"
|
76
|
+
yield next_rr.target.to_s, next_rr.port
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Given a list of records of the same priority, chooses a random one
|
83
|
+
# from among them, favoring those with higher weights.
|
84
|
+
# @param [[Resolv::DNS::Resource::IN::SRV]] records a list of records
|
85
|
+
# of the same priority
|
86
|
+
# @return [Resolv::DNS::Resource::IN:SRV] the chosen record
|
87
|
+
def find_weighted_server(records)
|
88
|
+
return nil if records.nil? || records.empty?
|
89
|
+
return records.first if records.size == 1
|
90
|
+
|
91
|
+
# Calculate the sum of all weights in the list of resource records,
|
92
|
+
# This is used to then select hosts until the weight exceeds what
|
93
|
+
# random number we selected. For example, if we have weights of 1 8 and 3:
|
94
|
+
#
|
95
|
+
# |-|--------|---|
|
96
|
+
# ^
|
97
|
+
# We generate a random number 5, and iterate through the records, adding
|
98
|
+
# the current record's weight to the accumulator until the weight of the
|
99
|
+
# current record plus previous records is greater than the random number.
|
100
|
+
total_weight = records.inject(0) { |sum,record|
|
101
|
+
sum + weight(record)
|
102
|
+
}
|
103
|
+
current_weight = 0
|
104
|
+
chosen_weight = 1 + Kernel.rand(total_weight)
|
105
|
+
|
106
|
+
records.each do |record|
|
107
|
+
current_weight += weight(record)
|
108
|
+
return record if current_weight >= chosen_weight
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def weight(record)
|
113
|
+
record.weight == 0 ? 1 : record.weight * 10
|
114
|
+
end
|
115
|
+
|
116
|
+
# Returns TTL for the cached records for this service.
|
117
|
+
# @param [String] service_name the service whose TTL we want
|
118
|
+
# @return [Integer] the TTL for this service, in seconds
|
119
|
+
def ttl(service_name)
|
120
|
+
return @record_cache[service_name].ttl
|
121
|
+
end
|
122
|
+
|
123
|
+
# Checks if the cached entry for the given service has expired.
|
124
|
+
# @param [String] service_name the name of the service to check
|
125
|
+
# @return [Boolean] true if the entry has expired, false otherwise.
|
126
|
+
# Always returns true if the record had no TTL.
|
127
|
+
def expired?(service_name)
|
128
|
+
entry = @record_cache[service_name]
|
129
|
+
if entry
|
130
|
+
return Time.now > (entry.resolution_time + entry.ttl)
|
131
|
+
else
|
132
|
+
return true
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
private
|
137
|
+
|
138
|
+
# Groups the records by their priority and yields the groups
|
139
|
+
# in order of highest to lowest priority (lowest to highest numbers),
|
140
|
+
# one at a time.
|
141
|
+
# { 1 => [records], 2 => [records], etc. }
|
142
|
+
#
|
143
|
+
# @param [[Resolv::DNS::Resource::IN::SRV]] records the list of
|
144
|
+
# records for a given service
|
145
|
+
# @yields [[Resolv::DNS::Resource::IN::SRV]] a group of records of
|
146
|
+
# the same priority
|
147
|
+
def each_priority(records)
|
148
|
+
pri_hash = records.inject({}) do |groups, element|
|
149
|
+
groups[element.priority] ||= []
|
150
|
+
groups[element.priority] << element
|
151
|
+
groups
|
152
|
+
end
|
153
|
+
|
154
|
+
pri_hash.keys.sort.each do |key|
|
155
|
+
yield pri_hash[key]
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|