puppet 6.13.0-x86-mingw32 → 6.18.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/CODEOWNERS +2 -7
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +36 -32
- data/README.md +17 -24
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +33 -9
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- data/lib/puppet/application/apply.rb +18 -20
- 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/lookup.rb +16 -4
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +58 -57
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- 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 +92 -12
- data/lib/puppet/environments.rb +4 -5
- 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/plugin.rb +2 -2
- data/lib/puppet/feature/base.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 +17 -13
- 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/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/lstrip.rb +4 -4
- data/lib/puppet/functions/reduce.rb +2 -4
- 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 +3 -0
- data/lib/puppet/http/client.rb +263 -73
- 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 +97 -12
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +249 -16
- data/lib/puppet/http/service/file_server.rb +141 -20
- data/lib/puppet/http/service/report.rb +47 -17
- data/lib/puppet/http/session.rb +96 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- 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 +28 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/processor.rb +2 -2
- 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/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/base_pool.rb +7 -2
- 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/pool.rb +8 -5
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +22 -5
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +30 -31
- 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 +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 -9
- 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/evaluator_impl.rb +5 -5
- 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 +24 -15
- 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/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/group/groupadd.rb +9 -4
- 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 +98 -1
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +61 -14
- data/lib/puppet/provider/package/gem.rb +45 -9
- 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/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 +11 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +100 -20
- data/lib/puppet/provider/package/zypper.rb +62 -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 -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 +15 -9
- 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 +3 -1
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- 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/validator/default_validator.rb +1 -1
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +21 -14
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +3 -3
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +21 -8
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +75 -64
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +41 -3
- data/lib/puppet/type/service.rb +59 -8
- data/lib/puppet/type/user.rb +19 -29
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +13 -25
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +1 -10
- 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 +13 -7
- data/lib/puppet/util/platform.rb +5 -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/windows.rb +1 -0
- data/lib/puppet/util/windows/adsi.rb +2 -2
- 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/process.rb +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +5 -4
- 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 +242 -8
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +641 -511
- data/man/man5/puppet.conf.5 +75 -10
- 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 +2 -2
- 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/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/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/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-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 -67
- 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 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
- 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 -67
- data/spec/integration/application/agent_spec.rb +475 -0
- data/spec/integration/application/apply_spec.rb +279 -150
- 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 +239 -0
- 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 +123 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/http/client_spec.rb +47 -37
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/indirector/report/yaml.rb +83 -0
- 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/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- 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/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +127 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +12 -9
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +39 -10
- data/spec/unit/application/filebucket_spec.rb +22 -2
- 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/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +64 -46
- 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/defaults_spec.rb +24 -1
- data/spec/unit/environments_spec.rb +8 -0
- data/spec/unit/face/config_spec.rb +3 -1
- 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/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 +10 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +321 -36
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -3
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -12
- data/spec/unit/http/service/compiler_spec.rb +332 -28
- data/spec/unit/http/service/file_server_spec.rb +100 -12
- data/spec/unit/http/service/report_spec.rb +19 -9
- data/spec/unit/http/service_spec.rb +94 -6
- data/spec/unit/http/session_spec.rb +159 -8
- data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
- 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/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/connection_spec.rb +552 -190
- data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
- data/spec/unit/network/http/pool_spec.rb +59 -13
- 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 +33 -0
- 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/group/groupadd_spec.rb +22 -8
- 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 +107 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
- data/spec/unit/provider/package/gem_spec.rb +40 -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/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 +12 -1
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +243 -1
- data/spec/unit/provider/package/zypper_spec.rb +98 -0
- data/spec/unit/provider/service/init_spec.rb +42 -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 +93 -18
- 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 +85 -3
- data/spec/unit/puppet_pal_2pec.rb +11 -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 +70 -52
- data/spec/unit/reports/store_spec.rb +17 -13
- 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/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 +15 -0
- 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/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/at_fork_spec.rb +3 -2
- 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/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 +102 -54
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- 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 +84 -52
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/faces/plugin_spec.rb +0 -61
- 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 -64
- 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
@@ -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
|
@@ -74,6 +74,14 @@ Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameSe
|
|
74
74
|
cmd
|
75
75
|
end
|
76
76
|
|
77
|
+
def validate_members(members)
|
78
|
+
members.each do |member|
|
79
|
+
member.split(',').each do |user|
|
80
|
+
Etc.getpwnam(user.strip)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
77
85
|
def modifycmd(param, value)
|
78
86
|
if @resource.forcelocal? || @resource[:members]
|
79
87
|
cmd = [command(:localmodify)]
|
@@ -83,6 +91,7 @@ Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameSe
|
|
83
91
|
end
|
84
92
|
|
85
93
|
if param == :members
|
94
|
+
validate_members(value)
|
86
95
|
value = members_to_s(value)
|
87
96
|
purge_members if @resource[:auth_membership] && !members.empty?
|
88
97
|
end
|
@@ -118,10 +127,6 @@ Puppet::Type.type(:group).provide :groupadd, :parent => Puppet::Provider::NameSe
|
|
118
127
|
localmodify('-m', members_to_s(members), @resource.name)
|
119
128
|
end
|
120
129
|
|
121
|
-
def member_valid?(user)
|
122
|
-
!!Etc.getpwnam(user)
|
123
|
-
end
|
124
|
-
|
125
130
|
private
|
126
131
|
|
127
132
|
def findgroup(key, value)
|
@@ -24,7 +24,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
|
|
24
24
|
# since the default array_matching comparison is not commutative
|
25
25
|
|
26
26
|
# dupes automatically weeded out when hashes built
|
27
|
-
current_members = Puppet::Util::Windows::ADSI::Group.name_sid_hash(current)
|
27
|
+
current_members = Puppet::Util::Windows::ADSI::Group.name_sid_hash(current, true)
|
28
28
|
specified_members = Puppet::Util::Windows::ADSI::Group.name_sid_hash(should)
|
29
29
|
|
30
30
|
current_sids = current_members.keys.to_a
|
@@ -52,7 +52,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
|
|
52
52
|
account = sid.account
|
53
53
|
end
|
54
54
|
resource.debug("#{sid.domain}\\#{account} (#{sid.sid})")
|
55
|
-
"#{sid.domain}\\#{account}"
|
55
|
+
sid.domain ? "#{sid.domain}\\#{account}" : account
|
56
56
|
end
|
57
57
|
return users.join(',')
|
58
58
|
end
|
@@ -66,7 +66,7 @@ Puppet::Type.type(:group).provide :windows_adsi do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def members
|
69
|
-
@members ||= Puppet::Util::Windows::ADSI::Group.name_sid_hash(group.members)
|
69
|
+
@members ||= Puppet::Util::Windows::ADSI::Group.name_sid_hash(group.members, true)
|
70
70
|
|
71
71
|
# @members.keys returns an array of SIDs. We need to convert those SIDs into
|
72
72
|
# names so that `puppet resource` prints the right output.
|
@@ -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]
|
@@ -1,7 +1,11 @@
|
|
1
|
+
require 'puppet/util/package/version/range'
|
2
|
+
require 'puppet/util/package/version/debian'
|
3
|
+
|
1
4
|
Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
2
5
|
# Provide sorting functionality
|
3
6
|
include Puppet::Util::Package
|
4
|
-
|
7
|
+
DebianVersion = Puppet::Util::Package::Version::Debian
|
8
|
+
VersionRange = Puppet::Util::Package::Version::Range
|
5
9
|
desc "Package management via `apt-get`.
|
6
10
|
|
7
11
|
This provider supports the `install_options` attribute, which allows command-line flags to be passed to apt-get.
|
@@ -12,6 +16,7 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
12
16
|
|
13
17
|
commands :aptget => "/usr/bin/apt-get"
|
14
18
|
commands :aptcache => "/usr/bin/apt-cache"
|
19
|
+
commands :aptmark => "/usr/bin/apt-mark"
|
15
20
|
commands :preseed => "/usr/bin/debconf-set-selections"
|
16
21
|
|
17
22
|
defaultfor :osfamily => :debian
|
@@ -26,6 +31,39 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
26
31
|
false
|
27
32
|
end
|
28
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
|
+
|
29
67
|
# A derivative of DPKG; this is how most people actually manage
|
30
68
|
# Debian boxes, and the only thing that differs is that it can
|
31
69
|
# install packages from remote sites.
|
@@ -44,12 +82,44 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
44
82
|
end
|
45
83
|
end
|
46
84
|
|
85
|
+
def best_version(should_range)
|
86
|
+
available_versions = SortedSet.new
|
87
|
+
|
88
|
+
output = aptcache :madison, @resource[:name]
|
89
|
+
output.each_line do |line|
|
90
|
+
is = line.split('|')[1].strip
|
91
|
+
begin
|
92
|
+
is_version = DebianVersion.parse(is)
|
93
|
+
available_versions << is_version if should_range.include?(is_version)
|
94
|
+
rescue DebianVersion::ValidationFailure
|
95
|
+
Puppet.debug("Cannot parse #{is} as a debian version")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
return available_versions.to_a.last unless available_versions.empty?
|
100
|
+
|
101
|
+
Puppet.debug("No available version for package #{@resource[:name]} is included in range #{should_range}")
|
102
|
+
should_range
|
103
|
+
end
|
104
|
+
|
47
105
|
# Install a package using 'apt-get'. This function needs to support
|
48
106
|
# installing a specific version.
|
49
107
|
def install
|
50
108
|
self.run_preseed if @resource[:responsefile]
|
51
109
|
should = @resource[:ensure]
|
52
110
|
|
111
|
+
if should.is_a?(String)
|
112
|
+
begin
|
113
|
+
should_range = VersionRange.parse(should, DebianVersion)
|
114
|
+
|
115
|
+
unless should_range.is_a?(VersionRange::Eq)
|
116
|
+
should = best_version(should_range)
|
117
|
+
end
|
118
|
+
rescue VersionRange::ValidationFailure, DebianVersion::ValidationFailure
|
119
|
+
Puppet.debug("Cannot parse #{should} as a debian version range, falling through")
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
53
123
|
checkforcdrom
|
54
124
|
cmd = %w{-q -y}
|
55
125
|
|
@@ -130,4 +200,31 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
130
200
|
def install_options
|
131
201
|
join_options(@resource[:install_options])
|
132
202
|
end
|
203
|
+
|
204
|
+
def insync?(is)
|
205
|
+
# this is called after the generic version matching logic (insync? for the
|
206
|
+
# type), so we only get here if should != is
|
207
|
+
|
208
|
+
return false unless is && is != :absent
|
209
|
+
|
210
|
+
#if 'should' is a range and 'is' a debian version we should check if 'should' includes 'is'
|
211
|
+
should = @resource[:ensure]
|
212
|
+
|
213
|
+
return false unless is.is_a?(String) && should.is_a?(String)
|
214
|
+
|
215
|
+
begin
|
216
|
+
should_range = VersionRange.parse(should, DebianVersion)
|
217
|
+
rescue VersionRange::ValidationFailure, DebianVersion::ValidationFailure
|
218
|
+
Puppet.debug("Cannot parse #{should} as a debian version range")
|
219
|
+
return false
|
220
|
+
end
|
221
|
+
|
222
|
+
begin
|
223
|
+
is_version = DebianVersion.parse(is)
|
224
|
+
rescue DebianVersion::ValidationFailure
|
225
|
+
Puppet.debug("Cannot parse #{is} as a debian version")
|
226
|
+
return false
|
227
|
+
end
|
228
|
+
should_range.include?(is_version)
|
229
|
+
end
|
133
230
|
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,14 +34,26 @@ 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
|
-
|
40
|
-
line
|
39
|
+
# select only lines with actual packages since DNF clutters the output
|
40
|
+
next unless line =~ /\[[eix]\][, ]/
|
41
|
+
line.gsub!(/\[d\]/, '') # we don't care about the default flag
|
42
|
+
|
43
|
+
flavor = if line.include?('[i]')
|
44
|
+
line.split('[i]').first.split.last
|
45
|
+
else
|
46
|
+
:absent
|
47
|
+
end
|
48
|
+
|
41
49
|
packages << new(
|
42
50
|
name: line.split[0],
|
43
|
-
ensure: line.
|
44
|
-
|
51
|
+
ensure: if line.include?('[x]')
|
52
|
+
:disabled
|
53
|
+
else
|
54
|
+
line.split[1]
|
55
|
+
end,
|
56
|
+
flavor: flavor,
|
45
57
|
provider: name
|
46
58
|
)
|
47
59
|
end
|
@@ -55,28 +67,55 @@ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
|
55
67
|
pkg ? pkg.properties : nil
|
56
68
|
end
|
57
69
|
|
58
|
-
def reset
|
59
|
-
execute([command(:dnf), 'module', 'reset', '-d', '0', '-e', self.class.error_level, '-y', @resource[:name]])
|
60
|
-
end
|
61
|
-
|
62
70
|
# to install specific streams and profiles:
|
63
71
|
# $ dnf module install module-name:stream/profile
|
64
72
|
# $ dnf module install perl:5.24/minimal
|
65
73
|
# if unspecified, they will be defaulted (see [d] param in dnf module list output)
|
66
74
|
def install
|
67
|
-
args = @resource[:name]
|
68
75
|
# ensure we start fresh (remove existing stream)
|
69
76
|
uninstall unless [:absent, :purged].include?(@property_hash[:ensure])
|
77
|
+
|
78
|
+
args = @resource[:name].dup
|
70
79
|
case @resource[:ensure]
|
71
80
|
when true, false, Symbol
|
72
81
|
# pass
|
73
82
|
else
|
74
83
|
args << ":#{@resource[:ensure]}"
|
75
84
|
end
|
76
|
-
if @resource[:flavor]
|
77
|
-
|
85
|
+
args << "/#{@resource[:flavor]}" if @resource[:flavor]
|
86
|
+
|
87
|
+
if @resource[:enable_only] == true
|
88
|
+
enable(args)
|
89
|
+
else
|
90
|
+
begin
|
91
|
+
execute([command(:dnf), 'module', 'install', '-d', '0', '-e', self.class.error_level, '-y', args])
|
92
|
+
rescue Puppet::ExecutionFailure => e
|
93
|
+
# module has no default profile and no profile was requested, so just enable the stream
|
94
|
+
# DNF versions prior to 4.2.8 do not need this workaround
|
95
|
+
# see https://bugzilla.redhat.com/show_bug.cgi?id=1669527
|
96
|
+
if @resource[:flavor] == nil && e.message =~ /^missing groups or modules: #{Regexp.quote(@resource[:name])}$/
|
97
|
+
enable(args)
|
98
|
+
else
|
99
|
+
raise
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
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
|
78
113
|
end
|
79
|
-
|
114
|
+
return false
|
115
|
+
end
|
116
|
+
|
117
|
+
def enable(args = @resource[:name])
|
118
|
+
execute([command(:dnf), 'module', 'enable', '-d', '0', '-e', self.class.error_level, '-y', args])
|
80
119
|
end
|
81
120
|
|
82
121
|
def uninstall
|
@@ -84,6 +123,14 @@ Puppet::Type.type(:package).provide :dnfmodule, :parent => :dnf do
|
|
84
123
|
reset # reset module to the default stream
|
85
124
|
end
|
86
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
|
+
|
130
|
+
def reset
|
131
|
+
execute([command(:dnf), 'module', 'reset', '-d', '0', '-e', self.class.error_level, '-y', @resource[:name]])
|
132
|
+
end
|
133
|
+
|
87
134
|
def flavor
|
88
135
|
@property_hash[:flavor]
|
89
136
|
end
|