puppet 6.11.1-x64-mingw32 → 6.16.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 +3 -8
- data/CONTRIBUTING.md +7 -13
- data/Gemfile +1 -0
- data/Gemfile.lock +39 -36
- data/README.md +17 -24
- data/ext/build_defaults.yaml +1 -0
- data/ext/project_data.yaml +1 -1
- data/ext/windows/service/daemon.rb +25 -20
- data/lib/puppet.rb +52 -13
- data/lib/puppet/agent.rb +20 -14
- data/lib/puppet/application/agent.rb +12 -14
- 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/concurrent.rb +2 -0
- data/lib/puppet/concurrent/lock.rb +16 -0
- data/lib/puppet/concurrent/synchronized.rb +15 -0
- data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
- data/lib/puppet/configurer.rb +85 -83
- data/lib/puppet/configurer/plugin_handler.rb +10 -1
- data/lib/puppet/context/trusted_information.rb +14 -8
- data/lib/puppet/daemon.rb +13 -27
- data/lib/puppet/defaults.rb +158 -40
- data/lib/puppet/environments.rb +30 -20
- data/lib/puppet/error.rb +9 -1
- 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 +1 -1
- data/lib/puppet/file_system/file_impl.rb +13 -9
- 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 +4 -0
- data/lib/puppet/file_system/windows.rb +7 -10
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/forge/errors.rb +2 -2
- data/lib/puppet/forge/repository.rb +31 -86
- data/lib/puppet/functions/call.rb +1 -1
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
- data/lib/puppet/functions/filter.rb +1 -0
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/find_template.rb +63 -0
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/functions/reduce.rb +2 -4
- data/lib/puppet/http.rb +7 -0
- data/lib/puppet/http/client.rb +341 -54
- data/lib/puppet/http/errors.rb +2 -0
- data/lib/puppet/http/external_client.rb +90 -0
- data/lib/puppet/http/redirector.rb +34 -0
- data/lib/puppet/http/resolver.rb +57 -1
- data/lib/puppet/http/resolver/server_list.rb +98 -0
- data/lib/puppet/http/resolver/settings.rb +23 -2
- data/lib/puppet/http/resolver/srv.rb +36 -4
- data/lib/puppet/http/response.rb +68 -1
- data/lib/puppet/http/retry_after_handler.rb +39 -0
- data/lib/puppet/http/service.rb +179 -3
- data/lib/puppet/http/service/ca.rb +84 -21
- 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 +66 -0
- data/lib/puppet/http/session.rb +106 -31
- 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 +4 -4
- 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/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/base_pool.rb +19 -1
- 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 +182 -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 +24 -8
- data/lib/puppet/pal/catalog_compiler.rb +5 -0
- data/lib/puppet/pal/pal_impl.rb +9 -29
- data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
- data/lib/puppet/parser/compiler.rb +42 -32
- data/lib/puppet/parser/functions.rb +18 -13
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/filter.rb +1 -0
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
- data/lib/puppet/pops/loaders.rb +7 -5
- data/lib/puppet/pops/lookup/invocation.rb +10 -3
- data/lib/puppet/pops/model/pn_transformer.rb +5 -9
- data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
- data/lib/puppet/pops/serialization/json_path.rb +3 -3
- data/lib/puppet/pops/time/timespan.rb +3 -5
- data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
- data/lib/puppet/pops/types/string_converter.rb +6 -9
- data/lib/puppet/pops/types/type_calculator.rb +30 -10
- data/lib/puppet/pops/types/type_formatter.rb +9 -11
- data/lib/puppet/pops/types/type_parser.rb +3 -3
- data/lib/puppet/pops/validation/checker4_0.rb +1 -1
- data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
- 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/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 +5 -5
- 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 +108 -24
- data/lib/puppet/provider/package/zypper.rb +59 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/service/systemd.rb +23 -5
- data/lib/puppet/provider/user/aix.rb +1 -0
- data/lib/puppet/provider/user/directoryservice.rb +30 -5
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -8
- data/lib/puppet/reports/http.rb +13 -9
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource/type_collection.rb +20 -16
- data/lib/puppet/runtime.rb +32 -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_provider.rb +20 -0
- 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 +7 -1
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/transaction/report.rb +2 -2
- data/lib/puppet/transaction/resource_harness.rb +1 -1
- data/lib/puppet/type.rb +7 -2
- data/lib/puppet/type/file.rb +13 -0
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/file/source.rb +49 -58
- data/lib/puppet/type/group.rb +5 -4
- data/lib/puppet/type/package.rb +102 -10
- data/lib/puppet/type/service.rb +6 -8
- data/lib/puppet/type/user.rb +6 -30
- data/lib/puppet/util.rb +34 -11
- data/lib/puppet/util/at_fork.rb +1 -1
- data/lib/puppet/util/autoload.rb +4 -18
- data/lib/puppet/util/instance_loader.rb +14 -10
- data/lib/puppet/util/log/destinations.rb +2 -11
- data/lib/puppet/util/logging.rb +30 -18
- 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/rpm_compare.rb +193 -0
- data/lib/puppet/util/storage.rb +0 -1
- data/lib/puppet/util/windows/adsi.rb +50 -20
- data/lib/puppet/util/windows/process.rb +15 -14
- data/lib/puppet/util/windows/security.rb +1 -0
- data/lib/puppet/util/windows/sid.rb +3 -3
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +9 -5
- data/locales/puppet.pot +640 -521
- data/man/man5/puppet.conf.5 +88 -9
- data/man/man8/puppet-agent.8 +6 -6
- 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/forge/bacula.json +76 -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 +394 -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/http/client_spec.rb +154 -0
- 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 +51 -0
- data/spec/integration/network/http_pool_spec.rb +76 -20
- data/spec/integration/node/environment_spec.rb +15 -0
- data/spec/integration/util/windows/adsi_spec.rb +6 -1
- data/spec/lib/puppet/test_ca.rb +2 -2
- data/spec/lib/puppet_spec/https.rb +20 -9
- data/spec/lib/puppet_spec/puppetserver.rb +119 -0
- data/spec/shared_contexts/https.rb +29 -0
- data/spec/spec_helper.rb +6 -2
- 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/concurrent/lock_spec.rb +29 -0
- data/spec/unit/configurer/fact_handler_spec.rb +0 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
- data/spec/unit/configurer_spec.rb +400 -406
- data/spec/unit/context/trusted_information_spec.rb +17 -0
- data/spec/unit/daemon_spec.rb +5 -64
- data/spec/unit/defaults_spec.rb +38 -4
- 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_system/uniquefile_spec.rb +11 -0
- data/spec/unit/file_system_spec.rb +26 -2
- data/spec/unit/forge/errors_spec.rb +1 -1
- data/spec/unit/forge/forge_spec.rb +12 -54
- data/spec/unit/forge/module_release_spec.rb +19 -6
- data/spec/unit/forge/repository_spec.rb +63 -157
- data/spec/unit/forge_spec.rb +46 -116
- data/spec/unit/functions/find_template_spec.rb +69 -0
- data/spec/unit/functions/lookup_spec.rb +13 -0
- data/spec/unit/http/client_spec.rb +395 -27
- data/spec/unit/http/external_client_spec.rb +201 -0
- data/spec/unit/http/resolver_spec.rb +81 -12
- data/spec/unit/http/response_spec.rb +69 -0
- data/spec/unit/http/service/ca_spec.rb +100 -7
- 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 +118 -0
- data/spec/unit/http/service_spec.rb +117 -4
- data/spec/unit/http/session_spec.rb +237 -19
- 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 +167 -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/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/network/http/connection_spec.rb +549 -176
- 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/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
- 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 +9 -4
- 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/package_targetable_spec.rb +60 -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/user/directoryservice_spec.rb +41 -0
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +21 -8
- 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/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 +71 -0
- data/spec/unit/ssl/state_machine_spec.rb +99 -13
- data/spec/unit/transaction/persistence_spec.rb +1 -10
- data/spec/unit/transaction/report_spec.rb +4 -0
- data/spec/unit/transaction_spec.rb +45 -1
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file/ensure_spec.rb +1 -2
- data/spec/unit/type/file/source_spec.rb +86 -35
- data/spec/unit/type/package_spec.rb +8 -0
- data/spec/unit/type/service_spec.rb +9 -8
- data/spec/unit/type/user_spec.rb +1 -2
- data/spec/unit/util/at_fork_spec.rb +3 -2
- data/spec/unit/util/autoload_spec.rb +2 -1
- data/spec/unit/util/log/destinations_spec.rb +1 -29
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- 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 +55 -4
- data/spec/unit/util/windows/sid_spec.rb +2 -2
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/generate_cert_fixtures.rake +15 -1
- data/tasks/manpages.rake +6 -35
- metadata +92 -12
- data/COMMITTERS.md +0 -244
- data/spec/integration/faces/plugin_spec.rb +0 -61
- data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -45,8 +45,8 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
|
|
45
45
|
# eventually become this Puppet::Type::Package::ProviderDpkg class.
|
46
46
|
self::DPKG_QUERY_FORMAT_STRING = %Q{'${Status} ${Package} ${Version}\\n'}
|
47
47
|
self::DPKG_QUERY_PROVIDES_FORMAT_STRING = %Q{'${Status} ${Package} ${Version} [${Provides}]\\n'}
|
48
|
-
self::FIELDS_REGEX = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
|
49
|
-
self::FIELDS_REGEX_WITH_PROVIDES = %r{^(\S+) +(\S+) +(\S+) (\S+) (\S*) \[.*\]$}
|
48
|
+
self::FIELDS_REGEX = %r{^'?(\S+) +(\S+) +(\S+) (\S+) (\S*)$}
|
49
|
+
self::FIELDS_REGEX_WITH_PROVIDES = %r{^'?(\S+) +(\S+) +(\S+) (\S+) (\S*) \[.*\]$}
|
50
50
|
self::FIELDS= [:desired, :error, :status, :name, :ensure]
|
51
51
|
|
52
52
|
def self.defaultto_allow_virtual
|
@@ -74,7 +74,7 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
|
|
74
74
|
elsif ['config-files', 'half-installed', 'unpacked', 'half-configured'].include?(hash[:status])
|
75
75
|
hash[:ensure] = :absent
|
76
76
|
end
|
77
|
-
hash[:
|
77
|
+
hash[:mark] = :hold if hash[:desired] == 'hold'
|
78
78
|
else
|
79
79
|
Puppet.debug("Failed to match dpkg-query line #{line.inspect}")
|
80
80
|
end
|
@@ -91,8 +91,6 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
|
|
91
91
|
end
|
92
92
|
args = []
|
93
93
|
|
94
|
-
# We always unhold when installing to remove any prior hold.
|
95
|
-
self.unhold
|
96
94
|
|
97
95
|
if @resource[:configfiles] == :keep
|
98
96
|
args << '--force-confold'
|
@@ -101,7 +99,12 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
|
|
101
99
|
end
|
102
100
|
args << '-i' << file
|
103
101
|
|
104
|
-
|
102
|
+
self.unhold if self.properties[:mark] == :hold
|
103
|
+
begin
|
104
|
+
dpkg(*args)
|
105
|
+
ensure
|
106
|
+
self.hold if @resource[:mark] == :hold
|
107
|
+
end
|
105
108
|
end
|
106
109
|
|
107
110
|
def update
|
@@ -170,10 +173,14 @@ Puppet::Type.type(:package).provide :dpkg, :parent => Puppet::Provider::Package
|
|
170
173
|
dpkg "--purge", @resource[:name]
|
171
174
|
end
|
172
175
|
|
173
|
-
def
|
176
|
+
def deprecated_hold
|
174
177
|
if package_not_installed?
|
175
178
|
self.install
|
176
179
|
end
|
180
|
+
hold
|
181
|
+
end
|
182
|
+
|
183
|
+
def hold
|
177
184
|
Tempfile.open('puppet_dpkg_set_selection') do |tmpfile|
|
178
185
|
tmpfile.write("#{@resource[:name]} hold\n")
|
179
186
|
tmpfile.flush
|
@@ -37,7 +37,12 @@ Puppet::Type.type(:package).provide :fink, :parent => :dpkg, :source => :dpkg do
|
|
37
37
|
|
38
38
|
cmd << :install << str
|
39
39
|
|
40
|
-
|
40
|
+
self.unhold if self.properties[:mark] == :hold
|
41
|
+
begin
|
42
|
+
finkcmd(cmd)
|
43
|
+
ensure
|
44
|
+
self.hold if @resource[:mark] == :hold
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
48
|
# What's the latest package version available?
|
@@ -71,10 +76,22 @@ Puppet::Type.type(:package).provide :fink, :parent => :dpkg, :source => :dpkg do
|
|
71
76
|
end
|
72
77
|
|
73
78
|
def uninstall
|
74
|
-
|
79
|
+
self.unhold if self.properties[:mark] == :hold
|
80
|
+
begin
|
81
|
+
finkcmd "-y", "-q", :remove, @model[:name]
|
82
|
+
rescue StandardError, LoadError => e
|
83
|
+
self.hold if self.properties[:mark] == :hold
|
84
|
+
raise e
|
85
|
+
end
|
75
86
|
end
|
76
87
|
|
77
88
|
def purge
|
78
|
-
|
89
|
+
self.unhold if self.properties[:mark] == :hold
|
90
|
+
begin
|
91
|
+
aptget '-y', '-q', 'remove', '--purge', @resource[:name]
|
92
|
+
rescue StandardError, LoadError => e
|
93
|
+
self.hold if self.properties[:mark] == :hold
|
94
|
+
raise e
|
95
|
+
end
|
79
96
|
end
|
80
97
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'puppet/util/package/version/gem'
|
2
|
+
require 'puppet/util/package/version/range'
|
1
3
|
require 'puppet/provider/package_targetable'
|
2
4
|
require 'uri'
|
3
5
|
|
@@ -15,7 +17,10 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
|
|
15
17
|
These options should be specified as an array where each element is either a
|
16
18
|
string or a hash."
|
17
19
|
|
18
|
-
has_feature :versionable, :install_options, :uninstall_options, :targetable
|
20
|
+
has_feature :versionable, :install_options, :uninstall_options, :targetable, :version_ranges
|
21
|
+
|
22
|
+
GEM_VERSION = Puppet::Util::Package::Version::Gem
|
23
|
+
GEM_VERSION_RANGE = Puppet::Util::Package::Version::Range
|
19
24
|
|
20
25
|
# Override the specificity method to return 1 if gem is not set as default provider
|
21
26
|
def self.specificity
|
@@ -125,16 +130,35 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
|
|
125
130
|
|
126
131
|
def insync?(is)
|
127
132
|
return false unless is && is != :absent
|
133
|
+
is = [is] unless is.is_a? Array
|
134
|
+
should = @resource[:ensure]
|
128
135
|
|
136
|
+
unless should =~ Regexp.union(/,/, Gem::Requirement::PATTERN)
|
137
|
+
begin
|
138
|
+
should_range = GEM_VERSION_RANGE.parse(should, GEM_VERSION)
|
139
|
+
rescue GEM_VERSION_RANGE::ValidationFailure, GEM_VERSION::ValidationFailure
|
140
|
+
Puppet.debug("Cannot parse #{should} as a ruby gem version range")
|
141
|
+
return false
|
142
|
+
end
|
143
|
+
|
144
|
+
return is.any? do |version|
|
145
|
+
begin
|
146
|
+
should_range.include?(GEM_VERSION.parse(version))
|
147
|
+
rescue GEM_VERSION::ValidationFailure
|
148
|
+
Puppet.debug("Cannot parse #{version} as a ruby gem version")
|
149
|
+
false
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
129
154
|
begin
|
130
|
-
|
155
|
+
# Range intersections are not supported by Gem::Requirement, so just split by comma.
|
156
|
+
dependency = Gem::Dependency.new('', should.split(','))
|
131
157
|
rescue ArgumentError
|
132
158
|
# Bad requirements will cause an error during gem command invocation, so just return not in sync
|
133
159
|
return false
|
134
160
|
end
|
135
161
|
|
136
|
-
is = [is] unless is.is_a? Array
|
137
|
-
|
138
162
|
# Check if any version matches the dependency
|
139
163
|
is.any? { |version| dependency.match?('', version) }
|
140
164
|
end
|
@@ -148,12 +172,22 @@ Puppet::Type.type(:package).provide :gem, :parent => Puppet::Provider::Package::
|
|
148
172
|
command = resource_or_provider_command
|
149
173
|
command_options = ["install"]
|
150
174
|
command_options += install_options if resource[:install_options]
|
175
|
+
should = resource[:ensure]
|
176
|
+
|
177
|
+
unless should =~ Regexp.union(/,/, Gem::Requirement::PATTERN)
|
178
|
+
begin
|
179
|
+
should_range = GEM_VERSION_RANGE.parse(should, GEM_VERSION)
|
180
|
+
should = should_range.to_gem_version
|
181
|
+
useversion = true
|
182
|
+
rescue GEM_VERSION_RANGE::ValidationFailure, GEM_VERSION::ValidationFailure
|
183
|
+
Puppet.debug("Cannot parse #{should} as a ruby gem version range. Falling through.")
|
184
|
+
end
|
185
|
+
end
|
151
186
|
|
152
187
|
if Puppet::Util::Platform.windows?
|
153
|
-
|
154
|
-
command_options << "-v" << %Q["#{version}"] if (! resource[:ensure].is_a? Symbol) and useversion
|
188
|
+
command_options << "-v" << %Q["#{should}"] if useversion && !should.is_a?(Symbol)
|
155
189
|
else
|
156
|
-
command_options << "-v" <<
|
190
|
+
command_options << "-v" << should if useversion && !should.is_a?(Symbol)
|
157
191
|
end
|
158
192
|
|
159
193
|
if Puppet::Util::Package.versioncmp(rubygem_version(command), '2.0.0') == -1
|
@@ -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
|