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
data/lib/puppet/util.rb
ADDED
@@ -0,0 +1,759 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# A module to collect utility functions.
|
4
|
+
|
5
|
+
require 'English'
|
6
|
+
require_relative '../puppet/error'
|
7
|
+
require_relative 'util/execution_stub'
|
8
|
+
require 'uri'
|
9
|
+
require 'pathname'
|
10
|
+
require 'ostruct'
|
11
|
+
require_relative 'util/platform'
|
12
|
+
require_relative 'util/windows'
|
13
|
+
require_relative 'util/symbolic_file_mode'
|
14
|
+
require_relative '../puppet/file_system/uniquefile'
|
15
|
+
require 'securerandom'
|
16
|
+
require_relative 'util/character_encoding'
|
17
|
+
|
18
|
+
module Puppet
|
19
|
+
module Util
|
20
|
+
require_relative 'util/monkey_patches'
|
21
|
+
require 'benchmark'
|
22
|
+
|
23
|
+
# These are all for backward compatibility -- these are methods that used
|
24
|
+
# to be in Puppet::Util but have been moved into external modules.
|
25
|
+
require_relative 'util/posix'
|
26
|
+
extend Puppet::Util::POSIX
|
27
|
+
|
28
|
+
require_relative 'util/windows/process' if Puppet::Util::Platform.windows?
|
29
|
+
|
30
|
+
extend Puppet::Util::SymbolicFileMode
|
31
|
+
|
32
|
+
def default_env
|
33
|
+
Puppet.features.microsoft_windows? ?
|
34
|
+
:windows :
|
35
|
+
:posix
|
36
|
+
end
|
37
|
+
module_function :default_env
|
38
|
+
|
39
|
+
def create_erb(content)
|
40
|
+
ERB.new(content, trim_mode: '-')
|
41
|
+
end
|
42
|
+
module_function :create_erb
|
43
|
+
|
44
|
+
# @deprecated Use ENV instead
|
45
|
+
# @api private
|
46
|
+
def get_env(name, mode = default_env)
|
47
|
+
ENV.fetch(name, nil)
|
48
|
+
end
|
49
|
+
module_function :get_env
|
50
|
+
|
51
|
+
# @deprecated Use ENV instead
|
52
|
+
# @api private
|
53
|
+
def get_environment(mode = default_env)
|
54
|
+
ENV.to_hash
|
55
|
+
end
|
56
|
+
module_function :get_environment
|
57
|
+
|
58
|
+
# @deprecated Use ENV instead
|
59
|
+
# @api private
|
60
|
+
def clear_environment(mode = default_env)
|
61
|
+
ENV.clear
|
62
|
+
end
|
63
|
+
module_function :clear_environment
|
64
|
+
|
65
|
+
# @deprecated Use ENV instead
|
66
|
+
# @api private
|
67
|
+
def set_env(name, value = nil, mode = default_env)
|
68
|
+
ENV[name] = value
|
69
|
+
end
|
70
|
+
module_function :set_env
|
71
|
+
|
72
|
+
# @deprecated Use ENV instead
|
73
|
+
# @api private
|
74
|
+
def merge_environment(env_hash, mode = default_env)
|
75
|
+
ENV.merge!(hash.transform_keys(&:to_s))
|
76
|
+
end
|
77
|
+
module_function :merge_environment
|
78
|
+
|
79
|
+
# Run some code with a specific environment. Resets the environment back to
|
80
|
+
# what it was at the end of the code.
|
81
|
+
#
|
82
|
+
# @param hash [Hash{String,Symbol => String}] Environment variables to override the current environment.
|
83
|
+
# @param mode [Symbol] ignored
|
84
|
+
def withenv(hash, mode = :posix)
|
85
|
+
saved = ENV.to_hash
|
86
|
+
begin
|
87
|
+
ENV.merge!(hash.transform_keys(&:to_s))
|
88
|
+
yield
|
89
|
+
ensure
|
90
|
+
ENV.replace(saved)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
module_function :withenv
|
94
|
+
|
95
|
+
# Execute a given chunk of code with a new umask.
|
96
|
+
def self.withumask(mask)
|
97
|
+
cur = File.umask(mask)
|
98
|
+
|
99
|
+
begin
|
100
|
+
yield
|
101
|
+
ensure
|
102
|
+
File.umask(cur)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Change the process to a different user
|
107
|
+
def self.chuser
|
108
|
+
group = Puppet[:group]
|
109
|
+
if group
|
110
|
+
begin
|
111
|
+
Puppet::Util::SUIDManager.change_group(group, true)
|
112
|
+
rescue => detail
|
113
|
+
Puppet.warning _("could not change to group %{group}: %{detail}") % { group: group.inspect, detail: detail }
|
114
|
+
$stderr.puts _("could not change to group %{group}") % { group: group.inspect }
|
115
|
+
|
116
|
+
# Don't exit on failed group changes, since it's
|
117
|
+
# not fatal
|
118
|
+
# exit(74)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
user = Puppet[:user]
|
123
|
+
if user
|
124
|
+
begin
|
125
|
+
Puppet::Util::SUIDManager.change_user(user, true)
|
126
|
+
rescue => detail
|
127
|
+
$stderr.puts _("Could not change to user %{user}: %{detail}") % { user: user, detail: detail }
|
128
|
+
exit(74)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
# Create instance methods for each of the log levels. This allows
|
134
|
+
# the messages to be a little richer. Most classes will be calling this
|
135
|
+
# method.
|
136
|
+
def self.logmethods(klass, useself = true)
|
137
|
+
Puppet::Util::Log.eachlevel { |level|
|
138
|
+
klass.send(:define_method, level, proc { |args|
|
139
|
+
args = args.join(" ") if args.is_a?(Array)
|
140
|
+
if useself
|
141
|
+
|
142
|
+
Puppet::Util::Log.create(
|
143
|
+
:level => level,
|
144
|
+
:source => self,
|
145
|
+
:message => args
|
146
|
+
)
|
147
|
+
else
|
148
|
+
|
149
|
+
Puppet::Util::Log.create(
|
150
|
+
:level => level,
|
151
|
+
:message => args
|
152
|
+
)
|
153
|
+
end
|
154
|
+
})
|
155
|
+
}
|
156
|
+
end
|
157
|
+
|
158
|
+
# execute a block of work and based on the logging level provided, log the provided message with the seconds taken
|
159
|
+
# The message 'msg' should include string ' in %{seconds} seconds' as part of the message and any content should escape
|
160
|
+
# any percent signs '%' so that they are not interpreted as formatting commands
|
161
|
+
# escaped_str = str.gsub(/%/, '%%')
|
162
|
+
#
|
163
|
+
# @param msg [String] the message to be formated to assigned the %{seconds} seconds take to execute,
|
164
|
+
# other percent signs '%' need to be escaped
|
165
|
+
# @param level [Symbol] the logging level for this message
|
166
|
+
# @param object [Object] The object use for logging the message
|
167
|
+
def benchmark(*args)
|
168
|
+
msg = args.pop
|
169
|
+
level = args.pop
|
170
|
+
object = if args.empty?
|
171
|
+
if respond_to?(level)
|
172
|
+
self
|
173
|
+
else
|
174
|
+
Puppet
|
175
|
+
end
|
176
|
+
else
|
177
|
+
args.pop
|
178
|
+
end
|
179
|
+
|
180
|
+
# TRANSLATORS 'benchmark' is a method name and should not be translated
|
181
|
+
raise Puppet::DevError, _("Failed to provide level to benchmark") unless level
|
182
|
+
|
183
|
+
unless level == :none or object.respond_to? level
|
184
|
+
raise Puppet::DevError, _("Benchmarked object does not respond to %{value}") % { value: level }
|
185
|
+
end
|
186
|
+
|
187
|
+
# Only benchmark if our log level is high enough
|
188
|
+
if level != :none and Puppet::Util::Log.sendlevel?(level)
|
189
|
+
seconds = Benchmark.realtime {
|
190
|
+
yield
|
191
|
+
}
|
192
|
+
object.send(level, msg % { seconds: "%0.2f" % seconds })
|
193
|
+
seconds
|
194
|
+
else
|
195
|
+
yield
|
196
|
+
end
|
197
|
+
end
|
198
|
+
module_function :benchmark
|
199
|
+
|
200
|
+
# Resolve a path for an executable to the absolute path. This tries to behave
|
201
|
+
# in the same manner as the unix `which` command and uses the `PATH`
|
202
|
+
# environment variable.
|
203
|
+
#
|
204
|
+
# @api public
|
205
|
+
# @param bin [String] the name of the executable to find.
|
206
|
+
# @return [String] the absolute path to the found executable.
|
207
|
+
def which(bin)
|
208
|
+
if absolute_path?(bin)
|
209
|
+
return bin if FileTest.file? bin and FileTest.executable? bin
|
210
|
+
else
|
211
|
+
exts = ENV.fetch('PATHEXT', nil)
|
212
|
+
exts = exts ? exts.split(File::PATH_SEPARATOR) : %w[.COM .EXE .BAT .CMD]
|
213
|
+
ENV.fetch('PATH').split(File::PATH_SEPARATOR).each do |dir|
|
214
|
+
dest = File.expand_path(File.join(dir, bin))
|
215
|
+
rescue ArgumentError => e
|
216
|
+
# if the user's PATH contains a literal tilde (~) character and HOME is not set, we may get
|
217
|
+
# an ArgumentError here. Let's check to see if that is the case; if not, re-raise whatever error
|
218
|
+
# was thrown.
|
219
|
+
if e.to_s =~ /HOME/ and (ENV['HOME'].nil? || ENV.fetch('HOME', nil) == "")
|
220
|
+
# if we get here they have a tilde in their PATH. We'll issue a single warning about this and then
|
221
|
+
# ignore this path element and carry on with our lives.
|
222
|
+
# TRANSLATORS PATH and HOME are environment variables and should not be translated
|
223
|
+
Puppet::Util::Warnings.warnonce(_("PATH contains a ~ character, and HOME is not set; ignoring PATH element '%{dir}'.") % { dir: dir })
|
224
|
+
elsif e.to_s =~ /doesn't exist|can't find user/
|
225
|
+
# ...otherwise, we just skip the non-existent entry, and do nothing.
|
226
|
+
# TRANSLATORS PATH is an environment variable and should not be translated
|
227
|
+
Puppet::Util::Warnings.warnonce(_("Couldn't expand PATH containing a ~ character; ignoring PATH element '%{dir}'.") % { dir: dir })
|
228
|
+
else
|
229
|
+
raise
|
230
|
+
end
|
231
|
+
else
|
232
|
+
if Puppet::Util::Platform.windows? && File.extname(dest).empty?
|
233
|
+
exts.each do |ext|
|
234
|
+
destext = File.expand_path(dest + ext)
|
235
|
+
return destext if FileTest.file? destext and FileTest.executable? destext
|
236
|
+
end
|
237
|
+
end
|
238
|
+
return dest if FileTest.file? dest and FileTest.executable? dest
|
239
|
+
end
|
240
|
+
end
|
241
|
+
nil
|
242
|
+
end
|
243
|
+
module_function :which
|
244
|
+
|
245
|
+
# Determine in a platform-specific way whether a path is absolute. This
|
246
|
+
# defaults to the local platform if none is specified.
|
247
|
+
#
|
248
|
+
# Escape once for the string literal, and once for the regex.
|
249
|
+
slash = '[\\\\/]'
|
250
|
+
label = '[^\\\\/]+'
|
251
|
+
AbsolutePathWindows = /^(?:(?:[A-Z]:#{slash})|(?:#{slash}#{slash}#{label}#{slash}#{label})|(?:#{slash}#{slash}\?#{slash}#{label}))/io
|
252
|
+
AbsolutePathPosix = %r{^/}
|
253
|
+
def absolute_path?(path, platform = nil)
|
254
|
+
unless path.is_a?(String)
|
255
|
+
Puppet.warning("Cannot check if #{path} is an absolute path because it is a '#{path.class}' and not a String'")
|
256
|
+
return false
|
257
|
+
end
|
258
|
+
|
259
|
+
# Ruby only sets File::ALT_SEPARATOR on Windows and the Ruby standard
|
260
|
+
# library uses that to test what platform it's on. Normally in Puppet we
|
261
|
+
# would use Puppet.features.microsoft_windows?, but this method needs to
|
262
|
+
# be called during the initialization of features so it can't depend on
|
263
|
+
# that.
|
264
|
+
#
|
265
|
+
# @deprecated Use ruby's built-in methods to determine if a path is absolute.
|
266
|
+
platform ||= Puppet::Util::Platform.windows? ? :windows : :posix
|
267
|
+
regex = case platform
|
268
|
+
when :windows
|
269
|
+
AbsolutePathWindows
|
270
|
+
when :posix
|
271
|
+
AbsolutePathPosix
|
272
|
+
else
|
273
|
+
raise Puppet::DevError, _("unknown platform %{platform} in absolute_path") % { platform: platform }
|
274
|
+
end
|
275
|
+
|
276
|
+
!!(path =~ regex)
|
277
|
+
end
|
278
|
+
module_function :absolute_path?
|
279
|
+
|
280
|
+
# Convert a path to a file URI
|
281
|
+
def path_to_uri(path)
|
282
|
+
return unless path
|
283
|
+
|
284
|
+
params = { :scheme => 'file' }
|
285
|
+
|
286
|
+
if Puppet::Util::Platform.windows?
|
287
|
+
path = path.tr('\\', '/')
|
288
|
+
|
289
|
+
unc = %r{^//([^/]+)(/.+)}.match(path)
|
290
|
+
if unc
|
291
|
+
params[:host] = unc[1]
|
292
|
+
path = unc[2]
|
293
|
+
elsif path =~ %r{^[a-z]:/}i
|
294
|
+
path = '/' + path
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
# have to split *after* any relevant escaping
|
299
|
+
params[:path], params[:query] = uri_encode(path).split('?')
|
300
|
+
search_for_fragment = params[:query] ? :query : :path
|
301
|
+
if params[search_for_fragment].include?('#')
|
302
|
+
params[search_for_fragment], _, params[:fragment] = params[search_for_fragment].rpartition('#')
|
303
|
+
end
|
304
|
+
|
305
|
+
begin
|
306
|
+
URI::Generic.build(params)
|
307
|
+
rescue => detail
|
308
|
+
raise Puppet::Error, _("Failed to convert '%{path}' to URI: %{detail}") % { path: path, detail: detail }, detail.backtrace
|
309
|
+
end
|
310
|
+
end
|
311
|
+
module_function :path_to_uri
|
312
|
+
|
313
|
+
# Get the path component of a URI
|
314
|
+
def uri_to_path(uri)
|
315
|
+
return unless uri.is_a?(URI)
|
316
|
+
|
317
|
+
# CGI.unescape doesn't handle space rules properly in uri paths
|
318
|
+
# URI.unescape does, but returns strings in their original encoding
|
319
|
+
path = uri_unescape(uri.path.encode(Encoding::UTF_8))
|
320
|
+
|
321
|
+
if Puppet::Util::Platform.windows? && uri.scheme == 'file'
|
322
|
+
if uri.host && !uri.host.empty?
|
323
|
+
path = "//#{uri.host}" + path # UNC
|
324
|
+
else
|
325
|
+
path.sub!(%r{^/}, '')
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
path
|
330
|
+
end
|
331
|
+
module_function :uri_to_path
|
332
|
+
|
333
|
+
RFC_3986_URI_REGEX = %r{^(?<scheme>(?:[^:/?#]+):)?(?<authority>//(?:[^/?#]*))?(?<path>[^?#]*)(?:\?(?<query>[^#]*))?(?:#(?<fragment>.*))?$}
|
334
|
+
|
335
|
+
# Percent-encodes a URI query parameter per RFC3986 - https://tools.ietf.org/html/rfc3986
|
336
|
+
#
|
337
|
+
# The output will correctly round-trip through URI.unescape
|
338
|
+
#
|
339
|
+
# @param [String query_string] A URI query parameter that may contain reserved
|
340
|
+
# characters that must be percent encoded for the key or value to be
|
341
|
+
# properly decoded as part of a larger query string:
|
342
|
+
#
|
343
|
+
# query
|
344
|
+
# encodes as : query
|
345
|
+
#
|
346
|
+
# query_with_special=chars like&and * and# plus+this
|
347
|
+
# encodes as:
|
348
|
+
# query_with_special%3Dchars%20like%26and%20%2A%20and%23%20plus%2Bthis
|
349
|
+
#
|
350
|
+
# Note: Also usable by fragments, but not suitable for paths
|
351
|
+
#
|
352
|
+
# @return [String] a new string containing an encoded query string per the
|
353
|
+
# rules of RFC3986.
|
354
|
+
#
|
355
|
+
# In particular,
|
356
|
+
# query will encode + as %2B and space as %20
|
357
|
+
def uri_query_encode(query_string)
|
358
|
+
return nil if query_string.nil?
|
359
|
+
|
360
|
+
# query can encode space to %20 OR +
|
361
|
+
# + MUST be encoded as %2B
|
362
|
+
# in RFC3968 both query and fragment are defined as:
|
363
|
+
# = *( pchar / "/" / "?" )
|
364
|
+
# CGI.escape turns space into + which is the most backward compatible
|
365
|
+
# however it doesn't roundtrip through URI.unescape which prefers %20
|
366
|
+
CGI.escape(query_string).gsub('+', '%20')
|
367
|
+
end
|
368
|
+
module_function :uri_query_encode
|
369
|
+
|
370
|
+
# Percent-encodes a URI string per RFC3986 - https://tools.ietf.org/html/rfc3986
|
371
|
+
#
|
372
|
+
# Properly handles escaping rules for paths, query strings and fragments
|
373
|
+
# independently
|
374
|
+
#
|
375
|
+
# The output is safe to pass to URI.parse or URI::Generic.build and will
|
376
|
+
# correctly round-trip through URI.unescape
|
377
|
+
#
|
378
|
+
# @param [String path] A URI string that may be in the form of:
|
379
|
+
#
|
380
|
+
# http://foo.com/bar?query
|
381
|
+
# file://tmp/foo bar
|
382
|
+
# //foo.com/bar?query
|
383
|
+
# /bar?query
|
384
|
+
# bar?query
|
385
|
+
# bar
|
386
|
+
# .
|
387
|
+
# C:\Windows\Temp
|
388
|
+
#
|
389
|
+
# Note that with no specified scheme, authority or query parameter delimiter
|
390
|
+
# ? that a naked string will be treated as a path.
|
391
|
+
#
|
392
|
+
# Note that if query parameters need to contain data such as & or =
|
393
|
+
# that this method should not be used, as there is no way to differentiate
|
394
|
+
# query parameter data from query delimiters when multiple parameters
|
395
|
+
# are specified
|
396
|
+
#
|
397
|
+
# @param [Hash{Symbol=>String} opts] Options to alter encoding
|
398
|
+
# @option opts [Array<Symbol>] :allow_fragment defaults to false. When false
|
399
|
+
# will treat # as part of a path or query and not a fragment delimiter
|
400
|
+
#
|
401
|
+
# @return [String] a new string containing appropriate portions of the URI
|
402
|
+
# encoded per the rules of RFC3986.
|
403
|
+
# In particular,
|
404
|
+
# path will not encode +, but will encode space as %20
|
405
|
+
# query will encode + as %2B and space as %20
|
406
|
+
# fragment behaves like query
|
407
|
+
def uri_encode(path, opts = { :allow_fragment => false })
|
408
|
+
raise ArgumentError, _('path may not be nil') if path.nil?
|
409
|
+
|
410
|
+
encoded = ''.dup
|
411
|
+
|
412
|
+
# parse uri into named matches, then reassemble properly encoded
|
413
|
+
parts = path.match(RFC_3986_URI_REGEX)
|
414
|
+
|
415
|
+
encoded += parts[:scheme] unless parts[:scheme].nil?
|
416
|
+
encoded += parts[:authority] unless parts[:authority].nil?
|
417
|
+
|
418
|
+
# path requires space to be encoded as %20 (NEVER +)
|
419
|
+
# + should be left unencoded
|
420
|
+
# URI::parse and URI::Generic.build don't like paths encoded with CGI.escape
|
421
|
+
# URI.escape does not change / to %2F and : to %3A like CGI.escape
|
422
|
+
#
|
423
|
+
encoded += rfc2396_escape(parts[:path]) unless parts[:path].nil?
|
424
|
+
|
425
|
+
# each query parameter
|
426
|
+
unless parts[:query].nil?
|
427
|
+
query_string = parts[:query].split('&').map do |pair|
|
428
|
+
# can optionally be separated by an =
|
429
|
+
pair.split('=').map do |v|
|
430
|
+
uri_query_encode(v)
|
431
|
+
end.join('=')
|
432
|
+
end.join('&')
|
433
|
+
encoded += '?' + query_string
|
434
|
+
end
|
435
|
+
|
436
|
+
encoded += ((opts[:allow_fragment] ? '#' : '%23') + uri_query_encode(parts[:fragment])) unless parts[:fragment].nil?
|
437
|
+
|
438
|
+
encoded
|
439
|
+
end
|
440
|
+
module_function :uri_encode
|
441
|
+
|
442
|
+
# From https://github.com/ruby/ruby/blob/v2_7_3/lib/uri/rfc2396_parser.rb#L24-L46
|
443
|
+
ALPHA = "a-zA-Z"
|
444
|
+
ALNUM = "#{ALPHA}\\d"
|
445
|
+
UNRESERVED = "\\-_.!~*'()#{ALNUM}"
|
446
|
+
RESERVED = ";/?:@&=+$,\\[\\]"
|
447
|
+
UNSAFE = Regexp.new("[^#{UNRESERVED}#{RESERVED}]").freeze
|
448
|
+
|
449
|
+
HEX = "a-fA-F\\d"
|
450
|
+
ESCAPED = Regexp.new("%[#{HEX}]{2}").freeze
|
451
|
+
|
452
|
+
def rfc2396_escape(str)
|
453
|
+
str.gsub(UNSAFE) do |match|
|
454
|
+
tmp = ''.dup
|
455
|
+
match.each_byte do |uc|
|
456
|
+
tmp << sprintf('%%%02X', uc)
|
457
|
+
end
|
458
|
+
tmp
|
459
|
+
end.force_encoding(Encoding::US_ASCII)
|
460
|
+
end
|
461
|
+
module_function :rfc2396_escape
|
462
|
+
|
463
|
+
def uri_unescape(str)
|
464
|
+
enc = str.encoding
|
465
|
+
enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
|
466
|
+
str.gsub(ESCAPED) { [::Regexp.last_match(0)[1, 2]].pack('H2').force_encoding(enc) }
|
467
|
+
end
|
468
|
+
module_function :uri_unescape
|
469
|
+
|
470
|
+
def safe_posix_fork(stdin = $stdin, stdout = $stdout, stderr = $stderr, &block)
|
471
|
+
Kernel.fork do
|
472
|
+
STDIN.reopen(stdin)
|
473
|
+
STDOUT.reopen(stdout)
|
474
|
+
STDERR.reopen(stderr)
|
475
|
+
|
476
|
+
$stdin = STDIN
|
477
|
+
$stdout = STDOUT
|
478
|
+
$stderr = STDERR
|
479
|
+
|
480
|
+
begin
|
481
|
+
d = Dir.new('/proc/self/fd')
|
482
|
+
ignore_fds = ['.', '..', d.fileno.to_s]
|
483
|
+
d.each_child do |f|
|
484
|
+
next if ignore_fds.include?(f) || f.to_i < 3
|
485
|
+
|
486
|
+
begin
|
487
|
+
IO.new(f.to_i).close
|
488
|
+
rescue
|
489
|
+
nil
|
490
|
+
end
|
491
|
+
end
|
492
|
+
rescue Errno::ENOENT, Errno::ENOTDIR # /proc/self/fd not found, /proc/self not a dir
|
493
|
+
3.upto(256) { |fd|
|
494
|
+
begin
|
495
|
+
IO.new(fd).close
|
496
|
+
rescue
|
497
|
+
nil
|
498
|
+
end
|
499
|
+
}
|
500
|
+
end
|
501
|
+
|
502
|
+
block.call if block
|
503
|
+
end
|
504
|
+
end
|
505
|
+
module_function :safe_posix_fork
|
506
|
+
|
507
|
+
def symbolizehash(hash)
|
508
|
+
newhash = {}
|
509
|
+
hash.each do |name, val|
|
510
|
+
name = name.intern if name.respond_to? :intern
|
511
|
+
newhash[name] = val
|
512
|
+
end
|
513
|
+
newhash
|
514
|
+
end
|
515
|
+
module_function :symbolizehash
|
516
|
+
|
517
|
+
# Just benchmark, with no logging.
|
518
|
+
def thinmark
|
519
|
+
Benchmark.realtime {
|
520
|
+
yield
|
521
|
+
}
|
522
|
+
end
|
523
|
+
|
524
|
+
module_function :thinmark
|
525
|
+
|
526
|
+
PUPPET_STACK_INSERTION_FRAME = /.*puppet_stack\.rb.*in.*`stack'/
|
527
|
+
|
528
|
+
# utility method to get the current call stack and format it to a human-readable string (which some IDEs/editors
|
529
|
+
# will recognize as links to the line numbers in the trace)
|
530
|
+
def self.pretty_backtrace(backtrace = caller(1), puppetstack = [])
|
531
|
+
format_backtrace_array(backtrace, puppetstack).join("\n")
|
532
|
+
end
|
533
|
+
|
534
|
+
# arguments may be a Ruby stack, with an optional Puppet stack argument,
|
535
|
+
# or just a Puppet stack.
|
536
|
+
# stacks may be an Array of Strings "/foo.rb:0 in `blah'" or
|
537
|
+
# an Array of Arrays that represent a frame: ["/foo.pp", 0]
|
538
|
+
def self.format_backtrace_array(primary_stack, puppetstack = [])
|
539
|
+
primary_stack.flat_map do |frame|
|
540
|
+
frame = format_puppetstack_frame(frame) if frame.is_a?(Array)
|
541
|
+
primary_frame = resolve_stackframe(frame)
|
542
|
+
|
543
|
+
if primary_frame =~ PUPPET_STACK_INSERTION_FRAME && !puppetstack.empty?
|
544
|
+
[resolve_stackframe(format_puppetstack_frame(puppetstack.shift)),
|
545
|
+
primary_frame]
|
546
|
+
else
|
547
|
+
primary_frame
|
548
|
+
end
|
549
|
+
end
|
550
|
+
end
|
551
|
+
|
552
|
+
def self.resolve_stackframe(frame)
|
553
|
+
_, path, rest = /^(.*):(\d+.*)$/.match(frame).to_a
|
554
|
+
if path
|
555
|
+
path = begin
|
556
|
+
Pathname(path).realpath
|
557
|
+
rescue
|
558
|
+
path
|
559
|
+
end
|
560
|
+
"#{path}:#{rest}"
|
561
|
+
else
|
562
|
+
frame
|
563
|
+
end
|
564
|
+
end
|
565
|
+
|
566
|
+
def self.format_puppetstack_frame(file_and_lineno)
|
567
|
+
file_and_lineno.join(':')
|
568
|
+
end
|
569
|
+
|
570
|
+
# Replace a file, securely. This takes a block, and passes it the file
|
571
|
+
# handle of a file open for writing. Write the replacement content inside
|
572
|
+
# the block and it will safely replace the target file.
|
573
|
+
#
|
574
|
+
# This method will make no changes to the target file until the content is
|
575
|
+
# successfully written and the block returns without raising an error.
|
576
|
+
#
|
577
|
+
# As far as possible the state of the existing file, such as mode, is
|
578
|
+
# preserved. This works hard to avoid loss of any metadata, but will result
|
579
|
+
# in an inode change for the file.
|
580
|
+
#
|
581
|
+
# Arguments: `filename`, `default_mode`, `staging_location`
|
582
|
+
#
|
583
|
+
# The filename is the file we are going to replace.
|
584
|
+
#
|
585
|
+
# The default_mode is the mode to use when the target file doesn't already
|
586
|
+
# exist; if the file is present we copy the existing mode/owner/group values
|
587
|
+
# across. The default_mode can be expressed as an octal integer, a numeric string (ie '0664')
|
588
|
+
# or a symbolic file mode.
|
589
|
+
#
|
590
|
+
# The staging_location is a location to render the temporary file before
|
591
|
+
# moving the file to it's final location.
|
592
|
+
|
593
|
+
DEFAULT_POSIX_MODE = 0o644
|
594
|
+
DEFAULT_WINDOWS_MODE = nil
|
595
|
+
|
596
|
+
def replace_file(file, default_mode, staging_location: nil, validate_callback: nil, &block)
|
597
|
+
raise Puppet::DevError, _("replace_file requires a block") unless block_given?
|
598
|
+
|
599
|
+
if default_mode
|
600
|
+
unless valid_symbolic_mode?(default_mode)
|
601
|
+
raise Puppet::DevError, _("replace_file default_mode: %{default_mode} is invalid") % { default_mode: default_mode }
|
602
|
+
end
|
603
|
+
|
604
|
+
mode = symbolic_mode_to_int(normalize_symbolic_mode(default_mode))
|
605
|
+
elsif Puppet::Util::Platform.windows?
|
606
|
+
mode = DEFAULT_WINDOWS_MODE
|
607
|
+
else
|
608
|
+
mode = DEFAULT_POSIX_MODE
|
609
|
+
end
|
610
|
+
|
611
|
+
begin
|
612
|
+
file = Puppet::FileSystem.pathname(file)
|
613
|
+
|
614
|
+
# encoding for Uniquefile is not important here because the caller writes to it as it sees fit
|
615
|
+
if staging_location
|
616
|
+
tempfile = Puppet::FileSystem::Uniquefile.new(Puppet::FileSystem.basename_string(file), staging_location)
|
617
|
+
else
|
618
|
+
tempfile = Puppet::FileSystem::Uniquefile.new(Puppet::FileSystem.basename_string(file), Puppet::FileSystem.dir_string(file))
|
619
|
+
end
|
620
|
+
|
621
|
+
effective_mode =
|
622
|
+
unless Puppet::Util::Platform.windows?
|
623
|
+
# Grab the current file mode, and fall back to the defaults.
|
624
|
+
|
625
|
+
if Puppet::FileSystem.exist?(file)
|
626
|
+
stat = Puppet::FileSystem.lstat(file)
|
627
|
+
tempfile.chown(stat.uid, stat.gid)
|
628
|
+
stat.mode
|
629
|
+
else
|
630
|
+
mode
|
631
|
+
end
|
632
|
+
end
|
633
|
+
|
634
|
+
# OK, now allow the caller to write the content of the file.
|
635
|
+
yield tempfile
|
636
|
+
|
637
|
+
if effective_mode
|
638
|
+
# We only care about the bottom four slots, which make the real mode,
|
639
|
+
# and not the rest of the platform stat call fluff and stuff.
|
640
|
+
tempfile.chmod(effective_mode & 0o7777)
|
641
|
+
end
|
642
|
+
|
643
|
+
# Now, make sure the data (which includes the mode) is safe on disk.
|
644
|
+
tempfile.flush
|
645
|
+
begin
|
646
|
+
tempfile.fsync
|
647
|
+
rescue NotImplementedError
|
648
|
+
# fsync may not be implemented by Ruby on all platforms, but
|
649
|
+
# there is absolutely no recovery path if we detect that. So, we just
|
650
|
+
# ignore the return code.
|
651
|
+
#
|
652
|
+
# However, don't be fooled: that is accepting that we are running in
|
653
|
+
# an unsafe fashion. If you are porting to a new platform don't stub
|
654
|
+
# that out.
|
655
|
+
end
|
656
|
+
|
657
|
+
tempfile.close
|
658
|
+
|
659
|
+
if validate_callback
|
660
|
+
validate_callback.call(tempfile.path)
|
661
|
+
end
|
662
|
+
|
663
|
+
if Puppet::Util::Platform.windows?
|
664
|
+
# Windows ReplaceFile needs a file to exist, so touch handles this
|
665
|
+
unless Puppet::FileSystem.exist?(file)
|
666
|
+
Puppet::FileSystem.touch(file)
|
667
|
+
if mode
|
668
|
+
Puppet::Util::Windows::Security.set_mode(mode, Puppet::FileSystem.path_string(file))
|
669
|
+
end
|
670
|
+
end
|
671
|
+
# Yes, the arguments are reversed compared to the rename in the rest
|
672
|
+
# of the world.
|
673
|
+
Puppet::Util::Windows::File.replace_file(FileSystem.path_string(file), tempfile.path)
|
674
|
+
|
675
|
+
else
|
676
|
+
# MRI Ruby checks for this and raises an error, while JRuby removes the directory
|
677
|
+
# and replaces it with a file. This makes the our version of replace_file() consistent
|
678
|
+
if Puppet::FileSystem.exist?(file) && Puppet::FileSystem.directory?(file)
|
679
|
+
raise Errno::EISDIR, _("Is a directory: %{directory}") % { directory: file }
|
680
|
+
end
|
681
|
+
|
682
|
+
File.rename(tempfile.path, Puppet::FileSystem.path_string(file))
|
683
|
+
end
|
684
|
+
ensure
|
685
|
+
# in case an error occurred before we renamed the temp file, make sure it
|
686
|
+
# gets deleted
|
687
|
+
if tempfile
|
688
|
+
tempfile.close!
|
689
|
+
end
|
690
|
+
end
|
691
|
+
|
692
|
+
# Ideally, we would now fsync the directory as well, but Ruby doesn't
|
693
|
+
# have support for that, and it doesn't matter /that/ much...
|
694
|
+
|
695
|
+
# Return something true, and possibly useful.
|
696
|
+
file
|
697
|
+
end
|
698
|
+
module_function :replace_file
|
699
|
+
|
700
|
+
# Executes a block of code, wrapped with some special exception handling. Causes the ruby interpreter to
|
701
|
+
# exit if the block throws an exception.
|
702
|
+
#
|
703
|
+
# @api public
|
704
|
+
# @param [String] message a message to log if the block fails
|
705
|
+
# @param [Integer] code the exit code that the ruby interpreter should return if the block fails
|
706
|
+
# @yield
|
707
|
+
def exit_on_fail(message, code = 1)
|
708
|
+
yield
|
709
|
+
# First, we need to check and see if we are catching a SystemExit error. These will be raised
|
710
|
+
# when we daemonize/fork, and they do not necessarily indicate a failure case.
|
711
|
+
rescue SystemExit => err
|
712
|
+
raise err
|
713
|
+
|
714
|
+
# Now we need to catch *any* other kind of exception, because we may be calling third-party
|
715
|
+
# code (e.g. webrick), and we have no idea what they might throw.
|
716
|
+
rescue Exception => err
|
717
|
+
## NOTE: when debugging spec failures, these two lines can be very useful
|
718
|
+
# puts err.inspect
|
719
|
+
# puts Puppet::Util.pretty_backtrace(err.backtrace)
|
720
|
+
Puppet.log_exception(err, "#{message}: #{err}")
|
721
|
+
Puppet::Util::Log.force_flushqueue()
|
722
|
+
exit(code)
|
723
|
+
end
|
724
|
+
module_function :exit_on_fail
|
725
|
+
|
726
|
+
def deterministic_rand(seed, max)
|
727
|
+
deterministic_rand_int(seed, max).to_s
|
728
|
+
end
|
729
|
+
module_function :deterministic_rand
|
730
|
+
|
731
|
+
def deterministic_rand_int(seed, max)
|
732
|
+
Random.new(seed).rand(max)
|
733
|
+
end
|
734
|
+
module_function :deterministic_rand_int
|
735
|
+
|
736
|
+
# Executes a block of code, wrapped around Facter.load_external(false) and
|
737
|
+
# Facter.load_external(true) which will cause Facter to not evaluate external facts.
|
738
|
+
def skip_external_facts
|
739
|
+
return yield unless Puppet.runtime[:facter].load_external?
|
740
|
+
|
741
|
+
begin
|
742
|
+
Puppet.runtime[:facter].load_external(false)
|
743
|
+
yield
|
744
|
+
ensure
|
745
|
+
Puppet.runtime[:facter].load_external(true)
|
746
|
+
end
|
747
|
+
end
|
748
|
+
module_function :skip_external_facts
|
749
|
+
end
|
750
|
+
end
|
751
|
+
|
752
|
+
require_relative 'util/errors'
|
753
|
+
require_relative 'util/metaid'
|
754
|
+
require_relative 'util/classgen'
|
755
|
+
require_relative 'util/docs'
|
756
|
+
require_relative 'util/execution'
|
757
|
+
require_relative 'util/logging'
|
758
|
+
require_relative 'util/package'
|
759
|
+
require_relative 'util/warnings'
|