puppet 6.12.0-x64-mingw32 → 6.17.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -7
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +4 -2
- data/Gemfile.lock +39 -36
- data/README.md +18 -25
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +3 -3
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +26 -17
- data/lib/puppet/application/describe.rb +7 -5
- data/lib/puppet/application/device.rb +2 -2
- data/lib/puppet/application/filebucket.rb +19 -15
- data/lib/puppet/application/plugin.rb +1 -0
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/application/ssl.rb +4 -4
- data/lib/puppet/configurer.rb +65 -69
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +154 -58
- data/lib/puppet/environments.rb +27 -20
- data/lib/puppet/face/facts.rb +8 -5
- data/lib/puppet/face/help.rb +29 -3
- data/lib/puppet/face/module/search.rb +5 -0
- data/lib/puppet/face/plugin.rb +2 -2
- data/lib/puppet/file_serving/http_metadata.rb +14 -2
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +14 -10
- data/lib/puppet/file_system/memory_file.rb +6 -0
- data/lib/puppet/file_system/memory_impl.rb +13 -0
- data/lib/puppet/file_system/uniquefile.rb +12 -16
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +4 -7
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +5 -0
- data/lib/puppet/http/client.rb +293 -73
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +43 -7
- data/lib/puppet/http/resolver.rb +46 -3
- data/lib/puppet/http/resolver/server_list.rb +76 -16
- data/lib/puppet/http/resolver/settings.rb +23 -3
- data/lib/puppet/http/resolver/srv.rb +29 -3
- data/lib/puppet/http/response.rb +87 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +151 -7
- data/lib/puppet/http/service/ca.rb +76 -14
- data/lib/puppet/http/service/compiler.rb +319 -0
- data/lib/puppet/http/service/file_server.rb +206 -0
- data/lib/puppet/http/service/report.rb +49 -23
- data/lib/puppet/http/session.rb +103 -7
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +10 -0
- data/lib/puppet/indirector/catalog/rest.rb +34 -0
- data/lib/puppet/indirector/facts/rest.rb +42 -0
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
- data/lib/puppet/indirector/file_content/http.rb +5 -0
- data/lib/puppet/indirector/file_content/rest.rb +30 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -8
- data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
- data/lib/puppet/indirector/json.rb +1 -1
- data/lib/puppet/indirector/msgpack.rb +1 -1
- data/lib/puppet/indirector/node/rest.rb +24 -0
- data/lib/puppet/indirector/report/rest.rb +19 -0
- data/lib/puppet/indirector/report/yaml.rb +23 -0
- data/lib/puppet/indirector/request.rb +1 -1
- data/lib/puppet/indirector/rest.rb +12 -0
- data/lib/puppet/indirector/status/rest.rb +18 -0
- data/lib/puppet/loaders.rb +6 -0
- data/lib/puppet/metatype/manager.rb +80 -80
- data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
- data/lib/puppet/network/http/base_pool.rb +7 -2
- data/lib/puppet/network/http/compression.rb +7 -0
- data/lib/puppet/network/http/connection.rb +6 -0
- data/lib/puppet/network/http/connection_adapter.rb +184 -0
- data/lib/puppet/network/http/nocache_pool.rb +2 -0
- data/lib/puppet/network/http/pool.rb +13 -6
- data/lib/puppet/network/http_pool.rb +2 -1
- data/lib/puppet/node/environment.rb +11 -1
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +4 -29
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -15
- data/lib/puppet/parser/compiler.rb +43 -33
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
- data/lib/puppet/parser/environment_compiler.rb +4 -1
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/resource.rb +3 -2
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +6 -6
- data/lib/puppet/pops/issues.rb +5 -0
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/parser/evaluating_parser.rb +5 -7
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/type_calculator.rb +24 -0
- data/lib/puppet/pops/validation/checker4_0.rb +11 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
- data/lib/puppet/provider/aix_object.rb +4 -2
- data/lib/puppet/provider/group/aix.rb +1 -0
- data/lib/puppet/provider/group/groupadd.rb +57 -24
- data/lib/puppet/provider/group/windows_adsi.rb +3 -3
- data/lib/puppet/provider/package/aix.rb +17 -2
- data/lib/puppet/provider/package/apt.rb +78 -4
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dnfmodule.rb +69 -15
- data/lib/puppet/provider/package/dpkg.rb +14 -7
- data/lib/puppet/provider/package/fink.rb +20 -3
- data/lib/puppet/provider/package/gem.rb +41 -7
- data/lib/puppet/provider/package/openbsd.rb +13 -1
- data/lib/puppet/provider/package/pacman.rb +2 -5
- data/lib/puppet/provider/package/pip.rb +143 -48
- data/lib/puppet/provider/package/pip3.rb +0 -2
- data/lib/puppet/provider/package/pkg.rb +18 -5
- data/lib/puppet/provider/package/pkgdmg.rb +1 -1
- data/lib/puppet/provider/package/pkgng.rb +16 -4
- data/lib/puppet/provider/package/portage.rb +2 -2
- data/lib/puppet/provider/package/puppet_gem.rb +6 -2
- data/lib/puppet/provider/package/rpm.rb +6 -213
- data/lib/puppet/provider/package/yum.rb +109 -25
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/service/systemd.rb +22 -4
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/useradd.rb +22 -12
- data/lib/puppet/reports/http.rb +15 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource.rb +2 -1
- data/lib/puppet/resource/type.rb +8 -0
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +31 -1
- data/lib/puppet/settings.rb +4 -0
- data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
- data/lib/puppet/ssl.rb +1 -0
- data/lib/puppet/ssl/certificate.rb +2 -1
- data/lib/puppet/ssl/host.rb +4 -4
- data/lib/puppet/ssl/oids.rb +1 -0
- data/lib/puppet/ssl/ssl_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +20 -1
- data/lib/puppet/ssl/state_machine.rb +81 -35
- data/lib/puppet/ssl/verifier_adapter.rb +9 -1
- data/lib/puppet/test/test_helper.rb +15 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +18 -6
- data/lib/puppet/type/file.rb +51 -13
- data/lib/puppet/type/file/checksum.rb +4 -4
- data/lib/puppet/type/file/source.rb +51 -60
- data/lib/puppet/type/group.rb +2 -2
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +55 -8
- data/lib/puppet/type/user.rb +3 -28
- data/lib/puppet/util.rb +39 -15
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/package/version/debian.rb +175 -0
- data/lib/puppet/util/package/version/gem.rb +15 -0
- data/lib/puppet/util/package/version/pip.rb +167 -0
- data/lib/puppet/util/package/version/range.rb +53 -0
- data/lib/puppet/util/package/version/range/eq.rb +14 -0
- data/lib/puppet/util/package/version/range/gt.rb +14 -0
- data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/lt.rb +14 -0
- data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
- data/lib/puppet/util/package/version/range/min_max.rb +21 -0
- data/lib/puppet/util/package/version/range/simple.rb +11 -0
- data/lib/puppet/util/package/version/rpm.rb +73 -0
- data/lib/puppet/util/pidlock.rb +36 -10
- data/lib/puppet/util/platform.rb +5 -0
- data/lib/puppet/util/plist.rb +6 -0
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +2 -2
- data/lib/puppet/util/windows/api_types.rb +45 -32
- data/lib/puppet/util/windows/eventlog.rb +1 -6
- data/lib/puppet/util/windows/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/service.rb +43 -26
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/windows/user.rb +23 -8
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +707 -574
- data/man/man5/puppet.conf.5 +74 -14
- data/man/man8/puppet-agent.8 +7 -7
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +17 -2
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +6 -3
- data/man/man8/puppet-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.8 +1 -1
- data/man/man8/puppet-module.8 +4 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +2 -2
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
- data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
- data/spec/fixtures/ssl/unknown-ca.pem +59 -0
- data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
- data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
- data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
- data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
- data/spec/integration/application/agent_spec.rb +483 -0
- data/spec/integration/application/apply_spec.rb +132 -3
- data/spec/integration/application/filebucket_spec.rb +190 -0
- data/spec/integration/application/plugin_spec.rb +73 -0
- data/spec/integration/configurer_spec.rb +26 -7
- data/spec/integration/defaults_spec.rb +1 -2
- data/spec/integration/http/client_spec.rb +47 -37
- data/spec/integration/indirector/facts/facter_spec.rb +4 -0
- data/spec/integration/indirector/report/yaml.rb +83 -0
- data/spec/integration/module_tool/forge_spec.rb +2 -15
- data/spec/integration/network/http_pool_spec.rb +93 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +1 -1
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/user_spec.rb +40 -5
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +16 -7
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/unit/agent_spec.rb +80 -26
- data/spec/unit/application/agent_spec.rb +9 -5
- data/spec/unit/application/apply_spec.rb +2 -12
- data/spec/unit/application/describe_spec.rb +88 -50
- data/spec/unit/application/device_spec.rb +2 -2
- data/spec/unit/application/filebucket_spec.rb +22 -2
- data/spec/unit/application/resource_spec.rb +2 -2
- data/spec/unit/configurer/fact_handler_spec.rb +4 -8
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +17 -18
- data/spec/unit/context/trusted_information_spec.rb +25 -2
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +25 -2
- data/spec/unit/environments_spec.rb +65 -28
- data/spec/unit/face/facts_spec.rb +24 -20
- data/spec/unit/face/module/search_spec.rb +17 -0
- data/spec/unit/face/plugin_spec.rb +12 -10
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +327 -35
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +34 -2
- data/spec/unit/http/response_spec.rb +75 -0
- data/spec/unit/http/service/ca_spec.rb +53 -11
- data/spec/unit/http/service/compiler_spec.rb +627 -0
- data/spec/unit/http/service/file_server_spec.rb +308 -0
- data/spec/unit/http/service/report_spec.rb +27 -9
- data/spec/unit/http/service_spec.rb +98 -5
- data/spec/unit/http/session_spec.rb +190 -7
- data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
- data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
- data/spec/unit/indirector/facts/rest_spec.rb +79 -24
- data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
- data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
- data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
- data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
- data/spec/unit/indirector/node/rest_spec.rb +57 -2
- data/spec/unit/indirector/report/rest_spec.rb +58 -51
- data/spec/unit/indirector/request_spec.rb +1 -1
- data/spec/unit/indirector/resource/ral_spec.rb +7 -8
- data/spec/unit/indirector/rest_spec.rb +13 -0
- data/spec/unit/indirector/status/rest_spec.rb +43 -2
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
- data/spec/unit/network/http/connection_spec.rb +559 -175
- data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
- data/spec/unit/network/http/pool_spec.rb +89 -11
- data/spec/unit/network/http_pool_spec.rb +63 -57
- data/spec/unit/network/http_spec.rb +1 -1
- data/spec/unit/node/environment_spec.rb +16 -0
- data/spec/unit/node/facts_spec.rb +2 -1
- data/spec/unit/node_spec.rb +7 -4
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/environment_compiler_spec.rb +7 -0
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +1 -1
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
- data/spec/unit/pops/validator/validator_spec.rb +7 -2
- data/spec/unit/provider/aix_object_spec.rb +16 -2
- data/spec/unit/provider/group/groupadd_spec.rb +181 -56
- data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
- data/spec/unit/provider/package/aix_spec.rb +29 -0
- data/spec/unit/provider/package/apt_spec.rb +43 -2
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
- data/spec/unit/provider/package/dpkg_spec.rb +28 -6
- data/spec/unit/provider/package/gem_spec.rb +40 -0
- data/spec/unit/provider/package/openbsd_spec.rb +17 -0
- data/spec/unit/provider/package/pacman_spec.rb +6 -21
- data/spec/unit/provider/package/pip_spec.rb +68 -19
- data/spec/unit/provider/package/pkg_spec.rb +15 -1
- data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
- data/spec/unit/provider/package/pkgng_spec.rb +38 -0
- data/spec/unit/provider/package/portage_spec.rb +5 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
- data/spec/unit/provider/package/rpm_spec.rb +0 -212
- data/spec/unit/provider/package/yum_spec.rb +292 -0
- data/spec/unit/provider/package/zypper_spec.rb +84 -0
- data/spec/unit/provider/service/init_spec.rb +1 -0
- data/spec/unit/provider/service/openbsd_spec.rb +9 -0
- data/spec/unit/provider/service/openwrt_spec.rb +1 -0
- data/spec/unit/provider/service/redhat_spec.rb +9 -0
- data/spec/unit/provider/service/systemd_spec.rb +92 -12
- data/spec/unit/provider/service/windows_spec.rb +22 -14
- data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +43 -24
- data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
- data/spec/unit/puppet_pal_2pec.rb +0 -26
- data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
- data/spec/unit/puppet_spec.rb +47 -0
- data/spec/unit/reports/http_spec.rb +70 -52
- data/spec/unit/resource_spec.rb +3 -3
- data/spec/unit/settings/autosign_setting_spec.rb +1 -1
- data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
- data/spec/unit/ssl/certificate_spec.rb +7 -0
- data/spec/unit/ssl/host_spec.rb +4 -2
- data/spec/unit/ssl/oids_spec.rb +1 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +5 -1
- data/spec/unit/transaction_spec.rb +0 -2
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +89 -38
- data/spec/unit/type/file_spec.rb +122 -96
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +185 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/type_spec.rb +50 -0
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/package/version/debian_spec.rb +83 -0
- data/spec/unit/util/package/version/pip_spec.rb +464 -0
- data/spec/unit/util/package/version/range_spec.rb +175 -0
- data/spec/unit/util/package/version/rpm_spec.rb +121 -0
- data/spec/unit/util/pidlock_spec.rb +112 -42
- data/spec/unit/util/plist_spec.rb +20 -0
- data/spec/unit/util/rpm_compare_spec.rb +196 -0
- data/spec/unit/util/storage_spec.rb +1 -8
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/util_spec.rb +3 -3
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +5 -35
- metadata +73 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -20,6 +20,7 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
|
|
20
20
|
has_feature :install_options
|
21
21
|
has_feature :uninstall_options
|
22
22
|
has_feature :upgradeable
|
23
|
+
has_feature :supports_flavors
|
23
24
|
|
24
25
|
def self.instances
|
25
26
|
packages = []
|
@@ -27,7 +28,7 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
|
|
27
28
|
begin
|
28
29
|
execpipe(listcmd) do |process|
|
29
30
|
# our regex for matching pkg_info output
|
30
|
-
regex = /^(.*)-(\d[^-]*)[-]?(\w*)(.*)$/
|
31
|
+
regex = /^(.*)-(\d[^-]*)[-]?([\w-]*)(.*)$/
|
31
32
|
fields = [:name, :ensure, :flavor ]
|
32
33
|
hash = {}
|
33
34
|
|
@@ -245,4 +246,15 @@ Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Packa
|
|
245
246
|
def purge
|
246
247
|
pkgdelete "-c", "-q", @resource[:name]
|
247
248
|
end
|
249
|
+
|
250
|
+
def flavor
|
251
|
+
@property_hash[:flavor]
|
252
|
+
end
|
253
|
+
|
254
|
+
def flavor=(value)
|
255
|
+
if flavor != @resource.should(:flavor)
|
256
|
+
uninstall
|
257
|
+
install
|
258
|
+
end
|
259
|
+
end
|
248
260
|
end
|
@@ -132,9 +132,6 @@ Puppet::Type.type(:package).provide :pacman, :parent => Puppet::Provider::Packag
|
|
132
132
|
|
133
133
|
# We rescue the main check from Pacman with a check on the AUR using yaourt, if installed
|
134
134
|
def latest
|
135
|
-
# Synchronize the database
|
136
|
-
pacman "-Sy"
|
137
|
-
|
138
135
|
resource_name = @resource[:name]
|
139
136
|
|
140
137
|
# If target is a group, construct the group version
|
@@ -243,7 +240,7 @@ Puppet::Type.type(:package).provide :pacman, :parent => Puppet::Provider::Packag
|
|
243
240
|
else
|
244
241
|
fail _("Source %{source} is not supported by pacman") % { source: source }
|
245
242
|
end
|
246
|
-
pacman "--noconfirm", "--noprogressbar", "-
|
243
|
+
pacman "--noconfirm", "--noprogressbar", "-S"
|
247
244
|
pacman "--noconfirm", "--noprogressbar", "-U", source
|
248
245
|
end
|
249
246
|
|
@@ -255,7 +252,7 @@ Puppet::Type.type(:package).provide :pacman, :parent => Puppet::Provider::Packag
|
|
255
252
|
|
256
253
|
cmd = %w{--noconfirm --needed --noprogressbar}
|
257
254
|
cmd += install_options if @resource[:install_options]
|
258
|
-
cmd << "-
|
255
|
+
cmd << "-S" << resource_name
|
259
256
|
|
260
257
|
if self.class.yaourt?
|
261
258
|
yaourt(*cmd)
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# Puppet package provider for Python's `pip` package management frontend.
|
2
2
|
# <http://pip.pypa.io/>
|
3
3
|
|
4
|
+
require 'puppet/util/package/version/pip'
|
5
|
+
require 'puppet/util/package/version/range'
|
4
6
|
require 'puppet/provider/package_targetable'
|
5
7
|
require 'puppet/util/http_proxy'
|
6
8
|
|
@@ -11,7 +13,10 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
11
13
|
This provider supports the `install_options` attribute, which allows command-line flags to be passed to pip.
|
12
14
|
These options should be specified as an array where each element is either a string or a hash."
|
13
15
|
|
14
|
-
has_feature :installable, :uninstallable, :upgradeable, :versionable, :install_options, :targetable
|
16
|
+
has_feature :installable, :uninstallable, :upgradeable, :versionable, :version_ranges, :install_options, :targetable
|
17
|
+
|
18
|
+
PIP_VERSION = Puppet::Util::Package::Version::Pip
|
19
|
+
PIP_VERSION_RANGE = Puppet::Util::Package::Version::Range
|
15
20
|
|
16
21
|
# Override the specificity method to return 1 if pip is not set as default provider
|
17
22
|
def self.specificity
|
@@ -25,7 +30,6 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
25
30
|
|
26
31
|
# Define the default provider package command name when the provider is targetable.
|
27
32
|
# Required by Puppet::Provider::Package::Targetable::resource_or_provider_command
|
28
|
-
|
29
33
|
def self.provider_command
|
30
34
|
# Ensure pip can upgrade pip, which usually puts pip into a new path /usr/local/bin/pip (compared to /usr/bin/pip)
|
31
35
|
self.cmd.map { |c| which(c) }.find { |c| c != nil }
|
@@ -58,7 +62,6 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
58
62
|
|
59
63
|
# Return an array of structured information about every installed package
|
60
64
|
# that's managed by `pip` or an empty array if `pip` is not available.
|
61
|
-
|
62
65
|
def self.instances(target_command = nil)
|
63
66
|
if target_command
|
64
67
|
command = target_command
|
@@ -72,11 +75,11 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
72
75
|
|
73
76
|
command_options = ['freeze']
|
74
77
|
command_version = self.pip_version(command)
|
75
|
-
if
|
78
|
+
if compare_pip_versions(command_version, '8.1.0') >= 0
|
76
79
|
command_options << '--all'
|
77
80
|
end
|
78
81
|
|
79
|
-
execpipe [command, command_options] do |process|
|
82
|
+
execpipe [quote(command), command_options] do |process|
|
80
83
|
process.collect do |line|
|
81
84
|
pkg = parse(line)
|
82
85
|
next unless pkg
|
@@ -88,7 +91,7 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
88
91
|
# Pip can also upgrade pip, but it's not listed in freeze so need to special case it
|
89
92
|
# Pip list would also show pip installed version, but "pip list" doesn't exist for older versions of pip (E.G v1.0)
|
90
93
|
# Not needed when "pip freeze --all" is available.
|
91
|
-
if
|
94
|
+
if compare_pip_versions(command_version, '8.1.0') == -1
|
92
95
|
packages << new({:ensure => command_version, :name => File.basename(command), :provider => name, :command => command})
|
93
96
|
end
|
94
97
|
|
@@ -105,7 +108,6 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
105
108
|
|
106
109
|
# Return structured information about a particular package or `nil`
|
107
110
|
# if the package is not installed or `pip` itself is not available.
|
108
|
-
|
109
111
|
def query
|
110
112
|
command = resource_or_provider_command
|
111
113
|
self.class.validate_command(command)
|
@@ -116,99 +118,171 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
116
118
|
return nil
|
117
119
|
end
|
118
120
|
|
119
|
-
#
|
120
|
-
# honoring local pip config such as custom repositories.
|
121
|
-
|
121
|
+
# Return latest version available for current package
|
122
122
|
def latest
|
123
123
|
command = resource_or_provider_command
|
124
124
|
self.class.validate_command(command)
|
125
125
|
|
126
126
|
command_version = self.class.pip_version(command)
|
127
|
-
if
|
128
|
-
|
127
|
+
if self.class.compare_pip_versions(command_version, '1.5.4') == -1
|
128
|
+
available_versions_with_old_pip.last
|
129
129
|
else
|
130
|
-
|
130
|
+
available_versions_with_new_pip.last
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
|
-
|
134
|
+
def self.compare_pip_versions(x, y)
|
135
|
+
begin
|
136
|
+
Puppet::Util::Package::Version::Pip.compare(x, y)
|
137
|
+
rescue PIP_VERSION::ValidationFailure => ex
|
138
|
+
Puppet.debug("Cannot compare #{x} and #{y}. #{ex.message} Falling through default comparison mechanism.")
|
139
|
+
Puppet::Util::Package.versioncmp(x, y)
|
140
|
+
end
|
141
|
+
end
|
135
142
|
|
136
|
-
|
143
|
+
# Use pip CLI to look up versions from PyPI repositories,
|
144
|
+
# honoring local pip config such as custom repositories.
|
145
|
+
def available_versions
|
137
146
|
command = resource_or_provider_command
|
138
147
|
self.class.validate_command(command)
|
139
148
|
|
140
|
-
|
149
|
+
command_version = self.class.pip_version(command)
|
150
|
+
if self.class.compare_pip_versions(command_version, '1.5.4') == -1
|
151
|
+
available_versions_with_old_pip
|
152
|
+
else
|
153
|
+
available_versions_with_new_pip
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def available_versions_with_new_pip
|
158
|
+
command = resource_or_provider_command
|
159
|
+
self.class.validate_command(command)
|
160
|
+
|
161
|
+
command_and_options = [self.class.quote(command), 'install', "#{@resource[:name]}==versionplease"]
|
141
162
|
command_and_options << install_options if @resource[:install_options]
|
142
163
|
execpipe command_and_options do |process|
|
143
164
|
process.collect do |line|
|
144
165
|
# PIP OUTPUT: Could not find a version that satisfies the requirement example==versionplease (from versions: 1.2.3, 4.5.6)
|
145
|
-
if line =~ /from versions: /
|
146
|
-
|
147
|
-
|
148
|
-
Puppet::Util::Package.versioncmp(x, y)
|
166
|
+
if line =~ /from versions: (.+)\)/
|
167
|
+
versionList = $1.split(', ').sort do |x,y|
|
168
|
+
self.class.compare_pip_versions(x, y)
|
149
169
|
end
|
150
|
-
return versionList
|
170
|
+
return versionList
|
151
171
|
end
|
152
172
|
end
|
153
|
-
return nil
|
154
173
|
end
|
174
|
+
[]
|
155
175
|
end
|
156
176
|
|
157
|
-
|
158
|
-
|
159
|
-
def latest_with_old_pip
|
177
|
+
def available_versions_with_old_pip
|
160
178
|
command = resource_or_provider_command
|
161
179
|
self.class.validate_command(command)
|
162
180
|
|
163
181
|
Dir.mktmpdir("puppet_pip") do |dir|
|
164
|
-
command_and_options = [command, 'install', "#{@resource[:name]}", '-d', "#{dir}", '-v']
|
182
|
+
command_and_options = [self.class.quote(command), 'install', "#{@resource[:name]}", '-d', "#{dir}", '-v']
|
165
183
|
command_and_options << install_options if @resource[:install_options]
|
166
184
|
execpipe command_and_options do |process|
|
167
185
|
process.collect do |line|
|
168
186
|
# PIP OUTPUT: Using version 0.10.1 (newest of versions: 1.2.3, 4.5.6)
|
169
|
-
if line =~ /Using version
|
170
|
-
|
187
|
+
if line =~ /Using version .+? \(newest of versions: (.+?)\)/
|
188
|
+
versionList = $1.split(', ').sort do |x,y|
|
189
|
+
self.class.compare_pip_versions(x, y)
|
190
|
+
end
|
191
|
+
return versionList
|
171
192
|
end
|
172
193
|
end
|
173
|
-
return nil
|
174
194
|
end
|
195
|
+
return []
|
175
196
|
end
|
176
197
|
end
|
177
198
|
|
178
|
-
#
|
179
|
-
|
180
|
-
|
181
|
-
|
199
|
+
# Finds the most suitable version available in a given range
|
200
|
+
def best_version(should_range)
|
201
|
+
included_available_versions = []
|
202
|
+
available_versions.each do |version|
|
203
|
+
version = PIP_VERSION.parse(version)
|
204
|
+
included_available_versions.push(version) if should_range.include?(version)
|
205
|
+
end
|
182
206
|
|
183
|
-
|
184
|
-
|
185
|
-
|
207
|
+
included_available_versions.sort!
|
208
|
+
return included_available_versions.last unless included_available_versions.empty?
|
209
|
+
|
210
|
+
Puppet.debug("No available version for package #{@resource[:name]} is included in range #{should_range}")
|
211
|
+
should_range
|
212
|
+
end
|
186
213
|
|
214
|
+
def get_install_command_options()
|
215
|
+
should = @resource[:ensure]
|
187
216
|
command_options = %w{install -q}
|
188
|
-
command_options +=
|
217
|
+
command_options += install_options if @resource[:install_options]
|
218
|
+
|
189
219
|
if @resource[:source]
|
190
|
-
if String ===
|
191
|
-
command_options << "#{@resource[:source]}@#{
|
220
|
+
if String === should
|
221
|
+
command_options << "#{@resource[:source]}@#{should}#egg=#{@resource[:name]}"
|
192
222
|
else
|
193
223
|
command_options << "#{@resource[:source]}#egg=#{@resource[:name]}"
|
194
224
|
end
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
225
|
+
|
226
|
+
return command_options
|
227
|
+
end
|
228
|
+
|
229
|
+
if should == :latest
|
230
|
+
command_options << "--upgrade" << @resource[:name]
|
231
|
+
|
232
|
+
return command_options
|
233
|
+
end
|
234
|
+
|
235
|
+
unless String === should
|
236
|
+
command_options << @resource[:name]
|
237
|
+
|
238
|
+
return command_options
|
239
|
+
end
|
240
|
+
|
241
|
+
begin
|
242
|
+
should_range = PIP_VERSION_RANGE.parse(should, PIP_VERSION)
|
243
|
+
rescue PIP_VERSION_RANGE::ValidationFailure, PIP_VERSION::ValidationFailure
|
244
|
+
Puppet.debug("Cannot parse #{should} as a pip version range, falling through.")
|
245
|
+
command_options << "#{@resource[:name]}==#{should}"
|
246
|
+
|
247
|
+
return command_options
|
248
|
+
end
|
249
|
+
|
250
|
+
if should_range.is_a?(PIP_VERSION_RANGE::Eq)
|
251
|
+
command_options << "#{@resource[:name]}==#{should}"
|
252
|
+
|
253
|
+
return command_options
|
254
|
+
end
|
255
|
+
|
256
|
+
should = best_version(should_range)
|
257
|
+
|
258
|
+
if should == should_range
|
259
|
+
# when no suitable version for the given range was found, let pip handle
|
260
|
+
if should.is_a?(PIP_VERSION_RANGE::MinMax)
|
261
|
+
command_options << "#{@resource[:name]} #{should.split.join(',')}"
|
201
262
|
else
|
202
|
-
command_options << @resource[:name]
|
263
|
+
command_options << "#{@resource[:name]} #{should}"
|
203
264
|
end
|
265
|
+
else
|
266
|
+
command_options << "#{@resource[:name]}==#{should}"
|
204
267
|
end
|
205
268
|
|
269
|
+
command_options
|
270
|
+
end
|
271
|
+
|
272
|
+
# Install a package. The ensure parameter may specify installed,
|
273
|
+
# latest, a version number, or, in conjunction with the source
|
274
|
+
# parameter, an SCM revision. In that case, the source parameter
|
275
|
+
# gives the fully-qualified URL to the repository.
|
276
|
+
def install
|
277
|
+
command = resource_or_provider_command
|
278
|
+
self.class.validate_command(command)
|
279
|
+
|
280
|
+
command_options = get_install_command_options
|
206
281
|
execute([command, command_options])
|
207
282
|
end
|
208
283
|
|
209
284
|
# Uninstall a package. Uninstall won't work reliably on Debian/Ubuntu unless this issue gets fixed.
|
210
285
|
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562544
|
211
|
-
|
212
286
|
def uninstall
|
213
287
|
command = resource_or_provider_command
|
214
288
|
self.class.validate_command(command)
|
@@ -226,6 +300,28 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
226
300
|
join_options(@resource[:install_options])
|
227
301
|
end
|
228
302
|
|
303
|
+
def insync?(is)
|
304
|
+
return false unless is && is != :absent
|
305
|
+
begin
|
306
|
+
should = @resource[:ensure]
|
307
|
+
should_range = PIP_VERSION_RANGE.parse(should, PIP_VERSION)
|
308
|
+
rescue PIP_VERSION_RANGE::ValidationFailure, PIP_VERSION::ValidationFailure
|
309
|
+
Puppet.debug("Cannot parse #{should} as a pip version range")
|
310
|
+
return false
|
311
|
+
end
|
312
|
+
|
313
|
+
begin
|
314
|
+
is_version = PIP_VERSION.parse(is)
|
315
|
+
rescue PIP_VERSION::ValidationFailure
|
316
|
+
Puppet.debug("Cannot parse #{is} as a pip version")
|
317
|
+
return false
|
318
|
+
end
|
319
|
+
|
320
|
+
should_range.include?(is_version)
|
321
|
+
end
|
322
|
+
|
323
|
+
# Quoting is required if the path to the pip command contains spaces.
|
324
|
+
# Required for execpipe() but not execute(), as execute() already does this.
|
229
325
|
def self.quote(path)
|
230
326
|
if path.include?(" ")
|
231
327
|
"\"#{path}\""
|
@@ -233,5 +329,4 @@ Puppet::Type.type(:package).provide :pip, :parent => ::Puppet::Provider::Package
|
|
233
329
|
path
|
234
330
|
end
|
235
331
|
end
|
236
|
-
private_class_method :quote
|
237
332
|
end
|
@@ -56,7 +56,7 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
|
|
56
56
|
).merge(
|
57
57
|
case flags[1..1]
|
58
58
|
when 'f'
|
59
|
-
{:
|
59
|
+
{:mark => :hold}
|
60
60
|
when '-'
|
61
61
|
{}
|
62
62
|
else
|
@@ -114,6 +114,10 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
|
|
114
114
|
end).merge({:provider => self.name})
|
115
115
|
end
|
116
116
|
|
117
|
+
def deprecated_hold
|
118
|
+
hold
|
119
|
+
end
|
120
|
+
|
117
121
|
def hold
|
118
122
|
pkg(:freeze, @resource[:name])
|
119
123
|
end
|
@@ -214,8 +218,6 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
|
|
214
218
|
def install(nofail = false)
|
215
219
|
name = @resource[:name]
|
216
220
|
should = @resource[:ensure]
|
217
|
-
# always unhold if explicitly told to install/update
|
218
|
-
self.unhold
|
219
221
|
is = self.query
|
220
222
|
if is[:ensure].to_sym == :absent
|
221
223
|
command = 'install'
|
@@ -230,7 +232,12 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
|
|
230
232
|
unless should.is_a? Symbol
|
231
233
|
name += "@#{should}"
|
232
234
|
end
|
233
|
-
|
235
|
+
self.unhold if self.properties[:mark] == :hold
|
236
|
+
begin
|
237
|
+
r = exec_cmd(command(:pkg), command, *args, name)
|
238
|
+
ensure
|
239
|
+
self.hold if @resource[:mark] == :hold
|
240
|
+
end
|
234
241
|
return r if nofail
|
235
242
|
raise Puppet::Error, _("Unable to update %{package}") % { package: r[:out] } if r[:exit] != 0
|
236
243
|
end
|
@@ -244,7 +251,13 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
|
|
244
251
|
cmd << '-r'
|
245
252
|
end
|
246
253
|
cmd << @resource[:name]
|
247
|
-
|
254
|
+
self.unhold if self.properties[:mark] == :hold
|
255
|
+
begin
|
256
|
+
pkg cmd
|
257
|
+
rescue StandardError, LoadError => e
|
258
|
+
self.hold if self.properties[:mark] == :hold
|
259
|
+
raise e
|
260
|
+
end
|
248
261
|
end
|
249
262
|
|
250
263
|
# update the package to the latest version available
|
@@ -102,7 +102,7 @@ Puppet::Type.type(:package).provide :pkgdmg, :parent => Puppet::Provider::Packag
|
|
102
102
|
if source =~ /\.dmg$/i
|
103
103
|
# If you fix this to use open-uri again, you must update the docs above. -NF
|
104
104
|
File.open(cached_source) do |dmg|
|
105
|
-
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-
|
105
|
+
xml_str = hdiutil "mount", "-plist", "-nobrowse", "-readonly", "-mountrandom", "/tmp", dmg.path
|
106
106
|
hdiutil_info = Puppet::Util::Plist.parse_plist(xml_str)
|
107
107
|
raise Puppet::Error.new(_("No disk entities returned by mount at %{path}") % { path: dmg.path }) unless hdiutil_info.has_key?("system-entities")
|
108
108
|
mounts = hdiutil_info["system-entities"].collect { |entity|
|
@@ -11,6 +11,7 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
11
11
|
|
12
12
|
has_feature :versionable
|
13
13
|
has_feature :upgradeable
|
14
|
+
has_feature :install_options
|
14
15
|
|
15
16
|
def self.get_query
|
16
17
|
pkg(['query', '-a', '%n %v %o'])
|
@@ -31,7 +32,11 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
31
32
|
def self.get_latest_version(origin)
|
32
33
|
latest_version = cached_version_list.lines.find { |l| l =~ /^#{origin} / }
|
33
34
|
if latest_version
|
34
|
-
|
35
|
+
_name, compare, status = latest_version.chomp.split(' ', 3)
|
36
|
+
if ['!', '?'].include?(compare)
|
37
|
+
return nil
|
38
|
+
end
|
39
|
+
latest_version = status.split(' ').last.split(')').first
|
35
40
|
return latest_version
|
36
41
|
end
|
37
42
|
nil
|
@@ -110,13 +115,16 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
110
115
|
end
|
111
116
|
|
112
117
|
if not source # install using default repo logic
|
113
|
-
args = ['install', '-qy'
|
118
|
+
args = ['install', '-qy']
|
114
119
|
elsif source.scheme == 'urn' # install from repo named in URN
|
115
120
|
tag = repo_tag_from_urn(source.to_s)
|
116
|
-
args = ['install', '-qy', '-r', tag
|
121
|
+
args = ['install', '-qy', '-r', tag]
|
117
122
|
else # add package located at URL
|
118
|
-
args = ['add', '-q'
|
123
|
+
args = ['add', '-q']
|
124
|
+
installname = source.to_s
|
119
125
|
end
|
126
|
+
args += install_options if @resource[:install_options]
|
127
|
+
args << installname
|
120
128
|
|
121
129
|
pkg(args)
|
122
130
|
end
|
@@ -158,4 +166,8 @@ Puppet::Type.type(:package).provide :pkgng, :parent => Puppet::Provider::Package
|
|
158
166
|
@property_hash[:origin]
|
159
167
|
end
|
160
168
|
|
169
|
+
def install_options
|
170
|
+
join_options(@resource[:install_options])
|
171
|
+
end
|
172
|
+
|
161
173
|
end
|