puppet 6.19.1-x86-mingw32 → 7.0.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +19 -20
- 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/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 +172 -98
- data/lib/puppet/application/device.rb +100 -104
- data/lib/puppet/application/filebucket.rb +15 -11
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/configurer.rb +28 -33
- data/lib/puppet/configurer/plugin_handler.rb +21 -19
- data/lib/puppet/defaults.rb +95 -159
- data/lib/puppet/environments.rb +10 -25
- data/lib/puppet/face/config.rb +10 -0
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +66 -6
- 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/http_metadata.rb +1 -1
- data/lib/puppet/file_serving/mount.rb +1 -2
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- 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 -11
- 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 +6 -10
- 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 -69
- data/lib/puppet/http/service/file_server.rb +18 -27
- 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/rest.rb +2 -4
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +24 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/rest.rb +3 -22
- data/lib/puppet/indirector/facts/yaml.rb +3 -58
- 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 -9
- data/lib/puppet/indirector/file_server.rb +1 -8
- data/lib/puppet/indirector/generic_http.rb +0 -11
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/node/rest.rb +2 -4
- data/lib/puppet/indirector/report/json.rb +34 -0
- 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/network/authconfig.rb +2 -96
- data/lib/puppet/network/authorization.rb +13 -35
- data/lib/puppet/network/formats.rb +2 -1
- 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 +73 -18
- 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/resource.rb +0 -69
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
- 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/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/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/provider.rb +0 -13
- data/lib/puppet/provider/nameservice.rb +0 -18
- data/lib/puppet/provider/package/dpkg.rb +0 -10
- data/lib/puppet/provider/package/gem.rb +23 -3
- 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/smf.rb +191 -73
- data/lib/puppet/provider/user/directoryservice.rb +0 -10
- data/lib/puppet/reference/configuration.rb +2 -0
- 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 +45 -33
- data/lib/puppet/settings/base_setting.rb +26 -2
- 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/report.rb +2 -4
- data/lib/puppet/type.rb +0 -76
- data/lib/puppet/type/file.rb +5 -7
- data/lib/puppet/type/file/checksum.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 +5 -13
- 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 -46
- data/lib/puppet/util/rdoc.rb +0 -7
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +9 -1
- data/lib/puppet/util/windows.rb +3 -8
- 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/process.rb +4 -226
- data/lib/puppet/util/windows/service.rb +9 -460
- 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 +531 -1232
- data/man/man5/puppet.conf.5 +37 -97
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +55 -9
- data/man/man8/puppet-filebucket.8 +6 -6
- 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 +4 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
- data/spec/integration/application/agent_spec.rb +24 -11
- data/spec/integration/application/apply_spec.rb +1 -1
- 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 +23 -1
- data/spec/integration/defaults_spec.rb +7 -3
- data/spec/integration/environments/setting_hooks_spec.rb +1 -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/type/file_spec.rb +5 -4
- data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
- data/spec/integration/util/windows/security_spec.rb +1 -1
- data/spec/lib/puppet_spec/puppetserver.rb +1 -1
- data/spec/lib/puppet_spec/settings.rb +7 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/agent_spec.rb +0 -2
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/facts_spec.rb +35 -0
- data/spec/unit/application/filebucket_spec.rb +41 -39
- data/spec/unit/application/ssl_spec.rb +2 -2
- data/spec/unit/certificate_factory_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +6 -2
- data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
- data/spec/unit/configurer_spec.rb +12 -9
- data/spec/unit/context/trusted_information_spec.rb +2 -6
- data/spec/unit/defaults_spec.rb +77 -28
- data/spec/unit/environments_spec.rb +0 -3
- data/spec/unit/face/config_spec.rb +27 -32
- data/spec/unit/face/facts_spec.rb +4 -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 +14 -18
- data/spec/unit/file_serving/configuration_spec.rb +6 -12
- 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/inline_epp_spec.rb +26 -1
- data/spec/unit/functions/upcase_spec.rb +1 -1
- 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 -11
- 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 +49 -62
- 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 +1 -2
- data/spec/unit/http/session_spec.rb +16 -14
- data/spec/unit/{network/http → http}/site_spec.rb +3 -3
- data/spec/unit/indirector/facts/facter_spec.rb +97 -0
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
- 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/node/json_spec.rb +33 -0
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/rest_spec.rb +2 -17
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- data/spec/unit/indirector/request_spec.rb +0 -264
- data/spec/unit/indirector/rest_spec.rb +98 -752
- data/spec/unit/network/authconfig_spec.rb +2 -132
- data/spec/unit/network/authorization_spec.rb +2 -55
- data/spec/unit/network/formats_spec.rb +4 -4
- data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -97
- 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 -6
- 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/functions/create_resources_spec.rb +2 -20
- 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/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/provider/nameservice_spec.rb +0 -57
- 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/puppet_gem_spec.rb +3 -2
- data/spec/unit/provider/service/smf_spec.rb +401 -165
- data/spec/unit/provider/service/windows_spec.rb +0 -1
- data/spec/unit/provider_spec.rb +0 -12
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/resource/type_collection_spec.rb +2 -22
- data/spec/unit/resource_spec.rb +0 -56
- 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 +423 -236
- data/spec/unit/ssl/base_spec.rb +36 -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 +11 -8
- data/spec/unit/ssl/state_machine_spec.rb +0 -1
- data/spec/unit/ssl/verifier_spec.rb +0 -21
- 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 +45 -79
- data/spec/unit/type/file/checksum_spec.rb +6 -6
- data/spec/unit/type/file/content_spec.rb +1 -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/source_spec.rb +0 -1
- data/spec/unit/type/file_spec.rb +12 -6
- data/spec/unit/type/package_spec.rb +1 -1
- data/spec/unit/type_spec.rb +20 -0
- data/spec/unit/util/backups_spec.rb +0 -2
- data/spec/unit/util/execution_spec.rb +0 -29
- data/spec/unit/util/monkey_patches_spec.rb +0 -6
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +21 -121
- 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 +0 -18
- metadata +50 -232
- 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/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/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/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/integration/application/config_spec.rb +0 -74
- 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/catalog_spec.rb +0 -6
- data/spec/unit/face/key_spec.rb +0 -9
- data/spec/unit/face/module/search_spec.rb +0 -231
- data/spec/unit/face/module_spec.rb +0 -3
- 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 -79
- 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/types/enumeration_spec.rb +0 -51
- data/spec/unit/resource/capability_finder_spec.rb +0 -143
- data/spec/unit/rest/route_spec.rb +0 -132
- data/spec/unit/ssl/host_spec.rb +0 -650
- 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
@@ -5,11 +5,7 @@ require 'puppet/indirector/rest'
|
|
5
5
|
class Puppet::Indirector::FileContent::Rest < Puppet::Indirector::REST
|
6
6
|
desc "Retrieve file contents via a REST HTTP interface."
|
7
7
|
|
8
|
-
use_srv_service(:fileserver)
|
9
|
-
|
10
8
|
def find(request)
|
11
|
-
return super unless use_http_client?
|
12
|
-
|
13
9
|
content = StringIO.new
|
14
10
|
content.binmode
|
15
11
|
|
@@ -29,11 +25,11 @@ class Puppet::Indirector::FileContent::Rest < Puppet::Indirector::REST
|
|
29
25
|
if e.response.code == 404
|
30
26
|
return nil unless request.options[:fail_on_404]
|
31
27
|
|
32
|
-
_, body = parse_response(e.response
|
28
|
+
_, body = parse_response(e.response)
|
33
29
|
msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
|
34
30
|
raise Puppet::Error, msg
|
35
31
|
else
|
36
|
-
raise convert_to_http_error(e.response
|
32
|
+
raise convert_to_http_error(e.response)
|
37
33
|
end
|
38
34
|
end
|
39
35
|
end
|
@@ -5,11 +5,7 @@ require 'puppet/indirector/rest'
|
|
5
5
|
class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
|
6
6
|
desc "Retrieve file metadata via a REST HTTP interface."
|
7
7
|
|
8
|
-
use_srv_service(:fileserver)
|
9
|
-
|
10
8
|
def find(request)
|
11
|
-
return super unless use_http_client?
|
12
|
-
|
13
9
|
url = URI.parse(Puppet::Util.uri_encode(request.uri))
|
14
10
|
session = Puppet.lookup(:http_session)
|
15
11
|
api = session.route_to(:fileserver, url: url)
|
@@ -26,17 +22,15 @@ class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
|
|
26
22
|
if e.response.code == 404
|
27
23
|
return nil unless request.options[:fail_on_404]
|
28
24
|
|
29
|
-
_, body = parse_response(e.response
|
25
|
+
_, body = parse_response(e.response)
|
30
26
|
msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
|
31
27
|
raise Puppet::Error, msg
|
32
28
|
else
|
33
|
-
raise convert_to_http_error(e.response
|
29
|
+
raise convert_to_http_error(e.response)
|
34
30
|
end
|
35
31
|
end
|
36
32
|
|
37
33
|
def search(request)
|
38
|
-
return super unless use_http_client?
|
39
|
-
|
40
34
|
url = URI.parse(Puppet::Util.uri_encode(request.uri))
|
41
35
|
session = Puppet.lookup(:http_session)
|
42
36
|
api = session.route_to(:fileserver, url: url)
|
@@ -56,6 +50,6 @@ class Puppet::Indirector::FileMetadata::Rest < Puppet::Indirector::REST
|
|
56
50
|
# since it's search, return empty array instead of nil
|
57
51
|
return [] if e.response.code == 404
|
58
52
|
|
59
|
-
raise convert_to_http_error(e.response
|
53
|
+
raise convert_to_http_error(e.response)
|
60
54
|
end
|
61
55
|
end
|
@@ -16,14 +16,7 @@ class Puppet::Indirector::FileServer < Puppet::Indirector::Terminus
|
|
16
16
|
# If we're not serving this mount, then access is denied.
|
17
17
|
return false unless mount
|
18
18
|
|
19
|
-
|
20
|
-
# access is allowed.
|
21
|
-
if mount.empty? || mount.globalallow?
|
22
|
-
return true
|
23
|
-
end
|
24
|
-
|
25
|
-
Puppet.err _("Denying %{method} request for %{desc} on fileserver mount '%{mount_name}'. Use of auth directives for 'fileserver.conf' mount points is no longer supported. Remove these directives and use the 'auth.conf' file instead for access control.") % { method: request.method, desc: request.description, mount_name: mount.name }
|
26
|
-
return false
|
19
|
+
true
|
27
20
|
end
|
28
21
|
|
29
22
|
# Find our key using the fileserver.
|
@@ -1,16 +1,5 @@
|
|
1
1
|
require 'puppet/file_serving/terminus_helper'
|
2
|
-
require 'puppet/util/http_proxy'
|
3
2
|
|
4
3
|
class Puppet::Indirector::GenericHttp < Puppet::Indirector::Terminus
|
5
4
|
desc "Retrieve data from a remote HTTP server."
|
6
|
-
|
7
|
-
class <<self
|
8
|
-
attr_accessor :http_method
|
9
|
-
end
|
10
|
-
|
11
|
-
def find(request)
|
12
|
-
uri = URI(request.uri)
|
13
|
-
method = self.class.http_method
|
14
|
-
Puppet::Util::HttpProxy.request_with_redirects(uri,method)
|
15
|
-
end
|
16
5
|
end
|
@@ -41,12 +41,16 @@ class Puppet::Indirector::JSON < Puppet::Indirector::Terminus
|
|
41
41
|
raise ArgumentError, _("invalid key")
|
42
42
|
end
|
43
43
|
|
44
|
-
base =
|
44
|
+
base = data_dir
|
45
45
|
File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
|
46
46
|
end
|
47
47
|
|
48
48
|
private
|
49
49
|
|
50
|
+
def data_dir()
|
51
|
+
Puppet.run_mode.server? ? Puppet[:server_datadir] : Puppet[:client_datadir]
|
52
|
+
end
|
53
|
+
|
50
54
|
def load_json_from_file(file, key)
|
51
55
|
json = nil
|
52
56
|
|
@@ -6,8 +6,6 @@ class Puppet::Node::Rest < Puppet::Indirector::REST
|
|
6
6
|
to override its environment."
|
7
7
|
|
8
8
|
def find(request)
|
9
|
-
return super unless use_http_client?
|
10
|
-
|
11
9
|
session = Puppet.lookup(:http_session)
|
12
10
|
api = session.route_to(:puppet)
|
13
11
|
_, node = api.get_node(
|
@@ -21,11 +19,11 @@ class Puppet::Node::Rest < Puppet::Indirector::REST
|
|
21
19
|
if e.response.code == 404
|
22
20
|
return nil unless request.options[:fail_on_404]
|
23
21
|
|
24
|
-
_, body = parse_response(e.response
|
22
|
+
_, body = parse_response(e.response)
|
25
23
|
msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(e.response.url.path, 100), body: body }
|
26
24
|
raise Puppet::Error, msg
|
27
25
|
else
|
28
|
-
raise convert_to_http_error(e.response
|
26
|
+
raise convert_to_http_error(e.response)
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'puppet/transaction/report'
|
2
|
+
require 'puppet/indirector/json'
|
3
|
+
|
4
|
+
class Puppet::Transaction::Report::Json < Puppet::Indirector::JSON
|
5
|
+
include Puppet::Util::SymbolicFileMode
|
6
|
+
|
7
|
+
desc "Store last report as a flat file, serialized using JSON."
|
8
|
+
|
9
|
+
# Force report to be saved there
|
10
|
+
def path(name,ext='.json')
|
11
|
+
Puppet[:lastrunreport]
|
12
|
+
end
|
13
|
+
|
14
|
+
def save(request)
|
15
|
+
filename = path(request.key)
|
16
|
+
mode = Puppet.settings.setting(:lastrunreport).mode
|
17
|
+
|
18
|
+
unless valid_symbolic_mode?(mode)
|
19
|
+
raise Puppet::DevError, _("replace_file mode: %{mode} is invalid") % { mode: mode }
|
20
|
+
end
|
21
|
+
|
22
|
+
mode = symbolic_mode_to_int(normalize_symbolic_mode(mode))
|
23
|
+
|
24
|
+
FileUtils.mkdir_p(File.dirname(filename))
|
25
|
+
|
26
|
+
begin
|
27
|
+
Puppet::FileSystem.replace_file(filename, mode) do |fh|
|
28
|
+
fh.print JSON.dump(request.instance)
|
29
|
+
end
|
30
|
+
rescue TypeError => detail
|
31
|
+
Puppet.err _("Could not save %{indirection} %{request}: %{detail}") % { indirection: self.name, request: request.key, detail: detail }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -3,13 +3,8 @@ require 'semantic_puppet'
|
|
3
3
|
|
4
4
|
class Puppet::Transaction::Report::Rest < Puppet::Indirector::REST
|
5
5
|
desc "Get server report over HTTP via REST."
|
6
|
-
use_server_setting(:report_server)
|
7
|
-
use_port_setting(:report_port)
|
8
|
-
use_srv_service(:report)
|
9
6
|
|
10
7
|
def save(request)
|
11
|
-
return super unless use_http_client?
|
12
|
-
|
13
8
|
session = Puppet.lookup(:http_session)
|
14
9
|
api = session.route_to(:report)
|
15
10
|
response = api.put_report(
|
@@ -22,13 +17,13 @@ class Puppet::Transaction::Report::Rest < Puppet::Indirector::REST
|
|
22
17
|
rescue Puppet::HTTP::ResponseError => e
|
23
18
|
return nil if e.response.code == 404
|
24
19
|
|
25
|
-
raise convert_to_http_error(e.response
|
20
|
+
raise convert_to_http_error(e.response)
|
26
21
|
end
|
27
22
|
|
28
23
|
# This is called by the superclass when not using our httpclient.
|
29
24
|
def handle_response(request, response)
|
30
|
-
if !response.
|
31
|
-
server_version = response[Puppet::Network::
|
25
|
+
if !response.success?
|
26
|
+
server_version = response[Puppet::Network::HEADER_PUPPET_VERSION]
|
32
27
|
if server_version &&
|
33
28
|
SemanticPuppet::Version.parse(server_version).major < Puppet::Indirector::REST::MAJOR_VERSION_JSON_DEFAULT &&
|
34
29
|
Puppet[:preferred_serialization_format] != 'pson'
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'cgi'
|
2
2
|
require 'uri'
|
3
3
|
require 'puppet/indirector'
|
4
|
-
require 'puppet/network/resolver'
|
5
4
|
require 'puppet/util/psych_support'
|
6
5
|
require 'puppet/util/warnings'
|
7
6
|
|
@@ -109,47 +108,6 @@ class Puppet::Indirector::Request
|
|
109
108
|
method == :search
|
110
109
|
end
|
111
110
|
|
112
|
-
# Create the query string, if options are present.
|
113
|
-
def query_string
|
114
|
-
return "" if options.nil? || options.empty?
|
115
|
-
encode_params(expand_into_parameters(options.to_a))
|
116
|
-
end
|
117
|
-
|
118
|
-
def expand_into_parameters(data)
|
119
|
-
data.inject([]) do |params, key_value|
|
120
|
-
key, value = key_value
|
121
|
-
|
122
|
-
expanded_value = case value
|
123
|
-
when Array
|
124
|
-
value.collect { |val| [key, val] }
|
125
|
-
else
|
126
|
-
[key_value]
|
127
|
-
end
|
128
|
-
|
129
|
-
params.concat(expand_primitive_types_into_parameters(expanded_value))
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def expand_primitive_types_into_parameters(data)
|
134
|
-
data.inject([]) do |params, key_value|
|
135
|
-
key, value = key_value
|
136
|
-
case value
|
137
|
-
when nil
|
138
|
-
params
|
139
|
-
when true, false, String, Symbol, Integer, Float
|
140
|
-
params << [key, value]
|
141
|
-
else
|
142
|
-
raise ArgumentError, _("HTTP REST queries cannot handle values of type '%{klass}'") % { klass: value.class }
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def encode_params(params)
|
148
|
-
params.collect do |key, value|
|
149
|
-
"#{key}=#{Puppet::Util.uri_query_encode(value.to_s)}"
|
150
|
-
end.join("&")
|
151
|
-
end
|
152
|
-
|
153
111
|
def initialize_from_hash(hash)
|
154
112
|
@indirection_name = hash['indirection_name'].to_sym
|
155
113
|
@method = hash['method'].to_sym
|
@@ -182,65 +140,6 @@ class Puppet::Indirector::Request
|
|
182
140
|
return(uri ? uri : "/#{indirection_name}/#{key}")
|
183
141
|
end
|
184
142
|
|
185
|
-
def do_request(srv_service=:puppet, default_server=nil, default_port=nil, &block)
|
186
|
-
# We were given a specific server to use, so just use that one.
|
187
|
-
# This happens if someone does something like specifying a file
|
188
|
-
# source using a puppet:// URI with a specific server.
|
189
|
-
return yield(self) if !self.server.nil?
|
190
|
-
|
191
|
-
if Puppet.settings[:use_srv_records]
|
192
|
-
# We may want to consider not creating a new resolver here
|
193
|
-
# every request eventually, to take advantage of the resolver's
|
194
|
-
# caching behavior.
|
195
|
-
resolver = Puppet::Network::Resolver.new
|
196
|
-
resolver.each_srv_record(Puppet.settings[:srv_domain], srv_service) do |srv_server, srv_port|
|
197
|
-
begin
|
198
|
-
self.server = srv_server
|
199
|
-
self.port = srv_port
|
200
|
-
return yield(self)
|
201
|
-
rescue SystemCallError => e
|
202
|
-
Puppet.warning _("Error connecting to %{srv_server}:%{srv_port}: %{message}") % { srv_server: srv_server, srv_port: srv_port, message: e.message }
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
if default_server
|
208
|
-
self.server = default_server
|
209
|
-
else
|
210
|
-
self.server = Puppet.lookup(:server) do
|
211
|
-
primary_server = Puppet.settings[:server_list][0]
|
212
|
-
if primary_server
|
213
|
-
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
214
|
-
debug_once _("Selected server from first entry of the `server_list` setting: %{server}") % {server: primary_server[0]}
|
215
|
-
primary_server[0]
|
216
|
-
else
|
217
|
-
#TRANSLATORS 'server' is the name of a setting and should not be translated
|
218
|
-
debug_once _("Selected server from the `server` setting: %{server}") % {server: Puppet.settings[:server]}
|
219
|
-
Puppet.settings[:server]
|
220
|
-
end
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
if default_port
|
225
|
-
self.port = default_port
|
226
|
-
else
|
227
|
-
self.port = Puppet.lookup(:serverport) do
|
228
|
-
primary_server = Puppet.settings[:server_list][0]
|
229
|
-
if primary_server
|
230
|
-
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
231
|
-
debug_once _("Selected port from the first entry of the `server_list` setting: %{port}") % {port: primary_server[1]}
|
232
|
-
primary_server[1]
|
233
|
-
else
|
234
|
-
#TRANSLATORS 'serverport' is the name of a setting and should not be translated
|
235
|
-
debug_once _("Selected port from the `serverport` setting: %{port}") % {port: Puppet.settings[:serverport]}
|
236
|
-
Puppet.settings[:serverport]
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
return yield(self)
|
242
|
-
end
|
243
|
-
|
244
143
|
def remote?
|
245
144
|
self.node or self.ip
|
246
145
|
end
|
@@ -1,241 +1,23 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'uri'
|
3
|
-
require 'puppet/util/json'
|
4
|
-
require 'puppet/util/connection'
|
5
|
-
require 'semantic_puppet'
|
6
|
-
|
7
|
-
require 'puppet/network/http'
|
8
|
-
require 'puppet/network/http_pool'
|
9
|
-
|
10
1
|
# Access objects via REST
|
11
2
|
class Puppet::Indirector::REST < Puppet::Indirector::Terminus
|
12
|
-
include Puppet::Network::HTTP::Compression.module
|
13
|
-
|
14
|
-
IndirectedRoutes = Puppet::Network::HTTP::API::IndirectedRoutes
|
15
|
-
EXCLUDED_FORMATS = [:yaml, :b64_zlib_yaml, :dot]
|
16
|
-
|
17
|
-
# puppet major version where JSON is enabled by default
|
18
|
-
MAJOR_VERSION_JSON_DEFAULT = 5
|
19
|
-
|
20
|
-
class << self
|
21
|
-
attr_reader :server_setting, :port_setting
|
22
|
-
end
|
23
|
-
|
24
|
-
# Specify the setting that we should use to get the server name.
|
25
|
-
def self.use_server_setting(setting)
|
26
|
-
@server_setting = setting
|
27
|
-
end
|
28
|
-
|
29
|
-
# Specify the setting that we should use to get the port.
|
30
|
-
def self.use_port_setting(setting)
|
31
|
-
@port_setting = setting
|
32
|
-
end
|
33
|
-
|
34
|
-
# Specify the service to use when doing SRV record lookup
|
35
|
-
def self.use_srv_service(service)
|
36
|
-
@srv_service = service
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.srv_service
|
40
|
-
@srv_service || :puppet
|
41
|
-
end
|
42
|
-
|
43
|
-
# Select the server to use based on the settings configuration
|
44
|
-
# for this indirection, taking into account the HA server list.
|
45
|
-
def self.server
|
46
|
-
Puppet::Util::Connection.determine_server(server_setting)
|
47
|
-
end
|
48
|
-
|
49
|
-
# Select the port to use based on the settings configuration
|
50
|
-
# for this indirection, taking into account the HA server list.
|
51
|
-
def self.port
|
52
|
-
Puppet::Util::Connection.determine_port(port_setting, server_setting)
|
53
|
-
end
|
54
|
-
|
55
|
-
# Should we use puppet's http client to make requests. Will return
|
56
|
-
# false when running in puppetserver
|
57
|
-
def use_http_client?
|
58
|
-
Puppet::Network::HttpPool.http_client_class == Puppet::Network::HTTP::Connection ||
|
59
|
-
Puppet::Network::HttpPool.http_client_class == Puppet::Network::HTTP::ConnectionAdapter
|
60
|
-
end
|
61
|
-
|
62
|
-
# Provide appropriate headers.
|
63
|
-
def headers
|
64
|
-
# yaml is not allowed on the network
|
65
|
-
network_formats = model.supported_formats - EXCLUDED_FORMATS
|
66
|
-
mime_types = network_formats.map { |f| model.get_format(f).mime }
|
67
|
-
common_headers = {
|
68
|
-
"Accept" => mime_types.join(', '),
|
69
|
-
Puppet::Network::HTTP::HEADER_PUPPET_VERSION => Puppet.version
|
70
|
-
}
|
71
|
-
|
72
|
-
add_accept_encoding(common_headers)
|
73
|
-
end
|
74
|
-
|
75
|
-
def add_profiling_header(headers)
|
76
|
-
if (Puppet[:profile])
|
77
|
-
headers[Puppet::Network::HTTP::HEADER_ENABLE_PROFILING] = "true"
|
78
|
-
end
|
79
|
-
headers
|
80
|
-
end
|
81
|
-
|
82
|
-
def network(request)
|
83
|
-
ssl_context = Puppet.lookup(:ssl_context)
|
84
|
-
Puppet::Network::HttpPool.connection(request.server || self.class.server,
|
85
|
-
request.port || self.class.port,
|
86
|
-
ssl_context: ssl_context)
|
87
|
-
end
|
88
|
-
|
89
|
-
def http_get(request, path, headers = nil, *args)
|
90
|
-
http_request(:get, request, path, add_profiling_header(headers), *args)
|
91
|
-
end
|
92
|
-
|
93
|
-
def http_post(request, path, data, headers = nil, *args)
|
94
|
-
http_request(:post, request, path, data, add_profiling_header(headers), *args)
|
95
|
-
end
|
96
|
-
|
97
|
-
def http_head(request, path, headers = nil, *args)
|
98
|
-
http_request(:head, request, path, add_profiling_header(headers), *args)
|
99
|
-
end
|
100
|
-
|
101
|
-
def http_delete(request, path, headers = nil, *args)
|
102
|
-
http_request(:delete, request, path, add_profiling_header(headers), *args)
|
103
|
-
end
|
104
|
-
|
105
|
-
def http_put(request, path, data, headers = nil, *args)
|
106
|
-
http_request(:put, request, path, data, add_profiling_header(headers), *args)
|
107
|
-
end
|
108
|
-
|
109
|
-
def http_request(method, request, *args)
|
110
|
-
conn = network(request)
|
111
|
-
conn.send(method, *args)
|
112
|
-
end
|
113
|
-
|
114
3
|
def find(request)
|
115
|
-
|
116
|
-
uri, body = IndirectedRoutes.request_to_uri_and_body(request)
|
117
|
-
uri_with_query_string = "#{uri}?#{body}"
|
118
|
-
|
119
|
-
response = do_request(request) do |req|
|
120
|
-
# WEBrick in Ruby 1.9.1 only supports up to 1024 character lines in an HTTP request
|
121
|
-
# http://redmine.ruby-lang.org/issues/show/3991
|
122
|
-
if "GET #{uri_with_query_string} HTTP/1.1\r\n".length > 1024
|
123
|
-
uri_with_env = "#{uri}?environment=#{request.environment.name}"
|
124
|
-
http_post(req, uri_with_env, body, headers)
|
125
|
-
else
|
126
|
-
http_get(req, uri_with_query_string, headers)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
if is_http_200?(response)
|
131
|
-
content_type, body = parse_response(response)
|
132
|
-
result = deserialize_find(content_type, body)
|
133
|
-
result.name = request.key if result.respond_to?(:name=)
|
134
|
-
result
|
135
|
-
|
136
|
-
elsif is_http_404?(response)
|
137
|
-
return nil unless request.options[:fail_on_404]
|
138
|
-
|
139
|
-
# 404 can get special treatment as the indirector API can not produce a meaningful
|
140
|
-
# reason to why something is not found - it may not be the thing the user is
|
141
|
-
# expecting to find that is missing, but something else (like the environment).
|
142
|
-
# While this way of handling the issue is not perfect, there is at least an error
|
143
|
-
# that makes a user aware of the reason for the failure.
|
144
|
-
#
|
145
|
-
_, body = parse_response(response)
|
146
|
-
msg = _("Find %{uri} resulted in 404 with the message: %{body}") % { uri: elide(uri_with_query_string, 100), body: body }
|
147
|
-
raise Puppet::Error, msg
|
148
|
-
else
|
149
|
-
nil
|
150
|
-
end
|
4
|
+
raise NotImplementedError
|
151
5
|
end
|
152
6
|
|
153
7
|
def head(request)
|
154
|
-
|
155
|
-
response = do_request(request) do |req|
|
156
|
-
http_head(req, IndirectedRoutes.request_to_uri(req), headers)
|
157
|
-
end
|
158
|
-
|
159
|
-
if is_http_200?(response)
|
160
|
-
true
|
161
|
-
else
|
162
|
-
false
|
163
|
-
end
|
8
|
+
raise NotImplementedError
|
164
9
|
end
|
165
10
|
|
166
11
|
def search(request)
|
167
|
-
|
168
|
-
response = do_request(request) do |req|
|
169
|
-
http_get(req, IndirectedRoutes.request_to_uri(req), headers)
|
170
|
-
end
|
171
|
-
|
172
|
-
if is_http_200?(response)
|
173
|
-
content_type, body = parse_response(response)
|
174
|
-
deserialize_search(content_type, body) || []
|
175
|
-
else
|
176
|
-
[]
|
177
|
-
end
|
12
|
+
raise NotImplementedError
|
178
13
|
end
|
179
14
|
|
180
15
|
def destroy(request)
|
181
|
-
|
182
|
-
raise ArgumentError, _("DELETE does not accept options") unless request.options.empty?
|
183
|
-
|
184
|
-
response = do_request(request) do |req|
|
185
|
-
http_delete(req, IndirectedRoutes.request_to_uri(req), headers)
|
186
|
-
end
|
187
|
-
|
188
|
-
if is_http_200?(response)
|
189
|
-
content_type, body = parse_response(response)
|
190
|
-
deserialize_destroy(content_type, body)
|
191
|
-
else
|
192
|
-
nil
|
193
|
-
end
|
16
|
+
raise NotImplementedError
|
194
17
|
end
|
195
18
|
|
196
19
|
def save(request)
|
197
|
-
|
198
|
-
raise ArgumentError, _("PUT does not accept options") unless request.options.empty?
|
199
|
-
|
200
|
-
response = do_request(request) do |req|
|
201
|
-
http_put(req, IndirectedRoutes.request_to_uri(req), req.instance.render, headers.merge({ "Content-Type" => req.instance.mime }))
|
202
|
-
end
|
203
|
-
|
204
|
-
if is_http_200?(response)
|
205
|
-
content_type, body = parse_response(response)
|
206
|
-
deserialize_save(content_type, body)
|
207
|
-
else
|
208
|
-
nil
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
# Encapsulate call to request.do_request with the arguments from this class
|
213
|
-
# Then yield to the code block that was called in
|
214
|
-
# We certainly could have retained the full request.do_request(...) { |r| ... }
|
215
|
-
# but this makes the code much cleaner and we only then actually make the call
|
216
|
-
# to request.do_request from here, thus if we change what we pass or how we
|
217
|
-
# get it, we only need to change it here.
|
218
|
-
def do_request(request)
|
219
|
-
response = request.do_request(self.class.srv_service, self.class.server, self.class.port) { |req| yield(req) }
|
220
|
-
|
221
|
-
handle_response(request, response) if response
|
222
|
-
|
223
|
-
response
|
224
|
-
end
|
225
|
-
|
226
|
-
def handle_response(request, response)
|
227
|
-
server_version = response[Puppet::Network::HTTP::HEADER_PUPPET_VERSION]
|
228
|
-
if server_version
|
229
|
-
Puppet.lookup(:server_agent_version) do
|
230
|
-
Puppet.push_context(:server_agent_version => server_version)
|
231
|
-
end
|
232
|
-
if SemanticPuppet::Version.parse(server_version).major < MAJOR_VERSION_JSON_DEFAULT &&
|
233
|
-
Puppet[:preferred_serialization_format] != 'pson'
|
234
|
-
#TRANSLATORS "PSON" should not be translated
|
235
|
-
Puppet.warning(_("Downgrading to PSON for future requests"))
|
236
|
-
Puppet[:preferred_serialization_format] = 'pson'
|
237
|
-
end
|
238
|
-
end
|
20
|
+
raise NotImplementedError
|
239
21
|
end
|
240
22
|
|
241
23
|
def validate_key(request)
|
@@ -244,67 +26,34 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
|
|
244
26
|
|
245
27
|
private
|
246
28
|
|
247
|
-
def is_http_200?(response)
|
248
|
-
case response.code
|
249
|
-
when "404"
|
250
|
-
false
|
251
|
-
when /^2/
|
252
|
-
true
|
253
|
-
else
|
254
|
-
# Raise the http error if we didn't get a 'success' of some kind.
|
255
|
-
raise convert_to_http_error(response)
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
def is_http_404?(response)
|
260
|
-
response.code == "404"
|
261
|
-
end
|
262
|
-
|
263
29
|
def convert_to_http_error(response)
|
264
|
-
if response.body.to_s.empty? && response.
|
265
|
-
returned_message = response.
|
30
|
+
if response.body.to_s.empty? && response.reason
|
31
|
+
returned_message = response.reason
|
266
32
|
elsif response['content-type'].is_a?(String)
|
267
33
|
content_type, body = parse_response(response)
|
268
34
|
if content_type =~ /[pj]son/
|
269
35
|
returned_message = Puppet::Util::Json.load(body)["message"]
|
270
36
|
else
|
271
|
-
returned_message =
|
37
|
+
returned_message = response.body
|
272
38
|
end
|
273
39
|
else
|
274
|
-
returned_message =
|
40
|
+
returned_message = response.body
|
275
41
|
end
|
276
42
|
|
277
43
|
message = _("Error %{code} on SERVER: %{returned_message}") % { code: response.code, returned_message: returned_message }
|
278
|
-
Net::HTTPError.new(message, response)
|
44
|
+
Net::HTTPError.new(message, Puppet::HTTP::ResponseConverter.to_ruby_response(response))
|
279
45
|
end
|
280
46
|
|
281
47
|
# Returns the content_type, stripping any appended charset, and the
|
282
|
-
# body, decompressed if necessary
|
283
|
-
# uncompress_body)
|
48
|
+
# body, decompressed if necessary
|
284
49
|
def parse_response(response)
|
285
50
|
if response['content-type']
|
286
|
-
[ response['content-type'].gsub(/\s*;.*$/,''),
|
51
|
+
[ response['content-type'].gsub(/\s*;.*$/,''), response.body ]
|
287
52
|
else
|
288
53
|
raise _("No content type in http response; cannot parse")
|
289
54
|
end
|
290
55
|
end
|
291
56
|
|
292
|
-
def deserialize_find(content_type, body)
|
293
|
-
model.convert_from(content_type, body)
|
294
|
-
end
|
295
|
-
|
296
|
-
def deserialize_search(content_type, body)
|
297
|
-
model.convert_from_multiple(content_type, body)
|
298
|
-
end
|
299
|
-
|
300
|
-
def deserialize_destroy(content_type, body)
|
301
|
-
model.convert_from(content_type, body)
|
302
|
-
end
|
303
|
-
|
304
|
-
def deserialize_save(content_type, body)
|
305
|
-
nil
|
306
|
-
end
|
307
|
-
|
308
57
|
def elide(string, length)
|
309
58
|
if Puppet::Util::Log.level == :debug || string.length <= length
|
310
59
|
string
|