puppet 6.15.0-universal-darwin → 6.19.1-universal-darwin
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/Gemfile +4 -2
- data/Gemfile.lock +29 -27
- data/README.md +3 -4
- data/Rakefile +4 -12
- data/lib/puppet.rb +32 -8
- data/lib/puppet/agent.rb +18 -4
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application/agent.rb +23 -8
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/configurer.rb +61 -21
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +119 -39
- data/lib/puppet/environments.rb +51 -10
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +46 -16
- data/lib/puppet/face/facts.rb +1 -1
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/plugin.rb +1 -1
- data/lib/puppet/face/status.rb +1 -1
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_bucket/dipper.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +4 -4
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- 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/filter.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/http.rb +1 -0
- data/lib/puppet/http/client.rb +28 -12
- data/lib/puppet/http/external_client.rb +0 -6
- data/lib/puppet/http/redirector.rb +9 -7
- data/lib/puppet/http/resolver.rb +5 -8
- data/lib/puppet/http/resolver/server_list.rb +18 -36
- data/lib/puppet/http/resolver/settings.rb +4 -4
- data/lib/puppet/http/resolver/srv.rb +5 -5
- data/lib/puppet/http/response.rb +19 -0
- data/lib/puppet/http/service.rb +3 -1
- data/lib/puppet/http/service/compiler.rb +1 -1
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/puppetserver.rb +39 -0
- data/lib/puppet/http/session.rb +5 -4
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/yaml.rb +1 -1
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +1 -1
- data/lib/puppet/indirector/file_metadata/http.rb +28 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/indirector/request.rb +5 -5
- data/lib/puppet/indirector/rest.rb +7 -1
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/network/format_support.rb +2 -2
- 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/api/master/v3/environments.rb +0 -1
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +2 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +1 -0
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +31 -4
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
- data/lib/puppet/parser/compiler.rb +29 -26
- 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 +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- 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/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- data/lib/puppet/pops/validation/checker4_0.rb +29 -15
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +38 -1
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +24 -4
- data/lib/puppet/provider/package/dpkg.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/pip.rb +60 -37
- data/lib/puppet/provider/package/pip2.rb +17 -0
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +9 -1
- data/lib/puppet/provider/package/zypper.rb +62 -1
- data/lib/puppet/provider/service/systemd.rb +21 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +16 -5
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reports/http.rb +7 -3
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +10 -1
- data/lib/puppet/rest/route.rb +2 -2
- data/lib/puppet/runtime.rb +25 -2
- data/lib/puppet/settings.rb +43 -6
- 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 +33 -8
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +19 -14
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +12 -8
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +15 -7
- data/lib/puppet/type/file.rb +40 -15
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +33 -13
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +16 -1
- data/lib/puppet/type/service.rb +59 -8
- data/lib/puppet/type/user.rb +19 -10
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/autoload.rb +10 -25
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/connection.rb +8 -8
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/log/destinations.rb +1 -10
- data/lib/puppet/util/package/version/range.rb +4 -1
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/run_mode.rb +5 -1
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +60 -33
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/user.rb +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +541 -427
- data/man/man5/puppet.conf.5 +84 -19
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- 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 +2 -2
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +4 -4
- 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 +1 -1
- data/man/man8/puppet-status.8 +2 -2
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-enabled.txt → dnf-module-list.txt} +6 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/integration/application/agent_spec.rb +202 -52
- data/spec/integration/application/apply_spec.rb +149 -149
- data/spec/integration/application/config_spec.rb +74 -0
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +70 -21
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +75 -2
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +27 -3
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/http/client_spec.rb +6 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/network/http_pool_spec.rb +73 -0
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +7 -2
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/https.rb +6 -0
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/unit/agent_spec.rb +47 -1
- data/spec/unit/application/agent_spec.rb +7 -8
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +41 -10
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/application_spec.rb +9 -4
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer_spec.rb +86 -37
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/environments_spec.rb +99 -32
- data/spec/unit/face/config_spec.rb +59 -1
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/node_spec.rb +2 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +29 -0
- data/spec/unit/file_system_spec.rb +1 -2
- data/spec/unit/http/client_spec.rb +74 -19
- data/spec/unit/http/external_client_spec.rb +9 -9
- data/spec/unit/http/resolver_spec.rb +24 -5
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +2 -3
- data/spec/unit/http/service/compiler_spec.rb +2 -3
- data/spec/unit/http/service/file_server_spec.rb +2 -3
- data/spec/unit/http/service/puppetserver_spec.rb +82 -0
- data/spec/unit/http/service/report_spec.rb +2 -3
- data/spec/unit/http/service_spec.rb +0 -1
- data/spec/unit/http/session_spec.rb +8 -21
- data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
- data/spec/unit/indirector/json_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- data/spec/unit/indirector/request_spec.rb +5 -5
- data/spec/unit/indirector/rest_spec.rb +14 -1
- data/spec/unit/indirector/status/rest_spec.rb +1 -1
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- data/spec/unit/network/http/connection_spec.rb +552 -190
- data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
- 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 +18 -1
- 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 +71 -1
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +77 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +25 -5
- data/spec/unit/provider/package/dpkg_spec.rb +22 -7
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/pip_spec.rb +42 -16
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +47 -8
- data/spec/unit/provider/package/zypper_spec.rb +98 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +46 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +2 -1
- data/spec/unit/provider/service/redhat_spec.rb +10 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +1 -1
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +87 -19
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/service/windows_spec.rb +50 -14
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +30 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
- data/spec/unit/puppet_spec.rb +33 -0
- data/spec/unit/reports/http_spec.rb +1 -1
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource_spec.rb +3 -3
- data/spec/unit/rest/route_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +182 -22
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +52 -8
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +3 -1
- data/spec/unit/type/file/source_spec.rb +4 -4
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/service_spec.rb +218 -8
- data/spec/unit/type/user_spec.rb +32 -3
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/command_line_spec.rb +11 -6
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/range_spec.rb +22 -1
- data/spec/unit/util/run_mode_spec.rb +6 -6
- 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_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/manpages.rake +5 -35
- metadata +43 -49
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/integration/test/test_helper_spec.rb +0 -31
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/man_spec.rb +0 -31
data/lib/puppet/pops/loaders.rb
CHANGED
@@ -18,18 +18,18 @@ class Loaders
|
|
18
18
|
attr_reader :private_environment_loader
|
19
19
|
attr_reader :environment
|
20
20
|
|
21
|
-
def self.new(environment, for_agent = false)
|
21
|
+
def self.new(environment, for_agent = false, load_from_pcore = true)
|
22
22
|
environment.lock.synchronize do
|
23
23
|
obj = environment.loaders
|
24
24
|
if obj.nil?
|
25
25
|
obj = self.allocate
|
26
|
-
obj.send(:initialize, environment, for_agent)
|
26
|
+
obj.send(:initialize, environment, for_agent, load_from_pcore)
|
27
27
|
end
|
28
28
|
obj
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def initialize(environment, for_agent)
|
32
|
+
def initialize(environment, for_agent, load_from_pcore = true)
|
33
33
|
# Protect against environment havoc
|
34
34
|
raise ArgumentError.new(_("Attempt to redefine already initialized loaders for environment")) unless environment.loaders.nil?
|
35
35
|
environment.loaders = self
|
@@ -51,12 +51,13 @@ class Loaders
|
|
51
51
|
# TODO: loaders need to work when also running in an agent doing catalog application. There is no
|
52
52
|
# concept of environment the same way as when running as a master (except when doing apply).
|
53
53
|
# The creation mechanisms should probably differ between the two.
|
54
|
-
@private_environment_loader =
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
54
|
+
@private_environment_loader =
|
55
|
+
if for_agent
|
56
|
+
@puppet_cache_loader = create_puppet_cache_loader
|
57
|
+
create_environment_loader(environment, @puppet_cache_loader, load_from_pcore)
|
58
|
+
else
|
59
|
+
create_environment_loader(environment, @puppet_system_loader, load_from_pcore)
|
60
|
+
end
|
60
61
|
|
61
62
|
Pcore.init_env(@private_environment_loader)
|
62
63
|
|
@@ -362,7 +363,7 @@ class Loaders
|
|
362
363
|
Loader::ModuleLoaders.cached_loader_from(puppet_system_loader, self)
|
363
364
|
end
|
364
365
|
|
365
|
-
def create_environment_loader(environment, parent_loader)
|
366
|
+
def create_environment_loader(environment, parent_loader, load_from_pcore = true)
|
366
367
|
# This defines where to start parsing/evaluating - the "initial import" (to use 3x terminology)
|
367
368
|
# Is either a reference to a single .pp file, or a directory of manifests. If the environment becomes
|
368
369
|
# a module and can hold functions, types etc. then these are available across all other modules without
|
@@ -387,7 +388,13 @@ class Loaders
|
|
387
388
|
else
|
388
389
|
# Create the 3.x resource type loader
|
389
390
|
static_loader.runtime_3_init
|
390
|
-
|
391
|
+
# Create pcore resource type loader, if applicable
|
392
|
+
pcore_resource_type_loader = if load_from_pcore && env_path
|
393
|
+
Loader::ModuleLoaders.pcore_resource_type_loader_from(parent_loader, self, env_path)
|
394
|
+
else
|
395
|
+
nil
|
396
|
+
end
|
397
|
+
@runtime3_type_loader = add_loader_by_name(Loader::Runtime3TypeLoader.new(parent_loader, self, environment, pcore_resource_type_loader))
|
391
398
|
|
392
399
|
if env_path.nil?
|
393
400
|
# Not a real directory environment, cannot work as a module TODO: Drop when legacy env are dropped?
|
@@ -47,7 +47,7 @@ class EnvironmentContext < Adaptable::Adapter
|
|
47
47
|
file_data = @file_data_cache[path]
|
48
48
|
stat = Puppet::FileSystem.stat(path)
|
49
49
|
unless file_data && file_data.valid?(stat)
|
50
|
-
Puppet.debug
|
50
|
+
Puppet.debug { "File at '#{path}' was changed, reloading" } if file_data
|
51
51
|
content = Puppet::FileSystem.read(path, :encoding => 'utf-8')
|
52
52
|
file_data = FileData.new(path, stat.ino, stat.mtime, stat.size, block_given? ? yield(content) : content)
|
53
53
|
@file_data_cache[path] = file_data
|
@@ -46,6 +46,7 @@ class HieraConfig
|
|
46
46
|
KEY_DATADIR = 'datadir'.freeze
|
47
47
|
KEY_DEFAULT_HIERARCHY = 'default_hierarchy'.freeze
|
48
48
|
KEY_HIERARCHY = 'hierarchy'.freeze
|
49
|
+
KEY_PLAN_HIERARCHY = 'plan_hierarchy'.freeze
|
49
50
|
KEY_LOGGER = 'logger'.freeze
|
50
51
|
KEY_OPTIONS = 'options'.freeze
|
51
52
|
KEY_PATH = 'path'.freeze
|
@@ -580,6 +581,7 @@ class HieraConfigV5 < HieraConfig
|
|
580
581
|
tf.optional(KEY_OPTIONS) => tf.hash_kv(option_name_t, tf.data),
|
581
582
|
}),
|
582
583
|
tf.optional(KEY_HIERARCHY) => hierarchy_t,
|
584
|
+
tf.optional(KEY_PLAN_HIERARCHY) => hierarchy_t,
|
583
585
|
tf.optional(KEY_DEFAULT_HIERARCHY) => hierarchy_t
|
584
586
|
})
|
585
587
|
end
|
@@ -600,7 +602,15 @@ class HieraConfigV5 < HieraConfig
|
|
600
602
|
return data_providers
|
601
603
|
end
|
602
604
|
|
603
|
-
|
605
|
+
compiler = Puppet.lookup(:pal_compiler) { nil }
|
606
|
+
config_key = if compiler.is_a?(Puppet::Pal::ScriptCompiler) && !@config[KEY_PLAN_HIERARCHY].nil?
|
607
|
+
KEY_PLAN_HIERARCHY
|
608
|
+
elsif use_default_hierarchy
|
609
|
+
KEY_DEFAULT_HIERARCHY
|
610
|
+
else
|
611
|
+
KEY_HIERARCHY
|
612
|
+
end
|
613
|
+
@config[config_key].each do |he|
|
604
614
|
name = he[KEY_NAME]
|
605
615
|
if data_providers.include?(name)
|
606
616
|
first_line = find_line_matching(/\s+name:\s+['"]?#{name}(?:[^\w]|$)/)
|
@@ -691,6 +701,9 @@ class HieraConfigV5 < HieraConfig
|
|
691
701
|
defaults = config[KEY_DEFAULTS]
|
692
702
|
validate_defaults(defaults) unless defaults.nil?
|
693
703
|
config[KEY_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
|
704
|
+
if config.include?(KEY_PLAN_HIERARCHY)
|
705
|
+
config[KEY_PLAN_HIERARCHY].each { |he| validate_hierarchy(he, defaults, owner) }
|
706
|
+
end
|
694
707
|
|
695
708
|
if config.include?(KEY_DEFAULT_HIERARCHY)
|
696
709
|
unless owner.is_a?(ModuleDataProvider)
|
@@ -23,13 +23,16 @@ module Puppet::Pops::Types
|
|
23
23
|
#
|
24
24
|
# An `ArgumentError` is raised for all other objects.
|
25
25
|
#
|
26
|
-
# @param
|
26
|
+
# @param my_caller [Object] The calling object to reference in errors
|
27
|
+
# @param obj [Object] The object to produce an `Iterable` for
|
28
|
+
# @param infer_elements [Boolean] Whether or not to recursively infer all elements of obj. Optional
|
29
|
+
#
|
27
30
|
# @return [Iterable,nil] The produced `Iterable`
|
28
31
|
# @raise [ArgumentError] In case an `Iterable` cannot be produced
|
29
32
|
# @api public
|
30
|
-
def self.asserted_iterable(
|
31
|
-
iter = self.on(obj)
|
32
|
-
raise ArgumentError, "#{
|
33
|
+
def self.asserted_iterable(my_caller, obj, infer_elements = false)
|
34
|
+
iter = self.on(obj, nil, infer_elements)
|
35
|
+
raise ArgumentError, "#{my_caller.class}(): wrong argument type (#{obj.class}; is not Iterable." if iter.nil?
|
33
36
|
iter
|
34
37
|
end
|
35
38
|
|
@@ -48,11 +51,14 @@ module Puppet::Pops::Types
|
|
48
51
|
# The value `nil` is returned for all other objects.
|
49
52
|
#
|
50
53
|
# @param o [Object] The object to produce an `Iterable` for
|
51
|
-
# @param element_type [PAnyType] the element type for the iterator. Optional
|
54
|
+
# @param element_type [PAnyType] the element type for the iterator. Optional
|
55
|
+
# @param infer_elements [Boolean] if element_type is nil, whether or not to recursively
|
56
|
+
# infer types for the entire collection. Optional
|
57
|
+
#
|
52
58
|
# @return [Iterable,nil] The produced `Iterable` or `nil` if it couldn't be produced
|
53
59
|
#
|
54
60
|
# @api public
|
55
|
-
def self.on(o, element_type = nil)
|
61
|
+
def self.on(o, element_type = nil, infer_elements = true)
|
56
62
|
case o
|
57
63
|
when IteratorProducer
|
58
64
|
o.iterator
|
@@ -64,7 +70,7 @@ module Puppet::Pops::Types
|
|
64
70
|
if o.empty?
|
65
71
|
Iterator.new(PUnitType::DEFAULT, o.each)
|
66
72
|
else
|
67
|
-
if element_type.nil?
|
73
|
+
if element_type.nil? && infer_elements
|
68
74
|
tc = TypeCalculator.singleton
|
69
75
|
element_type = PVariantType.maybe_create(o.map {|e| tc.infer_set(e) })
|
70
76
|
end
|
@@ -75,7 +81,7 @@ module Puppet::Pops::Types
|
|
75
81
|
if o.empty?
|
76
82
|
HashIterator.new(PHashType::DEFAULT_KEY_PAIR_TUPLE, o.each)
|
77
83
|
else
|
78
|
-
if element_type.nil?
|
84
|
+
if element_type.nil? && infer_elements
|
79
85
|
tc = TypeCalculator.singleton
|
80
86
|
element_type = PTupleType.new([
|
81
87
|
PVariantType.maybe_create(o.keys.map {|e| tc.infer_set(e) }),
|
@@ -202,6 +208,26 @@ module Puppet::Pops::Types
|
|
202
208
|
@enumeration.send(name, *arguments, &block)
|
203
209
|
end
|
204
210
|
|
211
|
+
def next
|
212
|
+
@enumeration.next
|
213
|
+
end
|
214
|
+
|
215
|
+
def map(*args, &block)
|
216
|
+
@enumeration.map(*args, &block)
|
217
|
+
end
|
218
|
+
|
219
|
+
def reduce(*args, &block)
|
220
|
+
@enumeration.reduce(*args, &block)
|
221
|
+
end
|
222
|
+
|
223
|
+
def all?(&block)
|
224
|
+
@enumeration.all?(&block)
|
225
|
+
end
|
226
|
+
|
227
|
+
def any?(&block)
|
228
|
+
@enumeration.any?(&block)
|
229
|
+
end
|
230
|
+
|
205
231
|
def step(step, &block)
|
206
232
|
raise ArgumentError if step <= 0
|
207
233
|
r = self
|
@@ -22,7 +22,7 @@ class PMetaType < PAnyType
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def instance?(o, guard = nil)
|
25
|
-
|
25
|
+
raise NotImplementedError, "Subclass of PMetaType should implement 'instance?'"
|
26
26
|
end
|
27
27
|
|
28
28
|
# Called from the TypeParser once it has found a type using the Loader. The TypeParser will
|
@@ -349,6 +349,10 @@ class PTypeSetType < PMetaType
|
|
349
349
|
self.class == o.class && @name_authority == o.name_authority && @name == o.name && @version == o.version
|
350
350
|
end
|
351
351
|
|
352
|
+
def instance?(o, guard = nil)
|
353
|
+
o.is_a?(PTypeSetType)
|
354
|
+
end
|
355
|
+
|
352
356
|
DEFAULT = self.new({
|
353
357
|
KEY_NAME => 'DefaultTypeSet',
|
354
358
|
KEY_NAME_AUTHORITY => Pcore::RUNTIME_NAME_AUTHORITY,
|
@@ -199,6 +199,11 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
def check_Application(o)
|
203
|
+
check_NamedDefinition(o)
|
204
|
+
acceptor.accept(Issues::DEPRECATED_APP_ORCHESTRATION, o, {:klass => o})
|
205
|
+
end
|
206
|
+
|
202
207
|
def check_AssignmentExpression(o)
|
203
208
|
case o.operator
|
204
209
|
when '='
|
@@ -296,6 +301,7 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
296
301
|
end
|
297
302
|
|
298
303
|
def check_CapabilityMapping(o)
|
304
|
+
acceptor.accept(Issues::DEPRECATED_APP_ORCHESTRATION, o, {:klass => o})
|
299
305
|
ok =
|
300
306
|
case o.component
|
301
307
|
when Model::QualifiedReference
|
@@ -589,36 +595,40 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
589
595
|
# @api private
|
590
596
|
class Puppet::Util::FileNamespaceAdapter < Puppet::Pops::Adaptable::Adapter
|
591
597
|
attr_accessor :file_to_namespace
|
598
|
+
|
599
|
+
def self.create_adapter(env)
|
600
|
+
adapter = super(env)
|
601
|
+
adapter.file_to_namespace = {}
|
602
|
+
adapter
|
603
|
+
end
|
592
604
|
end
|
593
605
|
|
594
606
|
def namespace_for_file(file)
|
595
607
|
env = Puppet.lookup(:current_environment)
|
596
608
|
return NO_NAMESPACE if env.nil?
|
597
609
|
|
598
|
-
Puppet::Util::FileNamespaceAdapter.adapt(env)
|
599
|
-
adapter.file_to_namespace ||= {}
|
610
|
+
adapter = Puppet::Util::FileNamespaceAdapter.adapt(env)
|
600
611
|
|
601
|
-
|
602
|
-
|
612
|
+
file_namespace = adapter.file_to_namespace[file]
|
613
|
+
return file_namespace unless file_namespace.nil? # No cache entry, so we do the calculation
|
603
614
|
|
604
|
-
|
615
|
+
path = Pathname.new(file)
|
605
616
|
|
606
|
-
|
617
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if path.extname != ".pp"
|
607
618
|
|
608
|
-
|
619
|
+
path = path.expand_path
|
609
620
|
|
610
|
-
|
621
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if initial_manifest?(path, env.manifest)
|
611
622
|
|
612
|
-
|
613
|
-
|
623
|
+
#All auto-loaded files from modules come from a module search path dir
|
624
|
+
relative_path = get_module_relative_path(path, env.full_modulepath)
|
614
625
|
|
615
|
-
|
626
|
+
return adapter.file_to_namespace[file] = NO_NAMESPACE if relative_path == NO_PATH
|
616
627
|
|
617
|
-
|
618
|
-
|
628
|
+
#If a file comes from a module, but isn't in the right place, always error
|
629
|
+
names = dir_to_names(relative_path)
|
619
630
|
|
620
|
-
|
621
|
-
end
|
631
|
+
return adapter.file_to_namespace[file] = (names == BAD_MODULE_FILE ? BAD_MODULE_FILE : names.join("::").freeze)
|
622
632
|
end
|
623
633
|
|
624
634
|
def initial_manifest?(path, manifest_setting)
|
@@ -865,6 +875,10 @@ class Checker4_0 < Evaluator::LiteralEvaluator
|
|
865
875
|
rvalue(o.matching_expr)
|
866
876
|
end
|
867
877
|
|
878
|
+
def check_SiteDefinition(o)
|
879
|
+
acceptor.accept(Issues::DEPRECATED_APP_ORCHESTRATION, o, {:klass => o})
|
880
|
+
end
|
881
|
+
|
868
882
|
def check_UnaryExpression(o)
|
869
883
|
rvalue(o.expr)
|
870
884
|
end
|
@@ -31,6 +31,7 @@ class ValidatorFactory_4_0 < Factory
|
|
31
31
|
p[Issues::RT_NO_STORECONFIGS] = Puppet[:storeconfigs] ? :ignore : :warning
|
32
32
|
|
33
33
|
p[Issues::FUTURE_RESERVED_WORD] = :deprecation
|
34
|
+
p[Issues::DEPRECATED_APP_ORCHESTRATION] = :deprecation
|
34
35
|
|
35
36
|
p[Issues::DUPLICATE_KEY] = Puppet[:strict] == :off ? :ignore : Puppet[:strict]
|
36
37
|
p[Issues::NAME_WITH_HYPHEN] = :error
|
@@ -126,7 +126,7 @@ Puppet::Type.type(:file).provide :windows do
|
|
126
126
|
# If the SYSTEM account does _not_ have FullControl in this scenario, we should
|
127
127
|
# force the resource out of sync no matter what.
|
128
128
|
#TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
|
129
|
-
Puppet.debug _("%{resource_name}: %{mode_part_type} set to SYSTEM. SYSTEM permissions cannot be set below FullControl ('7')") % { resource_name: resource[:name], mode_part_type: mode_part['type']}
|
129
|
+
Puppet.debug { _("%{resource_name}: %{mode_part_type} set to SYSTEM. SYSTEM permissions cannot be set below FullControl ('7')") % { resource_name: resource[:name], mode_part_type: mode_part['type']} }
|
130
130
|
return nil
|
131
131
|
end
|
132
132
|
end
|
@@ -29,6 +29,15 @@ Puppet::Type.type(:package).provide :aix, :parent => Puppet::Provider::Package d
|
|
29
29
|
|
30
30
|
attr_accessor :latest_info
|
31
31
|
|
32
|
+
STATE_CODE = {
|
33
|
+
'A' => :applied,
|
34
|
+
'B' => :broken,
|
35
|
+
'C' => :committed,
|
36
|
+
'E' => :efix_locked,
|
37
|
+
'O' => :obsolete,
|
38
|
+
'?' => :inconsistent,
|
39
|
+
}.freeze
|
40
|
+
|
32
41
|
def self.srclistcmd(source)
|
33
42
|
[ command(:installp), "-L", "-d", source ]
|
34
43
|
end
|
@@ -97,6 +106,11 @@ Puppet::Type.type(:package).provide :aix, :parent => Puppet::Provider::Package d
|
|
97
106
|
if output =~ /^#{Regexp.escape(@resource[:name])}\s+.*\s+Already superseded by.*$/
|
98
107
|
self.fail _("aix package provider is unable to downgrade packages")
|
99
108
|
end
|
109
|
+
|
110
|
+
pkg_info = query
|
111
|
+
if pkg_info && [:broken, :inconsistent].include?(pkg_info[:status])
|
112
|
+
self.fail _("Package '%{name}' is in a %{status} state and requires manual intervention") % { name: @resource[:name], status: pkg_info[:status] }
|
113
|
+
end
|
100
114
|
end
|
101
115
|
|
102
116
|
def self.pkglist(hash = {})
|
@@ -108,8 +122,9 @@ Puppet::Type.type(:package).provide :aix, :parent => Puppet::Provider::Package d
|
|
108
122
|
end
|
109
123
|
|
110
124
|
begin
|
111
|
-
list = execute(cmd).scan(/^[^#][^:]*:([^:]*):([^:]*)/).collect { |n,e|
|
112
|
-
|
125
|
+
list = execute(cmd).scan(/^[^#][^:]*:([^:]*):([^:]*):[^:]*:[^:]*:([^:])/).collect { |n,e,s|
|
126
|
+
e = :absent if [:broken, :inconsistent].include?(STATE_CODE[s])
|
127
|
+
{ :name => n, :ensure => e, :status => STATE_CODE[s], :provider => self.name }
|
113
128
|
}
|
114
129
|
rescue Puppet::ExecutionFailure => detail
|
115
130
|
if hash[:pkgname]
|
@@ -16,6 +16,7 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
16
16
|
|
17
17
|
commands :aptget => "/usr/bin/apt-get"
|
18
18
|
commands :aptcache => "/usr/bin/apt-cache"
|
19
|
+
commands :aptmark => "/usr/bin/apt-mark"
|
19
20
|
commands :preseed => "/usr/bin/debconf-set-selections"
|
20
21
|
|
21
22
|
defaultfor :osfamily => :debian
|
@@ -30,6 +31,39 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
30
31
|
false
|
31
32
|
end
|
32
33
|
|
34
|
+
def self.instances
|
35
|
+
packages = super
|
36
|
+
manual_marks = aptmark('showmanual').split("\n")
|
37
|
+
packages.each do |package|
|
38
|
+
package.mark = :manual if manual_marks.include?(package.name)
|
39
|
+
end
|
40
|
+
packages
|
41
|
+
end
|
42
|
+
|
43
|
+
def query
|
44
|
+
hash = super
|
45
|
+
hash[:mark] = :manual if aptmark('showmanual').split("\n").include?(@resource[:name])
|
46
|
+
hash
|
47
|
+
end
|
48
|
+
|
49
|
+
def initialize(value={})
|
50
|
+
super(value)
|
51
|
+
@property_flush = {}
|
52
|
+
end
|
53
|
+
|
54
|
+
def mark=(value)
|
55
|
+
@property_flush[:mark] = value
|
56
|
+
end
|
57
|
+
|
58
|
+
def flush
|
59
|
+
# unless we are removing the package mark it if it hasn't already been marked
|
60
|
+
if @property_flush
|
61
|
+
unless @property_flush[:mark] || [:purge, :absent].include?(resource[:ensure])
|
62
|
+
aptmark('manual', resource[:name])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
33
67
|
# A derivative of DPKG; this is how most people actually manage
|
34
68
|
# Debian boxes, and the only thing that differs is that it can
|
35
69
|
# install packages from remote sites.
|
@@ -77,7 +111,10 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
77
111
|
if should.is_a?(String)
|
78
112
|
begin
|
79
113
|
should_range = VersionRange.parse(should, DebianVersion)
|
80
|
-
|
114
|
+
|
115
|
+
unless should_range.is_a?(VersionRange::Eq)
|
116
|
+
should = best_version(should_range)
|
117
|
+
end
|
81
118
|
rescue VersionRange::ValidationFailure, DebianVersion::ValidationFailure
|
82
119
|
Puppet.debug("Cannot parse #{should} as a debian version range, falling through")
|
83
120
|
end
|
@@ -16,7 +16,7 @@ Puppet::Type.type(:package).provide :aptitude, :parent => :apt, :source => :dpkg
|
|
16
16
|
output = aptitude(*args)
|
17
17
|
|
18
18
|
# Yay, stupid aptitude doesn't throw an error when the package is missing.
|
19
|
-
if args.include?(:install) and output =~ /Couldn't find any package/
|
19
|
+
if args.include?(:install) and output.to_s =~ /Couldn't find any package/
|
20
20
|
raise Puppet::Error.new(
|
21
21
|
_("Could not find package %{name}") % { name: self.name }
|
22
22
|
)
|
@@ -12,7 +12,7 @@ require 'puppet/provider/package'
|
|
12
12
|
|
13
13
|
Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
14
14
|
|
15
|
-
has_feature :installable, :uninstallable, :versionable, :supports_flavors
|
15
|
+
has_feature :installable, :uninstallable, :versionable, :supports_flavors, :disableable
|
16
16
|
#has_feature :upgradeable
|
17
17
|
# it's not (yet) feasible to make this upgradeable since module streams don't
|
18
18
|
# always have matching version types (i.e. idm has streams DL1 and client,
|
@@ -34,10 +34,10 @@ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
|
34
34
|
|
35
35
|
def self.instances
|
36
36
|
packages = []
|
37
|
-
cmd = "#{command(:dnf)} module list
|
37
|
+
cmd = "#{command(:dnf)} module list -d 0 -e #{error_level}"
|
38
38
|
execute(cmd).each_line do |line|
|
39
39
|
# select only lines with actual packages since DNF clutters the output
|
40
|
-
next unless line =~ /\[[
|
40
|
+
next unless line =~ /\[[eix]\][, ]/
|
41
41
|
line.gsub!(/\[d\]/, '') # we don't care about the default flag
|
42
42
|
|
43
43
|
flavor = if line.include?('[i]')
|
@@ -48,7 +48,11 @@ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
|
48
48
|
|
49
49
|
packages << new(
|
50
50
|
name: line.split[0],
|
51
|
-
ensure: line.
|
51
|
+
ensure: if line.include?('[x]')
|
52
|
+
:disabled
|
53
|
+
else
|
54
|
+
line.split[1]
|
55
|
+
end,
|
52
56
|
flavor: flavor,
|
53
57
|
provider: name
|
54
58
|
)
|
@@ -98,6 +102,18 @@ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
|
98
102
|
end
|
99
103
|
end
|
100
104
|
|
105
|
+
# should only get here when @resource[ensure] is :disabled
|
106
|
+
def insync?(is)
|
107
|
+
if resource[:ensure] == :disabled
|
108
|
+
# in sync only if package is already disabled
|
109
|
+
pkg = self.class.instances.find do |package|
|
110
|
+
@resource[:name] == package.name && package.properties[:ensure] == :disabled
|
111
|
+
end
|
112
|
+
return true if pkg
|
113
|
+
end
|
114
|
+
return false
|
115
|
+
end
|
116
|
+
|
101
117
|
def enable(args = @resource[:name])
|
102
118
|
execute([command(:dnf), 'module', 'enable', '-d', '0', '-e', self.class.error_level, '-y', args])
|
103
119
|
end
|
@@ -107,6 +123,10 @@ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
|
107
123
|
reset # reset module to the default stream
|
108
124
|
end
|
109
125
|
|
126
|
+
def disable(args = @resource[:name])
|
127
|
+
execute([command(:dnf), 'module', 'disable', '-d', '0', '-e', self.class.error_level, '-y', args])
|
128
|
+
end
|
129
|
+
|
110
130
|
def reset
|
111
131
|
execute([command(:dnf), 'module', 'reset', '-d', '0', '-e', self.class.error_level, '-y', @resource[:name]])
|
112
132
|
end
|