openvox 8.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +19 -0
- data/CODEOWNERS +11 -0
- data/CODE_OF_CONDUCT.md +70 -0
- data/Gemfile +87 -0
- data/Guardfile.example +76 -0
- data/LICENSE +202 -0
- data/README.md +63 -0
- data/Rakefile +170 -0
- data/bin/puppet +10 -0
- data/conf/environment.conf +18 -0
- data/conf/fileserver.conf +32 -0
- data/conf/hiera.yaml +11 -0
- data/conf/puppet.conf +6 -0
- data/examples/enc/regexp_nodes/classes/databases +2 -0
- data/examples/enc/regexp_nodes/classes/webservers +2 -0
- data/examples/enc/regexp_nodes/environment/development +2 -0
- data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
- data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
- data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
- data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
- data/examples/hiera/README.md +102 -0
- data/examples/hiera/data/common.yaml +12 -0
- data/examples/hiera/data/dc1.yaml +6 -0
- data/examples/hiera/hiera.yaml +15 -0
- data/examples/hiera/modules/ntp/data/common.yaml +4 -0
- data/examples/hiera/modules/ntp/hiera.yaml +9 -0
- data/examples/hiera/modules/ntp/manifests/config.pp +18 -0
- data/examples/hiera/modules/ntp/templates/ntp.conf.epp +3 -0
- data/examples/hiera/modules/users/manifests/common.pp +9 -0
- data/examples/hiera/modules/users/manifests/dc1.pp +9 -0
- data/examples/hiera/site.pp +3 -0
- data/examples/nagios/check_puppet.rb +123 -0
- data/ext/README.md +13 -0
- data/ext/build_defaults.yaml +18 -0
- data/ext/debian/puppet.default +4 -0
- data/ext/debian/puppet.init +113 -0
- data/ext/hiera/hiera.yaml +15 -0
- data/ext/osx/puppet.plist +32 -0
- data/ext/project_data.yaml +20 -0
- data/ext/redhat/client.init +169 -0
- data/ext/redhat/client.sysconfig +2 -0
- data/ext/solaris/smf/puppet +44 -0
- data/ext/solaris/smf/puppet.xml +46 -0
- data/ext/suse/client.init +141 -0
- data/ext/systemd/puppet.service +26 -0
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/windows/service/daemon.bat +6 -0
- data/ext/windows/service/daemon.rb +219 -0
- data/install.rb +428 -0
- data/lib/hiera/puppet_function.rb +86 -0
- data/lib/hiera/scope.rb +92 -0
- data/lib/hiera_puppet.rb +78 -0
- data/lib/puppet/agent/disabler.rb +55 -0
- data/lib/puppet/agent/locker.rb +46 -0
- data/lib/puppet/agent.rb +178 -0
- data/lib/puppet/application/agent.rb +527 -0
- data/lib/puppet/application/apply.rb +435 -0
- data/lib/puppet/application/catalog.rb +6 -0
- data/lib/puppet/application/config.rb +7 -0
- data/lib/puppet/application/describe.rb +255 -0
- data/lib/puppet/application/device.rb +440 -0
- data/lib/puppet/application/doc.rb +232 -0
- data/lib/puppet/application/epp.rb +7 -0
- data/lib/puppet/application/face_base.rb +277 -0
- data/lib/puppet/application/facts.rb +11 -0
- data/lib/puppet/application/filebucket.rb +324 -0
- data/lib/puppet/application/generate.rb +7 -0
- data/lib/puppet/application/help.rb +7 -0
- data/lib/puppet/application/indirection_base.rb +6 -0
- data/lib/puppet/application/lookup.rb +433 -0
- data/lib/puppet/application/module.rb +6 -0
- data/lib/puppet/application/node.rb +6 -0
- data/lib/puppet/application/parser.rb +7 -0
- data/lib/puppet/application/plugin.rb +6 -0
- data/lib/puppet/application/report.rb +6 -0
- data/lib/puppet/application/resource.rb +264 -0
- data/lib/puppet/application/script.rb +266 -0
- data/lib/puppet/application/ssl.rb +331 -0
- data/lib/puppet/application.rb +596 -0
- data/lib/puppet/application_support.rb +69 -0
- data/lib/puppet/coercion.rb +42 -0
- data/lib/puppet/compilable_resource_type.rb +17 -0
- data/lib/puppet/concurrent/lock.rb +15 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +18 -0
- data/lib/puppet/concurrent.rb +4 -0
- data/lib/puppet/configurer/downloader.rb +91 -0
- data/lib/puppet/configurer/fact_handler.rb +51 -0
- data/lib/puppet/configurer/plugin_handler.rb +61 -0
- data/lib/puppet/configurer.rb +759 -0
- data/lib/puppet/confine/any.rb +28 -0
- data/lib/puppet/confine/boolean.rb +47 -0
- data/lib/puppet/confine/exists.rb +21 -0
- data/lib/puppet/confine/false.rb +27 -0
- data/lib/puppet/confine/feature.rb +18 -0
- data/lib/puppet/confine/true.rb +28 -0
- data/lib/puppet/confine/variable.rb +61 -0
- data/lib/puppet/confine.rb +86 -0
- data/lib/puppet/confine_collection.rb +54 -0
- data/lib/puppet/confiner.rb +48 -0
- data/lib/puppet/context/trusted_information.rb +122 -0
- data/lib/puppet/context.rb +190 -0
- data/lib/puppet/daemon.rb +198 -0
- data/lib/puppet/data_binding.rb +16 -0
- data/lib/puppet/datatypes/error.rb +23 -0
- data/lib/puppet/datatypes/impl/error.rb +42 -0
- data/lib/puppet/datatypes.rb +218 -0
- data/lib/puppet/defaults.rb +2316 -0
- data/lib/puppet/environments.rb +599 -0
- data/lib/puppet/error.rb +142 -0
- data/lib/puppet/etc.rb +185 -0
- data/lib/puppet/external/dot.rb +315 -0
- data/lib/puppet/face/catalog/select.rb +51 -0
- data/lib/puppet/face/catalog.rb +167 -0
- data/lib/puppet/face/config.rb +266 -0
- data/lib/puppet/face/epp.rb +565 -0
- data/lib/puppet/face/facts.rb +176 -0
- data/lib/puppet/face/generate.rb +69 -0
- data/lib/puppet/face/help/action.erb +89 -0
- data/lib/puppet/face/help/face.erb +114 -0
- data/lib/puppet/face/help/global.erb +16 -0
- data/lib/puppet/face/help/man.erb +152 -0
- data/lib/puppet/face/help.rb +260 -0
- data/lib/puppet/face/module/changes.rb +44 -0
- data/lib/puppet/face/module/install.rb +149 -0
- data/lib/puppet/face/module/list.rb +271 -0
- data/lib/puppet/face/module/uninstall.rb +91 -0
- data/lib/puppet/face/module/upgrade.rb +89 -0
- data/lib/puppet/face/module.rb +21 -0
- data/lib/puppet/face/node/clean.rb +109 -0
- data/lib/puppet/face/node.rb +45 -0
- data/lib/puppet/face/parser.rb +226 -0
- data/lib/puppet/face/plugin.rb +62 -0
- data/lib/puppet/face/report.rb +54 -0
- data/lib/puppet/face/resource.rb +55 -0
- data/lib/puppet/face.rb +14 -0
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/feature/base.rb +76 -0
- data/lib/puppet/feature/bolt.rb +5 -0
- data/lib/puppet/feature/cfpropertylist.rb +5 -0
- data/lib/puppet/feature/eventlog.rb +7 -0
- data/lib/puppet/feature/hiera_eyaml.rb +5 -0
- data/lib/puppet/feature/hocon.rb +5 -0
- data/lib/puppet/feature/libuser.rb +10 -0
- data/lib/puppet/feature/msgpack.rb +5 -0
- data/lib/puppet/feature/pe_license.rb +6 -0
- data/lib/puppet/feature/pson.rb +6 -0
- data/lib/puppet/feature/selinux.rb +5 -0
- data/lib/puppet/feature/ssh.rb +5 -0
- data/lib/puppet/feature/telnet.rb +5 -0
- data/lib/puppet/feature/zlib.rb +7 -0
- data/lib/puppet/ffi/posix/constants.rb +16 -0
- data/lib/puppet/ffi/posix/functions.rb +25 -0
- data/lib/puppet/ffi/posix.rb +12 -0
- data/lib/puppet/ffi/windows/api_types.rb +313 -0
- data/lib/puppet/ffi/windows/constants.rb +406 -0
- data/lib/puppet/ffi/windows/functions.rb +629 -0
- data/lib/puppet/ffi/windows/structs.rb +339 -0
- data/lib/puppet/ffi/windows.rb +14 -0
- data/lib/puppet/file_bucket/dipper.rb +183 -0
- data/lib/puppet/file_bucket/file.rb +131 -0
- data/lib/puppet/file_bucket.rb +6 -0
- data/lib/puppet/file_serving/base.rb +94 -0
- data/lib/puppet/file_serving/configuration/parser.rb +116 -0
- data/lib/puppet/file_serving/configuration.rb +116 -0
- data/lib/puppet/file_serving/content.rb +45 -0
- data/lib/puppet/file_serving/fileset.rb +190 -0
- data/lib/puppet/file_serving/http_metadata.rb +61 -0
- data/lib/puppet/file_serving/metadata.rb +174 -0
- data/lib/puppet/file_serving/mount/file.rb +126 -0
- data/lib/puppet/file_serving/mount/locales.rb +35 -0
- data/lib/puppet/file_serving/mount/modules.rb +29 -0
- data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
- data/lib/puppet/file_serving/mount/plugins.rb +35 -0
- data/lib/puppet/file_serving/mount/scripts.rb +27 -0
- data/lib/puppet/file_serving/mount/tasks.rb +26 -0
- data/lib/puppet/file_serving/mount.rb +41 -0
- data/lib/puppet/file_serving/terminus_helper.rb +33 -0
- data/lib/puppet/file_serving/terminus_selector.rb +33 -0
- data/lib/puppet/file_serving.rb +5 -0
- data/lib/puppet/file_system/file_impl.rb +189 -0
- data/lib/puppet/file_system/jruby.rb +25 -0
- data/lib/puppet/file_system/memory_file.rb +82 -0
- data/lib/puppet/file_system/memory_impl.rb +103 -0
- data/lib/puppet/file_system/path_pattern.rb +95 -0
- data/lib/puppet/file_system/posix.rb +52 -0
- data/lib/puppet/file_system/uniquefile.rb +190 -0
- data/lib/puppet/file_system/windows.rb +224 -0
- data/lib/puppet/file_system.rb +421 -0
- data/lib/puppet/forge/cache.rb +61 -0
- data/lib/puppet/forge/errors.rb +113 -0
- data/lib/puppet/forge/repository.rb +98 -0
- data/lib/puppet/forge.rb +257 -0
- data/lib/puppet/functions/abs.rb +64 -0
- data/lib/puppet/functions/alert.rb +16 -0
- data/lib/puppet/functions/all.rb +106 -0
- data/lib/puppet/functions/annotate.rb +110 -0
- data/lib/puppet/functions/any.rb +111 -0
- data/lib/puppet/functions/assert_type.rb +96 -0
- data/lib/puppet/functions/binary_file.rb +35 -0
- data/lib/puppet/functions/break.rb +49 -0
- data/lib/puppet/functions/call.rb +81 -0
- data/lib/puppet/functions/camelcase.rb +63 -0
- data/lib/puppet/functions/capitalize.rb +62 -0
- data/lib/puppet/functions/ceiling.rb +38 -0
- data/lib/puppet/functions/chomp.rb +58 -0
- data/lib/puppet/functions/chop.rb +68 -0
- data/lib/puppet/functions/compare.rb +127 -0
- data/lib/puppet/functions/contain.rb +58 -0
- data/lib/puppet/functions/convert_to.rb +36 -0
- data/lib/puppet/functions/crit.rb +16 -0
- data/lib/puppet/functions/debug.rb +16 -0
- data/lib/puppet/functions/defined.rb +163 -0
- data/lib/puppet/functions/dig.rb +70 -0
- data/lib/puppet/functions/downcase.rb +91 -0
- data/lib/puppet/functions/each.rb +169 -0
- data/lib/puppet/functions/emerg.rb +16 -0
- data/lib/puppet/functions/empty.rb +87 -0
- data/lib/puppet/functions/epp.rb +50 -0
- data/lib/puppet/functions/err.rb +16 -0
- data/lib/puppet/functions/eyaml_lookup_key.rb +103 -0
- data/lib/puppet/functions/filter.rb +138 -0
- data/lib/puppet/functions/find_file.rb +50 -0
- data/lib/puppet/functions/find_template.rb +65 -0
- data/lib/puppet/functions/flatten.rb +66 -0
- data/lib/puppet/functions/floor.rb +38 -0
- data/lib/puppet/functions/get.rb +152 -0
- data/lib/puppet/functions/getvar.rb +89 -0
- data/lib/puppet/functions/group_by.rb +62 -0
- data/lib/puppet/functions/hiera.rb +91 -0
- data/lib/puppet/functions/hiera_array.rb +83 -0
- data/lib/puppet/functions/hiera_hash.rb +94 -0
- data/lib/puppet/functions/hiera_include.rb +107 -0
- data/lib/puppet/functions/hocon_data.rb +41 -0
- data/lib/puppet/functions/import.rb +9 -0
- data/lib/puppet/functions/include.rb +56 -0
- data/lib/puppet/functions/index.rb +168 -0
- data/lib/puppet/functions/info.rb +16 -0
- data/lib/puppet/functions/inline_epp.rb +61 -0
- data/lib/puppet/functions/join.rb +58 -0
- data/lib/puppet/functions/json_data.rb +33 -0
- data/lib/puppet/functions/keys.rb +27 -0
- data/lib/puppet/functions/length.rb +45 -0
- data/lib/puppet/functions/lest.rb +57 -0
- data/lib/puppet/functions/lookup.rb +224 -0
- data/lib/puppet/functions/lstrip.rb +59 -0
- data/lib/puppet/functions/map.rb +137 -0
- data/lib/puppet/functions/match.rb +133 -0
- data/lib/puppet/functions/max.rb +250 -0
- data/lib/puppet/functions/min.rb +249 -0
- data/lib/puppet/functions/module_directory.rb +43 -0
- data/lib/puppet/functions/new.rb +1013 -0
- data/lib/puppet/functions/next.rb +35 -0
- data/lib/puppet/functions/notice.rb +16 -0
- data/lib/puppet/functions/partition.rb +62 -0
- data/lib/puppet/functions/reduce.rb +159 -0
- data/lib/puppet/functions/regsubst.rb +100 -0
- data/lib/puppet/functions/require.rb +81 -0
- data/lib/puppet/functions/return.rb +17 -0
- data/lib/puppet/functions/reverse_each.rb +96 -0
- data/lib/puppet/functions/round.rb +26 -0
- data/lib/puppet/functions/rstrip.rb +59 -0
- data/lib/puppet/functions/scanf.rb +46 -0
- data/lib/puppet/functions/size.rb +15 -0
- data/lib/puppet/functions/slice.rb +127 -0
- data/lib/puppet/functions/sort.rb +76 -0
- data/lib/puppet/functions/split.rb +78 -0
- data/lib/puppet/functions/step.rb +100 -0
- data/lib/puppet/functions/strftime.rb +214 -0
- data/lib/puppet/functions/strip.rb +59 -0
- data/lib/puppet/functions/then.rb +80 -0
- data/lib/puppet/functions/tree_each.rb +198 -0
- data/lib/puppet/functions/type.rb +74 -0
- data/lib/puppet/functions/unique.rb +135 -0
- data/lib/puppet/functions/unwrap.rb +61 -0
- data/lib/puppet/functions/upcase.rb +91 -0
- data/lib/puppet/functions/values.rb +27 -0
- data/lib/puppet/functions/versioncmp.rb +41 -0
- data/lib/puppet/functions/warning.rb +16 -0
- data/lib/puppet/functions/with.rb +34 -0
- data/lib/puppet/functions/yaml_data.rb +45 -0
- data/lib/puppet/functions.rb +858 -0
- data/lib/puppet/generate/models/type/property.rb +73 -0
- data/lib/puppet/generate/models/type/type.rb +68 -0
- data/lib/puppet/generate/templates/type/pcore.erb +42 -0
- data/lib/puppet/generate/type.rb +255 -0
- data/lib/puppet/gettext/config.rb +282 -0
- data/lib/puppet/gettext/module_translations.rb +43 -0
- data/lib/puppet/gettext/stubs.rb +13 -0
- data/lib/puppet/graph/key.rb +28 -0
- data/lib/puppet/graph/prioritizer.rb +31 -0
- data/lib/puppet/graph/rb_tree_map.rb +407 -0
- data/lib/puppet/graph/relationship_graph.rb +286 -0
- data/lib/puppet/graph/sequential_prioritizer.rb +33 -0
- data/lib/puppet/graph/simple_graph.rb +552 -0
- data/lib/puppet/graph.rb +11 -0
- data/lib/puppet/http/client.rb +529 -0
- data/lib/puppet/http/dns.rb +159 -0
- data/lib/puppet/http/errors.rb +50 -0
- data/lib/puppet/http/external_client.rb +89 -0
- data/lib/puppet/http/factory.rb +53 -0
- data/lib/puppet/http/pool.rb +174 -0
- data/lib/puppet/http/pool_entry.rb +19 -0
- data/lib/puppet/http/proxy.rb +139 -0
- data/lib/puppet/http/redirector.rb +87 -0
- data/lib/puppet/http/resolver/server_list.rb +88 -0
- data/lib/puppet/http/resolver/settings.rb +24 -0
- data/lib/puppet/http/resolver/srv.rb +42 -0
- data/lib/puppet/http/resolver.rb +50 -0
- data/lib/puppet/http/response.rb +104 -0
- data/lib/puppet/http/response_converter.rb +25 -0
- data/lib/puppet/http/response_net_http.rb +43 -0
- data/lib/puppet/http/retry_after_handler.rb +78 -0
- data/lib/puppet/http/service/ca.rb +133 -0
- data/lib/puppet/http/service/compiler.rb +356 -0
- data/lib/puppet/http/service/file_server.rb +200 -0
- data/lib/puppet/http/service/puppetserver.rb +54 -0
- data/lib/puppet/http/service/report.rb +62 -0
- data/lib/puppet/http/service.rb +177 -0
- data/lib/puppet/http/session.rb +124 -0
- data/lib/puppet/http/site.rb +44 -0
- data/lib/puppet/http.rb +48 -0
- data/lib/puppet/indirector/catalog/compiler.rb +432 -0
- data/lib/puppet/indirector/catalog/json.rb +42 -0
- data/lib/puppet/indirector/catalog/msgpack.rb +8 -0
- data/lib/puppet/indirector/catalog/rest.rb +51 -0
- data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
- data/lib/puppet/indirector/catalog/yaml.rb +8 -0
- data/lib/puppet/indirector/code.rb +8 -0
- data/lib/puppet/indirector/data_binding/hiera.rb +8 -0
- data/lib/puppet/indirector/data_binding/none.rb +10 -0
- data/lib/puppet/indirector/direct_file_server.rb +20 -0
- data/lib/puppet/indirector/envelope.rb +13 -0
- data/lib/puppet/indirector/errors.rb +7 -0
- data/lib/puppet/indirector/exec.rb +40 -0
- data/lib/puppet/indirector/face.rb +142 -0
- data/lib/puppet/indirector/fact_search.rb +62 -0
- data/lib/puppet/indirector/facts/facter.rb +120 -0
- data/lib/puppet/indirector/facts/json.rb +29 -0
- data/lib/puppet/indirector/facts/memory.rb +11 -0
- data/lib/puppet/indirector/facts/network_device.rb +29 -0
- data/lib/puppet/indirector/facts/rest.rb +46 -0
- data/lib/puppet/indirector/facts/store_configs.rb +12 -0
- data/lib/puppet/indirector/facts/yaml.rb +31 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +268 -0
- data/lib/puppet/indirector/file_bucket_file/rest.rb +53 -0
- data/lib/puppet/indirector/file_bucket_file/selector.rb +54 -0
- data/lib/puppet/indirector/file_content/file.rb +9 -0
- data/lib/puppet/indirector/file_content/file_server.rb +9 -0
- data/lib/puppet/indirector/file_content/rest.rb +37 -0
- data/lib/puppet/indirector/file_content/selector.rb +32 -0
- data/lib/puppet/indirector/file_content.rb +7 -0
- data/lib/puppet/indirector/file_metadata/file.rb +9 -0
- data/lib/puppet/indirector/file_metadata/file_server.rb +9 -0
- data/lib/puppet/indirector/file_metadata/http.rb +49 -0
- data/lib/puppet/indirector/file_metadata/rest.rb +58 -0
- data/lib/puppet/indirector/file_metadata/selector.rb +32 -0
- data/lib/puppet/indirector/file_metadata.rb +7 -0
- data/lib/puppet/indirector/file_server.rb +57 -0
- data/lib/puppet/indirector/generic_http.rb +7 -0
- data/lib/puppet/indirector/hiera.rb +101 -0
- data/lib/puppet/indirector/indirection.rb +381 -0
- data/lib/puppet/indirector/json.rb +82 -0
- data/lib/puppet/indirector/memory.rb +37 -0
- data/lib/puppet/indirector/msgpack.rb +87 -0
- data/lib/puppet/indirector/node/exec.rb +70 -0
- data/lib/puppet/indirector/node/json.rb +9 -0
- data/lib/puppet/indirector/node/memory.rb +12 -0
- data/lib/puppet/indirector/node/msgpack.rb +9 -0
- data/lib/puppet/indirector/node/plain.rb +23 -0
- data/lib/puppet/indirector/node/rest.rb +31 -0
- data/lib/puppet/indirector/node/store_configs.rb +8 -0
- data/lib/puppet/indirector/node/yaml.rb +9 -0
- data/lib/puppet/indirector/none.rb +10 -0
- data/lib/puppet/indirector/plain.rb +11 -0
- data/lib/puppet/indirector/report/json.rb +36 -0
- data/lib/puppet/indirector/report/msgpack.rb +13 -0
- data/lib/puppet/indirector/report/processor.rb +63 -0
- data/lib/puppet/indirector/report/rest.rb +31 -0
- data/lib/puppet/indirector/report/yaml.rb +36 -0
- data/lib/puppet/indirector/request.rb +197 -0
- data/lib/puppet/indirector/resource/ral.rb +66 -0
- data/lib/puppet/indirector/resource/store_configs.rb +14 -0
- data/lib/puppet/indirector/resource/validator.rb +10 -0
- data/lib/puppet/indirector/rest.rb +66 -0
- data/lib/puppet/indirector/store_configs.rb +32 -0
- data/lib/puppet/indirector/terminus.rb +180 -0
- data/lib/puppet/indirector/yaml.rb +65 -0
- data/lib/puppet/indirector.rb +64 -0
- data/lib/puppet/info_service/class_information_service.rb +108 -0
- data/lib/puppet/info_service/plan_information_service.rb +38 -0
- data/lib/puppet/info_service/task_information_service.rb +45 -0
- data/lib/puppet/info_service.rb +27 -0
- data/lib/puppet/interface/action.rb +410 -0
- data/lib/puppet/interface/action_builder.rb +167 -0
- data/lib/puppet/interface/action_manager.rb +101 -0
- data/lib/puppet/interface/documentation.rb +363 -0
- data/lib/puppet/interface/face_collection.rb +141 -0
- data/lib/puppet/interface/option.rb +184 -0
- data/lib/puppet/interface/option_builder.rb +110 -0
- data/lib/puppet/interface/option_manager.rb +108 -0
- data/lib/puppet/interface.rb +240 -0
- data/lib/puppet/loaders.rb +31 -0
- data/lib/puppet/metatype/manager.rb +198 -0
- data/lib/puppet/module/plan.rb +166 -0
- data/lib/puppet/module/task.rb +288 -0
- data/lib/puppet/module.rb +487 -0
- data/lib/puppet/module_tool/applications/application.rb +96 -0
- data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
- data/lib/puppet/module_tool/applications/installer.rb +402 -0
- data/lib/puppet/module_tool/applications/uninstaller.rb +121 -0
- data/lib/puppet/module_tool/applications/unpacker.rb +102 -0
- data/lib/puppet/module_tool/applications/upgrader.rb +288 -0
- data/lib/puppet/module_tool/applications.rb +14 -0
- data/lib/puppet/module_tool/checksums.rb +50 -0
- data/lib/puppet/module_tool/dependency.rb +42 -0
- data/lib/puppet/module_tool/errors/base.rb +17 -0
- data/lib/puppet/module_tool/errors/installer.rb +94 -0
- data/lib/puppet/module_tool/errors/shared.rb +228 -0
- data/lib/puppet/module_tool/errors/uninstaller.rb +51 -0
- data/lib/puppet/module_tool/errors/upgrader.rb +64 -0
- data/lib/puppet/module_tool/errors.rb +13 -0
- data/lib/puppet/module_tool/install_directory.rb +48 -0
- data/lib/puppet/module_tool/installed_modules.rb +99 -0
- data/lib/puppet/module_tool/local_tarball.rb +92 -0
- data/lib/puppet/module_tool/metadata.rb +227 -0
- data/lib/puppet/module_tool/shared_behaviors.rb +199 -0
- data/lib/puppet/module_tool/tar/gnu.rb +23 -0
- data/lib/puppet/module_tool/tar/mini.rb +118 -0
- data/lib/puppet/module_tool/tar.rb +20 -0
- data/lib/puppet/module_tool.rb +194 -0
- data/lib/puppet/network/authconfig.rb +9 -0
- data/lib/puppet/network/authorization.rb +21 -0
- data/lib/puppet/network/client_request.rb +32 -0
- data/lib/puppet/network/format.rb +116 -0
- data/lib/puppet/network/format_handler.rb +110 -0
- data/lib/puppet/network/format_support.rb +140 -0
- data/lib/puppet/network/formats.rb +338 -0
- data/lib/puppet/network/http/api/indirected_routes.rb +270 -0
- data/lib/puppet/network/http/api/indirection_type.rb +33 -0
- data/lib/puppet/network/http/api/master/v3/environments.rb +4 -0
- data/lib/puppet/network/http/api/master/v3.rb +4 -0
- data/lib/puppet/network/http/api/master.rb +5 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +54 -0
- data/lib/puppet/network/http/api/server/v3.rb +40 -0
- data/lib/puppet/network/http/api/server.rb +12 -0
- data/lib/puppet/network/http/api.rb +41 -0
- data/lib/puppet/network/http/connection.rb +288 -0
- data/lib/puppet/network/http/error.rb +75 -0
- data/lib/puppet/network/http/handler.rb +213 -0
- data/lib/puppet/network/http/issues.rb +14 -0
- data/lib/puppet/network/http/memory_response.rb +15 -0
- data/lib/puppet/network/http/request.rb +83 -0
- data/lib/puppet/network/http/response.rb +25 -0
- data/lib/puppet/network/http/route.rb +104 -0
- data/lib/puppet/network/http.rb +30 -0
- data/lib/puppet/network/http_pool.rb +78 -0
- data/lib/puppet/network/uri.rb +20 -0
- data/lib/puppet/network.rb +5 -0
- data/lib/puppet/node/environment.rb +638 -0
- data/lib/puppet/node/facts.rb +165 -0
- data/lib/puppet/node/server_facts.rb +46 -0
- data/lib/puppet/node.rb +256 -0
- data/lib/puppet/pal/catalog_compiler.rb +107 -0
- data/lib/puppet/pal/compiler.rb +227 -0
- data/lib/puppet/pal/function_signature.rb +54 -0
- data/lib/puppet/pal/json_catalog_encoder.rb +76 -0
- data/lib/puppet/pal/pal_api.rb +17 -0
- data/lib/puppet/pal/pal_impl.rb +585 -0
- data/lib/puppet/pal/plan_signature.rb +73 -0
- data/lib/puppet/pal/script_compiler.rb +75 -0
- data/lib/puppet/pal/task_signature.rb +64 -0
- data/lib/puppet/parameter/boolean.rb +17 -0
- data/lib/puppet/parameter/package_options.rb +33 -0
- data/lib/puppet/parameter/path.rb +61 -0
- data/lib/puppet/parameter/value.rb +93 -0
- data/lib/puppet/parameter/value_collection.rb +213 -0
- data/lib/puppet/parameter.rb +590 -0
- data/lib/puppet/parser/abstract_compiler.rb +35 -0
- data/lib/puppet/parser/ast/block_expression.rb +17 -0
- data/lib/puppet/parser/ast/branch.rb +21 -0
- data/lib/puppet/parser/ast/hostclass.rb +29 -0
- data/lib/puppet/parser/ast/leaf.rb +84 -0
- data/lib/puppet/parser/ast/node.rb +19 -0
- data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
- data/lib/puppet/parser/ast/resource.rb +66 -0
- data/lib/puppet/parser/ast/resource_instance.rb +13 -0
- data/lib/puppet/parser/ast/resourceparam.rb +33 -0
- data/lib/puppet/parser/ast/top_level_construct.rb +6 -0
- data/lib/puppet/parser/ast.rb +62 -0
- data/lib/puppet/parser/catalog_compiler.rb +56 -0
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +41 -0
- data/lib/puppet/parser/compiler/catalog_validator.rb +35 -0
- data/lib/puppet/parser/compiler.rb +616 -0
- data/lib/puppet/parser/e4_parser_adapter.rb +61 -0
- data/lib/puppet/parser/files.rb +95 -0
- data/lib/puppet/parser/functions/assert_type.rb +62 -0
- data/lib/puppet/parser/functions/binary_file.rb +26 -0
- data/lib/puppet/parser/functions/break.rb +41 -0
- data/lib/puppet/parser/functions/contain.rb +32 -0
- data/lib/puppet/parser/functions/create_resources.rb +114 -0
- data/lib/puppet/parser/functions/defined.rb +109 -0
- data/lib/puppet/parser/functions/dig.rb +40 -0
- data/lib/puppet/parser/functions/digest.rb +7 -0
- data/lib/puppet/parser/functions/each.rb +106 -0
- data/lib/puppet/parser/functions/epp.rb +40 -0
- data/lib/puppet/parser/functions/fail.rb +13 -0
- data/lib/puppet/parser/functions/file.rb +35 -0
- data/lib/puppet/parser/functions/filter.rb +81 -0
- data/lib/puppet/parser/functions/find_file.rb +29 -0
- data/lib/puppet/parser/functions/fqdn_rand.rb +46 -0
- data/lib/puppet/parser/functions/generate.rb +39 -0
- data/lib/puppet/parser/functions/hiera.rb +105 -0
- data/lib/puppet/parser/functions/hiera_array.rb +93 -0
- data/lib/puppet/parser/functions/hiera_hash.rb +103 -0
- data/lib/puppet/parser/functions/hiera_include.rb +102 -0
- data/lib/puppet/parser/functions/include.rb +36 -0
- data/lib/puppet/parser/functions/inline_epp.rb +52 -0
- data/lib/puppet/parser/functions/inline_template.rb +28 -0
- data/lib/puppet/parser/functions/lest.rb +51 -0
- data/lib/puppet/parser/functions/lookup.rb +134 -0
- data/lib/puppet/parser/functions/map.rb +78 -0
- data/lib/puppet/parser/functions/match.rb +45 -0
- data/lib/puppet/parser/functions/md5.rb +7 -0
- data/lib/puppet/parser/functions/new.rb +992 -0
- data/lib/puppet/parser/functions/next.rb +40 -0
- data/lib/puppet/parser/functions/realize.rb +22 -0
- data/lib/puppet/parser/functions/reduce.rb +139 -0
- data/lib/puppet/parser/functions/regsubst.rb +65 -0
- data/lib/puppet/parser/functions/require.rb +43 -0
- data/lib/puppet/parser/functions/return.rb +94 -0
- data/lib/puppet/parser/functions/reverse_each.rb +85 -0
- data/lib/puppet/parser/functions/scanf.rb +40 -0
- data/lib/puppet/parser/functions/sha1.rb +7 -0
- data/lib/puppet/parser/functions/sha256.rb +7 -0
- data/lib/puppet/parser/functions/shellquote.rb +63 -0
- data/lib/puppet/parser/functions/slice.rb +41 -0
- data/lib/puppet/parser/functions/split.rb +29 -0
- data/lib/puppet/parser/functions/sprintf.rb +62 -0
- data/lib/puppet/parser/functions/step.rb +86 -0
- data/lib/puppet/parser/functions/strftime.rb +187 -0
- data/lib/puppet/parser/functions/tag.rb +15 -0
- data/lib/puppet/parser/functions/tagged.rb +24 -0
- data/lib/puppet/parser/functions/template.rb +42 -0
- data/lib/puppet/parser/functions/then.rb +75 -0
- data/lib/puppet/parser/functions/type.rb +55 -0
- data/lib/puppet/parser/functions/versioncmp.rb +31 -0
- data/lib/puppet/parser/functions/with.rb +30 -0
- data/lib/puppet/parser/functions.rb +324 -0
- data/lib/puppet/parser/parser_factory.rb +32 -0
- data/lib/puppet/parser/relationship.rb +90 -0
- data/lib/puppet/parser/resource/param.rb +37 -0
- data/lib/puppet/parser/resource.rb +353 -0
- data/lib/puppet/parser/scope.rb +1141 -0
- data/lib/puppet/parser/script_compiler.rb +123 -0
- data/lib/puppet/parser/templatewrapper.rb +105 -0
- data/lib/puppet/parser/type_loader.rb +151 -0
- data/lib/puppet/parser.rb +22 -0
- data/lib/puppet/plugins/configuration.rb +31 -0
- data/lib/puppet/plugins/syntax_checkers.rb +99 -0
- data/lib/puppet/plugins.rb +11 -0
- data/lib/puppet/pops/adaptable.rb +199 -0
- data/lib/puppet/pops/adapters.rb +159 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +732 -0
- data/lib/puppet/pops/evaluator/callable_signature.rb +108 -0
- data/lib/puppet/pops/evaluator/closure.rb +370 -0
- data/lib/puppet/pops/evaluator/collector_transformer.rb +237 -0
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +88 -0
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +30 -0
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +71 -0
- data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
- data/lib/puppet/pops/evaluator/compare_operator.rb +269 -0
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +227 -0
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +121 -0
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +47 -0
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +83 -0
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
- data/lib/puppet/pops/evaluator/puppet_proc.rb +72 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +188 -0
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +225 -0
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +528 -0
- data/lib/puppet/pops/functions/dispatch.rb +107 -0
- data/lib/puppet/pops/functions/dispatcher.rb +76 -0
- data/lib/puppet/pops/functions/function.rb +137 -0
- data/lib/puppet/pops/issue_reporter.rb +140 -0
- data/lib/puppet/pops/issues.rb +933 -0
- data/lib/puppet/pops/label_provider.rb +92 -0
- data/lib/puppet/pops/loader/base_loader.rb +178 -0
- data/lib/puppet/pops/loader/dependency_loader.rb +95 -0
- data/lib/puppet/pops/loader/gem_support.rb +54 -0
- data/lib/puppet/pops/loader/generic_plan_instantiator.rb +30 -0
- data/lib/puppet/pops/loader/loader.rb +221 -0
- data/lib/puppet/pops/loader/loader_paths.rb +413 -0
- data/lib/puppet/pops/loader/module_loaders.rb +552 -0
- data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +88 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +97 -0
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +43 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +49 -0
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +130 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +104 -0
- data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
- data/lib/puppet/pops/loader/static_loader.rb +133 -0
- data/lib/puppet/pops/loader/task_instantiator.rb +46 -0
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +104 -0
- data/lib/puppet/pops/loader/typed_name.rb +56 -0
- data/lib/puppet/pops/loader/uri_helper.rb +24 -0
- data/lib/puppet/pops/loaders.rb +550 -0
- data/lib/puppet/pops/lookup/configured_data_provider.rb +95 -0
- data/lib/puppet/pops/lookup/context.rb +208 -0
- data/lib/puppet/pops/lookup/data_adapter.rb +29 -0
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +146 -0
- data/lib/puppet/pops/lookup/data_hash_function_provider.rb +128 -0
- data/lib/puppet/pops/lookup/data_provider.rb +94 -0
- data/lib/puppet/pops/lookup/environment_data_provider.rb +37 -0
- data/lib/puppet/pops/lookup/explainer.rb +597 -0
- data/lib/puppet/pops/lookup/function_provider.rb +112 -0
- data/lib/puppet/pops/lookup/global_data_provider.rb +76 -0
- data/lib/puppet/pops/lookup/hiera_config.rb +823 -0
- data/lib/puppet/pops/lookup/interpolation.rb +166 -0
- data/lib/puppet/pops/lookup/invocation.rb +272 -0
- data/lib/puppet/pops/lookup/key_recorder.rb +21 -0
- data/lib/puppet/pops/lookup/location_resolver.rb +101 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +533 -0
- data/lib/puppet/pops/lookup/lookup_key.rb +101 -0
- data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +94 -0
- data/lib/puppet/pops/lookup/module_data_provider.rb +92 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +96 -0
- data/lib/puppet/pops/lookup.rb +102 -0
- data/lib/puppet/pops/merge_strategy.rb +447 -0
- data/lib/puppet/pops/migration/migration_checker.rb +61 -0
- data/lib/puppet/pops/model/ast.pp +669 -0
- data/lib/puppet/pops/model/ast.rb +4776 -0
- data/lib/puppet/pops/model/ast_transformer.rb +131 -0
- data/lib/puppet/pops/model/factory.rb +1157 -0
- data/lib/puppet/pops/model/model_label_provider.rb +137 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +447 -0
- data/lib/puppet/pops/model/pn_transformer.rb +384 -0
- data/lib/puppet/pops/model/tree_dumper.rb +62 -0
- data/lib/puppet/pops/parser/code_merger.rb +29 -0
- data/lib/puppet/pops/parser/egrammar.ra +889 -0
- data/lib/puppet/pops/parser/eparser.rb +3184 -0
- data/lib/puppet/pops/parser/epp_parser.rb +52 -0
- data/lib/puppet/pops/parser/epp_support.rb +266 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +166 -0
- data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
- data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
- data/lib/puppet/pops/parser/lexer2.rb +789 -0
- data/lib/puppet/pops/parser/lexer_support.rb +221 -0
- data/lib/puppet/pops/parser/locatable.rb +23 -0
- data/lib/puppet/pops/parser/locator.rb +361 -0
- data/lib/puppet/pops/parser/parser_support.rb +252 -0
- data/lib/puppet/pops/parser/pn_parser.rb +318 -0
- data/lib/puppet/pops/parser/slurp_support.rb +119 -0
- data/lib/puppet/pops/patterns.rb +60 -0
- data/lib/puppet/pops/pcore.rb +136 -0
- data/lib/puppet/pops/pn.rb +239 -0
- data/lib/puppet/pops/puppet_stack.rb +63 -0
- data/lib/puppet/pops/resource/param.rb +56 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +296 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
- data/lib/puppet/pops/semantic_error.rb +31 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +182 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +224 -0
- data/lib/puppet/pops/serialization/deserializer.rb +83 -0
- data/lib/puppet/pops/serialization/extension.rb +166 -0
- data/lib/puppet/pops/serialization/from_data_converter.rb +231 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +21 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +16 -0
- data/lib/puppet/pops/serialization/json.rb +301 -0
- data/lib/puppet/pops/serialization/json_path.rb +129 -0
- data/lib/puppet/pops/serialization/object.rb +73 -0
- data/lib/puppet/pops/serialization/serializer.rb +144 -0
- data/lib/puppet/pops/serialization/time_factory.rb +68 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +316 -0
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +227 -0
- data/lib/puppet/pops/serialization.rb +45 -0
- data/lib/puppet/pops/time/timespan.rb +728 -0
- data/lib/puppet/pops/time/timestamp.rb +167 -0
- data/lib/puppet/pops/types/annotatable.rb +37 -0
- data/lib/puppet/pops/types/annotation.rb +73 -0
- data/lib/puppet/pops/types/class_loader.rb +134 -0
- data/lib/puppet/pops/types/implementation_registry.rb +137 -0
- data/lib/puppet/pops/types/iterable.rb +375 -0
- data/lib/puppet/pops/types/p_binary_type.rb +232 -0
- data/lib/puppet/pops/types/p_init_type.rb +241 -0
- data/lib/puppet/pops/types/p_meta_type.rb +95 -0
- data/lib/puppet/pops/types/p_object_type.rb +1142 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +229 -0
- data/lib/puppet/pops/types/p_runtime_type.rb +117 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
- data/lib/puppet/pops/types/p_sensitive_type.rb +81 -0
- data/lib/puppet/pops/types/p_timespan_type.rb +194 -0
- data/lib/puppet/pops/types/p_timestamp_type.rb +74 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +394 -0
- data/lib/puppet/pops/types/p_uri_type.rb +198 -0
- data/lib/puppet/pops/types/puppet_object.rb +41 -0
- data/lib/puppet/pops/types/recursion_guard.rb +142 -0
- data/lib/puppet/pops/types/ruby_generator.rb +477 -0
- data/lib/puppet/pops/types/ruby_method.rb +32 -0
- data/lib/puppet/pops/types/string_converter.rb +1144 -0
- data/lib/puppet/pops/types/tree_iterators.rb +250 -0
- data/lib/puppet/pops/types/type_acceptor.rb +27 -0
- data/lib/puppet/pops/types/type_asserter.rb +49 -0
- data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
- data/lib/puppet/pops/types/type_calculator.rb +829 -0
- data/lib/puppet/pops/types/type_conversion_error.rb +7 -0
- data/lib/puppet/pops/types/type_factory.rb +640 -0
- data/lib/puppet/pops/types/type_formatter.rb +796 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1105 -0
- data/lib/puppet/pops/types/type_parser.rb +690 -0
- data/lib/puppet/pops/types/type_set_reference.rb +62 -0
- data/lib/puppet/pops/types/type_with_members.rb +43 -0
- data/lib/puppet/pops/types/types.rb +3651 -0
- data/lib/puppet/pops/utils.rb +117 -0
- data/lib/puppet/pops/validation/checker4_0.rb +1155 -0
- data/lib/puppet/pops/validation/tasks_checker.rb +95 -0
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
- data/lib/puppet/pops/validation.rb +462 -0
- data/lib/puppet/pops/visitable.rb +8 -0
- data/lib/puppet/pops/visitor.rb +136 -0
- data/lib/puppet/pops.rb +124 -0
- data/lib/puppet/property/boolean.rb +9 -0
- data/lib/puppet/property/ensure.rb +107 -0
- data/lib/puppet/property/keyvalue.rb +159 -0
- data/lib/puppet/property/list.rb +71 -0
- data/lib/puppet/property/ordered_list.rb +30 -0
- data/lib/puppet/property.rb +610 -0
- data/lib/puppet/provider/aix_object.rb +491 -0
- data/lib/puppet/provider/command.rb +27 -0
- data/lib/puppet/provider/confine.rb +8 -0
- data/lib/puppet/provider/exec/posix.rb +63 -0
- data/lib/puppet/provider/exec/shell.rb +27 -0
- data/lib/puppet/provider/exec/windows.rb +57 -0
- data/lib/puppet/provider/exec.rb +107 -0
- data/lib/puppet/provider/file/posix.rb +162 -0
- data/lib/puppet/provider/file/windows.rb +151 -0
- data/lib/puppet/provider/group/aix.rb +101 -0
- data/lib/puppet/provider/group/directoryservice.rb +24 -0
- data/lib/puppet/provider/group/groupadd.rb +180 -0
- data/lib/puppet/provider/group/ldap.rb +51 -0
- data/lib/puppet/provider/group/pw.rb +52 -0
- data/lib/puppet/provider/group/windows_adsi.rb +116 -0
- data/lib/puppet/provider/ldap.rb +143 -0
- data/lib/puppet/provider/nameservice/directoryservice.rb +522 -0
- data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
- data/lib/puppet/provider/nameservice/pw.rb +21 -0
- data/lib/puppet/provider/nameservice.rb +297 -0
- data/lib/puppet/provider/network_device.rb +74 -0
- data/lib/puppet/provider/package/aix.rb +171 -0
- data/lib/puppet/provider/package/appdmg.rb +113 -0
- data/lib/puppet/provider/package/apple.rb +49 -0
- data/lib/puppet/provider/package/apt.rb +265 -0
- data/lib/puppet/provider/package/aptitude.rb +35 -0
- data/lib/puppet/provider/package/aptrpm.rb +87 -0
- data/lib/puppet/provider/package/blastwave.rb +109 -0
- data/lib/puppet/provider/package/dnf.rb +57 -0
- data/lib/puppet/provider/package/dnfmodule.rb +143 -0
- data/lib/puppet/provider/package/dpkg.rb +191 -0
- data/lib/puppet/provider/package/fink.rb +99 -0
- data/lib/puppet/provider/package/freebsd.rb +49 -0
- data/lib/puppet/provider/package/gem.rb +296 -0
- data/lib/puppet/provider/package/hpux.rb +46 -0
- data/lib/puppet/provider/package/macports.rb +112 -0
- data/lib/puppet/provider/package/nim.rb +290 -0
- data/lib/puppet/provider/package/openbsd.rb +263 -0
- data/lib/puppet/provider/package/opkg.rb +85 -0
- data/lib/puppet/provider/package/pacman.rb +270 -0
- data/lib/puppet/provider/package/pip.rb +347 -0
- data/lib/puppet/provider/package/pip2.rb +18 -0
- data/lib/puppet/provider/package/pip3.rb +18 -0
- data/lib/puppet/provider/package/pkg.rb +300 -0
- data/lib/puppet/provider/package/pkgdmg.rb +159 -0
- data/lib/puppet/provider/package/pkgin.rb +88 -0
- data/lib/puppet/provider/package/pkgng.rb +178 -0
- data/lib/puppet/provider/package/pkgutil.rb +186 -0
- data/lib/puppet/provider/package/portage.rb +314 -0
- data/lib/puppet/provider/package/ports.rb +94 -0
- data/lib/puppet/provider/package/portupgrade.rb +233 -0
- data/lib/puppet/provider/package/puppet_gem.rb +25 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +174 -0
- data/lib/puppet/provider/package/rpm.rb +255 -0
- data/lib/puppet/provider/package/rug.rb +51 -0
- data/lib/puppet/provider/package/sun.rb +137 -0
- data/lib/puppet/provider/package/sunfreeware.rb +11 -0
- data/lib/puppet/provider/package/tdnf.rb +35 -0
- data/lib/puppet/provider/package/up2date.rb +40 -0
- data/lib/puppet/provider/package/urpmi.rb +57 -0
- data/lib/puppet/provider/package/windows/exe_package.rb +108 -0
- data/lib/puppet/provider/package/windows/msi_package.rb +72 -0
- data/lib/puppet/provider/package/windows/package.rb +113 -0
- data/lib/puppet/provider/package/windows.rb +131 -0
- data/lib/puppet/provider/package/xbps.rb +127 -0
- data/lib/puppet/provider/package/yum.rb +390 -0
- data/lib/puppet/provider/package/zypper.rb +206 -0
- data/lib/puppet/provider/package.rb +61 -0
- data/lib/puppet/provider/package_targetable.rb +71 -0
- data/lib/puppet/provider/parsedfile.rb +494 -0
- data/lib/puppet/provider/service/base.rb +135 -0
- data/lib/puppet/provider/service/bsd.rb +53 -0
- data/lib/puppet/provider/service/daemontools.rb +196 -0
- data/lib/puppet/provider/service/debian.rb +77 -0
- data/lib/puppet/provider/service/freebsd.rb +141 -0
- data/lib/puppet/provider/service/gentoo.rb +47 -0
- data/lib/puppet/provider/service/init.rb +194 -0
- data/lib/puppet/provider/service/launchd.rb +391 -0
- data/lib/puppet/provider/service/openbsd.rb +101 -0
- data/lib/puppet/provider/service/openrc.rb +72 -0
- data/lib/puppet/provider/service/openwrt.rb +37 -0
- data/lib/puppet/provider/service/rcng.rb +53 -0
- data/lib/puppet/provider/service/redhat.rb +75 -0
- data/lib/puppet/provider/service/runit.rb +107 -0
- data/lib/puppet/provider/service/service.rb +67 -0
- data/lib/puppet/provider/service/smf.rb +322 -0
- data/lib/puppet/provider/service/src.rb +147 -0
- data/lib/puppet/provider/service/systemd.rb +232 -0
- data/lib/puppet/provider/service/upstart.rb +385 -0
- data/lib/puppet/provider/service/windows.rb +179 -0
- data/lib/puppet/provider/user/aix.rb +365 -0
- data/lib/puppet/provider/user/directoryservice.rb +687 -0
- data/lib/puppet/provider/user/hpux.rb +93 -0
- data/lib/puppet/provider/user/ldap.rb +135 -0
- data/lib/puppet/provider/user/openbsd.rb +79 -0
- data/lib/puppet/provider/user/pw.rb +109 -0
- data/lib/puppet/provider/user/user_role_add.rb +243 -0
- data/lib/puppet/provider/user/useradd.rb +417 -0
- data/lib/puppet/provider/user/windows_adsi.rb +176 -0
- data/lib/puppet/provider.rb +613 -0
- data/lib/puppet/reference/configuration.rb +105 -0
- data/lib/puppet/reference/function.rb +19 -0
- data/lib/puppet/reference/indirection.rb +76 -0
- data/lib/puppet/reference/metaparameter.rb +35 -0
- data/lib/puppet/reference/providers.rb +119 -0
- data/lib/puppet/reference/report.rb +22 -0
- data/lib/puppet/reference/type.rb +111 -0
- data/lib/puppet/relationship.rb +85 -0
- data/lib/puppet/reports/http.rb +45 -0
- data/lib/puppet/reports/log.rb +15 -0
- data/lib/puppet/reports/store.rb +71 -0
- data/lib/puppet/reports.rb +95 -0
- data/lib/puppet/resource/catalog.rb +655 -0
- data/lib/puppet/resource/status.rb +231 -0
- data/lib/puppet/resource/type.rb +449 -0
- data/lib/puppet/resource/type_collection.rb +235 -0
- data/lib/puppet/resource.rb +673 -0
- data/lib/puppet/runtime.rb +67 -0
- data/lib/puppet/scheduler/job.rb +55 -0
- data/lib/puppet/scheduler/scheduler.rb +46 -0
- data/lib/puppet/scheduler/splay_job.rb +45 -0
- data/lib/puppet/scheduler/timer.rb +15 -0
- data/lib/puppet/scheduler.rb +18 -0
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/array_setting.rb +18 -0
- data/lib/puppet/settings/autosign_setting.rb +23 -0
- data/lib/puppet/settings/base_setting.rb +228 -0
- data/lib/puppet/settings/boolean_setting.rb +34 -0
- data/lib/puppet/settings/certificate_revocation_setting.rb +22 -0
- data/lib/puppet/settings/config_file.rb +148 -0
- data/lib/puppet/settings/directory_setting.rb +20 -0
- data/lib/puppet/settings/duration_setting.rb +33 -0
- data/lib/puppet/settings/enum_setting.rb +18 -0
- data/lib/puppet/settings/environment_conf.rb +228 -0
- data/lib/puppet/settings/errors.rb +14 -0
- data/lib/puppet/settings/file_or_directory_setting.rb +37 -0
- data/lib/puppet/settings/file_setting.rb +232 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +26 -0
- data/lib/puppet/settings/ini_file.rb +228 -0
- data/lib/puppet/settings/integer_setting.rb +19 -0
- data/lib/puppet/settings/path_setting.rb +10 -0
- data/lib/puppet/settings/port_setting.rb +17 -0
- data/lib/puppet/settings/priority_setting.rb +44 -0
- data/lib/puppet/settings/server_list_setting.rb +30 -0
- data/lib/puppet/settings/string_setting.rb +11 -0
- data/lib/puppet/settings/symbolic_enum_setting.rb +19 -0
- data/lib/puppet/settings/terminus_setting.rb +16 -0
- data/lib/puppet/settings/ttl_setting.rb +53 -0
- data/lib/puppet/settings/value_translator.rb +16 -0
- data/lib/puppet/settings.rb +1650 -0
- data/lib/puppet/ssl/base.rb +152 -0
- data/lib/puppet/ssl/certificate.rb +98 -0
- data/lib/puppet/ssl/certificate_request.rb +320 -0
- data/lib/puppet/ssl/certificate_request_attributes.rb +40 -0
- data/lib/puppet/ssl/certificate_signer.rb +39 -0
- data/lib/puppet/ssl/digest.rb +22 -0
- data/lib/puppet/ssl/error.rb +29 -0
- data/lib/puppet/ssl/oids.rb +199 -0
- data/lib/puppet/ssl/openssl_loader.rb +26 -0
- data/lib/puppet/ssl/ssl_context.rb +27 -0
- data/lib/puppet/ssl/ssl_provider.rb +354 -0
- data/lib/puppet/ssl/state_machine.rb +605 -0
- data/lib/puppet/ssl/verifier.rb +143 -0
- data/lib/puppet/ssl.rb +25 -0
- data/lib/puppet/syntax_checkers/base64.rb +42 -0
- data/lib/puppet/syntax_checkers/epp.rb +35 -0
- data/lib/puppet/syntax_checkers/json.rb +35 -0
- data/lib/puppet/syntax_checkers/pp.rb +35 -0
- data/lib/puppet/syntax_checkers.rb +5 -0
- data/lib/puppet/test/test_helper.rb +251 -0
- data/lib/puppet/thread_local.rb +6 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +225 -0
- data/lib/puppet/transaction/event.rb +171 -0
- data/lib/puppet/transaction/event_manager.rb +180 -0
- data/lib/puppet/transaction/persistence.rb +119 -0
- data/lib/puppet/transaction/report.rb +511 -0
- data/lib/puppet/transaction/resource_harness.rb +331 -0
- data/lib/puppet/transaction.rb +493 -0
- data/lib/puppet/trusted_external.rb +46 -0
- data/lib/puppet/type/component.rb +96 -0
- data/lib/puppet/type/exec.rb +730 -0
- data/lib/puppet/type/file/checksum.rb +54 -0
- data/lib/puppet/type/file/checksum_value.rb +56 -0
- data/lib/puppet/type/file/content.rb +180 -0
- data/lib/puppet/type/file/ctime.rb +22 -0
- data/lib/puppet/type/file/data_sync.rb +101 -0
- data/lib/puppet/type/file/ensure.rb +194 -0
- data/lib/puppet/type/file/group.rb +50 -0
- data/lib/puppet/type/file/mode.rb +192 -0
- data/lib/puppet/type/file/mtime.rb +21 -0
- data/lib/puppet/type/file/owner.rb +52 -0
- data/lib/puppet/type/file/selcontext.rb +143 -0
- data/lib/puppet/type/file/source.rb +380 -0
- data/lib/puppet/type/file/target.rb +86 -0
- data/lib/puppet/type/file/type.rb +21 -0
- data/lib/puppet/type/file.rb +1139 -0
- data/lib/puppet/type/filebucket.rb +123 -0
- data/lib/puppet/type/group.rb +238 -0
- data/lib/puppet/type/notify.rb +48 -0
- data/lib/puppet/type/package.rb +715 -0
- data/lib/puppet/type/resources.rb +192 -0
- data/lib/puppet/type/schedule.rb +441 -0
- data/lib/puppet/type/service.rb +310 -0
- data/lib/puppet/type/stage.rb +29 -0
- data/lib/puppet/type/tidy.rb +382 -0
- data/lib/puppet/type/user.rb +865 -0
- data/lib/puppet/type/whit.rb +35 -0
- data/lib/puppet/type.rb +2629 -0
- data/lib/puppet/util/at_fork/noop.rb +20 -0
- data/lib/puppet/util/at_fork/solaris.rb +158 -0
- data/lib/puppet/util/at_fork.rb +37 -0
- data/lib/puppet/util/autoload.rb +221 -0
- data/lib/puppet/util/backups.rb +88 -0
- data/lib/puppet/util/character_encoding.rb +83 -0
- data/lib/puppet/util/checksums.rb +380 -0
- data/lib/puppet/util/classgen.rb +223 -0
- data/lib/puppet/util/colors.rb +102 -0
- data/lib/puppet/util/command_line/puppet_option_parser.rb +89 -0
- data/lib/puppet/util/command_line/trollop.rb +847 -0
- data/lib/puppet/util/command_line.rb +198 -0
- data/lib/puppet/util/constant_inflector.rb +25 -0
- data/lib/puppet/util/diff.rb +80 -0
- data/lib/puppet/util/docs.rb +132 -0
- data/lib/puppet/util/errors.rb +161 -0
- data/lib/puppet/util/execution.rb +446 -0
- data/lib/puppet/util/execution_stub.rb +28 -0
- data/lib/puppet/util/feature.rb +129 -0
- data/lib/puppet/util/file_watcher.rb +31 -0
- data/lib/puppet/util/fileparsing.rb +404 -0
- data/lib/puppet/util/filetype.rb +358 -0
- data/lib/puppet/util/http_proxy.rb +6 -0
- data/lib/puppet/util/inifile.rb +335 -0
- data/lib/puppet/util/instance_loader.rb +69 -0
- data/lib/puppet/util/json.rb +94 -0
- data/lib/puppet/util/json_lockfile.rb +47 -0
- data/lib/puppet/util/ldap/connection.rb +75 -0
- data/lib/puppet/util/ldap/generator.rb +44 -0
- data/lib/puppet/util/ldap/manager.rb +283 -0
- data/lib/puppet/util/ldap.rb +4 -0
- data/lib/puppet/util/libuser.conf +15 -0
- data/lib/puppet/util/libuser.rb +13 -0
- data/lib/puppet/util/limits.rb +14 -0
- data/lib/puppet/util/lockfile.rb +66 -0
- data/lib/puppet/util/log/destination.rb +50 -0
- data/lib/puppet/util/log/destinations.rb +253 -0
- data/lib/puppet/util/log.rb +436 -0
- data/lib/puppet/util/logging.rb +304 -0
- data/lib/puppet/util/metaid.rb +22 -0
- data/lib/puppet/util/metric.rb +68 -0
- data/lib/puppet/util/monkey_patches.rb +114 -0
- data/lib/puppet/util/multi_match.rb +55 -0
- data/lib/puppet/util/network_device/base.rb +24 -0
- data/lib/puppet/util/network_device/config.rb +105 -0
- data/lib/puppet/util/network_device/transport/base.rb +26 -0
- data/lib/puppet/util/network_device/transport.rb +7 -0
- data/lib/puppet/util/network_device.rb +19 -0
- data/lib/puppet/util/package/version/debian.rb +177 -0
- data/lib/puppet/util/package/version/gem.rb +18 -0
- data/lib/puppet/util/package/version/pip.rb +173 -0
- data/lib/puppet/util/package/version/range/eq.rb +17 -0
- data/lib/puppet/util/package/version/range/gt.rb +17 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +17 -0
- data/lib/puppet/util/package/version/range/lt.rb +17 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +17 -0
- data/lib/puppet/util/package/version/range/min_max.rb +26 -0
- data/lib/puppet/util/package/version/range/simple.rb +13 -0
- data/lib/puppet/util/package/version/range.rb +57 -0
- data/lib/puppet/util/package/version/rpm.rb +75 -0
- data/lib/puppet/util/package.rb +43 -0
- data/lib/puppet/util/pidlock.rb +103 -0
- data/lib/puppet/util/platform.rb +72 -0
- data/lib/puppet/util/plist.rb +161 -0
- data/lib/puppet/util/posix.rb +206 -0
- data/lib/puppet/util/profiler/aggregate.rb +82 -0
- data/lib/puppet/util/profiler/around_profiler.rb +68 -0
- data/lib/puppet/util/profiler/logging.rb +50 -0
- data/lib/puppet/util/profiler/object_counts.rb +19 -0
- data/lib/puppet/util/profiler/wall_clock.rb +36 -0
- data/lib/puppet/util/profiler.rb +55 -0
- data/lib/puppet/util/provider_features.rb +183 -0
- data/lib/puppet/util/psych_support.rb +32 -0
- data/lib/puppet/util/rdoc/code_objects.rb +293 -0
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +902 -0
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1068 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +262 -0
- data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +16 -0
- data/lib/puppet/util/rdoc/parser.rb +14 -0
- data/lib/puppet/util/rdoc.rb +54 -0
- data/lib/puppet/util/reference.rb +94 -0
- data/lib/puppet/util/resource_template.rb +63 -0
- data/lib/puppet/util/retry_action.rb +47 -0
- data/lib/puppet/util/rpm_compare.rb +196 -0
- data/lib/puppet/util/rubygems.rb +67 -0
- data/lib/puppet/util/run_mode.rb +164 -0
- data/lib/puppet/util/selinux.rb +331 -0
- data/lib/puppet/util/skip_tags.rb +15 -0
- data/lib/puppet/util/splayer.rb +20 -0
- data/lib/puppet/util/storage.rb +100 -0
- data/lib/puppet/util/suidmanager.rb +167 -0
- data/lib/puppet/util/symbolic_file_mode.rb +156 -0
- data/lib/puppet/util/tag_set.rb +29 -0
- data/lib/puppet/util/tagging.rb +131 -0
- data/lib/puppet/util/terminal.rb +18 -0
- data/lib/puppet/util/user_attr.rb +23 -0
- data/lib/puppet/util/warnings.rb +35 -0
- data/lib/puppet/util/watched_file.rb +40 -0
- data/lib/puppet/util/watcher/change_watcher.rb +35 -0
- data/lib/puppet/util/watcher/periodic_watcher.rb +38 -0
- data/lib/puppet/util/watcher/timer.rb +21 -0
- data/lib/puppet/util/watcher.rb +17 -0
- data/lib/puppet/util/windows/access_control_entry.rb +86 -0
- data/lib/puppet/util/windows/access_control_list.rb +116 -0
- data/lib/puppet/util/windows/adsi.rb +662 -0
- data/lib/puppet/util/windows/com.rb +228 -0
- data/lib/puppet/util/windows/daemon.rb +340 -0
- data/lib/puppet/util/windows/error.rb +86 -0
- data/lib/puppet/util/windows/eventlog.rb +191 -0
- data/lib/puppet/util/windows/file.rb +359 -0
- data/lib/puppet/util/windows/monkey_patches/process.rb +413 -0
- data/lib/puppet/util/windows/principal.rb +204 -0
- data/lib/puppet/util/windows/process.rb +360 -0
- data/lib/puppet/util/windows/registry.rb +443 -0
- data/lib/puppet/util/windows/root_certs.rb +110 -0
- data/lib/puppet/util/windows/security.rb +909 -0
- data/lib/puppet/util/windows/security_descriptor.rb +64 -0
- data/lib/puppet/util/windows/service.rb +708 -0
- data/lib/puppet/util/windows/sid.rb +291 -0
- data/lib/puppet/util/windows/string.rb +17 -0
- data/lib/puppet/util/windows/user.rb +551 -0
- data/lib/puppet/util/windows.rb +58 -0
- data/lib/puppet/util/yaml.rb +67 -0
- data/lib/puppet/util.rb +759 -0
- data/lib/puppet/vendor/require_vendored.rb +4 -0
- data/lib/puppet/vendor.rb +59 -0
- data/lib/puppet/version.rb +98 -0
- data/lib/puppet/x509/cert_provider.rb +405 -0
- data/lib/puppet/x509/pem_store.rb +57 -0
- data/lib/puppet/x509.rb +13 -0
- data/lib/puppet.rb +348 -0
- data/lib/puppet_pal.rb +10 -0
- data/lib/puppet_x.rb +16 -0
- data/locales/config.yaml +29 -0
- data/locales/en/puppet.po +19 -0
- data/locales/puppet.pot +9738 -0
- data/man/man5/puppet.conf.5 +1407 -0
- data/man/man8/puppet-agent.8 +135 -0
- data/man/man8/puppet-apply.8 +67 -0
- data/man/man8/puppet-catalog.8 +194 -0
- data/man/man8/puppet-config.8 +103 -0
- data/man/man8/puppet-describe.8 +35 -0
- data/man/man8/puppet-device.8 +83 -0
- data/man/man8/puppet-doc.8 +30 -0
- data/man/man8/puppet-epp.8 +232 -0
- data/man/man8/puppet-facts.8 +156 -0
- data/man/man8/puppet-filebucket.8 +134 -0
- data/man/man8/puppet-generate.8 +54 -0
- data/man/man8/puppet-help.8 +46 -0
- data/man/man8/puppet-lookup.8 +71 -0
- data/man/man8/puppet-module.8 +220 -0
- data/man/man8/puppet-node.8 +142 -0
- data/man/man8/puppet-parser.8 +87 -0
- data/man/man8/puppet-plugin.8 +50 -0
- data/man/man8/puppet-report.8 +84 -0
- data/man/man8/puppet-resource.8 +63 -0
- data/man/man8/puppet-script.8 +48 -0
- data/man/man8/puppet-ssl.8 +45 -0
- data/man/man8/puppet.8 +98 -0
- data/tasks/tag.rake +34 -0
- metadata +1336 -0
@@ -0,0 +1,708 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../../../puppet/ffi/windows'
|
5
|
+
|
6
|
+
module Puppet::Util::Windows
|
7
|
+
# This module is designed to provide an API between the windows system and puppet for
|
8
|
+
# service management.
|
9
|
+
#
|
10
|
+
# for an overview of the service state transitions see: https://docs.microsoft.com/en-us/windows/desktop/Services/service-status-transitions
|
11
|
+
module Service
|
12
|
+
extend Puppet::Util::Windows::String
|
13
|
+
|
14
|
+
include Puppet::FFI::Windows::Constants
|
15
|
+
extend Puppet::FFI::Windows::Constants
|
16
|
+
|
17
|
+
include Puppet::FFI::Windows::Structs
|
18
|
+
extend Puppet::FFI::Windows::Structs
|
19
|
+
|
20
|
+
include Puppet::FFI::Windows::Functions
|
21
|
+
extend Puppet::FFI::Windows::Functions
|
22
|
+
|
23
|
+
# Returns true if the service exists, false otherwise.
|
24
|
+
#
|
25
|
+
# @param [String] service_name name of the service
|
26
|
+
def exists?(service_name)
|
27
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_QUERY_STATUS) do |_|
|
28
|
+
true
|
29
|
+
end
|
30
|
+
rescue Puppet::Util::Windows::Error => e
|
31
|
+
return false if e.code == ERROR_SERVICE_DOES_NOT_EXIST
|
32
|
+
|
33
|
+
raise e
|
34
|
+
end
|
35
|
+
module_function :exists?
|
36
|
+
|
37
|
+
# Start a windows service
|
38
|
+
#
|
39
|
+
# @param [String] service_name name of the service to start
|
40
|
+
# @param optional [Integer] timeout the minumum number of seconds to wait before timing out
|
41
|
+
def start(service_name, timeout: DEFAULT_TIMEOUT)
|
42
|
+
Puppet.debug _("Starting the %{service_name} service. Timeout set to: %{timeout} seconds") % { service_name: service_name, timeout: timeout }
|
43
|
+
|
44
|
+
valid_initial_states = [
|
45
|
+
SERVICE_STOP_PENDING,
|
46
|
+
SERVICE_STOPPED,
|
47
|
+
SERVICE_START_PENDING
|
48
|
+
]
|
49
|
+
|
50
|
+
transition_service_state(service_name, valid_initial_states, SERVICE_RUNNING, timeout) do |service|
|
51
|
+
if StartServiceW(service, 0, FFI::Pointer::NULL) == FFI::WIN32_FALSE
|
52
|
+
raise Puppet::Util::Windows::Error, _("Failed to start the service")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
Puppet.debug _("Successfully started the %{service_name} service") % { service_name: service_name }
|
57
|
+
end
|
58
|
+
module_function :start
|
59
|
+
|
60
|
+
# Stop a windows service
|
61
|
+
#
|
62
|
+
# @param [String] service_name name of the service to stop
|
63
|
+
# @param optional [Integer] timeout the minumum number of seconds to wait before timing out
|
64
|
+
def stop(service_name, timeout: DEFAULT_TIMEOUT)
|
65
|
+
Puppet.debug _("Stopping the %{service_name} service. Timeout set to: %{timeout} seconds") % { service_name: service_name, timeout: timeout }
|
66
|
+
|
67
|
+
valid_initial_states = SERVICE_STATES.keys - [SERVICE_STOPPED]
|
68
|
+
|
69
|
+
transition_service_state(service_name, valid_initial_states, SERVICE_STOPPED, timeout) do |service|
|
70
|
+
send_service_control_signal(service, SERVICE_CONTROL_STOP)
|
71
|
+
end
|
72
|
+
|
73
|
+
Puppet.debug _("Successfully stopped the %{service_name} service") % { service_name: service_name }
|
74
|
+
end
|
75
|
+
module_function :stop
|
76
|
+
|
77
|
+
# Resume a paused windows service
|
78
|
+
#
|
79
|
+
# @param [String] service_name name of the service to resume
|
80
|
+
# @param optional [Integer] :timeout the minumum number of seconds to wait before timing out
|
81
|
+
def resume(service_name, timeout: DEFAULT_TIMEOUT)
|
82
|
+
Puppet.debug _("Resuming the %{service_name} service. Timeout set to: %{timeout} seconds") % { service_name: service_name, timeout: timeout }
|
83
|
+
|
84
|
+
valid_initial_states = [
|
85
|
+
SERVICE_PAUSE_PENDING,
|
86
|
+
SERVICE_PAUSED,
|
87
|
+
SERVICE_CONTINUE_PENDING
|
88
|
+
]
|
89
|
+
|
90
|
+
transition_service_state(service_name, valid_initial_states, SERVICE_RUNNING, timeout) do |service|
|
91
|
+
# The SERVICE_CONTROL_CONTINUE signal can only be sent when
|
92
|
+
# the service is in the SERVICE_PAUSED state
|
93
|
+
wait_on_pending_state(service, SERVICE_PAUSE_PENDING, timeout)
|
94
|
+
|
95
|
+
send_service_control_signal(service, SERVICE_CONTROL_CONTINUE)
|
96
|
+
end
|
97
|
+
|
98
|
+
Puppet.debug _("Successfully resumed the %{service_name} service") % { service_name: service_name }
|
99
|
+
end
|
100
|
+
module_function :resume
|
101
|
+
|
102
|
+
# Query the state of a service using QueryServiceStatusEx
|
103
|
+
#
|
104
|
+
# @param [string] service_name name of the service to query
|
105
|
+
# @return [string] the status of the service
|
106
|
+
def service_state(service_name)
|
107
|
+
state = nil
|
108
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_QUERY_STATUS) do |service|
|
109
|
+
query_status(service) do |status|
|
110
|
+
state = SERVICE_STATES[status[:dwCurrentState]]
|
111
|
+
end
|
112
|
+
end
|
113
|
+
if state.nil?
|
114
|
+
raise Puppet::Error, _("Unknown Service state '%{current_state}' for '%{service_name}'") % { current_state: state.to_s, service_name: service_name }
|
115
|
+
end
|
116
|
+
|
117
|
+
state
|
118
|
+
end
|
119
|
+
module_function :service_state
|
120
|
+
|
121
|
+
# Query the configuration of a service using QueryServiceConfigW
|
122
|
+
# or QueryServiceConfig2W
|
123
|
+
#
|
124
|
+
# @param [String] service_name name of the service to query
|
125
|
+
# @return [QUERY_SERVICE_CONFIGW.struct] the configuration of the service
|
126
|
+
def service_start_type(service_name)
|
127
|
+
start_type = nil
|
128
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_QUERY_CONFIG) do |service|
|
129
|
+
query_config(service) do |config|
|
130
|
+
start_type = SERVICE_START_TYPES[config[:dwStartType]]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
# if the service has type AUTO_START, check if it's a delayed service
|
134
|
+
if start_type == :SERVICE_AUTO_START
|
135
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_QUERY_CONFIG) do |service|
|
136
|
+
query_config2(service, SERVICE_CONFIG_DELAYED_AUTO_START_INFO) do |config|
|
137
|
+
return :SERVICE_DELAYED_AUTO_START if config[:fDelayedAutostart] == 1
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
if start_type.nil?
|
142
|
+
raise Puppet::Error, _("Unknown start type '%{start_type}' for '%{service_name}'") % { start_type: start_type.to_s, service_name: service_name }
|
143
|
+
end
|
144
|
+
|
145
|
+
start_type
|
146
|
+
end
|
147
|
+
module_function :service_start_type
|
148
|
+
|
149
|
+
# Query the configuration of a service using QueryServiceConfigW
|
150
|
+
# to find its current logon account
|
151
|
+
#
|
152
|
+
# @return [String] logon_account account currently set for the service's logon
|
153
|
+
# in the format "DOMAIN\Account" or ".\Account" if it's a local account
|
154
|
+
def logon_account(service_name)
|
155
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_QUERY_CONFIG) do |service|
|
156
|
+
query_config(service) do |config|
|
157
|
+
return config[:lpServiceStartName].read_arbitrary_wide_string_up_to(Puppet::Util::Windows::ADSI::User::MAX_USERNAME_LENGTH)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
module_function :logon_account
|
162
|
+
|
163
|
+
# Set the startup configuration of a windows service
|
164
|
+
#
|
165
|
+
# @param [String] service_name the name of the service to modify
|
166
|
+
# @param [Hash] options the configuration to be applied. Expected option keys:
|
167
|
+
# - [Integer] startup_type a code corresponding to a start type for
|
168
|
+
# windows service, see the "Service start type codes" section in the
|
169
|
+
# Puppet::Util::Windows::Service file for the list of available codes
|
170
|
+
# - [String] logon_account the account to be used by the service for logon
|
171
|
+
# - [String] logon_password the provided logon_account's password to be used by the service for logon
|
172
|
+
# - [Bool] delayed whether the service should be started with a delay
|
173
|
+
def set_startup_configuration(service_name, options: {})
|
174
|
+
options[:startup_type] = SERVICE_START_TYPES.key(options[:startup_type]) || SERVICE_NO_CHANGE
|
175
|
+
options[:logon_account] = wide_string(options[:logon_account]) || FFI::Pointer::NULL
|
176
|
+
options[:logon_password] = wide_string(options[:logon_password]) || FFI::Pointer::NULL
|
177
|
+
|
178
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_CHANGE_CONFIG) do |service|
|
179
|
+
success = ChangeServiceConfigW(
|
180
|
+
service,
|
181
|
+
SERVICE_NO_CHANGE, # dwServiceType
|
182
|
+
options[:startup_type], # dwStartType
|
183
|
+
SERVICE_NO_CHANGE, # dwErrorControl
|
184
|
+
FFI::Pointer::NULL, # lpBinaryPathName
|
185
|
+
FFI::Pointer::NULL, # lpLoadOrderGroup
|
186
|
+
FFI::Pointer::NULL, # lpdwTagId
|
187
|
+
FFI::Pointer::NULL, # lpDependencies
|
188
|
+
options[:logon_account], # lpServiceStartName
|
189
|
+
options[:logon_password], # lpPassword
|
190
|
+
FFI::Pointer::NULL # lpDisplayName
|
191
|
+
)
|
192
|
+
if success == FFI::WIN32_FALSE
|
193
|
+
raise Puppet::Util::Windows::Error, _("Failed to update service configuration")
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
if options[:startup_type]
|
198
|
+
options[:delayed] ||= false
|
199
|
+
set_startup_mode_delayed(service_name, options[:delayed])
|
200
|
+
end
|
201
|
+
end
|
202
|
+
module_function :set_startup_configuration
|
203
|
+
|
204
|
+
# enumerate over all services in all states and return them as a hash
|
205
|
+
#
|
206
|
+
# @return [Hash] a hash containing services:
|
207
|
+
# { 'service name' => {
|
208
|
+
# 'display_name' => 'display name',
|
209
|
+
# 'service_status_process' => SERVICE_STATUS_PROCESS struct
|
210
|
+
# }
|
211
|
+
# }
|
212
|
+
def services
|
213
|
+
services = {}
|
214
|
+
open_scm(SC_MANAGER_ENUMERATE_SERVICE) do |scm|
|
215
|
+
size_required = 0
|
216
|
+
services_returned = 0
|
217
|
+
FFI::MemoryPointer.new(:dword) do |bytes_pointer|
|
218
|
+
FFI::MemoryPointer.new(:dword) do |svcs_ret_ptr|
|
219
|
+
FFI::MemoryPointer.new(:dword) do |resume_ptr|
|
220
|
+
resume_ptr.write_dword(0)
|
221
|
+
# Fetch the bytes of memory required to be allocated
|
222
|
+
# for QueryServiceConfigW to return succesfully. This
|
223
|
+
# is done by sending NULL and 0 for the pointer and size
|
224
|
+
# respectively, letting the command fail, then reading the
|
225
|
+
# value of pcbBytesNeeded
|
226
|
+
#
|
227
|
+
# return value will be false from this call, since it's designed
|
228
|
+
# to fail. Just ignore it
|
229
|
+
EnumServicesStatusExW(
|
230
|
+
scm,
|
231
|
+
:SC_ENUM_PROCESS_INFO,
|
232
|
+
ALL_SERVICE_TYPES,
|
233
|
+
SERVICE_STATE_ALL,
|
234
|
+
FFI::Pointer::NULL,
|
235
|
+
0,
|
236
|
+
bytes_pointer,
|
237
|
+
svcs_ret_ptr,
|
238
|
+
resume_ptr,
|
239
|
+
FFI::Pointer::NULL
|
240
|
+
)
|
241
|
+
size_required = bytes_pointer.read_dword
|
242
|
+
FFI::MemoryPointer.new(size_required) do |buffer_ptr|
|
243
|
+
resume_ptr.write_dword(0)
|
244
|
+
svcs_ret_ptr.write_dword(0)
|
245
|
+
success = EnumServicesStatusExW(
|
246
|
+
scm,
|
247
|
+
:SC_ENUM_PROCESS_INFO,
|
248
|
+
ALL_SERVICE_TYPES,
|
249
|
+
SERVICE_STATE_ALL,
|
250
|
+
buffer_ptr,
|
251
|
+
buffer_ptr.size,
|
252
|
+
bytes_pointer,
|
253
|
+
svcs_ret_ptr,
|
254
|
+
resume_ptr,
|
255
|
+
FFI::Pointer::NULL
|
256
|
+
)
|
257
|
+
if success == FFI::WIN32_FALSE
|
258
|
+
raise Puppet::Util::Windows::Error, _("Failed to fetch services")
|
259
|
+
end
|
260
|
+
|
261
|
+
# Now that the buffer is populated with services
|
262
|
+
# we pull the data from memory using pointer arithmetic:
|
263
|
+
# the number of services returned by the function is
|
264
|
+
# available to be read from svcs_ret_ptr, and we iterate
|
265
|
+
# that many times moving the cursor pointer the length of
|
266
|
+
# ENUM_SERVICE_STATUS_PROCESSW.size. This should iterate
|
267
|
+
# over the buffer and extract each struct.
|
268
|
+
services_returned = svcs_ret_ptr.read_dword
|
269
|
+
cursor_ptr = FFI::Pointer.new(ENUM_SERVICE_STATUS_PROCESSW, buffer_ptr)
|
270
|
+
0.upto(services_returned - 1) do |index|
|
271
|
+
service = ENUM_SERVICE_STATUS_PROCESSW.new(cursor_ptr[index])
|
272
|
+
services[service[:lpServiceName].read_arbitrary_wide_string_up_to(SERVICENAME_MAX)] = {
|
273
|
+
:display_name => service[:lpDisplayName].read_arbitrary_wide_string_up_to(SERVICENAME_MAX),
|
274
|
+
:service_status_process => service[:ServiceStatusProcess]
|
275
|
+
}
|
276
|
+
end
|
277
|
+
end # buffer_ptr
|
278
|
+
end # resume_ptr
|
279
|
+
end # scvs_ret_ptr
|
280
|
+
end # bytes_ptr
|
281
|
+
end # open_scm
|
282
|
+
services
|
283
|
+
end
|
284
|
+
module_function :services
|
285
|
+
|
286
|
+
class << self
|
287
|
+
# @api private
|
288
|
+
# Opens a connection to the SCManager on windows then uses that
|
289
|
+
# handle to create a handle to a specific service in windows
|
290
|
+
# corresponding to service_name
|
291
|
+
#
|
292
|
+
# this function takes a block that executes within the context of
|
293
|
+
# the open service handler, and will close the service and SCManager
|
294
|
+
# handles once the block finishes
|
295
|
+
#
|
296
|
+
# @param [string] service_name the name of the service to open
|
297
|
+
# @param [Integer] scm_access code corresponding to the access type requested for the scm
|
298
|
+
# @param [Integer] service_access code corresponding to the access type requested for the service
|
299
|
+
# @yieldparam [:handle] service the windows native handle used to access
|
300
|
+
# the service
|
301
|
+
# @return the result of the block
|
302
|
+
def open_service(service_name, scm_access, service_access, &block)
|
303
|
+
service = FFI::Pointer::NULL_HANDLE
|
304
|
+
|
305
|
+
result = nil
|
306
|
+
open_scm(scm_access) do |scm|
|
307
|
+
service = OpenServiceW(scm, wide_string(service_name), service_access)
|
308
|
+
raise Puppet::Util::Windows::Error, _("Failed to open a handle to the service") if service == FFI::Pointer::NULL_HANDLE
|
309
|
+
|
310
|
+
result = yield service
|
311
|
+
end
|
312
|
+
|
313
|
+
result
|
314
|
+
ensure
|
315
|
+
CloseServiceHandle(service)
|
316
|
+
end
|
317
|
+
private :open_service
|
318
|
+
|
319
|
+
# @api private
|
320
|
+
#
|
321
|
+
# Opens a handle to the service control manager
|
322
|
+
#
|
323
|
+
# @param [Integer] scm_access code corresponding to the access type requested for the scm
|
324
|
+
def open_scm(scm_access, &block)
|
325
|
+
scm = OpenSCManagerW(FFI::Pointer::NULL, FFI::Pointer::NULL, scm_access)
|
326
|
+
raise Puppet::Util::Windows::Error, _("Failed to open a handle to the service control manager") if scm == FFI::Pointer::NULL_HANDLE
|
327
|
+
|
328
|
+
yield scm
|
329
|
+
ensure
|
330
|
+
CloseServiceHandle(scm)
|
331
|
+
end
|
332
|
+
private :open_scm
|
333
|
+
|
334
|
+
# @api private
|
335
|
+
# Transition the service to the specified state. The block should perform
|
336
|
+
# the actual transition.
|
337
|
+
#
|
338
|
+
# @param [String] service_name the name of the service to transition
|
339
|
+
# @param [[Integer]] valid_initial_states an array of valid states that the service can transition from
|
340
|
+
# @param [Integer] final_state the state that the service will transition to
|
341
|
+
# @param [Integer] timeout the minumum number of seconds to wait before timing out
|
342
|
+
def transition_service_state(service_name, valid_initial_states, final_state, timeout, &block)
|
343
|
+
service_access = SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_QUERY_STATUS
|
344
|
+
open_service(service_name, SC_MANAGER_CONNECT, service_access) do |service|
|
345
|
+
query_status(service) do |status|
|
346
|
+
initial_state = status[:dwCurrentState]
|
347
|
+
# If the service is already in the final_state, then
|
348
|
+
# no further work needs to be done
|
349
|
+
if initial_state == final_state
|
350
|
+
Puppet.debug _("The service is already in the %{final_state} state. No further work needs to be done.") % { final_state: SERVICE_STATES[final_state] }
|
351
|
+
|
352
|
+
next
|
353
|
+
end
|
354
|
+
|
355
|
+
# Check that initial_state corresponds to a valid
|
356
|
+
# initial state
|
357
|
+
unless valid_initial_states.include?(initial_state)
|
358
|
+
valid_initial_states_str = valid_initial_states.map do |state|
|
359
|
+
SERVICE_STATES[state]
|
360
|
+
end.join(", ")
|
361
|
+
|
362
|
+
raise Puppet::Error, _("The service must be in one of the %{valid_initial_states} states to perform this transition. It is currently in the %{current_state} state.") % { valid_initial_states: valid_initial_states_str, current_state: SERVICE_STATES[initial_state] }
|
363
|
+
end
|
364
|
+
|
365
|
+
# Check if there's a pending transition to the final_state. If so, then wait for
|
366
|
+
# that transition to finish.
|
367
|
+
possible_pending_states = FINAL_STATES.keys.select do |pending_state|
|
368
|
+
# SERVICE_RUNNING has two pending states, SERVICE_START_PENDING and
|
369
|
+
# SERVICE_CONTINUE_PENDING. That is why we need the #select here
|
370
|
+
FINAL_STATES[pending_state] == final_state
|
371
|
+
end
|
372
|
+
if possible_pending_states.include?(initial_state)
|
373
|
+
Puppet.debug _("There is already a pending transition to the %{final_state} state for the %{service_name} service.") % { final_state: SERVICE_STATES[final_state], service_name: service_name }
|
374
|
+
wait_on_pending_state(service, initial_state, timeout)
|
375
|
+
|
376
|
+
next
|
377
|
+
end
|
378
|
+
|
379
|
+
# If we are in an unsafe pending state like SERVICE_START_PENDING
|
380
|
+
# or SERVICE_STOP_PENDING, then we want to wait for that pending
|
381
|
+
# transition to finish before transitioning the service state.
|
382
|
+
# The reason we do this is because SERVICE_START_PENDING is when
|
383
|
+
# the service thread is being created and initialized, while
|
384
|
+
# SERVICE_STOP_PENDING is when the service thread is being cleaned
|
385
|
+
# up and destroyed. Thus there is a chance that when the service is
|
386
|
+
# in either of these states, its service thread may not yet be ready
|
387
|
+
# to perform the state transition (it may not even exist).
|
388
|
+
if UNSAFE_PENDING_STATES.include?(initial_state)
|
389
|
+
Puppet.debug _("The service is in the %{pending_state} state, which is an unsafe pending state.") % { pending_state: SERVICE_STATES[initial_state] }
|
390
|
+
wait_on_pending_state(service, initial_state, timeout)
|
391
|
+
initial_state = FINAL_STATES[initial_state]
|
392
|
+
end
|
393
|
+
|
394
|
+
Puppet.debug _("Transitioning the %{service_name} service from %{initial_state} to %{final_state}") % { service_name: service_name, initial_state: SERVICE_STATES[initial_state], final_state: SERVICE_STATES[final_state] }
|
395
|
+
|
396
|
+
yield service
|
397
|
+
|
398
|
+
Puppet.debug _("Waiting for the transition to finish")
|
399
|
+
wait_on_state_transition(service, initial_state, final_state, timeout)
|
400
|
+
end
|
401
|
+
end
|
402
|
+
rescue => detail
|
403
|
+
raise Puppet::Error, _("Failed to transition the %{service_name} service to the %{final_state} state. Detail: %{detail}") % { service_name: service_name, final_state: SERVICE_STATES[final_state], detail: detail }, detail.backtrace
|
404
|
+
end
|
405
|
+
private :transition_service_state
|
406
|
+
|
407
|
+
# @api private
|
408
|
+
# perform QueryServiceStatusEx on a windows service and return the
|
409
|
+
# result
|
410
|
+
#
|
411
|
+
# @param [:handle] service handle of the service to query
|
412
|
+
# @return [SERVICE_STATUS_PROCESS struct] the result of the query
|
413
|
+
def query_status(service)
|
414
|
+
size_required = nil
|
415
|
+
status = nil
|
416
|
+
# Fetch the bytes of memory required to be allocated
|
417
|
+
# for QueryServiceConfigW to return succesfully. This
|
418
|
+
# is done by sending NULL and 0 for the pointer and size
|
419
|
+
# respectively, letting the command fail, then reading the
|
420
|
+
# value of pcbBytesNeeded
|
421
|
+
FFI::MemoryPointer.new(:lpword) do |bytes_pointer|
|
422
|
+
# return value will be false from this call, since it's designed
|
423
|
+
# to fail. Just ignore it
|
424
|
+
QueryServiceStatusEx(
|
425
|
+
service,
|
426
|
+
:SC_STATUS_PROCESS_INFO,
|
427
|
+
FFI::Pointer::NULL,
|
428
|
+
0,
|
429
|
+
bytes_pointer
|
430
|
+
)
|
431
|
+
size_required = bytes_pointer.read_dword
|
432
|
+
FFI::MemoryPointer.new(size_required) do |ssp_ptr|
|
433
|
+
status = SERVICE_STATUS_PROCESS.new(ssp_ptr)
|
434
|
+
success = QueryServiceStatusEx(
|
435
|
+
service,
|
436
|
+
:SC_STATUS_PROCESS_INFO,
|
437
|
+
ssp_ptr,
|
438
|
+
size_required,
|
439
|
+
bytes_pointer
|
440
|
+
)
|
441
|
+
if success == FFI::WIN32_FALSE
|
442
|
+
raise Puppet::Util::Windows::Error, _("Service query failed")
|
443
|
+
end
|
444
|
+
|
445
|
+
yield status
|
446
|
+
end
|
447
|
+
end
|
448
|
+
end
|
449
|
+
private :query_status
|
450
|
+
|
451
|
+
# @api private
|
452
|
+
# perform QueryServiceConfigW on a windows service and return the
|
453
|
+
# result
|
454
|
+
#
|
455
|
+
# @param [:handle] service handle of the service to query
|
456
|
+
# @return [QUERY_SERVICE_CONFIGW struct] the result of the query
|
457
|
+
def query_config(service, &block)
|
458
|
+
config = nil
|
459
|
+
size_required = nil
|
460
|
+
# Fetch the bytes of memory required to be allocated
|
461
|
+
# for QueryServiceConfigW to return succesfully. This
|
462
|
+
# is done by sending NULL and 0 for the pointer and size
|
463
|
+
# respectively, letting the command fail, then reading the
|
464
|
+
# value of pcbBytesNeeded
|
465
|
+
FFI::MemoryPointer.new(:lpword) do |bytes_pointer|
|
466
|
+
# return value will be false from this call, since it's designed
|
467
|
+
# to fail. Just ignore it
|
468
|
+
QueryServiceConfigW(service, FFI::Pointer::NULL, 0, bytes_pointer)
|
469
|
+
size_required = bytes_pointer.read_dword
|
470
|
+
FFI::MemoryPointer.new(size_required) do |ssp_ptr|
|
471
|
+
config = QUERY_SERVICE_CONFIGW.new(ssp_ptr)
|
472
|
+
success = QueryServiceConfigW(
|
473
|
+
service,
|
474
|
+
ssp_ptr,
|
475
|
+
size_required,
|
476
|
+
bytes_pointer
|
477
|
+
)
|
478
|
+
if success == FFI::WIN32_FALSE
|
479
|
+
raise Puppet::Util::Windows::Error, _("Service query failed")
|
480
|
+
end
|
481
|
+
|
482
|
+
yield config
|
483
|
+
end
|
484
|
+
end
|
485
|
+
end
|
486
|
+
private :query_config
|
487
|
+
|
488
|
+
# @api private
|
489
|
+
# perform QueryServiceConfig2W on a windows service and return the
|
490
|
+
# result
|
491
|
+
#
|
492
|
+
# @param [:handle] service handle of the service to query
|
493
|
+
# @param [Integer] info_level the configuration information to be queried
|
494
|
+
# @return [QUERY_SERVICE_CONFIG2W struct] the result of the query
|
495
|
+
def query_config2(service, info_level, &block)
|
496
|
+
config = nil
|
497
|
+
size_required = nil
|
498
|
+
# Fetch the bytes of memory required to be allocated
|
499
|
+
# for QueryServiceConfig2W to return succesfully. This
|
500
|
+
# is done by sending NULL and 0 for the pointer and size
|
501
|
+
# respectively, letting the command fail, then reading the
|
502
|
+
# value of pcbBytesNeeded
|
503
|
+
FFI::MemoryPointer.new(:lpword) do |bytes_pointer|
|
504
|
+
# return value will be false from this call, since it's designed
|
505
|
+
# to fail. Just ignore it
|
506
|
+
QueryServiceConfig2W(service, info_level, FFI::Pointer::NULL, 0, bytes_pointer)
|
507
|
+
size_required = bytes_pointer.read_dword
|
508
|
+
FFI::MemoryPointer.new(size_required) do |ssp_ptr|
|
509
|
+
# We need to supply the appropriate struct to be created based on
|
510
|
+
# the info_level
|
511
|
+
case info_level
|
512
|
+
when SERVICE_CONFIG_DELAYED_AUTO_START_INFO
|
513
|
+
config = SERVICE_DELAYED_AUTO_START_INFO.new(ssp_ptr)
|
514
|
+
end
|
515
|
+
success = QueryServiceConfig2W(
|
516
|
+
service,
|
517
|
+
info_level,
|
518
|
+
ssp_ptr,
|
519
|
+
size_required,
|
520
|
+
bytes_pointer
|
521
|
+
)
|
522
|
+
if success == FFI::WIN32_FALSE
|
523
|
+
raise Puppet::Util::Windows::Error, _("Service query for %{parameter_name} failed") % { parameter_name: SERVICE_CONFIG_TYPES[info_level] }
|
524
|
+
end
|
525
|
+
|
526
|
+
yield config
|
527
|
+
end
|
528
|
+
end
|
529
|
+
end
|
530
|
+
private :query_config2
|
531
|
+
|
532
|
+
# @api private
|
533
|
+
# Sets an optional parameter on a service by calling
|
534
|
+
# ChangeServiceConfig2W
|
535
|
+
#
|
536
|
+
# @param [String] service_name name of service
|
537
|
+
# @param [Integer] change parameter to change
|
538
|
+
# @param [struct] value appropriate struct based on the parameter to change
|
539
|
+
def set_optional_parameter(service_name, change, value)
|
540
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_CHANGE_CONFIG) do |service|
|
541
|
+
success = ChangeServiceConfig2W(
|
542
|
+
service,
|
543
|
+
change, # dwInfoLevel
|
544
|
+
value # lpInfo
|
545
|
+
)
|
546
|
+
if success == FFI::WIN32_FALSE
|
547
|
+
raise Puppet::Util.windows::Error, _("Failed to update service %{change} configuration") % { change: change }
|
548
|
+
end
|
549
|
+
end
|
550
|
+
end
|
551
|
+
private :set_optional_parameter
|
552
|
+
|
553
|
+
# @api private
|
554
|
+
# Controls the delayed auto-start setting of a service
|
555
|
+
#
|
556
|
+
# @param [String] service_name name of service
|
557
|
+
# @param [Bool] delayed whether the service should be started with a delay or not
|
558
|
+
def set_startup_mode_delayed(service_name, delayed)
|
559
|
+
delayed_start = SERVICE_DELAYED_AUTO_START_INFO.new
|
560
|
+
delayed_start[:fDelayedAutostart] = delayed
|
561
|
+
set_optional_parameter(service_name, SERVICE_CONFIG_DELAYED_AUTO_START_INFO, delayed_start)
|
562
|
+
end
|
563
|
+
private :set_startup_mode_delayed
|
564
|
+
|
565
|
+
# @api private
|
566
|
+
# Sends a service control signal to a service
|
567
|
+
#
|
568
|
+
# @param [:handle] service handle to the service
|
569
|
+
# @param [Integer] signal the service control signal to send
|
570
|
+
def send_service_control_signal(service, signal)
|
571
|
+
FFI::MemoryPointer.new(SERVICE_STATUS.size) do |status_ptr|
|
572
|
+
status = SERVICE_STATUS.new(status_ptr)
|
573
|
+
if ControlService(service, signal, status) == FFI::WIN32_FALSE
|
574
|
+
raise Puppet::Util::Windows::Error, _("Failed to send the %{control_signal} signal to the service. Its current state is %{current_state}. Reason for failure:") % { control_signal: SERVICE_CONTROL_SIGNALS[signal], current_state: SERVICE_STATES[status[:dwCurrentState]] }
|
575
|
+
end
|
576
|
+
end
|
577
|
+
end
|
578
|
+
|
579
|
+
# @api private
|
580
|
+
# Waits for a service to transition from one state to
|
581
|
+
# another state.
|
582
|
+
#
|
583
|
+
# @param [:handle] service handle to the service to wait on
|
584
|
+
# @param [Integer] initial_state the state that the service is transitioning from.
|
585
|
+
# @param [Integer] final_state the state that the service is transitioning to
|
586
|
+
# @param [Integer] timeout the minumum number of seconds to wait before timing out
|
587
|
+
def wait_on_state_transition(service, initial_state, final_state, timeout)
|
588
|
+
# Get the pending state for this transition. Note that SERVICE_RUNNING
|
589
|
+
# has two possible pending states, which is why we need this logic.
|
590
|
+
if final_state != SERVICE_RUNNING
|
591
|
+
pending_state = FINAL_STATES.key(final_state)
|
592
|
+
elsif initial_state == SERVICE_STOPPED
|
593
|
+
# SERVICE_STOPPED => SERVICE_RUNNING
|
594
|
+
pending_state = SERVICE_START_PENDING
|
595
|
+
else
|
596
|
+
# SERVICE_PAUSED => SERVICE_RUNNING
|
597
|
+
pending_state = SERVICE_CONTINUE_PENDING
|
598
|
+
end
|
599
|
+
|
600
|
+
# Wait for the transition to finish
|
601
|
+
state = nil
|
602
|
+
elapsed_time = 0
|
603
|
+
while elapsed_time <= timeout
|
604
|
+
|
605
|
+
query_status(service) do |status|
|
606
|
+
state = status[:dwCurrentState]
|
607
|
+
return if state == final_state
|
608
|
+
|
609
|
+
if state == pending_state
|
610
|
+
Puppet.debug _("The service transitioned to the %{pending_state} state.") % { pending_state: SERVICE_STATES[pending_state] }
|
611
|
+
wait_on_pending_state(service, pending_state, timeout)
|
612
|
+
return
|
613
|
+
end
|
614
|
+
sleep(1)
|
615
|
+
elapsed_time += 1
|
616
|
+
end
|
617
|
+
end
|
618
|
+
# Timed out while waiting for the transition to finish. Raise an error
|
619
|
+
# We can still use the state variable read from the FFI struct because
|
620
|
+
# FFI creates new Integer objects during an assignment of an integer value
|
621
|
+
# stored in an FFI struct. We verified that the '=' operater is safe
|
622
|
+
# from the freed memory since the new ruby object created during the
|
623
|
+
# assignment will remain in ruby memory and remain immutable and constant.
|
624
|
+
raise Puppet::Error, _("Timed out while waiting for the service to transition from %{initial_state} to %{final_state} OR from %{initial_state} to %{pending_state} to %{final_state}. The service's current state is %{current_state}.") % { initial_state: SERVICE_STATES[initial_state], final_state: SERVICE_STATES[final_state], pending_state: SERVICE_STATES[pending_state], current_state: SERVICE_STATES[state] }
|
625
|
+
end
|
626
|
+
private :wait_on_state_transition
|
627
|
+
|
628
|
+
# @api private
|
629
|
+
# Waits for a service to finish transitioning from
|
630
|
+
# a pending state. The service must be in the pending state
|
631
|
+
# before invoking this routine.
|
632
|
+
#
|
633
|
+
# @param [:handle] service handle to the service to wait on
|
634
|
+
# @param [Integer] pending_state the pending state
|
635
|
+
# @param [Integer] timeout the minumum number of seconds to wait before timing out
|
636
|
+
def wait_on_pending_state(service, pending_state, timeout)
|
637
|
+
final_state = FINAL_STATES[pending_state]
|
638
|
+
|
639
|
+
Puppet.debug _("Waiting for the pending transition to the %{final_state} state to finish.") % { final_state: SERVICE_STATES[final_state] }
|
640
|
+
|
641
|
+
elapsed_time = 0
|
642
|
+
last_checkpoint = -1
|
643
|
+
loop do
|
644
|
+
query_status(service) do |status|
|
645
|
+
state = status[:dwCurrentState]
|
646
|
+
checkpoint = status[:dwCheckPoint]
|
647
|
+
wait_hint = status[:dwWaitHint]
|
648
|
+
# Check if our service has finished transitioning to
|
649
|
+
# the final_state OR if an unexpected transition
|
650
|
+
# has occurred
|
651
|
+
return if state == final_state
|
652
|
+
unless state == pending_state
|
653
|
+
raise Puppet::Error, _("Unexpected transition to the %{current_state} state while waiting for the pending transition from %{pending_state} to %{final_state} to finish.") % { current_state: SERVICE_STATES[state], pending_state: SERVICE_STATES[pending_state], final_state: SERVICE_STATES[final_state] }
|
654
|
+
end
|
655
|
+
|
656
|
+
# Check if any progress has been made since our last sleep
|
657
|
+
# using the dwCheckPoint. If no progress has been made then
|
658
|
+
# check if we've timed out, and raise an error if so
|
659
|
+
if checkpoint > last_checkpoint
|
660
|
+
elapsed_time = 0
|
661
|
+
last_checkpoint = checkpoint
|
662
|
+
else
|
663
|
+
wait_hint = milliseconds_to_seconds(status[:dwWaitHint])
|
664
|
+
timeout = wait_hint < timeout ? timeout : wait_hint
|
665
|
+
|
666
|
+
if elapsed_time >= timeout
|
667
|
+
raise Puppet::Error, _("Timed out while waiting for the pending transition from %{pending_state} to %{final_state} to finish. The current state is %{current_state}.") % { pending_state: SERVICE_STATES[pending_state], final_state: SERVICE_STATES[final_state], current_state: SERVICE_STATES[state] }
|
668
|
+
end
|
669
|
+
end
|
670
|
+
wait_time = wait_hint_to_wait_time(wait_hint)
|
671
|
+
# Wait a bit before rechecking the service's state
|
672
|
+
sleep(wait_time)
|
673
|
+
elapsed_time += wait_time
|
674
|
+
end
|
675
|
+
end
|
676
|
+
end
|
677
|
+
private :wait_on_pending_state
|
678
|
+
|
679
|
+
# @api private
|
680
|
+
#
|
681
|
+
# create a usable wait time to wait between querying the service.
|
682
|
+
#
|
683
|
+
# @param [Integer] wait_hint the wait hint of a service in milliseconds
|
684
|
+
# @return [Integer] the time to wait in seconds between querying the service
|
685
|
+
def wait_hint_to_wait_time(wait_hint)
|
686
|
+
# Wait 1/10th the wait_hint, but no less than 1 and
|
687
|
+
# no more than 10 seconds
|
688
|
+
wait_time = milliseconds_to_seconds(wait_hint) / 10;
|
689
|
+
wait_time = 1 if wait_time < 1
|
690
|
+
wait_time = 10 if wait_time > 10
|
691
|
+
wait_time
|
692
|
+
end
|
693
|
+
private :wait_hint_to_wait_time
|
694
|
+
|
695
|
+
# @api private
|
696
|
+
#
|
697
|
+
# process the wait hint listed by a service to something
|
698
|
+
# usable by ruby sleep
|
699
|
+
#
|
700
|
+
# @param [Integer] wait_hint the wait hint of a service in milliseconds
|
701
|
+
# @return [Integer] wait_hint in seconds
|
702
|
+
def milliseconds_to_seconds(wait_hint)
|
703
|
+
wait_hint / 1000;
|
704
|
+
end
|
705
|
+
private :milliseconds_to_seconds
|
706
|
+
end
|
707
|
+
end
|
708
|
+
end
|