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
data/lib/puppet/agent.rb
CHANGED
@@ -43,6 +43,7 @@ class Puppet::Agent
|
|
43
43
|
end
|
44
44
|
|
45
45
|
result = nil
|
46
|
+
wait_for_lock_deadline = nil
|
46
47
|
block_run = Puppet::Application.controlled_run do
|
47
48
|
splay client_options.fetch :splay, Puppet[:splay]
|
48
49
|
result = run_in_fork(should_fork) do
|
@@ -60,16 +61,29 @@ class Puppet::Agent
|
|
60
61
|
end
|
61
62
|
end
|
62
63
|
rescue Puppet::LockError
|
63
|
-
|
64
|
-
|
64
|
+
now = Time.now.to_i
|
65
|
+
wait_for_lock_deadline ||= now + Puppet[:maxwaitforlock]
|
66
|
+
|
67
|
+
if Puppet[:waitforlock] < 1
|
68
|
+
Puppet.notice _("Run of %{client_class} already in progress; skipping (%{lockfile_path} exists)") % { client_class: client_class, lockfile_path: lockfile_path }
|
69
|
+
nil
|
70
|
+
elsif now >= wait_for_lock_deadline
|
71
|
+
Puppet.notice _("Exiting now because the maxwaitforlock timeout has been exceeded.")
|
72
|
+
nil
|
73
|
+
else
|
74
|
+
Puppet.info _("Another puppet instance is already running; --waitforlock flag used, waiting for running instance to finish.")
|
75
|
+
Puppet.info _("Will try again in %{time} seconds.") % {time: Puppet[:waitforlock]}
|
76
|
+
sleep Puppet[:waitforlock]
|
77
|
+
retry
|
78
|
+
end
|
65
79
|
rescue RunTimeoutError => detail
|
66
80
|
Puppet.log_exception(detail, _("Execution of %{client_class} did not complete within %{runtimeout} seconds and was terminated.") %
|
67
81
|
{client_class: client_class,
|
68
82
|
runtimeout: Puppet[:runtimeout]})
|
69
|
-
|
83
|
+
nil
|
70
84
|
rescue StandardError => detail
|
71
85
|
Puppet.log_exception(detail, _("Could not run %{client_class}: %{detail}") % { client_class: client_class, detail: detail })
|
72
|
-
|
86
|
+
nil
|
73
87
|
end
|
74
88
|
end
|
75
89
|
end
|
@@ -95,11 +109,9 @@ class Puppet::Agent
|
|
95
109
|
atForkHandler.child
|
96
110
|
$0 = _("puppet agent: applying configuration")
|
97
111
|
begin
|
98
|
-
exit(yield)
|
99
|
-
rescue SystemExit
|
100
|
-
exit(-1)
|
112
|
+
exit(yield || 1)
|
101
113
|
rescue NoMemoryError
|
102
|
-
exit(
|
114
|
+
exit(254)
|
103
115
|
end
|
104
116
|
end
|
105
117
|
ensure
|
@@ -107,12 +119,6 @@ class Puppet::Agent
|
|
107
119
|
end
|
108
120
|
|
109
121
|
exit_code = Process.waitpid2(child_pid)
|
110
|
-
case exit_code[1].exitstatus
|
111
|
-
when -1
|
112
|
-
raise SystemExit
|
113
|
-
when -2
|
114
|
-
raise NoMemoryError
|
115
|
-
end
|
116
122
|
exit_code[1].exitstatus
|
117
123
|
end
|
118
124
|
|
@@ -39,6 +39,7 @@ class Puppet::Application::Agent < Puppet::Application
|
|
39
39
|
:graph => true,
|
40
40
|
:fingerprint => false,
|
41
41
|
:sourceaddress => nil,
|
42
|
+
:start_time => Time.now,
|
42
43
|
}.each do |opt,val|
|
43
44
|
options[opt] = val
|
44
45
|
end
|
@@ -90,7 +91,7 @@ puppet-agent(8) -- #{summary}
|
|
90
91
|
|
91
92
|
SYNOPSIS
|
92
93
|
--------
|
93
|
-
Retrieves the client configuration from the
|
94
|
+
Retrieves the client configuration from the Puppet master and applies it to
|
94
95
|
the local host.
|
95
96
|
|
96
97
|
This service may be run as a daemon, run periodically using cron (or something
|
@@ -164,13 +165,15 @@ when signing certificates).
|
|
164
165
|
only resources not tagged with the specified tags will be applied.
|
165
166
|
Values must be comma-separated.
|
166
167
|
|
168
|
+
|
167
169
|
OPTIONS
|
168
170
|
-------
|
169
171
|
|
170
172
|
Note that any Puppet setting that's valid in the configuration file is also a
|
171
173
|
valid long argument. For example, 'server' is a valid setting, so you can
|
172
|
-
specify '--server <servername>' as an argument. Boolean settings
|
173
|
-
'--setting' and '--no-setting'
|
174
|
+
specify '--server <servername>' as an argument. Boolean settings accept a '--no-'
|
175
|
+
prefix to turn off a behavior, translating into '--setting' and '--no-setting'
|
176
|
+
pairs, such as `--daemonize` and `--no-daemonize`.
|
174
177
|
|
175
178
|
See the configuration file documentation at
|
176
179
|
https://puppet.com/docs/puppet/latest/configuration.html for the
|
@@ -237,15 +240,14 @@ generated by running puppet agent with '--genconfig'.
|
|
237
240
|
* --enable:
|
238
241
|
Enable working on the local system. This removes any lock file,
|
239
242
|
causing 'puppet agent' to start managing the local system again
|
240
|
-
|
241
|
-
not start for another half hour
|
243
|
+
However, it continues to use its normal scheduling, so it might
|
244
|
+
not start for another half hour.
|
242
245
|
|
243
246
|
'puppet agent' exits after executing this.
|
244
247
|
|
245
248
|
* --evaltrace:
|
246
249
|
Logs each resource as it is being evaluated. This allows you to interactively see exactly what is being done. (This is a Puppet setting, and can go in puppet.conf. Note the special 'no-' prefix for boolean settings on the command line.)
|
247
250
|
|
248
|
-
|
249
251
|
* --fingerprint:
|
250
252
|
Display the current certificate or certificate signing request
|
251
253
|
fingerprint and then exit. Use the '--digest' option to change the
|
@@ -256,7 +258,9 @@ generated by running puppet agent with '--genconfig'.
|
|
256
258
|
|
257
259
|
* --job-id:
|
258
260
|
Attach the specified job id to the catalog request and the report used for
|
259
|
-
this agent run. This option only works when '--onetime' is used.
|
261
|
+
this agent run. This option only works when '--onetime' is used. When using
|
262
|
+
Puppet Enterprise this flag should not be used as the orchestrator sets the
|
263
|
+
job-id for you and it must be unique.
|
260
264
|
|
261
265
|
* --logdest:
|
262
266
|
Where to send log messages. Choose between 'syslog' (the POSIX syslog
|
@@ -278,7 +282,7 @@ generated by running puppet agent with '--genconfig'.
|
|
278
282
|
|
279
283
|
* --noop:
|
280
284
|
Use 'noop' mode where the daemon runs in a no-op or dry-run mode. This
|
281
|
-
is useful for seeing what changes Puppet
|
285
|
+
is useful for seeing what changes Puppet would make without actually
|
282
286
|
executing the changes.
|
283
287
|
(This is a Puppet setting, and can go in puppet.conf. Note the special 'no-'
|
284
288
|
prefix for boolean settings on the command line.)
|
@@ -302,8 +306,6 @@ generated by running puppet agent with '--genconfig'.
|
|
302
306
|
* --trace
|
303
307
|
Prints stack traces on some errors. (This is a Puppet setting, and can go in puppet.conf. Note the special 'no-' prefix for boolean settings on the command line.)
|
304
308
|
|
305
|
-
|
306
|
-
|
307
309
|
* --verbose:
|
308
310
|
Turn on verbose reporting.
|
309
311
|
|
@@ -317,8 +319,7 @@ generated by running puppet agent with '--genconfig'.
|
|
317
319
|
it to sign a certificate request. This is useful for the initial setup
|
318
320
|
of a puppet client. You can turn off waiting for certificates by
|
319
321
|
specifying a time of 0.
|
320
|
-
(This is a Puppet setting, and can go in puppet.conf.
|
321
|
-
prefix for boolean settings on the command line.)
|
322
|
+
(This is a Puppet setting, and can go in puppet.conf.)
|
322
323
|
|
323
324
|
|
324
325
|
EXAMPLE
|
@@ -364,8 +365,17 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
|
|
364
365
|
daemon.set_signal_traps
|
365
366
|
|
366
367
|
log_config if Puppet[:daemonize]
|
367
|
-
|
368
|
-
|
368
|
+
|
369
|
+
# run ssl state machine, waiting if needed
|
370
|
+
ssl_context = wait_for_certificates
|
371
|
+
|
372
|
+
# Each application is responsible for pushing loaders onto the context.
|
373
|
+
# Use the current environment that has already been established, though
|
374
|
+
# it may change later during the configurer run.
|
375
|
+
env = Puppet.lookup(:current_environment)
|
376
|
+
Puppet.override(ssl_context: ssl_context,
|
377
|
+
current_environment: env,
|
378
|
+
loaders: Puppet::Pops::Loaders.new(env, true)) do
|
369
379
|
if Puppet[:onetime]
|
370
380
|
onetime(daemon)
|
371
381
|
else
|
@@ -407,7 +417,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
|
|
407
417
|
|
408
418
|
def onetime(daemon)
|
409
419
|
begin
|
410
|
-
exitstatus = daemon.agent.run(:job_id => options[:job_id])
|
420
|
+
exitstatus = daemon.agent.run({:job_id => options[:job_id], :start_time => options[:start_time]})
|
411
421
|
rescue => detail
|
412
422
|
Puppet.log_exception(detail)
|
413
423
|
end
|
@@ -490,9 +500,8 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
|
|
490
500
|
end
|
491
501
|
|
492
502
|
def daemonize_process_when(should_daemonize)
|
493
|
-
daemon = Puppet::Daemon.new(Puppet::Util::Pidlock.new(Puppet[:pidfile]))
|
503
|
+
daemon = Puppet::Daemon.new(@agent, Puppet::Util::Pidlock.new(Puppet[:pidfile]))
|
494
504
|
daemon.argv = @argv
|
495
|
-
daemon.agent = @agent
|
496
505
|
|
497
506
|
daemon.daemonize if should_daemonize
|
498
507
|
|
@@ -67,13 +67,15 @@ class TypeDoc
|
|
67
67
|
@types.keys.sort_by(&:to_s).each do |name|
|
68
68
|
type = @types[name]
|
69
69
|
s = type.doc.gsub(/\s+/, " ")
|
70
|
-
|
71
|
-
if n.nil?
|
70
|
+
if s.empty?
|
72
71
|
s = ".. no documentation .."
|
73
|
-
elsif n > 45
|
74
|
-
s = s[0, 45] + " ..."
|
75
72
|
else
|
76
|
-
|
73
|
+
n = s.index(".") || s.length
|
74
|
+
if n > 45
|
75
|
+
s = s[0, 45] + " ..."
|
76
|
+
else
|
77
|
+
s = s[0, n]
|
78
|
+
end
|
77
79
|
end
|
78
80
|
printf "%-15s - %s\n", name, s
|
79
81
|
end
|
@@ -194,7 +194,7 @@ you can specify '--server
|
|
194
194
|
|
195
195
|
* --resource:
|
196
196
|
Displays a resource state as Puppet code, roughly equivalent to
|
197
|
-
`puppet resource`. Can be
|
197
|
+
`puppet resource`. Can be filtered by title. Requires --target be specified.
|
198
198
|
|
199
199
|
* --target:
|
200
200
|
Target a specific device/certificate in the device.conf. Doing so will perform a
|
@@ -259,7 +259,7 @@ Licensed under the Apache 2.0 License
|
|
259
259
|
end
|
260
260
|
end
|
261
261
|
devices.collect do |devicename,device|
|
262
|
-
pool = Puppet
|
262
|
+
pool = Puppet.runtime[:http].pool
|
263
263
|
Puppet.override(:http_pool => pool) do
|
264
264
|
# TODO when we drop support for ruby < 2.5 we can remove the extra block here
|
265
265
|
begin
|
@@ -69,6 +69,19 @@ running as a user with valid Puppet certificates. Alternatively, you can
|
|
69
69
|
use your local file bucket by specifying '--local', or by specifying
|
70
70
|
'--bucket' with a local path.
|
71
71
|
|
72
|
+
> **Note**: Enabling and using the backup option, and by extension the
|
73
|
+
filebucket resource, requires appropriate planning and management to ensure
|
74
|
+
that sufficient disk space is available for the file backups. Generally, you
|
75
|
+
can implement this using one of the following two options:
|
76
|
+
- Use a `find` command and `crontab` entry to retain only the last X days
|
77
|
+
of file backups. For example:
|
78
|
+
|
79
|
+
```shell
|
80
|
+
find /opt/puppetlabs/server/data/puppetserver/bucket -type f -mtime +45 -atime +45 -print0 | xargs -0 rm
|
81
|
+
```
|
82
|
+
|
83
|
+
- Restrict the directory to a maximum size after which the oldest items are removed.
|
84
|
+
|
72
85
|
|
73
86
|
OPTIONS
|
74
87
|
-------
|
@@ -108,7 +121,7 @@ configuration options can also be generated by running puppet with
|
|
108
121
|
by default.
|
109
122
|
|
110
123
|
* --server_list:
|
111
|
-
A list of comma
|
124
|
+
A list of comma separated servers; only the first entry is used for file storage.
|
112
125
|
This setting takes precidence over `server`.
|
113
126
|
|
114
127
|
* --server:
|
@@ -279,7 +292,7 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
|
|
279
292
|
Puppet::Log.level = :info
|
280
293
|
end
|
281
294
|
|
282
|
-
|
295
|
+
exit(Puppet.settings.print_configs ? 0 : 1) if Puppet.settings.print_configs?
|
283
296
|
|
284
297
|
require 'puppet/file_bucket/dipper'
|
285
298
|
begin
|
@@ -287,19 +300,10 @@ Copyright (c) 2011 Puppet Inc., LLC Licensed under the Apache 2.0 License
|
|
287
300
|
path = options[:bucket] || Puppet[:clientbucketdir]
|
288
301
|
@client = Puppet::FileBucket::Dipper.new(:Path => path)
|
289
302
|
else
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
@client = Puppet::FileBucket::Dipper.new(
|
295
|
-
:Server => server[0],
|
296
|
-
:Port => server[1]
|
297
|
-
)
|
298
|
-
else
|
299
|
-
#TRANSLATORS 'server' is the name of a setting and should not be translated
|
300
|
-
Puppet.debug _("Selected server from the `server` setting: %{server}") % {server: Puppet[:server]}
|
301
|
-
@client = Puppet::FileBucket::Dipper.new(:Server => Puppet[:server])
|
302
|
-
end
|
303
|
+
session = Puppet.lookup(:http_session)
|
304
|
+
api = session.route_to(:puppet)
|
305
|
+
|
306
|
+
@client = Puppet::FileBucket::Dipper.new(Server: api.url.host, Port: api.url.port)
|
303
307
|
end
|
304
308
|
rescue => detail
|
305
309
|
Puppet.log_exception(detail)
|
@@ -28,7 +28,7 @@ OPTIONS
|
|
28
28
|
-------
|
29
29
|
|
30
30
|
* --help:
|
31
|
-
Print this help
|
31
|
+
Print this help message.
|
32
32
|
|
33
33
|
* --verbose:
|
34
34
|
Print extra information.
|
@@ -90,7 +90,7 @@ HELP
|
|
90
90
|
@cert_provider = Puppet::X509::CertProvider.new
|
91
91
|
@ssl_provider = Puppet::SSL::SSLProvider.new
|
92
92
|
@machine = Puppet::SSL::StateMachine.new
|
93
|
-
@session = Puppet.runtime[
|
93
|
+
@session = Puppet.runtime[:http].create_session
|
94
94
|
end
|
95
95
|
|
96
96
|
def setup_logs
|
@@ -182,7 +182,7 @@ HELP
|
|
182
182
|
route = create_route(ssl_context)
|
183
183
|
Puppet.info _("Downloading certificate '%{name}' from %{url}") % { name: Puppet[:certname], url: route.url }
|
184
184
|
|
185
|
-
x509 = route.get_certificate(Puppet[:certname], ssl_context: ssl_context)
|
185
|
+
_, x509 = route.get_certificate(Puppet[:certname], ssl_context: ssl_context)
|
186
186
|
cert = OpenSSL::X509::Certificate.new(x509)
|
187
187
|
Puppet.notice _("Downloaded certificate '%{name}' with fingerprint %{fingerprint}") % { name: Puppet[:certname], fingerprint: fingerprint(cert) }
|
188
188
|
|
@@ -226,7 +226,7 @@ HELP
|
|
226
226
|
begin
|
227
227
|
ssl_context = @machine.ensure_ca_certificates
|
228
228
|
route = create_route(ssl_context)
|
229
|
-
cert = route.get_certificate(certname, ssl_context: ssl_context)
|
229
|
+
_, cert = route.get_certificate(certname, ssl_context: ssl_context)
|
230
230
|
rescue Puppet::HTTP::ResponseError => e
|
231
231
|
if e.response.code.to_i != 404
|
232
232
|
raise Puppet::Error.new(_("Failed to connect to the CA to determine if certificate %{certname} has been cleaned") % { certname: certname }, e)
|
data/lib/puppet/configurer.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# The client for interacting with the puppetmaster config server.
|
2
|
-
require 'sync'
|
3
2
|
require 'timeout'
|
4
|
-
require 'puppet/network/http_pool'
|
5
3
|
require 'puppet/util'
|
6
4
|
require 'securerandom'
|
7
5
|
#require 'puppet/parser/script_compiler'
|
@@ -65,7 +63,7 @@ class Puppet::Configurer
|
|
65
63
|
end
|
66
64
|
|
67
65
|
# Get the remote catalog, yo. Returns nil if no catalog can be found.
|
68
|
-
def retrieve_catalog(query_options)
|
66
|
+
def retrieve_catalog(facts, query_options)
|
69
67
|
query_options ||= {}
|
70
68
|
result = retrieve_catalog_from_cache(query_options) if Puppet[:use_cached_catalog]
|
71
69
|
if result
|
@@ -73,7 +71,7 @@ class Puppet::Configurer
|
|
73
71
|
|
74
72
|
Puppet.info _("Using cached catalog from environment '%{environment}'") % { environment: result.environment }
|
75
73
|
else
|
76
|
-
result = retrieve_new_catalog(query_options)
|
74
|
+
result = retrieve_new_catalog(facts, query_options)
|
77
75
|
|
78
76
|
if !result
|
79
77
|
if !Puppet[:usecacheonfailure]
|
@@ -100,12 +98,11 @@ class Puppet::Configurer
|
|
100
98
|
end
|
101
99
|
|
102
100
|
# Convert a plain resource catalog into our full host catalog.
|
103
|
-
def convert_catalog(result, duration, options = {})
|
101
|
+
def convert_catalog(result, duration, facts, options = {})
|
104
102
|
catalog = nil
|
105
103
|
|
106
104
|
catalog_conversion_time = thinmark do
|
107
105
|
# Will mutate the result and replace all Deferred values with resolved values
|
108
|
-
facts = options[:convert_with_facts]
|
109
106
|
if facts
|
110
107
|
Puppet::Pops::Evaluator::DeferredResolver.resolve_and_replace(facts, result)
|
111
108
|
end
|
@@ -134,6 +131,7 @@ class Puppet::Configurer
|
|
134
131
|
end
|
135
132
|
|
136
133
|
facts_hash = {}
|
134
|
+
facts = nil
|
137
135
|
if Puppet::Resource::Catalog.indirection.terminus_class == :rest
|
138
136
|
# This is a bit complicated. We need the serialized and escaped facts,
|
139
137
|
# and we need to know which format they're encoded in. Thus, we
|
@@ -142,15 +140,14 @@ class Puppet::Configurer
|
|
142
140
|
# facts_for_uploading may set Puppet[:node_name_value] as a side effect
|
143
141
|
facter_time = thinmark do
|
144
142
|
facts = find_facts
|
145
|
-
options[:convert_with_facts] = facts
|
146
143
|
facts_hash = encode_facts(facts) # encode for uploading # was: facts_for_uploading
|
147
144
|
end
|
148
145
|
options[:report].add_times(:fact_generation, facter_time) if options[:report]
|
149
146
|
end
|
150
|
-
facts_hash
|
147
|
+
[facts_hash, facts]
|
151
148
|
end
|
152
149
|
|
153
|
-
def prepare_and_retrieve_catalog(cached_catalog, options, query_options)
|
150
|
+
def prepare_and_retrieve_catalog(cached_catalog, facts, options, query_options)
|
154
151
|
# set report host name now that we have the fact
|
155
152
|
options[:report].host = Puppet[:node_name_value]
|
156
153
|
|
@@ -166,7 +163,7 @@ class Puppet::Configurer
|
|
166
163
|
catalog = cached_catalog || options[:catalog]
|
167
164
|
unless catalog
|
168
165
|
# retrieve_catalog returns resource catalog
|
169
|
-
catalog = retrieve_catalog(query_options)
|
166
|
+
catalog = retrieve_catalog(facts, query_options)
|
170
167
|
Puppet.err _("Could not retrieve catalog; skipping run") unless catalog
|
171
168
|
end
|
172
169
|
catalog
|
@@ -197,12 +194,12 @@ class Puppet::Configurer
|
|
197
194
|
# This just passes any options on to the catalog,
|
198
195
|
# which accepts :tags and :ignoreschedules.
|
199
196
|
def run(options = {})
|
200
|
-
pool = Puppet
|
197
|
+
pool = Puppet.runtime[:http].pool
|
201
198
|
# We create the report pre-populated with default settings for
|
202
199
|
# environment and transaction_uuid very early, this is to ensure
|
203
200
|
# they are sent regardless of any catalog compilation failures or
|
204
201
|
# exceptions.
|
205
|
-
options[:report] ||= Puppet::Transaction::Report.new(nil, @environment, @transaction_uuid, @job_id)
|
202
|
+
options[:report] ||= Puppet::Transaction::Report.new(nil, @environment, @transaction_uuid, @job_id, options[:start_time] || Time.now)
|
206
203
|
report = options[:report]
|
207
204
|
init_storage
|
208
205
|
|
@@ -211,13 +208,9 @@ class Puppet::Configurer
|
|
211
208
|
completed = nil
|
212
209
|
begin
|
213
210
|
Puppet.override(:http_pool => pool) do
|
214
|
-
|
215
211
|
# Skip failover logic if the server_list setting is empty
|
216
|
-
|
217
|
-
|
218
|
-
else
|
219
|
-
do_failover = true
|
220
|
-
end
|
212
|
+
do_failover = Puppet.settings[:server_list] && !Puppet.settings[:server_list].empty?
|
213
|
+
|
221
214
|
# When we are passed a catalog, that means we're in apply
|
222
215
|
# mode. We shouldn't try to do any failover in that case.
|
223
216
|
if options[:catalog].nil? && do_failover
|
@@ -225,8 +218,6 @@ class Puppet::Configurer
|
|
225
218
|
if server.nil?
|
226
219
|
raise Puppet::Error, _("Could not select a functional puppet master from server_list: '%{server_list}'") % { server_list: Puppet.settings.value(:server_list, Puppet[:environment].to_sym, true) }
|
227
220
|
else
|
228
|
-
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
229
|
-
Puppet.debug _("Selected puppet server from the `server_list` setting: %{server}:%{port}") % { server: server, port: port }
|
230
221
|
report.master_used = "#{server}:#{port}"
|
231
222
|
end
|
232
223
|
Puppet.override(server: server, serverport: port) do
|
@@ -244,9 +235,13 @@ class Puppet::Configurer
|
|
244
235
|
end
|
245
236
|
|
246
237
|
def run_internal(options)
|
247
|
-
start = Time.now
|
248
238
|
report = options[:report]
|
249
239
|
|
240
|
+
if options[:start_time]
|
241
|
+
startup_time = Time.now - options[:start_time]
|
242
|
+
report.add_times(:startup_time, startup_time)
|
243
|
+
end
|
244
|
+
|
250
245
|
# If a cached catalog is explicitly requested, attempt to retrieve it. Skip the node request,
|
251
246
|
# don't pluginsync and switch to the catalog's environment if we successfully retrieve it.
|
252
247
|
if Puppet[:use_cached_catalog]
|
@@ -274,7 +269,7 @@ class Puppet::Configurer
|
|
274
269
|
|
275
270
|
begin
|
276
271
|
unless Puppet[:node_name_fact].empty?
|
277
|
-
query_options = get_facts(options)
|
272
|
+
query_options, facts = get_facts(options)
|
278
273
|
end
|
279
274
|
|
280
275
|
configured_environment = Puppet[:environment] if Puppet.settings.set_by_config?(:environment)
|
@@ -307,6 +302,16 @@ class Puppet::Configurer
|
|
307
302
|
@environment = node.environment.to_s
|
308
303
|
report.environment = @environment
|
309
304
|
query_options = nil
|
305
|
+
facts = nil
|
306
|
+
|
307
|
+
new_env = Puppet::Node::Environment.remote(@environment)
|
308
|
+
Puppet.push_context(
|
309
|
+
{
|
310
|
+
current_environment: new_env,
|
311
|
+
loaders: Puppet::Pops::Loaders.new(new_env, true)
|
312
|
+
},
|
313
|
+
"Local node environment #{@environment} for configurer transaction"
|
314
|
+
)
|
310
315
|
else
|
311
316
|
Puppet.info _("Using configured environment '%{env}'") % { env: @environment }
|
312
317
|
end
|
@@ -317,25 +322,24 @@ class Puppet::Configurer
|
|
317
322
|
end
|
318
323
|
end
|
319
324
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
325
|
+
# This is to maintain compatibility with anyone using this class
|
326
|
+
# aside from agent, apply, device.
|
327
|
+
unless Puppet.lookup(:loaders) { nil }
|
328
|
+
new_env = Puppet::Node::Environment.remote(@environment)
|
329
|
+
Puppet.push_context(
|
330
|
+
{
|
331
|
+
current_environment: new_env,
|
332
|
+
loaders: Puppet::Pops::Loaders.new(new_env, true)
|
333
|
+
},
|
334
|
+
"Local node environment #{@environment} for configurer transaction"
|
335
|
+
)
|
328
336
|
end
|
329
|
-
Puppet.push_context({
|
330
|
-
:current_environment => local_node_environment,
|
331
|
-
:loaders => Puppet::Pops::Loaders.new(local_node_environment, true)
|
332
|
-
}, "Local node environment for configurer transaction")
|
333
337
|
|
334
|
-
query_options = get_facts(options) unless query_options
|
338
|
+
query_options, facts = get_facts(options) unless query_options
|
335
339
|
query_options[:configured_environment] = configured_environment
|
336
340
|
options[:convert_for_node] = node
|
337
341
|
|
338
|
-
catalog = prepare_and_retrieve_catalog(cached_catalog, options, query_options)
|
342
|
+
catalog = prepare_and_retrieve_catalog(cached_catalog, facts, options, query_options)
|
339
343
|
unless catalog
|
340
344
|
return nil
|
341
345
|
end
|
@@ -358,11 +362,11 @@ class Puppet::Configurer
|
|
358
362
|
@environment = catalog.environment
|
359
363
|
report.environment = @environment
|
360
364
|
|
361
|
-
query_options = get_facts(options)
|
365
|
+
query_options, facts = get_facts(options)
|
362
366
|
query_options[:configured_environment] = configured_environment
|
363
367
|
|
364
368
|
# if we get here, ignore the cached catalog
|
365
|
-
catalog = prepare_and_retrieve_catalog(nil, options, query_options)
|
369
|
+
catalog = prepare_and_retrieve_catalog(nil, facts, options, query_options)
|
366
370
|
return nil unless catalog
|
367
371
|
tries += 1
|
368
372
|
end
|
@@ -374,7 +378,7 @@ class Puppet::Configurer
|
|
374
378
|
else
|
375
379
|
# REMIND @duration is the time spent loading the last catalog, and doesn't
|
376
380
|
# account for things like we failed to download and fell back to the cache
|
377
|
-
ral_catalog = convert_catalog(catalog, @duration, options)
|
381
|
+
ral_catalog = convert_catalog(catalog, @duration, facts, options)
|
378
382
|
|
379
383
|
# If not noop, commit the cached resource catalog (not ral catalog). Ideally
|
380
384
|
# we'd just copy the downloaded response body, instead of serializing the
|
@@ -410,7 +414,7 @@ class Puppet::Configurer
|
|
410
414
|
end
|
411
415
|
|
412
416
|
report.cached_catalog_status ||= @cached_catalog_status
|
413
|
-
report.add_times(:total, Time.now -
|
417
|
+
report.add_times(:total, Time.now - report.time)
|
414
418
|
report.finalize_report
|
415
419
|
Puppet::Util::Log.close(report)
|
416
420
|
send_report(report)
|
@@ -419,21 +423,16 @@ class Puppet::Configurer
|
|
419
423
|
private :run_internal
|
420
424
|
|
421
425
|
def find_functional_server
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
{ host: host, port: port, code: response.code, reason: response.message })
|
433
|
-
rescue => detail
|
434
|
-
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
435
|
-
Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
|
436
|
-
end
|
426
|
+
begin
|
427
|
+
session = Puppet.lookup(:http_session)
|
428
|
+
service = session.route_to(:puppet)
|
429
|
+
return [service.url.host, service.url.port]
|
430
|
+
rescue Puppet::HTTP::ResponseError => e
|
431
|
+
Puppet.debug(_("Puppet server %{host}:%{port} is unavailable: %{code} %{reason}") %
|
432
|
+
{ host: e.response.url.host, port: e.response.url.port, code: e.response.code, reason: e.response.reason })
|
433
|
+
rescue => detail
|
434
|
+
#TRANSLATORS 'server_list' is the name of a setting and should not be translated
|
435
|
+
Puppet.debug _("Unable to connect to server from server_list setting: %{detail}") % {detail: detail}
|
437
436
|
end
|
438
437
|
[nil, nil]
|
439
438
|
end
|
@@ -468,21 +467,17 @@ class Puppet::Configurer
|
|
468
467
|
::Facter.clear
|
469
468
|
facts = find_facts
|
470
469
|
|
471
|
-
|
472
|
-
|
473
|
-
|
470
|
+
client = Puppet.runtime[:http]
|
471
|
+
session = client.create_session
|
472
|
+
puppet = session.route_to(:puppet)
|
474
473
|
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
server: server})
|
474
|
+
Puppet.info(_("Uploading facts for %{node} to %{server}") % {
|
475
|
+
node: facts.name,
|
476
|
+
server: puppet.url.hostname})
|
479
477
|
|
480
|
-
|
478
|
+
puppet.put_facts(facts.name, facts: facts, environment: Puppet.lookup(:current_environment).name.to_s)
|
481
479
|
|
482
|
-
|
483
|
-
ensure
|
484
|
-
Puppet::Node::Facts.indirection.terminus_class = saved_fact_terminus
|
485
|
-
end
|
480
|
+
return true
|
486
481
|
rescue => detail
|
487
482
|
Puppet.log_exception(detail, _("Failed to submit facts: %{detail}") %
|
488
483
|
{ detail: detail })
|
@@ -521,7 +516,7 @@ class Puppet::Configurer
|
|
521
516
|
return nil
|
522
517
|
end
|
523
518
|
|
524
|
-
def retrieve_new_catalog(query_options)
|
519
|
+
def retrieve_new_catalog(facts, query_options)
|
525
520
|
result = nil
|
526
521
|
@duration = thinmark do
|
527
522
|
result = Puppet::Resource::Catalog.indirection.find(
|
@@ -531,7 +526,8 @@ class Puppet::Configurer
|
|
531
526
|
# don't update cache until after environment converges
|
532
527
|
:ignore_cache_save => true,
|
533
528
|
:environment => Puppet::Node::Environment.remote(@environment),
|
534
|
-
:fail_on_404 => true
|
529
|
+
:fail_on_404 => true,
|
530
|
+
:facts_for_catalog => facts
|
535
531
|
)
|
536
532
|
)
|
537
533
|
end
|