puppet 6.21.1-x86-mingw32 → 6.25.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +5 -5
- data/Gemfile +3 -3
- data/Gemfile.lock +34 -28
- data/README.md +4 -4
- data/{ext → examples/enc}/regexp_nodes/classes/databases +0 -0
- data/{ext → examples/enc}/regexp_nodes/classes/webservers +0 -0
- data/{ext → examples/enc}/regexp_nodes/environment/development +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/prod +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/qa +0 -0
- data/{ext → examples/enc}/regexp_nodes/parameters/service/sandbox +0 -0
- data/{ext → examples/enc}/regexp_nodes/regexp_nodes.rb +0 -0
- data/{ext → examples}/nagios/check_puppet.rb +2 -2
- data/ext/README.md +13 -0
- data/ext/osx/puppet.plist +2 -0
- data/ext/project_data.yaml +3 -2
- data/lib/puppet/application/agent.rb +16 -5
- data/lib/puppet/application/apply.rb +22 -3
- data/lib/puppet/application/device.rb +2 -1
- data/lib/puppet/application/filebucket.rb +1 -0
- data/lib/puppet/application/resource.rb +32 -16
- data/lib/puppet/application/script.rb +2 -1
- data/lib/puppet/application/ssl.rb +12 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +1 -0
- data/lib/puppet/configurer/downloader.rb +2 -1
- data/lib/puppet/configurer.rb +85 -57
- data/lib/puppet/confine/variable.rb +1 -1
- data/lib/puppet/defaults.rb +63 -35
- data/lib/puppet/environments.rb +91 -26
- data/lib/puppet/face/facts.rb +129 -31
- data/lib/puppet/face/help/action.erb +1 -0
- data/lib/puppet/face/help/face.erb +1 -0
- data/lib/puppet/face/node/clean.rb +11 -0
- data/lib/puppet/facter_impl.rb +96 -0
- data/lib/puppet/file_serving/configuration/parser.rb +2 -0
- data/lib/puppet/file_serving/configuration.rb +3 -0
- data/lib/puppet/file_serving/fileset.rb +14 -2
- data/lib/puppet/file_serving/mount/file.rb +4 -4
- data/lib/puppet/file_serving/mount/scripts.rb +24 -0
- data/lib/puppet/file_system/file_impl.rb +3 -1
- data/lib/puppet/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +4 -2
- data/lib/puppet/forge.rb +4 -4
- data/lib/puppet/functions/all.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +1 -1
- data/lib/puppet/functions/capitalize.rb +2 -2
- data/lib/puppet/functions/downcase.rb +2 -2
- data/lib/puppet/functions/empty.rb +8 -0
- data/lib/puppet/functions/find_template.rb +2 -2
- data/lib/puppet/functions/get.rb +5 -5
- data/lib/puppet/functions/group_by.rb +13 -5
- data/lib/puppet/functions/lest.rb +1 -1
- data/lib/puppet/functions/new.rb +100 -100
- data/lib/puppet/functions/partition.rb +12 -4
- data/lib/puppet/functions/require.rb +5 -5
- data/lib/puppet/functions/sort.rb +3 -3
- data/lib/puppet/functions/strftime.rb +1 -0
- data/lib/puppet/functions/tree_each.rb +7 -9
- data/lib/puppet/functions/type.rb +4 -4
- data/lib/puppet/functions/unwrap.rb +17 -2
- data/lib/puppet/functions/upcase.rb +2 -2
- data/lib/puppet/http/resolver/server_list.rb +15 -4
- data/lib/puppet/http/service/compiler.rb +75 -1
- data/lib/puppet/http/service/file_server.rb +2 -1
- data/lib/puppet/indirector/catalog/compiler.rb +25 -6
- data/lib/puppet/indirector/catalog/rest.rb +1 -0
- data/lib/puppet/indirector/facts/facter.rb +28 -7
- data/lib/puppet/indirector/file_metadata/rest.rb +1 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/resource/ral.rb +6 -1
- data/lib/puppet/indirector/terminus.rb +4 -0
- data/lib/puppet/interface/documentation.rb +1 -0
- data/lib/puppet/module/plan.rb +0 -1
- data/lib/puppet/module/task.rb +1 -1
- data/lib/puppet/module.rb +1 -0
- data/lib/puppet/module_tool/applications/installer.rb +12 -4
- data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
- data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
- data/lib/puppet/module_tool/errors/shared.rb +17 -0
- data/lib/puppet/network/formats.rb +67 -0
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/factory.rb +4 -0
- data/lib/puppet/node/environment.rb +10 -11
- data/lib/puppet/pal/pal_impl.rb +1 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +14 -6
- data/lib/puppet/parser/scope.rb +1 -0
- data/lib/puppet/parser/templatewrapper.rb +1 -0
- data/lib/puppet/pops/lookup/lookup_adapter.rb +3 -2
- data/lib/puppet/pops/model/ast.rb +1 -0
- data/lib/puppet/pops/model/factory.rb +2 -1
- data/lib/puppet/pops/parser/eparser.rb +201 -201
- data/lib/puppet/pops/parser/lexer2.rb +92 -91
- data/lib/puppet/pops/parser/slurp_support.rb +1 -0
- data/lib/puppet/pops/serialization/to_data_converter.rb +18 -6
- data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
- data/lib/puppet/pops/types/p_sem_ver_type.rb +8 -2
- data/lib/puppet/pops/types/p_sensitive_type.rb +10 -0
- data/lib/puppet/pops/types/type_formatter.rb +4 -3
- data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/provider/aix_object.rb +1 -1
- data/lib/puppet/provider/exec/posix.rb +16 -4
- data/lib/puppet/provider/group/groupadd.rb +5 -2
- data/lib/puppet/provider/package/dnfmodule.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +11 -6
- data/lib/puppet/provider/package/pip.rb +15 -3
- data/lib/puppet/provider/package/pkg.rb +19 -2
- data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +3 -0
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/init.rb +5 -5
- data/lib/puppet/provider/service/launchd.rb +2 -2
- data/lib/puppet/provider/service/redhat.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +3 -3
- data/lib/puppet/provider/service/systemd.rb +16 -6
- data/lib/puppet/provider/service/upstart.rb +5 -5
- data/lib/puppet/provider/service/windows.rb +38 -0
- data/lib/puppet/provider/user/aix.rb +44 -1
- data/lib/puppet/provider/user/directoryservice.rb +26 -13
- data/lib/puppet/provider/user/useradd.rb +73 -17
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +2 -2
- data/lib/puppet/resource/type_collection.rb +1 -0
- data/lib/puppet/runtime.rb +11 -1
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/settings.rb +32 -9
- data/lib/puppet/test/test_helper.rb +4 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/transaction/persistence.rb +11 -1
- data/lib/puppet/transaction/report.rb +15 -1
- data/lib/puppet/type/exec.rb +35 -5
- data/lib/puppet/type/file/mode.rb +6 -0
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file.rb +25 -7
- data/lib/puppet/type/filebucket.rb +3 -3
- data/lib/puppet/type/group.rb +0 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/service.rb +26 -41
- data/lib/puppet/type/tidy.rb +22 -3
- data/lib/puppet/type/user.rb +38 -21
- data/lib/puppet/type.rb +1 -1
- data/lib/puppet/util/command_line.rb +1 -1
- data/lib/puppet/util/fact_dif.rb +36 -17
- data/lib/puppet/util/filetype.rb +2 -2
- data/lib/puppet/util/json.rb +3 -0
- data/lib/puppet/util/log.rb +1 -2
- data/lib/puppet/util/logging.rb +1 -25
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/pidlock.rb +1 -1
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
- data/lib/puppet/util/selinux.rb +30 -4
- data/lib/puppet/util/suidmanager.rb +1 -2
- data/lib/puppet/util/symbolic_file_mode.rb +29 -17
- data/lib/puppet/util/tagging.rb +1 -0
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/sid.rb +6 -2
- data/lib/puppet/util/windows/user.rb +0 -2
- data/lib/puppet/util.rb +4 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +5 -9
- data/locales/puppet.pot +506 -410
- data/man/man5/puppet.conf.5 +310 -274
- data/man/man8/puppet-agent.8 +4 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +9 -9
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +65 -7
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-key.8 +7 -7
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +3 -3
- data/man/man8/puppet-node.8 +5 -5
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +5 -5
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet-status.8 +4 -4
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +4 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +3 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +8 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +25 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +19 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +20 -0
- data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +8 -0
- data/spec/fixtures/ssl/127.0.0.1-key.pem +107 -57
- data/spec/fixtures/ssl/127.0.0.1.pem +52 -31
- data/spec/fixtures/ssl/bad-basic-constraints.pem +57 -35
- data/spec/fixtures/ssl/bad-int-basic-constraints.pem +57 -35
- data/spec/fixtures/ssl/ca.pem +57 -35
- data/spec/fixtures/ssl/crl.pem +28 -18
- data/spec/fixtures/ssl/ec-key.pem +11 -11
- data/spec/fixtures/ssl/ec.pem +33 -24
- data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
- data/spec/fixtures/ssl/encrypted-key.pem +108 -58
- data/spec/fixtures/ssl/intermediate-agent-crl.pem +28 -19
- data/spec/fixtures/ssl/intermediate-agent.pem +57 -36
- data/spec/fixtures/ssl/intermediate-crl.pem +31 -21
- data/spec/fixtures/ssl/intermediate.pem +57 -36
- data/spec/fixtures/ssl/oid-key.pem +117 -0
- data/spec/fixtures/ssl/oid.pem +69 -0
- data/spec/fixtures/ssl/pluto-key.pem +107 -57
- data/spec/fixtures/ssl/pluto.pem +52 -30
- data/spec/fixtures/ssl/request-key.pem +107 -57
- data/spec/fixtures/ssl/request.pem +47 -26
- data/spec/fixtures/ssl/revoked-key.pem +107 -57
- data/spec/fixtures/ssl/revoked.pem +52 -30
- data/spec/fixtures/ssl/signed-key.pem +107 -57
- data/spec/fixtures/ssl/signed.pem +52 -30
- data/spec/fixtures/ssl/tampered-cert.pem +52 -30
- data/spec/fixtures/ssl/tampered-csr.pem +47 -26
- data/spec/fixtures/ssl/trusted_oid_mapping.yaml +5 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +107 -57
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +50 -29
- data/spec/fixtures/ssl/unknown-ca-key.pem +107 -57
- data/spec/fixtures/ssl/unknown-ca.pem +55 -33
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
- data/spec/integration/application/agent_spec.rb +113 -37
- data/spec/integration/application/filebucket_spec.rb +16 -0
- data/spec/integration/application/module_spec.rb +21 -0
- data/spec/integration/application/plugin_spec.rb +1 -1
- data/spec/integration/application/resource_spec.rb +64 -0
- data/spec/integration/application/ssl_spec.rb +20 -0
- data/spec/integration/configurer_spec.rb +18 -2
- data/spec/integration/environments/settings_interpolation_spec.rb +0 -4
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- data/spec/integration/indirector/facts/facter_spec.rb +93 -39
- data/spec/integration/l10n/compiler_spec.rb +37 -0
- data/spec/integration/transaction/report_spec.rb +1 -1
- data/spec/integration/type/exec_spec.rb +70 -45
- data/spec/integration/type/file_spec.rb +2 -2
- data/spec/integration/type/package_spec.rb +6 -6
- data/spec/integration/util/rdoc/parser_spec.rb +1 -1
- data/spec/integration/util/windows/adsi_spec.rb +18 -0
- data/spec/integration/util/windows/principal_spec.rb +21 -0
- data/spec/integration/util/windows/process_spec.rb +1 -9
- data/spec/integration/util/windows/registry_spec.rb +6 -0
- data/spec/lib/puppet/test_ca.rb +7 -2
- data/spec/lib/puppet_spec/modules.rb +13 -2
- data/spec/lib/puppet_spec/puppetserver.rb +15 -0
- data/spec/lib/puppet_spec/settings.rb +1 -0
- data/spec/shared_behaviours/documentation_on_faces.rb +0 -2
- data/spec/shared_contexts/l10n.rb +27 -0
- data/spec/spec_helper.rb +12 -11
- data/spec/unit/application/agent_spec.rb +7 -2
- data/spec/unit/application/apply_spec.rb +76 -56
- data/spec/unit/application/facts_spec.rb +482 -3
- data/spec/unit/application/resource_spec.rb +29 -0
- data/spec/unit/application/ssl_spec.rb +23 -0
- data/spec/unit/configurer/downloader_spec.rb +6 -0
- data/spec/unit/configurer_spec.rb +194 -56
- data/spec/unit/defaults_spec.rb +17 -0
- data/spec/unit/environments_spec.rb +348 -88
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/facter_impl_spec.rb +31 -0
- data/spec/unit/file_bucket/dipper_spec.rb +2 -2
- data/spec/unit/file_serving/configuration/parser_spec.rb +23 -0
- data/spec/unit/file_serving/configuration_spec.rb +14 -4
- data/spec/unit/file_serving/fileset_spec.rb +60 -0
- data/spec/unit/file_serving/mount/scripts_spec.rb +69 -0
- data/spec/unit/file_system_spec.rb +22 -0
- data/spec/unit/functions/assert_type_spec.rb +1 -1
- data/spec/unit/functions/empty_spec.rb +10 -0
- data/spec/unit/functions/logging_spec.rb +1 -0
- data/spec/unit/functions/lookup_spec.rb +64 -0
- data/spec/unit/functions/unwrap_spec.rb +8 -0
- data/spec/unit/functions4_spec.rb +2 -2
- data/spec/unit/gettext/config_spec.rb +12 -0
- data/spec/unit/http/service/compiler_spec.rb +131 -0
- data/spec/unit/indirector/catalog/compiler_spec.rb +101 -10
- data/spec/unit/indirector/catalog/rest_spec.rb +8 -0
- data/spec/unit/indirector/facts/facter_spec.rb +95 -0
- data/spec/unit/indirector/indirection_spec.rb +10 -3
- data/spec/unit/indirector/resource/ral_spec.rb +40 -75
- data/spec/unit/interface/action_spec.rb +0 -9
- data/spec/unit/module_spec.rb +15 -1
- data/spec/unit/module_tool/applications/installer_spec.rb +51 -12
- data/spec/unit/network/authstore_spec.rb +0 -15
- data/spec/unit/network/formats_spec.rb +47 -0
- data/spec/unit/network/http/factory_spec.rb +19 -0
- data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -1
- data/spec/unit/parser/templatewrapper_spec.rb +12 -2
- data/spec/unit/pops/parser/parse_containers_spec.rb +0 -11
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +58 -0
- data/spec/unit/pops/serialization/to_stringified_spec.rb +5 -0
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +18 -0
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +18 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +10 -1
- data/spec/unit/provider/package/gem_spec.rb +1 -1
- data/spec/unit/provider/package/nim_spec.rb +42 -0
- data/spec/unit/provider/package/pip2_spec.rb +1 -1
- data/spec/unit/provider/package/pip3_spec.rb +1 -1
- data/spec/unit/provider/package/pip_spec.rb +38 -1
- data/spec/unit/provider/package/pkg_spec.rb +29 -4
- data/spec/unit/provider/package/puppet_gem_spec.rb +1 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
- data/spec/unit/provider/parsedfile_spec.rb +10 -0
- data/spec/unit/provider/service/init_spec.rb +1 -0
- data/spec/unit/provider/service/launchd_spec.rb +11 -0
- data/spec/unit/provider/service/openwrt_spec.rb +3 -1
- data/spec/unit/provider/service/systemd_spec.rb +54 -9
- data/spec/unit/provider/service/windows_spec.rb +202 -0
- data/spec/unit/provider/user/aix_spec.rb +100 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +68 -36
- data/spec/unit/provider/user/useradd_spec.rb +61 -5
- data/spec/unit/provider_spec.rb +4 -4
- data/spec/unit/puppet_spec.rb +12 -4
- data/spec/unit/resource/catalog_spec.rb +1 -1
- data/spec/unit/settings_spec.rb +97 -56
- data/spec/unit/ssl/certificate_request_spec.rb +8 -14
- data/spec/unit/ssl/state_machine_spec.rb +19 -5
- data/spec/unit/transaction/additional_resource_generator_spec.rb +0 -2
- data/spec/unit/transaction_spec.rb +18 -20
- data/spec/unit/type/exec_spec.rb +76 -29
- data/spec/unit/type/file/selinux_spec.rb +3 -3
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/service_spec.rb +86 -188
- data/spec/unit/type/tidy_spec.rb +24 -7
- data/spec/unit/type/user_spec.rb +45 -0
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/logging_spec.rb +2 -0
- data/spec/unit/util/selinux_spec.rb +87 -16
- data/spec/unit/util/windows/sid_spec.rb +41 -0
- data/tasks/generate_cert_fixtures.rake +12 -3
- data/tasks/parallel.rake +3 -3
- metadata +59 -101
- data/ext/README.environment +0 -8
- data/ext/dbfix.sql +0 -132
- data/ext/debian/README.Debian +0 -8
- data/ext/debian/README.source +0 -2
- data/ext/debian/TODO.Debian +0 -1
- data/ext/debian/changelog.erb +0 -1122
- data/ext/debian/compat +0 -1
- data/ext/debian/control +0 -144
- data/ext/debian/copyright +0 -339
- data/ext/debian/docs +0 -1
- data/ext/debian/fileserver.conf +0 -41
- data/ext/debian/puppet-common.dirs +0 -13
- data/ext/debian/puppet-common.install +0 -3
- data/ext/debian/puppet-common.lintian-overrides +0 -5
- data/ext/debian/puppet-common.manpages +0 -28
- data/ext/debian/puppet-common.postinst +0 -35
- data/ext/debian/puppet-common.postrm +0 -33
- data/ext/debian/puppet-el.dirs +0 -1
- data/ext/debian/puppet-el.emacsen-install +0 -25
- data/ext/debian/puppet-el.emacsen-remove +0 -11
- data/ext/debian/puppet-el.emacsen-startup +0 -9
- data/ext/debian/puppet-el.install +0 -1
- data/ext/debian/puppet-testsuite.install +0 -2
- data/ext/debian/puppet-testsuite.lintian-overrides +0 -4
- data/ext/debian/puppet.lintian-overrides +0 -3
- data/ext/debian/puppet.logrotate +0 -20
- data/ext/debian/puppet.postinst +0 -20
- data/ext/debian/puppet.postrm +0 -20
- data/ext/debian/puppet.preinst +0 -20
- data/ext/debian/puppetmaster-common.install +0 -2
- data/ext/debian/puppetmaster-common.manpages +0 -2
- data/ext/debian/puppetmaster-common.postinst +0 -6
- data/ext/debian/puppetmaster-passenger.dirs +0 -4
- data/ext/debian/puppetmaster-passenger.postinst +0 -162
- data/ext/debian/puppetmaster-passenger.postrm +0 -61
- data/ext/debian/puppetmaster.README.debian +0 -17
- data/ext/debian/puppetmaster.default +0 -14
- data/ext/debian/puppetmaster.init +0 -137
- data/ext/debian/puppetmaster.lintian-overrides +0 -3
- data/ext/debian/puppetmaster.postinst +0 -20
- data/ext/debian/puppetmaster.postrm +0 -5
- data/ext/debian/puppetmaster.preinst +0 -22
- data/ext/debian/rules +0 -132
- data/ext/debian/source/format +0 -1
- data/ext/debian/source/options +0 -1
- data/ext/debian/vim-puppet.README.Debian +0 -13
- data/ext/debian/vim-puppet.dirs +0 -5
- data/ext/debian/vim-puppet.yaml +0 -7
- data/ext/debian/watch +0 -2
- data/ext/freebsd/puppetd +0 -26
- data/ext/freebsd/puppetmasterd +0 -26
- data/ext/gentoo/conf.d/puppet +0 -5
- data/ext/gentoo/conf.d/puppetmaster +0 -12
- data/ext/gentoo/init.d/puppet +0 -38
- data/ext/gentoo/init.d/puppetmaster +0 -51
- data/ext/gentoo/puppet/fileserver.conf +0 -41
- data/ext/ips/puppet-agent +0 -44
- data/ext/ips/puppet-master +0 -44
- data/ext/ips/puppet.p5m.erb +0 -12
- data/ext/ips/puppetagent.xml +0 -42
- data/ext/ips/puppetmaster.xml +0 -42
- data/ext/ips/rules +0 -19
- data/ext/ips/transforms +0 -34
- data/ext/ldap/puppet.schema +0 -24
- data/ext/logcheck/puppet +0 -23
- data/ext/osx/file_mapping.yaml +0 -33
- data/ext/osx/postflight.erb +0 -109
- data/ext/osx/preflight.erb +0 -52
- data/ext/osx/prototype.plist.erb +0 -38
- data/ext/redhat/fileserver.conf +0 -41
- data/ext/redhat/logrotate +0 -21
- data/ext/redhat/puppet.spec.erb +0 -842
- data/ext/redhat/server.init +0 -128
- data/ext/redhat/server.sysconfig +0 -13
- data/ext/solaris/pkginfo +0 -6
- data/ext/solaris/smf/puppetd.xml +0 -77
- data/ext/solaris/smf/puppetmasterd.xml +0 -77
- data/ext/solaris/smf/svc-puppetd +0 -71
- data/ext/solaris/smf/svc-puppetmasterd +0 -67
- data/ext/suse/puppet.spec +0 -310
- data/ext/suse/server.init +0 -173
- data/ext/yaml_nodes.rb +0 -105
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
- data/spec/unit/indirector/store_configs_spec.rb +0 -7
data/lib/puppet/environments.rb
CHANGED
@@ -48,6 +48,13 @@ module Puppet::Environments
|
|
48
48
|
root.instance_variable_set(:@rich_data, nil)
|
49
49
|
end
|
50
50
|
end
|
51
|
+
|
52
|
+
# The base implementation is a noop, because `get` returns a new environment
|
53
|
+
# each time.
|
54
|
+
#
|
55
|
+
# @see Puppet::Environments::Cached#guard
|
56
|
+
def guard(name); end
|
57
|
+
def unguard(name); end
|
51
58
|
end
|
52
59
|
|
53
60
|
# @!macro [new] loader_search_paths
|
@@ -188,7 +195,7 @@ module Puppet::Environments
|
|
188
195
|
|
189
196
|
def self.real_path(dir)
|
190
197
|
if Puppet::FileSystem.symlink?(dir) && Puppet[:versioned_environment_dirs]
|
191
|
-
dir = Puppet::FileSystem.expand_path(Puppet::FileSystem.readlink(dir))
|
198
|
+
dir = Pathname.new Puppet::FileSystem.expand_path(Puppet::FileSystem.readlink(dir))
|
192
199
|
end
|
193
200
|
return dir
|
194
201
|
end
|
@@ -225,6 +232,9 @@ module Puppet::Environments
|
|
225
232
|
private
|
226
233
|
|
227
234
|
def create_environment(name)
|
235
|
+
# interpolated modulepaths may be cached from prior environment instances
|
236
|
+
Puppet.settings.clear_environment_settings(name)
|
237
|
+
|
228
238
|
env_symbol = name.intern
|
229
239
|
setting_values = Puppet.settings.values(env_symbol, Puppet.settings.preferred_run_mode)
|
230
240
|
env = Puppet::Node::Environment.create(
|
@@ -238,7 +248,7 @@ module Puppet::Environments
|
|
238
248
|
|
239
249
|
def validated_directory(envdir)
|
240
250
|
env_name = Puppet::FileSystem.basename_string(envdir)
|
241
|
-
envdir = Puppet::Environments::Directories.real_path(envdir)
|
251
|
+
envdir = Puppet::Environments::Directories.real_path(envdir).to_s
|
242
252
|
if Puppet::FileSystem.directory?(envdir) && Puppet::Node::Environment.valid_name?(env_name)
|
243
253
|
envdir
|
244
254
|
else
|
@@ -327,21 +337,13 @@ module Puppet::Environments
|
|
327
337
|
end
|
328
338
|
|
329
339
|
def self.cache_expiration_service=(service)
|
330
|
-
@
|
340
|
+
@cache_expiration_service_singleton = service
|
331
341
|
end
|
332
342
|
|
333
343
|
def self.cache_expiration_service
|
334
|
-
@
|
344
|
+
@cache_expiration_service_singleton || DefaultCacheExpirationService.new
|
335
345
|
end
|
336
346
|
|
337
|
-
# Returns the end of time (the next Mesoamerican Long Count cycle-end after 2012 (5125+2012) = 7137
|
338
|
-
def self.end_of_time
|
339
|
-
Time.gm(7137)
|
340
|
-
end
|
341
|
-
|
342
|
-
END_OF_TIME = end_of_time
|
343
|
-
START_OF_TIME = Time.gm(1)
|
344
|
-
|
345
347
|
def initialize(loader)
|
346
348
|
@loader = loader
|
347
349
|
@cache_expiration_service = Puppet::Environments::Cached.cache_expiration_service
|
@@ -350,7 +352,29 @@ module Puppet::Environments
|
|
350
352
|
|
351
353
|
# @!macro loader_list
|
352
354
|
def list
|
353
|
-
|
355
|
+
# Evict all that have expired, in the same way as `get`
|
356
|
+
clear_all_expired
|
357
|
+
|
358
|
+
# Evict all that was removed from disk
|
359
|
+
cached_envs = @cache.keys.map!(&:to_sym)
|
360
|
+
loader_envs = @loader.list.map!(&:name)
|
361
|
+
removed_envs = cached_envs - loader_envs
|
362
|
+
|
363
|
+
removed_envs.each do |env_name|
|
364
|
+
Puppet.debug { "Environment no longer exists '#{env_name}'"}
|
365
|
+
clear(env_name)
|
366
|
+
end
|
367
|
+
|
368
|
+
@loader.list.map do |env|
|
369
|
+
name = env.name
|
370
|
+
old_entry = @cache[name]
|
371
|
+
if old_entry
|
372
|
+
old_entry.value
|
373
|
+
else
|
374
|
+
add_entry(name, entry(env))
|
375
|
+
env
|
376
|
+
end
|
377
|
+
end
|
354
378
|
end
|
355
379
|
|
356
380
|
# @!macro loader_search_paths
|
@@ -360,27 +384,35 @@ module Puppet::Environments
|
|
360
384
|
|
361
385
|
# @!macro loader_get
|
362
386
|
def get(name)
|
387
|
+
entry = get_entry(name)
|
388
|
+
entry ? entry.value : nil
|
389
|
+
end
|
390
|
+
|
391
|
+
# Get a cache entry for an envionment. It returns nil if the
|
392
|
+
# environment doesn't exist.
|
393
|
+
def get_entry(name, check_expired = true)
|
363
394
|
# Aggressively evict all that has expired
|
364
395
|
# This strategy favors smaller memory footprint over environment
|
365
396
|
# retrieval time.
|
366
|
-
clear_all_expired
|
367
|
-
|
368
|
-
|
369
|
-
|
397
|
+
clear_all_expired if check_expired
|
398
|
+
name = name.to_sym
|
399
|
+
entry = @cache[name]
|
400
|
+
if entry
|
401
|
+
Puppet.debug {"Found in cache #{name.inspect} #{entry.label}"}
|
370
402
|
# found in cache
|
371
|
-
|
372
|
-
|
373
|
-
elsif (result = @loader.get(name))
|
403
|
+
entry.touch
|
404
|
+
elsif (env = @loader.get(name))
|
374
405
|
# environment loaded, cache it
|
375
|
-
|
376
|
-
add_entry(name,
|
377
|
-
result
|
406
|
+
entry = entry(env)
|
407
|
+
add_entry(name, entry)
|
378
408
|
end
|
409
|
+
entry
|
379
410
|
end
|
411
|
+
private :get_entry
|
380
412
|
|
381
413
|
# Adds a cache entry to the cache
|
382
414
|
def add_entry(name, cache_entry)
|
383
|
-
Puppet.debug {"Caching environment
|
415
|
+
Puppet.debug {"Caching environment #{name.inspect} #{cache_entry.label}"}
|
384
416
|
@cache[name] = cache_entry
|
385
417
|
@cache_expiration_service.created(cache_entry.value)
|
386
418
|
end
|
@@ -388,7 +420,7 @@ module Puppet::Environments
|
|
388
420
|
|
389
421
|
def clear_entry(name, entry)
|
390
422
|
@cache.delete(name)
|
391
|
-
Puppet.debug {"Evicting cache entry for environment
|
423
|
+
Puppet.debug {"Evicting cache entry for environment #{name.inspect}"}
|
392
424
|
@cache_expiration_service.evicted(name.to_sym)
|
393
425
|
Puppet::GettextConfig.delete_text_domain(name)
|
394
426
|
Puppet.settings.clear_environment_settings(name)
|
@@ -398,6 +430,7 @@ module Puppet::Environments
|
|
398
430
|
# Clears the cache of the environment with the given name.
|
399
431
|
# (The intention is that this could be used from a MANUAL cache eviction command (TBD)
|
400
432
|
def clear(name)
|
433
|
+
name = name.to_sym
|
401
434
|
entry = @cache[name]
|
402
435
|
clear_entry(name, entry) if entry
|
403
436
|
end
|
@@ -418,19 +451,21 @@ module Puppet::Environments
|
|
418
451
|
# Clears all environments that have expired, either by exceeding their time to live, or
|
419
452
|
# through an explicit eviction determined by the cache expiration service.
|
420
453
|
#
|
421
|
-
def clear_all_expired
|
454
|
+
def clear_all_expired
|
422
455
|
t = Time.now
|
423
456
|
|
424
457
|
@cache.each_pair do |name, entry|
|
425
458
|
clear_if_expired(name, entry, t)
|
426
459
|
end
|
427
460
|
end
|
461
|
+
private :clear_all_expired
|
428
462
|
|
429
463
|
# Clear an environment if it is expired, either by exceeding its time to live, or
|
430
464
|
# through an explicit eviction determined by the cache expiration service.
|
431
465
|
#
|
432
466
|
def clear_if_expired(name, entry, t = Time.now)
|
433
467
|
return unless entry
|
468
|
+
return if entry.guarded?
|
434
469
|
|
435
470
|
if entry.expired?(t) || @cache_expiration_service.expired?(name.to_sym)
|
436
471
|
clear_entry(name, entry)
|
@@ -447,10 +482,25 @@ module Puppet::Environments
|
|
447
482
|
#
|
448
483
|
# @!macro loader_get_conf
|
449
484
|
def get_conf(name)
|
485
|
+
name = name.to_sym
|
450
486
|
clear_if_expired(name, @cache[name])
|
451
487
|
@loader.get_conf(name)
|
452
488
|
end
|
453
489
|
|
490
|
+
# Guard an environment so it can't be evicted while it's in use. The method
|
491
|
+
# may be called multiple times, provided it is unguarded the same number of
|
492
|
+
# times. If you call this method, you must call `unguard` in an ensure block.
|
493
|
+
def guard(name)
|
494
|
+
entry = get_entry(name, false)
|
495
|
+
entry.guard if entry
|
496
|
+
end
|
497
|
+
|
498
|
+
# Unguard an environment.
|
499
|
+
def unguard(name)
|
500
|
+
entry = get_entry(name, false)
|
501
|
+
entry.unguard if entry
|
502
|
+
end
|
503
|
+
|
454
504
|
# Creates a suitable cache entry given the time to live for one environment
|
455
505
|
#
|
456
506
|
def entry(env)
|
@@ -480,6 +530,7 @@ module Puppet::Environments
|
|
480
530
|
|
481
531
|
def initialize(value)
|
482
532
|
@value = value
|
533
|
+
@guards = 0
|
483
534
|
end
|
484
535
|
|
485
536
|
def touch
|
@@ -492,6 +543,20 @@ module Puppet::Environments
|
|
492
543
|
def label
|
493
544
|
""
|
494
545
|
end
|
546
|
+
|
547
|
+
# These are not protected with a lock, because all of the Cached
|
548
|
+
# methods are protected.
|
549
|
+
def guarded?
|
550
|
+
@guards > 0
|
551
|
+
end
|
552
|
+
|
553
|
+
def guard
|
554
|
+
@guards += 1
|
555
|
+
end
|
556
|
+
|
557
|
+
def unguard
|
558
|
+
@guards -= 1
|
559
|
+
end
|
495
560
|
end
|
496
561
|
|
497
562
|
# Always evicting entry
|
data/lib/puppet/face/facts.rb
CHANGED
@@ -2,28 +2,20 @@ require 'puppet/indirector/face'
|
|
2
2
|
require 'puppet/node/facts'
|
3
3
|
require 'puppet/util/fact_dif'
|
4
4
|
|
5
|
-
EXCLUDE_LIST = %w[facterversion
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
memory\.
|
11
|
-
memory\.
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
ldom_.*
|
20
|
-
boardassettag dmi\.board\.asset_tag
|
21
|
-
blockdevice_.*_vendor blockdevice_.*_size
|
22
|
-
system_uptime\.days system_uptime\.hours system_uptime\.seconds system_uptime\.uptime
|
23
|
-
uptime_days uptime_hours uptime_seconds
|
24
|
-
system_profiler\.uptime
|
25
|
-
sp_uptime
|
26
|
-
uptime]
|
5
|
+
EXCLUDE_LIST = %w[ ^facterversion$
|
6
|
+
^load_averages\..*$
|
7
|
+
^processors\.speed$
|
8
|
+
^swapfree$ ^swapfree_mb$
|
9
|
+
^memoryfree$ ^memoryfree_mb$
|
10
|
+
^memory\.swap\.available_bytes$ ^memory\.swap\.used_bytes$
|
11
|
+
^memory\.swap\.available$ ^memory\.swap\.capacity$ ^memory\.swap\.used$
|
12
|
+
^memory\.system\.available_bytes$ ^memory\.system\.used_bytes$
|
13
|
+
^memory\.system\.available$ ^memory\.system\.capacity$ ^memory\.system\.used$
|
14
|
+
^mountpoints\..*\.available.*$ ^mountpoints\..*\.capacity$ ^mountpoints\..*\.used.*$
|
15
|
+
^sp_uptime$ ^system_profiler\.uptime$
|
16
|
+
^uptime$ ^uptime_days$ ^uptime_hours$ ^uptime_seconds$
|
17
|
+
^system_uptime\.uptime$ ^system_uptime\.days$ ^system_uptime\.hours$ ^system_uptime\.seconds$
|
18
|
+
]
|
27
19
|
|
28
20
|
Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
29
21
|
copyright "Puppet Inc.", 2011
|
@@ -125,26 +117,132 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
125
117
|
$ puppet facts diff
|
126
118
|
EOT
|
127
119
|
|
128
|
-
|
120
|
+
option("--structured") do
|
121
|
+
default_to { false }
|
122
|
+
summary _("Render the different facts as structured.")
|
123
|
+
end
|
124
|
+
|
125
|
+
option("--exclude " + _("<regex>")) do
|
126
|
+
summary _("Regex used to exclude specific facts from diff.")
|
127
|
+
end
|
129
128
|
|
130
129
|
when_invoked do |*args|
|
130
|
+
options = args.pop
|
131
|
+
|
131
132
|
Puppet.settings.preferred_run_mode = :agent
|
132
133
|
Puppet::Node::Facts.indirection.terminus_class = :facter
|
133
134
|
|
134
|
-
if Puppet::Util::Package.versioncmp(
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
135
|
+
if Puppet::Util::Package.versioncmp(Puppet.runtime[:facter].value('facterversion'), '4.0.0') < 0
|
136
|
+
cmd_flags = '--render-as json --show-legacy'
|
137
|
+
|
138
|
+
# puppet/ruby are in PATH since it was updated in the wrapper script
|
139
|
+
puppet_show_cmd = "puppet facts show"
|
140
|
+
if Puppet::Util::Platform.windows?
|
141
|
+
puppet_show_cmd = "ruby -S -- #{puppet_show_cmd}"
|
141
142
|
end
|
142
|
-
|
143
|
+
|
144
|
+
facter_3_result = Puppet::Util::Execution.execute("#{puppet_show_cmd} --no-facterng #{cmd_flags}", combine: false)
|
145
|
+
facter_ng_result = Puppet::Util::Execution.execute("#{puppet_show_cmd} --facterng #{cmd_flags}", combine: false)
|
146
|
+
|
147
|
+
exclude_list = options[:exclude].nil? ? EXCLUDE_LIST : EXCLUDE_LIST + [ options[:exclude] ]
|
148
|
+
fact_diff = FactDif.new(facter_3_result, facter_ng_result, exclude_list, options[:structured])
|
143
149
|
fact_diff.difs
|
144
150
|
else
|
145
151
|
Puppet.warning _("Already using Facter 4. To use `puppet facts diff` remove facterng from the .conf file or run `puppet config set facterng false`.")
|
146
152
|
exit 0
|
147
153
|
end
|
148
154
|
end
|
155
|
+
|
156
|
+
when_rendering :console do |result|
|
157
|
+
case result
|
158
|
+
when Array, Hash
|
159
|
+
Puppet::Util::Json.dump(result, :pretty => true)
|
160
|
+
else
|
161
|
+
result
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
action(:show) do
|
167
|
+
summary _("Retrieve current node's facts.")
|
168
|
+
arguments _("[<facts>]")
|
169
|
+
description <<-'EOT'
|
170
|
+
Reads facts from the local system using `facter` terminus.
|
171
|
+
A query can be provided to retrieve just a specific fact or a set of facts.
|
172
|
+
EOT
|
173
|
+
returns "The output of facter with added puppet specific facts."
|
174
|
+
notes <<-'EOT'
|
175
|
+
|
176
|
+
EOT
|
177
|
+
examples <<-'EOT'
|
178
|
+
retrieve facts:
|
179
|
+
|
180
|
+
$ puppet facts show os
|
181
|
+
EOT
|
182
|
+
|
183
|
+
option("--config-file " + _("<path>")) do
|
184
|
+
default_to { nil }
|
185
|
+
summary _("The location of the config file for Facter.")
|
186
|
+
end
|
187
|
+
|
188
|
+
option("--custom-dir " + _("<path>")) do
|
189
|
+
default_to { nil }
|
190
|
+
summary _("The path to a directory that contains custom facts.")
|
191
|
+
end
|
192
|
+
|
193
|
+
option("--external-dir " + _("<path>")) do
|
194
|
+
default_to { nil }
|
195
|
+
summary _("The path to a directory that contains external facts.")
|
196
|
+
end
|
197
|
+
|
198
|
+
option("--no-block") do
|
199
|
+
summary _("Disable fact blocking mechanism.")
|
200
|
+
end
|
201
|
+
|
202
|
+
option("--no-cache") do
|
203
|
+
summary _("Disable fact caching mechanism.")
|
204
|
+
end
|
205
|
+
|
206
|
+
option("--show-legacy") do
|
207
|
+
summary _("Show legacy facts when querying all facts.")
|
208
|
+
end
|
209
|
+
|
210
|
+
option("--value-only") do
|
211
|
+
summary _("Show only the value when the action is called with a single query")
|
212
|
+
end
|
213
|
+
|
214
|
+
when_invoked do |*args|
|
215
|
+
options = args.pop
|
216
|
+
|
217
|
+
Puppet.settings.preferred_run_mode = :agent
|
218
|
+
Puppet::Node::Facts.indirection.terminus_class = :facter
|
219
|
+
|
220
|
+
if options[:value_only] && !args.count.eql?(1)
|
221
|
+
options[:value_only] = nil
|
222
|
+
Puppet.warning("Incorrect use of --value-only argument; it can only be used when querying for a single fact!")
|
223
|
+
end
|
224
|
+
|
225
|
+
options[:user_query] = args
|
226
|
+
options[:resolve_options] = true
|
227
|
+
result = Puppet::Node::Facts.indirection.find(Puppet.settings[:certname], options)
|
228
|
+
|
229
|
+
if options[:value_only]
|
230
|
+
result.values.values.first
|
231
|
+
else
|
232
|
+
result.values
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
when_rendering :console do |result|
|
237
|
+
# VALID_TYPES = [Integer, Float, TrueClass, FalseClass, NilClass, Symbol, String, Array, Hash].freeze
|
238
|
+
# from https://github.com/puppetlabs/facter/blob/4.0.49/lib/facter/custom_facts/util/normalization.rb#L8
|
239
|
+
|
240
|
+
case result
|
241
|
+
when Array, Hash
|
242
|
+
Puppet::Util::Json.dump(result, :pretty => true)
|
243
|
+
else # one of VALID_TYPES above
|
244
|
+
result
|
245
|
+
end
|
246
|
+
end
|
149
247
|
end
|
150
248
|
end
|
@@ -54,6 +54,7 @@ undocumented option
|
|
54
54
|
end
|
55
55
|
unless action.options.empty?
|
56
56
|
action.options.sort.each do |name|
|
57
|
+
next if name == :extra
|
57
58
|
option = action.get_option name -%>
|
58
59
|
<%= " " + option.optparse.join(" | ")[0,(optionroom - 1)].ljust(optionroom) + ' - ' -%>
|
59
60
|
<% if !(option.summary) -%>
|
@@ -49,6 +49,7 @@ undocumented option
|
|
49
49
|
end
|
50
50
|
unless face.options.empty?
|
51
51
|
face.options.sort.each do |name|
|
52
|
+
next if name == :extra
|
52
53
|
option = face.get_option name -%>
|
53
54
|
<%= " " + option.optparse.join(" | ")[0,(optionroom - 1)].ljust(optionroom) + ' - ' -%>
|
54
55
|
<% if !(option.summary) -%>
|
@@ -47,6 +47,17 @@ Puppet::Face.define(:node, '0.0.1') do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
class LoggerIO
|
50
|
+
def debug(message)
|
51
|
+
Puppet.debug(message)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Notice: For Puppet 6.x, the function below does not matter as it
|
55
|
+
# does not have any functionality. But we decided to keep it here
|
56
|
+
# for the ease of merge up to 7.x and having the same code base.
|
57
|
+
def warn(message)
|
58
|
+
Puppet.warning(message) unless message =~ /cadir is currently configured to be inside/
|
59
|
+
end
|
60
|
+
|
50
61
|
def err(message)
|
51
62
|
Puppet.err(message) unless message =~ /^\s*Error:\s*/
|
52
63
|
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# @api private
|
5
|
+
# Default Facter implementation that delegates to Facter API
|
6
|
+
#
|
7
|
+
|
8
|
+
module Puppet
|
9
|
+
class FacterImpl
|
10
|
+
def initialize
|
11
|
+
require 'facter'
|
12
|
+
|
13
|
+
setup_logging
|
14
|
+
end
|
15
|
+
|
16
|
+
def value(fact_name)
|
17
|
+
::Facter.value(fact_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def add(name, &block)
|
21
|
+
::Facter.add(name, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_hash
|
25
|
+
::Facter.to_hash
|
26
|
+
end
|
27
|
+
|
28
|
+
def clear
|
29
|
+
::Facter.clear
|
30
|
+
end
|
31
|
+
|
32
|
+
def reset
|
33
|
+
::Facter.reset
|
34
|
+
end
|
35
|
+
|
36
|
+
def resolve(options)
|
37
|
+
::Facter.resolve(options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def search_external(dirs)
|
41
|
+
::Facter.search_external(dirs)
|
42
|
+
end
|
43
|
+
|
44
|
+
def search(*dirs)
|
45
|
+
::Facter.search(*dirs)
|
46
|
+
end
|
47
|
+
|
48
|
+
def trace(value)
|
49
|
+
::Facter.trace(value) if ::Facter.respond_to? :trace
|
50
|
+
end
|
51
|
+
|
52
|
+
def debugging(value)
|
53
|
+
::Facter.debugging(value) if ::Facter.respond_to?(:debugging)
|
54
|
+
end
|
55
|
+
|
56
|
+
def load_external?
|
57
|
+
::Facter.respond_to?(:load_external)
|
58
|
+
end
|
59
|
+
|
60
|
+
def load_external(value)
|
61
|
+
::Facter.load_external(value) if self.load_external?
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def setup_logging
|
67
|
+
return unless ::Facter.respond_to? :on_message
|
68
|
+
|
69
|
+
::Facter.on_message do |level, message|
|
70
|
+
case level
|
71
|
+
when :trace, :debug
|
72
|
+
level = :debug
|
73
|
+
when :info
|
74
|
+
# Same as Puppet
|
75
|
+
when :warn
|
76
|
+
level = :warning
|
77
|
+
when :error
|
78
|
+
level = :err
|
79
|
+
when :fatal
|
80
|
+
level = :crit
|
81
|
+
else
|
82
|
+
next
|
83
|
+
end
|
84
|
+
|
85
|
+
Puppet::Util::Log.create(
|
86
|
+
{
|
87
|
+
:level => level,
|
88
|
+
:source => 'Facter',
|
89
|
+
:message => message
|
90
|
+
}
|
91
|
+
)
|
92
|
+
nil
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -104,6 +104,8 @@ class Puppet::FileServing::Configuration::Parser
|
|
104
104
|
mount = Mount::Modules.new(name)
|
105
105
|
when "plugins"
|
106
106
|
mount = Mount::Plugins.new(name)
|
107
|
+
when "scripts"
|
108
|
+
mount = Mount::Scripts.new(name)
|
107
109
|
when "tasks"
|
108
110
|
mount = Mount::Tasks.new(name)
|
109
111
|
when "locales"
|
@@ -6,6 +6,7 @@ require 'puppet/file_serving/mount/modules'
|
|
6
6
|
require 'puppet/file_serving/mount/plugins'
|
7
7
|
require 'puppet/file_serving/mount/locales'
|
8
8
|
require 'puppet/file_serving/mount/pluginfacts'
|
9
|
+
require 'puppet/file_serving/mount/scripts'
|
9
10
|
require 'puppet/file_serving/mount/tasks'
|
10
11
|
|
11
12
|
class Puppet::FileServing::Configuration
|
@@ -87,6 +88,8 @@ class Puppet::FileServing::Configuration
|
|
87
88
|
@mounts["locales"].allow('*') if @mounts["locales"].empty?
|
88
89
|
@mounts["pluginfacts"] ||= Mount::PluginFacts.new("pluginfacts")
|
89
90
|
@mounts["pluginfacts"].allow('*') if @mounts["pluginfacts"].empty?
|
91
|
+
@mounts["scripts"] ||= Mount::Scripts.new("scripts")
|
92
|
+
@mounts["scripts"].allow('*') if @mounts["scripts"].empty?
|
90
93
|
@mounts["tasks"] ||= Mount::Tasks.new("tasks")
|
91
94
|
@mounts["tasks"].allow('*') if @mounts["tasks"].empty?
|
92
95
|
end
|
@@ -5,7 +5,7 @@ require 'puppet/file_serving/metadata'
|
|
5
5
|
# Operate recursively on a path, returning a set of file paths.
|
6
6
|
class Puppet::FileServing::Fileset
|
7
7
|
attr_reader :path, :ignore, :links
|
8
|
-
attr_accessor :recurse, :recurselimit, :checksum_type
|
8
|
+
attr_accessor :recurse, :recurselimit, :max_files, :checksum_type
|
9
9
|
|
10
10
|
# Produce a hash of files, with merged so that earlier files
|
11
11
|
# with the same postfix win. E.g., /dir1/subfile beats /dir2/subfile.
|
@@ -40,6 +40,7 @@ class Puppet::FileServing::Fileset
|
|
40
40
|
self.links = :manage
|
41
41
|
@recurse = false
|
42
42
|
@recurselimit = :infinite
|
43
|
+
@max_files = 0
|
43
44
|
|
44
45
|
if options.is_a?(Puppet::Indirector::Request)
|
45
46
|
initialize_from_request(options)
|
@@ -58,6 +59,17 @@ class Puppet::FileServing::Fileset
|
|
58
59
|
# level deep, which Find doesn't do.
|
59
60
|
def files
|
60
61
|
files = perform_recursion
|
62
|
+
soft_max_files = 1000
|
63
|
+
|
64
|
+
# munged_max_files is needed since puppet http handler is keeping negative numbers as strings
|
65
|
+
# https://github.com/puppetlabs/puppet/blob/main/lib/puppet/network/http/handler.rb#L196-L197
|
66
|
+
munged_max_files = max_files == '-1' ? -1 : max_files
|
67
|
+
|
68
|
+
if munged_max_files > 0 && files.size > munged_max_files
|
69
|
+
raise Puppet::Error.new _("The directory '%{path}' contains %{entries} entries, which exceeds the limit of %{munged_max_files} specified by the max_files parameter for this resource. The limit may be increased, but be aware that large number of file resources can result in excessive resource consumption and degraded performance. Consider using an alternate method to manage large directory trees") % { path: path, entries: files.size, munged_max_files: munged_max_files }
|
70
|
+
elsif munged_max_files == 0 && files.size > soft_max_files
|
71
|
+
Puppet.warning _("The directory '%{path}' contains %{entries} entries, which exceeds the default soft limit %{soft_max_files} and may cause excessive resource consumption and degraded performance. To remove this warning set a value for `max_files` parameter or consider using an alternate method to manage large directory trees") % { path: path, entries: files.size, soft_max_files: soft_max_files }
|
72
|
+
end
|
61
73
|
|
62
74
|
# Now strip off the leading path, so each file becomes relative, and remove
|
63
75
|
# any slashes that might end up at the beginning of the path.
|
@@ -96,7 +108,7 @@ class Puppet::FileServing::Fileset
|
|
96
108
|
end
|
97
109
|
|
98
110
|
def initialize_from_request(request)
|
99
|
-
[:links, :ignore, :recurse, :recurselimit, :checksum_type].each do |param|
|
111
|
+
[:links, :ignore, :recurse, :recurselimit, :max_files, :checksum_type].each do |param|
|
100
112
|
if request.options.include?(param) # use 'include?' so the values can be false
|
101
113
|
value = request.options[param]
|
102
114
|
elsif request.options.include?(param.to_s)
|
@@ -3,12 +3,12 @@ require 'puppet/file_serving/mount'
|
|
3
3
|
class Puppet::FileServing::Mount::File < Puppet::FileServing::Mount
|
4
4
|
def self.localmap
|
5
5
|
@localmap ||= {
|
6
|
-
"h" =>
|
6
|
+
"h" => Puppet.runtime[:facter].value("hostname"),
|
7
7
|
"H" => [
|
8
|
-
|
9
|
-
|
8
|
+
Puppet.runtime[:facter].value("hostname"),
|
9
|
+
Puppet.runtime[:facter].value("domain")
|
10
10
|
].join("."),
|
11
|
-
"d" =>
|
11
|
+
"d" => Puppet.runtime[:facter].value("domain")
|
12
12
|
}
|
13
13
|
end
|
14
14
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'puppet/file_serving/mount'
|
2
|
+
|
3
|
+
class Puppet::FileServing::Mount::Scripts < Puppet::FileServing::Mount
|
4
|
+
# Return an instance of the appropriate class.
|
5
|
+
def find(path, request)
|
6
|
+
raise _("No module specified") if path.to_s.empty?
|
7
|
+
module_name, relative_path = path.split("/", 2)
|
8
|
+
mod = request.environment.module(module_name)
|
9
|
+
return nil unless mod
|
10
|
+
|
11
|
+
mod.script(relative_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
def search(path, request)
|
15
|
+
result = find(path, request)
|
16
|
+
if result
|
17
|
+
[result]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def valid?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
@@ -84,7 +84,9 @@ class Puppet::FileSystem::FileImpl
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def read_preserve_line_endings(path)
|
87
|
-
|
87
|
+
default_encoding = Encoding.default_external.name
|
88
|
+
encoding = default_encoding.downcase.start_with?('utf-') ? "bom|#{default_encoding}" : default_encoding
|
89
|
+
read(path, encoding: encoding)
|
88
90
|
end
|
89
91
|
|
90
92
|
def binread(path)
|