puppet 6.16.0-x64-mingw32 → 7.0.0-x64-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 +5 -3
- data/Gemfile.lock +31 -33
- data/README.md +4 -5
- data/Rakefile +4 -12
- 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/agent.rb +2 -2
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +172 -98
- data/lib/puppet/application/agent.rb +22 -6
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/device.rb +100 -104
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +15 -11
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/configurer.rb +66 -31
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +21 -19
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +166 -169
- data/lib/puppet/environments.rb +41 -15
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- 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/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/plugin.rb +5 -8
- data/lib/puppet/feature/base.rb +1 -1
- 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_bucket/dipper.rb +1 -1
- 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 +13 -1
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/mount.rb +1 -2
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +4 -4
- data/lib/puppet/file_system/uniquefile.rb +8 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +3 -8
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/generate/models/type/type.rb +4 -1
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/http.rb +23 -13
- data/lib/puppet/http/client.rb +170 -115
- 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 +13 -19
- data/lib/puppet/http/resolver.rb +10 -23
- data/lib/puppet/http/resolver/server_list.rb +23 -45
- data/lib/puppet/http/resolver/settings.rb +7 -10
- data/lib/puppet/http/resolver/srv.rb +11 -15
- data/lib/puppet/http/response.rb +49 -48
- 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 +15 -27
- data/lib/puppet/http/service/ca.rb +11 -22
- data/lib/puppet/http/service/compiler.rb +23 -70
- data/lib/puppet/http/service/file_server.rb +19 -28
- data/lib/puppet/http/service/puppetserver.rb +53 -0
- data/lib/puppet/http/service/report.rb +8 -10
- data/lib/puppet/http/session.rb +16 -24
- data/lib/puppet/{network/http → http}/site.rb +1 -2
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +2 -4
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +27 -6
- 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 +4 -59
- data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
- data/lib/puppet/indirector/file_content/rest.rb +3 -7
- data/lib/puppet/indirector/file_metadata/http.rb +25 -5
- data/lib/puppet/indirector/file_metadata/rest.rb +5 -11
- data/lib/puppet/indirector/file_server.rb +1 -8
- data/lib/puppet/indirector/generic_http.rb +0 -11
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -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/processor.rb +2 -2
- data/lib/puppet/indirector/report/rest.rb +3 -8
- data/lib/puppet/indirector/request.rb +2 -103
- data/lib/puppet/indirector/rest.rb +12 -263
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- 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/format_support.rb +2 -2
- 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 +3 -21
- data/lib/puppet/network/http/api/master/v3.rb +11 -13
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/network/http/connection.rb +247 -316
- data/lib/puppet/network/http/handler.rb +0 -1
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +16 -34
- data/lib/puppet/node.rb +1 -30
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
- data/lib/puppet/pal/pal_impl.rb +93 -14
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -42
- data/lib/puppet/parser/compiler.rb +1 -199
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/resource.rb +3 -71
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -13
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- 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/loader/ruby_legacy_function_instantiator.rb +6 -8
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- 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 -22
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- 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 +28 -42
- data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -1
- data/lib/puppet/provider.rb +0 -13
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +0 -18
- data/lib/puppet/provider/package/apt.rb +34 -0
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +1 -11
- data/lib/puppet/provider/package/gem.rb +27 -5
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pip2.rb +17 -0
- 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 +6 -4
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +2 -1
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/smf.rb +191 -73
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +0 -10
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -4
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +2 -0
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/reports/http.rb +2 -0
- data/lib/puppet/resource.rb +3 -90
- data/lib/puppet/resource/catalog.rb +1 -14
- data/lib/puppet/resource/type.rb +5 -112
- data/lib/puppet/resource/type_collection.rb +3 -48
- data/lib/puppet/runtime.rb +1 -2
- data/lib/puppet/settings.rb +84 -35
- 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_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +37 -1
- data/lib/puppet/ssl/state_machine.rb +3 -1
- data/lib/puppet/ssl/verifier.rb +2 -0
- data/lib/puppet/test/test_helper.rb +19 -16
- data/lib/puppet/transaction.rb +3 -9
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +10 -8
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +9 -77
- data/lib/puppet/type/file.rb +45 -22
- data/lib/puppet/type/file/checksum.rb +5 -5
- data/lib/puppet/type/file/source.rb +33 -13
- data/lib/puppet/type/filebucket.rb +4 -4
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +5 -13
- data/lib/puppet/type/service.rb +53 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/autoload.rb +9 -7
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/execution.rb +2 -13
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/http_proxy.rb +2 -215
- data/lib/puppet/util/monkey_patches.rb +0 -46
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/rdoc.rb +0 -7
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +14 -2
- data/lib/puppet/util/windows.rb +3 -7
- 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 +5 -15
- 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 +8 -6
- data/lib/puppet/util/windows/process.rb +4 -226
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +52 -486
- data/lib/puppet/util/windows/string.rb +12 -13
- data/lib/puppet/util/windows/user.rb +242 -8
- 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 +713 -1380
- data/man/man5/puppet.conf.5 +84 -98
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- 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 +2 -2
- data/man/man8/puppet-module.8 +1 -58
- data/man/man8/puppet-node.8 +7 -4
- 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/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
- data/spec/integration/application/agent_spec.rb +157 -59
- data/spec/integration/application/apply_spec.rb +150 -150
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +78 -29
- data/spec/integration/application/help_spec.rb +44 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +76 -4
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +33 -5
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/network/http_pool_spec.rb +29 -30
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/parser/catalog_spec.rb +0 -38
- data/spec/integration/parser/compiler_spec.rb +11 -0
- 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 +6 -5
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +2 -2
- data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/security_spec.rb +1 -1
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +9 -1
- data/spec/lib/puppet_spec/settings.rb +7 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/agent_spec.rb +0 -2
- data/spec/unit/application/agent_spec.rb +3 -4
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +74 -8
- data/spec/unit/application/filebucket_spec.rb +41 -39
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +17 -4
- data/spec/unit/application_spec.rb +9 -4
- data/spec/unit/certificate_factory_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +14 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
- data/spec/unit/configurer_spec.rb +96 -44
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/context/trusted_information_spec.rb +12 -10
- data/spec/unit/defaults_spec.rb +77 -28
- data/spec/unit/environments_spec.rb +96 -32
- data/spec/unit/face/config_spec.rb +65 -12
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/face/node_spec.rb +2 -2
- 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/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/file_system_spec.rb +1 -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/inline_epp_spec.rb +26 -1
- data/spec/unit/functions/upcase_spec.rb +1 -1
- data/spec/unit/http/client_spec.rb +71 -17
- 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 +34 -15
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +2 -3
- data/spec/unit/http/service/compiler_spec.rb +51 -65
- data/spec/unit/http/service/file_server_spec.rb +5 -6
- data/spec/unit/http/service/puppetserver_spec.rb +112 -0
- data/spec/unit/http/service/report_spec.rb +2 -3
- data/spec/unit/http/service_spec.rb +1 -3
- data/spec/unit/http/session_spec.rb +24 -35
- data/spec/unit/{network/http → http}/site_spec.rb +3 -3
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/facts/facter_spec.rb +97 -0
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- 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/http_spec.rb +27 -0
- 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/json_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- 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 +3 -267
- data/spec/unit/indirector/rest_spec.rb +98 -752
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/authconfig_spec.rb +2 -132
- data/spec/unit/network/authorization_spec.rb +2 -55
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/formats_spec.rb +4 -4
- data/spec/unit/network/http/api/indirected_routes_spec.rb +3 -98
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- 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 +61 -73
- 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 +51 -22
- data/spec/unit/node_spec.rb +2 -54
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -8
- data/spec/unit/pops/loaders/loaders_spec.rb +77 -22
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- 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 +7 -17
- 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/exec_spec.rb +4 -3
- data/spec/unit/provider/nameservice_spec.rb +0 -57
- data/spec/unit/provider/package/apt_spec.rb +77 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dpkg_spec.rb +22 -55
- data/spec/unit/provider/package/gem_spec.rb +32 -0
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +6 -2
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +45 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +402 -166
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -6
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/service/windows_spec.rb +50 -15
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +22 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/provider_spec.rb +0 -12
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource/type_collection_spec.rb +2 -22
- data/spec/unit/resource_spec.rb +3 -59
- 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 +586 -239
- 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 +78 -49
- data/spec/unit/ssl/state_machine_spec.rb +0 -1
- data/spec/unit/ssl/verifier_spec.rb +0 -21
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +3 -3
- 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 +4 -5
- data/spec/unit/type/file_spec.rb +134 -102
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/package_spec.rb +1 -1
- data/spec/unit/type/service_spec.rb +209 -0
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +70 -0
- data/spec/unit/util/backups_spec.rb +0 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/command_line_spec.rb +11 -6
- 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 +27 -127
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- 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 +3 -21
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- metadata +76 -270
- 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 -85
- 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 -182
- 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 -64
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -20
- data/lib/puppet/parser/environment_compiler.rb +0 -199
- 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 -282
- 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/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/network/authconfig_spec.rb +0 -256
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/integration/test/test_helper_spec.rb +0 -31
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- 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/man_spec.rb +0 -25
- 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/man_spec.rb +0 -31
- 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 -723
- 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
@@ -269,7 +269,7 @@ class Puppet::Indirector::Indirection
|
|
269
269
|
return nil
|
270
270
|
end
|
271
271
|
|
272
|
-
Puppet.debug "Using cached #{self.name} for #{request.key}"
|
272
|
+
Puppet.debug { "Using cached #{self.name} for #{request.key}" }
|
273
273
|
cached
|
274
274
|
rescue => detail
|
275
275
|
Puppet.log_exception(detail, _("Cached %{indirection} for %{request} failed: %{detail}") % { indirection: self.name, request: request.key, detail: detail })
|
@@ -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
|
|
@@ -48,7 +48,7 @@ class Puppet::Indirector::Msgpack < Puppet::Indirector::Terminus
|
|
48
48
|
raise ArgumentError, _("invalid key")
|
49
49
|
end
|
50
50
|
|
51
|
-
base = Puppet.run_mode.
|
51
|
+
base = Puppet.run_mode.server? ? Puppet[:server_datadir] : Puppet[:client_datadir]
|
52
52
|
File.join(base, self.class.indirection_name.to_s, name.to_s + ext)
|
53
53
|
end
|
54
54
|
|
@@ -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
|
@@ -26,9 +26,9 @@ class Puppet::Transaction::Report::Processor < Puppet::Indirector::Code
|
|
26
26
|
# LAK:NOTE This isn't necessarily the best design, but it's backward
|
27
27
|
# compatible and that's good enough for now.
|
28
28
|
def process(report)
|
29
|
-
Puppet.debug "Received report to process from #{report.host}"
|
29
|
+
Puppet.debug { "Received report to process from #{report.host}" }
|
30
30
|
processors do |mod|
|
31
|
-
Puppet.debug "Processing report from #{report.host} with processor #{mod}"
|
31
|
+
Puppet.debug { "Processing report from #{report.host} with processor #{mod}" }
|
32
32
|
# We have to use a dup because we're including a module in the
|
33
33
|
# report.
|
34
34
|
newrep = report.dup
|
@@ -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 'masterport' is the name of a setting and should not be translated
|
235
|
-
debug_once _("Selected port from the `masterport` setting: %{port}") % {port: Puppet.settings[:masterport]}
|
236
|
-
Puppet.settings[:masterport]
|
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
|
@@ -277,7 +176,7 @@ class Puppet::Indirector::Request
|
|
277
176
|
# If the URI class can look up the scheme, it will provide a port,
|
278
177
|
# otherwise it will default to '0'.
|
279
178
|
if uri.port.to_i == 0 and uri.scheme == "puppet"
|
280
|
-
@port = Puppet.settings[:
|
179
|
+
@port = Puppet.settings[:serverport].to_i
|
281
180
|
else
|
282
181
|
@port = uri.port.to_i
|
283
182
|
end
|
@@ -290,6 +189,6 @@ class Puppet::Indirector::Request
|
|
290
189
|
@protocol = uri.scheme
|
291
190
|
end
|
292
191
|
|
293
|
-
@key =
|
192
|
+
@key = Puppet::Util.uri_unescape(uri.path.sub(/^\//, ''))
|
294
193
|
end
|
295
194
|
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
|