puppet 6.23.0 → 7.0.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 +4 -4
- data/CODEOWNERS +16 -2
- data/Gemfile +1 -3
- data/Gemfile.lock +34 -46
- data/README.md +1 -1
- data/conf/fileserver.conf +5 -10
- data/ext/build_defaults.yaml +1 -1
- data/ext/osx/file_mapping.yaml +0 -5
- data/ext/osx/puppet.plist +0 -2
- data/ext/project_data.yaml +1 -14
- data/ext/redhat/puppet.spec.erb +0 -1
- data/ext/windows/service/daemon.rb +6 -5
- data/install.rb +21 -17
- data/lib/puppet.rb +11 -20
- data/lib/puppet/application.rb +178 -108
- data/lib/puppet/application/agent.rb +4 -12
- data/lib/puppet/application/apply.rb +2 -4
- data/lib/puppet/application/device.rb +100 -106
- data/lib/puppet/application/filebucket.rb +13 -9
- data/lib/puppet/application/resource.rb +1 -2
- data/lib/puppet/application/script.rb +0 -2
- data/lib/puppet/application/ssl.rb +1 -12
- data/lib/puppet/application_support.rb +0 -7
- data/lib/puppet/configurer.rb +30 -45
- data/lib/puppet/configurer/downloader.rb +1 -2
- data/lib/puppet/configurer/plugin_handler.rb +21 -19
- data/lib/puppet/defaults.rb +100 -192
- data/lib/puppet/environments.rb +60 -74
- data/lib/puppet/face/facts.rb +5 -103
- data/lib/puppet/face/help.rb +1 -1
- data/lib/puppet/face/plugin.rb +5 -8
- data/lib/puppet/ffi/windows.rb +12 -0
- data/lib/puppet/ffi/windows/api_types.rb +311 -0
- data/lib/puppet/ffi/windows/constants.rb +404 -0
- data/lib/puppet/ffi/windows/functions.rb +628 -0
- data/lib/puppet/ffi/windows/structs.rb +338 -0
- data/lib/puppet/file_serving/configuration.rb +0 -5
- data/lib/puppet/file_serving/configuration/parser.rb +3 -32
- data/lib/puppet/file_serving/fileset.rb +2 -14
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_serving/mount.rb +1 -2
- data/lib/puppet/file_system/memory_file.rb +1 -8
- data/lib/puppet/file_system/windows.rb +0 -2
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/functions/all.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +1 -1
- data/lib/puppet/functions/capitalize.rb +2 -2
- data/lib/puppet/functions/downcase.rb +2 -2
- data/lib/puppet/functions/get.rb +5 -5
- data/lib/puppet/functions/group_by.rb +5 -13
- data/lib/puppet/functions/lest.rb +1 -1
- data/lib/puppet/functions/new.rb +100 -100
- data/lib/puppet/functions/partition.rb +4 -12
- data/lib/puppet/functions/require.rb +5 -5
- data/lib/puppet/functions/sort.rb +3 -3
- data/lib/puppet/functions/tree_each.rb +9 -7
- data/lib/puppet/functions/type.rb +4 -4
- data/lib/puppet/functions/upcase.rb +2 -2
- data/lib/puppet/generate/models/type/type.rb +4 -1
- data/lib/puppet/http.rb +22 -13
- data/lib/puppet/http/client.rb +164 -114
- data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
- data/lib/puppet/http/errors.rb +16 -0
- data/lib/puppet/http/external_client.rb +5 -7
- data/lib/puppet/{network/http → http}/factory.rb +8 -15
- data/lib/puppet/{network/http → http}/pool.rb +61 -26
- data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
- data/lib/puppet/http/proxy.rb +137 -0
- data/lib/puppet/http/redirector.rb +4 -12
- data/lib/puppet/http/resolver.rb +5 -15
- data/lib/puppet/http/resolver/server_list.rb +10 -25
- data/lib/puppet/http/resolver/settings.rb +4 -7
- data/lib/puppet/http/resolver/srv.rb +7 -11
- data/lib/puppet/http/response.rb +36 -54
- data/lib/puppet/http/response_converter.rb +24 -0
- data/lib/puppet/http/response_net_http.rb +42 -0
- data/lib/puppet/http/retry_after_handler.rb +4 -13
- data/lib/puppet/http/service.rb +12 -26
- data/lib/puppet/http/service/ca.rb +11 -22
- data/lib/puppet/http/service/compiler.rb +22 -138
- data/lib/puppet/http/service/file_server.rb +19 -29
- data/lib/puppet/http/service/puppetserver.rb +26 -12
- data/lib/puppet/http/service/report.rb +8 -10
- data/lib/puppet/http/session.rb +11 -20
- data/lib/puppet/{network/http → http}/site.rb +1 -2
- data/lib/puppet/indirector/catalog/compiler.rb +0 -1
- data/lib/puppet/indirector/catalog/rest.rb +2 -4
- data/lib/puppet/indirector/facts/rest.rb +3 -22
- data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
- data/lib/puppet/indirector/file_content/rest.rb +2 -6
- data/lib/puppet/indirector/file_metadata/rest.rb +3 -10
- data/lib/puppet/indirector/file_server.rb +1 -8
- data/lib/puppet/indirector/generic_http.rb +0 -11
- data/lib/puppet/indirector/node/rest.rb +2 -4
- data/lib/puppet/indirector/report/rest.rb +3 -8
- data/lib/puppet/indirector/request.rb +0 -101
- data/lib/puppet/indirector/rest.rb +12 -263
- data/lib/puppet/module_tool/applications.rb +0 -1
- data/lib/puppet/module_tool/applications/installer.rb +2 -48
- data/lib/puppet/module_tool/errors/shared.rb +2 -17
- data/lib/puppet/network/authconfig.rb +2 -96
- data/lib/puppet/network/authorization.rb +13 -35
- data/lib/puppet/network/formats.rb +0 -67
- data/lib/puppet/network/http.rb +3 -3
- data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
- data/lib/puppet/network/http/api/master/v3.rb +11 -13
- data/lib/puppet/network/http/connection.rb +247 -316
- data/lib/puppet/network/http/handler.rb +0 -1
- data/lib/puppet/network/http_pool.rb +16 -34
- data/lib/puppet/node.rb +1 -30
- data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
- data/lib/puppet/pal/pal_impl.rb +3 -1
- data/lib/puppet/parser/ast/leaf.rb +2 -3
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
- data/lib/puppet/parser/compiler.rb +0 -198
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
- data/lib/puppet/parser/functions/fqdn_rand.rb +6 -14
- data/lib/puppet/parser/resource.rb +0 -69
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -5
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/issues.rb +0 -5
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
- data/lib/puppet/pops/model/ast.pp +0 -42
- data/lib/puppet/pops/model/ast.rb +0 -290
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +0 -45
- data/lib/puppet/pops/model/model_label_provider.rb +0 -5
- data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
- data/lib/puppet/pops/model/pn_transformer.rb +0 -16
- data/lib/puppet/pops/parser/egrammar.ra +0 -56
- data/lib/puppet/pops/parser/eparser.rb +1520 -1712
- data/lib/puppet/pops/parser/lexer2.rb +4 -4
- data/lib/puppet/pops/parser/parser_support.rb +0 -5
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
- data/lib/puppet/pops/types/p_sem_ver_type.rb +2 -8
- data/lib/puppet/pops/types/p_sensitive_type.rb +0 -10
- data/lib/puppet/pops/types/type_calculator.rb +0 -7
- data/lib/puppet/pops/types/type_parser.rb +0 -4
- data/lib/puppet/pops/types/types.rb +0 -1
- data/lib/puppet/pops/validation/checker4_0.rb +9 -37
- data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider.rb +0 -13
- data/lib/puppet/provider/group/groupadd.rb +8 -13
- data/lib/puppet/provider/nameservice.rb +0 -18
- data/lib/puppet/provider/package/apt.rb +2 -34
- data/lib/puppet/provider/package/aptitude.rb +0 -6
- data/lib/puppet/provider/package/dnfmodule.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +0 -10
- data/lib/puppet/provider/package/gem.rb +23 -3
- data/lib/puppet/provider/package/nim.rb +6 -11
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pkg.rb +0 -4
- data/lib/puppet/provider/package/portage.rb +1 -1
- data/lib/puppet/provider/package/puppet_gem.rb +1 -4
- data/lib/puppet/provider/service/debian.rb +0 -2
- data/lib/puppet/provider/service/smf.rb +191 -73
- data/lib/puppet/provider/service/systemd.rb +4 -14
- data/lib/puppet/provider/service/windows.rb +0 -38
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/directoryservice.rb +10 -33
- data/lib/puppet/provider/user/useradd.rb +8 -62
- data/lib/puppet/reference/configuration.rb +8 -7
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +1 -89
- data/lib/puppet/resource/catalog.rb +1 -14
- data/lib/puppet/resource/type.rb +3 -119
- data/lib/puppet/resource/type_collection.rb +3 -48
- data/lib/puppet/runtime.rb +1 -2
- data/lib/puppet/settings.rb +73 -66
- data/lib/puppet/settings/environment_conf.rb +0 -1
- data/lib/puppet/settings/integer_setting.rb +17 -0
- data/lib/puppet/settings/port_setting.rb +15 -0
- data/lib/puppet/settings/priority_setting.rb +5 -4
- data/lib/puppet/ssl.rb +10 -6
- data/lib/puppet/ssl/base.rb +3 -5
- data/lib/puppet/ssl/certificate.rb +0 -6
- data/lib/puppet/ssl/certificate_request.rb +1 -12
- data/lib/puppet/ssl/certificate_signer.rb +6 -0
- data/lib/puppet/ssl/oids.rb +3 -1
- data/lib/puppet/ssl/ssl_provider.rb +17 -0
- data/lib/puppet/ssl/state_machine.rb +3 -1
- data/lib/puppet/ssl/verifier.rb +2 -0
- data/lib/puppet/test/test_helper.rb +1 -3
- data/lib/puppet/transaction.rb +1 -7
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/transaction/report.rb +2 -4
- data/lib/puppet/type.rb +0 -76
- data/lib/puppet/type/file.rb +6 -26
- data/lib/puppet/type/file/checksum.rb +1 -1
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +3 -3
- data/lib/puppet/type/package.rb +8 -16
- data/lib/puppet/type/service.rb +38 -18
- data/lib/puppet/type/tidy.rb +2 -21
- data/lib/puppet/type/user.rb +20 -38
- data/lib/puppet/util/autoload.rb +8 -1
- data/lib/puppet/util/execution.rb +0 -11
- data/lib/puppet/util/http_proxy.rb +2 -215
- data/lib/puppet/util/monkey_patches.rb +0 -53
- data/lib/puppet/util/posix.rb +5 -54
- data/lib/puppet/util/rdoc.rb +0 -7
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/run_mode.rb +9 -1
- data/lib/puppet/util/selinux.rb +4 -30
- data/lib/puppet/util/windows.rb +3 -8
- data/lib/puppet/util/windows/adsi.rb +0 -46
- data/lib/puppet/util/windows/daemon.rb +360 -0
- data/lib/puppet/util/windows/error.rb +1 -0
- data/lib/puppet/util/windows/eventlog.rb +4 -9
- data/lib/puppet/util/windows/file.rb +8 -242
- data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
- data/lib/puppet/util/windows/principal.rb +2 -9
- data/lib/puppet/util/windows/process.rb +4 -226
- data/lib/puppet/util/windows/service.rb +9 -460
- data/lib/puppet/util/windows/sid.rb +2 -4
- data/lib/puppet/util/windows/string.rb +12 -13
- data/lib/puppet/util/yaml.rb +0 -22
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509.rb +5 -1
- data/lib/puppet/x509/cert_provider.rb +29 -1
- data/locales/puppet.pot +651 -1436
- data/man/man5/puppet.conf.5 +266 -354
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +4 -47
- data/man/man8/puppet-filebucket.8 +4 -4
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +1 -58
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -5
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/ssl/127.0.0.1-key.pem +57 -107
- data/spec/fixtures/ssl/127.0.0.1.pem +31 -52
- data/spec/fixtures/ssl/bad-basic-constraints.pem +35 -57
- data/spec/fixtures/ssl/bad-int-basic-constraints.pem +35 -57
- data/spec/fixtures/ssl/ca.pem +35 -57
- data/spec/fixtures/ssl/crl.pem +18 -28
- data/spec/fixtures/ssl/ec-key.pem +11 -11
- data/spec/fixtures/ssl/ec.pem +24 -33
- data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
- data/spec/fixtures/ssl/encrypted-key.pem +58 -108
- data/spec/fixtures/ssl/intermediate-agent-crl.pem +19 -28
- data/spec/fixtures/ssl/intermediate-agent.pem +36 -57
- data/spec/fixtures/ssl/intermediate-crl.pem +21 -31
- data/spec/fixtures/ssl/intermediate.pem +36 -57
- data/spec/fixtures/ssl/pluto-key.pem +57 -107
- data/spec/fixtures/ssl/pluto.pem +30 -52
- data/spec/fixtures/ssl/request-key.pem +57 -107
- data/spec/fixtures/ssl/request.pem +26 -47
- data/spec/fixtures/ssl/revoked-key.pem +57 -107
- data/spec/fixtures/ssl/revoked.pem +30 -52
- data/spec/fixtures/ssl/signed-key.pem +57 -107
- data/spec/fixtures/ssl/signed.pem +30 -52
- data/spec/fixtures/ssl/tampered-cert.pem +30 -52
- data/spec/fixtures/ssl/tampered-csr.pem +26 -47
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +57 -107
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +29 -50
- data/spec/fixtures/ssl/unknown-ca-key.pem +57 -107
- data/spec/fixtures/ssl/unknown-ca.pem +33 -55
- data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +0 -4
- data/spec/integration/application/agent_spec.rb +27 -171
- data/spec/integration/application/apply_spec.rb +1 -20
- data/spec/integration/application/filebucket_spec.rb +16 -16
- data/spec/integration/application/help_spec.rb +2 -0
- data/spec/integration/application/plugin_spec.rb +24 -2
- data/spec/integration/defaults_spec.rb +14 -3
- data/spec/integration/http/client_spec.rb +0 -12
- data/spec/integration/indirector/direct_file_server_spec.rb +3 -1
- data/spec/integration/network/http_pool_spec.rb +3 -21
- data/spec/integration/parser/catalog_spec.rb +0 -38
- data/spec/integration/parser/node_spec.rb +0 -9
- data/spec/integration/parser/pcore_resource_spec.rb +0 -37
- data/spec/integration/resource/type_collection_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +9 -4
- data/spec/integration/type/file_spec.rb +5 -4
- data/spec/integration/util/windows/adsi_spec.rb +1 -21
- data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
- data/spec/integration/util/windows/principal_spec.rb +0 -21
- data/spec/integration/util/windows/registry_spec.rb +10 -6
- data/spec/integration/util/windows/security_spec.rb +1 -1
- data/spec/lib/matchers/include.rb +27 -0
- data/spec/lib/matchers/include_spec.rb +32 -0
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/puppetserver.rb +1 -1
- data/spec/lib/puppet_spec/settings.rb +1 -0
- data/spec/spec_helper.rb +7 -12
- data/spec/unit/agent_spec.rb +6 -10
- data/spec/unit/application/agent_spec.rb +3 -7
- data/spec/unit/application/facts_spec.rb +12 -456
- data/spec/unit/application/filebucket_spec.rb +43 -39
- data/spec/unit/application/ssl_spec.rb +2 -25
- data/spec/unit/application_spec.rb +9 -51
- data/spec/unit/certificate_factory_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +6 -8
- data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
- data/spec/unit/configurer_spec.rb +12 -32
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +2 -8
- data/spec/unit/context/trusted_information_spec.rb +2 -6
- data/spec/unit/defaults_spec.rb +68 -54
- data/spec/unit/environments_spec.rb +68 -224
- data/spec/unit/face/node_spec.rb +11 -0
- data/spec/unit/face/plugin_spec.rb +73 -33
- data/spec/unit/file_bucket/file_spec.rb +1 -1
- data/spec/unit/file_serving/configuration/parser_spec.rb +15 -18
- data/spec/unit/file_serving/configuration_spec.rb +6 -12
- data/spec/unit/file_serving/fileset_spec.rb +0 -60
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +4 -11
- data/spec/unit/file_system_spec.rb +0 -9
- data/spec/unit/forge/module_release_spec.rb +7 -2
- data/spec/unit/functions/camelcase_spec.rb +1 -1
- data/spec/unit/functions/capitalize_spec.rb +1 -1
- data/spec/unit/functions/downcase_spec.rb +1 -1
- data/spec/unit/functions/upcase_spec.rb +1 -1
- data/spec/unit/gettext/config_spec.rb +0 -12
- data/spec/unit/http/client_spec.rb +7 -8
- data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
- data/spec/unit/http/external_client_spec.rb +4 -4
- data/spec/unit/{network/http → http}/factory_spec.rb +5 -30
- data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
- data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
- data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
- data/spec/unit/http/resolver_spec.rb +13 -13
- data/spec/unit/http/service/compiler_spec.rb +0 -185
- data/spec/unit/http/service/file_server_spec.rb +3 -3
- data/spec/unit/http/service/puppetserver_spec.rb +34 -4
- data/spec/unit/http/service_spec.rb +0 -1
- data/spec/unit/http/session_spec.rb +16 -14
- data/spec/unit/{network/http → http}/site_spec.rb +3 -3
- data/spec/unit/indirector/catalog/compiler_spec.rb +10 -14
- data/spec/unit/indirector/face_spec.rb +1 -0
- data/spec/unit/indirector/facts/facter_spec.rb +3 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +8 -26
- data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
- data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
- data/spec/unit/indirector/file_server_spec.rb +1 -15
- data/spec/unit/indirector/indirection_spec.rb +12 -8
- data/spec/unit/indirector/report/rest_spec.rb +2 -17
- data/spec/unit/indirector/request_spec.rb +0 -264
- data/spec/unit/indirector/rest_spec.rb +98 -752
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +0 -66
- data/spec/unit/network/authconfig_spec.rb +2 -129
- data/spec/unit/network/authorization_spec.rb +2 -55
- data/spec/unit/network/formats_spec.rb +4 -45
- data/spec/unit/network/http/api/indirected_routes_spec.rb +5 -92
- data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
- data/spec/unit/network/http/api_spec.rb +10 -0
- data/spec/unit/network/http/connection_spec.rb +19 -41
- data/spec/unit/network/http/handler_spec.rb +0 -1
- data/spec/unit/network/http_pool_spec.rb +0 -4
- data/spec/unit/node/environment_spec.rb +33 -21
- data/spec/unit/node_spec.rb +2 -54
- data/spec/unit/parser/compiler_spec.rb +19 -3
- data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +1 -15
- data/spec/unit/parser/resource_spec.rb +8 -14
- data/spec/unit/parser/templatewrapper_spec.rb +3 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
- data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
- data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
- data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +0 -18
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +0 -18
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
- data/spec/unit/pops/types/type_factory_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +61 -46
- data/spec/unit/pops/visitor_spec.rb +1 -1
- data/spec/unit/property_spec.rb +0 -1
- data/spec/unit/provider/group/groupadd_spec.rb +2 -5
- data/spec/unit/provider/nameservice_spec.rb +64 -122
- data/spec/unit/provider/package/apt_spec.rb +23 -28
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +5 -6
- data/spec/unit/provider/package/dnfmodule_spec.rb +1 -10
- data/spec/unit/provider/package/dpkg_spec.rb +0 -48
- data/spec/unit/provider/package/gem_spec.rb +32 -0
- data/spec/unit/provider/package/nim_spec.rb +0 -42
- data/spec/unit/provider/package/pacman_spec.rb +12 -18
- data/spec/unit/provider/package/pip_spec.rb +11 -6
- data/spec/unit/provider/package/pkgdmg_spec.rb +4 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
- data/spec/unit/provider/service/init_spec.rb +0 -1
- data/spec/unit/provider/service/openwrt_spec.rb +1 -3
- data/spec/unit/provider/service/smf_spec.rb +401 -165
- data/spec/unit/provider/service/systemd_spec.rb +8 -53
- data/spec/unit/provider/service/windows_spec.rb +0 -203
- data/spec/unit/provider/user/aix_spec.rb +0 -5
- data/spec/unit/provider/user/directoryservice_spec.rb +35 -67
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +0 -2
- data/spec/unit/provider/user/useradd_spec.rb +3 -71
- data/spec/unit/provider_spec.rb +8 -18
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/resource/type_collection_spec.rb +2 -22
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +10 -67
- data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
- data/spec/unit/settings/integer_setting_spec.rb +42 -0
- data/spec/unit/settings/port_setting_spec.rb +31 -0
- data/spec/unit/settings/priority_setting_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +23 -13
- data/spec/unit/ssl/base_spec.rb +37 -3
- data/spec/unit/ssl/certificate_request_spec.rb +15 -45
- data/spec/unit/ssl/certificate_spec.rb +2 -11
- data/spec/unit/ssl/ssl_provider_spec.rb +2 -5
- data/spec/unit/ssl/state_machine_spec.rb +5 -20
- data/spec/unit/ssl/verifier_spec.rb +0 -21
- data/spec/unit/transaction/additional_resource_generator_spec.rb +9 -3
- data/spec/unit/transaction/event_manager_spec.rb +11 -14
- data/spec/unit/transaction/report_spec.rb +0 -2
- data/spec/unit/transaction/resource_harness_spec.rb +2 -2
- data/spec/unit/transaction_spec.rb +55 -96
- data/spec/unit/type/file/checksum_spec.rb +6 -6
- data/spec/unit/type/file/content_spec.rb +2 -1
- data/spec/unit/type/file/ensure_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +1 -1
- data/spec/unit/type/file/selinux_spec.rb +5 -3
- data/spec/unit/type/file/source_spec.rb +0 -1
- data/spec/unit/type/file_spec.rb +18 -6
- data/spec/unit/type/group_spec.rb +6 -13
- data/spec/unit/type/package_spec.rb +1 -1
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +189 -60
- data/spec/unit/type/tidy_spec.rb +8 -17
- data/spec/unit/type/user_spec.rb +0 -45
- data/spec/unit/type_spec.rb +22 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +1 -5
- data/spec/unit/util/backups_spec.rb +2 -3
- data/spec/unit/util/execution_spec.rb +11 -44
- data/spec/unit/util/inifile_spec.rb +14 -6
- data/spec/unit/util/log_spec.rb +7 -8
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/monkey_patches_spec.rb +0 -6
- data/spec/unit/util/posix_spec.rb +15 -363
- data/spec/unit/util/run_mode_spec.rb +21 -121
- data/spec/unit/util/selinux_spec.rb +68 -163
- data/spec/unit/util/storage_spec.rb +1 -3
- data/spec/unit/util/suidmanager_spec.rb +41 -44
- data/spec/unit/util/windows/sid_spec.rb +0 -6
- data/spec/unit/util/windows/string_spec.rb +1 -3
- data/spec/unit/util/yaml_spec.rb +0 -54
- data/spec/unit/util_spec.rb +6 -31
- data/tasks/generate_cert_fixtures.rake +2 -2
- metadata +44 -181
- data/conf/auth.conf +0 -150
- data/lib/puppet/application/cert.rb +0 -76
- data/lib/puppet/application/key.rb +0 -4
- data/lib/puppet/application/man.rb +0 -4
- data/lib/puppet/application/status.rb +0 -4
- data/lib/puppet/face/key.rb +0 -16
- data/lib/puppet/face/man.rb +0 -145
- data/lib/puppet/face/module/build.rb +0 -14
- data/lib/puppet/face/module/generate.rb +0 -14
- data/lib/puppet/face/module/search.rb +0 -103
- data/lib/puppet/face/status.rb +0 -51
- data/lib/puppet/ffi/posix.rb +0 -10
- data/lib/puppet/ffi/posix/constants.rb +0 -14
- data/lib/puppet/ffi/posix/functions.rb +0 -24
- data/lib/puppet/indirector/certificate/file.rb +0 -9
- data/lib/puppet/indirector/certificate/rest.rb +0 -18
- data/lib/puppet/indirector/certificate_request/file.rb +0 -9
- data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
- data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
- data/lib/puppet/indirector/file_content/http.rb +0 -22
- data/lib/puppet/indirector/key/file.rb +0 -46
- data/lib/puppet/indirector/key/memory.rb +0 -7
- data/lib/puppet/indirector/ssl_file.rb +0 -162
- data/lib/puppet/indirector/status.rb +0 -3
- data/lib/puppet/indirector/status/local.rb +0 -12
- data/lib/puppet/indirector/status/rest.rb +0 -27
- data/lib/puppet/module_tool/applications/searcher.rb +0 -29
- data/lib/puppet/network/auth_config_parser.rb +0 -90
- data/lib/puppet/network/authstore.rb +0 -283
- data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
- data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
- data/lib/puppet/network/http/base_pool.rb +0 -36
- data/lib/puppet/network/http/compression.rb +0 -127
- data/lib/puppet/network/http/connection_adapter.rb +0 -184
- data/lib/puppet/network/http/nocache_pool.rb +0 -28
- data/lib/puppet/network/rest_controller.rb +0 -2
- data/lib/puppet/network/rights.rb +0 -210
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
- data/lib/puppet/parser/environment_compiler.rb +0 -202
- data/lib/puppet/pops/types/enumeration.rb +0 -16
- data/lib/puppet/resource/capability_finder.rb +0 -154
- data/lib/puppet/rest/errors.rb +0 -15
- data/lib/puppet/rest/response.rb +0 -35
- data/lib/puppet/rest/route.rb +0 -85
- data/lib/puppet/rest/routes.rb +0 -135
- data/lib/puppet/settings/alias_setting.rb +0 -37
- data/lib/puppet/ssl/host.rb +0 -505
- data/lib/puppet/ssl/key.rb +0 -61
- data/lib/puppet/ssl/validator.rb +0 -61
- data/lib/puppet/ssl/validator/default_validator.rb +0 -209
- data/lib/puppet/ssl/validator/no_validator.rb +0 -22
- data/lib/puppet/ssl/verifier_adapter.rb +0 -58
- data/lib/puppet/status.rb +0 -40
- data/lib/puppet/util/connection.rb +0 -88
- data/lib/puppet/util/fact_dif.rb +0 -81
- data/lib/puppet/util/ssl.rb +0 -83
- data/lib/puppet/util/windows/api_types.rb +0 -309
- data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
- data/lib/puppet/vendor/load_pathspec.rb +0 -1
- data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
- data/lib/puppet/vendor/pathspec/LICENSE +0 -201
- data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/pathspec/README.md +0 -53
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
- data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
- data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
- data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
- data/man/man8/puppet-key.8 +0 -126
- data/man/man8/puppet-man.8 +0 -76
- data/man/man8/puppet-status.8 +0 -108
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +0 -91
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +0 -9
- data/spec/integration/application/resource_spec.rb +0 -30
- data/spec/integration/network/authconfig_spec.rb +0 -256
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
- data/spec/unit/application/man_spec.rb +0 -52
- data/spec/unit/capability_spec.rb +0 -414
- data/spec/unit/face/key_spec.rb +0 -9
- data/spec/unit/face/module/search_spec.rb +0 -231
- data/spec/unit/face/status_spec.rb +0 -9
- data/spec/unit/indirector/certificate/file_spec.rb +0 -14
- data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
- data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
- data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
- data/spec/unit/indirector/key/file_spec.rb +0 -78
- data/spec/unit/indirector/ssl_file_spec.rb +0 -305
- data/spec/unit/indirector/status/local_spec.rb +0 -10
- data/spec/unit/indirector/status/rest_spec.rb +0 -50
- data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
- data/spec/unit/network/auth_config_parser_spec.rb +0 -115
- data/spec/unit/network/authstore_spec.rb +0 -422
- data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
- data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
- data/spec/unit/network/http/compression_spec.rb +0 -240
- data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
- data/spec/unit/network/http_spec.rb +0 -9
- data/spec/unit/network/rights_spec.rb +0 -439
- data/spec/unit/parser/environment_compiler_spec.rb +0 -730
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +0 -20
- data/spec/unit/pops/types/enumeration_spec.rb +0 -51
- data/spec/unit/resource/capability_finder_spec.rb +0 -148
- data/spec/unit/rest/route_spec.rb +0 -132
- data/spec/unit/ssl/host_spec.rb +0 -645
- data/spec/unit/ssl/key_spec.rb +0 -173
- data/spec/unit/ssl/validator_spec.rb +0 -278
- data/spec/unit/status_spec.rb +0 -45
- data/spec/unit/util/ssl_spec.rb +0 -91
data/lib/puppet/environments.rb
CHANGED
|
@@ -225,9 +225,6 @@ module Puppet::Environments
|
|
|
225
225
|
private
|
|
226
226
|
|
|
227
227
|
def create_environment(name)
|
|
228
|
-
# interpolated modulepaths may be cached from prior environment instances
|
|
229
|
-
Puppet.settings.clear_environment_settings(name)
|
|
230
|
-
|
|
231
228
|
env_symbol = name.intern
|
|
232
229
|
setting_values = Puppet.settings.values(env_symbol, Puppet.settings.preferred_run_mode)
|
|
233
230
|
env = Puppet::Node::Environment.create(
|
|
@@ -349,23 +346,17 @@ module Puppet::Environments
|
|
|
349
346
|
@loader = loader
|
|
350
347
|
@cache_expiration_service = Puppet::Environments::Cached.cache_expiration_service
|
|
351
348
|
@cache = {}
|
|
349
|
+
|
|
350
|
+
# Holds expiration times in sorted order - next to expire is first
|
|
351
|
+
@expirations = SortedSet.new
|
|
352
|
+
|
|
353
|
+
# Infinity since it there are no entries, this is a cache of the first to expire time
|
|
354
|
+
@next_expiration = END_OF_TIME
|
|
352
355
|
end
|
|
353
356
|
|
|
354
357
|
# @!macro loader_list
|
|
355
358
|
def list
|
|
356
|
-
|
|
357
|
-
clear_all_expired
|
|
358
|
-
|
|
359
|
-
@loader.list.map do |env|
|
|
360
|
-
name = env.name
|
|
361
|
-
old_entry = @cache[name]
|
|
362
|
-
if old_entry
|
|
363
|
-
old_entry.value
|
|
364
|
-
else
|
|
365
|
-
add_entry(name, entry(env))
|
|
366
|
-
env
|
|
367
|
-
end
|
|
368
|
-
end
|
|
359
|
+
@loader.list
|
|
369
360
|
end
|
|
370
361
|
|
|
371
362
|
# @!macro loader_search_paths
|
|
@@ -388,6 +379,7 @@ module Puppet::Environments
|
|
|
388
379
|
elsif (result = @loader.get(name))
|
|
389
380
|
# environment loaded, cache it
|
|
390
381
|
cache_entry = entry(result)
|
|
382
|
+
@cache_expiration_service.created(result)
|
|
391
383
|
add_entry(name, cache_entry)
|
|
392
384
|
result
|
|
393
385
|
end
|
|
@@ -397,36 +389,28 @@ module Puppet::Environments
|
|
|
397
389
|
def add_entry(name, cache_entry)
|
|
398
390
|
Puppet.debug {"Caching environment '#{name}' #{cache_entry.label}"}
|
|
399
391
|
@cache[name] = cache_entry
|
|
400
|
-
|
|
392
|
+
expires = cache_entry.expires
|
|
393
|
+
@expirations.add(expires)
|
|
394
|
+
if @next_expiration > expires
|
|
395
|
+
@next_expiration = expires
|
|
396
|
+
end
|
|
401
397
|
end
|
|
402
398
|
private :add_entry
|
|
403
399
|
|
|
404
|
-
def clear_entry(name, entry)
|
|
405
|
-
@cache.delete(name)
|
|
406
|
-
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
|
407
|
-
@cache_expiration_service.evicted(name.to_sym)
|
|
408
|
-
Puppet::GettextConfig.delete_text_domain(name)
|
|
409
|
-
Puppet.settings.clear_environment_settings(name)
|
|
410
|
-
end
|
|
411
|
-
private :clear_entry
|
|
412
|
-
|
|
413
400
|
# Clears the cache of the environment with the given name.
|
|
414
401
|
# (The intention is that this could be used from a MANUAL cache eviction command (TBD)
|
|
415
402
|
def clear(name)
|
|
416
|
-
|
|
417
|
-
|
|
403
|
+
@cache.delete(name)
|
|
404
|
+
Puppet::GettextConfig.delete_text_domain(name)
|
|
418
405
|
end
|
|
419
406
|
|
|
420
407
|
# Clears all cached environments.
|
|
421
408
|
# (The intention is that this could be used from a MANUAL cache eviction command (TBD)
|
|
422
|
-
def clear_all
|
|
409
|
+
def clear_all()
|
|
423
410
|
super
|
|
424
|
-
|
|
425
|
-
@cache.each_pair do |name, entry|
|
|
426
|
-
clear_entry(name, entry)
|
|
427
|
-
end
|
|
428
|
-
|
|
429
411
|
@cache = {}
|
|
412
|
+
@expirations.clear
|
|
413
|
+
@next_expiration = END_OF_TIME
|
|
430
414
|
Puppet::GettextConfig.delete_environment_text_domains
|
|
431
415
|
end
|
|
432
416
|
|
|
@@ -435,23 +419,17 @@ module Puppet::Environments
|
|
|
435
419
|
#
|
|
436
420
|
def clear_all_expired()
|
|
437
421
|
t = Time.now
|
|
438
|
-
|
|
439
|
-
@cache.
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
#
|
|
447
|
-
def clear_if_expired(name, entry, t = Time.now)
|
|
448
|
-
return unless entry
|
|
449
|
-
|
|
450
|
-
if entry.expired?(t) || @cache_expiration_service.expired?(name.to_sym)
|
|
451
|
-
clear_entry(name, entry)
|
|
422
|
+
return if t < @next_expiration && ! @cache.any? {|name, _| @cache_expiration_service.expired?(name.to_sym) }
|
|
423
|
+
to_expire = @cache.select { |name, entry| entry.expires < t || @cache_expiration_service.expired?(name.to_sym) }
|
|
424
|
+
to_expire.each do |name, entry|
|
|
425
|
+
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
|
426
|
+
@cache_expiration_service.evicted(name.to_sym)
|
|
427
|
+
clear(name)
|
|
428
|
+
@expirations.delete(entry.expires)
|
|
429
|
+
Puppet.settings.clear_environment_settings(name)
|
|
452
430
|
end
|
|
431
|
+
@next_expiration = @expirations.first || END_OF_TIME
|
|
453
432
|
end
|
|
454
|
-
private :clear_if_expired
|
|
455
433
|
|
|
456
434
|
# This implementation evicts the cache, and always gets the current
|
|
457
435
|
# configuration of the environment
|
|
@@ -462,7 +440,7 @@ module Puppet::Environments
|
|
|
462
440
|
#
|
|
463
441
|
# @!macro loader_get_conf
|
|
464
442
|
def get_conf(name)
|
|
465
|
-
|
|
443
|
+
evict_if_expired(name)
|
|
466
444
|
@loader.get_conf(name)
|
|
467
445
|
end
|
|
468
446
|
|
|
@@ -481,11 +459,18 @@ module Puppet::Environments
|
|
|
481
459
|
when Float::INFINITY
|
|
482
460
|
Entry.new(env) # Entry that never expires (avoids syscall to get time)
|
|
483
461
|
else
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
462
|
+
MRUEntry.new(env, ttl) # Entry that expires in ttl from when it was last touched
|
|
463
|
+
end
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
# Evicts the entry if it has expired
|
|
467
|
+
# Also clears caches in Settings that may prevent the entry from being updated
|
|
468
|
+
def evict_if_expired(name)
|
|
469
|
+
if (result = @cache[name]) && (result.expired? || @cache_expiration_service.expired?(name.to_sym))
|
|
470
|
+
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
|
471
|
+
@cache_expiration_service.evicted(name.to_sym)
|
|
472
|
+
clear(name)
|
|
473
|
+
Puppet.settings.clear_environment_settings(name)
|
|
489
474
|
end
|
|
490
475
|
end
|
|
491
476
|
|
|
@@ -500,57 +485,58 @@ module Puppet::Environments
|
|
|
500
485
|
def touch
|
|
501
486
|
end
|
|
502
487
|
|
|
503
|
-
def expired?
|
|
488
|
+
def expired?
|
|
504
489
|
false
|
|
505
490
|
end
|
|
506
491
|
|
|
507
492
|
def label
|
|
508
493
|
""
|
|
509
494
|
end
|
|
495
|
+
|
|
496
|
+
def expires
|
|
497
|
+
END_OF_TIME
|
|
498
|
+
end
|
|
510
499
|
end
|
|
511
500
|
|
|
512
501
|
# Always evicting entry
|
|
513
502
|
class NotCachedEntry < Entry
|
|
514
|
-
def expired?
|
|
503
|
+
def expired?
|
|
515
504
|
true
|
|
516
505
|
end
|
|
517
506
|
|
|
518
507
|
def label
|
|
519
508
|
"(ttl = 0 sec)"
|
|
520
509
|
end
|
|
510
|
+
|
|
511
|
+
def expires
|
|
512
|
+
START_OF_TIME
|
|
513
|
+
end
|
|
521
514
|
end
|
|
522
515
|
|
|
523
|
-
# Policy that expires
|
|
524
|
-
class
|
|
516
|
+
# Policy that expires if it hasn't been touched within ttl_seconds
|
|
517
|
+
class MRUEntry < Entry
|
|
525
518
|
def initialize(value, ttl_seconds)
|
|
526
519
|
super(value)
|
|
527
520
|
@ttl = Time.now + ttl_seconds
|
|
528
521
|
@ttl_seconds = ttl_seconds
|
|
529
|
-
end
|
|
530
522
|
|
|
531
|
-
|
|
532
|
-
now > @ttl
|
|
523
|
+
touch
|
|
533
524
|
end
|
|
534
525
|
|
|
535
|
-
def
|
|
536
|
-
|
|
526
|
+
def touch
|
|
527
|
+
@ttl = Time.now + @ttl_seconds
|
|
537
528
|
end
|
|
538
|
-
end
|
|
539
|
-
|
|
540
|
-
# Policy that expires if it hasn't been touched within ttl_seconds
|
|
541
|
-
class MRUEntry < TTLEntry
|
|
542
|
-
def initialize(value, ttl_seconds)
|
|
543
|
-
super(value, ttl_seconds)
|
|
544
529
|
|
|
545
|
-
|
|
530
|
+
def expired?
|
|
531
|
+
Time.now > @ttl
|
|
546
532
|
end
|
|
547
533
|
|
|
548
|
-
def
|
|
549
|
-
@ttl
|
|
534
|
+
def expires
|
|
535
|
+
@ttl
|
|
550
536
|
end
|
|
551
537
|
|
|
552
538
|
def label
|
|
553
|
-
"(
|
|
539
|
+
"(ttl = #{@ttl_seconds} sec)"
|
|
554
540
|
end
|
|
555
541
|
end
|
|
556
542
|
end
|
data/lib/puppet/face/facts.rb
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
1
|
require 'puppet/indirector/face'
|
|
2
2
|
require 'puppet/node/facts'
|
|
3
|
-
require 'puppet/util/fact_dif'
|
|
4
|
-
|
|
5
|
-
EXCLUDE_LIST = %w[ ^facterversion$
|
|
6
|
-
^load_averages\..*$
|
|
7
|
-
^processors\.speed$
|
|
8
|
-
^swapfree$ ^swapfree_mb$
|
|
9
|
-
^memoryfree$ ^memoryfree_mb$
|
|
10
|
-
^memory\.swap\.available_bytes$ ^memory\.swap\.used_bytes$
|
|
11
|
-
^memory\.swap\.available$ ^memory\.swap\.capacity$ ^memory\.swap\.used$
|
|
12
|
-
^memory\.system\.available_bytes$ ^memory\.system\.used_bytes$
|
|
13
|
-
^memory\.system\.available$ ^memory\.system\.capacity$ ^memory\.system\.used$
|
|
14
|
-
^mountpoints\..*\.available.*$ ^mountpoints\..*\.capacity$ ^mountpoints\..*\.used.*$
|
|
15
|
-
^sp_uptime$ ^system_profiler\.uptime$
|
|
16
|
-
^uptime$ ^uptime_days$ ^uptime_hours$ ^uptime_seconds$
|
|
17
|
-
^system_uptime\.uptime$ ^system_uptime\.days$ ^system_uptime\.hours$ ^system_uptime\.seconds$
|
|
18
|
-
]
|
|
19
3
|
|
|
20
4
|
Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
21
5
|
copyright "Puppet Inc.", 2011
|
|
@@ -47,7 +31,6 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
|
47
31
|
|
|
48
32
|
$ puppet facts find
|
|
49
33
|
EOT
|
|
50
|
-
find.default = true
|
|
51
34
|
|
|
52
35
|
deactivate_action(:destroy)
|
|
53
36
|
deactivate_action(:search)
|
|
@@ -60,16 +43,12 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
|
60
43
|
EOT
|
|
61
44
|
returns "Nothing."
|
|
62
45
|
notes <<-'EOT'
|
|
63
|
-
This action requires that the
|
|
46
|
+
This action requires that the Puppet Server's `auth.conf` file
|
|
64
47
|
allow `PUT` or `save` access to the `/puppet/v3/facts` API endpoint.
|
|
65
48
|
|
|
66
49
|
For details on configuring Puppet Server's `auth.conf`, see:
|
|
67
50
|
|
|
68
51
|
<https://puppet.com/docs/puppetserver/latest/config_file_auth.html>
|
|
69
|
-
|
|
70
|
-
For legacy Rack-based Puppet Masters, see:
|
|
71
|
-
|
|
72
|
-
<https://puppet.com/docs/puppet/latest/config_file_auth.html>
|
|
73
52
|
EOT
|
|
74
53
|
examples <<-'EOT'
|
|
75
54
|
Upload facts:
|
|
@@ -104,65 +83,6 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
|
104
83
|
end
|
|
105
84
|
end
|
|
106
85
|
|
|
107
|
-
action(:diff) do
|
|
108
|
-
summary _("Compare Facter 3 output with Facter 4 output")
|
|
109
|
-
description <<-'EOT'
|
|
110
|
-
Compares output from facter 3 with Facter 4 and prints the differences
|
|
111
|
-
EOT
|
|
112
|
-
returns "Differences between Facter 3 and Facter 4 output as an array."
|
|
113
|
-
notes <<-'EOT'
|
|
114
|
-
EOT
|
|
115
|
-
examples <<-'EOT'
|
|
116
|
-
get differences between facter versions:
|
|
117
|
-
$ puppet facts diff
|
|
118
|
-
EOT
|
|
119
|
-
|
|
120
|
-
option("--structured") do
|
|
121
|
-
default_to { false }
|
|
122
|
-
summary _("Render the different facts as structured.")
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
option("--exclude " + _("<regex>")) do
|
|
126
|
-
summary _("Regex used to exclude specific facts from diff.")
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
when_invoked do |*args|
|
|
130
|
-
options = args.pop
|
|
131
|
-
|
|
132
|
-
Puppet.settings.preferred_run_mode = :agent
|
|
133
|
-
Puppet::Node::Facts.indirection.terminus_class = :facter
|
|
134
|
-
|
|
135
|
-
if Puppet::Util::Package.versioncmp(Facter.value('facterversion'), '4.0.0') < 0
|
|
136
|
-
cmd_flags = '--render-as json --show-legacy'
|
|
137
|
-
|
|
138
|
-
# puppet/ruby are in PATH since it was updated in the wrapper script
|
|
139
|
-
puppet_show_cmd = "puppet facts show"
|
|
140
|
-
if Puppet::Util::Platform.windows?
|
|
141
|
-
puppet_show_cmd = "ruby -S -- #{puppet_show_cmd}"
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
facter_3_result = Puppet::Util::Execution.execute("#{puppet_show_cmd} --no-facterng #{cmd_flags}", combine: false)
|
|
145
|
-
facter_ng_result = Puppet::Util::Execution.execute("#{puppet_show_cmd} --facterng #{cmd_flags}", combine: false)
|
|
146
|
-
|
|
147
|
-
exclude_list = options[:exclude].nil? ? EXCLUDE_LIST : EXCLUDE_LIST + [ options[:exclude] ]
|
|
148
|
-
fact_diff = FactDif.new(facter_3_result, facter_ng_result, exclude_list, options[:structured])
|
|
149
|
-
fact_diff.difs
|
|
150
|
-
else
|
|
151
|
-
Puppet.warning _("Already using Facter 4. To use `puppet facts diff` remove facterng from the .conf file or run `puppet config set facterng false`.")
|
|
152
|
-
exit 0
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
when_rendering :console do |result|
|
|
157
|
-
case result
|
|
158
|
-
when Array, Hash
|
|
159
|
-
Puppet::Util::Json.dump(result, :pretty => true)
|
|
160
|
-
else
|
|
161
|
-
result
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
86
|
action(:show) do
|
|
167
87
|
summary _("Retrieve current node's facts.")
|
|
168
88
|
arguments _("[<facts>]")
|
|
@@ -179,6 +99,7 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
|
179
99
|
|
|
180
100
|
$ puppet facts show os
|
|
181
101
|
EOT
|
|
102
|
+
default true
|
|
182
103
|
|
|
183
104
|
option("--config-file " + _("<path>")) do
|
|
184
105
|
default_to { nil }
|
|
@@ -207,42 +128,23 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
|
207
128
|
summary _("Show legacy facts when querying all facts.")
|
|
208
129
|
end
|
|
209
130
|
|
|
210
|
-
option("--value-only") do
|
|
211
|
-
summary _("Show only the value when the action is called with a single query")
|
|
212
|
-
end
|
|
213
|
-
|
|
214
131
|
when_invoked do |*args|
|
|
215
132
|
options = args.pop
|
|
216
133
|
|
|
217
134
|
Puppet.settings.preferred_run_mode = :agent
|
|
218
135
|
Puppet::Node::Facts.indirection.terminus_class = :facter
|
|
219
136
|
|
|
220
|
-
if options[:value_only] && !args.count.eql?(1)
|
|
221
|
-
options[:value_only] = nil
|
|
222
|
-
Puppet.warning("Incorrect use of --value-only argument; it can only be used when querying for a single fact!")
|
|
223
|
-
end
|
|
224
137
|
|
|
225
138
|
options[:user_query] = args
|
|
226
139
|
options[:resolve_options] = true
|
|
227
140
|
result = Puppet::Node::Facts.indirection.find(Puppet.settings[:certname], options)
|
|
228
141
|
|
|
229
|
-
|
|
230
|
-
result.values.values.first
|
|
231
|
-
else
|
|
232
|
-
result.values
|
|
233
|
-
end
|
|
142
|
+
result.values
|
|
234
143
|
end
|
|
235
144
|
|
|
236
145
|
when_rendering :console do |result|
|
|
237
|
-
|
|
238
|
-
# from https://github.com/puppetlabs/facter/blob/4.0.49/lib/facter/custom_facts/util/normalization.rb#L8
|
|
239
|
-
|
|
240
|
-
case result
|
|
241
|
-
when Array, Hash
|
|
242
|
-
Puppet::Util::Json.dump(result, :pretty => true)
|
|
243
|
-
else # one of VALID_TYPES above
|
|
244
|
-
result
|
|
245
|
-
end
|
|
146
|
+
Puppet::Util::Json.dump(result, :pretty => true)
|
|
246
147
|
end
|
|
247
148
|
end
|
|
248
149
|
end
|
|
150
|
+
|
data/lib/puppet/face/help.rb
CHANGED
|
@@ -222,7 +222,7 @@ Puppet::Face.define(:help, '0.0.1') do
|
|
|
222
222
|
#private :horribly_extract_summary_from
|
|
223
223
|
|
|
224
224
|
def exclude_from_docs?(appname)
|
|
225
|
-
%w{face_base indirection_base
|
|
225
|
+
%w{face_base indirection_base report status}.include? appname
|
|
226
226
|
end
|
|
227
227
|
# This should absolutely be a private method, but for some reason it appears
|
|
228
228
|
# that you can't use the 'private' keyword inside of a Face definition.
|
data/lib/puppet/face/plugin.rb
CHANGED
|
@@ -41,14 +41,11 @@ Puppet::Face.define(:plugin, '0.0.1') do
|
|
|
41
41
|
when_invoked do |options|
|
|
42
42
|
remote_environment_for_plugins = Puppet::Node::Environment.remote(Puppet[:environment])
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
ensure
|
|
50
|
-
pool.close
|
|
51
|
-
end
|
|
44
|
+
begin
|
|
45
|
+
handler = Puppet::Configurer::PluginHandler.new
|
|
46
|
+
handler.download_plugins(remote_environment_for_plugins)
|
|
47
|
+
ensure
|
|
48
|
+
Puppet.runtime[:http].close
|
|
52
49
|
end
|
|
53
50
|
end
|
|
54
51
|
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
require 'puppet/ffi/windows'
|
|
2
|
+
require 'puppet/util/windows/string'
|
|
3
|
+
|
|
4
|
+
module Puppet::FFI::Windows
|
|
5
|
+
module APITypes
|
|
6
|
+
module ::FFI
|
|
7
|
+
WIN32_FALSE = 0
|
|
8
|
+
|
|
9
|
+
# standard Win32 error codes
|
|
10
|
+
ERROR_SUCCESS = 0
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module ::FFI::Library
|
|
14
|
+
# Wrapper method for attach_function + private
|
|
15
|
+
def attach_function_private(*args)
|
|
16
|
+
attach_function(*args)
|
|
17
|
+
private args[0]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class ::FFI::Pointer
|
|
22
|
+
NULL_HANDLE = 0
|
|
23
|
+
WCHAR_NULL = "\0\0".encode('UTF-16LE').freeze
|
|
24
|
+
|
|
25
|
+
def self.from_string_to_wide_string(str, &block)
|
|
26
|
+
str = Puppet::Util::Windows::String.wide_string(str)
|
|
27
|
+
FFI::MemoryPointer.from_wide_string(str, &block)
|
|
28
|
+
|
|
29
|
+
# ptr has already had free called, so nothing to return
|
|
30
|
+
nil
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def read_win32_bool
|
|
34
|
+
# BOOL is always a 32-bit integer in Win32
|
|
35
|
+
# some Win32 APIs return 1 for true, while others are non-0
|
|
36
|
+
read_int32 != FFI::WIN32_FALSE
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
alias_method :read_dword, :read_uint32
|
|
40
|
+
alias_method :read_win32_ulong, :read_uint32
|
|
41
|
+
alias_method :read_qword, :read_uint64
|
|
42
|
+
|
|
43
|
+
alias_method :read_hresult, :read_int32
|
|
44
|
+
|
|
45
|
+
def read_handle
|
|
46
|
+
type_size == 4 ? read_uint32 : read_uint64
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
alias_method :read_wchar, :read_uint16
|
|
50
|
+
alias_method :read_word, :read_uint16
|
|
51
|
+
alias_method :read_array_of_wchar, :read_array_of_uint16
|
|
52
|
+
|
|
53
|
+
def read_wide_string(char_length, dst_encoding = Encoding::UTF_8, strip = false, encode_options = {})
|
|
54
|
+
# char_length is number of wide chars (typically excluding NULLs), *not* bytes
|
|
55
|
+
str = get_bytes(0, char_length * 2).force_encoding('UTF-16LE')
|
|
56
|
+
|
|
57
|
+
if strip
|
|
58
|
+
i = str.index(WCHAR_NULL)
|
|
59
|
+
str = str[0, i] if i
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
str.encode(dst_encoding, str.encoding, **encode_options)
|
|
63
|
+
rescue EncodingError => e
|
|
64
|
+
Puppet.debug { "Unable to convert value #{str.nil? ? 'nil' : str.dump} to encoding #{dst_encoding} due to #{e.inspect}" }
|
|
65
|
+
raise
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @param max_char_length [Integer] Maximum number of wide chars to return (typically excluding NULLs), *not* bytes
|
|
69
|
+
# @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
|
|
70
|
+
# null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
|
|
71
|
+
# null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
|
|
72
|
+
# @param encode_options [Hash] Accepts the same option hash that may be passed to String#encode in Ruby
|
|
73
|
+
def read_arbitrary_wide_string_up_to(max_char_length = 512, null_terminator = :single_null, encode_options = {})
|
|
74
|
+
idx = case null_terminator
|
|
75
|
+
when :single_null
|
|
76
|
+
# find index of wide null between 0 and max (exclusive)
|
|
77
|
+
(0...max_char_length).find do |i|
|
|
78
|
+
get_uint16(i * 2) == 0
|
|
79
|
+
end
|
|
80
|
+
when :double_null
|
|
81
|
+
# find index of double-wide null between 0 and max - 1 (exclusive)
|
|
82
|
+
(0...max_char_length - 1).find do |i|
|
|
83
|
+
get_uint32(i * 2) == 0
|
|
84
|
+
end
|
|
85
|
+
else
|
|
86
|
+
raise _("Unable to read wide strings with %{null_terminator} terminal nulls") % { null_terminator: null_terminator }
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
read_wide_string(idx || max_char_length, Encoding::UTF_8, false, encode_options)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def read_win32_local_pointer(&block)
|
|
93
|
+
ptr = read_pointer
|
|
94
|
+
begin
|
|
95
|
+
yield ptr
|
|
96
|
+
ensure
|
|
97
|
+
if !ptr.null? && FFI::WIN32::LocalFree(ptr.address) != FFI::Pointer::NULL_HANDLE
|
|
98
|
+
Puppet.debug "LocalFree memory leak"
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# ptr has already had LocalFree called, so nothing to return
|
|
103
|
+
nil
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def read_com_memory_pointer(&block)
|
|
107
|
+
ptr = read_pointer
|
|
108
|
+
begin
|
|
109
|
+
yield ptr
|
|
110
|
+
ensure
|
|
111
|
+
FFI::WIN32::CoTaskMemFree(ptr) unless ptr.null?
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# ptr has already had CoTaskMemFree called, so nothing to return
|
|
115
|
+
nil
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
alias_method :write_dword, :write_uint32
|
|
119
|
+
alias_method :write_word, :write_uint16
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
class FFI::MemoryPointer
|
|
123
|
+
# Return a MemoryPointer that points to wide string. This is analogous to the
|
|
124
|
+
# FFI::MemoryPointer.from_string method.
|
|
125
|
+
def self.from_wide_string(wstr)
|
|
126
|
+
ptr = FFI::MemoryPointer.new(:uchar, wstr.bytesize + 2)
|
|
127
|
+
ptr.put_array_of_uchar(0, wstr.bytes.to_a)
|
|
128
|
+
ptr.put_uint16(wstr.bytesize, 0)
|
|
129
|
+
|
|
130
|
+
yield ptr if block_given?
|
|
131
|
+
|
|
132
|
+
ptr
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# FFI Types
|
|
137
|
+
# https://github.com/ffi/ffi/wiki/Types
|
|
138
|
+
|
|
139
|
+
# Windows - Common Data Types
|
|
140
|
+
# https://msdn.microsoft.com/en-us/library/cc230309.aspx
|
|
141
|
+
|
|
142
|
+
# Windows Data Types
|
|
143
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
|
|
144
|
+
|
|
145
|
+
FFI.typedef :uint16, :word
|
|
146
|
+
FFI.typedef :uint32, :dword
|
|
147
|
+
# uintptr_t is defined in an FFI conf as platform specific, either
|
|
148
|
+
# ulong_long on x64 or just ulong on x86
|
|
149
|
+
FFI.typedef :uintptr_t, :handle
|
|
150
|
+
FFI.typedef :uintptr_t, :hwnd
|
|
151
|
+
|
|
152
|
+
# buffer_inout is similar to pointer (platform specific), but optimized for buffers
|
|
153
|
+
FFI.typedef :buffer_inout, :lpwstr
|
|
154
|
+
# buffer_in is similar to pointer (platform specific), but optimized for CONST read only buffers
|
|
155
|
+
FFI.typedef :buffer_in, :lpcwstr
|
|
156
|
+
FFI.typedef :buffer_in, :lpcolestr
|
|
157
|
+
|
|
158
|
+
# string is also similar to pointer, but should be used for const char *
|
|
159
|
+
# NOTE that this is not wide, useful only for A suffixed functions
|
|
160
|
+
FFI.typedef :string, :lpcstr
|
|
161
|
+
|
|
162
|
+
# pointer in FFI is platform specific
|
|
163
|
+
# NOTE: for API calls with reserved lpvoid parameters, pass a FFI::Pointer::NULL
|
|
164
|
+
FFI.typedef :pointer, :lpcvoid
|
|
165
|
+
FFI.typedef :pointer, :lpvoid
|
|
166
|
+
FFI.typedef :pointer, :lpword
|
|
167
|
+
FFI.typedef :pointer, :lpbyte
|
|
168
|
+
FFI.typedef :pointer, :lpdword
|
|
169
|
+
FFI.typedef :pointer, :pdword
|
|
170
|
+
FFI.typedef :pointer, :phandle
|
|
171
|
+
FFI.typedef :pointer, :ulong_ptr
|
|
172
|
+
FFI.typedef :pointer, :pbool
|
|
173
|
+
FFI.typedef :pointer, :lpunknown
|
|
174
|
+
|
|
175
|
+
# any time LONG / ULONG is in a win32 API definition DO NOT USE platform specific width
|
|
176
|
+
# which is what FFI uses by default
|
|
177
|
+
# instead create new aliases for these very special cases
|
|
178
|
+
# NOTE: not a good idea to redefine FFI :ulong since other typedefs may rely on it
|
|
179
|
+
FFI.typedef :uint32, :win32_ulong
|
|
180
|
+
FFI.typedef :int32, :win32_long
|
|
181
|
+
# FFI bool can be only 1 byte at times,
|
|
182
|
+
# Win32 BOOL is a signed int, and is always 4 bytes, even on x64
|
|
183
|
+
# https://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
|
|
184
|
+
FFI.typedef :int32, :win32_bool
|
|
185
|
+
|
|
186
|
+
# BOOLEAN (unlike BOOL) is a BYTE - typedef unsigned char BYTE;
|
|
187
|
+
FFI.typedef :uchar, :boolean
|
|
188
|
+
|
|
189
|
+
# Same as a LONG, a 32-bit signed integer
|
|
190
|
+
FFI.typedef :int32, :hresult
|
|
191
|
+
|
|
192
|
+
# NOTE: FFI already defines (u)short as a 16-bit (un)signed like this:
|
|
193
|
+
# FFI.typedef :uint16, :ushort
|
|
194
|
+
# FFI.typedef :int16, :short
|
|
195
|
+
|
|
196
|
+
# 8 bits per byte
|
|
197
|
+
FFI.typedef :uchar, :byte
|
|
198
|
+
FFI.typedef :uint16, :wchar
|
|
199
|
+
|
|
200
|
+
# Definitions for data types used in LSA structures and functions
|
|
201
|
+
# https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/
|
|
202
|
+
# https://docs.microsoft.com/sr-latn-rs/windows/win32/secmgmt/management-data-types
|
|
203
|
+
FFI.typedef :pointer, :pwstr
|
|
204
|
+
FFI.typedef :pointer, :pulong
|
|
205
|
+
FFI.typedef :pointer, :lsa_handle
|
|
206
|
+
FFI.typedef :pointer, :plsa_handle
|
|
207
|
+
FFI.typedef :pointer, :psid
|
|
208
|
+
FFI.typedef :pointer, :pvoid
|
|
209
|
+
FFI.typedef :pointer, :plsa_unicode_string
|
|
210
|
+
FFI.typedef :pointer, :plsa_object_attributes
|
|
211
|
+
FFI.typedef :uint32, :ntstatus
|
|
212
|
+
FFI.typedef :dword, :access_mask
|
|
213
|
+
|
|
214
|
+
module ::FFI::WIN32
|
|
215
|
+
extend ::FFI::Library
|
|
216
|
+
|
|
217
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
|
|
218
|
+
# typedef struct _GUID {
|
|
219
|
+
# DWORD Data1;
|
|
220
|
+
# WORD Data2;
|
|
221
|
+
# WORD Data3;
|
|
222
|
+
# BYTE Data4[8];
|
|
223
|
+
# } GUID;
|
|
224
|
+
class GUID < FFI::Struct
|
|
225
|
+
layout :Data1, :dword,
|
|
226
|
+
:Data2, :word,
|
|
227
|
+
:Data3, :word,
|
|
228
|
+
:Data4, [:byte, 8]
|
|
229
|
+
|
|
230
|
+
def self.[](s)
|
|
231
|
+
raise _('Bad GUID format.') unless s =~ /^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
|
|
232
|
+
|
|
233
|
+
new.tap do |guid|
|
|
234
|
+
guid[:Data1] = s[0, 8].to_i(16)
|
|
235
|
+
guid[:Data2] = s[9, 4].to_i(16)
|
|
236
|
+
guid[:Data3] = s[14, 4].to_i(16)
|
|
237
|
+
guid[:Data4][0] = s[19, 2].to_i(16)
|
|
238
|
+
guid[:Data4][1] = s[21, 2].to_i(16)
|
|
239
|
+
s[24, 12].split('').each_slice(2).with_index do |a, i|
|
|
240
|
+
guid[:Data4][i + 2] = a.join('').to_i(16)
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def ==(other) Windows.memcmp(other, self, size) == 0 end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
|
|
249
|
+
# typedef struct _SYSTEMTIME {
|
|
250
|
+
# WORD wYear;
|
|
251
|
+
# WORD wMonth;
|
|
252
|
+
# WORD wDayOfWeek;
|
|
253
|
+
# WORD wDay;
|
|
254
|
+
# WORD wHour;
|
|
255
|
+
# WORD wMinute;
|
|
256
|
+
# WORD wSecond;
|
|
257
|
+
# WORD wMilliseconds;
|
|
258
|
+
# } SYSTEMTIME, *PSYSTEMTIME;
|
|
259
|
+
class SYSTEMTIME < FFI::Struct
|
|
260
|
+
layout :wYear, :word,
|
|
261
|
+
:wMonth, :word,
|
|
262
|
+
:wDayOfWeek, :word,
|
|
263
|
+
:wDay, :word,
|
|
264
|
+
:wHour, :word,
|
|
265
|
+
:wMinute, :word,
|
|
266
|
+
:wSecond, :word,
|
|
267
|
+
:wMilliseconds, :word
|
|
268
|
+
|
|
269
|
+
def to_local_time
|
|
270
|
+
Time.local(self[:wYear], self[:wMonth], self[:wDay],
|
|
271
|
+
self[:wHour], self[:wMinute], self[:wSecond], self[:wMilliseconds] * 1000)
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
|
|
276
|
+
# Contains a 64-bit value representing the number of 100-nanosecond
|
|
277
|
+
# intervals since January 1, 1601 (UTC).
|
|
278
|
+
# typedef struct _FILETIME {
|
|
279
|
+
# DWORD dwLowDateTime;
|
|
280
|
+
# DWORD dwHighDateTime;
|
|
281
|
+
# } FILETIME, *PFILETIME;
|
|
282
|
+
class FILETIME < FFI::Struct
|
|
283
|
+
layout :dwLowDateTime, :dword,
|
|
284
|
+
:dwHighDateTime, :dword
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
ffi_convention :stdcall
|
|
288
|
+
|
|
289
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
|
|
290
|
+
# HLOCAL WINAPI LocalFree(
|
|
291
|
+
# _In_ HLOCAL hMem
|
|
292
|
+
# );
|
|
293
|
+
ffi_lib :kernel32
|
|
294
|
+
attach_function :LocalFree, [:handle], :handle
|
|
295
|
+
|
|
296
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
|
|
297
|
+
# BOOL WINAPI CloseHandle(
|
|
298
|
+
# _In_ HANDLE hObject
|
|
299
|
+
# );
|
|
300
|
+
ffi_lib :kernel32
|
|
301
|
+
attach_function_private :CloseHandle, [:handle], :win32_bool
|
|
302
|
+
|
|
303
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
|
|
304
|
+
# void CoTaskMemFree(
|
|
305
|
+
# _In_opt_ LPVOID pv
|
|
306
|
+
# );
|
|
307
|
+
ffi_lib :ole32
|
|
308
|
+
attach_function :CoTaskMemFree, [:lpvoid], :void
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
end
|