puppet 6.12.0-x64-mingw32 → 6.17.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/CODEOWNERS +2 -7
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +39 -36
- data/README.md +18 -25
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +65 -69
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +154 -58
- data/lib/puppet/environments.rb +27 -20
- data/lib/puppet/face/facts.rb +8 -5
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/plugin.rb +2 -2
- data/lib/puppet/file_serving/http_metadata.rb +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +14 -10
- data/lib/puppet/file_system/memory_file.rb +6 -0
- data/lib/puppet/file_system/memory_impl.rb +13 -0
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +4 -7
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +5 -0
- data/lib/puppet/http/client.rb +293 -73
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +46 -3
- data/lib/puppet/http/resolver/server_list.rb +76 -16
- data/lib/puppet/http/resolver/settings.rb +23 -3
- data/lib/puppet/http/resolver/srv.rb +29 -3
- data/lib/puppet/http/response.rb +87 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +151 -7
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +319 -0
- data/lib/puppet/http/service/file_server.rb +206 -0
- data/lib/puppet/http/service/report.rb +49 -23
- data/lib/puppet/http/session.rb +103 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +10 -0
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +1 -1
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/base_pool.rb +7 -2
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +2 -0
- data/lib/puppet/network/http/pool.rb +13 -6
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +11 -1
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +4 -29
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -15
- data/lib/puppet/parser/compiler.rb +43 -33
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +4 -1
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +6 -6
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/parser/evaluating_parser.rb +5 -7
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/validation/checker4_0.rb +11 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/aix_object.rb +4 -2
- data/lib/puppet/provider/group/aix.rb +1 -0
- data/lib/puppet/provider/group/groupadd.rb +57 -24
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +78 -4
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +69 -15
- data/lib/puppet/provider/package/dpkg.rb +14 -7
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +41 -7
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +6 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +109 -25
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/service/systemd.rb +22 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/useradd.rb +22 -12
- data/lib/puppet/reports/http.rb +15 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +31 -1
- data/lib/puppet/settings.rb +4 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +15 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +18 -6
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +51 -60
- data/lib/puppet/type/group.rb +2 -2
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +55 -8
- data/lib/puppet/type/user.rb +3 -28
- data/lib/puppet/util.rb +39 -15
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +36 -10
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +2 -2
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/windows/user.rb +23 -8
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +707 -574
- data/man/man5/puppet.conf.5 +74 -14
- data/man/man8/puppet-agent.8 +7 -7
- 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 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
- data/spec/integration/application/agent_spec.rb +483 -0
- data/spec/integration/application/apply_spec.rb +132 -3
- data/spec/integration/application/filebucket_spec.rb +190 -0
- data/spec/integration/application/plugin_spec.rb +73 -0
- data/spec/integration/configurer_spec.rb +26 -7
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/http/client_spec.rb +47 -37
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/module_tool/forge_spec.rb +2 -15
- data/spec/integration/network/http_pool_spec.rb +93 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +40 -5
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +9 -5
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/resource_spec.rb +2 -2
- data/spec/unit/configurer/fact_handler_spec.rb +4 -8
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +17 -18
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +25 -2
- data/spec/unit/environments_spec.rb +65 -28
- data/spec/unit/face/facts_spec.rb +24 -20
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +327 -35
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -2
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -11
- data/spec/unit/http/service/compiler_spec.rb +627 -0
- data/spec/unit/http/service/file_server_spec.rb +308 -0
- data/spec/unit/http/service/report_spec.rb +27 -9
- data/spec/unit/http/service_spec.rb +98 -5
- data/spec/unit/http/session_spec.rb +190 -7
- data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/request_spec.rb +1 -1
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/connection_spec.rb +559 -175
- data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
- data/spec/unit/network/http/pool_spec.rb +89 -11
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +16 -0
- data/spec/unit/node/facts_spec.rb +2 -1
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +1 -1
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/pops/validator/validator_spec.rb +7 -2
- data/spec/unit/provider/aix_object_spec.rb +16 -2
- data/spec/unit/provider/group/groupadd_spec.rb +181 -56
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +43 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
- data/spec/unit/provider/package/dpkg_spec.rb +28 -6
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkg_spec.rb +15 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +292 -0
- data/spec/unit/provider/package/zypper_spec.rb +84 -0
- data/spec/unit/provider/service/init_spec.rb +1 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +92 -12
- data/spec/unit/provider/service/windows_spec.rb +22 -14
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +43 -24
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +0 -26
- data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
- data/spec/unit/puppet_spec.rb +47 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- data/spec/unit/resource_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +5 -1
- data/spec/unit/transaction_spec.rb +0 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +89 -38
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +185 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +112 -42
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/storage_spec.rb +1 -8
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- 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/sid_spec.rb +2 -2
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +5 -35
- metadata +73 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -10,10 +10,14 @@ describe Puppet::HTTP::Session do
|
|
10
10
|
double('good', url: uri, connect: nil)
|
11
11
|
}
|
12
12
|
let(:bad_service) {
|
13
|
+
create_bad_service
|
14
|
+
}
|
15
|
+
|
16
|
+
def create_bad_service(failure_message = 'whoops')
|
13
17
|
service = double('bad', url: uri)
|
14
|
-
allow(service).to receive(:connect).and_raise(Puppet::HTTP::ConnectionError,
|
18
|
+
allow(service).to receive(:connect).and_raise(Puppet::HTTP::ConnectionError, failure_message)
|
15
19
|
service
|
16
|
-
|
20
|
+
end
|
17
21
|
|
18
22
|
class DummyResolver < Puppet::HTTP::Resolver
|
19
23
|
attr_reader :count
|
@@ -23,21 +27,19 @@ describe Puppet::HTTP::Session do
|
|
23
27
|
@count = 0
|
24
28
|
end
|
25
29
|
|
26
|
-
def resolve(session, name, ssl_context: nil)
|
30
|
+
def resolve(session, name, ssl_context: nil, error_handler: nil)
|
27
31
|
@count += 1
|
28
|
-
return @service if check_connection?(session, @service, ssl_context: ssl_context)
|
32
|
+
return @service if check_connection?(session, @service, ssl_context: ssl_context, error_handler: error_handler)
|
29
33
|
end
|
30
34
|
end
|
31
35
|
|
32
36
|
context 'when routing' do
|
33
37
|
it 'returns the first resolved service' do
|
34
|
-
Puppet[:log_level] = :debug
|
35
38
|
resolvers = [DummyResolver.new(bad_service), DummyResolver.new(good_service)]
|
36
39
|
session = described_class.new(client, resolvers)
|
37
40
|
resolved = session.route_to(:ca)
|
38
41
|
|
39
42
|
expect(resolved).to eq(good_service)
|
40
|
-
expect(@logs).to include(an_object_having_attributes(level: :debug, message: "Connection to #{uri} failed, trying next route: whoops"))
|
41
43
|
end
|
42
44
|
|
43
45
|
it 'only resolves once per session' do
|
@@ -58,6 +60,29 @@ describe Puppet::HTTP::Session do
|
|
58
60
|
}.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
|
59
61
|
end
|
60
62
|
|
63
|
+
it 'logs all routing failures as errors when there are no more routes' do
|
64
|
+
resolvers = [DummyResolver.new(create_bad_service('whoops1')), DummyResolver.new(create_bad_service('whoops2'))]
|
65
|
+
session = described_class.new(client, resolvers)
|
66
|
+
|
67
|
+
expect {
|
68
|
+
session.route_to(:ca)
|
69
|
+
}.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
|
70
|
+
|
71
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: "whoops1"),
|
72
|
+
an_object_having_attributes(level: :err, message: "whoops2"))
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'logs routing failures as debug until routing succeeds' do
|
76
|
+
Puppet[:log_level] = 'debug'
|
77
|
+
|
78
|
+
resolvers = [DummyResolver.new(bad_service), DummyResolver.new(good_service)]
|
79
|
+
session = described_class.new(client, resolvers)
|
80
|
+
session.route_to(:ca)
|
81
|
+
|
82
|
+
expect(@logs).to include(an_object_having_attributes(level: :debug, message: "Connection to #{uri} failed, trying next route: whoops"))
|
83
|
+
expect(@logs).to_not include(an_object_having_attributes(level: :err))
|
84
|
+
end
|
85
|
+
|
61
86
|
it 'accepts an ssl context to use when connecting' do
|
62
87
|
alt_context = Puppet::SSL::SSLContext.new
|
63
88
|
expect(good_service).to receive(:connect).with(ssl_context: alt_context)
|
@@ -73,6 +98,37 @@ describe Puppet::HTTP::Session do
|
|
73
98
|
session.route_to(:westbound)
|
74
99
|
}.to raise_error(ArgumentError, "Unknown service westbound")
|
75
100
|
end
|
101
|
+
|
102
|
+
it 'routes to the service when given a puppet URL with an explicit host' do
|
103
|
+
allow_any_instance_of(Net::HTTP).to receive(:start)
|
104
|
+
|
105
|
+
session = described_class.new(client, [])
|
106
|
+
url = URI("puppet://example.com:8140/:modules/:module/path/to/file")
|
107
|
+
service = session.route_to(:fileserver, url: url)
|
108
|
+
|
109
|
+
expect(service.url.to_s).to eq("https://example.com:8140/puppet/v3")
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'raises a connection error if we cannot connect' do
|
113
|
+
allow_any_instance_of(Net::HTTP).to receive(:start).and_raise(Net::OpenTimeout)
|
114
|
+
|
115
|
+
session = described_class.new(client, [])
|
116
|
+
url = URI('puppet://example.com:8140/:modules/:module/path/to/file')
|
117
|
+
|
118
|
+
expect {
|
119
|
+
session.route_to(:fileserver, url: url)
|
120
|
+
}.to raise_error(Puppet::HTTP::ConnectionError,
|
121
|
+
%r{Request to https://example.com:8140/puppet/v3 timed out connect operation after .* seconds})
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'resolves the route when given a generic puppet:/// URL' do
|
125
|
+
resolvers = [DummyResolver.new(good_service)]
|
126
|
+
session = described_class.new(client, resolvers)
|
127
|
+
url = URI('puppet:///:modules/:module/path/to/file')
|
128
|
+
service = session.route_to(:fileserver, url: url)
|
129
|
+
|
130
|
+
expect(service.url).to eq(good_service.url)
|
131
|
+
end
|
76
132
|
end
|
77
133
|
|
78
134
|
context 'when resolving using multiple resolvers' do
|
@@ -124,7 +180,6 @@ describe Puppet::HTTP::Session do
|
|
124
180
|
}.to raise_error(Puppet::Error, "Could not select a functional puppet master from server_list: 'foo.example.com,bar.example.com'")
|
125
181
|
end
|
126
182
|
|
127
|
-
|
128
183
|
it "raises when there are no more routes" do
|
129
184
|
allow_any_instance_of(Net::HTTP).to receive(:start).and_raise(Errno::EHOSTUNREACH)
|
130
185
|
session = client.create_session
|
@@ -133,5 +188,133 @@ describe Puppet::HTTP::Session do
|
|
133
188
|
session.route_to(:ca)
|
134
189
|
}.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
|
135
190
|
end
|
191
|
+
|
192
|
+
Puppet::HTTP::Service::SERVICE_NAMES.each do |name|
|
193
|
+
it "resolves #{name} using server_list" do
|
194
|
+
Puppet[:server_list] = 'apple.example.com'
|
195
|
+
req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
|
196
|
+
|
197
|
+
session.route_to(name)
|
198
|
+
|
199
|
+
expect(req).to have_been_requested
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'does not use server_list to resolve the ca service when ca_server is explicitly set' do
|
204
|
+
Puppet[:ca_server] = 'banana.example.com'
|
205
|
+
|
206
|
+
expect(session.route_to(:ca).url.to_s).to eq("https://banana.example.com:8140/puppet-ca/v1")
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'does not use server_list to resolve the report service when the report_server is explicitly set' do
|
210
|
+
Puppet[:report_server] = 'cherry.example.com'
|
211
|
+
|
212
|
+
expect(session.route_to(:report).url.to_s).to eq("https://cherry.example.com:8140/puppet/v3")
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'resolves once for all services in a session' do
|
216
|
+
Puppet[:server_list] = 'apple.example.com'
|
217
|
+
req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
|
218
|
+
|
219
|
+
Puppet::HTTP::Service::SERVICE_NAMES.each do |name|
|
220
|
+
session.route_to(name)
|
221
|
+
end
|
222
|
+
|
223
|
+
expect(req).to have_been_requested
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'resolves server_list for each new session' do
|
227
|
+
Puppet[:server_list] = 'apple.example.com'
|
228
|
+
req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
|
229
|
+
|
230
|
+
client.create_session.route_to(:puppet)
|
231
|
+
client.create_session.route_to(:puppet)
|
232
|
+
|
233
|
+
expect(req).to have_been_requested.twice
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
context 'when retrieving capabilities' do
|
238
|
+
let(:session) do
|
239
|
+
resolver = DummyResolver.new(good_service)
|
240
|
+
described_class.new(client, [resolver])
|
241
|
+
end
|
242
|
+
|
243
|
+
it 'raises for unknown service names' do
|
244
|
+
expect {
|
245
|
+
session = described_class.new(client, [])
|
246
|
+
session.supports?(:westbound, 'a capability')
|
247
|
+
}.to raise_error(ArgumentError, "Unknown service westbound")
|
248
|
+
end
|
249
|
+
|
250
|
+
context 'locales' do
|
251
|
+
it 'does not support locales if the cached service has not been resolved' do
|
252
|
+
session = described_class.new(client, [])
|
253
|
+
|
254
|
+
expect(session).to_not be_supports(:puppet, 'locales')
|
255
|
+
end
|
256
|
+
|
257
|
+
it "supports locales if the cached service's version is 5.3.4 or greater" do
|
258
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '5.3.4'}, uri)
|
259
|
+
|
260
|
+
session.route_to(:puppet)
|
261
|
+
session.process_response(response)
|
262
|
+
|
263
|
+
expect(session).to be_supports(:puppet, 'locales')
|
264
|
+
end
|
265
|
+
|
266
|
+
it "does not support locales if the cached service's version is 5.3.3" do
|
267
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '5.3.3'}, uri)
|
268
|
+
|
269
|
+
session.route_to(:puppet)
|
270
|
+
session.process_response(response)
|
271
|
+
|
272
|
+
expect(session).to_not be_supports(:puppet, 'locales')
|
273
|
+
end
|
274
|
+
|
275
|
+
it "does not support locales if the cached service's version is missing" do
|
276
|
+
response = Puppet::HTTP::Response.new({}, uri)
|
277
|
+
|
278
|
+
session.route_to(:puppet)
|
279
|
+
session.process_response(response)
|
280
|
+
|
281
|
+
expect(session).to_not be_supports(:puppet, 'locales')
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
context 'json' do
|
286
|
+
it 'does not support json if the cached service has not been resolved' do
|
287
|
+
session = described_class.new(client, [])
|
288
|
+
|
289
|
+
expect(session).to_not be_supports(:puppet, 'json')
|
290
|
+
end
|
291
|
+
|
292
|
+
it "supports json if the cached service's version is 5 or greater" do
|
293
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '5.5.12'}, uri)
|
294
|
+
|
295
|
+
session.route_to(:puppet)
|
296
|
+
session.process_response(response)
|
297
|
+
|
298
|
+
expect(session).to be_supports(:puppet, 'json')
|
299
|
+
end
|
300
|
+
|
301
|
+
it "does not support json if the cached service's version is less than 5.0" do
|
302
|
+
response = Puppet::HTTP::Response.new({'X-Puppet-Version' => '4.10.1'}, uri)
|
303
|
+
|
304
|
+
session.route_to(:puppet)
|
305
|
+
session.process_response(response)
|
306
|
+
|
307
|
+
expect(session).to_not be_supports(:puppet, 'json')
|
308
|
+
end
|
309
|
+
|
310
|
+
it "supports json if the cached service's version is missing" do
|
311
|
+
response = Puppet::HTTP::Response.new({}, uri)
|
312
|
+
|
313
|
+
session.route_to(:puppet)
|
314
|
+
session.process_response(response)
|
315
|
+
|
316
|
+
expect(session).to be_supports(:puppet, 'json')
|
317
|
+
end
|
318
|
+
end
|
136
319
|
end
|
137
320
|
end
|
@@ -15,22 +15,9 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
15
15
|
let(:node_name) { "foo" }
|
16
16
|
let(:node) { Puppet::Node.new(node_name)}
|
17
17
|
|
18
|
-
before do
|
19
|
-
allow(Facter).to receive(:to_hash).and_return({})
|
20
|
-
end
|
21
|
-
|
22
18
|
describe "when initializing" do
|
23
19
|
before do
|
24
|
-
|
25
|
-
set_facts({
|
26
|
-
'fqdn' => "my.server.com",
|
27
|
-
'ipaddress' => "my.ip.address",
|
28
|
-
'ipaddress6' => nil
|
29
|
-
})
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should gather data about itself" do
|
33
|
-
Puppet::Resource::Catalog::Compiler.new
|
20
|
+
allow(Puppet).to receive(:version).and_return(1)
|
34
21
|
end
|
35
22
|
|
36
23
|
it "should cache the server metadata and reuse it" do
|
@@ -47,8 +34,6 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
47
34
|
|
48
35
|
describe "when finding catalogs" do
|
49
36
|
before do
|
50
|
-
allow(Facter).to receive(:value).and_return("whatever")
|
51
|
-
|
52
37
|
allow(node).to receive(:merge)
|
53
38
|
allow(Puppet::Node.indirection).to receive(:find).and_return(node)
|
54
39
|
@request = Puppet::Indirector::Request.new(:catalog, :find, node_name, nil, :node => node_name)
|
@@ -255,10 +240,10 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
255
240
|
|
256
241
|
describe "when handling a request with facts" do
|
257
242
|
before do
|
258
|
-
Puppet::Node::Facts.indirection.terminus_class = :memory
|
259
243
|
allow(Facter).to receive(:value).and_return("something")
|
260
244
|
|
261
|
-
|
245
|
+
facts = Puppet::Node::Facts.new('hostname', "fact" => "value", "architecture" => "i386")
|
246
|
+
Puppet::Node::Facts.indirection.save(facts)
|
262
247
|
end
|
263
248
|
|
264
249
|
def a_legacy_request_that_contains(facts, format = :pson)
|
@@ -276,6 +261,8 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
276
261
|
end
|
277
262
|
|
278
263
|
context "when extracting facts from the request" do
|
264
|
+
let(:facts) { Puppet::Node::Facts.new("hostname") }
|
265
|
+
|
279
266
|
it "should do nothing if no facts are provided" do
|
280
267
|
request = Puppet::Indirector::Request.new(:catalog, :find, "hostname", nil)
|
281
268
|
request.options[:facts] = nil
|
@@ -285,21 +272,21 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
285
272
|
|
286
273
|
it "should deserialize the facts without changing the timestamp" do
|
287
274
|
time = Time.now
|
288
|
-
|
289
|
-
request = a_request_that_contains(
|
275
|
+
facts.timestamp = time
|
276
|
+
request = a_request_that_contains(facts)
|
290
277
|
facts = compiler.extract_facts_from_request(request)
|
291
278
|
expect(facts.timestamp).to eq(time)
|
292
279
|
end
|
293
280
|
|
294
281
|
it "accepts PSON facts from older agents" do
|
295
|
-
request = a_legacy_request_that_contains(
|
282
|
+
request = a_legacy_request_that_contains(facts)
|
296
283
|
|
297
284
|
facts = compiler.extract_facts_from_request(request)
|
298
|
-
expect(facts).to eq(
|
285
|
+
expect(facts).to eq(facts)
|
299
286
|
end
|
300
287
|
|
301
288
|
it "rejects YAML facts" do
|
302
|
-
request = a_legacy_request_that_contains(
|
289
|
+
request = a_legacy_request_that_contains(facts, :yaml)
|
303
290
|
|
304
291
|
expect {
|
305
292
|
compiler.extract_facts_from_request(request)
|
@@ -307,7 +294,7 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
307
294
|
end
|
308
295
|
|
309
296
|
it "rejects unknown fact formats" do
|
310
|
-
request = a_request_that_contains(
|
297
|
+
request = a_request_that_contains(facts)
|
311
298
|
request.options[:facts_format] = 'unknown-format'
|
312
299
|
|
313
300
|
expect {
|
@@ -317,15 +304,17 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
317
304
|
end
|
318
305
|
|
319
306
|
context "when saving facts from the request" do
|
307
|
+
let(:facts) { Puppet::Node::Facts.new("hostname") }
|
308
|
+
|
320
309
|
it "should save facts if they were issued by the request" do
|
321
|
-
request = a_request_that_contains(
|
310
|
+
request = a_request_that_contains(facts)
|
322
311
|
|
323
312
|
options = {
|
324
313
|
:environment => request.environment,
|
325
314
|
:transaction_uuid => request.options[:transaction_uuid],
|
326
315
|
}
|
327
316
|
|
328
|
-
expect(Puppet::Node::Facts.indirection).to receive(:save).with(
|
317
|
+
expect(Puppet::Node::Facts.indirection).to receive(:save).with(facts, nil, options)
|
329
318
|
compiler.find(request)
|
330
319
|
end
|
331
320
|
|
@@ -337,7 +326,7 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
337
326
|
:transaction_uuid => request.options[:transaction_uuid],
|
338
327
|
}
|
339
328
|
|
340
|
-
expect(Puppet::Node::Facts.indirection).not_to receive(:save).with(
|
329
|
+
expect(Puppet::Node::Facts.indirection).not_to receive(:save).with(facts, nil, options)
|
341
330
|
compiler.find(request)
|
342
331
|
end
|
343
332
|
end
|
@@ -345,7 +334,6 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
345
334
|
|
346
335
|
describe "when finding nodes" do
|
347
336
|
it "should look node information up via the Node class with the provided key" do
|
348
|
-
allow(Facter).to receive(:value).and_return("whatever")
|
349
337
|
request = Puppet::Indirector::Request.new(:catalog, :find, node_name, nil)
|
350
338
|
allow(compiler).to receive(:compile)
|
351
339
|
|
@@ -471,9 +459,39 @@ describe Puppet::Resource::Catalog::Compiler do
|
|
471
459
|
end
|
472
460
|
end
|
473
461
|
|
462
|
+
describe "after finding nodes when checking for a PE version" do
|
463
|
+
include PuppetSpec::Compiler
|
464
|
+
|
465
|
+
let(:pe_version_file) { '/opt/puppetlabs/server/pe_version' }
|
466
|
+
let(:request) { Puppet::Indirector::Request.new(:catalog, :find, node_name, nil) }
|
467
|
+
|
468
|
+
before :each do
|
469
|
+
Puppet[:code] = 'notify { "PE Version: $pe_serverversion": }'
|
470
|
+
end
|
471
|
+
|
472
|
+
it "should not add 'pe_serverversion' when FOSS" do
|
473
|
+
allow(Puppet::Node.indirection).to receive(:find).with(node_name, anything).and_return(node)
|
474
|
+
catalog = compiler.find(request)
|
475
|
+
|
476
|
+
expect(catalog.resource('notify', 'PE Version: 2019.2.0')).to be_nil
|
477
|
+
end
|
478
|
+
|
479
|
+
it "should add 'pe_serverversion' when PE" do
|
480
|
+
allow(File).to receive(:readable?).and_call_original
|
481
|
+
allow(File).to receive(:readable?).with(pe_version_file).and_return(true)
|
482
|
+
allow(File).to receive(:zero?).with(pe_version_file).and_return(false)
|
483
|
+
allow(File).to receive(:read).and_call_original
|
484
|
+
allow(File).to receive(:read).with(pe_version_file).and_return('2019.2.0')
|
485
|
+
|
486
|
+
allow(Puppet::Node.indirection).to receive(:find).with(node_name, anything).and_return(node)
|
487
|
+
catalog = compiler.find(request)
|
488
|
+
|
489
|
+
expect(catalog.resource('notify', 'PE Version: 2019.2.0')).to be
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
474
493
|
describe "when filtering resources" do
|
475
494
|
before :each do
|
476
|
-
allow(Facter).to receive(:value)
|
477
495
|
@catalog = double('catalog')
|
478
496
|
allow(@catalog).to receive(:respond_to?).with(:filter).and_return(true)
|
479
497
|
end
|
@@ -3,7 +3,64 @@ require 'spec_helper'
|
|
3
3
|
require 'puppet/indirector/catalog/rest'
|
4
4
|
|
5
5
|
describe Puppet::Resource::Catalog::Rest do
|
6
|
-
|
7
|
-
|
6
|
+
let(:certname) { 'ziggy' }
|
7
|
+
let(:uri) { %r{/puppet/v3/catalog/ziggy} }
|
8
|
+
let(:formatter) { Puppet::Network::FormatHandler.format(:json) }
|
9
|
+
let(:catalog) { Puppet::Resource::Catalog.new(certname) }
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
Puppet[:server] = 'compiler.example.com'
|
13
|
+
Puppet[:masterport] = 8140
|
14
|
+
|
15
|
+
described_class.indirection.terminus_class = :rest
|
16
|
+
end
|
17
|
+
|
18
|
+
def catalog_response(catalog)
|
19
|
+
{ body: formatter.render(catalog), headers: {'Content-Type' => formatter.mime } }
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'finds a catalog' do
|
23
|
+
stub_request(:post, uri).to_return(**catalog_response(catalog))
|
24
|
+
|
25
|
+
expect(described_class.indirection.find(certname)).to be_a(Puppet::Resource::Catalog)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "serializes the environment" do
|
29
|
+
stub_request(:post, uri)
|
30
|
+
.with(query: hash_including('environment' => 'outerspace'))
|
31
|
+
.to_return(**catalog_response(catalog))
|
32
|
+
|
33
|
+
described_class.indirection.find(certname, environment: Puppet::Node::Environment.remote('outerspace'))
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'constructs a catalog environment_instance' do
|
37
|
+
env = Puppet::Node::Environment.remote('outerspace')
|
38
|
+
catalog = Puppet::Resource::Catalog.new(certname, env)
|
39
|
+
|
40
|
+
stub_request(:post, uri).to_return(**catalog_response(catalog))
|
41
|
+
|
42
|
+
expect(described_class.indirection.find(certname).environment_instance).to eq(env)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns nil if the node does not exist' do
|
46
|
+
stub_request(:post, uri).to_return(status: 404, headers: { 'Content-Type' => 'application/json' }, body: "{}")
|
47
|
+
|
48
|
+
expect(described_class.indirection.find(certname)).to be_nil
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'raises if fail_on_404 is specified' do
|
52
|
+
stub_request(:post, uri).to_return(status: 404, headers: { 'Content-Type' => 'application/json' }, body: "{}")
|
53
|
+
|
54
|
+
expect{
|
55
|
+
described_class.indirection.find(certname, fail_on_404: true)
|
56
|
+
}.to raise_error(Puppet::Error, %r{Find /puppet/v3/catalog/ziggy resulted in 404 with the message: {}})
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'raises Net::HTTPError on 500' do
|
60
|
+
stub_request(:post, uri).to_return(status: 500)
|
61
|
+
|
62
|
+
expect{
|
63
|
+
described_class.indirection.find(certname)
|
64
|
+
}.to raise_error(Net::HTTPError, %r{Error 500 on SERVER: })
|
8
65
|
end
|
9
66
|
end
|