From a96f0386e94b8dae53dd1c3c29f22ba9fee38631 Mon Sep 17 00:00:00 2001 From: Sascha Doering Date: Mon, 8 Feb 2021 16:10:17 +0000 Subject: [PATCH 001/158] Add the possibility to specify the pip version in virtual envs --- manifests/pyvenv.pp | 8 ++- spec/acceptance/pyvenv_spec.rb | 55 +++++++++++--------- spec/classes/python_spec.rb | 62 +++++++++++++++++++++++ spec/type_aliases/venv/pipversion_spec.rb | 58 +++++++++++++++++++++ types/venv/pipversion.pp | 6 +++ 5 files changed, 163 insertions(+), 26 deletions(-) create mode 100644 spec/type_aliases/venv/pipversion_spec.rb create mode 100644 types/venv/pipversion.pp diff --git a/manifests/pyvenv.pp b/manifests/pyvenv.pp index 269cf69c..ca710015 100644 --- a/manifests/pyvenv.pp +++ b/manifests/pyvenv.pp @@ -31,6 +31,7 @@ Stdlib::Filemode $mode = '0755', Array[Stdlib::Absolutepath] $path = ['/bin', '/usr/bin', '/usr/sbin', '/usr/local/bin',], Array $environment = [], + Python::Venv::PipVersion $pip_version = 'latest', ) { include python @@ -78,8 +79,13 @@ $pip_cmd = "${python::exec_prefix}${venv_dir}/bin/pip" + $pip_upgrade = ($pip_version != 'latest') ? { + true => "--upgrade 'pip ${pip_version}'", + false => '--upgrade pip', + } + exec { "python_virtualenv_${venv_dir}": - command => "${virtualenv_cmd} --clear ${system_pkgs_flag} ${venv_dir} && ${pip_cmd} --log ${venv_dir}/pip.log install --upgrade pip && ${pip_cmd} --log ${venv_dir}/pip.log install --upgrade setuptools", + command => "${virtualenv_cmd} --clear ${system_pkgs_flag} ${venv_dir} && ${pip_cmd} --log ${venv_dir}/pip.log install ${pip_upgrade} && ${pip_cmd} --log ${venv_dir}/pip.log install --upgrade setuptools", user => $owner, creates => "${venv_dir}/bin/activate", path => $_path, diff --git a/spec/acceptance/pyvenv_spec.rb b/spec/acceptance/pyvenv_spec.rb index c137d0b9..a6234637 100644 --- a/spec/acceptance/pyvenv_spec.rb +++ b/spec/acceptance/pyvenv_spec.rb @@ -19,11 +19,12 @@ class { 'python': system => true, } python::pyvenv { '/opt/agent/venv': - ensure => 'present', - systempkgs => true, - owner => 'agent', - group => 'agent', - mode => '0755', + ensure => 'present', + systempkgs => true, + owner => 'agent', + group => 'agent', + mode => '0755', + pip_version => '<= 20.3.4', } PUPPET @@ -50,11 +51,12 @@ class { 'python': system => true, } python::pyvenv { '/opt/agent/venv': - ensure => 'present', - systempkgs => true, - owner => 'agent', - group => 'agent', - mode => '0755', + ensure => 'present', + systempkgs => true, + owner => 'agent', + group => 'agent', + mode => '0755', + pip_version => '<= 20.3.4', } python::pip { 'agent' : ensure => 'latest', @@ -89,11 +91,12 @@ class { 'python': system => true, } python::pyvenv { '/opt/agent/venv': - ensure => 'present', - systempkgs => true, - owner => 'agent', - group => 'agent', - mode => '0755', + ensure => 'present', + systempkgs => true, + owner => 'agent', + group => 'agent', + mode => '0755', + pip_version => '<= 20.3.4', } python::pip { 'agent' : virtualenv => '/opt/agent/venv', @@ -125,11 +128,12 @@ class { 'python': system => true, } python::pyvenv { '/opt/agent/venv': - ensure => 'present', - systempkgs => false, - owner => 'agent', - group => 'agent', - mode => '0755', + ensure => 'present', + systempkgs => false, + owner => 'agent', + group => 'agent', + mode => '0755', + pip_version => '<= 20.3.4', } python::pip { 'agent' : virtualenv => '/opt/agent/venv', @@ -161,11 +165,12 @@ class { 'python': system => true, } python::pyvenv { '/opt/agent/venv': - ensure => 'present', - systempkgs => false, - owner => 'agent', - group => 'agent', - mode => '0755', + ensure => 'present', + systempkgs => false, + owner => 'agent', + group => 'agent', + mode => '0755', + pip_version => '<= 20.3.4', } python::pip { 'agent' : ensure => '0.1.2', diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index f8223d2d..bc5af262 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -97,6 +97,68 @@ end end + describe 'with python::python_pyvenvs and pip version defined' do + context 'with two pyenvs' do + let(:params) do + { + python_pyvenvs: { + '/opt/env1' => { + version: '3.8', + pip_version: 'latest' + }, + '/opt/env2' => { + version: '3.8', + pip_version: '<= 20.3.4' + } + } + } + end + + it { is_expected.to compile } + + it { is_expected.to contain_python__pyvenv('/opt/env1').with_ensure('present') } + it { is_expected.to contain_python__pyvenv('/opt/env2').with_ensure('present') } + it { is_expected.to contain_exec('python_virtualenv_/opt/env1') + .with( + command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade pip && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade setuptools', + user: 'root', + creates: '/opt/env1/bin/activate', + path: [ + '/bin', + '/usr/bin', + '/usr/sbin', + '/usr/local/bin' + ], + cwd: '/tmp', + environment: [], + timeout: 600, + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env1\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env1/bin/activate$} + ) + .that_requires('File[/opt/env1]') + } + it { is_expected.to contain_exec('python_virtualenv_/opt/env2') + .with( + command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade setuptools', + user: 'root', + creates: '/opt/env2/bin/activate', + path: [ + '/bin', + '/usr/bin', + '/usr/sbin', + '/usr/local/bin' + ], + cwd: '/tmp', + environment: [], + timeout: 600, + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env2\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env2/bin/activate$} + ) + .that_requires('File[/opt/env2]') + } + it { is_expected.to contain_file('/opt/env1') } + it { is_expected.to contain_file('/opt/env2') } + end + end + describe 'with manage_gunicorn' do context 'true' do let(:params) { { manage_gunicorn: true } } diff --git a/spec/type_aliases/venv/pipversion_spec.rb b/spec/type_aliases/venv/pipversion_spec.rb new file mode 100644 index 00000000..986eeb1e --- /dev/null +++ b/spec/type_aliases/venv/pipversion_spec.rb @@ -0,0 +1,58 @@ +require 'spec_helper' + +describe 'Python::Venv::PipVersion' do + describe 'valid values' do + [ + '< 1', + '< 0.1', + '< 1.2.3', + '< 1.2.3.40', + '<= 1', + '<= 0.1', + '<= 1.2.3', + '<= 1.2.3.40', + '> 1', + '> 0.1', + '> 1.2.3', + '> 1.2.3.40', + '>= 1', + '>= 0.1', + '>= 1.2.3', + '>= 1.2.3.40', + '== 1', + '== 0.1', + '== 1.2.3', + '== 1.2.3.40', + ].each do |value| + describe value.inspect do + it { + is_expected.to allow_value(value) + } + end + end + end + + describe 'invalid values' do + [ + '+ 1', + '- 0.1', + '< -1', + '< 1.+2.3.40', + '<=', + '<= 0.-1', + '<= 1.f.3', + '1.2.3.0', + 'pip > 1', + 'all', + -1, + 65_536, + :undef, + ].each do |value| + describe value.inspect do + it { + is_expected.not_to allow_value(value) + } + end + end + end +end diff --git a/types/venv/pipversion.pp b/types/venv/pipversion.pp new file mode 100644 index 00000000..37584264 --- /dev/null +++ b/types/venv/pipversion.pp @@ -0,0 +1,6 @@ +# @summary A version type to ensure a specific Pip version in a virtual env. +# +type Python::Venv::PipVersion = Pattern[ + /^(<|>|<=|>=|==) [0-9]*(\.[0-9]+)*$/, + /\Alatest\Z/ +] From d0d929f21b0fa12cd0f084830c39a92ccea0f889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuli=20Sepp=C3=A4nen?= Date: Wed, 24 Mar 2021 14:46:09 +0200 Subject: [PATCH 002/158] Support Puppet 7 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 29c1336a..9eaa5fd9 100644 --- a/metadata.json +++ b/metadata.json @@ -57,7 +57,7 @@ "requirements": [ { "name": "puppet", - "version_requirement": ">= 5.5.8 < 7.0.0" + "version_requirement": ">= 5.5.8 < 8.0.0" } ], "dependencies": [ From 91741e0156bd092fb64ffb2656ca25a0c30dce8e Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 2 Apr 2021 11:05:50 +0200 Subject: [PATCH 003/158] Drop Puppet 5 support --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 9eaa5fd9..a4c252b9 100644 --- a/metadata.json +++ b/metadata.json @@ -57,7 +57,7 @@ "requirements": [ { "name": "puppet", - "version_requirement": ">= 5.5.8 < 8.0.0" + "version_requirement": ">= 6.1.0 < 8.0.0" } ], "dependencies": [ From a1602cc7e3148fe13114151ee24aab803e2ed538 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 2 Apr 2021 11:06:32 +0200 Subject: [PATCH 004/158] puppetlabs/stdlib: Allow 7.x --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index a4c252b9..4bcf29bd 100644 --- a/metadata.json +++ b/metadata.json @@ -63,7 +63,7 @@ "dependencies": [ { "name": "puppetlabs/stdlib", - "version_requirement": ">= 4.19.0 < 7.0.0" + "version_requirement": ">= 4.19.0 < 8.0.0" }, { "name": "puppet/epel", From d80a778462ea9fe226d8203a4fdeb101bce0d136 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sat, 3 Apr 2021 15:23:03 +0200 Subject: [PATCH 005/158] release 6.0.0 --- CHANGELOG.md | 59 +++++++++++++++++++++++++++++++++++++++++---------- metadata.json | 2 +- 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index efc7cd54..0db8682b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,43 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v6.0.0](https://github.com/voxpupuli/puppet-python/tree/v6.0.0) (2021-04-03) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v5.0.0...v6.0.0) + +**Breaking changes:** + +- Drop Puppet 5 support [\#603](https://github.com/voxpupuli/puppet-python/pull/603) ([bastelfreak](https://github.com/bastelfreak)) +- Drop python::virtualenv defined resource [\#596](https://github.com/voxpupuli/puppet-python/pull/596) ([bastelfreak](https://github.com/bastelfreak)) +- Set default python to 3 [\#595](https://github.com/voxpupuli/puppet-python/pull/595) ([bastelfreak](https://github.com/bastelfreak)) + +**Implemented enhancements:** + +- Add the possibility to specify the pip version in virtual envs [\#599](https://github.com/voxpupuli/puppet-python/pull/599) ([SaschaDoering](https://github.com/SaschaDoering)) +- Add Support for RedHat/CentOS 8 [\#594](https://github.com/voxpupuli/puppet-python/pull/594) ([treydock](https://github.com/treydock)) +- enhance pyvenv tests [\#590](https://github.com/voxpupuli/puppet-python/pull/590) ([bastelfreak](https://github.com/bastelfreak)) +- Add Debian 10 support [\#573](https://github.com/voxpupuli/puppet-python/pull/573) ([bastelfreak](https://github.com/bastelfreak)) + +**Fixed bugs:** + +- Fix python::virtualenv to allow virtualenv to not require absolute path [\#592](https://github.com/voxpupuli/puppet-python/pull/592) ([treydock](https://github.com/treydock)) +- python::gunicorn: Fix typo in datatype [\#585](https://github.com/voxpupuli/puppet-python/pull/585) ([bastelfreak](https://github.com/bastelfreak)) + +**Closed issues:** + +- Setting Pip Version for Virtual Environments [\#559](https://github.com/voxpupuli/puppet-python/issues/559) +- Can't install this using librarian-puppet [\#406](https://github.com/voxpupuli/puppet-python/issues/406) + +**Merged pull requests:** + +- puppetlabs/stdlib: Allow 7.x [\#604](https://github.com/voxpupuli/puppet-python/pull/604) ([bastelfreak](https://github.com/bastelfreak)) +- Support Puppet 7 [\#602](https://github.com/voxpupuli/puppet-python/pull/602) ([mattock](https://github.com/mattock)) +- Support Ubuntu 20.04 [\#593](https://github.com/voxpupuli/puppet-python/pull/593) ([treydock](https://github.com/treydock)) +- Add pyvenv acceptance test [\#588](https://github.com/voxpupuli/puppet-python/pull/588) ([bastelfreak](https://github.com/bastelfreak)) +- General linting/indent/syntax [\#580](https://github.com/voxpupuli/puppet-python/pull/580) ([crazymind1337](https://github.com/crazymind1337)) +- Use Python 3 for virtualenv tests [\#575](https://github.com/voxpupuli/puppet-python/pull/575) ([waipeng](https://github.com/waipeng)) +- Add acceptance test for managing Python 3 [\#572](https://github.com/voxpupuli/puppet-python/pull/572) ([bastelfreak](https://github.com/bastelfreak)) + ## [v5.0.0](https://github.com/voxpupuli/puppet-python/tree/v5.0.0) (2020-09-23) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v4.1.1...v5.0.0) @@ -387,11 +424,12 @@ These should not affect the functionality of the module. ## [1.13.0](https://github.com/voxpupuli/puppet-python/tree/1.13.0) (2016-07-18) -[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/2.2.0...1.13.0) +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/1.12.0...1.13.0) **Closed issues:** - SCL package installation returns an error [\#308](https://github.com/voxpupuli/puppet-python/issues/308) +- Patch Release [\#295](https://github.com/voxpupuli/puppet-python/issues/295) - Can't install pip3 with Ubuntu [\#287](https://github.com/voxpupuli/puppet-python/issues/287) - SCL python27: add a workaround for libpython2.7.so.1.0 issue \(LD\_LIBRARY\_PATH\) [\#234](https://github.com/voxpupuli/puppet-python/issues/234) @@ -407,14 +445,6 @@ These should not affect the functionality of the module. - Configure workers [\#301](https://github.com/voxpupuli/puppet-python/pull/301) ([steverecio](https://github.com/steverecio)) - Fix support for Ruby 1.8.7 [\#298](https://github.com/voxpupuli/puppet-python/pull/298) ([ghoneycutt](https://github.com/ghoneycutt)) -## [2.2.0](https://github.com/voxpupuli/puppet-python/tree/2.2.0) (2016-05-31) - -[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/1.12.0...2.2.0) - -**Closed issues:** - -- Patch Release [\#295](https://github.com/voxpupuli/puppet-python/issues/295) - ## [1.12.0](https://github.com/voxpupuli/puppet-python/tree/1.12.0) (2016-03-27) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/1.11.0...1.12.0) @@ -479,13 +509,12 @@ These should not affect the functionality of the module. ## [1.9.8](https://github.com/voxpupuli/puppet-python/tree/1.9.8) (2015-09-19) -[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/1.9.6...1.9.8) +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/1.9.7...1.9.8) **Closed issues:** - Unable to install pip using pip provider [\#243](https://github.com/voxpupuli/puppet-python/issues/243) - Not possible to install latest version of Python [\#240](https://github.com/voxpupuli/puppet-python/issues/240) -- Exec\<| tag == 'python-virtualenv' |\> changes and breaks the API [\#230](https://github.com/voxpupuli/puppet-python/issues/230) **Merged pull requests:** @@ -500,6 +529,14 @@ These should not affect the functionality of the module. - Check that we have results before returning a value [\#238](https://github.com/voxpupuli/puppet-python/pull/238) ([xaque208](https://github.com/xaque208)) - Adjust test code to pass syntax checker [\#237](https://github.com/voxpupuli/puppet-python/pull/237) ([fluential](https://github.com/fluential)) +## [1.9.7](https://github.com/voxpupuli/puppet-python/tree/1.9.7) (2015-08-21) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/1.9.6...1.9.7) + +**Closed issues:** + +- Exec\<| tag == 'python-virtualenv' |\> changes and breaks the API [\#230](https://github.com/voxpupuli/puppet-python/issues/230) + ## [1.9.6](https://github.com/voxpupuli/puppet-python/tree/1.9.6) (2015-08-01) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/1.9.5...1.9.6) diff --git a/metadata.json b/metadata.json index 4bcf29bd..9246199e 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "5.0.1-rc0", + "version": "6.0.0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From 7dd4543fb5d39c897e0acb2571d18239caa5a852 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sat, 3 Apr 2021 16:01:32 +0200 Subject: [PATCH 006/158] [blacksmith] Bump version to 6.0.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 9246199e..8cd9ee42 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.0.0", + "version": "6.0.1-rc0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From e271d85bac36ec65d2d663fbb75fe7da2d73333f Mon Sep 17 00:00:00 2001 From: BR Date: Tue, 20 Apr 2021 11:08:46 +0200 Subject: [PATCH 007/158] Use $real_pkgname for pip uninstall command Fix #606 --- manifests/pip.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index 35d46900..3935df72 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -220,7 +220,7 @@ default: { # Anti-action, uninstall. - $command = "echo y | ${pip_env} uninstall ${uninstall_args} ${proxy_flag} ${name}" + $command = "echo y | ${pip_env} uninstall ${uninstall_args} ${proxy_flag} ${real_pkgname}" $unless_command = "! ${pip_env} list | grep -i -e '${grep_regex}'" } } From 2fd2a90b33f3dba527b2b0f76b29848ce20bcf5a Mon Sep 17 00:00:00 2001 From: BR Date: Mon, 26 Apr 2021 21:53:50 +0200 Subject: [PATCH 008/158] Added tests for pip uninstall --- spec/defines/pip_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index 3ae5a61a..c2162e08 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -116,6 +116,14 @@ it { is_expected.to contain_exec('pip_uninstall_rpyc').with_command(%r{uninstall.*rpyc$}) } end + + context 'passes correct package name' do + let(:params) { { ensure: 'absent', 'pkgname': 'r-pyc' } } + + it { is_expected.not_to contain_exec('pip_install_rpyc') } + + it { is_expected.to contain_exec('pip_uninstall_rpyc').with_command(%r{uninstall.*r-pyc$}) } + end end end end From 7f5f52b465a09ea14e90dd4f3c25f1b136c75278 Mon Sep 17 00:00:00 2001 From: BR Date: Tue, 27 Apr 2021 22:56:46 +0200 Subject: [PATCH 009/158] Initial pip acceptance tests --- spec/acceptance/pip_spec.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 spec/acceptance/pip_spec.rb diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb new file mode 100644 index 00000000..372d905f --- /dev/null +++ b/spec/acceptance/pip_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper_acceptance' + +describe 'python::pip defined resource' do + context 'install package with custom name' do + it 'works with no errors' do + pp = <<-PUPPET + class { 'python': + version => '3', + dev => 'present', + } + + python::pip { 'agent package': + pkgname => 'agent' + ensure => '0.1.2' + } + PUPPET + + apply_manifest(pp, catch_failures: true) + apply_manifest(pp, catch_changes: true) + end + describe command('/opt/agent/venv/bin/pip list') do + its(:exit_status) { is_expected.to eq 0 } + its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } + end +end + From 1c177bd4ce7358756f04f694b3ce5751fbb8de79 Mon Sep 17 00:00:00 2001 From: BR Date: Tue, 27 Apr 2021 22:57:46 +0200 Subject: [PATCH 010/158] Fixed pip path --- spec/acceptance/pip_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index 372d905f..c88bd5d3 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -18,7 +18,7 @@ class { 'python': apply_manifest(pp, catch_failures: true) apply_manifest(pp, catch_changes: true) end - describe command('/opt/agent/venv/bin/pip list') do + describe command('/usr/bin/pip list') do its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } end From 9985ea0a36f5ae2d14e423f380ad65787230b150 Mon Sep 17 00:00:00 2001 From: BR Date: Tue, 27 Apr 2021 23:01:11 +0200 Subject: [PATCH 011/158] Added pip uninstall acceptance test --- spec/acceptance/pip_spec.rb | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index c88bd5d3..f1ba7f26 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -10,17 +10,48 @@ class { 'python': } python::pip { 'agent package': - pkgname => 'agent' - ensure => '0.1.2' + pkgname => 'agent', + ensure => '0.1.2', } PUPPET apply_manifest(pp, catch_failures: true) apply_manifest(pp, catch_changes: true) end + describe command('/usr/bin/pip list') do its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } end + + context 'uninstall package with custom name' do + it 'works with no errors' do + pp = <<-PUPPET + class { 'python': + version => '3', + dev => 'present', + } + + python::pip { 'agent package install': + pkgname => 'agent', + ensure => '0.1.2', + } + + python::pip { 'agent package uninstall': + pkgname => 'agent', + ensure => 'absent', + require => Python::Pip['agent package install'], + } + + PUPPET + + apply_manifest(pp, catch_failures: true) + apply_manifest(pp, catch_changes: true) + end + + describe command('/usr/bin/pip list') do + its(:exit_status) { is_expected.to eq 0 } + its(:stdout) { is_expected.not_to match %r{agent.* 0\.1\.2} } + end end From 6599b7647a1e3c818daf63dc3cfff6c21df04281 Mon Sep 17 00:00:00 2001 From: BR Date: Wed, 28 Apr 2021 08:22:14 +0200 Subject: [PATCH 012/158] Fixed syntax in acceptance tests --- spec/acceptance/pip_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index f1ba7f26..b62c82a0 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -17,6 +17,7 @@ class { 'python': apply_manifest(pp, catch_failures: true) apply_manifest(pp, catch_changes: true) + end end describe command('/usr/bin/pip list') do @@ -47,6 +48,7 @@ class { 'python': apply_manifest(pp, catch_failures: true) apply_manifest(pp, catch_changes: true) + end end describe command('/usr/bin/pip list') do From f36ea4abe4499fd6ef7a99ecd8eaf603ab0a4bef Mon Sep 17 00:00:00 2001 From: BR Date: Wed, 28 Apr 2021 22:18:04 +0200 Subject: [PATCH 013/158] Use virtualenv for pip acceptance tests --- spec/acceptance/pip_spec.rb | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index b62c82a0..b7d6d4e1 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -9,9 +9,17 @@ class { 'python': dev => 'present', } + python::pyvenv { '/opt/test-venv': + ensure => 'present', + systempkgs => false, + mode => '0755', + pip_version => '<= 20.3.4', + } + python::pip { 'agent package': - pkgname => 'agent', - ensure => '0.1.2', + virtualenv => '/opt/test-venv', + pkgname => 'agent', + ensure => '0.1.2', } PUPPET @@ -20,7 +28,7 @@ class { 'python': end end - describe command('/usr/bin/pip list') do + describe command('/opt/test-venv/bin/pip list') do its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } end @@ -33,25 +41,33 @@ class { 'python': dev => 'present', } + python::pyvenv { '/opt/test-venv': + ensure => 'present', + systempkgs => false, + mode => '0755', + pip_version => '<= 20.3.4', + } + python::pip { 'agent package install': - pkgname => 'agent', - ensure => '0.1.2', + ensure => '0.1.2', + pkgname => 'agent', + virtualenv => '/opt/test-venv', } - python::pip { 'agent package uninstall': - pkgname => 'agent', + python::pip { 'agent package uninstall custom pkgname': ensure => 'absent', + pkgname => 'agent', + virtualenv => '/opt/test-venv', require => Python::Pip['agent package install'], } PUPPET apply_manifest(pp, catch_failures: true) - apply_manifest(pp, catch_changes: true) end end - describe command('/usr/bin/pip list') do + describe command('/opt/test-venv/bin/pip list') do its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.not_to match %r{agent.* 0\.1\.2} } end From b1127ee52638f166d46e3440bbd3b6f7dcb03556 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 28 Apr 2021 22:50:57 +0200 Subject: [PATCH 014/158] release 6.0.1 --- CHANGELOG.md | 12 ++++++++++++ metadata.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0db8682b..87e485ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v6.0.1](https://github.com/voxpupuli/puppet-python/tree/v6.0.1) (2021-04-28) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.0.0...v6.0.1) + +**Fixed bugs:** + +- Use $real\_pkgname for pip uninstall command [\#607](https://github.com/voxpupuli/puppet-python/pull/607) ([brabiega](https://github.com/brabiega)) + +**Closed issues:** + +- Pip uninstall does not support pkgname variable [\#606](https://github.com/voxpupuli/puppet-python/issues/606) + ## [v6.0.0](https://github.com/voxpupuli/puppet-python/tree/v6.0.0) (2021-04-03) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v5.0.0...v6.0.0) diff --git a/metadata.json b/metadata.json index 8cd9ee42..f0b58861 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.0.1-rc0", + "version": "6.0.1", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From 0f522f6b866b091d75ecb5d122ee50543d618dab Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 29 Apr 2021 10:09:39 +0200 Subject: [PATCH 015/158] [blacksmith] Bump version to 6.0.2-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index f0b58861..9bba9594 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.0.1", + "version": "6.0.2-rc0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From e9cec26d782222739b4c395cddc73273344f332a Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 29 Apr 2021 10:30:19 +0200 Subject: [PATCH 016/158] modulesync 4.1.0 --- .github/CONTRIBUTING.md | 34 ++-------------------------------- .github/workflows/ci.yml | 10 +++++----- .msync.yml | 2 +- Dockerfile | 2 +- Gemfile | 8 ++++---- 5 files changed, 13 insertions(+), 43 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index f1f88ccf..887d571a 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -232,33 +232,7 @@ simple tests against it after applying the module. You can run this with: ```sh -bundle exec rake beaker -``` - -This will run the tests on the module's default nodeset. You can override the -nodeset used, e.g., - -```sh -BEAKER_set=centos-7-x64 bundle exec rake beaker -``` - -There are default rake tasks for the various acceptance test modules, e.g., - -```sh -bundle exec rake beaker:centos-7-x64 -bundle exec rake beaker:ssh:centos-7-x64 -``` - -If you don't want to have to recreate the virtual machine every time you can -use `BEAKER_destroy=no` and `BEAKER_provision=no`. On the first run you will at -least need `BEAKER_provision` set to yes (the default). The Vagrantfile for the -created virtual machines will be in `.vagrant/beaker_vagrant_files`. - -Beaker also supports docker containers. We also use that in our automated CI -pipeline at [travis-ci](http://travis-ci.org). To use that instead of Vagrant: - -```sh -PUPPET_INSTALL_TYPE=agent BEAKER_IS_PE=no BEAKER_PUPPET_COLLECTION=puppet6 BEAKER_debug=true BEAKER_setfile=debian10-64{hypervisor=docker} BEAKER_destroy=yes bundle exec rake beaker +BEAKER_setfile=debian10-x64 bundle exec rake beaker ``` You can replace the string `debian10` with any common operating system. @@ -272,11 +246,7 @@ The following strings are known to work: * centos7 * centos8 -The easiest way to debug in a docker container is to open a shell: - -```sh -docker exec -it -u root ${container_id_or_name} bash -``` +For more information and tips & tricks, see [voxpupuli-acceptance's documentation](https://github.com/voxpupuli/voxpupuli-acceptance#running-tests). The source of this file is in our [modulesync_config](https://github.com/voxpupuli/modulesync_config/blob/master/moduleroot/.github/CONTRIBUTING.md.erb) repository. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4f47e87..97ddc620 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,12 +6,13 @@ jobs: setup_matrix: name: 'Setup Test Matrix' runs-on: ubuntu-latest + timeout-minutes: 40 outputs: beaker_setfiles: ${{ steps.get-outputs.outputs.beaker_setfiles }} puppet_major_versions: ${{ steps.get-outputs.outputs.puppet_major_versions }} puppet_unit_test_matrix: ${{ steps.get-outputs.outputs.puppet_unit_test_matrix }} env: - BUNDLE_WITHOUT: development:test:release + BUNDLE_WITHOUT: development:release steps: - uses: actions/checkout@v2 - name: Setup ruby @@ -21,6 +22,8 @@ jobs: bundler-cache: true - name: Run rake validate run: bundle exec rake validate + - name: Run rake rubocop + run: bundle exec rake rubocop - name: Setup Test Matrix id: get-outputs run: bundle exec metadata2gha --use-fqdn --pidfile-workaround false @@ -28,6 +31,7 @@ jobs: unit: needs: setup_matrix runs-on: ubuntu-latest + timeout-minutes: 40 strategy: fail-fast: false matrix: @@ -58,10 +62,6 @@ jobs: puppet: ${{fromJson(needs.setup_matrix.outputs.puppet_major_versions)}} name: ${{ matrix.puppet.name }} - ${{ matrix.setfile.name }} steps: - - name: Enable IPv6 on docker - run: | - echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json - sudo service docker restart - uses: actions/checkout@v2 - name: Setup ruby uses: ruby/setup-ruby@v1 diff --git a/.msync.yml b/.msync.yml index a0770a83..57ff5038 100644 --- a/.msync.yml +++ b/.msync.yml @@ -1,2 +1,2 @@ --- -modulesync_config_version: '4.0.0' +modulesync_config_version: '4.1.0' diff --git a/Dockerfile b/Dockerfile index 6fd63422..a51c6416 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:2.5.3 +FROM ruby:2.7 WORKDIR /opt/puppet diff --git a/Gemfile b/Gemfile index 0d0a9fb2..f4855f64 100644 --- a/Gemfile +++ b/Gemfile @@ -17,10 +17,10 @@ group :system_tests do end group :release do - gem 'github_changelog_generator', :require => false, :git => 'https://github.com/voxpupuli/github-changelog-generator', :branch => 'voxpupuli_essential_fixes' - gem 'puppet-blacksmith', :require => false - gem 'voxpupuli-release', :require => false - gem 'puppet-strings', '>= 2.2', :require => false + gem 'github_changelog_generator', '>= 1.16.1', :require => false + gem 'puppet-blacksmith', :require => false + gem 'voxpupuli-release', :require => false + gem 'puppet-strings', '>= 2.2', :require => false end gem 'puppetlabs_spec_helper', '~> 2.0', :require => false From 697a6d9a449e742f48a6f2d6615cb907048e9976 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 29 Apr 2021 10:33:42 +0200 Subject: [PATCH 017/158] rubocop: autofix --- spec/acceptance/pip_spec.rb | 1 - spec/classes/python_spec.rb | 70 +++++++++++++++++++------------------ spec/defines/pip_spec.rb | 7 ++-- 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index b7d6d4e1..f2da5ecd 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -72,4 +72,3 @@ class { 'python': its(:stdout) { is_expected.not_to match %r{agent.* 0\.1\.2} } end end - diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index bc5af262..4e2bc1ac 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -118,41 +118,43 @@ it { is_expected.to contain_python__pyvenv('/opt/env1').with_ensure('present') } it { is_expected.to contain_python__pyvenv('/opt/env2').with_ensure('present') } - it { is_expected.to contain_exec('python_virtualenv_/opt/env1') - .with( - command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade pip && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade setuptools', - user: 'root', - creates: '/opt/env1/bin/activate', - path: [ - '/bin', - '/usr/bin', - '/usr/sbin', - '/usr/local/bin' - ], - cwd: '/tmp', - environment: [], - timeout: 600, - unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env1\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env1/bin/activate$} - ) - .that_requires('File[/opt/env1]') + it { + is_expected.to contain_exec('python_virtualenv_/opt/env1'). + with( + command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade pip && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade setuptools', + user: 'root', + creates: '/opt/env1/bin/activate', + path: [ + '/bin', + '/usr/bin', + '/usr/sbin', + '/usr/local/bin' + ], + cwd: '/tmp', + environment: [], + timeout: 600, + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env1\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env1/bin/activate$} + ). + that_requires('File[/opt/env1]') } - it { is_expected.to contain_exec('python_virtualenv_/opt/env2') - .with( - command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade setuptools', - user: 'root', - creates: '/opt/env2/bin/activate', - path: [ - '/bin', - '/usr/bin', - '/usr/sbin', - '/usr/local/bin' - ], - cwd: '/tmp', - environment: [], - timeout: 600, - unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env2\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env2/bin/activate$} - ) - .that_requires('File[/opt/env2]') + it { + is_expected.to contain_exec('python_virtualenv_/opt/env2'). + with( + command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade setuptools', + user: 'root', + creates: '/opt/env2/bin/activate', + path: [ + '/bin', + '/usr/bin', + '/usr/sbin', + '/usr/local/bin' + ], + cwd: '/tmp', + environment: [], + timeout: 600, + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env2\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env2/bin/activate$} + ). + that_requires('File[/opt/env2]') } it { is_expected.to contain_file('/opt/env1') } it { is_expected.to contain_file('/opt/env2') } diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index c2162e08..a51e916a 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' - -describe 'python::pip', type: :define do # rubocop:disable RSpec/MultipleDescribes +# rubocop:disable RSpec/MultipleDescribes +describe 'python::pip', type: :define do let(:title) { 'rpyc' } context 'on Debian OS' do @@ -118,7 +118,7 @@ end context 'passes correct package name' do - let(:params) { { ensure: 'absent', 'pkgname': 'r-pyc' } } + let(:params) { { ensure: 'absent', pkgname: 'r-pyc' } } it { is_expected.not_to contain_exec('pip_install_rpyc') } @@ -162,3 +162,4 @@ end end end +# rubocop:enable RSpec/MultipleDescribes From 237d7a095c3fa2e70a02e62d523a81a4e4fa5d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Sun, 2 May 2021 15:19:53 -1000 Subject: [PATCH 018/158] Add support for FreeBSD Make this module usable on FreeBSD. While here, sort operating system lists in alphabetical order for consistency. --- manifests/install.pp | 15 ++++++++++----- manifests/params.pp | 2 +- metadata.json | 8 ++++++++ spec/defines/requirements_spec.rb | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 64f9350e..4645bdcb 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -15,11 +15,12 @@ } $pythondev = $facts['os']['family'] ? { - 'AIX' => "${python}-devel", - 'RedHat' => "${python}-devel", - 'Debian' => "${python}-dev", - 'Suse' => "${python}-devel", - 'Gentoo' => undef, + 'AIX' => "${python}-devel", + 'Debian' => "${python}-dev", + 'FreeBSD' => undef, + 'Gentoo' => undef, + 'RedHat' => "${python}-devel", + 'Suse' => "${python}-devel", } $pip_ensure = $python::pip ? { @@ -225,6 +226,10 @@ $pip_category = undef $pip_package = 'python2-pip' $pip_provider = pip2 + } elsif $facts['os']['family'] == 'FreeBSD' { + $pip_category = undef + $pip_package = "py${python::version}-pip" + $pip_provider = 'pip' } elsif $facts['os']['family'] == 'Gentoo' { $pip_category = 'dev-python' $pip_package = 'pip' diff --git a/manifests/params.pp b/manifests/params.pp index e1ed7c21..32f13a72 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -5,7 +5,7 @@ # class python::params { # Module compatibility check - unless $facts['os']['family'] in ['Debian', 'RedHat', 'Suse', 'Gentoo', 'AIX',] { + unless $facts['os']['family'] in ['AIX', 'Debian', 'FreeBSD', 'Gentoo', 'RedHat', 'Suse'] { fail("Module is not compatible with ${facts['os']['name']}") } diff --git a/metadata.json b/metadata.json index 9bba9594..a139041d 100644 --- a/metadata.json +++ b/metadata.json @@ -36,6 +36,14 @@ "10" ] }, + { + "operatingsystem": "FreeBSD", + "operatingsystemrelease": [ + "11", + "12", + "13" + ] + }, { "operatingsystem": "Gentoo" }, diff --git a/spec/defines/requirements_spec.rb b/spec/defines/requirements_spec.rb index 17db0595..4e659b79 100644 --- a/spec/defines/requirements_spec.rb +++ b/spec/defines/requirements_spec.rb @@ -53,7 +53,7 @@ it { is_expected.to contain_package('gunicorn') } it { is_expected.to contain_file('/requirements.txt').with_owner('root').with_group('root') } - if facts[:os]['name'] == 'Gentoo' + if %w[FreeBSD Gentoo].include?(facts[:os]['name']) it { is_expected.not_to contain_package('python-dev') } else it { is_expected.to contain_package('python-dev') } From 893ae3f4405c9787cb2a123df08726f87bfcf290 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 29 Apr 2021 11:01:13 +0200 Subject: [PATCH 019/158] release 6.1.0 --- CHANGELOG.md | 17 ++++++++++++++++- metadata.json | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87e485ea..86374eb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,22 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. -## [v6.0.1](https://github.com/voxpupuli/puppet-python/tree/v6.0.1) (2021-04-28) +## [v6.1.0](https://github.com/voxpupuli/puppet-python/tree/v6.1.0) (2021-06-05) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.0.1...v6.1.0) + +Due to a bug in the release pipeline, release v6.0.1 didn't make it to the forge. v6.0.2 just contains [modulesync 4.1.0](https://github.com/voxpupuli/modulesync_config/blob/master/CHANGELOG.md#410-2021-04-03) patch. + +**Implemented enhancements:** + +- Add support for FreeBSD [\#612](https://github.com/voxpupuli/puppet-python/pull/612) ([smortex](https://github.com/smortex)) + +**Closed issues:** + +- Can't uninstall pip package because of duplicate variable name [\#532](https://github.com/voxpupuli/puppet-python/issues/532) +- audit metaparameter is deprecated [\#375](https://github.com/voxpupuli/puppet-python/issues/375) + +## [v6.0.1](https://github.com/voxpupuli/puppet-python/tree/v6.0.1) (2021-04-29) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.0.0...v6.0.1) diff --git a/metadata.json b/metadata.json index a139041d..43bd3fec 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.0.2-rc0", + "version": "6.1.0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From fd345d896c19582ffc95ca2a464fdb01a8528382 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sat, 5 Jun 2021 17:20:28 +0200 Subject: [PATCH 020/158] [blacksmith] Bump version to 6.1.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 43bd3fec..6c1e3089 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.1.0", + "version": "6.1.1-rc0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From 70e753d0c0ac60cb9dc41f988429619f33ecb89b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 26 Jul 2021 12:11:02 -1000 Subject: [PATCH 021/158] New function: any_puppet_to_python() This function return a String representation of the value passed as parameter. --- lib/puppet/functions/any_puppet_to_python.rb | 25 +++++++++++++ spec/acceptance/any_puppet_to_python_spec.rb | 38 ++++++++++++++++++++ spec/functions/any_puppet_to_python_spec.rb | 26 ++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 lib/puppet/functions/any_puppet_to_python.rb create mode 100644 spec/acceptance/any_puppet_to_python_spec.rb create mode 100644 spec/functions/any_puppet_to_python_spec.rb diff --git a/lib/puppet/functions/any_puppet_to_python.rb b/lib/puppet/functions/any_puppet_to_python.rb new file mode 100644 index 00000000..477569e8 --- /dev/null +++ b/lib/puppet/functions/any_puppet_to_python.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +# @summary +# Return the Python representation of the passed variable +Puppet::Functions.create_function(:any_puppet_to_python) do + dispatch :any_puppet_to_python do + param 'Any', :value + end + + # @param value + # The value to be converted + # + # @return [String] + # The String representation of value + def any_puppet_to_python(value) + case value + when true then 'True' + when false then 'False' + when :undef then 'None' + when Array then "[#{value.map { |x| any_puppet_to_python(x) }.join(', ')}]" + when Hash then "{#{value.map { |k, v| "#{any_puppet_to_python(k)}: #{any_puppet_to_python(v)}" }.join(', ')}}" + else value.inspect + end + end +end diff --git a/spec/acceptance/any_puppet_to_python_spec.rb b/spec/acceptance/any_puppet_to_python_spec.rb new file mode 100644 index 00000000..52ea33fc --- /dev/null +++ b/spec/acceptance/any_puppet_to_python_spec.rb @@ -0,0 +1,38 @@ +require 'spec_helper_acceptance' + +describe 'any_puppet_to_python function' do + it 'works with no errors' do + pp = <<-EOS + class { 'python': + ensure => 'present', + version => '3', + } + + $var = { + 1 => 2, + 3 => [ + 5, + 7, + 'bar' + ], + 'foo' => 11, + } + file { '/tmp/foo.py': + ensure => file, + mode => '0755', + content => inline_epp(@(PYTHON), { var => $var }), + <%- |Any $var| -%> + #!/usr/bin/env python3 + var = <%= $var.any_puppet_to_python() %> + print(var[1] + var[3][1] + var["foo"]) + print(var[3][2] * var[3][0]) + | PYTHON + } + EOS + + apply_manifest(pp, catch_failures: true) + apply_manifest(pp, catch_changes: true) + + expect(shell('/tmp/foo.py').stdout).to eq("20\nbarbarbarbarbar\n") + end +end diff --git a/spec/functions/any_puppet_to_python_spec.rb b/spec/functions/any_puppet_to_python_spec.rb new file mode 100644 index 00000000..b95c6398 --- /dev/null +++ b/spec/functions/any_puppet_to_python_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +describe 'any_puppet_to_python' do + context 'with Array[Any]' do + it { is_expected.to run.with_params([]).and_return('[]') } + it { is_expected.to run.with_params([[[[], 1], '2'], 3]).and_return('[[[[], 1], "2"], 3]') } + it { is_expected.to run.with_params([42, 'foo', true, {}]).and_return('[42, "foo", True, {}]') } + end + context 'with Hash[Any]' do + it { is_expected.to run.with_params({}).and_return('{}') } + it { is_expected.to run.with_params({ '1' => { 2 => { '3' => {} } } }).and_return('{"1": {2: {"3": {}}}}') } + it { is_expected.to run.with_params({ 42 => 42, 'foo' => 'bar', '6 * 9' => { 'answer' => [42] } }).and_return('{42: 42, "foo": "bar", "6 * 9": {"answer": [42]}}') } + end + context 'with Boolean' do + it { is_expected.to run.with_params(true).and_return('True') } + it { is_expected.to run.with_params(false).and_return('False') } + end + context 'with String' do + it { is_expected.to run.with_params('').and_return('""') } + it { is_expected.to run.with_params('foo').and_return('"foo"') } + it { is_expected.to run.with_params("foo\nbar").and_return('"foo\nbar"') } + end + context 'with Undef' do + it { is_expected.to run.with_params(:undef).and_return('None') } + end +end From 8591aed9e8ba0a24a64914f8c302ffc4a8178f6d Mon Sep 17 00:00:00 2001 From: Alex Cullen Date: Thu, 19 Aug 2021 12:08:31 -0400 Subject: [PATCH 022/158] If user declares their own requirements, don't set subscribe to undef. --- manifests/requirements.pp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/manifests/requirements.pp b/manifests/requirements.pp index 9d245be3..e8c253fa 100644 --- a/manifests/requirements.pp +++ b/manifests/requirements.pp @@ -88,11 +88,8 @@ replace => false, content => '# Puppet will install and/or update pip packages listed here', } - - $local_subscribe = File[$requirements] - } else { - $local_subscribe = undef } + $local_subscribe = File[$requirements] exec { "python_requirements${name}": provider => shell, From 564e9e5359dd4872305140b75658ac30ca4c14b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 23 Aug 2021 06:15:42 -1000 Subject: [PATCH 023/158] Delete the any_puppet_to_python() function It was integrated into the stdlib as to_python(). --- lib/puppet/functions/any_puppet_to_python.rb | 25 ------------- spec/acceptance/any_puppet_to_python_spec.rb | 38 -------------------- spec/functions/any_puppet_to_python_spec.rb | 26 -------------- 3 files changed, 89 deletions(-) delete mode 100644 lib/puppet/functions/any_puppet_to_python.rb delete mode 100644 spec/acceptance/any_puppet_to_python_spec.rb delete mode 100644 spec/functions/any_puppet_to_python_spec.rb diff --git a/lib/puppet/functions/any_puppet_to_python.rb b/lib/puppet/functions/any_puppet_to_python.rb deleted file mode 100644 index 477569e8..00000000 --- a/lib/puppet/functions/any_puppet_to_python.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -# @summary -# Return the Python representation of the passed variable -Puppet::Functions.create_function(:any_puppet_to_python) do - dispatch :any_puppet_to_python do - param 'Any', :value - end - - # @param value - # The value to be converted - # - # @return [String] - # The String representation of value - def any_puppet_to_python(value) - case value - when true then 'True' - when false then 'False' - when :undef then 'None' - when Array then "[#{value.map { |x| any_puppet_to_python(x) }.join(', ')}]" - when Hash then "{#{value.map { |k, v| "#{any_puppet_to_python(k)}: #{any_puppet_to_python(v)}" }.join(', ')}}" - else value.inspect - end - end -end diff --git a/spec/acceptance/any_puppet_to_python_spec.rb b/spec/acceptance/any_puppet_to_python_spec.rb deleted file mode 100644 index 52ea33fc..00000000 --- a/spec/acceptance/any_puppet_to_python_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'spec_helper_acceptance' - -describe 'any_puppet_to_python function' do - it 'works with no errors' do - pp = <<-EOS - class { 'python': - ensure => 'present', - version => '3', - } - - $var = { - 1 => 2, - 3 => [ - 5, - 7, - 'bar' - ], - 'foo' => 11, - } - file { '/tmp/foo.py': - ensure => file, - mode => '0755', - content => inline_epp(@(PYTHON), { var => $var }), - <%- |Any $var| -%> - #!/usr/bin/env python3 - var = <%= $var.any_puppet_to_python() %> - print(var[1] + var[3][1] + var["foo"]) - print(var[3][2] * var[3][0]) - | PYTHON - } - EOS - - apply_manifest(pp, catch_failures: true) - apply_manifest(pp, catch_changes: true) - - expect(shell('/tmp/foo.py').stdout).to eq("20\nbarbarbarbarbar\n") - end -end diff --git a/spec/functions/any_puppet_to_python_spec.rb b/spec/functions/any_puppet_to_python_spec.rb deleted file mode 100644 index b95c6398..00000000 --- a/spec/functions/any_puppet_to_python_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require 'spec_helper' - -describe 'any_puppet_to_python' do - context 'with Array[Any]' do - it { is_expected.to run.with_params([]).and_return('[]') } - it { is_expected.to run.with_params([[[[], 1], '2'], 3]).and_return('[[[[], 1], "2"], 3]') } - it { is_expected.to run.with_params([42, 'foo', true, {}]).and_return('[42, "foo", True, {}]') } - end - context 'with Hash[Any]' do - it { is_expected.to run.with_params({}).and_return('{}') } - it { is_expected.to run.with_params({ '1' => { 2 => { '3' => {} } } }).and_return('{"1": {2: {"3": {}}}}') } - it { is_expected.to run.with_params({ 42 => 42, 'foo' => 'bar', '6 * 9' => { 'answer' => [42] } }).and_return('{42: 42, "foo": "bar", "6 * 9": {"answer": [42]}}') } - end - context 'with Boolean' do - it { is_expected.to run.with_params(true).and_return('True') } - it { is_expected.to run.with_params(false).and_return('False') } - end - context 'with String' do - it { is_expected.to run.with_params('').and_return('""') } - it { is_expected.to run.with_params('foo').and_return('"foo"') } - it { is_expected.to run.with_params("foo\nbar").and_return('"foo\nbar"') } - end - context 'with Undef' do - it { is_expected.to run.with_params(:undef).and_return('None') } - end -end From c02dcc7534a30d25da36f79d70079d72492e7427 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Tue, 24 Aug 2021 08:33:47 -1000 Subject: [PATCH 024/158] Add support for Debian 11 --- manifests/install.pp | 13 +++++++++---- metadata.json | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 4645bdcb..af4a26ff 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -234,12 +234,17 @@ $pip_category = 'dev-python' $pip_package = 'pip' $pip_provider = 'pip' + } elsif ($facts['os']['name'] == 'Ubuntu') and (versioncmp($facts['os']['release']['major'], '20.04') >= 0) { + $pip_category = undef + $pip_package = 'python3-pip' + $pip_provider = 'pip3' + } elsif ($facts['os']['name'] == 'Debian') and (versioncmp($facts['os']['release']['major'], '11') >= 0) { + $pip_category = undef + $pip_package = 'python3-pip' + $pip_provider = 'pip3' } else { - $pip_package = $facts['os']['release']['major'] ? { - '20.04' => 'python3-pip', - default => 'python-pip', - } $pip_category = undef + $pip_package = 'python-pip' $pip_provider = 'pip' } diff --git a/metadata.json b/metadata.json index 6c1e3089..3ac190ce 100644 --- a/metadata.json +++ b/metadata.json @@ -33,7 +33,8 @@ "operatingsystem": "Debian", "operatingsystemrelease": [ "9", - "10" + "10", + "11" ] }, { From 8768a815f05b1ccdd27e89c5e4f33f73ac4cc941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Wed, 25 Aug 2021 07:42:37 -1000 Subject: [PATCH 025/158] Allow stdlib 8.0.0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 3ac190ce..b86bb557 100644 --- a/metadata.json +++ b/metadata.json @@ -72,7 +72,7 @@ "dependencies": [ { "name": "puppetlabs/stdlib", - "version_requirement": ">= 4.19.0 < 8.0.0" + "version_requirement": ">= 4.19.0 < 9.0.0" }, { "name": "puppet/epel", From b9c84a3071a12322eb9676e0efc57cca25236054 Mon Sep 17 00:00:00 2001 From: Christos Papageorgiou Date: Thu, 26 Aug 2021 16:37:17 +0300 Subject: [PATCH 026/158] Release 6.2.0 --- CHANGELOG.md | 12 ++ README.md | 6 +- REFERENCE.md | 388 ++++++++++++++++++++++++++++++++++---------------- metadata.json | 2 +- 4 files changed, 282 insertions(+), 126 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86374eb8..9ba619d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v6.2.0](https://github.com/voxpupuli/puppet-python/tree/v6.2.0) (2021-08-26) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.1.0...v6.2.0) + +**Implemented enhancements:** + +- Add support for Debian 11 [\#621](https://github.com/voxpupuli/puppet-python/pull/621) ([smortex](https://github.com/smortex)) + +**Merged pull requests:** + +- Allow stdlib 8.0.0 [\#622](https://github.com/voxpupuli/puppet-python/pull/622) ([smortex](https://github.com/smortex)) + ## [v6.1.0](https://github.com/voxpupuli/puppet-python/tree/v6.1.0) (2021-06-05) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.0.1...v6.1.0) diff --git a/README.md b/README.md index dcfafdb2..a91504ca 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ # puppet-python -[![License](https://img.shields.io/github/license/voxpupuli/puppet-python.svg)](https://github.com/voxpupuli/puppet-python/blob/master/LICENSE) -[![Build Status](https://travis-ci.org/voxpupuli/puppet-python.png?branch=master)](https://travis-ci.org/voxpupuli/puppet-python) +[![Build Status](https://github.com/voxpupuli/puppet-python/workflows/CI/badge.svg)](https://github.com/voxpupuli/puppet-python/actions?query=workflow%3ACI) +[![Release](https://github.com/voxpupuli/puppet-python/actions/workflows/release.yml/badge.svg)](https://github.com/voxpupuli/puppet-python/actions/workflows/release.yml) [![Puppet Forge](https://img.shields.io/puppetforge/v/puppet/python.svg)](https://forge.puppetlabs.com/puppet/python) [![Puppet Forge - downloads](https://img.shields.io/puppetforge/dt/puppet/python.svg)](https://forge.puppetlabs.com/puppet/python) [![Puppet Forge - endorsement](https://img.shields.io/puppetforge/e/puppet/python.svg)](https://forge.puppetlabs.com/puppet/python) [![Puppet Forge - scores](https://img.shields.io/puppetforge/f/puppet/python.svg)](https://forge.puppetlabs.com/puppet/python) +[![puppetmodule.info docs](http://www.puppetmodule.info/images/badge.png)](http://www.puppetmodule.info/m/puppet-python) +[![License](https://img.shields.io/github/license/voxpupuli/puppet-python.svg)](https://github.com/voxpupuli/puppet-python/blob/master/LICENSE) Puppet module for installing and managing python, pip, virtualenvs and Gunicorn virtual hosts. diff --git a/REFERENCE.md b/REFERENCE.md index a12a230c..8a84e95d 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -31,11 +31,12 @@ * [`Python::Package::Ensure`](#pythonpackageensure): A version type to match all valid package ensures for python * [`Python::Provider`](#pythonprovider): A version type to match all valid provider for python * [`Python::Umask`](#pythonumask): A version type to match valid umask for python +* [`Python::Venv::PipVersion`](#pythonvenvpipversion): A version type to ensure a specific Pip version in a virtual env. * [`Python::Version`](#pythonversion): A version type to match all valid versions for python ## Classes -### `python` +### `python` Installs and manages python, python-dev and gunicorn. @@ -64,9 +65,30 @@ class { 'python' : #### Parameters -The following parameters are available in the `python` class. - -##### `ensure` +The following parameters are available in the `python` class: + +* [`ensure`](#ensure) +* [`version`](#version) +* [`pip`](#pip) +* [`dev`](#dev) +* [`gunicorn`](#gunicorn) +* [`manage_gunicorn`](#manage_gunicorn) +* [`provider`](#provider) +* [`use_epel`](#use_epel) +* [`manage_scl`](#manage_scl) +* [`umask`](#umask) +* [`manage_python_package`](#manage_python_package) +* [`manage_pip_package`](#manage_pip_package) +* [`gunicorn_package_name`](#gunicorn_package_name) +* [`python_pips`](#python_pips) +* [`python_pyvenvs`](#python_pyvenvs) +* [`python_requirements`](#python_requirements) +* [`python_dotfiles`](#python_dotfiles) +* [`rhscl_use_public_repository`](#rhscl_use_public_repository) +* [`anaconda_installer_url`](#anaconda_installer_url) +* [`anaconda_install_path`](#anaconda_install_path) + +##### `ensure` Data type: `Python::Package::Ensure` @@ -74,7 +96,7 @@ Desired installation state for the Python package. Default value: `$python::params::ensure` -##### `version` +##### `version` Data type: `Python::Version` @@ -89,7 +111,7 @@ Allowed values: Default value: `'3'` -##### `pip` +##### `pip` Data type: `Python::Package::Ensure` @@ -97,7 +119,7 @@ Desired installation state for the python-pip package. Default value: `$python::params::pip` -##### `dev` +##### `dev` Data type: `Python::Package::Ensure` @@ -105,7 +127,7 @@ Desired installation state for the python-dev package. Default value: `$python::params::dev` -##### `gunicorn` +##### `gunicorn` Data type: `Python::Package::Ensure` @@ -113,7 +135,7 @@ Desired installation state for Gunicorn. Default value: `$python::params::gunicorn` -##### `manage_gunicorn` +##### `manage_gunicorn` Data type: `Boolean` @@ -121,7 +143,7 @@ Allow Installation / Removal of Gunicorn. Default value: `$python::params::manage_gunicorn` -##### `provider` +##### `provider` Data type: `Optional[Python::Provider]` @@ -129,7 +151,7 @@ What provider to use for installation of the packages, except gunicorn and Pytho Default value: `$python::params::provider` -##### `use_epel` +##### `use_epel` Data type: `Boolean` @@ -137,7 +159,7 @@ to determine if the epel class is used. Default value: `$python::params::use_epel` -##### `manage_scl` +##### `manage_scl` Data type: `Boolean` @@ -145,7 +167,7 @@ Whether to manage core SCL packages or not. Default value: `$python::params::manage_scl` -##### `umask` +##### `umask` Data type: `Optional[Python::Umask]` @@ -153,7 +175,7 @@ The default umask for invoked exec calls. Default value: ``undef`` -##### `manage_python_package` +##### `manage_python_package` Data type: `Boolean` @@ -161,7 +183,7 @@ Data type: `Boolean` Default value: `$python::params::manage_python_package` -##### `manage_pip_package` +##### `manage_pip_package` Data type: `Boolean` @@ -169,7 +191,7 @@ Data type: `Boolean` Default value: `$python::params::manage_pip_package` -##### `gunicorn_package_name` +##### `gunicorn_package_name` Data type: `String[1]` @@ -177,7 +199,7 @@ Data type: `String[1]` Default value: `$python::params::gunicorn_package_name` -##### `python_pips` +##### `python_pips` Data type: `Hash` @@ -185,7 +207,7 @@ Data type: `Hash` Default value: `{}` -##### `python_pyvenvs` +##### `python_pyvenvs` Data type: `Hash` @@ -193,7 +215,7 @@ Data type: `Hash` Default value: `{}` -##### `python_requirements` +##### `python_requirements` Data type: `Hash` @@ -201,7 +223,7 @@ Data type: `Hash` Default value: `{}` -##### `python_dotfiles` +##### `python_dotfiles` Data type: `Hash` @@ -209,7 +231,7 @@ Data type: `Hash` Default value: `{}` -##### `rhscl_use_public_repository` +##### `rhscl_use_public_repository` Data type: `Boolean` @@ -217,7 +239,7 @@ Data type: `Boolean` Default value: `$python::params::rhscl_use_public_repository` -##### `anaconda_installer_url` +##### `anaconda_installer_url` Data type: `Stdlib::Httpurl` @@ -225,7 +247,7 @@ Data type: `Stdlib::Httpurl` Default value: `$python::params::anaconda_installer_url` -##### `anaconda_install_path` +##### `anaconda_install_path` Data type: `Stdlib::Absolutepath` @@ -233,7 +255,7 @@ Data type: `Stdlib::Absolutepath` Default value: `$python::params::anaconda_install_path` -### `python::pip::bootstrap` +### `python::pip::bootstrap` allow to bootstrap pip when python is managed from other module @@ -249,9 +271,14 @@ class { 'python::pip::bootstrap': #### Parameters -The following parameters are available in the `python::pip::bootstrap` class. +The following parameters are available in the `python::pip::bootstrap` class: + +* [`version`](#version) +* [`manage_python`](#manage_python) +* [`http_proxy`](#http_proxy) +* [`exec_provider`](#exec_provider) -##### `version` +##### `version` Data type: `Enum['pip', 'pip3']` @@ -259,7 +286,7 @@ should be pip or pip3 Default value: `'pip'` -##### `manage_python` +##### `manage_python` Data type: `Variant[Boolean, String]` @@ -267,7 +294,7 @@ if python module will manage deps Default value: ``false`` -##### `http_proxy` +##### `http_proxy` Data type: `Optional[Stdlib::HTTPUrl]` @@ -275,7 +302,7 @@ Proxy server to use for outbound connections. Default value: ``undef`` -##### `exec_provider` +##### `exec_provider` Data type: `String[1]` @@ -285,7 +312,7 @@ Default value: `'shell'` ## Defined types -### `python::dotfile` +### `python::dotfile` Manages any python dotfiles with a simple config hash. @@ -309,9 +336,16 @@ python::dotfile { '/var/lib/jenkins/.pip/pip.conf': #### Parameters -The following parameters are available in the `python::dotfile` defined type. +The following parameters are available in the `python::dotfile` defined type: + +* [`ensure`](#ensure) +* [`filename`](#filename) +* [`mode`](#mode) +* [`owner`](#owner) +* [`group`](#group) +* [`config`](#config) -##### `ensure` +##### `ensure` Data type: `Enum['absent', 'present']` @@ -319,7 +353,7 @@ Data type: `Enum['absent', 'present']` Default value: `'present'` -##### `filename` +##### `filename` Data type: `Stdlib::Absolutepath` @@ -327,7 +361,7 @@ Filename. Default value: `$title` -##### `mode` +##### `mode` Data type: `Stdlib::Filemode` @@ -335,7 +369,7 @@ File mode. Default value: `'0644'` -##### `owner` +##### `owner` Data type: `String[1]` @@ -343,7 +377,7 @@ user owner of dotfile Default value: `'root'` -##### `group` +##### `group` Data type: `String[1]` @@ -351,7 +385,7 @@ group owner of dotfile Default value: `'root'` -##### `config` +##### `config` Data type: `Hash` @@ -359,7 +393,7 @@ Config hash. This will be expanded to an ini-file. Default value: `{}` -### `python::gunicorn` +### `python::gunicorn` Manages Gunicorn virtual hosts. @@ -386,9 +420,30 @@ python::gunicorn { 'vhost': #### Parameters -The following parameters are available in the `python::gunicorn` defined type. - -##### `ensure` +The following parameters are available in the `python::gunicorn` defined type: + +* [`ensure`](#ensure) +* [`config_dir`](#config_dir) +* [`manage_config_dir`](#manage_config_dir) +* [`virtualenv`](#virtualenv) +* [`mode`](#mode) +* [`dir`](#dir) +* [`bind`](#bind) +* [`environment`](#environment) +* [`appmodule`](#appmodule) +* [`osenv`](#osenv) +* [`timeout`](#timeout) +* [`template`](#template) +* [`args`](#args) +* [`owner`](#owner) +* [`group`](#group) +* [`workers`](#workers) +* [`access_log_format`](#access_log_format) +* [`accesslog`](#accesslog) +* [`errorlog`](#errorlog) +* [`log_level`](#log_level) + +##### `ensure` Data type: `Enum['present', 'absent']` @@ -396,7 +451,7 @@ Data type: `Enum['present', 'absent']` Default value: `present` -##### `config_dir` +##### `config_dir` Data type: `Stdlib::Absolutepath` @@ -404,7 +459,7 @@ Configure the gunicorn config directory path. Default value: `'/etc/gunicorn.d'` -##### `manage_config_dir` +##### `manage_config_dir` Data type: `Boolean` @@ -412,7 +467,7 @@ Set if the gunicorn config directory should be created. Default value: ``false`` -##### `virtualenv` +##### `virtualenv` Data type: `Variant[Boolean,Stdlib::Absolutepath]` @@ -420,7 +475,7 @@ Run in virtualenv, specify directory. Default value: ``false`` -##### `mode` +##### `mode` Data type: `Enum['wsgi', 'django']` @@ -428,13 +483,13 @@ Gunicorn mode. Default value: `'wsgi'` -##### `dir` +##### `dir` Data type: `Stdlib::Absolutepath` Application directory. -##### `bind` +##### `bind` Data type: `Variant[String[1],Boolean]` @@ -444,7 +499,7 @@ Default: system-wide: unix:/tmp/gunicorn-$name.socket Default value: ``false`` -##### `environment` +##### `environment` Data type: `Variant[String[1],Boolean]` @@ -452,7 +507,7 @@ Set ENVIRONMENT variable. Default value: ``false`` -##### `appmodule` +##### `appmodule` Data type: `String[1]` @@ -460,7 +515,7 @@ Set the application module name for gunicorn to load when not using Django. Default value: `'app:app'` -##### `osenv` +##### `osenv` Data type: `Variant[Boolean,Hash]` @@ -468,7 +523,7 @@ Allows setting environment variables for the gunicorn service. Accepts a hash of Default value: ``false`` -##### `timeout` +##### `timeout` Data type: `Integer` @@ -476,7 +531,7 @@ Allows setting the gunicorn idle worker process time before being killed. The un Default value: `30` -##### `template` +##### `template` Data type: `String[1]` @@ -484,7 +539,7 @@ Which ERB template to use. Default value: `'python/gunicorn.erb'` -##### `args` +##### `args` Data type: `Array` @@ -492,7 +547,7 @@ Custom arguments to add in gunicorn config file. Default value: `[]` -##### `owner` +##### `owner` Data type: `String[1]` @@ -500,7 +555,7 @@ Data type: `String[1]` Default value: `'www-data'` -##### `group` +##### `group` Data type: `String[1]` @@ -508,7 +563,7 @@ Data type: `String[1]` Default value: `'www-data'` -##### `workers` +##### `workers` Data type: `Variant[Boolean,Integer]` @@ -516,7 +571,7 @@ Data type: `Variant[Boolean,Integer]` Default value: ``false`` -##### `access_log_format` +##### `access_log_format` Data type: `Variant[Boolean,String[1]]` @@ -524,7 +579,7 @@ Data type: `Variant[Boolean,String[1]]` Default value: ``false`` -##### `accesslog` +##### `accesslog` Data type: `Variant[Boolean,Stdlib::Absolutepath]` @@ -532,7 +587,7 @@ Data type: `Variant[Boolean,Stdlib::Absolutepath]` Default value: ``false`` -##### `errorlog` +##### `errorlog` Data type: `Variant[Boolean,Stdlib::Absolutepath]` @@ -540,7 +595,7 @@ Data type: `Variant[Boolean,Stdlib::Absolutepath]` Default value: ``false`` -##### `log_level` +##### `log_level` Data type: `Python::Loglevel` @@ -548,7 +603,7 @@ Data type: `Python::Loglevel` Default value: `'error'` -### `python::pip` +### `python::pip` Installs and manages packages from pip. @@ -594,13 +649,35 @@ python::pip { 'requests' : #### Parameters -The following parameters are available in the `python::pip` defined type. - -##### `name` +The following parameters are available in the `python::pip` defined type: + +* [`name`](#name) +* [`pkgname`](#pkgname) +* [`ensure`](#ensure) +* [`virtualenv`](#virtualenv) +* [`pip_provider`](#pip_provider) +* [`url`](#url) +* [`owner`](#owner) +* [`group`](#group) +* [`index`](#index) +* [`proxy`](#proxy) +* [`editable`](#editable) +* [`environment`](#environment) +* [`extras`](#extras) +* [`timeout`](#timeout) +* [`install_args`](#install_args) +* [`uninstall_args`](#uninstall_args) +* [`log_dir`](#log_dir) +* [`egg`](#egg) +* [`umask`](#umask) +* [`path`](#path) +* [`exec_provider`](#exec_provider) + +##### `name` must be unique -##### `pkgname` +##### `pkgname` Data type: `String[1]` @@ -608,7 +685,7 @@ the name of the package. Default value: `$name` -##### `ensure` +##### `ensure` Data type: `Variant[Enum[present, absent, latest], String[1]]` @@ -616,7 +693,7 @@ Require pip to be available. Default value: `present` -##### `virtualenv` +##### `virtualenv` Data type: `Variant[Enum['system'], Stdlib::Absolutepath]` @@ -624,7 +701,7 @@ virtualenv to run pip in. Default value: `'system'` -##### `pip_provider` +##### `pip_provider` Data type: `String[1]` @@ -632,7 +709,7 @@ version of pip you wish to use. Default value: `'pip'` -##### `url` +##### `url` Data type: `Variant[Boolean, String]` @@ -640,7 +717,7 @@ URL to install from. Default value: ``false`` -##### `owner` +##### `owner` Data type: `String[1]` @@ -648,7 +725,7 @@ The owner of the virtualenv being manipulated. Default value: `'root'` -##### `group` +##### `group` Data type: `Optional[String[1]]` @@ -656,7 +733,7 @@ The group of the virtualenv being manipulated. Default value: `getvar('python::params::group')` -##### `index` +##### `index` Data type: `Variant[Boolean,String[1]]` @@ -664,7 +741,7 @@ Base URL of Python package index. Default value: ``false`` -##### `proxy` +##### `proxy` Data type: `Optional[Stdlib::HTTPUrl]` @@ -672,7 +749,7 @@ Proxy server to use for outbound connections. Default value: ``undef`` -##### `editable` +##### `editable` Data type: `Boolean` @@ -680,7 +757,7 @@ If true the package is installed as an editable resource. Default value: ``false`` -##### `environment` +##### `environment` Data type: `Array` @@ -688,7 +765,7 @@ Additional environment variables required to install the packages. Default value: `[]` -##### `extras` +##### `extras` Data type: `Array` @@ -696,7 +773,7 @@ Extra features provided by the package which should be installed. Default value: `[]` -##### `timeout` +##### `timeout` Data type: `Numeric` @@ -704,7 +781,7 @@ The maximum time in seconds the "pip install" command should take. Default value: `1800` -##### `install_args` +##### `install_args` Data type: `String` @@ -712,7 +789,7 @@ Any additional installation arguments that will be supplied when running pip ins Default value: `''` -##### `uninstall_args` +##### `uninstall_args` Data type: `String` @@ -720,7 +797,7 @@ Any additional arguments that will be supplied when running pip uninstall. Default value: `''` -##### `log_dir` +##### `log_dir` Data type: `String[1]` @@ -728,7 +805,7 @@ Log directory Default value: `'/tmp'` -##### `egg` +##### `egg` Data type: `Any` @@ -736,7 +813,7 @@ The egg name to use Default value: ``false`` -##### `umask` +##### `umask` Data type: `Optional[Python::Umask]` @@ -744,7 +821,7 @@ Data type: `Optional[Python::Umask]` Default value: ``undef`` -##### `path` +##### `path` Data type: `Array[String]` @@ -752,7 +829,7 @@ Data type: `Array[String]` Default value: `['/usr/local/bin','/usr/bin','/bin', '/usr/sbin']` -##### `exec_provider` +##### `exec_provider` Data type: `String[1]` @@ -760,7 +837,7 @@ Data type: `String[1]` Default value: `'shell'` -### `python::pyvenv` +### `python::pyvenv` Create a Python3 virtualenv using pyvenv. @@ -781,9 +858,20 @@ python::pyvenv { '/var/www/project1' : #### Parameters -The following parameters are available in the `python::pyvenv` defined type. +The following parameters are available in the `python::pyvenv` defined type: -##### `ensure` +* [`ensure`](#ensure) +* [`version`](#version) +* [`systempkgs`](#systempkgs) +* [`venv_dir`](#venv_dir) +* [`owner`](#owner) +* [`group`](#group) +* [`mode`](#mode) +* [`path`](#path) +* [`environment`](#environment) +* [`pip_version`](#pip_version) + +##### `ensure` Data type: `Python::Package::Ensure` @@ -791,7 +879,7 @@ Data type: `Python::Package::Ensure` Default value: `present` -##### `version` +##### `version` Data type: `Python::Version` @@ -799,7 +887,7 @@ Python version to use. Default value: `'system'` -##### `systempkgs` +##### `systempkgs` Data type: `Boolean` @@ -807,7 +895,7 @@ Copy system site-packages into virtualenv Default value: ``false`` -##### `venv_dir` +##### `venv_dir` Data type: `Stdlib::Absolutepath` @@ -815,7 +903,7 @@ Directory to install virtualenv to Default value: `$name` -##### `owner` +##### `owner` Data type: `String[1]` @@ -823,7 +911,7 @@ The owner of the virtualenv being manipulated Default value: `'root'` -##### `group` +##### `group` Data type: `String[1]` @@ -831,7 +919,7 @@ The group relating to the virtualenv being manipulated Default value: `'root'` -##### `mode` +##### `mode` Data type: `Stdlib::Filemode` @@ -839,7 +927,7 @@ Optionally specify directory mode Default value: `'0755'` -##### `path` +##### `path` Data type: `Array[Stdlib::Absolutepath]` @@ -847,7 +935,7 @@ Specifies the PATH variable. Default value: `['/bin', '/usr/bin', '/usr/sbin', '/usr/local/bin',]` -##### `environment` +##### `environment` Data type: `Array` @@ -855,7 +943,15 @@ Optionally specify environment variables for pyvenv Default value: `[]` -### `python::requirements` +##### `pip_version` + +Data type: `Python::Venv::PipVersion` + + + +Default value: `'latest'` + +### `python::requirements` Installs and manages Python packages from requirements file. @@ -874,9 +970,25 @@ python::requirements { '/var/www/project1/requirements.txt' : #### Parameters -The following parameters are available in the `python::requirements` defined type. - -##### `requirements` +The following parameters are available in the `python::requirements` defined type: + +* [`requirements`](#requirements) +* [`virtualenv`](#virtualenv) +* [`pip_provider`](#pip_provider) +* [`owner`](#owner) +* [`group`](#group) +* [`proxy`](#proxy) +* [`src`](#src) +* [`environment`](#environment) +* [`forceupdate`](#forceupdate) +* [`cwd`](#cwd) +* [`extra_pip_args`](#extra_pip_args) +* [`manage_requirements`](#manage_requirements) +* [`fix_requirements_owner`](#fix_requirements_owner) +* [`log_dir`](#log_dir) +* [`timeout`](#timeout) + +##### `requirements` Data type: `Stdlib::Absolutepath` @@ -884,7 +996,7 @@ Path to the requirements file. Default value: `$name` -##### `virtualenv` +##### `virtualenv` Data type: `Variant[Enum['system'],Stdlib::Absolutepath]` @@ -892,7 +1004,7 @@ virtualenv to run pip in. Default value: `'system'` -##### `pip_provider` +##### `pip_provider` Data type: `Enum['pip', 'pip3']` @@ -900,7 +1012,7 @@ version of pip you wish to use. Default value: `'pip'` -##### `owner` +##### `owner` Data type: `String[1]` @@ -908,7 +1020,7 @@ The owner of the virtualenv being manipulated. Default value: `'root'` -##### `group` +##### `group` Data type: `String[1]` @@ -916,7 +1028,7 @@ The group relating to the virtualenv being manipulated. Default value: `'root'` -##### `proxy` +##### `proxy` Data type: `Optional[Stdlib::HTTPUrl]` @@ -924,7 +1036,7 @@ Proxy server to use for outbound connections. Default value: ``undef`` -##### `src` +##### `src` Data type: `Any` @@ -932,7 +1044,7 @@ Pip --src parameter to; if the requirements file contains --editable resources, Default value: ``false`` -##### `environment` +##### `environment` Data type: `Array` @@ -940,7 +1052,7 @@ Additional environment variables required to install the packages. Default value: `[]` -##### `forceupdate` +##### `forceupdate` Data type: `Boolean` @@ -948,7 +1060,7 @@ Run a pip install requirements even if we don't receive an event from the requir Default value: ``false`` -##### `cwd` +##### `cwd` Data type: `Optional[Stdlib::Absolutepath]` @@ -956,7 +1068,7 @@ The directory from which to run the "pip install" command. Default value: ``undef`` -##### `extra_pip_args` +##### `extra_pip_args` Data type: `String` @@ -964,7 +1076,7 @@ Extra arguments to pass to pip after the requirements file Default value: `''` -##### `manage_requirements` +##### `manage_requirements` Data type: `Boolean` @@ -972,7 +1084,7 @@ Create the requirements file if it doesn't exist. Default value: ``true`` -##### `fix_requirements_owner` +##### `fix_requirements_owner` Data type: `Boolean` @@ -980,7 +1092,7 @@ Change owner and group of requirements file. Default value: ``true`` -##### `log_dir` +##### `log_dir` Data type: `Stdlib::Absolutepath` @@ -988,7 +1100,7 @@ Log directory. Default value: `'/tmp'` -##### `timeout` +##### `timeout` Data type: `Integer` @@ -998,33 +1110,63 @@ Default value: `1800` ## Data types -### `Python::Loglevel` +### `Python::Loglevel` A version type to match all valid loglevels for python -Alias of `Enum['debug', 'info', 'warning', 'error', 'critical']` +Alias of + +```puppet +Enum['debug', 'info', 'warning', 'error', 'critical'] +``` -### `Python::Package::Ensure` +### `Python::Package::Ensure` A version type to match all valid package ensures for python -Alias of `Enum['absent', 'present', 'latest']` +Alias of -### `Python::Provider` +```puppet +Enum['absent', 'present', 'latest'] +``` + +### `Python::Provider` A version type to match all valid provider for python -Alias of `Enum['pip', 'scl', 'rhscl', 'anaconda', '']` +Alias of + +```puppet +Enum['pip', 'scl', 'rhscl', 'anaconda', ''] +``` -### `Python::Umask` +### `Python::Umask` A version type to match valid umask for python -Alias of `Pattern[/[0-7]{1,4}/]` +Alias of + +```puppet +Pattern[/[0-7]{1,4}/] +``` + +### `Python::Venv::PipVersion` -### `Python::Version` +A version type to ensure a specific Pip version in a virtual env. + +Alias of + +```puppet +Pattern[/^(<|>|<=|>=|==) [0-9]*(\.[0-9]+)*$/, /\Alatest\Z/] +``` + +### `Python::Version` A version type to match all valid versions for python -Alias of `Pattern[/\A(python)?[0-9](\.?[0-9])*/, /\Apypy\Z/, /\Asystem\Z/, /\Arh-python[0-9]{2}(?:-python)?\Z/]` +Alias of + +```puppet +Pattern[/\A(python)?[0-9](\.?[0-9])*/, /\Apypy\Z/, /\Asystem\Z/, /\Arh-python[0-9]{2}(?:-python)?\Z/] +``` diff --git a/metadata.json b/metadata.json index b86bb557..865dfbb4 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.1.1-rc0", + "version": "6.2.0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From 92ad355d1051aec77aac53e3dfcdd1655c13acf0 Mon Sep 17 00:00:00 2001 From: Christos Papageorgiou Date: Thu, 26 Aug 2021 17:25:40 +0300 Subject: [PATCH 027/158] [blacksmith] Bump version to 6.2.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 865dfbb4..b65cdc34 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.2.0", + "version": "6.2.1-rc0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From d72954ba192db503f5414a5825f0d1f106315468 Mon Sep 17 00:00:00 2001 From: Christos Papageorgiou Date: Fri, 27 Aug 2021 12:33:55 +0300 Subject: [PATCH 028/158] Modulesync 4.2.0 --- .editorconfig | 3 ++- .github/CONTRIBUTING.md | 2 +- .github/workflows/ci.yml | 31 +++++++++++++++++++++---------- .github/workflows/release.yml | 5 +++++ .gitignore | 3 +++ .msync.yml | 5 ++++- .overcommit.yml | 3 ++- .pmtignore | 3 +++ .rspec | 3 +++ .rspec_parallel | 3 +++ .rubocop.yml | 3 +++ .yardopts | 2 -- Dockerfile | 3 +++ Gemfile | 21 +++++++++++---------- Rakefile | 23 +++++++++++++++++------ spec/spec_helper.rb | 5 ++--- spec/spec_helper_acceptance.rb | 4 +++- 17 files changed, 86 insertions(+), 36 deletions(-) delete mode 100644 .yardopts diff --git a/.editorconfig b/.editorconfig index d77700e3..ecb10a80 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,7 @@ # editorconfig.org -# MANAGED BY MODULESYNC +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ root = true diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 887d571a..048d2b55 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -25,7 +25,7 @@ By participating in this project you agree to abide by its terms. * Fork the repo. * Create a separate branch for your change. -* We only take pull requests with passing tests, and documentation. [travis-ci](http://travis-ci.org) runs the tests for us. You can also execute them locally. This is explained [in a later section](#the-test-matrix). +* We only take pull requests with passing tests, and documentation. [GitHub Actions](https://docs.github.com/en/actions) run the tests for us. You can also execute them locally. This is explained [in a later section](#the-test-matrix). * Checkout [our docs](https://voxpupuli.org/docs/reviewing_pr/) we use to review a module and the [official styleguide](https://puppet.com/docs/puppet/6.0/style_guide.html). They provide some guidance for new code that might help you before you submit a pull request. * Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, please add a test. * Squash your commits down into logical components. Make sure to rebase against our current master. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 97ddc620..2ce5b055 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,7 @@ +--- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + name: CI on: pull_request @@ -8,20 +12,19 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 40 outputs: - beaker_setfiles: ${{ steps.get-outputs.outputs.beaker_setfiles }} - puppet_major_versions: ${{ steps.get-outputs.outputs.puppet_major_versions }} puppet_unit_test_matrix: ${{ steps.get-outputs.outputs.puppet_unit_test_matrix }} + github_action_test_matrix: ${{ steps.get-outputs.outputs.github_action_test_matrix }} env: - BUNDLE_WITHOUT: development:release + BUNDLE_WITHOUT: development:system_tests:release steps: - uses: actions/checkout@v2 - name: Setup ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '2.7' + ruby-version: '3.0' bundler-cache: true - - name: Run rake validate - run: bundle exec rake validate + - name: Run static validations + run: bundle exec rake validate lint check - name: Run rake rubocop run: bundle exec rake rubocop - name: Setup Test Matrix @@ -48,7 +51,7 @@ jobs: ruby-version: ${{ matrix.ruby }} bundler-cache: true - name: Run tests - run: bundle exec rake + run: bundle exec rake parallel_spec acceptance: needs: setup_matrix @@ -58,18 +61,26 @@ jobs: strategy: fail-fast: false matrix: - setfile: ${{fromJson(needs.setup_matrix.outputs.beaker_setfiles)}} - puppet: ${{fromJson(needs.setup_matrix.outputs.puppet_major_versions)}} + include: ${{fromJson(needs.setup_matrix.outputs.github_action_test_matrix)}} name: ${{ matrix.puppet.name }} - ${{ matrix.setfile.name }} steps: - uses: actions/checkout@v2 - name: Setup ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '2.7' + ruby-version: '3.0' bundler-cache: true - name: Run tests run: bundle exec rake beaker env: BEAKER_PUPPET_COLLECTION: ${{ matrix.puppet.collection }} BEAKER_setfile: ${{ matrix.setfile.value }} + + tests: + needs: + - unit + - acceptance + runs-on: ubuntu-latest + name: Test suite + steps: + - run: echo Test suite completed diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 68b85284..664ba694 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,3 +1,7 @@ +--- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + name: Release on: @@ -12,6 +16,7 @@ jobs: deploy: name: 'deploy to forge' runs-on: ubuntu-latest + if: github.repository_owner == 'voxpupuli' steps: - name: Checkout repository uses: actions/checkout@v2 diff --git a/.gitignore b/.gitignore index e9b3cf4b..9b95224c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + pkg/ Gemfile.lock Gemfile.local diff --git a/.msync.yml b/.msync.yml index 57ff5038..43966c2f 100644 --- a/.msync.yml +++ b/.msync.yml @@ -1,2 +1,5 @@ --- -modulesync_config_version: '4.1.0' +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + +modulesync_config_version: '4.2.0' diff --git a/.overcommit.yml b/.overcommit.yml index 0af0fdc0..d367adae 100644 --- a/.overcommit.yml +++ b/.overcommit.yml @@ -1,4 +1,5 @@ -# Managed by https://github.com/voxpupuli/modulesync_configs +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ # # Hooks are only enabled if you take action. # diff --git a/.pmtignore b/.pmtignore index 33a8c65d..65f50514 100644 --- a/.pmtignore +++ b/.pmtignore @@ -1,3 +1,6 @@ +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + docs/ pkg/ Gemfile diff --git a/.rspec b/.rspec index 8c18f1ab..f634583d 100644 --- a/.rspec +++ b/.rspec @@ -1,2 +1,5 @@ +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + --format documentation --color diff --git a/.rspec_parallel b/.rspec_parallel index e4d136b7..a9a84f85 100644 --- a/.rspec_parallel +++ b/.rspec_parallel @@ -1 +1,4 @@ +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + --format progress diff --git a/.rubocop.yml b/.rubocop.yml index 198a3599..53ac1898 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,3 +1,6 @@ --- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + inherit_gem: voxpupuli-test: rubocop.yml diff --git a/.yardopts b/.yardopts deleted file mode 100644 index 3687f518..00000000 --- a/.yardopts +++ /dev/null @@ -1,2 +0,0 @@ ---markup markdown ---output-dir docs/ diff --git a/Dockerfile b/Dockerfile index a51c6416..e3cf307f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,6 @@ +# MANAGED BY MODULESYNC +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + FROM ruby:2.7 WORKDIR /opt/puppet diff --git a/Gemfile b/Gemfile index f4855f64..a39114ce 100644 --- a/Gemfile +++ b/Gemfile @@ -1,9 +1,13 @@ +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + source ENV['GEM_SOURCE'] || "https://rubygems.org" group :test do - gem 'voxpupuli-test', '~> 2.1', :require => false - gem 'coveralls', :require => false - gem 'simplecov-console', :require => false + gem 'voxpupuli-test', '~> 2.5', :require => false + gem 'coveralls', :require => false + gem 'simplecov-console', :require => false + gem 'puppet_metadata', '~> 1.0', :require => false end group :development do @@ -12,22 +16,19 @@ group :development do end group :system_tests do - gem 'puppet_metadata', '~> 0.3.0', :require => false - gem 'voxpupuli-acceptance', :require => false + gem 'voxpupuli-acceptance', '~> 1.0', :require => false end group :release do - gem 'github_changelog_generator', '>= 1.16.1', :require => false - gem 'puppet-blacksmith', :require => false - gem 'voxpupuli-release', :require => false + gem 'github_changelog_generator', '>= 1.16.1', :require => false if RUBY_VERSION >= '2.5' + gem 'voxpupuli-release', '>= 1.0.2', :require => false gem 'puppet-strings', '>= 2.2', :require => false end -gem 'puppetlabs_spec_helper', '~> 2.0', :require => false gem 'rake', :require => false gem 'facter', ENV['FACTER_GEM_VERSION'], :require => false, :groups => [:test] -puppetversion = ENV['PUPPET_VERSION'] || '~> 6.0' +puppetversion = ENV['PUPPET_VERSION'] || '>= 6.0' gem 'puppet', puppetversion, :require => false, :groups => [:test] # vim: syntax=ruby diff --git a/Rakefile b/Rakefile index d1bf7491..80b799d6 100644 --- a/Rakefile +++ b/Rakefile @@ -1,9 +1,22 @@ +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + # Attempt to load voxupuli-test (which pulls in puppetlabs_spec_helper), # otherwise attempt to load it directly. begin require 'voxpupuli/test/rake' rescue LoadError - require 'puppetlabs_spec_helper/rake_tasks' + begin + require 'puppetlabs_spec_helper/rake_tasks' + rescue LoadError + end +end + +# load optional tasks for acceptance +# only available if gem group releases is installed +begin + require 'voxpupuli/acceptance/rake' +rescue LoadError end # load optional tasks for releases @@ -34,14 +47,12 @@ begin require 'github_changelog_generator/task' require 'puppet_blacksmith' GitHubChangelogGenerator::RakeTask.new :changelog do |config| - version = (Blacksmith::Modulefile.new).version - config.future_release = "v#{version}" if version =~ /^\d+\.\d+.\d+$/ + metadata = Blacksmith::Modulefile.new + config.future_release = "v#{metadata.version}" if metadata.version =~ /^\d+\.\d+.\d+$/ config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file.\nEach new release typically also includes the latest modulesync defaults.\nThese should not affect the functionality of the module." config.exclude_labels = %w{duplicate question invalid wontfix wont-fix modulesync skip-changelog} config.user = 'voxpupuli' - metadata_json = File.join(File.dirname(__FILE__), 'metadata.json') - metadata = JSON.load(File.read(metadata_json)) - config.project = metadata['name'] + config.project = metadata.metadata['name'] end # Workaround for https://github.com/github-changelog-generator/github-changelog-generator/issues/715 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d266f6b4..fb5f0cbe 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,6 +1,5 @@ -# This file is managed via modulesync -# https://github.com/voxpupuli/modulesync -# https://github.com/voxpupuli/modulesync_config +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ # puppetlabs_spec_helper will set up coverage if the env variable is set. # We want to do this if lib exists and it hasn't been explicitly set. diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index bec34fdd..d3b906bf 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -1,4 +1,6 @@ -# This file is completely managed via modulesync +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + require 'voxpupuli/acceptance/spec_helper_acceptance' configure_beaker From f962dc943a6b4cc070f02fd167369c6a0bfec367 Mon Sep 17 00:00:00 2001 From: Alex Cullen <62033527+acullenhms@users.noreply.github.com> Date: Fri, 27 Aug 2021 11:50:29 -0400 Subject: [PATCH 029/158] Add declared requirements install test (#1) Add unit test for verifying requirements installation to declared venv --- .../declared_requirements_install_spec.rb | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 spec/acceptance/declared_requirements_install_spec.rb diff --git a/spec/acceptance/declared_requirements_install_spec.rb b/spec/acceptance/declared_requirements_install_spec.rb new file mode 100644 index 00000000..185e6db2 --- /dev/null +++ b/spec/acceptance/declared_requirements_install_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper_acceptance' + +describe 'requirements' do + it 'checks declared requirements file is installed to venv' do + pp = <<-EOS + file { '/tmp/requirements.txt': + ensure => 'present', + content => 'requests', + } + + python::pyvenv { '/tmp/pyvenv': + ensure => 'present', + } + + python::requirements { '/tmp/requirements.txt': + virtualenv => '/tmp/pyvenv' + } + EOS + + apply_manifest(pp, catch_failures: true) + + expect(shell('/tmp/pyvenv/bin/pip3 list --no-index | grep requests').stdout).to match(%r{requests +\d+.\d+.\d+}) + end +end From 2d0da576a53fabce6ca86e0644b00e5d78d9c8d9 Mon Sep 17 00:00:00 2001 From: Tim Date: Sat, 18 Sep 2021 00:26:30 +0200 Subject: [PATCH 030/158] modulesync 4.2.0 --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ce5b055..d08d05e8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,10 @@ name: CI on: pull_request +concurrency: + group: ${{ github.head_ref }} + cancel-in-progress: true + jobs: setup_matrix: name: 'Setup Test Matrix' From 2db549d114648ba22a3824c9ba8b02bda0b16071 Mon Sep 17 00:00:00 2001 From: Kentaro Horio Date: Sun, 14 Nov 2021 21:06:30 +0900 Subject: [PATCH 031/158] remove duplicated args --- manifests/pip.pp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index 3935df72..352ea6a5 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -173,7 +173,7 @@ } $pip_install = "${pip_env} --log ${log}/pip.log install" - $pip_common_args = "${pypi_index} ${proxy_flag} ${install_args} ${install_editable} ${source}" + $pip_common_args = "${pypi_index} ${proxy_flag} ${install_editable} ${source}" # Explicit version out of VCS when PIP supported URL is provided if $source =~ /^'(git\+|hg\+|bzr\+|svn\+)(http|https|ssh|svn|sftp|ftp|lp|git)(:\/\/).+'$/ { @@ -195,7 +195,7 @@ 'present': { # Whatever version is available. - $command = "${pip_install} ${pip_common_args}" + $command = "${pip_install} ${install_args} ${pip_common_args}" $unless_command = "${pip_env} list | grep -i -e '${grep_regex}'" } @@ -214,7 +214,7 @@ $grep_regex_pkgname_with_dashes = "^${pkgname_with_dashes}==" $installed_version = join( ["${pip_env} freeze --all", " | grep -i -e ${grep_regex_pkgname_with_dashes} | cut -d= -f3", " | tr -d '[:space:]'",]) - $command = "${pip_install} --upgrade ${pip_common_args}" + $command = "${pip_install} --upgrade ${install_args} ${pip_common_args}" $unless_command = "[ \$(${latest_version}) = \$(${installed_version}) ]" } From 6aece7ee19ff8d710708b99fcdb494a728edec61 Mon Sep 17 00:00:00 2001 From: Kentaro Horio Date: Sun, 14 Nov 2021 22:09:37 +0900 Subject: [PATCH 032/158] fix expected command --- spec/defines/pip_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index a51e916a..2c815a08 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -68,7 +68,7 @@ context 'adds proxy to install command if proxy set' do let(:params) { { proxy: 'http://my.proxy:3128' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --proxy=http://my.proxy:3128 rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --proxy=http://my.proxy:3128 rpyc') } end end @@ -81,7 +81,7 @@ context 'adds index to install command if index set' do let(:params) { { index: 'http://www.example.com/simple/' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --index-url=http://www.example.com/simple/ rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --index-url=http://www.example.com/simple/ rpyc') } end end From 1318ea22b5fac4d9f019fbea6869de2db15d851f Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Mon, 15 Nov 2021 12:38:33 -0500 Subject: [PATCH 033/158] RHEL8 has a different package name --- manifests/params.pp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/manifests/params.pp b/manifests/params.pp index 32f13a72..a10e1eb4 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -42,7 +42,10 @@ } $gunicorn_package_name = $facts['os']['family'] ? { - 'RedHat' => 'python-gunicorn', + 'RedHat' => $facts['os']['release']['major'] ? { + '8' => 'python3-gunicorn', + default => 'python-gunicorn', + }, default => 'gunicorn', } } From 117b7411d0466953b2ffc7c7cf7e2f7a91a2ecf9 Mon Sep 17 00:00:00 2001 From: Yehuda Katz Date: Mon, 15 Nov 2021 22:44:50 -0500 Subject: [PATCH 034/158] Add gunicorn tests for RHEL7 and all tests for RHEL8 --- spec/classes/python_spec.rb | 83 ++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 4e2bc1ac..535796ee 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -1,5 +1,4 @@ require 'spec_helper' - describe 'python' do on_supported_os.each do |os, facts| next if os == 'gentoo-3-x86_64' @@ -240,6 +239,88 @@ it { is_expected.to contain_package('python-dev').with_name('python36-devel') } end end + + describe 'with manage_gunicorn' do + context 'true' do + let(:params) { { manage_gunicorn: true } } + + it { is_expected.to contain_package('gunicorn').with_name('python-gunicorn') } + end + context 'empty args' do + # let(:params) {{ :manage_gunicorn => '' }} + it { is_expected.to contain_package('gunicorn').with_name('python-gunicorn') } + end + context 'false' do + let(:params) { { manage_gunicorn: false } } + + it { is_expected.not_to contain_package('gunicorn') } + end + end + + describe 'with python::provider' do + context 'scl' do + describe 'with version' do + context '3.6 SCL meta package' do + let(:params) { { version: 'rh-python36' } } + + it { is_expected.to compile.with_all_deps } + end + context '3.6 SCL python package' do + let(:params) { { version: 'rh-python36-python' } } + + it { is_expected.to compile.with_all_deps } + end + end + describe 'with manage_scl' do + context 'true' do + let(:params) { { provider: 'scl', manage_scl: true } } + + it { is_expected.to contain_package('centos-release-scl') } + it { is_expected.to contain_package('scl-utils') } + end + context 'false' do + let(:params) { { provider: 'scl', manage_scl: false } } + + it { is_expected.not_to contain_package('centos-release-scl') } + it { is_expected.not_to contain_package('scl-utils') } + end + end + end + end + end + when '8' + context 'on a Redhat 8 OS' do + it { is_expected.to contain_class('python::install') } + it { is_expected.to contain_package('pip').with_name('python3-pip') } + + describe 'with python::version' do + context 'python36' do + let(:params) { { version: 'python36' } } + + it { is_expected.to compile.with_all_deps } + it { is_expected.to contain_package('pip').with_name('python36-pip') } + it { is_expected.to contain_package('python').with_name('python36') } + it { is_expected.to contain_package('python-dev').with_name('python36-devel') } + end + end + + describe 'with manage_gunicorn' do + context 'true' do + let(:params) { { manage_gunicorn: true } } + + it { is_expected.to contain_package('gunicorn').with_name('python3-gunicorn') } + end + context 'empty args' do + # let(:params) {{ :manage_gunicorn => '' }} + it { is_expected.to contain_package('gunicorn').with_name('python3-gunicorn') } + end + context 'false' do + let(:params) { { manage_gunicorn: false } } + + it { is_expected.not_to contain_package('gunicorn').with_name('python3-gunicorn') } + end + end + describe 'with python::provider' do context 'scl' do describe 'with version' do From fe1c01828a9be5c9d26f612f547a9536f65e4abb Mon Sep 17 00:00:00 2001 From: Kentaro Horio Date: Wed, 17 Nov 2021 00:53:32 +0900 Subject: [PATCH 035/158] add test for install_args --- spec/defines/pip_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index 2c815a08..7ef1c57d 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -94,6 +94,14 @@ end end + describe 'install_args as' do + context 'adds install_args to install command if install_args set' do + let(:params) { { install_args: '--pre' } } + + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --pre rpyc') } + end + end + describe 'install latest' do context 'does not use pip search in unless' do let(:params) { { ensure: 'latest' } } From 371dc10ca4ae6481565901511b73867ea5c65b58 Mon Sep 17 00:00:00 2001 From: Steve Traylen Date: Thu, 2 Dec 2021 16:31:23 +0100 Subject: [PATCH 036/158] Correct python::pip::environment parameter example The example for `python::pip{'cx_Oracle':...}` used and invalid environment parameter. --- REFERENCE.md | 2 +- manifests/pip.pp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 8a84e95d..34f99698 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -628,7 +628,7 @@ python::pip { 'cx_Oracle' : virtualenv => '/var/www/project1', owner => 'appuser', proxy => 'http://proxy.domain.com:3128', - environment => 'ORACLE_HOME=/usr/lib/oracle/11.2/client64', + environment => ['ORACLE_HOME=/usr/lib/oracle/11.2/client64'], install_args => '-e', timeout => 1800, } diff --git a/manifests/pip.pp b/manifests/pip.pp index 3935df72..d14b5093 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -33,7 +33,7 @@ # virtualenv => '/var/www/project1', # owner => 'appuser', # proxy => 'http://proxy.domain.com:3128', -# environment => 'ORACLE_HOME=/usr/lib/oracle/11.2/client64', +# environment => ['ORACLE_HOME=/usr/lib/oracle/11.2/client64'], # install_args => '-e', # timeout => 1800, # } From 2bf0d3815aef101afccd146cea910f21f28b6f10 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 10 Dec 2021 10:23:35 +0100 Subject: [PATCH 037/158] modulesync 5.1.0 --- .msync.yml | 2 +- .puppet-lint.rc | 3 +++ Gemfile | 4 ++-- Rakefile | 2 +- spec/spec_helper.rb | 10 +++++----- spec/spec_helper_acceptance.rb | 2 ++ 6 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 .puppet-lint.rc diff --git a/.msync.yml b/.msync.yml index 43966c2f..a83abd9b 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '4.2.0' +modulesync_config_version: '5.1.0' diff --git a/.puppet-lint.rc b/.puppet-lint.rc new file mode 100644 index 00000000..dd8272c7 --- /dev/null +++ b/.puppet-lint.rc @@ -0,0 +1,3 @@ +--fail-on-warnings +--no-parameter_documentation-check +--no-parameter_types-check diff --git a/Gemfile b/Gemfile index a39114ce..b6dcf456 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || "https://rubygems.org" group :test do - gem 'voxpupuli-test', '~> 2.5', :require => false + gem 'voxpupuli-test', '~> 5.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false gem 'puppet_metadata', '~> 1.0', :require => false @@ -21,7 +21,7 @@ end group :release do gem 'github_changelog_generator', '>= 1.16.1', :require => false if RUBY_VERSION >= '2.5' - gem 'voxpupuli-release', '>= 1.0.2', :require => false + gem 'voxpupuli-release', '>= 1.2.0', :require => false gem 'puppet-strings', '>= 2.2', :require => false end diff --git a/Rakefile b/Rakefile index 80b799d6..f92f0516 100644 --- a/Rakefile +++ b/Rakefile @@ -1,7 +1,7 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -# Attempt to load voxupuli-test (which pulls in puppetlabs_spec_helper), +# Attempt to load voxpupuli-test (which pulls in puppetlabs_spec_helper), # otherwise attempt to load it directly. begin require 'voxpupuli/test/rake' diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index fb5f0cbe..4d617f39 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,17 +1,17 @@ +# frozen_string_literal: true + # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ # puppetlabs_spec_helper will set up coverage if the env variable is set. # We want to do this if lib exists and it hasn't been explicitly set. -ENV['COVERAGE'] ||= 'yes' if Dir.exist?(File.expand_path('../../lib', __FILE__)) +ENV['COVERAGE'] ||= 'yes' if Dir.exist?(File.expand_path('../lib', __dir__)) require 'voxpupuli/test/spec_helper' if File.exist?(File.join(__dir__, 'default_module_facts.yml')) facts = YAML.safe_load(File.read(File.join(__dir__, 'default_module_facts.yml'))) - if facts - facts.each do |name, value| - add_custom_fact name.to_sym, value - end + facts&.each do |name, value| + add_custom_fact name.to_sym, value end end diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index d3b906bf..d3a6e23c 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ From 665f4dd2e53f79ae633d1dd6539f06d7962f57ab Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 10 Dec 2021 10:31:28 +0100 Subject: [PATCH 038/158] puppet-lint: fix params_empty_string_assignment --- REFERENCE.md | 12 ++++++------ manifests/pip.pp | 8 ++++---- manifests/requirements.pp | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 34f99698..6f4bc8aa 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -783,19 +783,19 @@ Default value: `1800` ##### `install_args` -Data type: `String` +Data type: `Optional[String[1]]` Any additional installation arguments that will be supplied when running pip install. -Default value: `''` +Default value: ``undef`` ##### `uninstall_args` -Data type: `String` +Data type: `Optional[String[1]]` Any additional arguments that will be supplied when running pip uninstall. -Default value: `''` +Default value: ``undef`` ##### `log_dir` @@ -1070,11 +1070,11 @@ Default value: ``undef`` ##### `extra_pip_args` -Data type: `String` +Data type: `Optional[String[1]]` Extra arguments to pass to pip after the requirements file -Default value: `''` +Default value: ``undef`` ##### `manage_requirements` diff --git a/manifests/pip.pp b/manifests/pip.pp index 183f1cdc..33c7faa4 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -62,8 +62,8 @@ Boolean $editable = false, Array $environment = [], Array $extras = [], - String $install_args = '', - String $uninstall_args = '', + Optional[String[1]] $install_args = undef, + Optional[String[1]] $uninstall_args = undef, Numeric $timeout = 1800, String[1] $log_dir = '/tmp', Array[String] $path = ['/usr/local/bin','/usr/bin','/bin', '/usr/sbin'], @@ -127,11 +127,11 @@ } # TODO: Do more robust argument checking, but below is a start - if ($ensure == absent) and ($install_args != '') { + if ($ensure == absent) and $install_args { fail('python::pip cannot provide install_args with ensure => absent') } - if ($ensure == present) and ($uninstall_args != '') { + if ($ensure == present) and $uninstall_args { fail('python::pip cannot provide uninstall_args with ensure => present') } diff --git a/manifests/requirements.pp b/manifests/requirements.pp index 9d245be3..0b191ea0 100644 --- a/manifests/requirements.pp +++ b/manifests/requirements.pp @@ -36,7 +36,7 @@ Array $environment = [], Boolean $forceupdate = false, Optional[Stdlib::Absolutepath] $cwd = undef, - String $extra_pip_args = '', + Optional[String[1]] $extra_pip_args = undef, Boolean $manage_requirements = true, Boolean $fix_requirements_owner = true, Stdlib::Absolutepath $log_dir = '/tmp', From ec5ec2df502965b91df484a2d0f7d21e540ba3a1 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 10 Dec 2021 10:38:34 +0100 Subject: [PATCH 039/158] rubocop: fix violations --- lib/facter/pip_version.rb | 2 ++ lib/facter/python_release.rb | 2 ++ lib/facter/python_version.rb | 2 ++ lib/facter/virtualenv_version.rb | 2 ++ spec/acceptance/class_spec.rb | 5 ++- spec/acceptance/facts_test_spec.rb | 6 ++-- spec/acceptance/pip_spec.rb | 4 +++ spec/acceptance/pyvenv_spec.rb | 2 ++ spec/classes/python_spec.rb | 38 ++++++++++++++++++--- spec/defines/dotfile_spec.rb | 9 ++++- spec/defines/gunicorn_spec.rb | 2 ++ spec/defines/pip_spec.rb | 14 +++++++- spec/defines/pyvenv_spec.rb | 11 +++--- spec/defines/requirements_spec.rb | 2 ++ spec/type_aliases/venv/pipversion_spec.rb | 6 ++-- spec/unit/facter/pip_version_spec.rb | 20 ++++++----- spec/unit/facter/python_release_spec.rb | 14 ++++---- spec/unit/facter/python_version_spec.rb | 14 ++++---- spec/unit/facter/virtualenv_version_spec.rb | 14 ++++---- 19 files changed, 125 insertions(+), 44 deletions(-) diff --git a/lib/facter/pip_version.rb b/lib/facter/pip_version.rb index 11db4d60..3303b237 100644 --- a/lib/facter/pip_version.rb +++ b/lib/facter/pip_version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Make pip version available as a fact def get_pip_version(executable) diff --git a/lib/facter/python_release.rb b/lib/facter/python_release.rb index 5013b5c3..fab88dbd 100644 --- a/lib/facter/python_release.rb +++ b/lib/facter/python_release.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Make python release available as facts def get_python_release(executable) diff --git a/lib/facter/python_version.rb b/lib/facter/python_version.rb index e21723bb..fe70684e 100644 --- a/lib/facter/python_version.rb +++ b/lib/facter/python_version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Make python versions available as facts def get_python_version(executable) diff --git a/lib/facter/virtualenv_version.rb b/lib/facter/virtualenv_version.rb index dbaba059..c8bfdab3 100644 --- a/lib/facter/virtualenv_version.rb +++ b/lib/facter/virtualenv_version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Make virtualenv version available as a fact Facter.add('virtualenv_version') do diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index 5caac95e..e700abc2 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper_acceptance' describe 'python class' do @@ -28,10 +30,11 @@ class { 'python': apply_manifest(pp, catch_failures: true) apply_manifest(pp, catch_changes: true) end + fact_notices = <<-EOS notify{"pip_version: ${facts['pip3_version']}":} notify{"python_version: ${facts['python3_version']}":} - EOS + EOS it 'outputs python facts when not installed' do apply_manifest(fact_notices, catch_failures: true) do |r| expect(r.stdout).to match(%r{python_version: 3\.\S+}) diff --git a/spec/acceptance/facts_test_spec.rb b/spec/acceptance/facts_test_spec.rb index 20f3c54a..b6393a79 100644 --- a/spec/acceptance/facts_test_spec.rb +++ b/spec/acceptance/facts_test_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper_acceptance' describe 'python class' do @@ -6,13 +8,13 @@ class { 'python' : pip => 'present', } - EOS + EOS fact_notices = <<-EOS notify{"pip_version: ${facts['pip_version']}":} notify{"system_python_version: ${facts['system_python_version']}":} notify{"python_version: ${facts['python_version']}":} - EOS + EOS # rubocop:disable RSpec/RepeatedExample it 'outputs python facts when not installed' do diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index f2da5ecd..a67eeafa 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper_acceptance' describe 'python::pip defined resource' do @@ -28,6 +30,7 @@ class { 'python': end end + # rubocop:disable RSpec/RepeatedExampleGroupDescription describe command('/opt/test-venv/bin/pip list') do its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } @@ -71,4 +74,5 @@ class { 'python': its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.not_to match %r{agent.* 0\.1\.2} } end + # rubocop:enable RSpec/RepeatedExampleGroupDescription end diff --git a/spec/acceptance/pyvenv_spec.rb b/spec/acceptance/pyvenv_spec.rb index a6234637..b8fb327a 100644 --- a/spec/acceptance/pyvenv_spec.rb +++ b/spec/acceptance/pyvenv_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper_acceptance' describe 'python::pyvenv defined resource with python 3' do diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 535796ee..c539d97e 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -1,7 +1,10 @@ +# frozen_string_literal: true + require 'spec_helper' describe 'python' do on_supported_os.each do |os, facts| next if os == 'gentoo-3-x86_64' + context "on #{os}" do let :facts do facts @@ -51,6 +54,7 @@ end end + # rubocop:disable RSpec/RepeatedExampleGroupDescription describe 'with python::dev' do context 'true' do let(:params) { { dev: 'present' } } @@ -58,6 +62,7 @@ it { is_expected.to compile.with_all_deps } it { is_expected.to contain_package('python-dev').with_ensure('present') } end + context 'empty/default' do it { is_expected.to compile.with_all_deps } it { is_expected.to contain_package('python-dev').with_ensure('absent') } @@ -117,8 +122,9 @@ it { is_expected.to contain_python__pyvenv('/opt/env1').with_ensure('present') } it { is_expected.to contain_python__pyvenv('/opt/env2').with_ensure('present') } + it { - is_expected.to contain_exec('python_virtualenv_/opt/env1'). + expect(subject).to contain_exec('python_virtualenv_/opt/env1'). with( command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade pip && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade setuptools', user: 'root', @@ -132,12 +138,13 @@ cwd: '/tmp', environment: [], timeout: 600, - unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env1\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env1/bin/activate$} + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\"\]\*/opt/env1\[\\"\\\\'\]\[\\t \]\*\$' /opt/env1/bin/activate$} ). that_requires('File[/opt/env1]') } + it { - is_expected.to contain_exec('python_virtualenv_/opt/env2'). + expect(subject).to contain_exec('python_virtualenv_/opt/env2'). with( command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade setuptools', user: 'root', @@ -151,10 +158,11 @@ cwd: '/tmp', environment: [], timeout: 600, - unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\\"\]\*/opt/env2\[\\\"\\\\'\]\[\\t \]\*\$' /opt/env2/bin/activate$} + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\"\]\*/opt/env2\[\\"\\\\'\]\[\\t \]\*\$' /opt/env2/bin/activate$} ). that_requires('File[/opt/env2]') } + it { is_expected.to contain_file('/opt/env1') } it { is_expected.to contain_file('/opt/env2') } end @@ -166,10 +174,12 @@ it { is_expected.to contain_package('gunicorn') } end + context 'empty args' do # let(:params) {{ :manage_gunicorn => '' }} it { is_expected.to contain_package('gunicorn') } end + context 'false' do let(:params) { { manage_gunicorn: false } } @@ -198,6 +208,7 @@ it { is_expected.to contain_package('python-dev').with_ensure('present') } end + context 'default/empty' do it { is_expected.to contain_package('python-dev').with_ensure('absent') } end @@ -246,10 +257,12 @@ it { is_expected.to contain_package('gunicorn').with_name('python-gunicorn') } end + context 'empty args' do # let(:params) {{ :manage_gunicorn => '' }} it { is_expected.to contain_package('gunicorn').with_name('python-gunicorn') } end + context 'false' do let(:params) { { manage_gunicorn: false } } @@ -265,12 +278,14 @@ it { is_expected.to compile.with_all_deps } end + context '3.6 SCL python package' do let(:params) { { version: 'rh-python36-python' } } it { is_expected.to compile.with_all_deps } end end + describe 'with manage_scl' do context 'true' do let(:params) { { provider: 'scl', manage_scl: true } } @@ -278,6 +293,7 @@ it { is_expected.to contain_package('centos-release-scl') } it { is_expected.to contain_package('scl-utils') } end + context 'false' do let(:params) { { provider: 'scl', manage_scl: false } } @@ -310,10 +326,12 @@ it { is_expected.to contain_package('gunicorn').with_name('python3-gunicorn') } end + context 'empty args' do # let(:params) {{ :manage_gunicorn => '' }} it { is_expected.to contain_package('gunicorn').with_name('python3-gunicorn') } end + context 'false' do let(:params) { { manage_gunicorn: false } } @@ -329,12 +347,14 @@ it { is_expected.to compile.with_all_deps } end + context '3.6 SCL python package' do let(:params) { { version: 'rh-python36-python' } } it { is_expected.to compile.with_all_deps } end end + describe 'with manage_scl' do context 'true' do let(:params) { { provider: 'scl', manage_scl: true } } @@ -342,6 +362,7 @@ it { is_expected.to contain_package('centos-release-scl') } it { is_expected.to contain_package('scl-utils') } end + context 'false' do let(:params) { { provider: 'scl', manage_scl: false } } @@ -371,6 +392,7 @@ it { is_expected.to contain_package('python-dev').with_ensure('present') } end + context 'empty/default' do it { is_expected.to contain_package('python-dev').with_ensure('absent') } end @@ -382,10 +404,12 @@ it { is_expected.to contain_package('gunicorn') } end + context 'empty args' do # let(:params) {{ :manage_gunicorn => '' }} it { is_expected.to contain_package('gunicorn') } end + context 'false' do let(:params) { { manage_gunicorn: false } } @@ -398,7 +422,7 @@ let(:params) { { provider: 'pip' } } it { - is_expected.to contain_package('pip').with( + expect(subject).to contain_package('pip').with( 'provider' => 'pip' ) } @@ -418,6 +442,7 @@ it { is_expected.to contain_package('python-dev').with_ensure('present') } end + context 'default/empty' do it { is_expected.to contain_package('python-dev').with_ensure('absent') } end @@ -445,10 +470,12 @@ it { is_expected.to contain_package('gunicorn') } end + context 'empty args' do # let(:params) {{ :manage_gunicorn => '' }} it { is_expected.to contain_package('gunicorn') } end + context 'false' do let(:params) { { manage_gunicorn: false } } @@ -468,3 +495,4 @@ end end end +# rubocop:enable RSpec/RepeatedExampleGroupDescription diff --git a/spec/defines/dotfile_spec.rb b/spec/defines/dotfile_spec.rb index d7d469e4..30ce21b3 100644 --- a/spec/defines/dotfile_spec.rb +++ b/spec/defines/dotfile_spec.rb @@ -1,8 +1,10 @@ +# frozen_string_literal: true + require 'spec_helper' describe 'python::dotfile', type: :define do on_supported_os.each do |os, facts| - context("on #{os} ") do + context("on #{os}") do let :facts do facts end @@ -13,23 +15,27 @@ it { is_expected.to raise_error(%r{Evaluation Error: Empty string title at 0. Title strings must have a length greater than zero.}) } end + context 'fails with incorrect mode' do let(:title) { '/etc/pip.conf' } let(:params) { { mode: 'not-a-mode' } } it { is_expected.to raise_error(%r{Evaluation Error: Error while evaluating a Resource}) } end + context 'succeeds with filename in existing path' do let(:title) { '/etc/pip.conf' } it { is_expected.to contain_file('/etc/pip.conf').with_mode('0644') } end + context 'succeeds with filename in a non-existing path' do let(:title) { '/home/someuser/.pip/pip.conf' } it { is_expected.to contain_exec('create /home/someuser/.pip/pip.conf\'s parent dir').with_command('install -o root -g root -d /home/someuser/.pip') } it { is_expected.to contain_file('/home/someuser/.pip/pip.conf').with_mode('0644') } end + context 'succeeds when set owner' do let(:title) { '/home/someuser/.pip/pip.conf' } let(:params) { { owner: 'someuser' } } @@ -37,6 +43,7 @@ it { is_expected.to contain_exec('create /home/someuser/.pip/pip.conf\'s parent dir').with_command('install -o someuser -g root -d /home/someuser/.pip') } it { is_expected.to contain_file('/home/someuser/.pip/pip.conf').with_owner('someuser') } end + context 'succeeds when set group set' do let(:title) { '/home/someuser/.pip/pip.conf' } let(:params) { { group: 'somegroup' } } diff --git a/spec/defines/gunicorn_spec.rb b/spec/defines/gunicorn_spec.rb index d2563054..13284087 100644 --- a/spec/defines/gunicorn_spec.rb +++ b/spec/defines/gunicorn_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe 'python::gunicorn', type: :define do diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index 7ef1c57d..5124c4ec 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -1,5 +1,8 @@ +# frozen_string_literal: true + require 'spec_helper' # rubocop:disable RSpec/MultipleDescribes +# rubocop:disable RSpec/RepeatedExampleGroupDescription describe 'python::pip', type: :define do let(:title) { 'rpyc' } @@ -25,13 +28,15 @@ context 'fails with non qualified path' do let(:params) { { virtualenv: 'venv' } } - it { is_expected.to raise_error(%r{expects a match for Variant\[Enum\['system'\].*Stdlib::Windowspath = Pattern\[\/.*\/\], Stdlib::Unixpath = Pattern\[\/.*\/\]\]}) } + it { is_expected.to raise_error(%r{expects a match for Variant\[Enum\['system'\].*Stdlib::Windowspath = Pattern\[/.*/\], Stdlib::Unixpath = Pattern\[/.*/\]\]}) } end + context 'suceeds with qualified path' do let(:params) { { virtualenv: '/opt/venv' } } it { is_expected.to contain_exec('pip_install_rpyc').with_cwd('/opt/venv') } end + context 'defaults to system' do let(:params) { {} } @@ -46,12 +51,14 @@ it { is_expected.to contain_exec('pip_install_rpyc').with_command(%r{pip}) } it { is_expected.not_to contain_exec('pip_install_rpyc').with_command(%r{pip3}) } end + context 'use pip instead of pip3 when specified' do let(:params) { { pip_provider: 'pip' } } it { is_expected.to contain_exec('pip_install_rpyc').with_command(%r{pip}) } it { is_expected.not_to contain_exec('pip_install_rpyc').with_command(%r{pip3}) } end + context 'use pip3 instead of pip when specified' do let(:params) { { pip_provider: 'pip3' } } @@ -65,6 +72,7 @@ it { is_expected.not_to contain_exec('pip_install_rpyc').with_command(%r{--proxy}) } end + context 'adds proxy to install command if proxy set' do let(:params) { { proxy: 'http://my.proxy:3128' } } @@ -78,6 +86,7 @@ it { is_expected.not_to contain_exec('pip_install_rpyc').with_command(%r{--index-url}) } end + context 'adds index to install command if index set' do let(:params) { { index: 'http://www.example.com/simple/' } } @@ -108,6 +117,7 @@ it { is_expected.not_to contain_exec('pip_install_rpyc').with_unless(%r{search}) } end + context 'checks installed version of a package by converting underscores in its name to dashes' do let(:params) { { ensure: 'latest', pkgname: 'wordpress_json' } } @@ -137,6 +147,7 @@ end describe 'python::pip', type: :define do + # rubocop:enable RSpec/RepeatedExampleGroupDescription let(:title) { 'requests' } context 'on Debian OS' do @@ -162,6 +173,7 @@ it { is_expected.to contain_exec('pip_install_requests').with_command('pip --log /tmp/pip.log install requests') } end + context 'succeeds with extras' do let(:params) { { extras: ['security'] } } diff --git a/spec/defines/pyvenv_spec.rb b/spec/defines/pyvenv_spec.rb index 36452839..5194c4e2 100644 --- a/spec/defines/pyvenv_spec.rb +++ b/spec/defines/pyvenv_spec.rb @@ -1,8 +1,11 @@ +# frozen_string_literal: true + require 'spec_helper' describe 'python::pyvenv', type: :define do on_supported_os.each do |os, facts| next if os == 'gentoo-3-x86_64' + context "on #{os}" do let :facts do # python3 is required to use pyvenv @@ -18,9 +21,7 @@ it { is_expected.to contain_file('/opt/env') } it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } - if %w[xenial bionic cosmic disco stretch buster].include?(facts[:lsbdistcodename]) - it { is_expected.to contain_package('python3.5-venv').that_comes_before('File[/opt/env]') } - end + it { is_expected.to contain_package('python3.5-venv').that_comes_before('File[/opt/env]') } if %w[xenial bionic cosmic disco stretch buster].include?(facts[:lsbdistcodename]) end describe 'when ensure' do @@ -32,10 +33,10 @@ end it { - is_expected.to contain_file('/opt/env').with_ensure('absent').with_purge(true) + expect(subject).to contain_file('/opt/env').with_ensure('absent').with_purge(true) } end end - end # context + end end end diff --git a/spec/defines/requirements_spec.rb b/spec/defines/requirements_spec.rb index 4e659b79..19f6832e 100644 --- a/spec/defines/requirements_spec.rb +++ b/spec/defines/requirements_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe 'python::requirements', type: :define do diff --git a/spec/type_aliases/venv/pipversion_spec.rb b/spec/type_aliases/venv/pipversion_spec.rb index 986eeb1e..920cf061 100644 --- a/spec/type_aliases/venv/pipversion_spec.rb +++ b/spec/type_aliases/venv/pipversion_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe 'Python::Venv::PipVersion' do @@ -26,7 +28,7 @@ ].each do |value| describe value.inspect do it { - is_expected.to allow_value(value) + expect(subject).to allow_value(value) } end end @@ -50,7 +52,7 @@ ].each do |value| describe value.inspect do it { - is_expected.not_to allow_value(value) + expect(subject).not_to allow_value(value) } end end diff --git a/spec/unit/facter/pip_version_spec.rb b/spec/unit/facter/pip_version_spec.rb index 379323ed..4d7df96a 100644 --- a/spec/unit/facter/pip_version_spec.rb +++ b/spec/unit/facter/pip_version_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Facter::Util::Fact do @@ -6,21 +8,21 @@ end let(:pip_version_output) do - <<-EOS -pip 6.0.6 from /opt/boxen/homebrew/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-6.0.6-py2.7.egg (python 2.7) -EOS + <<~EOS + pip 6.0.6 from /opt/boxen/homebrew/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-6.0.6-py2.7.egg (python 2.7) + EOS end let(:pip2_version_output) do - <<-EOS -pip 9.0.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7) -EOS + <<~EOS + pip 9.0.1 from /usr/lib/python2.7/dist-packages/pip (python 2.7) + EOS end let(:pip3_version_output) do - <<-EOS -pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7) -EOS + <<~EOS + pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7) + EOS end describe 'pip_version' do diff --git a/spec/unit/facter/python_release_spec.rb b/spec/unit/facter/python_release_spec.rb index e6870b9f..d8ec3e5d 100644 --- a/spec/unit/facter/python_release_spec.rb +++ b/spec/unit/facter/python_release_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Facter::Util::Fact do @@ -6,14 +8,14 @@ end let(:python2_version_output) do - <<-EOS -Python 2.7.9 -EOS + <<~EOS + Python 2.7.9 + EOS end let(:python3_version_output) do - <<-EOS -Python 3.3.0 -EOS + <<~EOS + Python 3.3.0 + EOS end describe 'python_release' do diff --git a/spec/unit/facter/python_version_spec.rb b/spec/unit/facter/python_version_spec.rb index db302b27..922cb3d6 100644 --- a/spec/unit/facter/python_version_spec.rb +++ b/spec/unit/facter/python_version_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Facter::Util::Fact do @@ -6,14 +8,14 @@ end let(:python2_version_output) do - <<-EOS -Python 2.7.9 -EOS + <<~EOS + Python 2.7.9 + EOS end let(:python3_version_output) do - <<-EOS -Python 3.3.0 -EOS + <<~EOS + Python 3.3.0 + EOS end describe 'python_version' do diff --git a/spec/unit/facter/virtualenv_version_spec.rb b/spec/unit/facter/virtualenv_version_spec.rb index 3cfd4c99..a6298c1f 100644 --- a/spec/unit/facter/virtualenv_version_spec.rb +++ b/spec/unit/facter/virtualenv_version_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper' describe Facter::Util::Fact do @@ -6,15 +8,15 @@ end let(:virtualenv_old_version_output) do - <<-EOS -12.0.7 -EOS + <<~EOS + 12.0.7 + EOS end let(:virtualenv_new_version_output) do - <<-EOS -virtualenv 20.0.17 from /opt/python/lib/python3.5/site-packages/virtualenv/__init__.py -EOS + <<~EOS + virtualenv 20.0.17 from /opt/python/lib/python3.5/site-packages/virtualenv/__init__.py + EOS end describe 'virtualenv_version old' do From 08898ae8032411c323cd08dcb134160ba7241a4e Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 10 Dec 2021 10:45:07 +0100 Subject: [PATCH 040/158] Enforce types for all params --- .puppet-lint.rc | 1 - .sync.yml | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.puppet-lint.rc b/.puppet-lint.rc index dd8272c7..558d766b 100644 --- a/.puppet-lint.rc +++ b/.puppet-lint.rc @@ -1,3 +1,2 @@ --fail-on-warnings --no-parameter_documentation-check ---no-parameter_types-check diff --git a/.sync.yml b/.sync.yml index 5d21319c..4fa6b004 100644 --- a/.sync.yml +++ b/.sync.yml @@ -1,3 +1,6 @@ --- spec/spec_helper_acceptance.rb: unmanaged: false +.puppet-lint.rc: + enabled_lint_checks: + - parameter_types From 0fd8fed936e76788e813efb8e5efe7631450fa93 Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 10 Dec 2021 11:27:10 +0100 Subject: [PATCH 041/158] Release 6.2.1 --- CHANGELOG.md | 18 ++++++++++++++++++ metadata.json | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ba619d2..b788395b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,24 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v6.2.1](https://github.com/voxpupuli/puppet-python/tree/v6.2.1) (2021-12-10) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.2.0...v6.2.1) + +**Fixed bugs:** + +- Correct python::pip::environment parameter example [\#629](https://github.com/voxpupuli/puppet-python/pull/629) ([traylenator](https://github.com/traylenator)) +- gunicorn: RHEL8 has a different package name [\#628](https://github.com/voxpupuli/puppet-python/pull/628) ([yakatz](https://github.com/yakatz)) +- Remove duplicate arguments in the pip install command [\#627](https://github.com/voxpupuli/puppet-python/pull/627) ([zanyou](https://github.com/zanyou)) + +**Closed issues:** + +- Package with provider pip3 tries installing every run. [\#626](https://github.com/voxpupuli/puppet-python/issues/626) + +**Merged pull requests:** + +- modulesync 5.1.0 & puppet-lint: fix params\_empty\_string\_assignment [\#631](https://github.com/voxpupuli/puppet-python/pull/631) ([bastelfreak](https://github.com/bastelfreak)) + ## [v6.2.0](https://github.com/voxpupuli/puppet-python/tree/v6.2.0) (2021-08-26) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.1.0...v6.2.0) diff --git a/metadata.json b/metadata.json index b65cdc34..24fd6ac3 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.2.1-rc0", + "version": "6.2.1", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From f87c9c2963be633394dad44a1a8ed047291f838a Mon Sep 17 00:00:00 2001 From: Tim Date: Fri, 10 Dec 2021 11:38:43 +0100 Subject: [PATCH 042/158] [blacksmith] Bump version to 6.2.2-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 24fd6ac3..740f76d8 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.2.1", + "version": "6.2.2-rc0", "author": "Vox Pupuli", "summary": "Python Module", "license": "Apache-2.0", From b8c374167ec7013f35e1473699812a9c4c4d751e Mon Sep 17 00:00:00 2001 From: Alex Cullen Date: Tue, 4 Jan 2022 15:55:04 -0500 Subject: [PATCH 043/158] use ensure_package instead of package for python install (test) --- manifests/install.pp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 4645bdcb..dd827e36 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -36,10 +36,15 @@ } if $python::manage_python_package { - package { 'python': - ensure => $python::ensure, - name => $python, - } + ensure_package({ + 'python' => { + ensure => $python::ensure + } + }) + # package { 'python': + # ensure => $python::ensure, + # name => $python, + # } } case $python::provider { From 680bd8c83351e27aa574d11b2c3cb80d3f8338f5 Mon Sep 17 00:00:00 2001 From: Alex Cullen Date: Tue, 4 Jan 2022 16:12:38 -0500 Subject: [PATCH 044/158] revert use ensure_package instead of package for python install (test) --- manifests/install.pp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index dd827e36..4645bdcb 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -36,15 +36,10 @@ } if $python::manage_python_package { - ensure_package({ - 'python' => { - ensure => $python::ensure - } - }) - # package { 'python': - # ensure => $python::ensure, - # name => $python, - # } + package { 'python': + ensure => $python::ensure, + name => $python, + } } case $python::provider { From bba491a573506e4cb58e5a930f2c2dd34e8fd4f4 Mon Sep 17 00:00:00 2001 From: Alex Cullen Date: Tue, 22 Feb 2022 14:06:51 -0500 Subject: [PATCH 045/158] replace all package declarations with ensure_packages() --- manifests/install.pp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 4645bdcb..a3daef14 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -36,26 +36,26 @@ } if $python::manage_python_package { - package { 'python': + ensure_packages (['python'], ensure => $python::ensure, name => $python, - } + ) } case $python::provider { 'pip': { if $python::manage_pip_package { - package { 'pip': + ensure_packages (['pip'], ensure => $pip_ensure, require => Package['python'], - } + ) } if $pythondev { - package { 'python-dev': + ensure_packages (['python-dev'], ensure => $dev_ensure, name => $pythondev, - } + ) } # Respect the $pip_ensure setting @@ -182,28 +182,28 @@ } if $pythondev { - package { 'python-dev': - ensure => $dev_ensure, - name => $pythondev, - alias => $pythondev, + ensure_packages (['python-dev'], + ensure => $dev_ensure, + name => $pythondev, + alias => $pythondev, provider => 'yum', - } + ) } } default: { if $python::manage_pip_package { - package { 'pip': + ensure_packages (['pip'], ensure => $pip_ensure, require => Package['python'], - } + ) } if $pythondev { - package { 'python-dev': + ensure_packages (['python-dev'], ensure => $dev_ensure, name => $pythondev, alias => $pythondev, - } + ) } } } From 4cf8bee172cd82510d2a205280315b64fddd325d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Fr=C3=B6hner?= Date: Mon, 16 Nov 2020 10:48:34 +0100 Subject: [PATCH 046/158] Add python-venv installation --- REFERENCE.md | 49 ++++++++++++++++++++++------- manifests/init.pp | 6 ++++ manifests/install.pp | 57 ++++++++++++++++------------------ manifests/params.pp | 3 +- manifests/pyvenv.pp | 17 +++------- spec/acceptance/class_spec.rb | 1 + spec/acceptance/pyvenv_spec.rb | 5 +++ spec/classes/python_spec.rb | 22 ++++++++++++- spec/defines/pyvenv_spec.rb | 4 +-- types/loglevel.pp | 2 +- types/package/ensure.pp | 2 +- types/provider.pp | 2 +- types/umask.pp | 2 +- types/version.pp | 2 +- 14 files changed, 110 insertions(+), 64 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 6f4bc8aa..3a5caa87 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -27,12 +27,12 @@ ### Data types -* [`Python::Loglevel`](#pythonloglevel): A version type to match all valid loglevels for python -* [`Python::Package::Ensure`](#pythonpackageensure): A version type to match all valid package ensures for python -* [`Python::Provider`](#pythonprovider): A version type to match all valid provider for python -* [`Python::Umask`](#pythonumask): A version type to match valid umask for python +* [`Python::Loglevel`](#pythonloglevel): Match all valid loglevels for python +* [`Python::Package::Ensure`](#pythonpackageensure): Match all valid package ensures for python +* [`Python::Provider`](#pythonprovider): Match all valid provider for python +* [`Python::Umask`](#pythonumask): Match valid umask for python * [`Python::Venv::PipVersion`](#pythonvenvpipversion): A version type to ensure a specific Pip version in a virtual env. -* [`Python::Version`](#pythonversion): A version type to match all valid versions for python +* [`Python::Version`](#pythonversion): Match all valid versions for python ## Classes @@ -77,8 +77,11 @@ The following parameters are available in the `python` class: * [`use_epel`](#use_epel) * [`manage_scl`](#manage_scl) * [`umask`](#umask) +* [`manage_gunicorn`](#manage_gunicorn) * [`manage_python_package`](#manage_python_package) +* [`manage_venv_package`](#manage_venv_package) * [`manage_pip_package`](#manage_pip_package) +* [`venv`](#venv) * [`gunicorn_package_name`](#gunicorn_package_name) * [`python_pips`](#python_pips) * [`python_pyvenvs`](#python_pyvenvs) @@ -175,22 +178,44 @@ The default umask for invoked exec calls. Default value: ``undef`` +##### `manage_gunicorn` + +manage the state for package gunicorn + +Default value: `$python::params::manage_gunicorn` + ##### `manage_python_package` Data type: `Boolean` - +manage the state for package python Default value: `$python::params::manage_python_package` -##### `manage_pip_package` +##### `manage_venv_package` Data type: `Boolean` +manage the state for package venv +Default value: `$python::params::manage_venv_package` + +##### `manage_pip_package` + +Data type: `Boolean` + +manage the state for package pip Default value: `$python::params::manage_pip_package` +##### `venv` + +Data type: `Python::Package::Ensure` + + + +Default value: `$python::params::venv` + ##### `gunicorn_package_name` Data type: `String[1]` @@ -1112,7 +1137,7 @@ Default value: `1800` ### `Python::Loglevel` -A version type to match all valid loglevels for python +Match all valid loglevels for python Alias of @@ -1122,7 +1147,7 @@ Enum['debug', 'info', 'warning', 'error', 'critical'] ### `Python::Package::Ensure` -A version type to match all valid package ensures for python +Match all valid package ensures for python Alias of @@ -1132,7 +1157,7 @@ Enum['absent', 'present', 'latest'] ### `Python::Provider` -A version type to match all valid provider for python +Match all valid provider for python Alias of @@ -1142,7 +1167,7 @@ Enum['pip', 'scl', 'rhscl', 'anaconda', ''] ### `Python::Umask` -A version type to match valid umask for python +Match valid umask for python Alias of @@ -1162,7 +1187,7 @@ Pattern[/^(<|>|<=|>=|==) [0-9]*(\.[0-9]+)*$/, /\Alatest\Z/] ### `Python::Version` -A version type to match all valid versions for python +Match all valid versions for python Alias of diff --git a/manifests/init.pp b/manifests/init.pp index 74da7eb6..3c5ed97a 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -17,6 +17,10 @@ # @param use_epel to determine if the epel class is used. # @param manage_scl Whether to manage core SCL packages or not. # @param umask The default umask for invoked exec calls. +# @param manage_gunicorn manage the state for package gunicorn +# @param manage_python_package manage the state for package python +# @param manage_venv_package manage the state for package venv +# @param manage_pip_package manage the state for package pip # # @example install python from system python # class { 'python': @@ -37,9 +41,11 @@ Python::Version $version = '3', Python::Package::Ensure $pip = $python::params::pip, Python::Package::Ensure $dev = $python::params::dev, + Python::Package::Ensure $venv = $python::params::venv, Python::Package::Ensure $gunicorn = $python::params::gunicorn, Boolean $manage_gunicorn = $python::params::manage_gunicorn, Boolean $manage_python_package = $python::params::manage_python_package, + Boolean $manage_venv_package = $python::params::manage_venv_package, Boolean $manage_pip_package = $python::params::manage_pip_package, String[1] $gunicorn_package_name = $python::params::gunicorn_package_name, Optional[Python::Provider] $provider = $python::params::provider, diff --git a/manifests/install.pp b/manifests/install.pp index af4a26ff..775edb7e 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -23,18 +23,6 @@ 'Suse' => "${python}-devel", } - $pip_ensure = $python::pip ? { - true => 'present', - false => 'absent', - default => $python::pip, - } - - $dev_ensure = $python::dev ? { - true => 'present', - false => 'absent', - default => $python::dev, - } - if $python::manage_python_package { package { 'python': ensure => $python::ensure, @@ -42,24 +30,37 @@ } } + if $python::manage_venv_package { + ## + ## CentOS has no extra package for venv + ## + unless $facts['os']['name'] == 'CentOS' { + package { 'python-venv': + ensure => $python::venv, + name => "${python}-venv", + require => Package['python'], + } + } + } + case $python::provider { 'pip': { if $python::manage_pip_package { package { 'pip': - ensure => $pip_ensure, + ensure => $python::pip, require => Package['python'], } } if $pythondev { package { 'python-dev': - ensure => $dev_ensure, + ensure => $python::dev, name => $pythondev, } } - # Respect the $pip_ensure setting - unless $pip_ensure == 'absent' { + # Respect the $python::pip setting + unless $python::pip == 'absent' { # Install pip without pip, see https://pip.pypa.io/en/stable/installing/. include python::pip::bootstrap @@ -93,16 +94,16 @@ Package['scl-utils'] -> Package["${python}-scldevel"] - if $pip_ensure != 'absent' { + if $python::pip != 'absent' { Package['scl-utils'] -> Exec['python-scl-pip-install'] } } package { "${python}-scldevel": - ensure => $dev_ensure, + ensure => $python::dev, } - if $pip_ensure != 'absent' { + if $python::pip != 'absent' { exec { 'python-scl-pip-install': command => "${python::exec_prefix}easy_install pip", path => ['/usr/bin', '/bin'], @@ -126,17 +127,13 @@ tag => 'python-scl-package', } - Package <| title == 'virtualenv' |> { - name => "${python}-python-virtualenv", - } - package { "${python}-scldevel": - ensure => $dev_ensure, + ensure => $python::dev, tag => 'python-scl-package', } package { "${python}-python-pip": - ensure => $pip_ensure, + ensure => $python::pip, tag => 'python-pip-package', } @@ -174,7 +171,7 @@ } else { if $python::manage_pip_package { package { 'python-pip': - ensure => $pip_ensure, + ensure => $python::pip, require => Package['python'], provider => 'yum', } @@ -183,7 +180,7 @@ if $pythondev { package { 'python-dev': - ensure => $dev_ensure, + ensure => $python::dev, name => $pythondev, alias => $pythondev, provider => 'yum', @@ -193,14 +190,14 @@ default: { if $python::manage_pip_package { package { 'pip': - ensure => $pip_ensure, + ensure => $python::pip, require => Package['python'], } } if $pythondev { package { 'python-dev': - ensure => $dev_ensure, + ensure => $python::dev, name => $pythondev, alias => $pythondev, } @@ -209,7 +206,7 @@ } if $facts['os']['family'] == 'RedHat' { - if $pip_ensure != 'absent' and $python::use_epel and ($python::manage_pip_package or $python::manage_python_package) { + if $python::pip != 'absent' and $python::use_epel and ($python::manage_pip_package or $python::manage_python_package) { require epel } } diff --git a/manifests/params.pp b/manifests/params.pp index a10e1eb4..6650bfaf 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -13,10 +13,11 @@ $pip = 'present' $dev = 'absent' $virtualenv = 'absent' + $venv = 'absent' $gunicorn = 'absent' $manage_gunicorn = true $manage_python_package = true - $manage_virtualenv_package = true + $manage_venv_package = true $manage_pip_package = true $provider = undef $valid_versions = undef diff --git a/manifests/pyvenv.pp b/manifests/pyvenv.pp index ca710015..bbc05277 100644 --- a/manifests/pyvenv.pp +++ b/manifests/pyvenv.pp @@ -44,14 +44,6 @@ $python_version_parts = split($python_version, '[.]') $normalized_python_version = sprintf('%s.%s', $python_version_parts[0], $python_version_parts[1]) - # Debian splits the venv module into a seperate package - if ( $facts['os']['family'] == 'Debian') { - $python3_venv_package = "python${normalized_python_version}-venv" - ensure_packages($python3_venv_package) - - Package[$python3_venv_package] -> File[$venv_dir] - } - # pyvenv is deprecated since 3.6 and will be removed in 3.8 if versioncmp($normalized_python_version, '3.6') >=0 { $virtualenv_cmd = "${python::exec_prefix}python${normalized_python_version} -m venv" @@ -71,10 +63,11 @@ } file { $venv_dir: - ensure => directory, - owner => $owner, - group => $group, - mode => $mode, + ensure => directory, + owner => $owner, + group => $group, + mode => $mode, + require => Class['python::install'], } $pip_cmd = "${python::exec_prefix}${venv_dir}/bin/pip" diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index e700abc2..d573a055 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -23,6 +23,7 @@ class { 'python': version => '3', pip => 'present', dev => 'present', + venv => 'present', } EOS diff --git a/spec/acceptance/pyvenv_spec.rb b/spec/acceptance/pyvenv_spec.rb index b8fb327a..ac778f21 100644 --- a/spec/acceptance/pyvenv_spec.rb +++ b/spec/acceptance/pyvenv_spec.rb @@ -10,6 +10,7 @@ class { 'python': version => '3', dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -42,6 +43,7 @@ class { 'python': class { 'python': version => '3', dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -82,6 +84,7 @@ class { 'python': class { 'python': version => '3', dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -119,6 +122,7 @@ class { 'python': class { 'python': version => '3', dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -156,6 +160,7 @@ class { 'python': class { 'python': version => '3', dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index c539d97e..279fffaa 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -17,19 +17,39 @@ it { is_expected.to contain_class('python::config') } it { is_expected.to contain_package('python') } it { is_expected.to contain_package('pip') } + + it { is_expected.to contain_package('python-venv') } unless facts[:os]['name'] == 'CentOS' end context 'without managing things' do let :params do { manage_python_package: false, - manage_pip_package: false + manage_pip_package: false, + manage_venv_package: false } end it { is_expected.to compile.with_all_deps } it { is_expected.not_to contain_package('python') } it { is_expected.not_to contain_package('pip') } + it { is_expected.not_to contain_package('python-venv') } + end + + context 'with packages present' do + let :params do + { + manage_pip_package: true, + manage_venv_package: true, + pip: 'present', + venv: 'present' + } + end + + it { is_expected.to compile.with_all_deps } + it { is_expected.to contain_package('pip').with(ensure: 'present') } + + it { is_expected.to contain_package('python-venv').with(ensure: 'present') } unless facts[:os]['name'] == 'CentOS' end case facts[:os]['family'] diff --git a/spec/defines/pyvenv_spec.rb b/spec/defines/pyvenv_spec.rb index 5194c4e2..7bc623b2 100644 --- a/spec/defines/pyvenv_spec.rb +++ b/spec/defines/pyvenv_spec.rb @@ -18,10 +18,8 @@ end context 'with default parameters' do - it { is_expected.to contain_file('/opt/env') } + it { is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') } it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } - - it { is_expected.to contain_package('python3.5-venv').that_comes_before('File[/opt/env]') } if %w[xenial bionic cosmic disco stretch buster].include?(facts[:lsbdistcodename]) end describe 'when ensure' do diff --git a/types/loglevel.pp b/types/loglevel.pp index 3cdb653d..849c2236 100644 --- a/types/loglevel.pp +++ b/types/loglevel.pp @@ -1,3 +1,3 @@ -# @summary A version type to match all valid loglevels for python +# @summary Match all valid loglevels for python # type Python::Loglevel = Enum['debug', 'info', 'warning', 'error', 'critical'] diff --git a/types/package/ensure.pp b/types/package/ensure.pp index 1eb13b82..34189e4b 100644 --- a/types/package/ensure.pp +++ b/types/package/ensure.pp @@ -1,3 +1,3 @@ -# @summary A version type to match all valid package ensures for python +# @summary Match all valid package ensures for python # type Python::Package::Ensure = Enum['absent', 'present', 'latest'] diff --git a/types/provider.pp b/types/provider.pp index 8c7dfd65..68fd7ff6 100644 --- a/types/provider.pp +++ b/types/provider.pp @@ -1,3 +1,3 @@ -# @summary A version type to match all valid provider for python +# @summary Match all valid provider for python # type Python::Provider = Enum['pip', 'scl', 'rhscl', 'anaconda', ''] diff --git a/types/umask.pp b/types/umask.pp index 11296cd0..39038093 100644 --- a/types/umask.pp +++ b/types/umask.pp @@ -1,3 +1,3 @@ -# @summary A version type to match valid umask for python +# @summary Match valid umask for python # type Python::Umask = Pattern[/[0-7]{1,4}/] diff --git a/types/version.pp b/types/version.pp index e0023aef..5bbcaaa8 100644 --- a/types/version.pp +++ b/types/version.pp @@ -1,4 +1,4 @@ -# @summary A version type to match all valid versions for python +# @summary Match all valid versions for python # type Python::Version = Pattern[ /\A(python)?[0-9](\.?[0-9])*/, From 21e0c4fa3176005bd7726455b51c767ada277e2e Mon Sep 17 00:00:00 2001 From: Vadym Chepkov Date: Mon, 4 Apr 2022 18:51:42 -0400 Subject: [PATCH 047/158] allow puppet/epel v4 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 740f76d8..bdfdb6c5 100644 --- a/metadata.json +++ b/metadata.json @@ -76,7 +76,7 @@ }, { "name": "puppet/epel", - "version_requirement": ">= 3.0.0 < 4.0.0" + "version_requirement": ">= 3.0.0 < 5.0.0" } ] } From a69f7121bf75ec4d9c0748677bc8d1df7be2aad9 Mon Sep 17 00:00:00 2001 From: Vadym Chepkov Date: Mon, 4 Apr 2022 18:48:59 -0400 Subject: [PATCH 048/158] cleanup references to obsolete virtualenv parameter/command --- examples/gunicorn.pp | 5 +-- examples/init.pp | 5 +-- examples/pip.pp | 5 +-- examples/requirements.pp | 5 +-- examples/virtualenv.pp | 13 ------ lib/facter/virtualenv_version.rb | 12 ------ manifests/params.pp | 1 - metadata.json | 4 +- spec/unit/facter/virtualenv_version_spec.rb | 48 --------------------- 9 files changed, 9 insertions(+), 89 deletions(-) delete mode 100644 examples/virtualenv.pp delete mode 100644 lib/facter/virtualenv_version.rb delete mode 100644 spec/unit/facter/virtualenv_version_spec.rb diff --git a/examples/gunicorn.pp b/examples/gunicorn.pp index 9308f000..c83a8224 100644 --- a/examples/gunicorn.pp +++ b/examples/gunicorn.pp @@ -1,7 +1,6 @@ class { 'python': - version => 'system', - dev => true, - virtualenv => true, + version => 'system', + dev => true, } python::gunicorn { 'vhost': diff --git a/examples/init.pp b/examples/init.pp index 4c51cc80..ab934fa9 100644 --- a/examples/init.pp +++ b/examples/init.pp @@ -1,5 +1,4 @@ class { 'python': - version => 'system', - dev => true, - virtualenv => true, + version => 'system', + dev => true, } diff --git a/examples/pip.pp b/examples/pip.pp index f0db1728..a65be945 100644 --- a/examples/pip.pp +++ b/examples/pip.pp @@ -1,7 +1,6 @@ class { 'python': - version => 'system', - dev => true, - virtualenv => true, + version => 'system', + dev => true, } python::pip { 'flask': diff --git a/examples/requirements.pp b/examples/requirements.pp index 90dccd8b..4dcf289e 100644 --- a/examples/requirements.pp +++ b/examples/requirements.pp @@ -1,7 +1,6 @@ class { 'python': - version => 'system', - dev => true, - virtualenv => true, + version => 'system', + dev => true, } python::requirements { '/var/www/project1/requirements.txt': diff --git a/examples/virtualenv.pp b/examples/virtualenv.pp deleted file mode 100644 index da5ab57c..00000000 --- a/examples/virtualenv.pp +++ /dev/null @@ -1,13 +0,0 @@ -class { 'python': - version => 'system', - dev => true, - virtualenv => true, -} - -python::virtualenv { '/var/www/project1': - ensure => present, - version => 'system', - requirements => '/var/www/project1/requirements.txt', - proxy => 'http://proxy.domain.com:3128', - systempkgs => true, -} diff --git a/lib/facter/virtualenv_version.rb b/lib/facter/virtualenv_version.rb deleted file mode 100644 index c8bfdab3..00000000 --- a/lib/facter/virtualenv_version.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -# Make virtualenv version available as a fact - -Facter.add('virtualenv_version') do - setcode do - if Facter::Util::Resolution.which('virtualenv') - results = Facter::Util::Resolution.exec('virtualenv --version 2>&1').match(%r{(\d+\.\d+\.?\d*).*$}) - results[1] if results - end - end -end diff --git a/manifests/params.pp b/manifests/params.pp index 6650bfaf..e69d4c43 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -12,7 +12,6 @@ $ensure = 'present' $pip = 'present' $dev = 'absent' - $virtualenv = 'absent' $venv = 'absent' $gunicorn = 'absent' $manage_gunicorn = true diff --git a/metadata.json b/metadata.json index bdfdb6c5..fb6434c7 100644 --- a/metadata.json +++ b/metadata.json @@ -2,16 +2,14 @@ "name": "puppet-python", "version": "6.2.2-rc0", "author": "Vox Pupuli", - "summary": "Python Module", + "summary": "Puppet module for Python", "license": "Apache-2.0", "source": "https://github.com/voxpupuli/puppet-python.git", "project_page": "https://github.com/voxpupuli/puppet-python", "issues_url": "https://github.com/voxpupuli/puppet-python/issues", - "description": "Puppet module for Python", "tags": [ "python", "pip", - "virtualenv", "gunicorn" ], "operatingsystem_support": [ diff --git a/spec/unit/facter/virtualenv_version_spec.rb b/spec/unit/facter/virtualenv_version_spec.rb deleted file mode 100644 index a6298c1f..00000000 --- a/spec/unit/facter/virtualenv_version_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Facter::Util::Fact do - before do - Facter.clear - end - - let(:virtualenv_old_version_output) do - <<~EOS - 12.0.7 - EOS - end - - let(:virtualenv_new_version_output) do - <<~EOS - virtualenv 20.0.17 from /opt/python/lib/python3.5/site-packages/virtualenv/__init__.py - EOS - end - - describe 'virtualenv_version old' do - context 'returns virtualenv version when virtualenv present' do - it do - allow(Facter::Util::Resolution).to receive(:which).with('virtualenv').and_return(true) - allow(Facter::Util::Resolution).to receive(:exec).with('virtualenv --version 2>&1').and_return(virtualenv_old_version_output) - expect(Facter.value(:virtualenv_version)).to eq('12.0.7') - end - end - - context 'returns nil when virtualenv not present' do - it do - allow(Facter::Util::Resolution).to receive(:which).with('virtualenv').and_return(false) - expect(Facter.value(:virtualenv_version)).to eq(nil) - end - end - end - - describe 'virtualenv_version new' do - context 'returns virtualenv version when virtualenv present' do - it do - allow(Facter::Util::Resolution).to receive(:which).with('virtualenv').and_return(true) - allow(Facter::Util::Resolution).to receive(:exec).with('virtualenv --version 2>&1').and_return(virtualenv_new_version_output) - expect(Facter.value(:virtualenv_version)).to eq('20.0.17') - end - end - end -end From bcf6262359f42be935d714632825b547ddb116b5 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 18 Jul 2022 13:55:59 +0200 Subject: [PATCH 049/158] Release 6.3.0 --- CHANGELOG.md | 13 +++++++++++++ metadata.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b788395b..7e71ae10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v6.3.0](https://github.com/voxpupuli/puppet-python/tree/v6.3.0) (2022-07-18) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.2.1...v6.3.0) + +**Implemented enhancements:** + +- allow puppet/epel v4 [\#634](https://github.com/voxpupuli/puppet-python/pull/634) ([vchepkov](https://github.com/vchepkov)) +- cleanup references to obsolete virtualenv parameter/command [\#633](https://github.com/voxpupuli/puppet-python/pull/633) ([vchepkov](https://github.com/vchepkov)) + +**Fixed bugs:** + +- Add python-venv installation [\#579](https://github.com/voxpupuli/puppet-python/pull/579) ([crazymind1337](https://github.com/crazymind1337)) + ## [v6.2.1](https://github.com/voxpupuli/puppet-python/tree/v6.2.1) (2021-12-10) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.2.0...v6.2.1) diff --git a/metadata.json b/metadata.json index fb6434c7..a2eb404a 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.2.2-rc0", + "version": "6.3.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From d22f9c75f736342d71a4de3bec8bcda69cd27be8 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 18 Jul 2022 14:02:32 +0200 Subject: [PATCH 050/158] modulesync 5.3.0 --- .github/CONTRIBUTING.md | 7 ++- .github/workflows/ci.yml | 84 +++-------------------------------- .github/workflows/release.yml | 32 +++++-------- .msync.yml | 2 +- Dockerfile | 2 +- Gemfile | 6 +-- 6 files changed, 24 insertions(+), 109 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 048d2b55..8b466cfb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -124,7 +124,7 @@ If you have Ruby 2.x or want a specific version of Puppet, you must set an environment variable such as: ```sh -export PUPPET_VERSION="~> 5.5.6" +export PUPPET_GEM_VERSION="~> 6.1.0" ``` You can install all needed gems for spec tests into the modules directory by @@ -232,17 +232,16 @@ simple tests against it after applying the module. You can run this with: ```sh -BEAKER_setfile=debian10-x64 bundle exec rake beaker +BEAKER_setfile=debian11-64 bundle exec rake beaker ``` You can replace the string `debian10` with any common operating system. The following strings are known to work: -* ubuntu1604 * ubuntu1804 * ubuntu2004 -* debian9 * debian10 +* debian11 * centos7 * centos8 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d08d05e8..8a077911 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,84 +7,12 @@ name: CI on: pull_request concurrency: - group: ${{ github.head_ref }} + group: ${{ github.ref_name }} cancel-in-progress: true jobs: - setup_matrix: - name: 'Setup Test Matrix' - runs-on: ubuntu-latest - timeout-minutes: 40 - outputs: - puppet_unit_test_matrix: ${{ steps.get-outputs.outputs.puppet_unit_test_matrix }} - github_action_test_matrix: ${{ steps.get-outputs.outputs.github_action_test_matrix }} - env: - BUNDLE_WITHOUT: development:system_tests:release - steps: - - uses: actions/checkout@v2 - - name: Setup ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.0' - bundler-cache: true - - name: Run static validations - run: bundle exec rake validate lint check - - name: Run rake rubocop - run: bundle exec rake rubocop - - name: Setup Test Matrix - id: get-outputs - run: bundle exec metadata2gha --use-fqdn --pidfile-workaround false - - unit: - needs: setup_matrix - runs-on: ubuntu-latest - timeout-minutes: 40 - strategy: - fail-fast: false - matrix: - include: ${{fromJson(needs.setup_matrix.outputs.puppet_unit_test_matrix)}} - env: - BUNDLE_WITHOUT: development:system_tests:release - PUPPET_VERSION: "~> ${{ matrix.puppet }}.0" - name: Puppet ${{ matrix.puppet }} (Ruby ${{ matrix.ruby }}) - steps: - - uses: actions/checkout@v2 - - name: Setup ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ matrix.ruby }} - bundler-cache: true - - name: Run tests - run: bundle exec rake parallel_spec - - acceptance: - needs: setup_matrix - runs-on: ubuntu-latest - env: - BUNDLE_WITHOUT: development:test:release - strategy: - fail-fast: false - matrix: - include: ${{fromJson(needs.setup_matrix.outputs.github_action_test_matrix)}} - name: ${{ matrix.puppet.name }} - ${{ matrix.setfile.name }} - steps: - - uses: actions/checkout@v2 - - name: Setup ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.0' - bundler-cache: true - - name: Run tests - run: bundle exec rake beaker - env: - BEAKER_PUPPET_COLLECTION: ${{ matrix.puppet.collection }} - BEAKER_setfile: ${{ matrix.setfile.value }} - - tests: - needs: - - unit - - acceptance - runs-on: ubuntu-latest - name: Test suite - steps: - - run: echo Test suite completed + puppet: + name: Puppet + uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v1 + with: + pidfile_workaround: 'false' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 664ba694..15f17213 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,26 +9,14 @@ on: tags: - '*' -env: - BUNDLE_WITHOUT: development:test:system_tests - jobs: - deploy: - name: 'deploy to forge' - runs-on: ubuntu-latest - if: github.repository_owner == 'voxpupuli' - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - name: Setup Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: '2.7' - bundler-cache: true - - name: Build and Deploy - env: - # Configure secrets here: - # https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets - BLACKSMITH_FORGE_USERNAME: '${{ secrets.PUPPET_FORGE_USERNAME }}' - BLACKSMITH_FORGE_API_KEY: '${{ secrets.PUPPET_FORGE_API_KEY }}' - run: bundle exec rake module:push + release: + name: Release + uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v1 + with: + allowed_owner: 'voxpupuli' + secrets: + # Configure secrets here: + # https://docs.github.com/en/actions/security-guides/encrypted-secrets + username: ${{ secrets.PUPPET_FORGE_USERNAME }} + api_key: ${{ secrets.PUPPET_FORGE_API_KEY }} diff --git a/.msync.yml b/.msync.yml index a83abd9b..02353859 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '5.1.0' +modulesync_config_version: '5.3.0' diff --git a/Dockerfile b/Dockerfile index e3cf307f..8dd82d63 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ WORKDIR /opt/puppet # https://github.com/puppetlabs/puppet/blob/06ad255754a38f22fb3a22c7c4f1e2ce453d01cb/lib/puppet/provider/service/runit.rb#L39 RUN mkdir -p /etc/sv -ARG PUPPET_VERSION="~> 6.0" +ARG PUPPET_GEM_VERSION="~> 6.0" ARG PARALLEL_TEST_PROCESSORS=4 # Cache gems diff --git a/Gemfile b/Gemfile index b6dcf456..07209b79 100644 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,10 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -source ENV['GEM_SOURCE'] || "https://rubygems.org" +source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 5.0', :require => false + gem 'voxpupuli-test', '~> 5.4', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false gem 'puppet_metadata', '~> 1.0', :require => false @@ -28,7 +28,7 @@ end gem 'rake', :require => false gem 'facter', ENV['FACTER_GEM_VERSION'], :require => false, :groups => [:test] -puppetversion = ENV['PUPPET_VERSION'] || '>= 6.0' +puppetversion = ENV['PUPPET_GEM_VERSION'] || '>= 6.0' gem 'puppet', puppetversion, :require => false, :groups => [:test] # vim: syntax=ruby From ef2df5b4d72c0159e19b66555018865b816725e4 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 18 Jul 2022 14:31:20 +0200 Subject: [PATCH 051/158] [blacksmith] Bump version to 6.3.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index a2eb404a..f28c5e31 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.3.0", + "version": "6.3.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From 42be1f3e67186420ecd3e65309735725efbedbb9 Mon Sep 17 00:00:00 2001 From: David Byers Date: Tue, 30 Aug 2022 17:15:23 +0200 Subject: [PATCH 052/158] Add extra_index parameter to python::pip Add extra_index parameter to python::pip, corresponding to the pip command line option --extra-index-url, allowing packages to be installed from a local repository while dependencies are pulled from pypi. --- REFERENCE.md | 9 +++++++++ manifests/pip.pp | 12 ++++++++++-- spec/acceptance/pip_spec.rb | 36 ++++++++++++++++++++++++++++++++++++ spec/defines/pip_spec.rb | 24 +++++++++++++++++++----- 4 files changed, 74 insertions(+), 7 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 3a5caa87..c61f0b44 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -685,6 +685,7 @@ The following parameters are available in the `python::pip` defined type: * [`owner`](#owner) * [`group`](#group) * [`index`](#index) +* [`extra_index`](#extra_index) * [`proxy`](#proxy) * [`editable`](#editable) * [`environment`](#environment) @@ -766,6 +767,14 @@ Base URL of Python package index. Default value: ``false`` +##### `extra_index` + +Data type: `Variant[Boolean,String[1]]` + +Base URL of extra Python package index. + +Default value: ``false`` + ##### `proxy` Data type: `Optional[Stdlib::HTTPUrl]` diff --git a/manifests/pip.pp b/manifests/pip.pp index 33c7faa4..a6b92c66 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -9,6 +9,7 @@ # @param owner The owner of the virtualenv being manipulated. # @param group The group of the virtualenv being manipulated. # @param index Base URL of Python package index. +# @param extra_index Base URL of extra Python package index. # @param proxy Proxy server to use for outbound connections. # @param editable If true the package is installed as an editable resource. # @param environment Additional environment variables required to install the packages. @@ -57,6 +58,7 @@ Optional[String[1]] $group = getvar('python::params::group'), Optional[Python::Umask] $umask = undef, Variant[Boolean,String[1]] $index = false, + Variant[Boolean,String[1]] $extra_index = false, Optional[Stdlib::HTTPUrl] $proxy = undef, Any $egg = false, Boolean $editable = false, @@ -114,6 +116,11 @@ default => "--index-url=${index}", } + $pypi_extra_index = $extra_index ? { + false => '', + default => "--extra-index-url=${extra_index}", + } + $proxy_flag = $proxy ? { undef => '', default => "--proxy=${proxy}", @@ -173,7 +180,7 @@ } $pip_install = "${pip_env} --log ${log}/pip.log install" - $pip_common_args = "${pypi_index} ${proxy_flag} ${install_editable} ${source}" + $pip_common_args = "${pypi_index} ${pypi_extra_index} ${proxy_flag} ${install_editable} ${source}" # Explicit version out of VCS when PIP supported URL is provided if $source =~ /^'(git\+|hg\+|bzr\+|svn\+)(http|https|ssh|svn|sftp|ftp|lp|git)(:\/\/).+'$/ { @@ -204,7 +211,8 @@ # Note: we DO need to repeat ourselves with "from version" in both grep and sed as on some systems pip returns # more than one line with paretheses. $latest_version = join( [ - "${pip_install} ${pypi_index} ${proxy_flag} ${install_args} ${install_editable} ${real_pkgname}==notreallyaversion 2>&1", + "${pip_install} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", + " ${install_args} ${install_editable} ${real_pkgname}==notreallyaversion 2>&1", ' | grep -oP "\(from versions: .*\)" | sed -E "s/\(from versions: (.*?, )*(.*)\)/\2/g"', ' | tr -d "[:space:]"', ]) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index a67eeafa..5341d9cd 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -31,6 +31,7 @@ class { 'python': end # rubocop:disable RSpec/RepeatedExampleGroupDescription + # rubocop:disable RSpec/RepeatedExampleGroupBody describe command('/opt/test-venv/bin/pip list') do its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } @@ -74,5 +75,40 @@ class { 'python': its(:exit_status) { is_expected.to eq 0 } its(:stdout) { is_expected.not_to match %r{agent.* 0\.1\.2} } end + + context 'install package via extra_index' do + it 'works with no errors' do + pp = <<-PUPPET + class { 'python': + version => '3', + dev => 'present', + } + + python::pyvenv { '/opt/test-venv': + ensure => 'present', + systempkgs => false, + mode => '0755', + pip_version => '<= 20.3.4', + } + + python::pip { 'agent package via extra_index': + virtualenv => '/opt/test-venv', + pkgname => 'agent', + index => 'invalid', + extra_index => 'https://pypi.org/simple', + ensure => '0.1.2', + } + PUPPET + + apply_manifest(pp, catch_failures: true) + apply_manifest(pp, catch_changes: true) + end + end + + describe command('/opt/test-venv/bin/pip list') do + its(:exit_status) { is_expected.to eq 0 } + its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } + end + # rubocop:enable RSpec/RepeatedExampleGroupBody # rubocop:enable RSpec/RepeatedExampleGroupDescription end diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index 5124c4ec..52d43e91 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -76,7 +76,7 @@ context 'adds proxy to install command if proxy set' do let(:params) { { proxy: 'http://my.proxy:3128' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --proxy=http://my.proxy:3128 rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --proxy=http://my.proxy:3128 rpyc') } end end @@ -90,7 +90,21 @@ context 'adds index to install command if index set' do let(:params) { { index: 'http://www.example.com/simple/' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --index-url=http://www.example.com/simple/ rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --index-url=http://www.example.com/simple/ rpyc') } + end + end + + describe 'extra_index as' do + context 'defaults to empty' do + let(:params) { {} } + + it { is_expected.not_to contain_exec('pip_install_rpyc').with_command(%r{--extra-index-url}) } + end + + context 'adds extra_index to install command if extra_index set' do + let(:params) { { extra_index: 'http://www.example.com/extra/simple/' } } + + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --extra-index-url=http://www.example.com/extra/simple/ rpyc') } end end @@ -107,7 +121,7 @@ context 'adds install_args to install command if install_args set' do let(:params) { { install_args: '--pre' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --pre rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --pre rpyc') } end end @@ -171,13 +185,13 @@ context 'suceeds with no extras' do let(:params) { {} } - it { is_expected.to contain_exec('pip_install_requests').with_command('pip --log /tmp/pip.log install requests') } + it { is_expected.to contain_exec('pip_install_requests').with_command('pip --log /tmp/pip.log install requests') } end context 'succeeds with extras' do let(:params) { { extras: ['security'] } } - it { is_expected.to contain_exec('pip_install_requests').with_command('pip --log /tmp/pip.log install requests[security]') } + it { is_expected.to contain_exec('pip_install_requests').with_command('pip --log /tmp/pip.log install requests[security]') } end end end From bd3f2127d902786c3fd526285d95831cb9f2c290 Mon Sep 17 00:00:00 2001 From: David Byers Date: Thu, 1 Sep 2022 11:29:11 +0200 Subject: [PATCH 053/158] Add prompt parameter to python::pyvenv Add a prompt parameter to python::pyvenv that uses the --prompt command-line argument available in the venv module in Python 3.6 and later, to set the prompt shown when the virtualenv is active. --- REFERENCE.md | 9 +++++++ manifests/pyvenv.pp | 10 +++++++- spec/classes/python_spec.rb | 4 +-- spec/defines/pyvenv_spec.rb | 51 ++++++++++++++++++++++++++++++++++++- 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index c61f0b44..e91a9f41 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -903,6 +903,7 @@ The following parameters are available in the `python::pyvenv` defined type: * [`mode`](#mode) * [`path`](#path) * [`environment`](#environment) +* [`prompt`](#prompt) * [`pip_version`](#pip_version) ##### `ensure` @@ -977,6 +978,14 @@ Optionally specify environment variables for pyvenv Default value: `[]` +##### `prompt` + +Data type: `Variant[Boolean,String[1]]` + +Optionally specify the virtualenv prompt (python >= 3.6) + +Default value: ``false`` + ##### `pip_version` Data type: `Python::Venv::PipVersion` diff --git a/manifests/pyvenv.pp b/manifests/pyvenv.pp index bbc05277..14dcb9fb 100644 --- a/manifests/pyvenv.pp +++ b/manifests/pyvenv.pp @@ -10,6 +10,7 @@ # @param mode Optionally specify directory mode # @param path Specifies the PATH variable. # @param environment Optionally specify environment variables for pyvenv +# @param prompt Optionally specify the virtualenv prompt (python >= 3.6) # # @example # python::pyvenv { '/var/www/project1' : @@ -31,6 +32,7 @@ Stdlib::Filemode $mode = '0755', Array[Stdlib::Absolutepath] $path = ['/bin', '/usr/bin', '/usr/sbin', '/usr/local/bin',], Array $environment = [], + Optional[String[1]] $prompt = undef, Python::Venv::PipVersion $pip_version = 'latest', ) { include python @@ -62,6 +64,12 @@ $system_pkgs_flag = '' } + if versioncmp($normalized_python_version, '3.6') >=0 and $prompt { + $prompt_arg = "--prompt ${shell_escape($prompt)}" + } else { + $prompt_arg = '' + } + file { $venv_dir: ensure => directory, owner => $owner, @@ -78,7 +86,7 @@ } exec { "python_virtualenv_${venv_dir}": - command => "${virtualenv_cmd} --clear ${system_pkgs_flag} ${venv_dir} && ${pip_cmd} --log ${venv_dir}/pip.log install ${pip_upgrade} && ${pip_cmd} --log ${venv_dir}/pip.log install --upgrade setuptools", + command => "${virtualenv_cmd} --clear ${system_pkgs_flag} ${prompt_arg} ${venv_dir} && ${pip_cmd} --log ${venv_dir}/pip.log install ${pip_upgrade} && ${pip_cmd} --log ${venv_dir}/pip.log install --upgrade setuptools", user => $owner, creates => "${venv_dir}/bin/activate", path => $_path, diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 279fffaa..04aef377 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -146,7 +146,7 @@ it { expect(subject).to contain_exec('python_virtualenv_/opt/env1'). with( - command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade pip && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade setuptools', + command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade pip && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade setuptools', user: 'root', creates: '/opt/env1/bin/activate', path: [ @@ -166,7 +166,7 @@ it { expect(subject).to contain_exec('python_virtualenv_/opt/env2'). with( - command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade setuptools', + command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade setuptools', user: 'root', creates: '/opt/env2/bin/activate', path: [ diff --git a/spec/defines/pyvenv_spec.rb b/spec/defines/pyvenv_spec.rb index 7bc623b2..ba49fb37 100644 --- a/spec/defines/pyvenv_spec.rb +++ b/spec/defines/pyvenv_spec.rb @@ -19,7 +19,7 @@ context 'with default parameters' do it { is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') } - it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } + it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } end describe 'when ensure' do @@ -36,5 +36,54 @@ end end end + + context "prompt on #{os} with python 3.6" do + let :facts do + # python 3.6 is required for venv and prompt + facts.merge( + python3_version: '3.6.1' + ) + end + let :title do + '/opt/env' + end + + context 'with prompt' do + let :params do + { + prompt: 'custom prompt', + } + end + + it { + is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') + is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('python3.6 -m venv --clear --prompt custom\\ prompt /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') + } + end + end + + context "prompt on #{os} with python 3.5" do + let :facts do + facts.merge( + python3_version: '3.5.1' + ) + end + let :title do + '/opt/env' + end + + context 'with prompt' do + let :params do + { + prompt: 'custom prompt', + } + end + + it { + is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') + is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') + } + end + end end end From d305819d572335644aa7ad265332301f7096b4ee Mon Sep 17 00:00:00 2001 From: Steffen Zieger Date: Mon, 25 Jul 2022 14:43:16 +0200 Subject: [PATCH 054/158] use legacy pip resolver for pip versions < 21.1 > 20.2.4 --- manifests/pip.pp | 9 ++++++++- spec/defines/pip_spec.rb | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index a6b92c66..488faf11 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -207,11 +207,18 @@ } 'latest': { + $pip_version = $facts['pip_version'] + if $pip_version and versioncmp($pip_version, '21.1') == -1 and versioncmp($pip_version, '20.2.4') == 1 { + $legacy_resolver = '--use-deprecated=legacy-resolver' + } else { + $legacy_resolver = '' + } + # Unfortunately this is the smartest way of getting the latest available package version with pip as of now # Note: we DO need to repeat ourselves with "from version" in both grep and sed as on some systems pip returns # more than one line with paretheses. $latest_version = join( [ - "${pip_install} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", + "${pip_install} ${legacy_resolver} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", " ${install_args} ${install_editable} ${real_pkgname}==notreallyaversion 2>&1", ' | grep -oP "\(from versions: .*\)" | sed -E "s/\(from versions: (.*?, )*(.*)\)/\2/g"', ' | tr -d "[:space:]"', diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index 52d43e91..d7115427 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -20,7 +20,8 @@ operatingsystem: 'Debian', operatingsystemrelease: '6', path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - concat_basedir: '/dne' + concat_basedir: '/dne', + pip_version: '18.1' } end @@ -126,6 +127,12 @@ end describe 'install latest' do + context 'does not use legacy resolver in unless' do + let(:params) { { ensure: 'latest' } } + + it { is_expected.not_to contain_exec('pip_install_rpyc').with_unless(%r{--use-deprecated=legacy-resolver}) } + end + context 'does not use pip search in unless' do let(:params) { { ensure: 'latest' } } @@ -158,6 +165,35 @@ end end end + + context 'on Debian OS with pip_version 20.3.4' do + let :facts do + { + id: 'root', + kernel: 'Linux', + lsbdistcodename: 'buster', + os: { + family: 'Debian', + release: { major: '10' }, + }, + osfamily: 'Debian', + operatingsystem: 'Debian', + operatingsystemrelease: '10.12', + path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', + concat_basedir: '/dne', + pip_version: '20.3.4' + } + end + + describe 'install latest' do + context 'with legacy resolver in unless cmd' do + let(:params) { { ensure: 'latest' } } + + it { is_expected.to compile.with_all_deps } + it { is_expected.to contain_exec('pip_install_rpyc').with_unless(%r{--use-deprecated=legacy-resolver}) } + end + end + end end describe 'python::pip', type: :define do From 54ecdda13152f48d4d4006267c7059cd5ba1e537 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sun, 2 Oct 2022 18:00:12 +0200 Subject: [PATCH 055/158] modulesync 5.3.0 --- Rakefile | 2 +- spec/spec_helper.rb | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index f92f0516..b7f7fe73 100644 --- a/Rakefile +++ b/Rakefile @@ -52,7 +52,7 @@ begin config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file.\nEach new release typically also includes the latest modulesync defaults.\nThese should not affect the functionality of the module." config.exclude_labels = %w{duplicate question invalid wontfix wont-fix modulesync skip-changelog} config.user = 'voxpupuli' - config.project = metadata.metadata['name'] + config.project = 'puppet-python' end # Workaround for https://github.com/github-changelog-generator/github-changelog-generator/issues/715 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4d617f39..6515b7bf 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -9,6 +9,8 @@ require 'voxpupuli/test/spec_helper' +add_mocked_facts! + if File.exist?(File.join(__dir__, 'default_module_facts.yml')) facts = YAML.safe_load(File.read(File.join(__dir__, 'default_module_facts.yml'))) facts&.each do |name, value| From a18248f6f0d10d78d40fe02104be450a30508a67 Mon Sep 17 00:00:00 2001 From: Alexander Olofsson Date: Tue, 11 Oct 2022 13:07:48 +0200 Subject: [PATCH 056/158] Fix linting complaints --- manifests/pip.pp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index 488faf11..199e7925 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -217,7 +217,7 @@ # Unfortunately this is the smartest way of getting the latest available package version with pip as of now # Note: we DO need to repeat ourselves with "from version" in both grep and sed as on some systems pip returns # more than one line with paretheses. - $latest_version = join( [ + $latest_version = join([ "${pip_install} ${legacy_resolver} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", " ${install_args} ${install_editable} ${real_pkgname}==notreallyaversion 2>&1", ' | grep -oP "\(from versions: .*\)" | sed -E "s/\(from versions: (.*?, )*(.*)\)/\2/g"', @@ -227,7 +227,7 @@ # Packages with underscores in their names are listed with dashes in their place in `pip freeze` output $pkgname_with_dashes = regsubst($real_pkgname, '_', '-', 'G') $grep_regex_pkgname_with_dashes = "^${pkgname_with_dashes}==" - $installed_version = join( ["${pip_env} freeze --all", " | grep -i -e ${grep_regex_pkgname_with_dashes} | cut -d= -f3", " | tr -d '[:space:]'",]) + $installed_version = join(["${pip_env} freeze --all", " | grep -i -e ${grep_regex_pkgname_with_dashes} | cut -d= -f3", " | tr -d '[:space:]'",]) $command = "${pip_install} --upgrade ${install_args} ${pip_common_args}" $unless_command = "[ \$(${latest_version}) = \$(${installed_version}) ]" From c0829d54953a25c1afc4f566f0fe1d094cf2f708 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sat, 5 Nov 2022 14:19:35 +0100 Subject: [PATCH 057/158] cleanup acceptance tests this module effectivly only supports python 3, which is also the default in the init.pp. we do not need to specify it in the tests. --- spec/acceptance/class_spec.rb | 1 - spec/acceptance/pip_spec.rb | 9 +++------ spec/acceptance/pyvenv_spec.rb | 25 ++++++++++--------------- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/spec/acceptance/class_spec.rb b/spec/acceptance/class_spec.rb index d573a055..70c573b0 100644 --- a/spec/acceptance/class_spec.rb +++ b/spec/acceptance/class_spec.rb @@ -20,7 +20,6 @@ pp = <<-EOS class { 'python': ensure => 'present', - version => '3', pip => 'present', dev => 'present', venv => 'present', diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index 5341d9cd..9da96bef 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -7,8 +7,7 @@ it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', + dev => 'present', } python::pyvenv { '/opt/test-venv': @@ -41,8 +40,7 @@ class { 'python': it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', + dev => 'present', } python::pyvenv { '/opt/test-venv': @@ -80,8 +78,7 @@ class { 'python': it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', + dev => 'present', } python::pyvenv { '/opt/test-venv': diff --git a/spec/acceptance/pyvenv_spec.rb b/spec/acceptance/pyvenv_spec.rb index ac778f21..318c2f73 100644 --- a/spec/acceptance/pyvenv_spec.rb +++ b/spec/acceptance/pyvenv_spec.rb @@ -8,9 +8,8 @@ it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', - venv => 'present', + dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -41,9 +40,8 @@ class { 'python': it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', - venv => 'present', + dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -82,9 +80,8 @@ class { 'python': it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', - venv => 'present', + dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -120,9 +117,8 @@ class { 'python': it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', - venv => 'present', + dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', @@ -158,9 +154,8 @@ class { 'python': it 'works with no errors' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', - venv => 'present', + dev => 'present', + venv => 'present', } user { 'agent': ensure => 'present', From b78b4c97fb89db765ca54fad2a084645f597b11e Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Tue, 27 Sep 2022 13:06:06 +0200 Subject: [PATCH 058/158] Implement Arch Linux support --- manifests/init.pp | 2 +- manifests/install.pp | 13 +++++++------ manifests/params.pp | 13 ++++++++++--- metadata.json | 3 +++ spec/classes/python_spec.rb | 13 +++++++++++-- spec/defines/requirements_spec.rb | 9 +++++++-- 6 files changed, 39 insertions(+), 14 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 3c5ed97a..7326fd27 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -38,7 +38,7 @@ # class python ( Python::Package::Ensure $ensure = $python::params::ensure, - Python::Version $version = '3', + Python::Version $version = $facts['os']['family'] ? { 'Archlinux' => 'system', default => '3' }, Python::Package::Ensure $pip = $python::params::pip, Python::Package::Ensure $dev = $python::params::dev, Python::Package::Ensure $venv = $python::params::venv, diff --git a/manifests/install.pp b/manifests/install.pp index 775edb7e..08227b32 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -15,12 +15,13 @@ } $pythondev = $facts['os']['family'] ? { - 'AIX' => "${python}-devel", - 'Debian' => "${python}-dev", - 'FreeBSD' => undef, - 'Gentoo' => undef, - 'RedHat' => "${python}-devel", - 'Suse' => "${python}-devel", + 'AIX' => "${python}-devel", + 'Debian' => "${python}-dev", + 'FreeBSD' => undef, + 'Gentoo' => undef, + 'Archlinux' => undef, + 'RedHat' => "${python}-devel", + 'Suse' => "${python}-devel", } if $python::manage_python_package { diff --git a/manifests/params.pp b/manifests/params.pp index e69d4c43..b8a78d62 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -5,7 +5,7 @@ # class python::params { # Module compatibility check - unless $facts['os']['family'] in ['AIX', 'Debian', 'FreeBSD', 'Gentoo', 'RedHat', 'Suse'] { + unless $facts['os']['family'] in ['AIX', 'Debian', 'FreeBSD', 'Gentoo', 'RedHat', 'Suse', 'Archlinux'] { fail("Module is not compatible with ${facts['os']['name']}") } @@ -16,8 +16,6 @@ $gunicorn = 'absent' $manage_gunicorn = true $manage_python_package = true - $manage_venv_package = true - $manage_pip_package = true $provider = undef $valid_versions = undef $manage_scl = true @@ -48,4 +46,13 @@ }, default => 'gunicorn', } + + $manage_pip_package = $facts['os']['family'] ? { + 'Archlinux' => false, + default => true, + } + $manage_venv_package = $facts['os']['family'] ? { + 'Archlinux' => false, + default => true, + } } diff --git a/metadata.json b/metadata.json index f28c5e31..2976f1b4 100644 --- a/metadata.json +++ b/metadata.json @@ -59,6 +59,9 @@ "operatingsystemrelease": [ "11.3" ] + }, + { + "operatingsystem": "Archlinux" } ], "requirements": [ diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 04aef377..9c6569ba 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -16,9 +16,18 @@ it { is_expected.to contain_class('python::params') } it { is_expected.to contain_class('python::config') } it { is_expected.to contain_package('python') } - it { is_expected.to contain_package('pip') } - it { is_expected.to contain_package('python-venv') } unless facts[:os]['name'] == 'CentOS' + if facts[:os]['family'] == 'Archlinux' + it { is_expected.not_to contain_package('pip') } + else + it { is_expected.to contain_package('pip') } + end + + if %w[Archlinux CentOS].include?(facts[:os]['name']) + it { is_expected.not_to contain_package('python-venv') } + else + it { is_expected.to contain_package('python-venv') } + end end context 'without managing things' do diff --git a/spec/defines/requirements_spec.rb b/spec/defines/requirements_spec.rb index 19f6832e..1b9a75fb 100644 --- a/spec/defines/requirements_spec.rb +++ b/spec/defines/requirements_spec.rb @@ -50,12 +50,17 @@ it { is_expected.to contain_class('python::params') } it { is_expected.to contain_class('python') } it { is_expected.to contain_exec('python_requirements/requirements.txt') } - it { is_expected.to contain_package('pip') } + + if facts[:os]['family'] == 'Archlinux' + it { is_expected.not_to contain_package('pip') } + else + it { is_expected.to contain_package('pip') } + end it { is_expected.to contain_package('python') } it { is_expected.to contain_package('gunicorn') } it { is_expected.to contain_file('/requirements.txt').with_owner('root').with_group('root') } - if %w[FreeBSD Gentoo].include?(facts[:os]['name']) + if %w[Archlinux FreeBSD Gentoo].include?(facts[:os]['name']) it { is_expected.not_to contain_package('python-dev') } else it { is_expected.to contain_package('python-dev') } From 80adc6303fbef15e624eb9b4e2698435f9761b21 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sat, 5 Nov 2022 14:47:35 +0100 Subject: [PATCH 059/158] move static data from params.pp to init.pp --- manifests/init.pp | 24 ++++++++++++------------ manifests/params.pp | 14 -------------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 7326fd27..5b3c9fdf 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -37,27 +37,27 @@ # } # class python ( - Python::Package::Ensure $ensure = $python::params::ensure, + Python::Package::Ensure $ensure = 'present', Python::Version $version = $facts['os']['family'] ? { 'Archlinux' => 'system', default => '3' }, - Python::Package::Ensure $pip = $python::params::pip, - Python::Package::Ensure $dev = $python::params::dev, - Python::Package::Ensure $venv = $python::params::venv, - Python::Package::Ensure $gunicorn = $python::params::gunicorn, - Boolean $manage_gunicorn = $python::params::manage_gunicorn, - Boolean $manage_python_package = $python::params::manage_python_package, + Python::Package::Ensure $pip = 'present', + Python::Package::Ensure $dev = 'absent', + Python::Package::Ensure $venv = 'absent', + Python::Package::Ensure $gunicorn = 'absent', + Boolean $manage_gunicorn = true, + Boolean $manage_python_package = true, Boolean $manage_venv_package = $python::params::manage_venv_package, Boolean $manage_pip_package = $python::params::manage_pip_package, String[1] $gunicorn_package_name = $python::params::gunicorn_package_name, - Optional[Python::Provider] $provider = $python::params::provider, + Optional[Python::Provider] $provider = undef, Hash $python_pips = {}, Hash $python_pyvenvs = {}, Hash $python_requirements = {}, Hash $python_dotfiles = {}, Boolean $use_epel = $python::params::use_epel, - Boolean $rhscl_use_public_repository = $python::params::rhscl_use_public_repository, - Stdlib::Httpurl $anaconda_installer_url = $python::params::anaconda_installer_url, - Stdlib::Absolutepath $anaconda_install_path = $python::params::anaconda_install_path, - Boolean $manage_scl = $python::params::manage_scl, + Boolean $rhscl_use_public_repository = true, + Stdlib::Httpurl $anaconda_installer_url = 'https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh', + Stdlib::Absolutepath $anaconda_install_path = '/opt/python', + Boolean $manage_scl = true, Optional[Python::Umask] $umask = undef, ) inherits python::params { $exec_prefix = $provider ? { diff --git a/manifests/params.pp b/manifests/params.pp index b8a78d62..e498ddaf 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -9,20 +9,6 @@ fail("Module is not compatible with ${facts['os']['name']}") } - $ensure = 'present' - $pip = 'present' - $dev = 'absent' - $venv = 'absent' - $gunicorn = 'absent' - $manage_gunicorn = true - $manage_python_package = true - $provider = undef - $valid_versions = undef - $manage_scl = true - $rhscl_use_public_repository = true - $anaconda_installer_url = 'https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh' - $anaconda_install_path = '/opt/python' - if $facts['os']['family'] == 'RedHat' and $facts['os']['name'] != 'Fedora' { $use_epel = true } else { From dad309c343a9b7ff1d8108a1ef5524fd3c1fbb57 Mon Sep 17 00:00:00 2001 From: Alexander Olofsson Date: Tue, 11 Oct 2022 12:58:47 +0200 Subject: [PATCH 060/158] Release 6.4.0 --- CHANGELOG.md | 18 +- REFERENCE.md | 586 ++++++++++++++++++++++++-------------------------- metadata.json | 2 +- 3 files changed, 299 insertions(+), 307 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e71ae10..32782619 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v6.4.0](https://github.com/voxpupuli/puppet-python/tree/v6.4.0) (2022-11-06) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.3.0...v6.4.0) + +**Implemented enhancements:** + +- move static data from params.pp to init.pp [\#648](https://github.com/voxpupuli/puppet-python/pull/648) ([bastelfreak](https://github.com/bastelfreak)) +- cleanup acceptance tests [\#647](https://github.com/voxpupuli/puppet-python/pull/647) ([bastelfreak](https://github.com/bastelfreak)) +- Implement Arch Linux support [\#642](https://github.com/voxpupuli/puppet-python/pull/642) ([bastelfreak](https://github.com/bastelfreak)) +- Add prompt parameter to python::pyvenv [\#641](https://github.com/voxpupuli/puppet-python/pull/641) ([ookisan](https://github.com/ookisan)) +- Add extra\_index parameter to python::pip [\#640](https://github.com/voxpupuli/puppet-python/pull/640) ([ookisan](https://github.com/ookisan)) + +**Fixed bugs:** + +- use legacy pip resolver for pip versions \< 21.1 \> 20.2.4 [\#639](https://github.com/voxpupuli/puppet-python/pull/639) ([saz](https://github.com/saz)) + ## [v6.3.0](https://github.com/voxpupuli/puppet-python/tree/v6.3.0) (2022-07-18) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.2.1...v6.3.0) @@ -362,7 +378,7 @@ Due to a bug in the release pipeline, release v6.0.1 didn't make it to the forge - Fix Python version regex in install.pp [\#410](https://github.com/voxpupuli/puppet-python/pull/410) ([fklajn](https://github.com/fklajn)) - Remove docker nodesets [\#408](https://github.com/voxpupuli/puppet-python/pull/408) ([bastelfreak](https://github.com/bastelfreak)) -- Update README compatibility section [\#405](https://github.com/voxpupuli/puppet-python/pull/405) ([rkcpi](https://github.com/rkcpi)) +- Update README compatibility section [\#405](https://github.com/voxpupuli/puppet-python/pull/405) ([sandra-thieme](https://github.com/sandra-thieme)) - add secret for forge deployment via travis [\#404](https://github.com/voxpupuli/puppet-python/pull/404) ([bastelfreak](https://github.com/bastelfreak)) - Add deprecation notice for the old repository [\#403](https://github.com/voxpupuli/puppet-python/pull/403) ([stankevich](https://github.com/stankevich)) - virtualenv.pp: make creation of $venv\_dir optional [\#391](https://github.com/voxpupuli/puppet-python/pull/391) ([daylicron](https://github.com/daylicron)) diff --git a/REFERENCE.md b/REFERENCE.md index e91a9f41..2aac08b3 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -9,7 +9,7 @@ #### Public Classes * [`python`](#python): Installs and manages python, python-dev and gunicorn. -* [`python::pip::bootstrap`](#pythonpipbootstrap): allow to bootstrap pip when python is managed from other module +* [`python::pip::bootstrap`](#python--pip--bootstrap): allow to bootstrap pip when python is managed from other module #### Private Classes @@ -19,20 +19,20 @@ ### Defined types -* [`python::dotfile`](#pythondotfile): Manages any python dotfiles with a simple config hash. -* [`python::gunicorn`](#pythongunicorn): Manages Gunicorn virtual hosts. -* [`python::pip`](#pythonpip): Installs and manages packages from pip. -* [`python::pyvenv`](#pythonpyvenv): Create a Python3 virtualenv using pyvenv. -* [`python::requirements`](#pythonrequirements): Installs and manages Python packages from requirements file. +* [`python::dotfile`](#python--dotfile): Manages any python dotfiles with a simple config hash. +* [`python::gunicorn`](#python--gunicorn): Manages Gunicorn virtual hosts. +* [`python::pip`](#python--pip): Installs and manages packages from pip. +* [`python::pyvenv`](#python--pyvenv): Create a Python3 virtualenv using pyvenv. +* [`python::requirements`](#python--requirements): Installs and manages Python packages from requirements file. ### Data types -* [`Python::Loglevel`](#pythonloglevel): Match all valid loglevels for python -* [`Python::Package::Ensure`](#pythonpackageensure): Match all valid package ensures for python -* [`Python::Provider`](#pythonprovider): Match all valid provider for python -* [`Python::Umask`](#pythonumask): Match valid umask for python -* [`Python::Venv::PipVersion`](#pythonvenvpipversion): A version type to ensure a specific Pip version in a virtual env. -* [`Python::Version`](#pythonversion): Match all valid versions for python +* [`Python::Loglevel`](#Python--Loglevel): Match all valid loglevels for python +* [`Python::Package::Ensure`](#Python--Package--Ensure): Match all valid package ensures for python +* [`Python::Provider`](#Python--Provider): Match all valid provider for python +* [`Python::Umask`](#Python--Umask): Match valid umask for python +* [`Python::Venv::PipVersion`](#Python--Venv--PipVersion): A version type to ensure a specific Pip version in a virtual env. +* [`Python::Version`](#Python--Version): Match all valid versions for python ## Classes @@ -67,39 +67,39 @@ class { 'python' : The following parameters are available in the `python` class: -* [`ensure`](#ensure) -* [`version`](#version) -* [`pip`](#pip) -* [`dev`](#dev) -* [`gunicorn`](#gunicorn) -* [`manage_gunicorn`](#manage_gunicorn) -* [`provider`](#provider) -* [`use_epel`](#use_epel) -* [`manage_scl`](#manage_scl) -* [`umask`](#umask) -* [`manage_gunicorn`](#manage_gunicorn) -* [`manage_python_package`](#manage_python_package) -* [`manage_venv_package`](#manage_venv_package) -* [`manage_pip_package`](#manage_pip_package) -* [`venv`](#venv) -* [`gunicorn_package_name`](#gunicorn_package_name) -* [`python_pips`](#python_pips) -* [`python_pyvenvs`](#python_pyvenvs) -* [`python_requirements`](#python_requirements) -* [`python_dotfiles`](#python_dotfiles) -* [`rhscl_use_public_repository`](#rhscl_use_public_repository) -* [`anaconda_installer_url`](#anaconda_installer_url) -* [`anaconda_install_path`](#anaconda_install_path) - -##### `ensure` +* [`ensure`](#-python--ensure) +* [`version`](#-python--version) +* [`pip`](#-python--pip) +* [`dev`](#-python--dev) +* [`gunicorn`](#-python--gunicorn) +* [`manage_gunicorn`](#-python--manage_gunicorn) +* [`provider`](#-python--provider) +* [`use_epel`](#-python--use_epel) +* [`manage_scl`](#-python--manage_scl) +* [`umask`](#-python--umask) +* [`manage_gunicorn`](#-python--manage_gunicorn) +* [`manage_python_package`](#-python--manage_python_package) +* [`manage_venv_package`](#-python--manage_venv_package) +* [`manage_pip_package`](#-python--manage_pip_package) +* [`venv`](#-python--venv) +* [`gunicorn_package_name`](#-python--gunicorn_package_name) +* [`python_pips`](#-python--python_pips) +* [`python_pyvenvs`](#-python--python_pyvenvs) +* [`python_requirements`](#-python--python_requirements) +* [`python_dotfiles`](#-python--python_dotfiles) +* [`rhscl_use_public_repository`](#-python--rhscl_use_public_repository) +* [`anaconda_installer_url`](#-python--anaconda_installer_url) +* [`anaconda_install_path`](#-python--anaconda_install_path) + +##### `ensure` Data type: `Python::Package::Ensure` Desired installation state for the Python package. -Default value: `$python::params::ensure` +Default value: `'present'` -##### `version` +##### `version` Data type: `Python::Version` @@ -112,49 +112,49 @@ Allowed values: - 3/3.3/... means you are going to install the python3/python3.3/... package, if available on your osfamily. -Default value: `'3'` +Default value: `$facts['os']['family'] ? { 'Archlinux' => 'system', default => '3'` -##### `pip` +##### `pip` Data type: `Python::Package::Ensure` Desired installation state for the python-pip package. -Default value: `$python::params::pip` +Default value: `'present'` -##### `dev` +##### `dev` Data type: `Python::Package::Ensure` Desired installation state for the python-dev package. -Default value: `$python::params::dev` +Default value: `'absent'` -##### `gunicorn` +##### `gunicorn` Data type: `Python::Package::Ensure` Desired installation state for Gunicorn. -Default value: `$python::params::gunicorn` +Default value: `'absent'` -##### `manage_gunicorn` +##### `manage_gunicorn` Data type: `Boolean` Allow Installation / Removal of Gunicorn. -Default value: `$python::params::manage_gunicorn` +Default value: `true` -##### `provider` +##### `provider` Data type: `Optional[Python::Provider]` What provider to use for installation of the packages, except gunicorn and Python itself. -Default value: `$python::params::provider` +Default value: `undef` -##### `use_epel` +##### `use_epel` Data type: `Boolean` @@ -162,37 +162,37 @@ to determine if the epel class is used. Default value: `$python::params::use_epel` -##### `manage_scl` +##### `manage_scl` Data type: `Boolean` Whether to manage core SCL packages or not. -Default value: `$python::params::manage_scl` +Default value: `true` -##### `umask` +##### `umask` Data type: `Optional[Python::Umask]` The default umask for invoked exec calls. -Default value: ``undef`` +Default value: `undef` -##### `manage_gunicorn` +##### `manage_gunicorn` manage the state for package gunicorn -Default value: `$python::params::manage_gunicorn` +Default value: `true` -##### `manage_python_package` +##### `manage_python_package` Data type: `Boolean` manage the state for package python -Default value: `$python::params::manage_python_package` +Default value: `true` -##### `manage_venv_package` +##### `manage_venv_package` Data type: `Boolean` @@ -200,7 +200,7 @@ manage the state for package venv Default value: `$python::params::manage_venv_package` -##### `manage_pip_package` +##### `manage_pip_package` Data type: `Boolean` @@ -208,15 +208,15 @@ manage the state for package pip Default value: `$python::params::manage_pip_package` -##### `venv` +##### `venv` Data type: `Python::Package::Ensure` -Default value: `$python::params::venv` +Default value: `'absent'` -##### `gunicorn_package_name` +##### `gunicorn_package_name` Data type: `String[1]` @@ -224,7 +224,7 @@ Data type: `String[1]` Default value: `$python::params::gunicorn_package_name` -##### `python_pips` +##### `python_pips` Data type: `Hash` @@ -232,7 +232,7 @@ Data type: `Hash` Default value: `{}` -##### `python_pyvenvs` +##### `python_pyvenvs` Data type: `Hash` @@ -240,7 +240,7 @@ Data type: `Hash` Default value: `{}` -##### `python_requirements` +##### `python_requirements` Data type: `Hash` @@ -248,7 +248,7 @@ Data type: `Hash` Default value: `{}` -##### `python_dotfiles` +##### `python_dotfiles` Data type: `Hash` @@ -256,31 +256,31 @@ Data type: `Hash` Default value: `{}` -##### `rhscl_use_public_repository` +##### `rhscl_use_public_repository` Data type: `Boolean` -Default value: `$python::params::rhscl_use_public_repository` +Default value: `true` -##### `anaconda_installer_url` +##### `anaconda_installer_url` Data type: `Stdlib::Httpurl` -Default value: `$python::params::anaconda_installer_url` +Default value: `'https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh'` -##### `anaconda_install_path` +##### `anaconda_install_path` Data type: `Stdlib::Absolutepath` -Default value: `$python::params::anaconda_install_path` +Default value: `'/opt/python'` -### `python::pip::bootstrap` +### `python::pip::bootstrap` allow to bootstrap pip when python is managed from other module @@ -298,12 +298,12 @@ class { 'python::pip::bootstrap': The following parameters are available in the `python::pip::bootstrap` class: -* [`version`](#version) -* [`manage_python`](#manage_python) -* [`http_proxy`](#http_proxy) -* [`exec_provider`](#exec_provider) +* [`version`](#-python--pip--bootstrap--version) +* [`manage_python`](#-python--pip--bootstrap--manage_python) +* [`http_proxy`](#-python--pip--bootstrap--http_proxy) +* [`exec_provider`](#-python--pip--bootstrap--exec_provider) -##### `version` +##### `version` Data type: `Enum['pip', 'pip3']` @@ -311,23 +311,23 @@ should be pip or pip3 Default value: `'pip'` -##### `manage_python` +##### `manage_python` Data type: `Variant[Boolean, String]` if python module will manage deps -Default value: ``false`` +Default value: `false` -##### `http_proxy` +##### `http_proxy` Data type: `Optional[Stdlib::HTTPUrl]` Proxy server to use for outbound connections. -Default value: ``undef`` +Default value: `undef` -##### `exec_provider` +##### `exec_provider` Data type: `String[1]` @@ -337,7 +337,7 @@ Default value: `'shell'` ## Defined types -### `python::dotfile` +### `python::dotfile` Manages any python dotfiles with a simple config hash. @@ -363,14 +363,14 @@ python::dotfile { '/var/lib/jenkins/.pip/pip.conf': The following parameters are available in the `python::dotfile` defined type: -* [`ensure`](#ensure) -* [`filename`](#filename) -* [`mode`](#mode) -* [`owner`](#owner) -* [`group`](#group) -* [`config`](#config) +* [`ensure`](#-python--dotfile--ensure) +* [`filename`](#-python--dotfile--filename) +* [`mode`](#-python--dotfile--mode) +* [`owner`](#-python--dotfile--owner) +* [`group`](#-python--dotfile--group) +* [`config`](#-python--dotfile--config) -##### `ensure` +##### `ensure` Data type: `Enum['absent', 'present']` @@ -378,7 +378,7 @@ Data type: `Enum['absent', 'present']` Default value: `'present'` -##### `filename` +##### `filename` Data type: `Stdlib::Absolutepath` @@ -386,7 +386,7 @@ Filename. Default value: `$title` -##### `mode` +##### `mode` Data type: `Stdlib::Filemode` @@ -394,7 +394,7 @@ File mode. Default value: `'0644'` -##### `owner` +##### `owner` Data type: `String[1]` @@ -402,7 +402,7 @@ user owner of dotfile Default value: `'root'` -##### `group` +##### `group` Data type: `String[1]` @@ -410,7 +410,7 @@ group owner of dotfile Default value: `'root'` -##### `config` +##### `config` Data type: `Hash` @@ -418,7 +418,7 @@ Config hash. This will be expanded to an ini-file. Default value: `{}` -### `python::gunicorn` +### `python::gunicorn` Manages Gunicorn virtual hosts. @@ -447,28 +447,28 @@ python::gunicorn { 'vhost': The following parameters are available in the `python::gunicorn` defined type: -* [`ensure`](#ensure) -* [`config_dir`](#config_dir) -* [`manage_config_dir`](#manage_config_dir) -* [`virtualenv`](#virtualenv) -* [`mode`](#mode) -* [`dir`](#dir) -* [`bind`](#bind) -* [`environment`](#environment) -* [`appmodule`](#appmodule) -* [`osenv`](#osenv) -* [`timeout`](#timeout) -* [`template`](#template) -* [`args`](#args) -* [`owner`](#owner) -* [`group`](#group) -* [`workers`](#workers) -* [`access_log_format`](#access_log_format) -* [`accesslog`](#accesslog) -* [`errorlog`](#errorlog) -* [`log_level`](#log_level) - -##### `ensure` +* [`ensure`](#-python--gunicorn--ensure) +* [`config_dir`](#-python--gunicorn--config_dir) +* [`manage_config_dir`](#-python--gunicorn--manage_config_dir) +* [`virtualenv`](#-python--gunicorn--virtualenv) +* [`mode`](#-python--gunicorn--mode) +* [`dir`](#-python--gunicorn--dir) +* [`bind`](#-python--gunicorn--bind) +* [`environment`](#-python--gunicorn--environment) +* [`appmodule`](#-python--gunicorn--appmodule) +* [`osenv`](#-python--gunicorn--osenv) +* [`timeout`](#-python--gunicorn--timeout) +* [`template`](#-python--gunicorn--template) +* [`args`](#-python--gunicorn--args) +* [`owner`](#-python--gunicorn--owner) +* [`group`](#-python--gunicorn--group) +* [`workers`](#-python--gunicorn--workers) +* [`access_log_format`](#-python--gunicorn--access_log_format) +* [`accesslog`](#-python--gunicorn--accesslog) +* [`errorlog`](#-python--gunicorn--errorlog) +* [`log_level`](#-python--gunicorn--log_level) + +##### `ensure` Data type: `Enum['present', 'absent']` @@ -476,7 +476,7 @@ Data type: `Enum['present', 'absent']` Default value: `present` -##### `config_dir` +##### `config_dir` Data type: `Stdlib::Absolutepath` @@ -484,23 +484,23 @@ Configure the gunicorn config directory path. Default value: `'/etc/gunicorn.d'` -##### `manage_config_dir` +##### `manage_config_dir` Data type: `Boolean` Set if the gunicorn config directory should be created. -Default value: ``false`` +Default value: `false` -##### `virtualenv` +##### `virtualenv` Data type: `Variant[Boolean,Stdlib::Absolutepath]` Run in virtualenv, specify directory. -Default value: ``false`` +Default value: `false` -##### `mode` +##### `mode` Data type: `Enum['wsgi', 'django']` @@ -508,13 +508,13 @@ Gunicorn mode. Default value: `'wsgi'` -##### `dir` +##### `dir` Data type: `Stdlib::Absolutepath` Application directory. -##### `bind` +##### `bind` Data type: `Variant[String[1],Boolean]` @@ -522,17 +522,17 @@ Bind on: 'HOST', 'HOST:PORT', 'unix:PATH'. Default: system-wide: unix:/tmp/gunicorn-$name.socket virtualenv: unix:${virtualenv}/${name}.socket -Default value: ``false`` +Default value: `false` -##### `environment` +##### `environment` Data type: `Variant[String[1],Boolean]` Set ENVIRONMENT variable. -Default value: ``false`` +Default value: `false` -##### `appmodule` +##### `appmodule` Data type: `String[1]` @@ -540,15 +540,15 @@ Set the application module name for gunicorn to load when not using Django. Default value: `'app:app'` -##### `osenv` +##### `osenv` Data type: `Variant[Boolean,Hash]` Allows setting environment variables for the gunicorn service. Accepts a hash of 'key': 'value' pairs. -Default value: ``false`` +Default value: `false` -##### `timeout` +##### `timeout` Data type: `Integer` @@ -556,7 +556,7 @@ Allows setting the gunicorn idle worker process time before being killed. The un Default value: `30` -##### `template` +##### `template` Data type: `String[1]` @@ -564,7 +564,7 @@ Which ERB template to use. Default value: `'python/gunicorn.erb'` -##### `args` +##### `args` Data type: `Array` @@ -572,7 +572,7 @@ Custom arguments to add in gunicorn config file. Default value: `[]` -##### `owner` +##### `owner` Data type: `String[1]` @@ -580,7 +580,7 @@ Data type: `String[1]` Default value: `'www-data'` -##### `group` +##### `group` Data type: `String[1]` @@ -588,39 +588,39 @@ Data type: `String[1]` Default value: `'www-data'` -##### `workers` +##### `workers` Data type: `Variant[Boolean,Integer]` -Default value: ``false`` +Default value: `false` -##### `access_log_format` +##### `access_log_format` Data type: `Variant[Boolean,String[1]]` -Default value: ``false`` +Default value: `false` -##### `accesslog` +##### `accesslog` Data type: `Variant[Boolean,Stdlib::Absolutepath]` -Default value: ``false`` +Default value: `false` -##### `errorlog` +##### `errorlog` Data type: `Variant[Boolean,Stdlib::Absolutepath]` -Default value: ``false`` +Default value: `false` -##### `log_level` +##### `log_level` Data type: `Python::Loglevel` @@ -628,7 +628,7 @@ Data type: `Python::Loglevel` Default value: `'error'` -### `python::pip` +### `python::pip` Installs and manages packages from pip. @@ -676,34 +676,34 @@ python::pip { 'requests' : The following parameters are available in the `python::pip` defined type: -* [`name`](#name) -* [`pkgname`](#pkgname) -* [`ensure`](#ensure) -* [`virtualenv`](#virtualenv) -* [`pip_provider`](#pip_provider) -* [`url`](#url) -* [`owner`](#owner) -* [`group`](#group) -* [`index`](#index) -* [`extra_index`](#extra_index) -* [`proxy`](#proxy) -* [`editable`](#editable) -* [`environment`](#environment) -* [`extras`](#extras) -* [`timeout`](#timeout) -* [`install_args`](#install_args) -* [`uninstall_args`](#uninstall_args) -* [`log_dir`](#log_dir) -* [`egg`](#egg) -* [`umask`](#umask) -* [`path`](#path) -* [`exec_provider`](#exec_provider) - -##### `name` +* [`name`](#-python--pip--name) +* [`pkgname`](#-python--pip--pkgname) +* [`ensure`](#-python--pip--ensure) +* [`virtualenv`](#-python--pip--virtualenv) +* [`pip_provider`](#-python--pip--pip_provider) +* [`url`](#-python--pip--url) +* [`owner`](#-python--pip--owner) +* [`group`](#-python--pip--group) +* [`index`](#-python--pip--index) +* [`extra_index`](#-python--pip--extra_index) +* [`proxy`](#-python--pip--proxy) +* [`editable`](#-python--pip--editable) +* [`environment`](#-python--pip--environment) +* [`extras`](#-python--pip--extras) +* [`timeout`](#-python--pip--timeout) +* [`install_args`](#-python--pip--install_args) +* [`uninstall_args`](#-python--pip--uninstall_args) +* [`log_dir`](#-python--pip--log_dir) +* [`egg`](#-python--pip--egg) +* [`umask`](#-python--pip--umask) +* [`path`](#-python--pip--path) +* [`exec_provider`](#-python--pip--exec_provider) + +##### `name` must be unique -##### `pkgname` +##### `pkgname` Data type: `String[1]` @@ -711,7 +711,7 @@ the name of the package. Default value: `$name` -##### `ensure` +##### `ensure` Data type: `Variant[Enum[present, absent, latest], String[1]]` @@ -719,7 +719,7 @@ Require pip to be available. Default value: `present` -##### `virtualenv` +##### `virtualenv` Data type: `Variant[Enum['system'], Stdlib::Absolutepath]` @@ -727,7 +727,7 @@ virtualenv to run pip in. Default value: `'system'` -##### `pip_provider` +##### `pip_provider` Data type: `String[1]` @@ -735,15 +735,15 @@ version of pip you wish to use. Default value: `'pip'` -##### `url` +##### `url` Data type: `Variant[Boolean, String]` URL to install from. -Default value: ``false`` +Default value: `false` -##### `owner` +##### `owner` Data type: `String[1]` @@ -751,7 +751,7 @@ The owner of the virtualenv being manipulated. Default value: `'root'` -##### `group` +##### `group` Data type: `Optional[String[1]]` @@ -759,39 +759,39 @@ The group of the virtualenv being manipulated. Default value: `getvar('python::params::group')` -##### `index` +##### `index` Data type: `Variant[Boolean,String[1]]` Base URL of Python package index. -Default value: ``false`` +Default value: `false` -##### `extra_index` +##### `extra_index` Data type: `Variant[Boolean,String[1]]` Base URL of extra Python package index. -Default value: ``false`` +Default value: `false` -##### `proxy` +##### `proxy` Data type: `Optional[Stdlib::HTTPUrl]` Proxy server to use for outbound connections. -Default value: ``undef`` +Default value: `undef` -##### `editable` +##### `editable` Data type: `Boolean` If true the package is installed as an editable resource. -Default value: ``false`` +Default value: `false` -##### `environment` +##### `environment` Data type: `Array` @@ -799,7 +799,7 @@ Additional environment variables required to install the packages. Default value: `[]` -##### `extras` +##### `extras` Data type: `Array` @@ -807,7 +807,7 @@ Extra features provided by the package which should be installed. Default value: `[]` -##### `timeout` +##### `timeout` Data type: `Numeric` @@ -815,23 +815,23 @@ The maximum time in seconds the "pip install" command should take. Default value: `1800` -##### `install_args` +##### `install_args` Data type: `Optional[String[1]]` Any additional installation arguments that will be supplied when running pip install. -Default value: ``undef`` +Default value: `undef` -##### `uninstall_args` +##### `uninstall_args` Data type: `Optional[String[1]]` Any additional arguments that will be supplied when running pip uninstall. -Default value: ``undef`` +Default value: `undef` -##### `log_dir` +##### `log_dir` Data type: `String[1]` @@ -839,23 +839,23 @@ Log directory Default value: `'/tmp'` -##### `egg` +##### `egg` Data type: `Any` The egg name to use -Default value: ``false`` +Default value: `false` -##### `umask` +##### `umask` Data type: `Optional[Python::Umask]` -Default value: ``undef`` +Default value: `undef` -##### `path` +##### `path` Data type: `Array[String]` @@ -863,7 +863,7 @@ Data type: `Array[String]` Default value: `['/usr/local/bin','/usr/bin','/bin', '/usr/sbin']` -##### `exec_provider` +##### `exec_provider` Data type: `String[1]` @@ -871,7 +871,7 @@ Data type: `String[1]` Default value: `'shell'` -### `python::pyvenv` +### `python::pyvenv` Create a Python3 virtualenv using pyvenv. @@ -894,19 +894,19 @@ python::pyvenv { '/var/www/project1' : The following parameters are available in the `python::pyvenv` defined type: -* [`ensure`](#ensure) -* [`version`](#version) -* [`systempkgs`](#systempkgs) -* [`venv_dir`](#venv_dir) -* [`owner`](#owner) -* [`group`](#group) -* [`mode`](#mode) -* [`path`](#path) -* [`environment`](#environment) -* [`prompt`](#prompt) -* [`pip_version`](#pip_version) +* [`ensure`](#-python--pyvenv--ensure) +* [`version`](#-python--pyvenv--version) +* [`systempkgs`](#-python--pyvenv--systempkgs) +* [`venv_dir`](#-python--pyvenv--venv_dir) +* [`owner`](#-python--pyvenv--owner) +* [`group`](#-python--pyvenv--group) +* [`mode`](#-python--pyvenv--mode) +* [`path`](#-python--pyvenv--path) +* [`environment`](#-python--pyvenv--environment) +* [`prompt`](#-python--pyvenv--prompt) +* [`pip_version`](#-python--pyvenv--pip_version) -##### `ensure` +##### `ensure` Data type: `Python::Package::Ensure` @@ -914,7 +914,7 @@ Data type: `Python::Package::Ensure` Default value: `present` -##### `version` +##### `version` Data type: `Python::Version` @@ -922,15 +922,15 @@ Python version to use. Default value: `'system'` -##### `systempkgs` +##### `systempkgs` Data type: `Boolean` Copy system site-packages into virtualenv -Default value: ``false`` +Default value: `false` -##### `venv_dir` +##### `venv_dir` Data type: `Stdlib::Absolutepath` @@ -938,7 +938,7 @@ Directory to install virtualenv to Default value: `$name` -##### `owner` +##### `owner` Data type: `String[1]` @@ -946,7 +946,7 @@ The owner of the virtualenv being manipulated Default value: `'root'` -##### `group` +##### `group` Data type: `String[1]` @@ -954,7 +954,7 @@ The group relating to the virtualenv being manipulated Default value: `'root'` -##### `mode` +##### `mode` Data type: `Stdlib::Filemode` @@ -962,7 +962,7 @@ Optionally specify directory mode Default value: `'0755'` -##### `path` +##### `path` Data type: `Array[Stdlib::Absolutepath]` @@ -970,7 +970,7 @@ Specifies the PATH variable. Default value: `['/bin', '/usr/bin', '/usr/sbin', '/usr/local/bin',]` -##### `environment` +##### `environment` Data type: `Array` @@ -978,15 +978,15 @@ Optionally specify environment variables for pyvenv Default value: `[]` -##### `prompt` +##### `prompt` -Data type: `Variant[Boolean,String[1]]` +Data type: `Optional[String[1]]` Optionally specify the virtualenv prompt (python >= 3.6) -Default value: ``false`` +Default value: `undef` -##### `pip_version` +##### `pip_version` Data type: `Python::Venv::PipVersion` @@ -994,7 +994,7 @@ Data type: `Python::Venv::PipVersion` Default value: `'latest'` -### `python::requirements` +### `python::requirements` Installs and manages Python packages from requirements file. @@ -1015,23 +1015,23 @@ python::requirements { '/var/www/project1/requirements.txt' : The following parameters are available in the `python::requirements` defined type: -* [`requirements`](#requirements) -* [`virtualenv`](#virtualenv) -* [`pip_provider`](#pip_provider) -* [`owner`](#owner) -* [`group`](#group) -* [`proxy`](#proxy) -* [`src`](#src) -* [`environment`](#environment) -* [`forceupdate`](#forceupdate) -* [`cwd`](#cwd) -* [`extra_pip_args`](#extra_pip_args) -* [`manage_requirements`](#manage_requirements) -* [`fix_requirements_owner`](#fix_requirements_owner) -* [`log_dir`](#log_dir) -* [`timeout`](#timeout) - -##### `requirements` +* [`requirements`](#-python--requirements--requirements) +* [`virtualenv`](#-python--requirements--virtualenv) +* [`pip_provider`](#-python--requirements--pip_provider) +* [`owner`](#-python--requirements--owner) +* [`group`](#-python--requirements--group) +* [`proxy`](#-python--requirements--proxy) +* [`src`](#-python--requirements--src) +* [`environment`](#-python--requirements--environment) +* [`forceupdate`](#-python--requirements--forceupdate) +* [`cwd`](#-python--requirements--cwd) +* [`extra_pip_args`](#-python--requirements--extra_pip_args) +* [`manage_requirements`](#-python--requirements--manage_requirements) +* [`fix_requirements_owner`](#-python--requirements--fix_requirements_owner) +* [`log_dir`](#-python--requirements--log_dir) +* [`timeout`](#-python--requirements--timeout) + +##### `requirements` Data type: `Stdlib::Absolutepath` @@ -1039,7 +1039,7 @@ Path to the requirements file. Default value: `$name` -##### `virtualenv` +##### `virtualenv` Data type: `Variant[Enum['system'],Stdlib::Absolutepath]` @@ -1047,7 +1047,7 @@ virtualenv to run pip in. Default value: `'system'` -##### `pip_provider` +##### `pip_provider` Data type: `Enum['pip', 'pip3']` @@ -1055,7 +1055,7 @@ version of pip you wish to use. Default value: `'pip'` -##### `owner` +##### `owner` Data type: `String[1]` @@ -1063,7 +1063,7 @@ The owner of the virtualenv being manipulated. Default value: `'root'` -##### `group` +##### `group` Data type: `String[1]` @@ -1071,23 +1071,23 @@ The group relating to the virtualenv being manipulated. Default value: `'root'` -##### `proxy` +##### `proxy` Data type: `Optional[Stdlib::HTTPUrl]` Proxy server to use for outbound connections. -Default value: ``undef`` +Default value: `undef` -##### `src` +##### `src` Data type: `Any` Pip --src parameter to; if the requirements file contains --editable resources, this parameter specifies where they will be installed. See the pip documentation for more. -Default value: ``false`` +Default value: `false` -##### `environment` +##### `environment` Data type: `Array` @@ -1095,47 +1095,47 @@ Additional environment variables required to install the packages. Default value: `[]` -##### `forceupdate` +##### `forceupdate` Data type: `Boolean` Run a pip install requirements even if we don't receive an event from the requirements file - Useful for when the requirements file is written as part of a resource other than file (E.g vcsrepo) -Default value: ``false`` +Default value: `false` -##### `cwd` +##### `cwd` Data type: `Optional[Stdlib::Absolutepath]` The directory from which to run the "pip install" command. -Default value: ``undef`` +Default value: `undef` -##### `extra_pip_args` +##### `extra_pip_args` Data type: `Optional[String[1]]` Extra arguments to pass to pip after the requirements file -Default value: ``undef`` +Default value: `undef` -##### `manage_requirements` +##### `manage_requirements` Data type: `Boolean` Create the requirements file if it doesn't exist. -Default value: ``true`` +Default value: `true` -##### `fix_requirements_owner` +##### `fix_requirements_owner` Data type: `Boolean` Change owner and group of requirements file. -Default value: ``true`` +Default value: `true` -##### `log_dir` +##### `log_dir` Data type: `Stdlib::Absolutepath` @@ -1143,7 +1143,7 @@ Log directory. Default value: `'/tmp'` -##### `timeout` +##### `timeout` Data type: `Integer` @@ -1153,63 +1153,39 @@ Default value: `1800` ## Data types -### `Python::Loglevel` +### `Python::Loglevel` Match all valid loglevels for python -Alias of +Alias of `Enum['debug', 'info', 'warning', 'error', 'critical']` -```puppet -Enum['debug', 'info', 'warning', 'error', 'critical'] -``` - -### `Python::Package::Ensure` +### `Python::Package::Ensure` Match all valid package ensures for python -Alias of +Alias of `Enum['absent', 'present', 'latest']` -```puppet -Enum['absent', 'present', 'latest'] -``` - -### `Python::Provider` +### `Python::Provider` Match all valid provider for python -Alias of - -```puppet -Enum['pip', 'scl', 'rhscl', 'anaconda', ''] -``` +Alias of `Enum['pip', 'scl', 'rhscl', 'anaconda', '']` -### `Python::Umask` +### `Python::Umask` Match valid umask for python -Alias of - -```puppet -Pattern[/[0-7]{1,4}/] -``` +Alias of `Pattern[/[0-7]{1,4}/]` -### `Python::Venv::PipVersion` +### `Python::Venv::PipVersion` A version type to ensure a specific Pip version in a virtual env. -Alias of +Alias of `Pattern[/^(<|>|<=|>=|==) [0-9]*(\.[0-9]+)*$/, /\Alatest\Z/]` -```puppet -Pattern[/^(<|>|<=|>=|==) [0-9]*(\.[0-9]+)*$/, /\Alatest\Z/] -``` - -### `Python::Version` +### `Python::Version` Match all valid versions for python -Alias of - -```puppet -Pattern[/\A(python)?[0-9](\.?[0-9])*/, /\Apypy\Z/, /\Asystem\Z/, /\Arh-python[0-9]{2}(?:-python)?\Z/] -``` +Alias of `Pattern[/\A(python)?[0-9](\.?[0-9])*/, /\Apypy\Z/, /\Asystem\Z/, /\Arh-python[0-9]{2}(?:-python)?\Z/]` diff --git a/metadata.json b/metadata.json index 2976f1b4..4dd1e2f1 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.3.1-rc0", + "version": "6.4.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From 8a8f98e9821f72e778054b26ed5107b1b7e70dde Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sun, 6 Nov 2022 15:04:14 +0100 Subject: [PATCH 061/158] [blacksmith] Bump version to 6.4.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 4dd1e2f1..c64301dc 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.4.0", + "version": "6.4.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From 6c20de311a599fac9244c8d9a0e823efd0ab7ee8 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Tue, 20 Dec 2022 16:59:54 +0100 Subject: [PATCH 062/158] modulesync 5.4.0 --- .msync.yml | 2 +- Gemfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.msync.yml b/.msync.yml index 02353859..f3156d15 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '5.3.0' +modulesync_config_version: '5.4.0' diff --git a/Gemfile b/Gemfile index 07209b79..b3827ba7 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ group :test do gem 'voxpupuli-test', '~> 5.4', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false - gem 'puppet_metadata', '~> 1.0', :require => false + gem 'puppet_metadata', '~> 2.0', :require => false end group :development do From a3dafc71f800c5ac3970f65a52fef1fe1293b49a Mon Sep 17 00:00:00 2001 From: James Lee Date: Fri, 3 Mar 2023 14:27:26 -0500 Subject: [PATCH 063/158] Fix pip installation on Gentoo The 'pip' package name is ambiguous on Gentoo, with options 'app-misc/pip' and 'dev-python/pip', resulting in the following error during installation: > Error: /Stage[main]/Python::Install/Package[pip]: Could not evaluate: > More than one package with the specified name [pip], please use the > category parameter to disambiguate The error message directs us to use the `category` parameter, which this module already did; however, `category` is a "read-only parameter set by the package" [1]. The correct way to disambiguate this package is to use the full package name, 'dev-python/pip'. [1] https://www.puppet.com/docs/puppet/7/types/package.html#package-attribute-category --- manifests/install.pp | 13 ++----------- spec/classes/python_spec.rb | 2 +- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 08227b32..6a738435 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -213,42 +213,33 @@ } if String($python::version) =~ /^python3/ { - $pip_category = undef $pip_package = "${python}-pip" $pip_provider = $python.regsubst(/^.*python3\.?/,'pip3.').regsubst(/\.$/,'') } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '8') >= 0) { - $pip_category = undef $pip_package = 'python3-pip' $pip_provider = pip3 } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '7') >= 0) { - $pip_category = undef $pip_package = 'python2-pip' $pip_provider = pip2 } elsif $facts['os']['family'] == 'FreeBSD' { - $pip_category = undef $pip_package = "py${python::version}-pip" $pip_provider = 'pip' } elsif $facts['os']['family'] == 'Gentoo' { - $pip_category = 'dev-python' - $pip_package = 'pip' + $pip_package = 'dev-python/pip' $pip_provider = 'pip' } elsif ($facts['os']['name'] == 'Ubuntu') and (versioncmp($facts['os']['release']['major'], '20.04') >= 0) { - $pip_category = undef $pip_package = 'python3-pip' $pip_provider = 'pip3' } elsif ($facts['os']['name'] == 'Debian') and (versioncmp($facts['os']['release']['major'], '11') >= 0) { - $pip_category = undef $pip_package = 'python3-pip' $pip_provider = 'pip3' } else { - $pip_category = undef $pip_package = 'python-pip' $pip_provider = 'pip' } Package <| title == 'pip' |> { - name => $pip_package, - category => $pip_category, + name => $pip_package, } } } diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 9c6569ba..cca3ef65 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -489,7 +489,7 @@ it { is_expected.to contain_class('python::install') } # Base debian packages. it { is_expected.to contain_package('python') } - it { is_expected.to contain_package('pip').with('category' => 'dev-python') } + it { is_expected.to contain_package('pip').with('name' => 'dev-python/pip') } # Python::Dev it { is_expected.not_to contain_package('python-dev') } From 4895041fc616750e0c3eea51460aee0e2c3d3fb4 Mon Sep 17 00:00:00 2001 From: Massimiliano Adamo Date: Sat, 15 Apr 2023 10:32:53 +0200 Subject: [PATCH 064/158] modulesync 5.5.0 --- .github/SECURITY.md | 3 --- .gitignore | 36 ++++++++++++------------- .msync.yml | 2 +- .pmtignore | 64 ++++++++++++++++++++++----------------------- Gemfile | 3 +-- Rakefile | 36 +++---------------------- 6 files changed, 56 insertions(+), 88 deletions(-) delete mode 100644 .github/SECURITY.md diff --git a/.github/SECURITY.md b/.github/SECURITY.md deleted file mode 100644 index cacadf22..00000000 --- a/.github/SECURITY.md +++ /dev/null @@ -1,3 +0,0 @@ -# Vox Pupuli Security Policy - -Our vulnerabilities reporting process is at https://voxpupuli.org/security/ diff --git a/.gitignore b/.gitignore index 9b95224c..84fd904c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,23 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -pkg/ -Gemfile.lock -Gemfile.local -vendor/ -.vendor/ -spec/fixtures/manifests/ -spec/fixtures/modules/ -.vagrant/ -.bundle/ -.ruby-version -coverage/ -log/ -.idea/ -.dependencies/ -.librarian/ -Puppetfile.lock +/pkg/ +/Gemfile.lock +/Gemfile.local +/vendor/ +/.vendor/ +/spec/fixtures/manifests/ +/spec/fixtures/modules/ +/.vagrant/ +/.bundle/ +/.ruby-version +/coverage/ +/log/ +/.idea/ +/.dependencies/ +/.librarian/ +/Puppetfile.lock *.iml .*.sw? -.yardoc/ -Guardfile +/.yardoc/ +/Guardfile diff --git a/.msync.yml b/.msync.yml index f3156d15..a4b00691 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '5.4.0' +modulesync_config_version: '5.5.0' diff --git a/.pmtignore b/.pmtignore index 65f50514..58a04088 100644 --- a/.pmtignore +++ b/.pmtignore @@ -1,37 +1,37 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -docs/ -pkg/ -Gemfile -Gemfile.lock -Gemfile.local -vendor/ -.vendor/ -spec/ -Rakefile -.vagrant/ -.bundle/ -.ruby-version -coverage/ -log/ -.idea/ -.dependencies/ -.github/ -.librarian/ -Puppetfile.lock +/docs/ +/pkg/ +/Gemfile +/Gemfile.lock +/Gemfile.local +/vendor/ +/.vendor/ +/spec/ +/Rakefile +/.vagrant/ +/.bundle/ +/.ruby-version +/coverage/ +/log/ +/.idea/ +/.dependencies/ +/.github/ +/.librarian/ +/Puppetfile.lock *.iml -.editorconfig -.fixtures.yml -.gitignore -.msync.yml -.overcommit.yml -.pmtignore -.rspec -.rspec_parallel -.rubocop.yml -.sync.yml +/.editorconfig +/.fixtures.yml +/.gitignore +/.msync.yml +/.overcommit.yml +/.pmtignore +/.rspec +/.rspec_parallel +/.rubocop.yml +/.sync.yml .*.sw? -.yardoc/ -.yardopts -Dockerfile +/.yardoc/ +/.yardopts +/Dockerfile diff --git a/Gemfile b/Gemfile index b3827ba7..15313c38 100644 --- a/Gemfile +++ b/Gemfile @@ -21,8 +21,7 @@ end group :release do gem 'github_changelog_generator', '>= 1.16.1', :require => false if RUBY_VERSION >= '2.5' - gem 'voxpupuli-release', '>= 1.2.0', :require => false - gem 'puppet-strings', '>= 2.2', :require => false + gem 'voxpupuli-release', '~> 2.0', :require => false end gem 'rake', :require => false diff --git a/Rakefile b/Rakefile index b7f7fe73..58250c39 100644 --- a/Rakefile +++ b/Rakefile @@ -24,6 +24,10 @@ end begin require 'voxpupuli/release/rake_tasks' rescue LoadError + # voxpupuli-release not present +else + GCGConfig.user = 'voxpupuli' + GCGConfig.project = 'puppet-python' end desc "Run main 'test' task and report merged results to coveralls" @@ -37,36 +41,4 @@ task test_with_coveralls: [:test] do end end -desc 'Generate REFERENCE.md' -task :reference, [:debug, :backtrace] do |t, args| - patterns = '' - Rake::Task['strings:generate:reference'].invoke(patterns, args[:debug], args[:backtrace]) -end - -begin - require 'github_changelog_generator/task' - require 'puppet_blacksmith' - GitHubChangelogGenerator::RakeTask.new :changelog do |config| - metadata = Blacksmith::Modulefile.new - config.future_release = "v#{metadata.version}" if metadata.version =~ /^\d+\.\d+.\d+$/ - config.header = "# Changelog\n\nAll notable changes to this project will be documented in this file.\nEach new release typically also includes the latest modulesync defaults.\nThese should not affect the functionality of the module." - config.exclude_labels = %w{duplicate question invalid wontfix wont-fix modulesync skip-changelog} - config.user = 'voxpupuli' - config.project = 'puppet-python' - end - - # Workaround for https://github.com/github-changelog-generator/github-changelog-generator/issues/715 - require 'rbconfig' - if RbConfig::CONFIG['host_os'] =~ /linux/ - task :changelog do - puts 'Fixing line endings...' - changelog_file = File.join(__dir__, 'CHANGELOG.md') - changelog_txt = File.read(changelog_file) - new_contents = changelog_txt.gsub(%r{\r\n}, "\n") - File.open(changelog_file, "w") {|file| file.puts new_contents } - end - end - -rescue LoadError -end # vim: syntax=ruby From db3c500f8916acccea58c115e7c0fb92dabfbe40 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 28 Apr 2023 14:04:11 +0200 Subject: [PATCH 065/158] Drop Puppet 6 support --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index c64301dc..7fa6a764 100644 --- a/metadata.json +++ b/metadata.json @@ -67,7 +67,7 @@ "requirements": [ { "name": "puppet", - "version_requirement": ">= 6.1.0 < 8.0.0" + "version_requirement": ">= 7.0.0 < 8.0.0" } ], "dependencies": [ From 9c1a9228a4092b4c714acc22c34f9c59e090ca24 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 12 May 2023 13:25:00 +0200 Subject: [PATCH 066/158] modulesync 6.0.0 --- .msync.yml | 2 +- Gemfile | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.msync.yml b/.msync.yml index a4b00691..b929160c 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '5.5.0' +modulesync_config_version: '6.0.0' diff --git a/Gemfile b/Gemfile index 15313c38..98a04cfb 100644 --- a/Gemfile +++ b/Gemfile @@ -4,10 +4,10 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 5.4', :require => false + gem 'voxpupuli-test', '~> 6.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false - gem 'puppet_metadata', '~> 2.0', :require => false + gem 'puppet_metadata', '~> 3.0', :require => false end group :development do @@ -16,18 +16,19 @@ group :development do end group :system_tests do - gem 'voxpupuli-acceptance', '~> 1.0', :require => false + gem 'voxpupuli-acceptance', '~> 2.0', :require => false end group :release do - gem 'github_changelog_generator', '>= 1.16.1', :require => false if RUBY_VERSION >= '2.5' - gem 'voxpupuli-release', '~> 2.0', :require => false + gem 'github_changelog_generator', '>= 1.16.1', :require => false + gem 'voxpupuli-release', '~> 3.0', :require => false + gem 'faraday-retry', '~> 2.1', :require => false end gem 'rake', :require => false gem 'facter', ENV['FACTER_GEM_VERSION'], :require => false, :groups => [:test] -puppetversion = ENV['PUPPET_GEM_VERSION'] || '>= 6.0' +puppetversion = ENV['PUPPET_GEM_VERSION'] || '~> 7.24' gem 'puppet', puppetversion, :require => false, :groups => [:test] # vim: syntax=ruby From 71fa2edbf24cc4169543d77d985a7f9323f92175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Fri, 12 May 2023 09:51:45 -1000 Subject: [PATCH 067/158] Drop Debian 9 (EOL) --- metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/metadata.json b/metadata.json index 7fa6a764..aaffa8f4 100644 --- a/metadata.json +++ b/metadata.json @@ -30,7 +30,6 @@ { "operatingsystem": "Debian", "operatingsystemrelease": [ - "9", "10", "11" ] From 26b034820c61273e19bcaaf1a0d6f3f88aa619af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Fri, 12 May 2023 09:53:28 -1000 Subject: [PATCH 068/158] Drop Ubuntu 16.04 (EOL) --- metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/metadata.json b/metadata.json index aaffa8f4..e35e05fa 100644 --- a/metadata.json +++ b/metadata.json @@ -48,7 +48,6 @@ { "operatingsystem": "Ubuntu", "operatingsystemrelease": [ - "16.04", "18.04", "20.04" ] From f0316cf16643efc6bc9246a9d24d060ece9f5c60 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Sat, 1 Jul 2023 15:50:18 +0200 Subject: [PATCH 069/158] puppetlabs/stdlib: Allow 9.x --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index e35e05fa..fd4aac5a 100644 --- a/metadata.json +++ b/metadata.json @@ -71,7 +71,7 @@ "dependencies": [ { "name": "puppetlabs/stdlib", - "version_requirement": ">= 4.19.0 < 9.0.0" + "version_requirement": ">= 4.19.0 < 10.0.0" }, { "name": "puppet/epel", From ca03734cd80738f7f39f05fb2271eb301dedb2a5 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 3 Jul 2023 09:27:06 +0200 Subject: [PATCH 070/158] Add Puppet 8 support --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index e35e05fa..48626963 100644 --- a/metadata.json +++ b/metadata.json @@ -65,7 +65,7 @@ "requirements": [ { "name": "puppet", - "version_requirement": ">= 7.0.0 < 8.0.0" + "version_requirement": ">= 7.0.0 < 9.0.0" } ], "dependencies": [ From a3696d528d89e8d2a82b663666799b7f64f9662d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Wed, 12 Jul 2023 13:48:12 -1000 Subject: [PATCH 071/158] Release 7.0.0 --- CHANGELOG.md | 21 ++++++++++++++++++++- metadata.json | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32782619..e273bebf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v7.0.0](https://github.com/voxpupuli/puppet-python/tree/v7.0.0) (2023-07-12) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.4.0...v7.0.0) + +**Breaking changes:** + +- Drop Ubuntu 16.04 \(EOL\) [\#659](https://github.com/voxpupuli/puppet-python/pull/659) ([smortex](https://github.com/smortex)) +- Drop Debian 9 \(EOL\) [\#658](https://github.com/voxpupuli/puppet-python/pull/658) ([smortex](https://github.com/smortex)) +- Drop Puppet 6 support [\#656](https://github.com/voxpupuli/puppet-python/pull/656) ([bastelfreak](https://github.com/bastelfreak)) + +**Implemented enhancements:** + +- Add Puppet 8 support [\#664](https://github.com/voxpupuli/puppet-python/pull/664) ([bastelfreak](https://github.com/bastelfreak)) +- puppetlabs/stdlib: Allow 9.x [\#663](https://github.com/voxpupuli/puppet-python/pull/663) ([bastelfreak](https://github.com/bastelfreak)) + +**Fixed bugs:** + +- Fix pip installation on Gentoo [\#651](https://github.com/voxpupuli/puppet-python/pull/651) ([jameslikeslinux](https://github.com/jameslikeslinux)) + ## [v6.4.0](https://github.com/voxpupuli/puppet-python/tree/v6.4.0) (2022-11-06) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.3.0...v6.4.0) @@ -612,7 +631,7 @@ Due to a bug in the release pipeline, release v6.0.1 didn't make it to the forge - Bootstrap pip installation [\#244](https://github.com/voxpupuli/puppet-python/pull/244) ([joshuaspence](https://github.com/joshuaspence)) - Various tidying up [\#242](https://github.com/voxpupuli/puppet-python/pull/242) ([joshuaspence](https://github.com/joshuaspence)) - Allow custom versions to be installed [\#241](https://github.com/voxpupuli/puppet-python/pull/241) ([joshuaspence](https://github.com/joshuaspence)) -- Check that we have results before returning a value [\#238](https://github.com/voxpupuli/puppet-python/pull/238) ([xaque208](https://github.com/xaque208)) +- Check that we have results before returning a value [\#238](https://github.com/voxpupuli/puppet-python/pull/238) ([zachfi](https://github.com/zachfi)) - Adjust test code to pass syntax checker [\#237](https://github.com/voxpupuli/puppet-python/pull/237) ([fluential](https://github.com/fluential)) ## [1.9.7](https://github.com/voxpupuli/puppet-python/tree/1.9.7) (2015-08-21) diff --git a/metadata.json b/metadata.json index cb3169b1..b4062606 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "6.4.1-rc0", + "version": "7.0.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From f1d0bf97fa95b27c6812664bc3bf65eb77293649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Thu, 27 Jul 2023 09:26:24 -1000 Subject: [PATCH 072/158] [blacksmith] Bump version to 7.0.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index b4062606..93c4eb8f 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.0.0", + "version": "7.0.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From 12e2bf12c6bbca3bc9f670541cd1b5769f8cb65c Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 17 Aug 2023 17:10:44 +0200 Subject: [PATCH 073/158] modulesync 7.0.0 --- .github/CONTRIBUTING.md | 11 +++++++---- .msync.yml | 2 +- Gemfile | 2 +- spec/spec_helper.rb | 1 + spec/spec_helper_acceptance.rb | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 8b466cfb..6aaa603f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -232,18 +232,21 @@ simple tests against it after applying the module. You can run this with: ```sh -BEAKER_setfile=debian11-64 bundle exec rake beaker +BEAKER_PUPPET_COLLECTION=puppet7 BEAKER_setfile=debian11-64 bundle exec rake beaker ``` -You can replace the string `debian10` with any common operating system. +You can replace the string `debian11` with any common operating system. The following strings are known to work: -* ubuntu1804 * ubuntu2004 -* debian10 +* ubuntu2204 * debian11 * centos7 * centos8 +* centos9 +* almalinux8 +* almalinux9 +* fedora36 For more information and tips & tricks, see [voxpupuli-acceptance's documentation](https://github.com/voxpupuli/voxpupuli-acceptance#running-tests). diff --git a/.msync.yml b/.msync.yml index b929160c..dd3e9572 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '6.0.0' +modulesync_config_version: '7.0.0' diff --git a/Gemfile b/Gemfile index 98a04cfb..db21d3b5 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 6.0', :require => false + gem 'voxpupuli-test', '~> 7.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false gem 'puppet_metadata', '~> 3.0', :require => false diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 6515b7bf..9efb4ae6 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -17,3 +17,4 @@ add_custom_fact name.to_sym, value end end +Dir['./spec/support/spec/**/*.rb'].sort.each { |f| require f } diff --git a/spec/spec_helper_acceptance.rb b/spec/spec_helper_acceptance.rb index d3a6e23c..2681792e 100644 --- a/spec/spec_helper_acceptance.rb +++ b/spec/spec_helper_acceptance.rb @@ -5,6 +5,6 @@ require 'voxpupuli/acceptance/spec_helper_acceptance' -configure_beaker +configure_beaker(modules: :metadata) Dir['./spec/support/acceptance/**/*.rb'].sort.each { |f| require f } From 3e64f8654b4b096ed9d7cdfb0989f83b0b8bea9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Thu, 17 Aug 2023 15:45:04 -1000 Subject: [PATCH 074/158] Auto-correct rubocop offenses --- spec/unit/facter/pip_version_spec.rb | 6 +++--- spec/unit/facter/python_release_spec.rb | 8 ++++---- spec/unit/facter/python_version_spec.rb | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/spec/unit/facter/pip_version_spec.rb b/spec/unit/facter/pip_version_spec.rb index 4d7df96a..3e6cd29f 100644 --- a/spec/unit/facter/pip_version_spec.rb +++ b/spec/unit/facter/pip_version_spec.rb @@ -37,7 +37,7 @@ context 'returns nil when pip not present' do it do allow(Facter::Util::Resolution).to receive(:which).with('pip').and_return(false) - expect(Facter.value(:pip_version)).to eq(nil) + expect(Facter.value(:pip_version)).to be_nil end end end @@ -54,7 +54,7 @@ context 'returns nil when pip2 not present' do it do allow(Facter::Util::Resolution).to receive(:which).with('pip2').and_return(false) - expect(Facter.value(:pip2_version)).to eq(nil) + expect(Facter.value(:pip2_version)).to be_nil end end end @@ -71,7 +71,7 @@ context 'returns nil when pip3 not present' do it do allow(Facter::Util::Resolution).to receive(:which).with('pip3').and_return(false) - expect(Facter.value(:pip3_version)).to eq(nil) + expect(Facter.value(:pip3_version)).to be_nil end end end diff --git a/spec/unit/facter/python_release_spec.rb b/spec/unit/facter/python_release_spec.rb index d8ec3e5d..6026c1e3 100644 --- a/spec/unit/facter/python_release_spec.rb +++ b/spec/unit/facter/python_release_spec.rb @@ -31,7 +31,7 @@ it do allow(Facter::Util::Resolution).to receive(:exec).and_return(false) allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(false) - expect(Facter.value(:python_release)).to eq(nil) + expect(Facter.value(:python_release)).to be_nil end end end @@ -60,7 +60,7 @@ allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(true) allow(Facter::Util::Resolution).to receive(:exec).with('python -V 2>&1').and_return(python3_version_output) allow(Facter::Util::Resolution).to receive(:which).with('python2').and_return(false) - expect(Facter.value(:python2_release)).to eq(nil) + expect(Facter.value(:python2_release)).to be_nil end end @@ -68,7 +68,7 @@ it do allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(false) allow(Facter::Util::Resolution).to receive(:which).with('python2').and_return(false) - expect(Facter.value(:python2_release)).to eq(nil) + expect(Facter.value(:python2_release)).to be_nil end end end @@ -85,7 +85,7 @@ context 'returns nil when `python3` not present' do it do allow(Facter::Util::Resolution).to receive(:which).with('python3').and_return(false) - expect(Facter.value(:python3_release)).to eq(nil) + expect(Facter.value(:python3_release)).to be_nil end end end diff --git a/spec/unit/facter/python_version_spec.rb b/spec/unit/facter/python_version_spec.rb index 922cb3d6..d66d280b 100644 --- a/spec/unit/facter/python_version_spec.rb +++ b/spec/unit/facter/python_version_spec.rb @@ -30,7 +30,7 @@ context 'returns nil when `python` not present' do it do allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(false) - expect(Facter.value(:python_version)).to eq(nil) + expect(Facter.value(:python_version)).to be_nil end end end @@ -59,7 +59,7 @@ allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(true) allow(Facter::Util::Resolution).to receive(:exec).with('python -V 2>&1').and_return(python3_version_output) allow(Facter::Util::Resolution).to receive(:which).with('python2').and_return(false) - expect(Facter.value(:python2_version)).to eq(nil) + expect(Facter.value(:python2_version)).to be_nil end end @@ -67,7 +67,7 @@ it do allow(Facter::Util::Resolution).to receive(:which).with('python2').and_return(false) allow(Facter::Util::Resolution).to receive(:which).with('python').and_return(false) - expect(Facter.value(:python2_version)).to eq(nil) + expect(Facter.value(:python2_version)).to be_nil end end end @@ -84,7 +84,7 @@ context 'returns nil when `python3` not present' do it do allow(Facter::Util::Resolution).to receive(:which).with('python3').and_return(false) - expect(Facter.value(:python3_version)).to eq(nil) + expect(Facter.value(:python3_version)).to be_nil end end end From 5057117bb7aaab6e11f318914e21cc14e86b6cf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Thu, 17 Aug 2023 15:47:00 -1000 Subject: [PATCH 075/158] Ignore remaining rebocop offenses --- spec/unit/facter/pip_version_spec.rb | 2 ++ spec/unit/facter/python_release_spec.rb | 2 ++ spec/unit/facter/python_version_spec.rb | 2 ++ 3 files changed, 6 insertions(+) diff --git a/spec/unit/facter/pip_version_spec.rb b/spec/unit/facter/pip_version_spec.rb index 3e6cd29f..06bcf3de 100644 --- a/spec/unit/facter/pip_version_spec.rb +++ b/spec/unit/facter/pip_version_spec.rb @@ -7,6 +7,7 @@ Facter.clear end + # rubocop:disable RSpec/IndexedLet let(:pip_version_output) do <<~EOS pip 6.0.6 from /opt/boxen/homebrew/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-6.0.6-py2.7.egg (python 2.7) @@ -24,6 +25,7 @@ pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7) EOS end + # rubocop:enable RSpec/IndexedLet describe 'pip_version' do context 'returns pip version when pip present' do diff --git a/spec/unit/facter/python_release_spec.rb b/spec/unit/facter/python_release_spec.rb index 6026c1e3..d87b10b2 100644 --- a/spec/unit/facter/python_release_spec.rb +++ b/spec/unit/facter/python_release_spec.rb @@ -7,6 +7,7 @@ Facter.clear end + # rubocop:disable RSpec/IndexedLet let(:python2_version_output) do <<~EOS Python 2.7.9 @@ -17,6 +18,7 @@ Python 3.3.0 EOS end + # rubocop:enable RSpec/IndexedLet describe 'python_release' do context 'returns Python release when `python` present' do diff --git a/spec/unit/facter/python_version_spec.rb b/spec/unit/facter/python_version_spec.rb index d66d280b..386fcffb 100644 --- a/spec/unit/facter/python_version_spec.rb +++ b/spec/unit/facter/python_version_spec.rb @@ -7,6 +7,7 @@ Facter.clear end + # rubocop:disable RSpec/IndexedLet let(:python2_version_output) do <<~EOS Python 2.7.9 @@ -17,6 +18,7 @@ Python 3.3.0 EOS end + # rubocop:enable RSpec/IndexedLet describe 'python_version' do context 'returns Python version when `python` present' do From 6ca453bddf6dba5c9ea111d2c58295b619e60114 Mon Sep 17 00:00:00 2001 From: Stefan Goethals Date: Fri, 8 Sep 2023 10:23:00 +0200 Subject: [PATCH 076/158] Update declared_requirements_install_spec.rb Add # frozen_string_literal: true required by rubocop check --- spec/acceptance/declared_requirements_install_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/acceptance/declared_requirements_install_spec.rb b/spec/acceptance/declared_requirements_install_spec.rb index 185e6db2..bc9c07d4 100644 --- a/spec/acceptance/declared_requirements_install_spec.rb +++ b/spec/acceptance/declared_requirements_install_spec.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'spec_helper_acceptance' describe 'requirements' do From 8564e713b1944fad8768199d42793357d4ef3ce6 Mon Sep 17 00:00:00 2001 From: Stefan - Zipkid - Goethals Date: Mon, 11 Sep 2023 13:36:09 +0200 Subject: [PATCH 077/158] Use 'installed' because ensure_packages() forces it https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/lib/puppet/functions/stdlib/ensure_packages.rb#L36-L37 --- spec/classes/python_spec.rb | 24 ++++++++++++------------ types/package/ensure.pp | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index cca3ef65..3ef04fb1 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -50,15 +50,15 @@ { manage_pip_package: true, manage_venv_package: true, - pip: 'present', - venv: 'present' + pip: 'installed', + venv: 'installed' } end it { is_expected.to compile.with_all_deps } - it { is_expected.to contain_package('pip').with(ensure: 'present') } + it { is_expected.to contain_package('pip').with(ensure: 'installed') } - it { is_expected.to contain_package('python-venv').with(ensure: 'present') } unless facts[:os]['name'] == 'CentOS' + it { is_expected.to contain_package('python-venv').with(ensure: 'installed') } unless facts[:os]['name'] == 'CentOS' end case facts[:os]['family'] @@ -86,10 +86,10 @@ # rubocop:disable RSpec/RepeatedExampleGroupDescription describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'present' } } + let(:params) { { dev: 'installed' } } it { is_expected.to compile.with_all_deps } - it { is_expected.to contain_package('python-dev').with_ensure('present') } + it { is_expected.to contain_package('python-dev').with_ensure('installed') } end context 'empty/default' do @@ -233,9 +233,9 @@ describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'present' } } + let(:params) { { dev: 'installed' } } - it { is_expected.to contain_package('python-dev').with_ensure('present') } + it { is_expected.to contain_package('python-dev').with_ensure('installed') } end context 'default/empty' do @@ -417,9 +417,9 @@ describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'present' } } + let(:params) { { dev: 'installed' } } - it { is_expected.to contain_package('python-dev').with_ensure('present') } + it { is_expected.to contain_package('python-dev').with_ensure('installed') } end context 'empty/default' do @@ -467,9 +467,9 @@ describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'present' } } + let(:params) { { dev: 'installed' } } - it { is_expected.to contain_package('python-dev').with_ensure('present') } + it { is_expected.to contain_package('python-dev').with_ensure('installed') } end context 'default/empty' do diff --git a/types/package/ensure.pp b/types/package/ensure.pp index 34189e4b..9fa54968 100644 --- a/types/package/ensure.pp +++ b/types/package/ensure.pp @@ -1,3 +1,3 @@ # @summary Match all valid package ensures for python # -type Python::Package::Ensure = Enum['absent', 'present', 'latest'] +type Python::Package::Ensure = Enum['absent', 'present', 'installed', 'latest'] From 5c0646b73111d97382731289260249e8a1c891b7 Mon Sep 17 00:00:00 2001 From: Stefan - Zipkid - Goethals Date: Mon, 11 Sep 2023 13:43:13 +0200 Subject: [PATCH 078/158] Add 'installed' to package ensure See https://github.com/puppetlabs/puppetlabs-stdlib/blob/main/lib/puppet/functions/stdlib/ensure_packages.rb#L36-L37 --- REFERENCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/REFERENCE.md b/REFERENCE.md index 2aac08b3..7cc88c03 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -1163,7 +1163,7 @@ Alias of `Enum['debug', 'info', 'warning', 'error', 'critical']` Match all valid package ensures for python -Alias of `Enum['absent', 'present', 'latest']` +Alias of `Enum['absent', 'present', 'installed', 'latest']` ### `Python::Provider` From 8881c431aa9403eaaa68c4dfd456a3b03c7223f0 Mon Sep 17 00:00:00 2001 From: Stefan - Zipkid - Goethals Date: Tue, 12 Sep 2023 09:52:54 +0200 Subject: [PATCH 079/158] Only set subscribe to a requirements.txt file if manage_requirements is true --- manifests/requirements.pp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/manifests/requirements.pp b/manifests/requirements.pp index 2f000bde..f2743509 100644 --- a/manifests/requirements.pp +++ b/manifests/requirements.pp @@ -88,8 +88,13 @@ replace => false, content => '# Puppet will install and/or update pip packages listed here', } + + $local_subscribe = File[$requirements] + } elsif File[$requirements] and $manage_requirements == true { + $local_subscribe = File[$requirements] + } else { + $local_subscribe = undef } - $local_subscribe = File[$requirements] exec { "python_requirements${name}": provider => shell, From fa9cbc41ca0764c9c7d923b3340a24eadea110ea Mon Sep 17 00:00:00 2001 From: Stefan - Zipkid - Goethals Date: Wed, 13 Sep 2023 14:31:51 +0200 Subject: [PATCH 080/158] Remove ensure-packages --- manifests/install.pp | 30 +++++++++++++++--------------- spec/classes/python_spec.rb | 24 ++++++++++++------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 33067e8e..6a738435 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -25,10 +25,10 @@ } if $python::manage_python_package { - ensure_packages (['python'], + package { 'python': ensure => $python::ensure, name => $python, - ) + } } if $python::manage_venv_package { @@ -47,17 +47,17 @@ case $python::provider { 'pip': { if $python::manage_pip_package { - ensure_packages (['pip'], + package { 'pip': ensure => $python::pip, require => Package['python'], - ) + } } if $pythondev { - ensure_packages (['python-dev'], + package { 'python-dev': ensure => $python::dev, name => $pythondev, - ) + } } # Respect the $python::pip setting @@ -180,28 +180,28 @@ } if $pythondev { - ensure_packages (['python-dev'], - ensure => $python::dev, - name => $pythondev, - alias => $pythondev, + package { 'python-dev': + ensure => $python::dev, + name => $pythondev, + alias => $pythondev, provider => 'yum', - ) + } } } default: { if $python::manage_pip_package { - ensure_packages (['pip'], + package { 'pip': ensure => $python::pip, require => Package['python'], - ) + } } if $pythondev { - ensure_packages (['python-dev'], + package { 'python-dev': ensure => $python::dev, name => $pythondev, alias => $pythondev, - ) + } } } } diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 3ef04fb1..cca3ef65 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -50,15 +50,15 @@ { manage_pip_package: true, manage_venv_package: true, - pip: 'installed', - venv: 'installed' + pip: 'present', + venv: 'present' } end it { is_expected.to compile.with_all_deps } - it { is_expected.to contain_package('pip').with(ensure: 'installed') } + it { is_expected.to contain_package('pip').with(ensure: 'present') } - it { is_expected.to contain_package('python-venv').with(ensure: 'installed') } unless facts[:os]['name'] == 'CentOS' + it { is_expected.to contain_package('python-venv').with(ensure: 'present') } unless facts[:os]['name'] == 'CentOS' end case facts[:os]['family'] @@ -86,10 +86,10 @@ # rubocop:disable RSpec/RepeatedExampleGroupDescription describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'installed' } } + let(:params) { { dev: 'present' } } it { is_expected.to compile.with_all_deps } - it { is_expected.to contain_package('python-dev').with_ensure('installed') } + it { is_expected.to contain_package('python-dev').with_ensure('present') } end context 'empty/default' do @@ -233,9 +233,9 @@ describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'installed' } } + let(:params) { { dev: 'present' } } - it { is_expected.to contain_package('python-dev').with_ensure('installed') } + it { is_expected.to contain_package('python-dev').with_ensure('present') } end context 'default/empty' do @@ -417,9 +417,9 @@ describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'installed' } } + let(:params) { { dev: 'present' } } - it { is_expected.to contain_package('python-dev').with_ensure('installed') } + it { is_expected.to contain_package('python-dev').with_ensure('present') } end context 'empty/default' do @@ -467,9 +467,9 @@ describe 'with python::dev' do context 'true' do - let(:params) { { dev: 'installed' } } + let(:params) { { dev: 'present' } } - it { is_expected.to contain_package('python-dev').with_ensure('installed') } + it { is_expected.to contain_package('python-dev').with_ensure('present') } end context 'default/empty' do From 5bd8f1be290ee9eb2fa2f1b094dfabce28edf3bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Fri, 15 Sep 2023 08:53:16 -1000 Subject: [PATCH 081/158] Allow to skip management of python dev package Just like we can skip managing the pip and venv packages, allow to opt-out of managing the dev package. Enforcing a state of these packages sometimes cause trouble if the user of the module does not care about them but they get installed as another package dependency (e.g. syslog-ng-mod-python depends on python-venv, by default python-venv is ensured absent, so on each run Puppet wants to install syslog-ng-mod-python (which install python-venv as a dependency) or remove python-venv (which remove syslog-ng-mod-python as a dependency)). This can be avoided using the corresponding `manage_XXX_package` paramater, but `manage_dev_package` was missing. --- REFERENCE.md | 9 +++++++++ manifests/init.pp | 2 ++ manifests/install.pp | 6 +++--- spec/classes/python_spec.rb | 2 ++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 2aac08b3..424472ea 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -79,6 +79,7 @@ The following parameters are available in the `python` class: * [`umask`](#-python--umask) * [`manage_gunicorn`](#-python--manage_gunicorn) * [`manage_python_package`](#-python--manage_python_package) +* [`manage_dev_package`](#-python--manage_dev_package) * [`manage_venv_package`](#-python--manage_venv_package) * [`manage_pip_package`](#-python--manage_pip_package) * [`venv`](#-python--venv) @@ -192,6 +193,14 @@ manage the state for package python Default value: `true` +##### `manage_dev_package` + +Data type: `Boolean` + +manage the state of the python development package + +Default value: `true` + ##### `manage_venv_package` Data type: `Boolean` diff --git a/manifests/init.pp b/manifests/init.pp index 5b3c9fdf..b457edbd 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -19,6 +19,7 @@ # @param umask The default umask for invoked exec calls. # @param manage_gunicorn manage the state for package gunicorn # @param manage_python_package manage the state for package python +# @param manage_dev_package manage the state of the python development package # @param manage_venv_package manage the state for package venv # @param manage_pip_package manage the state for package pip # @@ -45,6 +46,7 @@ Python::Package::Ensure $gunicorn = 'absent', Boolean $manage_gunicorn = true, Boolean $manage_python_package = true, + Boolean $manage_dev_package = true, Boolean $manage_venv_package = $python::params::manage_venv_package, Boolean $manage_pip_package = $python::params::manage_pip_package, String[1] $gunicorn_package_name = $python::params::gunicorn_package_name, diff --git a/manifests/install.pp b/manifests/install.pp index 6a738435..5d25efda 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -53,7 +53,7 @@ } } - if $pythondev { + if $python::manage_dev_package and $pythondev { package { 'python-dev': ensure => $python::dev, name => $pythondev, @@ -179,7 +179,7 @@ } } - if $pythondev { + if $python::manage_dev_package and $pythondev { package { 'python-dev': ensure => $python::dev, name => $pythondev, @@ -196,7 +196,7 @@ } } - if $pythondev { + if $python::manage_dev_package and $pythondev { package { 'python-dev': ensure => $python::dev, name => $pythondev, diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index cca3ef65..d3bde4a4 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -34,6 +34,7 @@ let :params do { manage_python_package: false, + manage_dev_package: false, manage_pip_package: false, manage_venv_package: false } @@ -41,6 +42,7 @@ it { is_expected.to compile.with_all_deps } it { is_expected.not_to contain_package('python') } + it { is_expected.not_to contain_package('python-dev') } it { is_expected.not_to contain_package('pip') } it { is_expected.not_to contain_package('python-venv') } end From 8172b275b40edbb5867082be35d0c863779ef695 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Fri, 6 Oct 2023 17:23:54 -1000 Subject: [PATCH 082/158] Use the wheel group by default on FreeBSD FreeBSD does not have a 'root' group. System files owned by the 'root' user belong to the 'wheel' group, so use that group by default. This allow to use python::pip without the need to explicitly set the `group` parameter to avoid the error: > Error: Could not execute posix command: Invalid group: root --- manifests/params.pp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/manifests/params.pp b/manifests/params.pp index e498ddaf..4713c7df 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -16,8 +16,9 @@ } $group = $facts['os']['family'] ? { - 'AIX' => 'system', - default => 'root' + 'AIX' => 'system', + 'FreeBSD' => 'wheel', + default => 'root' } $pip_lookup_path = $facts['os']['family'] ? { From 32e23b57b6b01d62b5bbdfb9033e7b9f3c0d7804 Mon Sep 17 00:00:00 2001 From: Dan Dunckel <1153702+dandunckelman@users.noreply.github.com> Date: Thu, 2 Nov 2023 11:03:19 -0600 Subject: [PATCH 083/158] Bump puppet-epel to allow 5.x --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 93c4eb8f..9e4dd1fc 100644 --- a/metadata.json +++ b/metadata.json @@ -75,7 +75,7 @@ }, { "name": "puppet/epel", - "version_requirement": ">= 3.0.0 < 5.0.0" + "version_requirement": ">= 3.0.0 < 6.0.0" } ] } From 4523bd7dcc2c11a0f171d48c97c7a6bd2c93c4c0 Mon Sep 17 00:00:00 2001 From: "Lushaj, Valdrin" Date: Mon, 27 Nov 2023 17:50:27 +0100 Subject: [PATCH 084/158] Add Support for RedHat/CentOS 9 --- manifests/install.pp | 3 +++ manifests/params.pp | 1 + metadata.json | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/manifests/install.pp b/manifests/install.pp index 6a738435..e7c16964 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -215,6 +215,9 @@ if String($python::version) =~ /^python3/ { $pip_package = "${python}-pip" $pip_provider = $python.regsubst(/^.*python3\.?/,'pip3.').regsubst(/\.$/,'') + } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '9') >= 0) { + $pip_package = 'python3-pip' + $pip_provider = pip3 } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '8') >= 0) { $pip_package = 'python3-pip' $pip_provider = pip3 diff --git a/manifests/params.pp b/manifests/params.pp index 4713c7df..50937bb9 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -28,6 +28,7 @@ $gunicorn_package_name = $facts['os']['family'] ? { 'RedHat' => $facts['os']['release']['major'] ? { + '9' => 'python3-gunicorn', '8' => 'python3-gunicorn', default => 'python-gunicorn', }, diff --git a/metadata.json b/metadata.json index 9e4dd1fc..75189ed8 100644 --- a/metadata.json +++ b/metadata.json @@ -24,7 +24,8 @@ "operatingsystem": "CentOS", "operatingsystemrelease": [ "7", - "8" + "8", + "9" ] }, { From 92b91a0683c52d6b43f8c4579764c99054a9af0e Mon Sep 17 00:00:00 2001 From: Jake Rogers Date: Mon, 27 Nov 2023 11:51:30 -0700 Subject: [PATCH 085/158] apply python-venv exclude to RedHat family instead of just CentOS --- manifests/install.pp | 2 +- spec/classes/python_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index 5d25efda..c3db3d80 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -35,7 +35,7 @@ ## ## CentOS has no extra package for venv ## - unless $facts['os']['name'] == 'CentOS' { + unless $facts['os']['family'] == 'RedHat' { package { 'python-venv': ensure => $python::venv, name => "${python}-venv", diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index d3bde4a4..54c47fc7 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -23,7 +23,7 @@ it { is_expected.to contain_package('pip') } end - if %w[Archlinux CentOS].include?(facts[:os]['name']) + if %w[Archlinux RedHat].include?(facts[:os]['family']) it { is_expected.not_to contain_package('python-venv') } else it { is_expected.to contain_package('python-venv') } @@ -60,7 +60,7 @@ it { is_expected.to compile.with_all_deps } it { is_expected.to contain_package('pip').with(ensure: 'present') } - it { is_expected.to contain_package('python-venv').with(ensure: 'present') } unless facts[:os]['name'] == 'CentOS' + it { is_expected.to contain_package('python-venv').with(ensure: 'present') } unless facts[:os]['family'] == 'RedHat' end case facts[:os]['family'] From 4e144a1464b2b18fc18f41dfe1c6357e87a992b5 Mon Sep 17 00:00:00 2001 From: Jake Rogers Date: Mon, 27 Nov 2023 15:50:23 -0700 Subject: [PATCH 086/158] added RedHat family OSes: Alma, Oracle, RedHat, & Rocky versions 8 & 9 to metadata.json operatingsystem_support array --- metadata.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/metadata.json b/metadata.json index 9e4dd1fc..26f48665 100644 --- a/metadata.json +++ b/metadata.json @@ -20,6 +20,13 @@ "7100-05-03-1837" ] }, + { + "operatingsystem": "AlmaLinux", + "operatingsystemrelease": [ + "8", + "9" + ] + }, { "operatingsystem": "CentOS", "operatingsystemrelease": [ @@ -52,6 +59,27 @@ "20.04" ] }, + { + "operatingsystem": "OracleLinux", + "operatingsystemrelease": [ + "8", + "9" + ] + }, + { + "operatingsystem": "RedHat", + "operatingsystemrelease": [ + "8", + "9" + ] + }, + { + "operatingsystem": "Rocky", + "operatingsystemrelease": [ + "8", + "9" + ] + }, { "operatingsystem": "SLES", "operatingsystemrelease": [ From cdd8de29582dc710c54ca7b5f4c84a1dc5af70d6 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 29 Nov 2023 08:30:59 +0100 Subject: [PATCH 087/158] Add Debian 12 support --- metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 26f48665..101007f3 100644 --- a/metadata.json +++ b/metadata.json @@ -38,7 +38,8 @@ "operatingsystem": "Debian", "operatingsystemrelease": [ "10", - "11" + "11", + "12" ] }, { From b5e76279ab07abcfc226b6c0d64a4047efc1a489 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 29 Nov 2023 08:31:23 +0100 Subject: [PATCH 088/158] Add Ubuntu 22.04 support --- metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 26f48665..b4edb108 100644 --- a/metadata.json +++ b/metadata.json @@ -56,7 +56,8 @@ "operatingsystem": "Ubuntu", "operatingsystemrelease": [ "18.04", - "20.04" + "20.04", + "22.04" ] }, { From 88c6a1157e6662c9acf552e7f6136011a467e8d4 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 29 Nov 2023 09:03:30 +0100 Subject: [PATCH 089/158] Release 7.1.0 --- CHANGELOG.md | 21 +++++++++++++++++++-- metadata.json | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e273bebf..ae0b3b52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,24 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. -## [v7.0.0](https://github.com/voxpupuli/puppet-python/tree/v7.0.0) (2023-07-12) +## [v7.1.0](https://github.com/voxpupuli/puppet-python/tree/v7.1.0) (2023-11-29) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.0.0...v7.1.0) + +**Implemented enhancements:** + +- Add Ubuntu 22.04 support [\#679](https://github.com/voxpupuli/puppet-python/pull/679) ([bastelfreak](https://github.com/bastelfreak)) +- Add Debian 12 support [\#678](https://github.com/voxpupuli/puppet-python/pull/678) ([bastelfreak](https://github.com/bastelfreak)) +- Add OracleLinux/AlmaLinux/Rocky support [\#677](https://github.com/voxpupuli/puppet-python/pull/677) ([JakeTRogers](https://github.com/JakeTRogers)) +- Bump puppet-epel to allow 5.x [\#674](https://github.com/voxpupuli/puppet-python/pull/674) ([dandunckelman](https://github.com/dandunckelman)) +- Allow to skip management of python dev package [\#669](https://github.com/voxpupuli/puppet-python/pull/669) ([smortex](https://github.com/smortex)) + +**Fixed bugs:** + +- Use the wheel group by default on FreeBSD [\#672](https://github.com/voxpupuli/puppet-python/pull/672) ([smortex](https://github.com/smortex)) +- If user declares their requirements.txt in Puppet, don't skip pip installation in python::requirements [\#619](https://github.com/voxpupuli/puppet-python/pull/619) ([acullenn](https://github.com/acullenn)) + +## [v7.0.0](https://github.com/voxpupuli/puppet-python/tree/v7.0.0) (2023-07-27) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v6.4.0...v7.0.0) @@ -796,7 +813,7 @@ Due to a bug in the release pipeline, release v6.0.1 didn't make it to the forge **Closed issues:** - 'system' or any other version of python doesn't work, doesn't get validated [\#129](https://github.com/voxpupuli/puppet-python/issues/129) -- Could not look up qualified variable '::python::install::valid\_versions' [\#126](https://github.com/voxpupuli/puppet-python/issues/126) +- Could not look up qualified variable `python::install::valid_versions` [\#126](https://github.com/voxpupuli/puppet-python/issues/126) ## [1.7.11](https://github.com/voxpupuli/puppet-python/tree/1.7.11) (2014-10-11) diff --git a/metadata.json b/metadata.json index 33eee66a..1c70bb08 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.0.1-rc0", + "version": "7.1.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From 87ebe53f396560d4a687977ec3b17bdc4d98f372 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 29 Nov 2023 09:12:38 +0100 Subject: [PATCH 090/158] [blacksmith] Bump version to 7.1.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 1c70bb08..3ae64d1e 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.1.0", + "version": "7.1.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From f7b0196c9038de79ee1e0d5f0123387baac60077 Mon Sep 17 00:00:00 2001 From: "Lushaj, Valdrin" Date: Wed, 29 Nov 2023 10:00:48 +0100 Subject: [PATCH 091/158] removed unnecessary code, since case >= 8 already does the same thing --- manifests/install.pp | 3 --- 1 file changed, 3 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index e7c16964..6a738435 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -215,9 +215,6 @@ if String($python::version) =~ /^python3/ { $pip_package = "${python}-pip" $pip_provider = $python.regsubst(/^.*python3\.?/,'pip3.').regsubst(/\.$/,'') - } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '9') >= 0) { - $pip_package = 'python3-pip' - $pip_provider = pip3 } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '8') >= 0) { $pip_package = 'python3-pip' $pip_provider = pip3 From b61c32f6f7a1b563638b190c836cd10afe7c70a1 Mon Sep 17 00:00:00 2001 From: "Lushaj, Valdrin" Date: Thu, 30 Nov 2023 12:20:34 +0100 Subject: [PATCH 092/158] Standardize gunicorn package references across RHEL versions --- manifests/params.pp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/manifests/params.pp b/manifests/params.pp index 50937bb9..49bfdeac 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -28,9 +28,8 @@ $gunicorn_package_name = $facts['os']['family'] ? { 'RedHat' => $facts['os']['release']['major'] ? { - '9' => 'python3-gunicorn', - '8' => 'python3-gunicorn', - default => 'python-gunicorn', + '7' => 'python-gunicorn', + default => 'python3-gunicorn', }, default => 'gunicorn', } From 7c9afca27b7cbe73acda2f75dc7e5340f4d35157 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 15 Dec 2023 13:30:39 +0100 Subject: [PATCH 093/158] modulesync 7.2.0 --- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 2 +- .msync.yml | 2 +- .pmtignore | 1 + Gemfile | 8 +++----- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a077911..b66d8ca7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,6 @@ concurrency: jobs: puppet: name: Puppet - uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v1 + uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v2 with: pidfile_workaround: 'false' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 15f17213..55324aa6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,7 @@ on: jobs: release: name: Release - uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v1 + uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v2 with: allowed_owner: 'voxpupuli' secrets: diff --git a/.msync.yml b/.msync.yml index dd3e9572..f8183449 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '7.0.0' +modulesync_config_version: '7.2.0' diff --git a/.pmtignore b/.pmtignore index 58a04088..10b98306 100644 --- a/.pmtignore +++ b/.pmtignore @@ -35,3 +35,4 @@ /.yardoc/ /.yardopts /Dockerfile +/HISTORY.md diff --git a/Gemfile b/Gemfile index db21d3b5..a4a3b204 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ group :test do gem 'voxpupuli-test', '~> 7.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false - gem 'puppet_metadata', '~> 3.0', :require => false + gem 'puppet_metadata', '~> 3.5', :require => false end group :development do @@ -16,13 +16,11 @@ group :development do end group :system_tests do - gem 'voxpupuli-acceptance', '~> 2.0', :require => false + gem 'voxpupuli-acceptance', '~> 3.0', :require => false end group :release do - gem 'github_changelog_generator', '>= 1.16.1', :require => false - gem 'voxpupuli-release', '~> 3.0', :require => false - gem 'faraday-retry', '~> 2.1', :require => false + gem 'voxpupuli-release', '~> 3.0', :require => false end gem 'rake', :require => false From 0d580e0b195727d9efd5912f74d1de3c2b9169ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 1 Jan 2024 12:08:01 -1000 Subject: [PATCH 094/158] Make latest version detection portable This is currently broken on FreeBSD do to the usage of GNU-grep specific grep(1) flag: `-P`. We can use a single sed(1) command with an extended regular expression to achieve the same goal, so use this instead. --- manifests/pip.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index 199e7925..a7ee7a2f 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -220,7 +220,7 @@ $latest_version = join([ "${pip_install} ${legacy_resolver} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", " ${install_args} ${install_editable} ${real_pkgname}==notreallyaversion 2>&1", - ' | grep -oP "\(from versions: .*\)" | sed -E "s/\(from versions: (.*?, )*(.*)\)/\2/g"', + " | sed -nE 's/.*\\(from versions: (.*, )*(.*)\\)/\\2/p'", ' | tr -d "[:space:]"', ]) From 6a16969f5ef571542bd5f50c75e5e178d125df7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 1 Jan 2024 13:10:42 -1000 Subject: [PATCH 095/158] Release 7.2.0 --- CHANGELOG.md | 12 ++++++++++++ metadata.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae0b3b52..45b23ed4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v7.2.0](https://github.com/voxpupuli/puppet-python/tree/v7.2.0) (2024-01-01) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.1.0...v7.2.0) + +**Implemented enhancements:** + +- Add Support for RedHat/CentOS 9 [\#676](https://github.com/voxpupuli/puppet-python/pull/676) ([ValdrinLushaj](https://github.com/ValdrinLushaj)) + +**Fixed bugs:** + +- Make latest version detection portable [\#682](https://github.com/voxpupuli/puppet-python/pull/682) ([smortex](https://github.com/smortex)) + ## [v7.1.0](https://github.com/voxpupuli/puppet-python/tree/v7.1.0) (2023-11-29) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.0.0...v7.1.0) diff --git a/metadata.json b/metadata.json index ea7054b7..ab599ea9 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.1.1-rc0", + "version": "7.2.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From ece8051906eda06468df17b53125b9e184abab8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 1 Jan 2024 13:19:45 -1000 Subject: [PATCH 096/158] [blacksmith] Bump version to 7.2.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index ab599ea9..91338c2d 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.2.0", + "version": "7.2.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From 1b0bd78d3625be06acafcb1ba7c66a6cbd5cb685 Mon Sep 17 00:00:00 2001 From: markuszilch Date: Tue, 6 Feb 2024 12:39:30 +0100 Subject: [PATCH 097/158] modulesync 7.3.0 --- .github/workflows/ci.yml | 7 ++++++- .msync.yml | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b66d8ca7..7216724f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,7 +4,12 @@ name: CI -on: pull_request +on: + pull_request: {} + push: + branches: + - main + - master concurrency: group: ${{ github.ref_name }} diff --git a/.msync.yml b/.msync.yml index f8183449..f46ee025 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '7.2.0' +modulesync_config_version: '7.3.0' From 05cbf65a03eb2c79a204bfd466933f6052026113 Mon Sep 17 00:00:00 2001 From: Wouter Mellema Date: Thu, 8 Feb 2024 16:50:59 +0100 Subject: [PATCH 098/158] Add python_path to pyvenv class (#686) * Add python_path to pyvenv class Issue #685 - Add: `python_path` variable to `python::pyvenv` * Fixed whitespace issue * Update manifests/pyvenv.pp Co-authored-by: Tim Meusel * Updated reference.md --------- Co-authored-by: Wouter Mellema Co-authored-by: Tim Meusel --- REFERENCE.md | 9 +++++++ manifests/pyvenv.pp | 14 +++++++--- spec/acceptance/pyvenv_spec.rb | 49 ++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 3 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 3c51151b..f3a382e5 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -913,6 +913,7 @@ The following parameters are available in the `python::pyvenv` defined type: * [`path`](#-python--pyvenv--path) * [`environment`](#-python--pyvenv--environment) * [`prompt`](#-python--pyvenv--prompt) +* [`python_path`](#-python--pyvenv--python_path) * [`pip_version`](#-python--pyvenv--pip_version) ##### `ensure` @@ -995,6 +996,14 @@ Optionally specify the virtualenv prompt (python >= 3.6) Default value: `undef` +##### `python_path` + +Data type: `Optional[Stdlib::Absolutepath]` + +Optionally specify python path for creation of virtualenv + +Default value: `undef` + ##### `pip_version` Data type: `Python::Venv::PipVersion` diff --git a/manifests/pyvenv.pp b/manifests/pyvenv.pp index 14dcb9fb..5bfc2103 100644 --- a/manifests/pyvenv.pp +++ b/manifests/pyvenv.pp @@ -11,6 +11,7 @@ # @param path Specifies the PATH variable. # @param environment Optionally specify environment variables for pyvenv # @param prompt Optionally specify the virtualenv prompt (python >= 3.6) +# @param python_path Optionally specify python path for creation of virtualenv # # @example # python::pyvenv { '/var/www/project1' : @@ -34,6 +35,7 @@ Array $environment = [], Optional[String[1]] $prompt = undef, Python::Venv::PipVersion $pip_version = 'latest', + Optional[Stdlib::Absolutepath] $python_path = undef, ) { include python @@ -46,11 +48,17 @@ $python_version_parts = split($python_version, '[.]') $normalized_python_version = sprintf('%s.%s', $python_version_parts[0], $python_version_parts[1]) + $local_exec_prefix = $python_path ? { + undef => $python::exec_prefix, + default => $python_path, + } # pyvenv is deprecated since 3.6 and will be removed in 3.8 - if versioncmp($normalized_python_version, '3.6') >=0 { - $virtualenv_cmd = "${python::exec_prefix}python${normalized_python_version} -m venv" + if $python_path != undef { + $virtualenv_cmd = "${python_path} -m venv" + } elsif versioncmp($normalized_python_version, '3.6') >=0 { + $virtualenv_cmd = "${local_exec_prefix}python${normalized_python_version} -m venv" } else { - $virtualenv_cmd = "${python::exec_prefix}pyvenv-${normalized_python_version}" + $virtualenv_cmd = "${local_exec_prefix}pyvenv-${normalized_python_version}" } $_path = $python::provider ? { diff --git a/spec/acceptance/pyvenv_spec.rb b/spec/acceptance/pyvenv_spec.rb index 318c2f73..0b20e27f 100644 --- a/spec/acceptance/pyvenv_spec.rb +++ b/spec/acceptance/pyvenv_spec.rb @@ -192,4 +192,53 @@ class { 'python': its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } end end + + context 'with versioned minimal python::pip and without systempkgs using custom python path' do + it 'works with no errors' do + pp = <<-PUPPET + + class { 'python': + dev => 'present', + venv => 'present', + } + file { '/usr/bin/mycustompython': + ensure => link, + target => '/usr/bin/python', + } + user { 'agent': + ensure => 'present', + managehome => true, + home => '/opt/agent', + } + group { 'agent': + ensure => 'present', + system => true, + } + python::pyvenv { '/opt/agent/venv': + ensure => 'present', + systempkgs => false, + owner => 'agent', + group => 'agent', + mode => '0755', + pip_version => '<= 20.3.4', + python_path => '/usr/bin/mycustompython', + } + python::pip { 'agent' : + ensure => '0.1.2', + virtualenv => '/opt/agent/venv', + owner => 'agent', + group => 'agent', + } + PUPPET + + # Run it twice and test for idempotency + apply_manifest(pp, catch_failures: true) + apply_manifest(pp, catch_changes: true) + end + + describe command('/opt/agent/venv/bin/pip list') do + its(:exit_status) { is_expected.to eq 0 } + its(:stdout) { is_expected.to match %r{agent.* 0\.1\.2} } + end + end end From 7b2e88a52d39f65f26df6ff8316ea056f8cf7d8c Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 8 Feb 2024 16:54:33 +0100 Subject: [PATCH 099/158] Release 7.3.0 --- CHANGELOG.md | 8 ++++++++ metadata.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45b23ed4..51a8fac3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v7.3.0](https://github.com/voxpupuli/puppet-python/tree/v7.3.0) (2024-02-08) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.2.0...v7.3.0) + +**Implemented enhancements:** + +- Add python\_path to pyvenv class [\#686](https://github.com/voxpupuli/puppet-python/pull/686) ([wmellema](https://github.com/wmellema)) + ## [v7.2.0](https://github.com/voxpupuli/puppet-python/tree/v7.2.0) (2024-01-01) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.1.0...v7.2.0) diff --git a/metadata.json b/metadata.json index 91338c2d..a83561e2 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.2.1-rc0", + "version": "7.3.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From 68cdefc85754b955a697b4e9a7e1c33f2c14fa95 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Thu, 8 Feb 2024 17:18:49 +0100 Subject: [PATCH 100/158] [blacksmith] Bump version to 7.3.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index a83561e2..859cc2a4 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.3.0", + "version": "7.3.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From ea485b7c7132b5a5f59e7772f406ef1e59de073c Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 12 Apr 2024 13:45:26 +0200 Subject: [PATCH 101/158] modulesync 7.4.0 --- .github/CONTRIBUTING.md | 16 +++++++++++++--- .gitignore | 2 ++ .msync.yml | 2 +- Dockerfile | 24 ------------------------ 4 files changed, 16 insertions(+), 28 deletions(-) delete mode 100644 Dockerfile diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6aaa603f..88093274 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -131,19 +131,29 @@ You can install all needed gems for spec tests into the modules directory by running: ```sh -bundle install --path .vendor/ --without development system_tests release --jobs "$(nproc)" +bundle config set --local path '.vendor/' +bundle config set --local without 'development system_tests release' +bundle install --jobs "$(nproc)" ``` If you also want to run acceptance tests: ```sh -bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)" +bundle config set --local path '.vendor/' +bundle config set --local without 'development release' +bundle config set --local with 'system_tests' +bundle install --jobs "$(nproc)" ``` Our all in one solution if you don't know if you need to install or update gems: ```sh -bundle install --path .vendor/ --with system_tests --without development release --jobs "$(nproc)"; bundle update; bundle clean +bundle config set --local path '.vendor/' +bundle config set --local without 'development release' +bundle config set --local with 'system_tests' +bundle install --jobs "$(nproc)" +bundle update +bundle clean ``` As an alternative to the `--jobs "$(nproc)` parameter, you can set an diff --git a/.gitignore b/.gitignore index 84fd904c..adea1b01 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,5 @@ .*.sw? /.yardoc/ /Guardfile +bolt-debug.log +.rerun.json diff --git a/.msync.yml b/.msync.yml index f46ee025..28b61dcf 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '7.3.0' +modulesync_config_version: '7.4.0' diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 8dd82d63..00000000 --- a/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -# MANAGED BY MODULESYNC -# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ - -FROM ruby:2.7 - -WORKDIR /opt/puppet - -# https://github.com/puppetlabs/puppet/blob/06ad255754a38f22fb3a22c7c4f1e2ce453d01cb/lib/puppet/provider/service/runit.rb#L39 -RUN mkdir -p /etc/sv - -ARG PUPPET_GEM_VERSION="~> 6.0" -ARG PARALLEL_TEST_PROCESSORS=4 - -# Cache gems -COPY Gemfile . -RUN bundle install --without system_tests development release --path=${BUNDLE_PATH:-vendor/bundle} - -COPY . . - -RUN bundle install -RUN bundle exec rake release_checks - -# Container should not saved -RUN exit 1 From a62eb5225f5b8b46fa2118f1789443c2cd17c4a5 Mon Sep 17 00:00:00 2001 From: markuszilch Date: Thu, 25 Apr 2024 17:23:40 +0200 Subject: [PATCH 102/158] modulesync 7.5.0 --- .msync.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.msync.yml b/.msync.yml index 28b61dcf..ade23f9e 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '7.4.0' +modulesync_config_version: '7.5.0' From 9b214a365449bc63aa822dadfb12ce9546d738a6 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 3 Jun 2024 18:55:41 +0200 Subject: [PATCH 103/158] modulesync 8.0.1 --- .github/workflows/ci.yml | 2 -- .msync.yml | 2 +- .overcommit.yml | 8 +++++--- .rspec | 5 ----- .rspec_parallel | 4 ---- Gemfile | 4 ++-- spec/spec.opts | 6 ------ 7 files changed, 8 insertions(+), 23 deletions(-) delete mode 100644 .rspec delete mode 100644 .rspec_parallel delete mode 100644 spec/spec.opts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7216724f..1f82c4c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,5 +19,3 @@ jobs: puppet: name: Puppet uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v2 - with: - pidfile_workaround: 'false' diff --git a/.msync.yml b/.msync.yml index ade23f9e..876cb3b0 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '7.5.0' +modulesync_config_version: '8.0.1' diff --git a/.overcommit.yml b/.overcommit.yml index d367adae..4ed994cc 100644 --- a/.overcommit.yml +++ b/.overcommit.yml @@ -43,10 +43,12 @@ PreCommit: enabled: true description: 'Runs rubocop on modified files only' command: ['bundle', 'exec', 'rubocop'] - PuppetLint: + RakeTarget: enabled: true - description: 'Runs puppet-lint on modified files only' - command: ['bundle', 'exec', 'puppet-lint'] + description: 'Runs lint on modified files only' + targets: + - 'lint' + command: ['bundle', 'exec', 'rake'] YamlSyntax: enabled: true JsonSyntax: diff --git a/.rspec b/.rspec deleted file mode 100644 index f634583d..00000000 --- a/.rspec +++ /dev/null @@ -1,5 +0,0 @@ -# Managed by modulesync - DO NOT EDIT -# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ - ---format documentation ---color diff --git a/.rspec_parallel b/.rspec_parallel deleted file mode 100644 index a9a84f85..00000000 --- a/.rspec_parallel +++ /dev/null @@ -1,4 +0,0 @@ -# Managed by modulesync - DO NOT EDIT -# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ - ---format progress diff --git a/Gemfile b/Gemfile index a4a3b204..ec7b4cd3 100644 --- a/Gemfile +++ b/Gemfile @@ -4,10 +4,10 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 7.0', :require => false + gem 'voxpupuli-test', '~> 7.2', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false - gem 'puppet_metadata', '~> 3.5', :require => false + gem 'puppet_metadata', '~> 4.0', :require => false end group :development do diff --git a/spec/spec.opts b/spec/spec.opts deleted file mode 100644 index 91cd6427..00000000 --- a/spec/spec.opts +++ /dev/null @@ -1,6 +0,0 @@ ---format -s ---colour ---loadby -mtime ---backtrace From 0ed8cb8883c7da33f73bc0a402df95589cdda36a Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 12 Jun 2024 11:40:28 +0200 Subject: [PATCH 104/158] modulesync 9.0.0 --- .github/labeler.yml | 3 +++ .msync.yml | 2 +- Gemfile | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .github/labeler.yml diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000..7899de84 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,3 @@ +--- +skip-changelog: + - head-branch: ['^release-*', 'release'] diff --git a/.msync.yml b/.msync.yml index 876cb3b0..36071685 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '8.0.1' +modulesync_config_version: '9.0.0' diff --git a/Gemfile b/Gemfile index ec7b4cd3..27cdc0de 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 7.2', :require => false + gem 'voxpupuli-test', '~> 8.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false gem 'puppet_metadata', '~> 4.0', :require => false From d20dc731f39af2875ecb91122469ff27d32da90a Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Tue, 9 Jul 2024 16:19:47 +0200 Subject: [PATCH 105/158] modulesync 9.1.0 --- .github/CONTRIBUTING.md | 12 ++++++++-- .github/labeler.yml | 3 +++ .github/release.yml | 42 +++++++++++++++++++++++++++++++++++ .github/workflows/labeler.yml | 17 ++++++++++++++ .github/workflows/release.yml | 7 ++++++ .msync.yml | 2 +- .puppet-lint.rc | 3 +++ Gemfile | 2 +- spec/spec_helper.rb | 4 ++++ 9 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 .github/release.yml create mode 100644 .github/workflows/labeler.yml diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 88093274..daceb642 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -245,15 +245,23 @@ with: BEAKER_PUPPET_COLLECTION=puppet7 BEAKER_setfile=debian11-64 bundle exec rake beaker ``` +or + +```sh +BEAKER_PUPPET_COLLECTION=none BEAKER_setfile=archlinux-64 bundle exec rake beaker +``` + +This latter example will use the distribution's own version of Puppet. + You can replace the string `debian11` with any common operating system. The following strings are known to work: * ubuntu2004 * ubuntu2204 * debian11 -* centos7 -* centos8 +* debian12 * centos9 +* archlinux * almalinux8 * almalinux9 * fedora36 diff --git a/.github/labeler.yml b/.github/labeler.yml index 7899de84..f2d08d6b 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,3 +1,6 @@ --- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + skip-changelog: - head-branch: ['^release-*', 'release'] diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 00000000..f5b5d7a9 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,42 @@ +--- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + +# https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes + +changelog: + exclude: + labels: + - duplicate + - invalid + - modulesync + - question + - skip-changelog + - wont-fix + - wontfix + + categories: + - title: Breaking Changes 🛠 + labels: + - backwards-incompatible + + - title: New Features 🎉 + labels: + - enhancement + + - title: Bug Fixes 🐛 + labels: + - bug + + - title: Documentation Updates 📚 + labels: + - documentation + - docs + + - title: Dependency Updates ⬆️ + labels: + - dependencies + + - title: Other Changes + labels: + - "*" diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml new file mode 100644 index 00000000..66127cd0 --- /dev/null +++ b/.github/workflows/labeler.yml @@ -0,0 +1,17 @@ +--- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + +name: "Pull Request Labeler" + +on: + pull_request_target: {} + +jobs: + labeler: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 55324aa6..93b33c2b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,3 +20,10 @@ jobs: # https://docs.github.com/en/actions/security-guides/encrypted-secrets username: ${{ secrets.PUPPET_FORGE_USERNAME }} api_key: ${{ secrets.PUPPET_FORGE_API_KEY }} + + create-github-release: + name: Create GitHub Release + runs-on: ubuntu-latest + steps: + - name: Create GitHub release + uses: voxpupuli/gha-create-a-github-release@v1 diff --git a/.msync.yml b/.msync.yml index 36071685..95e8c977 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '9.0.0' +modulesync_config_version: '9.1.0' diff --git a/.puppet-lint.rc b/.puppet-lint.rc index 558d766b..420e819f 100644 --- a/.puppet-lint.rc +++ b/.puppet-lint.rc @@ -1,2 +1,5 @@ +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + --fail-on-warnings --no-parameter_documentation-check diff --git a/Gemfile b/Gemfile index 27cdc0de..7123c663 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 8.0', :require => false + gem 'voxpupuli-test', '~> 9.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false gem 'puppet_metadata', '~> 4.0', :require => false diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 9efb4ae6..58c9b66a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -9,6 +9,10 @@ require 'voxpupuli/test/spec_helper' +RSpec.configure do |c| + c.facterdb_string_keys = false +end + add_mocked_facts! if File.exist?(File.join(__dir__, 'default_module_facts.yml')) From c5d0e96f1f14d344dcefb7345673c8280fa2c6ac Mon Sep 17 00:00:00 2001 From: acojocariu1-godaddy <157803439+acojocariu1-godaddy@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:49:05 +0300 Subject: [PATCH 106/158] use valid, but highly unlikely package version --- manifests/pip.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index a7ee7a2f..25856fc7 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -219,7 +219,7 @@ # more than one line with paretheses. $latest_version = join([ "${pip_install} ${legacy_resolver} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", - " ${install_args} ${install_editable} ${real_pkgname}==notreallyaversion 2>&1", + " ${install_args} ${install_editable} '${real_pkgname}==9!0dev0+x' 2>&1", " | sed -nE 's/.*\\(from versions: (.*, )*(.*)\\)/\\2/p'", ' | tr -d "[:space:]"', ]) From 1808a344e78e4e04ca801e39aea79763360ba53f Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 21 Aug 2024 10:05:27 +0200 Subject: [PATCH 107/158] Drop EoL Ubuntu 18.04 --- metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/metadata.json b/metadata.json index 859cc2a4..f3dce6c4 100644 --- a/metadata.json +++ b/metadata.json @@ -57,7 +57,6 @@ { "operatingsystem": "Ubuntu", "operatingsystemrelease": [ - "18.04", "20.04", "22.04" ] From 5f3ee5fcf2e012730fc54b3b390511207e61a59a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Fri, 21 Jun 2024 17:39:57 -1000 Subject: [PATCH 108/158] Add support for FreeBSD 14 --- metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 859cc2a4..705e0fe3 100644 --- a/metadata.json +++ b/metadata.json @@ -48,7 +48,8 @@ "operatingsystemrelease": [ "11", "12", - "13" + "13", + "14" ] }, { From b51d643f4b0a3ff1c72a2600578b9a0f6ca3268d Mon Sep 17 00:00:00 2001 From: Massimiliano Adamo Date: Sun, 1 Aug 2021 15:39:20 +0200 Subject: [PATCH 109/158] simplify packages version detection --- manifests/pip.pp | 17 +++++++++-------- spec/acceptance/pip_spec.rb | 31 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index 25856fc7..eaada706 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -155,11 +155,13 @@ $_ensure = $ensure } - # Check if searching by explicit version. - if $_ensure =~ /^((19|20)[0-9][0-9]-(0[1-9]|1[1-2])-([0-2][1-9]|3[0-1])|[0-9]+\.\w+\+?\w*(\.\w+)*)$/ { - $grep_regex = "^${real_pkgname}[[:space:]]\\+(\\?${_ensure}\\()$\\|$\\|, \\|[[:space:]]\\)" - } else { - $grep_regex = "^${real_pkgname}[[:space:]].*$" + # We do not try to mimic a version scheme validation which is already implemented by the package manager. + # If it starts with a number it is probably a version. + # If it wasn't or if there is any error, the package manager will trigger a failure. + $grep_regex = $_ensure ? { + /^(present|absent|latest)$/ => "^${real_pkgname}[[:space:]].*$", + /^[0-9].*$/ => "^${real_pkgname}[[:space:]]\\+(\\?${_ensure}\\()$\\|$\\|, \\|[[:space:]]\\)", + default => fail('ensure can be a version number or one of: present, absent, latest') } $extras_string = empty($extras) ? { @@ -193,9 +195,8 @@ } } else { case $_ensure { - /^((19|20)[0-9][0-9]-(0[1-9]|1[1-2])-([0-2][1-9]|3[0-1])|[0-9]+\.\w+\+?\w*(\.\w+)*)$/: { - # Version formats as per http://guide.python-distribute.org/specification.html#standard-versioning-schemes - # Explicit version. + /^[0-9].*$/: { + # Specific version $command = "${pip_install} ${install_args} ${pip_common_args}==${_ensure}" $unless_command = "${pip_env} list | grep -i -e '${grep_regex}'" } diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index 9da96bef..5b64c6de 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -74,6 +74,37 @@ class { 'python': its(:stdout) { is_expected.not_to match %r{agent.* 0\.1\.2} } end + context 'fails to install package with wrong version' do + it 'throws an error' do + pp = <<-PUPPET + class { 'python': + version => '3', + dev => 'present', + } + + python::pyvenv { '/opt/test-venv': + ensure => 'present', + systempkgs => false, + mode => '0755', + pip_version => '<= 20.3.4', + } + + python::pip { 'agent package': + virtualenv => '/opt/test-venv', + pkgname => 'agent', + ensure => '0.1.33+2020-this_is_something-fun', + } + PUPPET + + result = apply_manifest(pp, expect_failures: true) + expect(result.stderr).to contain(%r{returned 1 instead of one of}) + end + end + + describe command('/opt/test-venv/bin/pip show agent') do + its(:exit_status) { is_expected.to eq 1 } + end + context 'install package via extra_index' do it 'works with no errors' do pp = <<-PUPPET From 4a2b2848bdc6a62d6b9be0d55f8ad0803a34464e Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Tue, 26 Nov 2024 15:37:32 +0100 Subject: [PATCH 110/158] pyvenv:: Harden datatype for $environment --- REFERENCE.md | 2 +- manifests/pyvenv.pp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index f3a382e5..d690f047 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -982,7 +982,7 @@ Default value: `['/bin', '/usr/bin', '/usr/sbin', '/usr/local/bin',]` ##### `environment` -Data type: `Array` +Data type: `Array[String[1]]` Optionally specify environment variables for pyvenv diff --git a/manifests/pyvenv.pp b/manifests/pyvenv.pp index 5bfc2103..33b37100 100644 --- a/manifests/pyvenv.pp +++ b/manifests/pyvenv.pp @@ -32,7 +32,7 @@ String[1] $group = 'root', Stdlib::Filemode $mode = '0755', Array[Stdlib::Absolutepath] $path = ['/bin', '/usr/bin', '/usr/sbin', '/usr/local/bin',], - Array $environment = [], + Array[String[1]] $environment = [], Optional[String[1]] $prompt = undef, Python::Venv::PipVersion $pip_version = 'latest', Optional[Stdlib::Absolutepath] $python_path = undef, From d6bc593245b779dfd5b7f519187decce2289e074 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Tue, 26 Nov 2024 21:33:38 +0100 Subject: [PATCH 111/158] CI: Dont pin pip to an outdated version --- spec/acceptance/pip_spec.rb | 4 ---- spec/acceptance/pyvenv_spec.rb | 6 ------ 2 files changed, 10 deletions(-) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index 5b64c6de..4c4af6cf 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -14,7 +14,6 @@ class { 'python': ensure => 'present', systempkgs => false, mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent package': @@ -47,7 +46,6 @@ class { 'python': ensure => 'present', systempkgs => false, mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent package install': @@ -86,7 +84,6 @@ class { 'python': ensure => 'present', systempkgs => false, mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent package': @@ -116,7 +113,6 @@ class { 'python': ensure => 'present', systempkgs => false, mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent package via extra_index': diff --git a/spec/acceptance/pyvenv_spec.rb b/spec/acceptance/pyvenv_spec.rb index 0b20e27f..263e4a40 100644 --- a/spec/acceptance/pyvenv_spec.rb +++ b/spec/acceptance/pyvenv_spec.rb @@ -26,7 +26,6 @@ class { 'python': owner => 'agent', group => 'agent', mode => '0755', - pip_version => '<= 20.3.4', } PUPPET @@ -58,7 +57,6 @@ class { 'python': owner => 'agent', group => 'agent', mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent' : ensure => 'latest', @@ -98,7 +96,6 @@ class { 'python': owner => 'agent', group => 'agent', mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent' : virtualenv => '/opt/agent/venv', @@ -135,7 +132,6 @@ class { 'python': owner => 'agent', group => 'agent', mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent' : virtualenv => '/opt/agent/venv', @@ -172,7 +168,6 @@ class { 'python': owner => 'agent', group => 'agent', mode => '0755', - pip_version => '<= 20.3.4', } python::pip { 'agent' : ensure => '0.1.2', @@ -220,7 +215,6 @@ class { 'python': owner => 'agent', group => 'agent', mode => '0755', - pip_version => '<= 20.3.4', python_path => '/usr/bin/mycustompython', } python::pip { 'agent' : From cad5b1b86ae028dbe5f6590aba43aaaf3df440d7 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Tue, 26 Nov 2024 21:56:34 +0100 Subject: [PATCH 112/158] CI: Dont set python version --- spec/acceptance/pip_spec.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spec/acceptance/pip_spec.rb b/spec/acceptance/pip_spec.rb index 4c4af6cf..83a639fa 100644 --- a/spec/acceptance/pip_spec.rb +++ b/spec/acceptance/pip_spec.rb @@ -76,8 +76,7 @@ class { 'python': it 'throws an error' do pp = <<-PUPPET class { 'python': - version => '3', - dev => 'present', + dev => 'present', } python::pyvenv { '/opt/test-venv': From a0cf00fe8c5c235bed5e9e41de78af5ab7c75f09 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 13 Sep 2024 14:53:59 +0200 Subject: [PATCH 113/158] modulesync 9.2.0 --- .github/workflows/ci.yml | 3 ++- .github/workflows/labeler.yml | 1 + .github/workflows/release.yml | 1 + .msync.yml | 2 +- .pmtignore | 1 + Gemfile | 2 +- 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f82c4c9..8c32acf9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ name: CI +# yamllint disable-line rule:truthy on: pull_request: {} push: @@ -18,4 +19,4 @@ concurrency: jobs: puppet: name: Puppet - uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v2 + uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v3 diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 66127cd0..73be88dc 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -4,6 +4,7 @@ name: "Pull Request Labeler" +# yamllint disable-line rule:truthy on: pull_request_target: {} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 93b33c2b..1b147750 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,7 @@ name: Release +# yamllint disable-line rule:truthy on: push: tags: diff --git a/.msync.yml b/.msync.yml index 95e8c977..8606f6ec 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '9.1.0' +modulesync_config_version: '9.2.0' diff --git a/.pmtignore b/.pmtignore index 10b98306..a9d37aa0 100644 --- a/.pmtignore +++ b/.pmtignore @@ -20,6 +20,7 @@ /.github/ /.librarian/ /Puppetfile.lock +/Puppetfile *.iml /.editorconfig /.fixtures.yml diff --git a/Gemfile b/Gemfile index 7123c663..2ac98f89 100644 --- a/Gemfile +++ b/Gemfile @@ -26,7 +26,7 @@ end gem 'rake', :require => false gem 'facter', ENV['FACTER_GEM_VERSION'], :require => false, :groups => [:test] -puppetversion = ENV['PUPPET_GEM_VERSION'] || '~> 7.24' +puppetversion = ENV['PUPPET_GEM_VERSION'] || [">= 7.24", "< 9"] gem 'puppet', puppetversion, :require => false, :groups => [:test] # vim: syntax=ruby From a2a473d00f74996f78ee42b3c7f12b3fa664000b Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 16 Sep 2024 20:59:49 +0200 Subject: [PATCH 114/158] modulesync 9.3.0 --- .github/workflows/release.yml | 2 +- .msync.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1b147750..4adf65cd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ on: jobs: release: name: Release - uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v2 + uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v3 with: allowed_owner: 'voxpupuli' secrets: diff --git a/.msync.yml b/.msync.yml index 8606f6ec..ac84b45d 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '9.2.0' +modulesync_config_version: '9.3.0' From 8387705f9f4da8ab8eae7aaaa73a87f9bcb4182f Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 27 Nov 2024 09:23:09 +0100 Subject: [PATCH 115/158] Add Ubuntu 24.04 support --- metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 705e0fe3..838a59f9 100644 --- a/metadata.json +++ b/metadata.json @@ -60,7 +60,8 @@ "operatingsystemrelease": [ "18.04", "20.04", - "22.04" + "22.04", + "24.04" ] }, { From 6615ab8ec4511f084be8b60ec6176222496318b4 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 21 Aug 2024 10:16:11 +0200 Subject: [PATCH 116/158] Release 7.4.0 --- CHANGELOG.md | 24 ++++++++++++++++++++++-- metadata.json | 2 +- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51a8fac3..9e72c8e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,26 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v7.4.0](https://github.com/voxpupuli/puppet-python/tree/v7.4.0) (2024-11-27) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.3.0...v7.4.0) + +**Implemented enhancements:** + +- Add Ubuntu 24.04 support [\#707](https://github.com/voxpupuli/puppet-python/pull/707) ([bastelfreak](https://github.com/bastelfreak)) +- pyvenv: Harden datatype for `$environment` [\#704](https://github.com/voxpupuli/puppet-python/pull/704) ([bastelfreak](https://github.com/bastelfreak)) +- simplify packages version detection [\#703](https://github.com/voxpupuli/puppet-python/pull/703) ([maxadamo](https://github.com/maxadamo)) +- Add support for FreeBSD 14 [\#694](https://github.com/voxpupuli/puppet-python/pull/694) ([smortex](https://github.com/smortex)) + +**Fixed bugs:** + +- `python::pip`'s `notreallyaversion` is not compatible with latest `pip` \(\>= 24.1\) due to changed output \(again\) [\#695](https://github.com/voxpupuli/puppet-python/issues/695) +- Fix `python::pip` - use valid, but highly unlikely package version [\#696](https://github.com/voxpupuli/puppet-python/pull/696) ([acojocariu1-godaddy](https://github.com/acojocariu1-godaddy)) + +**Merged pull requests:** + +- CI: Dont pin pip to an outdated version and don't force python3 package installation [\#706](https://github.com/voxpupuli/puppet-python/pull/706) ([bastelfreak](https://github.com/bastelfreak)) + ## [v7.3.0](https://github.com/voxpupuli/puppet-python/tree/v7.3.0) (2024-02-08) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.2.0...v7.3.0) @@ -293,7 +313,7 @@ Due to a bug in the release pipeline, release v6.0.1 didn't make it to the forge - Allow HTTP\_PROXY on bootstrap. [\#488](https://github.com/voxpupuli/puppet-python/pull/488) ([pillarsdotnet](https://github.com/pillarsdotnet)) - Modern pip can install wheels without wheel installed [\#483](https://github.com/voxpupuli/puppet-python/pull/483) ([asottile](https://github.com/asottile)) -- Allow arbitrary pip providers [\#480](https://github.com/voxpupuli/puppet-python/pull/480) ([ethanhs](https://github.com/ethanhs)) +- Allow arbitrary pip providers [\#480](https://github.com/voxpupuli/puppet-python/pull/480) ([emmatyping](https://github.com/emmatyping)) - Add manage\_scl boolean to control managing SCL [\#464](https://github.com/voxpupuli/puppet-python/pull/464) ([bodgit](https://github.com/bodgit)) - Allow pip to work in AIX systems [\#461](https://github.com/voxpupuli/puppet-python/pull/461) ([feltra](https://github.com/feltra)) - move pip bootstrap into a seperate class [\#460](https://github.com/voxpupuli/puppet-python/pull/460) ([feltra](https://github.com/feltra)) @@ -631,7 +651,7 @@ Due to a bug in the release pipeline, release v6.0.1 didn't make it to the forge - Revert "Update virtualenv\_version.rb" [\#267](https://github.com/voxpupuli/puppet-python/pull/267) ([shivapoudel](https://github.com/shivapoudel)) - Update virtualenv\_version.rb [\#265](https://github.com/voxpupuli/puppet-python/pull/265) ([shivapoudel](https://github.com/shivapoudel)) - Update params.pp [\#263](https://github.com/voxpupuli/puppet-python/pull/263) ([philippeback](https://github.com/philippeback)) -- Bug virtualenv instead of virtualenv-$version [\#261](https://github.com/voxpupuli/puppet-python/pull/261) ([Asher256](https://github.com/Asher256)) +- Bug virtualenv instead of virtualenv-$version [\#261](https://github.com/voxpupuli/puppet-python/pull/261) ([ghost](https://github.com/ghost)) - Addressing stankevich/puppet-python issue \#258. [\#260](https://github.com/voxpupuli/puppet-python/pull/260) ([rpocase](https://github.com/rpocase)) ## [1.10.0](https://github.com/voxpupuli/puppet-python/tree/1.10.0) (2015-10-29) diff --git a/metadata.json b/metadata.json index 838a59f9..59ff7f08 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.3.1-rc0", + "version": "7.4.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From a775c6c70806e894355c992da14651c8cfc3cda4 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 27 Nov 2024 09:51:15 +0100 Subject: [PATCH 117/158] [blacksmith] Bump version to 7.4.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 59ff7f08..c7b6d37a 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.4.0", + "version": "7.4.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From b50bf95b6703700a4e21ae87c1bc9204ec1e5854 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 27 Nov 2024 09:51:44 +0100 Subject: [PATCH 118/158] Drop EoL Debian 10 support --- manifests/install.pp | 2 +- metadata.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index c3db3d80..e1fc22e4 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -230,7 +230,7 @@ } elsif ($facts['os']['name'] == 'Ubuntu') and (versioncmp($facts['os']['release']['major'], '20.04') >= 0) { $pip_package = 'python3-pip' $pip_provider = 'pip3' - } elsif ($facts['os']['name'] == 'Debian') and (versioncmp($facts['os']['release']['major'], '11') >= 0) { + } elsif $facts['os']['name'] == 'Debian' { $pip_package = 'python3-pip' $pip_provider = 'pip3' } else { diff --git a/metadata.json b/metadata.json index c7b6d37a..c3cd8010 100644 --- a/metadata.json +++ b/metadata.json @@ -38,7 +38,6 @@ { "operatingsystem": "Debian", "operatingsystemrelease": [ - "10", "11", "12" ] From de7d06e16f1d5688c38f0cdd065525d46728c79f Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 27 Nov 2024 10:10:58 +0100 Subject: [PATCH 119/158] Drop EoL CentOS 7/8 support --- manifests/install.pp | 5 +-- metadata.json | 2 -- spec/classes/python_spec.rb | 70 ------------------------------------- 3 files changed, 1 insertion(+), 76 deletions(-) diff --git a/manifests/install.pp b/manifests/install.pp index e1fc22e4..c8a279c1 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -215,12 +215,9 @@ if String($python::version) =~ /^python3/ { $pip_package = "${python}-pip" $pip_provider = $python.regsubst(/^.*python3\.?/,'pip3.').regsubst(/\.$/,'') - } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '8') >= 0) { + } elsif $facts['os']['family'] == 'RedHat' { $pip_package = 'python3-pip' $pip_provider = pip3 - } elsif ($facts['os']['family'] == 'RedHat') and (versioncmp($facts['os']['release']['major'], '7') >= 0) { - $pip_package = 'python2-pip' - $pip_provider = pip2 } elsif $facts['os']['family'] == 'FreeBSD' { $pip_package = "py${python::version}-pip" $pip_provider = 'pip' diff --git a/metadata.json b/metadata.json index c3cd8010..80d0d684 100644 --- a/metadata.json +++ b/metadata.json @@ -30,8 +30,6 @@ { "operatingsystem": "CentOS", "operatingsystemrelease": [ - "7", - "8", "9" ] }, diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 54c47fc7..fd39b26d 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -265,76 +265,6 @@ end when 'RedHat', 'CentOS' case facts[:os]['release']['major'] - when '7' - - context 'on a Redhat 7 OS' do - it { is_expected.to contain_class('python::install') } - it { is_expected.to contain_package('pip').with_name('python2-pip') } - - describe 'with python::version' do - context 'python36' do - let(:params) { { version: 'python36' } } - - it { is_expected.to compile.with_all_deps } - it { is_expected.to contain_package('pip').with_name('python36-pip') } - it { is_expected.to contain_package('python').with_name('python36') } - it { is_expected.to contain_package('python-dev').with_name('python36-devel') } - end - end - - describe 'with manage_gunicorn' do - context 'true' do - let(:params) { { manage_gunicorn: true } } - - it { is_expected.to contain_package('gunicorn').with_name('python-gunicorn') } - end - - context 'empty args' do - # let(:params) {{ :manage_gunicorn => '' }} - it { is_expected.to contain_package('gunicorn').with_name('python-gunicorn') } - end - - context 'false' do - let(:params) { { manage_gunicorn: false } } - - it { is_expected.not_to contain_package('gunicorn') } - end - end - - describe 'with python::provider' do - context 'scl' do - describe 'with version' do - context '3.6 SCL meta package' do - let(:params) { { version: 'rh-python36' } } - - it { is_expected.to compile.with_all_deps } - end - - context '3.6 SCL python package' do - let(:params) { { version: 'rh-python36-python' } } - - it { is_expected.to compile.with_all_deps } - end - end - - describe 'with manage_scl' do - context 'true' do - let(:params) { { provider: 'scl', manage_scl: true } } - - it { is_expected.to contain_package('centos-release-scl') } - it { is_expected.to contain_package('scl-utils') } - end - - context 'false' do - let(:params) { { provider: 'scl', manage_scl: false } } - - it { is_expected.not_to contain_package('centos-release-scl') } - it { is_expected.not_to contain_package('scl-utils') } - end - end - end - end - end when '8' context 'on a Redhat 8 OS' do it { is_expected.to contain_class('python::install') } From 1ea8281d5fe466dcc452e0bf13fece55a2bec002 Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Wed, 5 Feb 2025 10:36:40 +0100 Subject: [PATCH 120/158] modulesync 9.4.0 --- .github/workflows/prepare_release.yml | 23 +++++++++++++++++++++++ .github/workflows/release.yml | 7 ------- .msync.yml | 2 +- 3 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/prepare_release.yml diff --git a/.github/workflows/prepare_release.yml b/.github/workflows/prepare_release.yml new file mode 100644 index 00000000..01efa1a8 --- /dev/null +++ b/.github/workflows/prepare_release.yml @@ -0,0 +1,23 @@ +--- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + +name: 'Prepare Release' + +on: + workflow_dispatch: + inputs: + version: + description: 'Module version to be released. Must be a valid semver string without leading v. (1.2.3)' + required: false + +jobs: + release_prep: + uses: 'voxpupuli/gha-puppet/.github/workflows/prepare_release.yml@v3' + with: + version: ${{ github.event.inputs.version }} + allowed_owner: 'voxpupuli' + secrets: + # Configure secrets here: + # https://docs.github.com/en/actions/security-guides/encrypted-secrets + github_pat: '${{ secrets.PCCI_PAT_RELEASE_PREP }}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4adf65cd..3db60fbc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,10 +21,3 @@ jobs: # https://docs.github.com/en/actions/security-guides/encrypted-secrets username: ${{ secrets.PUPPET_FORGE_USERNAME }} api_key: ${{ secrets.PUPPET_FORGE_API_KEY }} - - create-github-release: - name: Create GitHub Release - runs-on: ubuntu-latest - steps: - - name: Create GitHub release - uses: voxpupuli/gha-create-a-github-release@v1 diff --git a/.msync.yml b/.msync.yml index ac84b45d..36e892e9 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '9.3.0' +modulesync_config_version: '9.4.0' From 44d77b110e52697352de3ddba263e30f8ffdfd1f Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:29:41 +0000 Subject: [PATCH 121/158] modulesync 9.5.0-4-g2cf9dc0 --- .msync.yml | 2 +- Gemfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.msync.yml b/.msync.yml index 36e892e9..32df814c 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '9.4.0' +modulesync_config_version: '9.5.0' diff --git a/Gemfile b/Gemfile index 2ac98f89..ea079b08 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ group :test do gem 'voxpupuli-test', '~> 9.0', :require => false gem 'coveralls', :require => false gem 'simplecov-console', :require => false - gem 'puppet_metadata', '~> 4.0', :require => false + gem 'puppet_metadata', '~> 5.0', :require => false end group :development do @@ -16,7 +16,7 @@ group :development do end group :system_tests do - gem 'voxpupuli-acceptance', '~> 3.0', :require => false + gem 'voxpupuli-acceptance', '~> 3.5', :require => false end group :release do From 81daea252076379ab869761040f0c86bbc9e7488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Thu, 24 Apr 2025 11:11:07 -1000 Subject: [PATCH 122/158] Add a unit test to illustrate the pyvenv bootstrap issue This module that manage python needs python to be installed in order to work properly under certain conditions. When python is not installed on a node, the python_version fact does not have a value. When using `python::pyvenv` on such a system without a specific version set, a call of the split() function on this unde value cause an error te be raised: ``` Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Function Call, The function 'split' was called with arguments it does not accept. It expects one of: (String str, String pattern) rejected: parameter 'str' expects a String value, got Undef (String str, Regexp pattern) rejected: parameter 'str' expects a String value, got Undef (String str, Type[Regexp] pattern) rejected: parameter 'str' expects a String value, got Undef (Sensitive[String] sensitive, String pattern) rejected: parameter 'sensitive' expects a Sensitive[String] value, got Undef (Sensitive[String] sensitive, Regexp pattern) rejected: parameter 'sensitive' expects a Sensitive[String] value, got Undef (Sensitive[String] sensitive, Type[Regexp] pattern) rejected: parameter 'sensitive' expects a Sensitive[String] value, got Undef (file: /etc/puppetlabs/code/environments/production/modules/python/manifests/pyvenv.pp, line: 48, column: 34) (file: /etc/puppetlabs/code/environments/production/modules/taiga/manifests/back/install.pp, line: 15) on node debian12-64-puppet7.example.com ``` --- spec/defines/pyvenv_spec.rb | 125 ++++++++++++++++++++---------------- 1 file changed, 68 insertions(+), 57 deletions(-) diff --git a/spec/defines/pyvenv_spec.rb b/spec/defines/pyvenv_spec.rb index ba49fb37..b0578bec 100644 --- a/spec/defines/pyvenv_spec.rb +++ b/spec/defines/pyvenv_spec.rb @@ -6,83 +6,94 @@ on_supported_os.each do |os, facts| next if os == 'gentoo-3-x86_64' + let :title do + '/opt/env' + end + context "on #{os}" do - let :facts do - # python3 is required to use pyvenv - facts.merge( - python3_version: '3.5.1' - ) - end - let :title do - '/opt/env' + context 'with default parameters' do + let :facts do + facts + end + + it { is_expected.to compile } end - context 'with default parameters' do - it { is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') } - it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } + context 'with a specific python3 version' do + let :facts do + # python3 is required to use pyvenv + facts.merge( + python3_version: '3.5.1' + ) + end + + context 'with default parameters' do + it { is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') } + it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } + end + + describe 'when ensure' do + context 'is absent' do + let :params do + { + ensure: 'absent' + } + end + + it { + expect(subject).to contain_file('/opt/env').with_ensure('absent').with_purge(true) + } + end + end end - describe 'when ensure' do - context 'is absent' do + context "prompt on #{os} with python 3.6" do + let :facts do + # python 3.6 is required for venv and prompt + facts.merge( + python3_version: '3.6.1' + ) + end + let :title do + '/opt/env' + end + + context 'with prompt' do let :params do { - ensure: 'absent' + prompt: 'custom prompt', } end it { - expect(subject).to contain_file('/opt/env').with_ensure('absent').with_purge(true) + is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') + is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('python3.6 -m venv --clear --prompt custom\\ prompt /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } end end - end - context "prompt on #{os} with python 3.6" do - let :facts do - # python 3.6 is required for venv and prompt - facts.merge( - python3_version: '3.6.1' - ) - end - let :title do - '/opt/env' - end - - context 'with prompt' do - let :params do - { - prompt: 'custom prompt', - } + context "prompt on #{os} with python 3.5" do + let :facts do + facts.merge( + python3_version: '3.5.1' + ) + end + let :title do + '/opt/env' end - it { - is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') - is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('python3.6 -m venv --clear --prompt custom\\ prompt /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') - } - end - end - - context "prompt on #{os} with python 3.5" do - let :facts do - facts.merge( - python3_version: '3.5.1' - ) - end - let :title do - '/opt/env' - end + context 'with prompt' do + let :params do + { + prompt: 'custom prompt', + } + end - context 'with prompt' do - let :params do - { - prompt: 'custom prompt', + it { + is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') + is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } end - - it { - is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') - is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') - } end end end From 9ad7d6758197ce6df762e93ead1a65670942f5e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Thu, 24 Apr 2025 12:00:02 -1000 Subject: [PATCH 123/158] Add fallback on the default system version of Python When Python is not installed, the python_version fact is undef, but we need to know which version of Python is going to be installed by the module in order to use the proper command invocation for building virtual envs. This issue only occurs when the user use the system version of Python, so add the default version of Python for supported operating systems into Hiera and use that as a fallback when the version of Python is unknown. --- REFERENCE.md | 7 +++++++ data/common.yaml | 1 + data/os/Archlinux.yaml | 1 + data/os/Debian/11.yaml | 1 + data/os/Debian/12.yaml | 1 + data/os/FreeBSD.yaml | 1 + data/os/Gentoo.yaml | 1 + data/os/RedHat/8.yaml | 1 + data/os/RedHat/9.yaml | 1 + data/os/Ubuntu/20.04.yaml | 1 + data/os/Ubuntu/22.04.yaml | 1 + data/os/Ubuntu/24.04.yaml | 1 + hiera.yaml | 23 +++++++++++++++++++++++ manifests/init.pp | 2 ++ manifests/pyvenv.pp | 2 +- 15 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 data/common.yaml create mode 100644 data/os/Archlinux.yaml create mode 100644 data/os/Debian/11.yaml create mode 100644 data/os/Debian/12.yaml create mode 100644 data/os/FreeBSD.yaml create mode 100644 data/os/Gentoo.yaml create mode 100644 data/os/RedHat/8.yaml create mode 100644 data/os/RedHat/9.yaml create mode 100644 data/os/Ubuntu/20.04.yaml create mode 100644 data/os/Ubuntu/22.04.yaml create mode 100644 data/os/Ubuntu/24.04.yaml create mode 100644 hiera.yaml diff --git a/REFERENCE.md b/REFERENCE.md index d690f047..4352dd43 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -67,6 +67,7 @@ class { 'python' : The following parameters are available in the `python` class: +* [`default_system_version`](#-python--default_system_version) * [`ensure`](#-python--ensure) * [`version`](#-python--version) * [`pip`](#-python--pip) @@ -92,6 +93,12 @@ The following parameters are available in the `python` class: * [`anaconda_installer_url`](#-python--anaconda_installer_url) * [`anaconda_install_path`](#-python--anaconda_install_path) +##### `default_system_version` + +Data type: `Python::Version` + +The default version of Python provided by the operating system. Only used as a fallback if Python is not installed yet to determine how to handle some actions that vary depending on the Python version used. + ##### `ensure` Data type: `Python::Package::Ensure` diff --git a/data/common.yaml b/data/common.yaml new file mode 100644 index 00000000..8d945465 --- /dev/null +++ b/data/common.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.11" diff --git a/data/os/Archlinux.yaml b/data/os/Archlinux.yaml new file mode 100644 index 00000000..3bd58ed5 --- /dev/null +++ b/data/os/Archlinux.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.13" diff --git a/data/os/Debian/11.yaml b/data/os/Debian/11.yaml new file mode 100644 index 00000000..c3b18ece --- /dev/null +++ b/data/os/Debian/11.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.9" diff --git a/data/os/Debian/12.yaml b/data/os/Debian/12.yaml new file mode 100644 index 00000000..8d945465 --- /dev/null +++ b/data/os/Debian/12.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.11" diff --git a/data/os/FreeBSD.yaml b/data/os/FreeBSD.yaml new file mode 100644 index 00000000..8d945465 --- /dev/null +++ b/data/os/FreeBSD.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.11" diff --git a/data/os/Gentoo.yaml b/data/os/Gentoo.yaml new file mode 100644 index 00000000..68b52939 --- /dev/null +++ b/data/os/Gentoo.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.12" diff --git a/data/os/RedHat/8.yaml b/data/os/RedHat/8.yaml new file mode 100644 index 00000000..5de86ac2 --- /dev/null +++ b/data/os/RedHat/8.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.6" diff --git a/data/os/RedHat/9.yaml b/data/os/RedHat/9.yaml new file mode 100644 index 00000000..c3b18ece --- /dev/null +++ b/data/os/RedHat/9.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.9" diff --git a/data/os/Ubuntu/20.04.yaml b/data/os/Ubuntu/20.04.yaml new file mode 100644 index 00000000..20aa9c3e --- /dev/null +++ b/data/os/Ubuntu/20.04.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.8" diff --git a/data/os/Ubuntu/22.04.yaml b/data/os/Ubuntu/22.04.yaml new file mode 100644 index 00000000..383744c0 --- /dev/null +++ b/data/os/Ubuntu/22.04.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.10" diff --git a/data/os/Ubuntu/24.04.yaml b/data/os/Ubuntu/24.04.yaml new file mode 100644 index 00000000..68b52939 --- /dev/null +++ b/data/os/Ubuntu/24.04.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.12" diff --git a/hiera.yaml b/hiera.yaml new file mode 100644 index 00000000..9cea3e4d --- /dev/null +++ b/hiera.yaml @@ -0,0 +1,23 @@ +--- +version: 5 + +defaults: # Used for any hierarchy level that omits these keys. + datadir: data # This path is relative to hiera.yaml's directory. + data_hash: yaml_data # Use the built-in YAML backend. + +hierarchy: + - name: "archicture" + paths: + - "architecture/%{facts.os.architecture}.yaml" + - "architecture/common.yaml" + - name: "osfamily/major release" + paths: + - "os/%{facts.os.name}/%{facts.os.release.major}.yaml" # Used to distinguish between Debian and Ubuntu + - "os/%{facts.os.family}/%{facts.os.release.major}.yaml" # + - "os/%{facts.os.family}/%{facts.kernelrelease}.yaml" # Used for Solaris + - name: "osfamily" + paths: + - "os/%{facts.os.name}.yaml" + - "os/%{facts.os.family}.yaml" + - name: 'common' + path: 'common.yaml' diff --git a/manifests/init.pp b/manifests/init.pp index b457edbd..3f5ac23f 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,5 +1,6 @@ # @summary Installs and manages python, python-dev and gunicorn. # +# @param default_system_version The default version of Python provided by the operating system. Only used as a fallback if Python is not installed yet to determine how to handle some actions that vary depending on the Python version used. # @param ensure Desired installation state for the Python package. # @param version Python version to install. Beware that valid values for this differ a) by the provider you choose and b) by the osfamily/operatingsystem you are using. # Allowed values: @@ -38,6 +39,7 @@ # } # class python ( + Python::Version $default_system_version, Python::Package::Ensure $ensure = 'present', Python::Version $version = $facts['os']['family'] ? { 'Archlinux' => 'system', default => '3' }, Python::Package::Ensure $pip = 'present', diff --git a/manifests/pyvenv.pp b/manifests/pyvenv.pp index 33b37100..6627a406 100644 --- a/manifests/pyvenv.pp +++ b/manifests/pyvenv.pp @@ -41,7 +41,7 @@ if $ensure == 'present' { $python_version = $version ? { - 'system' => $facts['python3_version'], + 'system' => $facts['python3_version'].lest || { $python::default_system_version }, default => $version, } From a2723a8137503802848d475fb7f37f0904e8cb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 28 Apr 2025 08:30:01 -1000 Subject: [PATCH 124/158] Drop EoL FreeBSD 11/12 support --- metadata.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/metadata.json b/metadata.json index b061ee01..29bec65c 100644 --- a/metadata.json +++ b/metadata.json @@ -43,8 +43,6 @@ { "operatingsystem": "FreeBSD", "operatingsystemrelease": [ - "11", - "12", "13", "14" ] From 9e110c9382999d16bc0a5cdaea0120541ff502d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 28 Apr 2025 08:32:05 -1000 Subject: [PATCH 125/158] Drop EoL Ubuntu 20.04 support --- data/os/Ubuntu/20.04.yaml | 1 - manifests/install.pp | 2 +- metadata.json | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 data/os/Ubuntu/20.04.yaml diff --git a/data/os/Ubuntu/20.04.yaml b/data/os/Ubuntu/20.04.yaml deleted file mode 100644 index 20aa9c3e..00000000 --- a/data/os/Ubuntu/20.04.yaml +++ /dev/null @@ -1 +0,0 @@ -python::default_system_version: "3.8" diff --git a/manifests/install.pp b/manifests/install.pp index c8a279c1..60adfc05 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -224,7 +224,7 @@ } elsif $facts['os']['family'] == 'Gentoo' { $pip_package = 'dev-python/pip' $pip_provider = 'pip' - } elsif ($facts['os']['name'] == 'Ubuntu') and (versioncmp($facts['os']['release']['major'], '20.04') >= 0) { + } elsif $facts['os']['name'] == 'Ubuntu' { $pip_package = 'python3-pip' $pip_provider = 'pip3' } elsif $facts['os']['name'] == 'Debian' { diff --git a/metadata.json b/metadata.json index b061ee01..32d855ee 100644 --- a/metadata.json +++ b/metadata.json @@ -55,7 +55,6 @@ { "operatingsystem": "Ubuntu", "operatingsystemrelease": [ - "20.04", "22.04", "24.04" ] From a476028061e90e3c39d5f2bb9529feb22cdc1b42 Mon Sep 17 00:00:00 2001 From: Release Automation Date: Mon, 28 Apr 2025 19:15:07 +0000 Subject: [PATCH 126/158] Release 8.0.0 --- CHANGELOG.md | 18 +++++++++++++++++- metadata.json | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e72c8e2..6a4c996b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v8.0.0](https://github.com/voxpupuli/puppet-python/tree/v8.0.0) (2025-04-28) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.4.0...v8.0.0) + +**Breaking changes:** + +- Drop EoL Ubuntu 20.04 support [\#719](https://github.com/voxpupuli/puppet-python/pull/719) ([smortex](https://github.com/smortex)) +- Drop EoL FreeBSD 11/12 support [\#718](https://github.com/voxpupuli/puppet-python/pull/718) ([smortex](https://github.com/smortex)) +- Drop EoL Ubuntu 18.04 support [\#710](https://github.com/voxpupuli/puppet-python/pull/710) ([bastelfreak](https://github.com/bastelfreak)) +- Drop EoL CentOS 7/8 support [\#709](https://github.com/voxpupuli/puppet-python/pull/709) ([bastelfreak](https://github.com/bastelfreak)) +- Drop EoL Debian 10 support [\#708](https://github.com/voxpupuli/puppet-python/pull/708) ([bastelfreak](https://github.com/bastelfreak)) + +**Fixed bugs:** + +- Fix bootstrapping `python::pyvenv` when Python is not installed [\#716](https://github.com/voxpupuli/puppet-python/pull/716) ([smortex](https://github.com/smortex)) + ## [v7.4.0](https://github.com/voxpupuli/puppet-python/tree/v7.4.0) (2024-11-27) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.3.0...v7.4.0) @@ -78,7 +94,7 @@ These should not affect the functionality of the module. **Fixed bugs:** -- Fix pip installation on Gentoo [\#651](https://github.com/voxpupuli/puppet-python/pull/651) ([jameslikeslinux](https://github.com/jameslikeslinux)) +- Fix pip installation on Gentoo [\#651](https://github.com/voxpupuli/puppet-python/pull/651) ([puppetjoy](https://github.com/puppetjoy)) ## [v6.4.0](https://github.com/voxpupuli/puppet-python/tree/v6.4.0) (2022-11-06) diff --git a/metadata.json b/metadata.json index 68aece65..4f3a512e 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "7.4.1-rc0", + "version": "8.0.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From dfef775dff983d3ddb3193882a7e3c0ed38ee161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Mon, 28 Apr 2025 09:33:02 -1000 Subject: [PATCH 127/158] [blacksmith] Bump version to 8.0.1-rc0 --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index 4f3a512e..7f19e856 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "8.0.0", + "version": "8.0.1-rc0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0", From e546675e5551919a6349e35766af3c36e7639f77 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Wed, 28 May 2025 15:49:05 +0000 Subject: [PATCH 128/158] modulesync 9.6.0-4-gdb4d91b --- .msync.yml | 2 +- Gemfile | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.msync.yml b/.msync.yml index 32df814c..b86acb82 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '9.5.0' +modulesync_config_version: '9.7.0' diff --git a/Gemfile b/Gemfile index ea079b08..f08ae17f 100644 --- a/Gemfile +++ b/Gemfile @@ -4,9 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 9.0', :require => false - gem 'coveralls', :require => false - gem 'simplecov-console', :require => false + gem 'voxpupuli-test', '~> 10.0', :require => false gem 'puppet_metadata', '~> 5.0', :require => false end From 35c08b78cf62cd2daf878a55752dc25a3b297d94 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Fri, 13 Jun 2025 07:11:52 +0000 Subject: [PATCH 129/158] modulesync 9.7.0-10-g2151f5f --- .github/workflows/ci.yml | 3 +++ .github/workflows/labeler.yml | 4 ++++ .github/workflows/prepare_release.yml | 4 ++++ .github/workflows/release.yml | 3 +++ .msync.yml | 2 +- Gemfile | 8 +++----- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8c32acf9..44674150 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,9 @@ concurrency: group: ${{ github.ref_name }} cancel-in-progress: true +permissions: + contents: read + jobs: puppet: name: Puppet diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index 73be88dc..eacd0b33 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -8,6 +8,10 @@ name: "Pull Request Labeler" on: pull_request_target: {} +permissions: + contents: read + pull-requests: write + jobs: labeler: permissions: diff --git a/.github/workflows/prepare_release.yml b/.github/workflows/prepare_release.yml index 01efa1a8..2e3cc689 100644 --- a/.github/workflows/prepare_release.yml +++ b/.github/workflows/prepare_release.yml @@ -11,6 +11,10 @@ on: description: 'Module version to be released. Must be a valid semver string without leading v. (1.2.3)' required: false +permissions: + contents: write + pull-requests: write + jobs: release_prep: uses: 'voxpupuli/gha-puppet/.github/workflows/prepare_release.yml@v3' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3db60fbc..0a8b1b18 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,9 @@ on: tags: - '*' +permissions: + contents: write + jobs: release: name: Release diff --git a/.msync.yml b/.msync.yml index b86acb82..af9a220d 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '9.7.0' +modulesync_config_version: '10.0.0' diff --git a/Gemfile b/Gemfile index f08ae17f..fc8cf4d1 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 10.0', :require => false + gem 'voxpupuli-test', '~> 11.0', :require => false gem 'puppet_metadata', '~> 5.0', :require => false end @@ -18,13 +18,11 @@ group :system_tests do end group :release do - gem 'voxpupuli-release', '~> 3.0', :require => false + gem 'voxpupuli-release', '~> 4.0', :require => false end gem 'rake', :require => false -gem 'facter', ENV['FACTER_GEM_VERSION'], :require => false, :groups => [:test] -puppetversion = ENV['PUPPET_GEM_VERSION'] || [">= 7.24", "< 9"] -gem 'puppet', puppetversion, :require => false, :groups => [:test] +gem 'openvox', ENV.fetch('OPENVOX_GEM_VERSION', [">= 7", "< 9"]), :require => false, :groups => [:test] # vim: syntax=ruby From 5e0d878236f1171a5455c550db8e8dab11a7897e Mon Sep 17 00:00:00 2001 From: Kenyon Ralph Date: Fri, 13 Jun 2025 22:18:35 -0700 Subject: [PATCH 130/158] .fixtures.yml: remove puppet_version Not needed anymore and breaks testing with openvox. --- .fixtures.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.fixtures.yml b/.fixtures.yml index 8d63745d..0c369870 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -4,4 +4,3 @@ fixtures: epel: https://github.com/voxpupuli/puppet-epel.git yumrepo_core: repo: https://github.com/puppetlabs/puppetlabs-yumrepo_core.git - puppet_version: ">= 6.0.0" From a83d99639691b98a5451849905bac4fa3120d366 Mon Sep 17 00:00:00 2001 From: Christoph Maser Date: Wed, 18 Jun 2025 09:31:09 +0200 Subject: [PATCH 131/158] Cleanup fixtures --- .fixtures.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.fixtures.yml b/.fixtures.yml index 0c369870..4a4f5b85 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -1,6 +1,6 @@ +--- fixtures: repositories: - stdlib: https://github.com/puppetlabs/puppetlabs-stdlib.git epel: https://github.com/voxpupuli/puppet-epel.git - yumrepo_core: - repo: https://github.com/puppetlabs/puppetlabs-yumrepo_core.git + stdlib: https://github.com/puppetlabs/puppetlabs-stdlib.git + yumrepo_core: https://github.com/puppetlabs/puppetlabs-yumrepo_core.git From 459e30efb651ece57f49453d18ff9ee6ee3326ac Mon Sep 17 00:00:00 2001 From: Calle Englund Date: Mon, 23 Jun 2025 13:50:19 +0200 Subject: [PATCH 132/158] Run gunicorn specs for all supported os --- spec/defines/gunicorn_spec.rb | 41 ++++++++++++++--------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/spec/defines/gunicorn_spec.rb b/spec/defines/gunicorn_spec.rb index 13284087..b9258a58 100644 --- a/spec/defines/gunicorn_spec.rb +++ b/spec/defines/gunicorn_spec.rb @@ -5,37 +5,28 @@ describe 'python::gunicorn', type: :define do let(:title) { 'test-app' } - context 'on Debian OS' do - let :facts do - { - id: 'root', - kernel: 'Linux', - lsbdistcodename: 'squeeze', - osfamily: 'Debian', - operatingsystem: 'Debian', - operatingsystemrelease: '6', - path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - concat_basedir: '/dne' - } - end + on_supported_os.each do |os, facts| + context "on #{os}" do + let(:facts) { facts } - describe 'test-app with default parameter values' do - context 'configures test app with default parameter values' do - let(:params) { { dir: '/srv/testapp' } } + describe 'test-app with default parameter values' do + context 'configures test app with default parameter values' do + let(:params) { { dir: '/srv/testapp' } } - it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--log-level=error}) } - end + it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--log-level=error}) } + end - context 'test-app with custom log level' do - let(:params) { { dir: '/srv/testapp', log_level: 'info' } } + context 'test-app with custom log level' do + let(:params) { { dir: '/srv/testapp', log_level: 'info' } } - it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--log-level=info}) } - end + it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--log-level=info}) } + end - context 'test-app with custom gunicorn preload arguments' do - let(:params) { { dir: '/srv/testapp', args: ['--preload'] } } + context 'test-app with custom gunicorn preload arguments' do + let(:params) { { dir: '/srv/testapp', args: ['--preload'] } } - it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--preload}) } + it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--preload}) } + end end end end From 91d351ecc6ab04668d2e347b5d9b62d80a2d9799 Mon Sep 17 00:00:00 2001 From: Calle Englund Date: Mon, 23 Jun 2025 17:20:14 +0200 Subject: [PATCH 133/158] Expect current default for gunicorn workers Given that legacy facts were removed from facterdb 3, the current behavior relies on `NilClass#to_i` resolving to missing fact to 0. The added test case for custom `workers` parameter given cannot give false positives with the default formula always being an odd number. --- spec/defines/gunicorn_spec.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/spec/defines/gunicorn_spec.rb b/spec/defines/gunicorn_spec.rb index b9258a58..dc4d8bda 100644 --- a/spec/defines/gunicorn_spec.rb +++ b/spec/defines/gunicorn_spec.rb @@ -12,8 +12,13 @@ describe 'test-app with default parameter values' do context 'configures test app with default parameter values' do let(:params) { { dir: '/srv/testapp' } } + let(:expected_workers) do + # templates/gunicorn.erb + (facts[:processorcount].to_i * 2) + 1 + end it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--log-level=error}) } + it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--workers=#{expected_workers}}) } end context 'test-app with custom log level' do @@ -27,6 +32,12 @@ it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--preload}) } end + + context 'test-app with custom workers count' do + let(:params) { { dir: '/srv/testapp', workers: 42 } } + + it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--workers=#{params[:workers]}}) } + end end end end From 67c1a82e75f4de12d5e460aae21e4f271cffaea6 Mon Sep 17 00:00:00 2001 From: Calle Englund Date: Mon, 23 Jun 2025 17:59:28 +0200 Subject: [PATCH 134/158] Pick default gunicorn workers from non-legacy fact While the documentation for the core fact `processors.count` states that it is an _integer_ already, the previous behavior was to silently treat a missing fact as a processor count of zero, via `NilClass#to_i`. This does not happen in FacterDB entries for supported os, but the spec still mirrors the conversion done by the template. --- manifests/gunicorn.pp | 2 ++ spec/defines/gunicorn_spec.rb | 5 ++++- templates/gunicorn.erb | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/manifests/gunicorn.pp b/manifests/gunicorn.pp index 7670f394..5393ac33 100644 --- a/manifests/gunicorn.pp +++ b/manifests/gunicorn.pp @@ -55,6 +55,8 @@ String[1] $template = 'python/gunicorn.erb', Array $args = [], ) { + $processor_count = fact('processors.count') + if $manage_config_dir { file { $config_dir: ensure => directory, diff --git a/spec/defines/gunicorn_spec.rb b/spec/defines/gunicorn_spec.rb index dc4d8bda..de36c580 100644 --- a/spec/defines/gunicorn_spec.rb +++ b/spec/defines/gunicorn_spec.rb @@ -13,8 +13,11 @@ context 'configures test app with default parameter values' do let(:params) { { dir: '/srv/testapp' } } let(:expected_workers) do + # manifests/gunicorn.pp + processor_count = facts.dig(:processors, 'count') + # templates/gunicorn.erb - (facts[:processorcount].to_i * 2) + 1 + (processor_count.to_i * 2) + 1 end it { is_expected.to contain_file('/etc/gunicorn.d/test-app').with_mode('0644').with_content(%r{--log-level=error}) } diff --git a/templates/gunicorn.erb b/templates/gunicorn.erb index 07605ade..57dd4748 100644 --- a/templates/gunicorn.erb +++ b/templates/gunicorn.erb @@ -39,7 +39,7 @@ CONFIG = { <% if @workers -%> '--workers=<%= @workers %>', <% else -%> - '--workers=<%= @processorcount.to_i*2 + 1 %>', + '--workers=<%= @processor_count.to_i*2 + 1 %>', <% end -%> '--timeout=<%= @timeout %>', <% if @access_log_format -%> From cdcb65e0e9378e597f6c833816bbbc670381e614 Mon Sep 17 00:00:00 2001 From: Brian Schonecker Date: Mon, 7 Jul 2025 15:19:01 -0400 Subject: [PATCH 135/158] Add section in README that simulates `python3 -m pip install pandas --user` (#725) * Add section in README that simulates python3 -m pip install pandas --user. * Update README.md Co-authored-by: Kenyon Ralph * Update README.md Co-authored-by: Kenyon Ralph * Update README.md Co-authored-by: Kenyon Ralph * Update README.md Co-authored-by: Kenyon Ralph * Update README.md Co-authored-by: Kenyon Ralph --------- Co-authored-by: Kenyon Ralph --- README.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/README.md b/README.md index a91504ca..59d95fd3 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,35 @@ For class usage refer to the [Reference]("https://github.com/voxpupuli/puppet-py bundle exec rake strings:generate\[',,,,false,true'] ``` +### Install Python package to a user's default install directory + +The following code simulates + +```shell +python3 -m pip install pandas --user +``` +where pip installs packages to a user's default install directory -- +typically `~/.local/` on Linux. + +```puppet +# Somewhat hackishly, install Python PIP module PANDAS for Oracle Cloud API queries. +python::pyvenv { 'user_python_venv': + ensure => present, + version => 'system', + systempkgs => true, + venv_dir => '/home/example/.local', + owner => 'example', + group => 'example', + mode => '0750', +} + +python::pip { 'pandas': + virtualenv => '/home/example/.local', + owner => 'example', + group => 'example', +} +``` + ### hiera configuration This module supports configuration through hiera. The following example From cede4737714af131bb94ee5df093f74a490cdc2e Mon Sep 17 00:00:00 2001 From: Alin Cociorvan Date: Thu, 10 Jul 2025 13:27:11 +0300 Subject: [PATCH 136/158] pip: allow v-prefixed version string --- manifests/pip.pp | 6 +++--- spec/defines/pip_spec.rb | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index eaada706..76b3af48 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -160,8 +160,8 @@ # If it wasn't or if there is any error, the package manager will trigger a failure. $grep_regex = $_ensure ? { /^(present|absent|latest)$/ => "^${real_pkgname}[[:space:]].*$", - /^[0-9].*$/ => "^${real_pkgname}[[:space:]]\\+(\\?${_ensure}\\()$\\|$\\|, \\|[[:space:]]\\)", - default => fail('ensure can be a version number or one of: present, absent, latest') + /^v?[0-9].*$/ => "^${real_pkgname}[[:space:]]\\+(\\?${_ensure}\\()$\\|$\\|, \\|[[:space:]]\\)", + default => fail('ensure can be a version number (e.g. 1.7.0 or v1.7.0) or one of: present, absent, latest') } $extras_string = empty($extras) ? { @@ -195,7 +195,7 @@ } } else { case $_ensure { - /^[0-9].*$/: { + /^v?[0-9].*$/: { # Specific version $command = "${pip_install} ${install_args} ${pip_common_args}==${_ensure}" $unless_command = "${pip_env} list | grep -i -e '${grep_regex}'" diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index d7115427..40add6d6 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -147,6 +147,20 @@ end end + describe 'install specific version' do + context 'supports v-prefixed version string' do + let(:params) { { ensure: 'v1.7.0' } } + + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install rpyc==v1.7.0') } + end + + context 'supports version string without v-prefix' do + let(:params) { { ensure: '1.7.0' } } + + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install rpyc==1.7.0') } + end + end + describe 'uninstall' do context 'adds correct title' do let(:params) { { ensure: 'absent' } } From 86ae49a0dc28d6321cad46249bc3505f153307ac Mon Sep 17 00:00:00 2001 From: Christoph Maser Date: Sun, 3 Aug 2025 14:52:55 +0200 Subject: [PATCH 137/158] Drop puppet, update openvox minimum version to 8.19 * drop support for puppet as discussed in [1] * update openvox minimum version to 8.19.0 as discussed in [2] and [3] [1] https://github.com/voxpupuli/community-triage/issues/59 [2] https://github.com/voxpupuli/community-triage/issues/60 [3] https://github.com/voxpupuli/modulesync_config/pull/978#discussion_r2232830327 --- metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/metadata.json b/metadata.json index 7f19e856..8a7a76cc 100644 --- a/metadata.json +++ b/metadata.json @@ -90,8 +90,8 @@ ], "requirements": [ { - "name": "puppet", - "version_requirement": ">= 7.0.0 < 9.0.0" + "name": "openvox", + "version_requirement": ">= 8.19.0 < 9.0.0" } ], "dependencies": [ From c925952c7580f327999321161e019e4a58872e07 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Tue, 12 Aug 2025 08:06:22 +0000 Subject: [PATCH 138/158] modulesync 10.0.0-19-g1adc8e0 --- .msync.yml | 2 +- Gemfile | 2 +- Rakefile | 14 +++----------- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/.msync.yml b/.msync.yml index af9a220d..cf1792b6 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.0.0' +modulesync_config_version: '10.1.0' diff --git a/Gemfile b/Gemfile index fc8cf4d1..ddd05cc1 100644 --- a/Gemfile +++ b/Gemfile @@ -14,7 +14,7 @@ group :development do end group :system_tests do - gem 'voxpupuli-acceptance', '~> 3.5', :require => false + gem 'voxpupuli-acceptance', '~> 4.0', :require => false end group :release do diff --git a/Rakefile b/Rakefile index 58250c39..fab1b62a 100644 --- a/Rakefile +++ b/Rakefile @@ -1,30 +1,22 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -# Attempt to load voxpupuli-test (which pulls in puppetlabs_spec_helper), -# otherwise attempt to load it directly. begin require 'voxpupuli/test/rake' rescue LoadError - begin - require 'puppetlabs_spec_helper/rake_tasks' - rescue LoadError - end + # only available if gem group test is installed end -# load optional tasks for acceptance -# only available if gem group releases is installed begin require 'voxpupuli/acceptance/rake' rescue LoadError + # only available if gem group acceptance is installed end -# load optional tasks for releases -# only available if gem group releases is installed begin require 'voxpupuli/release/rake_tasks' rescue LoadError - # voxpupuli-release not present + # only available if gem group releases is installed else GCGConfig.user = 'voxpupuli' GCGConfig.project = 'puppet-python' From 4722bf28c40eb101c2503ee859a11cfea3894d14 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Tue, 23 Sep 2025 13:03:56 +0000 Subject: [PATCH 139/158] modulesync 10.1.0-26-ga82038c --- .github/CONTRIBUTING.md | 272 ---------------------------------------- .msync.yml | 2 +- Gemfile | 2 +- 3 files changed, 2 insertions(+), 274 deletions(-) delete mode 100644 .github/CONTRIBUTING.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index daceb642..00000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,272 +0,0 @@ -# Contribution guidelines - -## Table of contents - -* [Contributing](#contributing) -* [Writing proper commits - short version](#writing-proper-commits-short-version) -* [Writing proper commits - long version](#writing-proper-commits-long-version) -* [Dependencies](#dependencies) - * [Note for OS X users](#note-for-os-x-users) -* [The test matrix](#the-test-matrix) -* [Syntax and style](#syntax-and-style) -* [Running the unit tests](#running-the-unit-tests) -* [Unit tests in docker](#unit-tests-in-docker) -* [Integration tests](#integration-tests) - -This module has grown over time based on a range of contributions from -people using it. If you follow these contributing guidelines your patch -will likely make it into a release a little more quickly. - -## Contributing - -Please note that this project is released with a Contributor Code of Conduct. -By participating in this project you agree to abide by its terms. -[Contributor Code of Conduct](https://voxpupuli.org/coc/). - -* Fork the repo. -* Create a separate branch for your change. -* We only take pull requests with passing tests, and documentation. [GitHub Actions](https://docs.github.com/en/actions) run the tests for us. You can also execute them locally. This is explained [in a later section](#the-test-matrix). -* Checkout [our docs](https://voxpupuli.org/docs/reviewing_pr/) we use to review a module and the [official styleguide](https://puppet.com/docs/puppet/6.0/style_guide.html). They provide some guidance for new code that might help you before you submit a pull request. -* Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or fixing a bug, please add a test. -* Squash your commits down into logical components. Make sure to rebase against our current master. -* Push the branch to your fork and submit a pull request. - -Please be prepared to repeat some of these steps as our contributors review your code. - -Also consider sending in your profile code that calls this component module as an acceptance test or provide it via an issue. This helps reviewers a lot to test your use case and prevents future regressions! - -## Writing proper commits - short version - -* Make commits of logical units. -* Check for unnecessary whitespace with "git diff --check" before committing. -* Commit using Unix line endings (check the settings around "crlf" in git-config(1)). -* Do not check in commented out code or unneeded files. -* The first line of the commit message should be a short description (50 characters is the soft limit, excluding ticket number(s)), and should skip the full stop. -* Associate the issue in the message. The first line should include the issue number in the form "(#XXXX) Rest of message". -* The body should provide a meaningful commit message, which: - *uses the imperative, present tense: `change`, not `changed` or `changes`. - * includes motivation for the change, and contrasts its implementation with the previous behavior. - * Make sure that you have tests for the bug you are fixing, or feature you are adding. - * Make sure the test suites passes after your commit: - * When introducing a new feature, make sure it is properly documented in the README.md - -## Writing proper commits - long version - - 1. Make separate commits for logically separate changes. - - Please break your commits down into logically consistent units - which include new or changed tests relevant to the rest of the - change. The goal of doing this is to make the diff easier to - read for whoever is reviewing your code. In general, the easier - your diff is to read, the more likely someone will be happy to - review it and get it into the code base. - - If you are going to refactor a piece of code, please do so as a - separate commit from your feature or bug fix changes. - - We also really appreciate changes that include tests to make - sure the bug is not re-introduced, and that the feature is not - accidentally broken. - - Describe the technical detail of the change(s). If your - description starts to get too long, that is a good sign that you - probably need to split up your commit into more finely grained - pieces. - - Commits which plainly describe the things which help - reviewers check the patch and future developers understand the - code are much more likely to be merged in with a minimum of - bike-shedding or requested changes. Ideally, the commit message - would include information, and be in a form suitable for - inclusion in the release notes for the version of Puppet that - includes them. - - Please also check that you are not introducing any trailing - whitespace or other "whitespace errors". You can do this by - running "git diff --check" on your changes before you commit. - - 2. Sending your patches - - To submit your changes via a GitHub pull request, we _highly_ - recommend that you have them on a topic branch, instead of - directly on `master`. - It makes things much easier to keep track of, especially if - you decide to work on another thing before your first change - is merged in. - - GitHub has some pretty good - [general documentation](http://help.github.com/) on using - their site. They also have documentation on - [creating pull requests](http://help.github.com/send-pull-requests/). - - In general, after pushing your topic branch up to your - repository on GitHub, you can switch to the branch in the - GitHub UI and click "Pull Request" towards the top of the page - in order to open a pull request. - - - 3. Update the related GitHub issue. - - If there is a GitHub issue associated with the change you - submitted, then you should update the ticket to include the - location of your branch, along with any other commentary you - may wish to make. - -## Dependencies - -The testing and development tools have a bunch of dependencies, -all managed by [bundler](http://bundler.io/) according to the -[Puppet support matrix](http://docs.puppetlabs.com/guides/platforms.html#ruby-versions). - -By default the tests use a baseline version of Puppet. - -If you have Ruby 2.x or want a specific version of Puppet, -you must set an environment variable such as: - -```sh -export PUPPET_GEM_VERSION="~> 6.1.0" -``` - -You can install all needed gems for spec tests into the modules directory by -running: - -```sh -bundle config set --local path '.vendor/' -bundle config set --local without 'development system_tests release' -bundle install --jobs "$(nproc)" -``` - -If you also want to run acceptance tests: - -```sh -bundle config set --local path '.vendor/' -bundle config set --local without 'development release' -bundle config set --local with 'system_tests' -bundle install --jobs "$(nproc)" -``` - -Our all in one solution if you don't know if you need to install or update gems: - -```sh -bundle config set --local path '.vendor/' -bundle config set --local without 'development release' -bundle config set --local with 'system_tests' -bundle install --jobs "$(nproc)" -bundle update -bundle clean -``` - -As an alternative to the `--jobs "$(nproc)` parameter, you can set an -environment variable: - -```sh -BUNDLE_JOBS="$(nproc)" -``` - -### Note for OS X users - -`nproc` isn't a valid command under OS x. As an alternative, you can do: - -```sh ---jobs "$(sysctl -n hw.ncpu)" -``` - -## The test matrix - -### Syntax and style - -The test suite will run [Puppet Lint](http://puppet-lint.com/) and -[Puppet Syntax](https://github.com/gds-operations/puppet-syntax) to -check various syntax and style things. You can run these locally with: - -```sh -bundle exec rake lint -bundle exec rake validate -``` - -It will also run some [Rubocop](http://batsov.com/rubocop/) tests -against it. You can run those locally ahead of time with: - -```sh -bundle exec rake rubocop -``` - -### Running the unit tests - -The unit test suite covers most of the code, as mentioned above please -add tests if you're adding new functionality. If you've not used -[rspec-puppet](http://rspec-puppet.com/) before then feel free to ask -about how best to test your new feature. - -To run the linter, the syntax checker and the unit tests: - -```sh -bundle exec rake test -``` - -To run your all the unit tests - -```sh -bundle exec rake spec -``` - -To run a specific spec test set the `SPEC` variable: - -```sh -bundle exec rake spec SPEC=spec/foo_spec.rb -``` - -#### Unit tests in docker - -Some people don't want to run the dependencies locally or don't want to install -ruby. We ship a Dockerfile that enables you to run all unit tests and linting. -You only need to run: - -```sh -docker build . -``` - -Please ensure that a docker daemon is running and that your user has the -permission to talk to it. You can specify a remote docker host by setting the -`DOCKER_HOST` environment variable. it will copy the content of the module into -the docker image. So it will not work if a Gemfile.lock exists. - -### Integration tests - -The unit tests just check the code runs, not that it does exactly what -we want on a real machine. For that we're using -[beaker](https://github.com/puppetlabs/beaker). - -This fires up a new virtual machine (using vagrant) and runs a series of -simple tests against it after applying the module. You can run this -with: - -```sh -BEAKER_PUPPET_COLLECTION=puppet7 BEAKER_setfile=debian11-64 bundle exec rake beaker -``` - -or - -```sh -BEAKER_PUPPET_COLLECTION=none BEAKER_setfile=archlinux-64 bundle exec rake beaker -``` - -This latter example will use the distribution's own version of Puppet. - -You can replace the string `debian11` with any common operating system. -The following strings are known to work: - -* ubuntu2004 -* ubuntu2204 -* debian11 -* debian12 -* centos9 -* archlinux -* almalinux8 -* almalinux9 -* fedora36 - -For more information and tips & tricks, see [voxpupuli-acceptance's documentation](https://github.com/voxpupuli/voxpupuli-acceptance#running-tests). - -The source of this file is in our [modulesync_config](https://github.com/voxpupuli/modulesync_config/blob/master/moduleroot/.github/CONTRIBUTING.md.erb) -repository. diff --git a/.msync.yml b/.msync.yml index cf1792b6..68fb43b2 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.1.0' +modulesync_config_version: '10.2.0' diff --git a/Gemfile b/Gemfile index ddd05cc1..2aaf7d52 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 11.0', :require => false + gem 'voxpupuli-test', '~> 12.0', :require => false gem 'puppet_metadata', '~> 5.0', :require => false end From 22199d2d5f6162232a34614e418f63e2f016d0c5 Mon Sep 17 00:00:00 2001 From: Kenyon Ralph Date: Tue, 23 Sep 2025 23:13:39 -0700 Subject: [PATCH 140/158] puppet-lint fix: indentation --- manifests/pip.pp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index 76b3af48..f5d7d5fa 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -218,12 +218,14 @@ # Unfortunately this is the smartest way of getting the latest available package version with pip as of now # Note: we DO need to repeat ourselves with "from version" in both grep and sed as on some systems pip returns # more than one line with paretheses. - $latest_version = join([ + $latest_version = join( + [ "${pip_install} ${legacy_resolver} ${pypi_index} ${pypi_extra_index} ${proxy_flag}", " ${install_args} ${install_editable} '${real_pkgname}==9!0dev0+x' 2>&1", " | sed -nE 's/.*\\(from versions: (.*, )*(.*)\\)/\\2/p'", ' | tr -d "[:space:]"', - ]) + ], + ) # Packages with underscores in their names are listed with dashes in their place in `pip freeze` output $pkgname_with_dashes = regsubst($real_pkgname, '_', '-', 'G') From 23a43317c0d87e720a4a3413778aaace721745fe Mon Sep 17 00:00:00 2001 From: Tom Judge <157825077+tj-cisco@users.noreply.github.com> Date: Tue, 23 Sep 2025 11:09:11 -0400 Subject: [PATCH 141/158] Allow setting python::version to Integer Allow setting `python::version` to an integer value to match the `default` option in `install.pp`. This is required for FreeBSD. --- REFERENCE.md | 11 ++++++++++- types/version.pp | 12 +++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index 4352dd43..f5d739e2 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -1212,5 +1212,14 @@ Alias of `Pattern[/^(<|>|<=|>=|==) [0-9]*(\.[0-9]+)*$/, /\Alatest\Z/]` Match all valid versions for python -Alias of `Pattern[/\A(python)?[0-9](\.?[0-9])*/, /\Apypy\Z/, /\Asystem\Z/, /\Arh-python[0-9]{2}(?:-python)?\Z/]` +Alias of + +```puppet +Variant[Integer, Pattern[ + /\A(python)?[0-9](\.?[0-9])*/, + /\Apypy\Z/, + /\Asystem\Z/, + /\Arh-python[0-9]{2}(?:-python)?\Z/ + ]] +``` diff --git a/types/version.pp b/types/version.pp index 5bbcaaa8..075d3587 100644 --- a/types/version.pp +++ b/types/version.pp @@ -1,8 +1,10 @@ # @summary Match all valid versions for python # -type Python::Version = Pattern[ - /\A(python)?[0-9](\.?[0-9])*/, - /\Apypy\Z/, - /\Asystem\Z/, - /\Arh-python[0-9]{2}(?:-python)?\Z/ +type Python::Version = Variant[Integer, + Pattern[ + /\A(python)?[0-9](\.?[0-9])*/, + /\Apypy\Z/, + /\Asystem\Z/, + /\Arh-python[0-9]{2}(?:-python)?\Z/ + ] ] From f99d48d01e30e9dff905f73528dfd8cd5e0746c8 Mon Sep 17 00:00:00 2001 From: Kenyon Ralph Date: Sat, 27 Sep 2025 23:53:22 -0700 Subject: [PATCH 142/158] init.pp: remove useless exec with default title Per the docs, the special value `default` sets default attribute values for other resource bodies in the same expression. There are no resources in this expression so it doesn't do anything. This was probably intended to be a "legacy-style default, but the style guide says to avoid these anyway. --- REFERENCE.md | 4 ---- manifests/init.pp | 6 ------ 2 files changed, 10 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index f5d739e2..85da05a1 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -180,12 +180,8 @@ Default value: `true` ##### `umask` -Data type: `Optional[Python::Umask]` - The default umask for invoked exec calls. -Default value: `undef` - ##### `manage_gunicorn` manage the state for package gunicorn diff --git a/manifests/init.pp b/manifests/init.pp index 3f5ac23f..31061daf 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -62,7 +62,6 @@ Stdlib::Httpurl $anaconda_installer_url = 'https://repo.anaconda.com/archive/Anaconda3-5.2.0-Linux-x86_64.sh', Stdlib::Absolutepath $anaconda_install_path = '/opt/python', Boolean $manage_scl = true, - Optional[Python::Umask] $umask = undef, ) inherits python::params { $exec_prefix = $provider ? { 'scl' => "/usr/bin/scl enable ${version} -- ", @@ -76,11 +75,6 @@ Class['python::install'] -> Class['python::config'] - # Set default umask. - exec { default: - umask => $umask, - } - # Allow hiera configuration of python resources create_resources('python::pip', $python_pips) create_resources('python::pyvenv', $python_pyvenvs) From a8114def4801f5bc5deb2f752a4207158b5233ad Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Sat, 27 Sep 2025 13:14:01 +0000 Subject: [PATCH 143/158] modulesync 10.3.0 --- .msync.yml | 2 +- Gemfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.msync.yml b/.msync.yml index 68fb43b2..814fbd04 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.2.0' +modulesync_config_version: '10.3.0' diff --git a/Gemfile b/Gemfile index 2aaf7d52..56259860 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 12.0', :require => false + gem 'voxpupuli-test', '~> 13.0', :require => false gem 'puppet_metadata', '~> 5.0', :require => false end @@ -18,7 +18,7 @@ group :system_tests do end group :release do - gem 'voxpupuli-release', '~> 4.0', :require => false + gem 'voxpupuli-release', '~> 5.0', :require => false end gem 'rake', :require => false From c73bf337ea970c5a467361c726de27a7ed0a57ef Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:57:58 +0000 Subject: [PATCH 144/158] modulesync 10.4.0 --- .github/workflows/ci.yml | 2 +- .msync.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44674150..4bf69968 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,4 +22,4 @@ permissions: jobs: puppet: name: Puppet - uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v3 + uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v4 diff --git a/.msync.yml b/.msync.yml index 814fbd04..81ea369a 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.3.0' +modulesync_config_version: '10.4.0' From f50e44030ed40581b3ada6b52516a8f57ec8c214 Mon Sep 17 00:00:00 2001 From: Szparki Date: Thu, 30 Oct 2025 19:02:44 +0200 Subject: [PATCH 145/158] Making sure group ownership is not set to 'root' only, with this can handle 'wheel' in FreeBSD --- manifests/dotfile.pp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/dotfile.pp b/manifests/dotfile.pp index 4961f12f..66d59b1e 100644 --- a/manifests/dotfile.pp +++ b/manifests/dotfile.pp @@ -26,7 +26,7 @@ Enum['absent', 'present'] $ensure = 'present', Stdlib::Absolutepath $filename = $title, String[1] $owner = 'root', - String[1] $group = 'root', + String[1] $group = getvar('python::params::group'), Stdlib::Filemode $mode = '0644', Hash $config = {}, ) { From e895f49c350e1393d617241649e42ef148900308 Mon Sep 17 00:00:00 2001 From: Szparki Date: Fri, 31 Oct 2025 11:20:22 +0200 Subject: [PATCH 146/158] Updating REFERENCE.md --- REFERENCE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/REFERENCE.md b/REFERENCE.md index 85da05a1..def63d6a 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -420,7 +420,7 @@ Data type: `String[1]` group owner of dotfile -Default value: `'root'` +Default value: `getvar('python::params::group')` ##### `config` From 5c5a5bc9c916f89b1bbf97a0f762c578e8cce6ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Fri, 31 Oct 2025 17:17:27 -1000 Subject: [PATCH 147/158] Include python class before testing python::dotfile If the python class was not included in the catalog first, python::params has not been loaded, so the required group is undef causing compilation failure. --- spec/defines/dotfile_spec.rb | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/spec/defines/dotfile_spec.rb b/spec/defines/dotfile_spec.rb index 30ce21b3..a44426f7 100644 --- a/spec/defines/dotfile_spec.rb +++ b/spec/defines/dotfile_spec.rb @@ -9,6 +9,16 @@ facts end + let(:root_group) do + if facts[:os]['family'] == 'FreeBSD' + 'wheel' + else + 'root' + end + end + + let(:pre_condition) { 'include python' } + describe 'dotfile as' do context 'fails with empty string filename' do let(:title) { '' } @@ -32,7 +42,7 @@ context 'succeeds with filename in a non-existing path' do let(:title) { '/home/someuser/.pip/pip.conf' } - it { is_expected.to contain_exec('create /home/someuser/.pip/pip.conf\'s parent dir').with_command('install -o root -g root -d /home/someuser/.pip') } + it { is_expected.to contain_exec('create /home/someuser/.pip/pip.conf\'s parent dir').with_command("install -o root -g #{root_group} -d /home/someuser/.pip") } it { is_expected.to contain_file('/home/someuser/.pip/pip.conf').with_mode('0644') } end @@ -40,7 +50,7 @@ let(:title) { '/home/someuser/.pip/pip.conf' } let(:params) { { owner: 'someuser' } } - it { is_expected.to contain_exec('create /home/someuser/.pip/pip.conf\'s parent dir').with_command('install -o someuser -g root -d /home/someuser/.pip') } + it { is_expected.to contain_exec('create /home/someuser/.pip/pip.conf\'s parent dir').with_command("install -o someuser -g #{root_group} -d /home/someuser/.pip") } it { is_expected.to contain_file('/home/someuser/.pip/pip.conf').with_owner('someuser') } end From 5b3d64ef4fc27a130f71e67f1664e5931878709b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Sun, 28 Sep 2025 10:16:57 -1000 Subject: [PATCH 148/158] Do not pass `--log` to `pip install` When passing a `--log` option to `pip install`, _verbose_ logging is appended to the specified file, and the default logging captured by puppet is _quitter_ than the default. When an installation error occur, the quieter output does not contain the reason for the failure, and inspection of the log file is necessary to determine the reason of the error. This is impractical in CI systems where this file cannot be retrieved easily, and makes fixing regressions harder. On production systems, this log is also mostly useless since projects dependencies versions are generally expected to be found in the requirement file used for installation in order for deployments to be reproducible. --- manifests/pip.pp | 2 +- manifests/pyvenv.pp | 2 +- manifests/requirements.pp | 2 +- spec/classes/python_spec.rb | 4 ++-- spec/defines/pip_spec.rb | 16 ++++++++-------- spec/defines/pyvenv_spec.rb | 6 +++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/manifests/pip.pp b/manifests/pip.pp index f5d7d5fa..9d568207 100644 --- a/manifests/pip.pp +++ b/manifests/pip.pp @@ -181,7 +181,7 @@ default => "'${url}#egg=${egg_name}'", } - $pip_install = "${pip_env} --log ${log}/pip.log install" + $pip_install = "${pip_env} install" $pip_common_args = "${pypi_index} ${pypi_extra_index} ${proxy_flag} ${install_editable} ${source}" # Explicit version out of VCS when PIP supported URL is provided diff --git a/manifests/pyvenv.pp b/manifests/pyvenv.pp index 6627a406..7aa7202f 100644 --- a/manifests/pyvenv.pp +++ b/manifests/pyvenv.pp @@ -94,7 +94,7 @@ } exec { "python_virtualenv_${venv_dir}": - command => "${virtualenv_cmd} --clear ${system_pkgs_flag} ${prompt_arg} ${venv_dir} && ${pip_cmd} --log ${venv_dir}/pip.log install ${pip_upgrade} && ${pip_cmd} --log ${venv_dir}/pip.log install --upgrade setuptools", + command => "${virtualenv_cmd} --clear ${system_pkgs_flag} ${prompt_arg} ${venv_dir} && ${pip_cmd} install ${pip_upgrade} && ${pip_cmd} install --upgrade setuptools", user => $owner, creates => "${venv_dir}/bin/activate", path => $_path, diff --git a/manifests/requirements.pp b/manifests/requirements.pp index f2743509..374a70ae 100644 --- a/manifests/requirements.pp +++ b/manifests/requirements.pp @@ -98,7 +98,7 @@ exec { "python_requirements${name}": provider => shell, - command => "${pip_env} --log ${log}/pip.log install ${proxy_flag} ${src_flag} -r ${requirements} ${extra_pip_args}", + command => "${pip_env} install ${proxy_flag} ${src_flag} -r ${requirements} ${extra_pip_args}", refreshonly => !$forceupdate, timeout => $timeout, cwd => $cwd, diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index fd39b26d..74852970 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -157,7 +157,7 @@ it { expect(subject).to contain_exec('python_virtualenv_/opt/env1'). with( - command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade pip && /opt/env1/bin/pip --log /opt/env1/pip.log install --upgrade setuptools', + command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip install --upgrade pip && /opt/env1/bin/pip install --upgrade setuptools', user: 'root', creates: '/opt/env1/bin/activate', path: [ @@ -177,7 +177,7 @@ it { expect(subject).to contain_exec('python_virtualenv_/opt/env2'). with( - command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip --log /opt/env2/pip.log install --upgrade setuptools', + command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip install --upgrade setuptools', user: 'root', creates: '/opt/env2/bin/activate', path: [ diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index 40add6d6..abe5cda0 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -77,7 +77,7 @@ context 'adds proxy to install command if proxy set' do let(:params) { { proxy: 'http://my.proxy:3128' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --proxy=http://my.proxy:3128 rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip install --proxy=http://my.proxy:3128 rpyc') } end end @@ -91,7 +91,7 @@ context 'adds index to install command if index set' do let(:params) { { index: 'http://www.example.com/simple/' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --index-url=http://www.example.com/simple/ rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip install --index-url=http://www.example.com/simple/ rpyc') } end end @@ -105,7 +105,7 @@ context 'adds extra_index to install command if extra_index set' do let(:params) { { extra_index: 'http://www.example.com/extra/simple/' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --extra-index-url=http://www.example.com/extra/simple/ rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip install --extra-index-url=http://www.example.com/extra/simple/ rpyc') } end end @@ -122,7 +122,7 @@ context 'adds install_args to install command if install_args set' do let(:params) { { install_args: '--pre' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install --pre rpyc') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip install --pre rpyc') } end end @@ -151,13 +151,13 @@ context 'supports v-prefixed version string' do let(:params) { { ensure: 'v1.7.0' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install rpyc==v1.7.0') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip install rpyc==v1.7.0') } end context 'supports version string without v-prefix' do let(:params) { { ensure: '1.7.0' } } - it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip --log /tmp/pip.log install rpyc==1.7.0') } + it { is_expected.to contain_exec('pip_install_rpyc').with_command('pip install rpyc==1.7.0') } end end @@ -235,13 +235,13 @@ context 'suceeds with no extras' do let(:params) { {} } - it { is_expected.to contain_exec('pip_install_requests').with_command('pip --log /tmp/pip.log install requests') } + it { is_expected.to contain_exec('pip_install_requests').with_command('pip install requests') } end context 'succeeds with extras' do let(:params) { { extras: ['security'] } } - it { is_expected.to contain_exec('pip_install_requests').with_command('pip --log /tmp/pip.log install requests[security]') } + it { is_expected.to contain_exec('pip_install_requests').with_command('pip install requests[security]') } end end end diff --git a/spec/defines/pyvenv_spec.rb b/spec/defines/pyvenv_spec.rb index b0578bec..57d87078 100644 --- a/spec/defines/pyvenv_spec.rb +++ b/spec/defines/pyvenv_spec.rb @@ -29,7 +29,7 @@ context 'with default parameters' do it { is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') } - it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') } + it { is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip install --upgrade pip && /opt/env/bin/pip install --upgrade setuptools') } end describe 'when ensure' do @@ -67,7 +67,7 @@ it { is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') - is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('python3.6 -m venv --clear --prompt custom\\ prompt /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') + is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('python3.6 -m venv --clear --prompt custom\\ prompt /opt/env && /opt/env/bin/pip install --upgrade pip && /opt/env/bin/pip install --upgrade setuptools') } end end @@ -91,7 +91,7 @@ it { is_expected.to contain_file('/opt/env').that_requires('Class[python::install]') - is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade pip && /opt/env/bin/pip --log /opt/env/pip.log install --upgrade setuptools') + is_expected.to contain_exec('python_virtualenv_/opt/env').with_command('pyvenv-3.5 --clear /opt/env && /opt/env/bin/pip install --upgrade pip && /opt/env/bin/pip install --upgrade setuptools') } end end From b3fb50ee88ac9304d6ccb9321a4a54bccfdd4eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Wed, 17 Dec 2025 10:34:21 -1000 Subject: [PATCH 149/158] Add support for Debian 13 --- data/os/Debian/13.yaml | 1 + metadata.json | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 data/os/Debian/13.yaml diff --git a/data/os/Debian/13.yaml b/data/os/Debian/13.yaml new file mode 100644 index 00000000..3bd58ed5 --- /dev/null +++ b/data/os/Debian/13.yaml @@ -0,0 +1 @@ +python::default_system_version: "3.13" diff --git a/metadata.json b/metadata.json index 8a7a76cc..a536b318 100644 --- a/metadata.json +++ b/metadata.json @@ -37,7 +37,8 @@ "operatingsystem": "Debian", "operatingsystemrelease": [ "11", - "12" + "12", + "13" ] }, { From a7f429183aa9bad56e6ce035d4bf259628f40514 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Mon, 29 Dec 2025 18:59:41 +0000 Subject: [PATCH 150/158] modulesync 10.5.0 --- .devcontainer/devcontainer.json | 5 +++++ .msync.yml | 2 +- Gemfile | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..168a5cb4 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,5 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +{ + "name": "VoxBox", + "image": "ghcr.io/voxpupuli/voxbox:latest" +} diff --git a/.msync.yml b/.msync.yml index 81ea369a..179bafc0 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.4.0' +modulesync_config_version: '10.5.0' diff --git a/Gemfile b/Gemfile index 56259860..5f69bec8 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do gem 'voxpupuli-test', '~> 13.0', :require => false - gem 'puppet_metadata', '~> 5.0', :require => false + gem 'puppet_metadata', '~> 6.0', :require => false end group :development do From 779216513622af5a2fcc5e1bc1cc9c2debd7829f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Tarti=C3=A8re?= Date: Tue, 27 Jan 2026 07:00:01 -1000 Subject: [PATCH 151/158] Revert "Allow setting `python::version` in hiera to `Integer`" --- REFERENCE.md | 11 +---------- types/version.pp | 12 +++++------- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/REFERENCE.md b/REFERENCE.md index def63d6a..7369552e 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -1208,14 +1208,5 @@ Alias of `Pattern[/^(<|>|<=|>=|==) [0-9]*(\.[0-9]+)*$/, /\Alatest\Z/]` Match all valid versions for python -Alias of - -```puppet -Variant[Integer, Pattern[ - /\A(python)?[0-9](\.?[0-9])*/, - /\Apypy\Z/, - /\Asystem\Z/, - /\Arh-python[0-9]{2}(?:-python)?\Z/ - ]] -``` +Alias of `Pattern[/\A(python)?[0-9](\.?[0-9])*/, /\Apypy\Z/, /\Asystem\Z/, /\Arh-python[0-9]{2}(?:-python)?\Z/]` diff --git a/types/version.pp b/types/version.pp index 075d3587..5bbcaaa8 100644 --- a/types/version.pp +++ b/types/version.pp @@ -1,10 +1,8 @@ # @summary Match all valid versions for python # -type Python::Version = Variant[Integer, - Pattern[ - /\A(python)?[0-9](\.?[0-9])*/, - /\Apypy\Z/, - /\Asystem\Z/, - /\Arh-python[0-9]{2}(?:-python)?\Z/ - ] +type Python::Version = Pattern[ + /\A(python)?[0-9](\.?[0-9])*/, + /\Apypy\Z/, + /\Asystem\Z/, + /\Arh-python[0-9]{2}(?:-python)?\Z/ ] From ac0e72b1f20b433928cbc4addee461340bcf0bd0 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Fri, 6 Mar 2026 09:57:45 +0000 Subject: [PATCH 152/158] modulesync 10.6.0 --- .devcontainer/devcontainer.json | 1 - .msync.yml | 2 +- Gemfile | 4 ++-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 168a5cb4..08c6abf9 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,4 +1,3 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the { "name": "VoxBox", "image": "ghcr.io/voxpupuli/voxbox:latest" diff --git a/.msync.yml b/.msync.yml index 179bafc0..7d6d4ee4 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.5.0' +modulesync_config_version: '10.6.0' diff --git a/Gemfile b/Gemfile index 5f69bec8..e0c85815 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do - gem 'voxpupuli-test', '~> 13.0', :require => false + gem 'voxpupuli-test', '~> 14.0', :require => false gem 'puppet_metadata', '~> 6.0', :require => false end @@ -18,7 +18,7 @@ group :system_tests do end group :release do - gem 'voxpupuli-release', '~> 5.0', :require => false + gem 'voxpupuli-release', '~> 5.3', :require => false end gem 'rake', :require => false From 4682910696f96fe4fd10ad3032aed5ce3a3b966f Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 6 Mar 2026 13:08:19 +0100 Subject: [PATCH 153/158] rubocop: autocorrect --- .rubocop.yml | 2 ++ .rubocop_todo.yml | 13 +++++++ spec/classes/python_spec.rb | 46 ++++++++++++------------- spec/defines/pip_spec.rb | 8 ++--- spec/defines/pyvenv_spec.rb | 8 ++--- spec/defines/requirements_spec.rb | 4 +-- spec/unit/facter/pip_version_spec.rb | 2 -- spec/unit/facter/python_release_spec.rb | 2 -- spec/unit/facter/python_version_spec.rb | 2 -- 9 files changed, 48 insertions(+), 39 deletions(-) create mode 100644 .rubocop_todo.yml diff --git a/.rubocop.yml b/.rubocop.yml index 53ac1898..ea22bff8 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,4 +1,6 @@ --- +inherit_from: .rubocop_todo.yml + # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml new file mode 100644 index 00000000..f8daacee --- /dev/null +++ b/.rubocop_todo.yml @@ -0,0 +1,13 @@ +# This configuration was generated by +# `rubocop --auto-gen-config --no-auto-gen-timestamp` +# using RuboCop version 1.85.1. +# The point is for the user to remove these configuration records +# one by one as the offenses are removed from the code base. +# Note that changes in the inspected code, or installation of new +# versions of RuboCop, may require this file to be generated again. + +# Offense count: 3 +RSpec/LeakyLocalVariable: + Exclude: + - 'spec/acceptance/class_spec.rb' + - 'spec/acceptance/facts_test_spec.rb' diff --git a/spec/classes/python_spec.rb b/spec/classes/python_spec.rb index 74852970..f1c2d9a1 100644 --- a/spec/classes/python_spec.rb +++ b/spec/classes/python_spec.rb @@ -36,7 +36,7 @@ manage_python_package: false, manage_dev_package: false, manage_pip_package: false, - manage_venv_package: false + manage_venv_package: false, } end @@ -53,7 +53,7 @@ manage_pip_package: true, manage_venv_package: true, pip: 'present', - venv: 'present' + venv: 'present', } end @@ -112,12 +112,12 @@ { python_pyvenvs: { '/opt/env1' => { - version: '3.8' + version: '3.8', }, '/opt/env2' => { - version: '3.8' - } - } + version: '3.8', + }, + }, } end @@ -139,13 +139,13 @@ python_pyvenvs: { '/opt/env1' => { version: '3.8', - pip_version: 'latest' + pip_version: 'latest', }, '/opt/env2' => { version: '3.8', - pip_version: '<= 20.3.4' - } - } + pip_version: '<= 20.3.4', + }, + }, } end @@ -155,8 +155,8 @@ it { is_expected.to contain_python__pyvenv('/opt/env2').with_ensure('present') } it { - expect(subject).to contain_exec('python_virtualenv_/opt/env1'). - with( + expect(subject).to contain_exec('python_virtualenv_/opt/env1') + .with( command: 'python3.8 -m venv --clear /opt/env1 && /opt/env1/bin/pip install --upgrade pip && /opt/env1/bin/pip install --upgrade setuptools', user: 'root', creates: '/opt/env1/bin/activate', @@ -164,19 +164,19 @@ '/bin', '/usr/bin', '/usr/sbin', - '/usr/local/bin' + '/usr/local/bin', ], cwd: '/tmp', environment: [], timeout: 600, - unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\"\]\*/opt/env1\[\\"\\\\'\]\[\\t \]\*\$' /opt/env1/bin/activate$} - ). - that_requires('File[/opt/env1]') + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\"\]\*/opt/env1\[\\"\\\\'\]\[\\t \]\*\$' /opt/env1/bin/activate$}, + ) + .that_requires('File[/opt/env1]') } it { - expect(subject).to contain_exec('python_virtualenv_/opt/env2'). - with( + expect(subject).to contain_exec('python_virtualenv_/opt/env2') + .with( command: 'python3.8 -m venv --clear /opt/env2 && /opt/env2/bin/pip install --upgrade \'pip <= 20.3.4\' && /opt/env2/bin/pip install --upgrade setuptools', user: 'root', creates: '/opt/env2/bin/activate', @@ -184,14 +184,14 @@ '/bin', '/usr/bin', '/usr/sbin', - '/usr/local/bin' + '/usr/local/bin', ], cwd: '/tmp', environment: [], timeout: 600, - unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\"\]\*/opt/env2\[\\"\\\\'\]\[\\t \]\*\$' /opt/env2/bin/activate$} - ). - that_requires('File[/opt/env2]') + unless: %r{^grep '\^\[\\t \]\*VIRTUAL_ENV=\[\\\\'\\"\]\*/opt/env2\[\\"\\\\'\]\[\\t \]\*\$' /opt/env2/bin/activate$}, + ) + .that_requires('File[/opt/env2]') } it { is_expected.to contain_file('/opt/env1') } @@ -384,7 +384,7 @@ it { expect(subject).to contain_package('pip').with( - 'provider' => 'pip' + 'provider' => 'pip', ) } end diff --git a/spec/defines/pip_spec.rb b/spec/defines/pip_spec.rb index abe5cda0..a00a7792 100644 --- a/spec/defines/pip_spec.rb +++ b/spec/defines/pip_spec.rb @@ -21,7 +21,7 @@ operatingsystemrelease: '6', path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', concat_basedir: '/dne', - pip_version: '18.1' + pip_version: '18.1', } end @@ -195,7 +195,7 @@ operatingsystemrelease: '10.12', path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', concat_basedir: '/dne', - pip_version: '20.3.4' + pip_version: '20.3.4', } end @@ -221,13 +221,13 @@ kernel: 'Linux', lsbdistcodename: 'squeeze', os: { - family: 'Debian' + family: 'Debian', }, osfamily: 'Debian', operatingsystem: 'Debian', operatingsystemrelease: '6', path: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', - concat_basedir: '/dne' + concat_basedir: '/dne', } end diff --git a/spec/defines/pyvenv_spec.rb b/spec/defines/pyvenv_spec.rb index 57d87078..6ce6646b 100644 --- a/spec/defines/pyvenv_spec.rb +++ b/spec/defines/pyvenv_spec.rb @@ -23,7 +23,7 @@ let :facts do # python3 is required to use pyvenv facts.merge( - python3_version: '3.5.1' + python3_version: '3.5.1', ) end @@ -36,7 +36,7 @@ context 'is absent' do let :params do { - ensure: 'absent' + ensure: 'absent', } end @@ -51,7 +51,7 @@ let :facts do # python 3.6 is required for venv and prompt facts.merge( - python3_version: '3.6.1' + python3_version: '3.6.1', ) end let :title do @@ -75,7 +75,7 @@ context "prompt on #{os} with python 3.5" do let :facts do facts.merge( - python3_version: '3.5.1' + python3_version: '3.5.1', ) end let :title do diff --git a/spec/defines/requirements_spec.rb b/spec/defines/requirements_spec.rb index 1b9a75fb..82dc0b37 100644 --- a/spec/defines/requirements_spec.rb +++ b/spec/defines/requirements_spec.rb @@ -16,7 +16,7 @@ context 'with /requirements.txt' do let :params do { - requirements: '/requirements.txt' + requirements: '/requirements.txt', } end @@ -35,7 +35,7 @@ let :params do { owner: 'bob', - group: 'bob' + group: 'bob', } end diff --git a/spec/unit/facter/pip_version_spec.rb b/spec/unit/facter/pip_version_spec.rb index 06bcf3de..3e6cd29f 100644 --- a/spec/unit/facter/pip_version_spec.rb +++ b/spec/unit/facter/pip_version_spec.rb @@ -7,7 +7,6 @@ Facter.clear end - # rubocop:disable RSpec/IndexedLet let(:pip_version_output) do <<~EOS pip 6.0.6 from /opt/boxen/homebrew/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-6.0.6-py2.7.egg (python 2.7) @@ -25,7 +24,6 @@ pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7) EOS end - # rubocop:enable RSpec/IndexedLet describe 'pip_version' do context 'returns pip version when pip present' do diff --git a/spec/unit/facter/python_release_spec.rb b/spec/unit/facter/python_release_spec.rb index d87b10b2..6026c1e3 100644 --- a/spec/unit/facter/python_release_spec.rb +++ b/spec/unit/facter/python_release_spec.rb @@ -7,7 +7,6 @@ Facter.clear end - # rubocop:disable RSpec/IndexedLet let(:python2_version_output) do <<~EOS Python 2.7.9 @@ -18,7 +17,6 @@ Python 3.3.0 EOS end - # rubocop:enable RSpec/IndexedLet describe 'python_release' do context 'returns Python release when `python` present' do diff --git a/spec/unit/facter/python_version_spec.rb b/spec/unit/facter/python_version_spec.rb index 386fcffb..d66d280b 100644 --- a/spec/unit/facter/python_version_spec.rb +++ b/spec/unit/facter/python_version_spec.rb @@ -7,7 +7,6 @@ Facter.clear end - # rubocop:disable RSpec/IndexedLet let(:python2_version_output) do <<~EOS Python 2.7.9 @@ -18,7 +17,6 @@ Python 3.3.0 EOS end - # rubocop:enable RSpec/IndexedLet describe 'python_version' do context 'returns Python version when `python` present' do From 4e23f0e62d828fe87de648bcf8b6e849591228df Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Fri, 6 Mar 2026 13:23:51 +0100 Subject: [PATCH 154/158] regenerate REFERENCE.md --- REFERENCE.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/REFERENCE.md b/REFERENCE.md index def63d6a..e00c04c0 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -99,6 +99,8 @@ Data type: `Python::Version` The default version of Python provided by the operating system. Only used as a fallback if Python is not installed yet to determine how to handle some actions that vary depending on the Python version used. +Default value: `'3.11'` + ##### `ensure` Data type: `Python::Package::Ensure` From 36a97306bf902eaf4fe373d0dee8c2633e7e5a0b Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Fri, 27 Mar 2026 15:51:04 +0000 Subject: [PATCH 155/158] modulesync 10.7.0 --- .github/workflows/create_tag.yml | 22 ++++++++++++++++++++++ .github/workflows/prepare_release.yml | 5 ++++- .github/workflows/release.yml | 6 ++++-- .msync.yml | 2 +- .rubocop.yml | 3 +-- 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/create_tag.yml diff --git a/.github/workflows/create_tag.yml b/.github/workflows/create_tag.yml new file mode 100644 index 00000000..c835e75a --- /dev/null +++ b/.github/workflows/create_tag.yml @@ -0,0 +1,22 @@ +--- +# Managed by modulesync - DO NOT EDIT +# https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ + +name: Create Git tag + +on: + workflow_dispatch: + +permissions: {} + +jobs: + create_tag: + uses: 'voxpupuli/gha-puppet/.github/workflows/create_tag.yml@v4' + with: + allowed_owner: 'voxpupuli' + git_name: 'pccibot' + git_email: '12855858+pccibot@users.noreply.github.com' + secrets: + # Configure secrets here: + # https://docs.github.com/en/actions/security-guides/encrypted-secrets + ssh_private_key: ${{ secrets.PCCI_SSH_PRIVATE_KEY }} diff --git a/.github/workflows/prepare_release.yml b/.github/workflows/prepare_release.yml index 2e3cc689..b3725319 100644 --- a/.github/workflows/prepare_release.yml +++ b/.github/workflows/prepare_release.yml @@ -17,11 +17,14 @@ permissions: jobs: release_prep: - uses: 'voxpupuli/gha-puppet/.github/workflows/prepare_release.yml@v3' + uses: 'voxpupuli/gha-puppet/.github/workflows/prepare_release.yml@v4' with: version: ${{ github.event.inputs.version }} allowed_owner: 'voxpupuli' + git_name: 'pccibot' + git_email: '12855858+pccibot@users.noreply.github.com' secrets: # Configure secrets here: # https://docs.github.com/en/actions/security-guides/encrypted-secrets github_pat: '${{ secrets.PCCI_PAT_RELEASE_PREP }}' + ssh_private_key: '${{ secrets.PCCI_SSH_PRIVATE_KEY }}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0a8b1b18..9062a93c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,7 +8,9 @@ name: Release on: push: tags: - - '*' + # https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onpushbranchestagsbranches-ignoretags-ignore + # https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#filter-pattern-cheat-sheet + - 'v[0-9]+.[0-9]+.[0-9]+' permissions: contents: write @@ -16,7 +18,7 @@ permissions: jobs: release: name: Release - uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v3 + uses: voxpupuli/gha-puppet/.github/workflows/release.yml@v4 with: allowed_owner: 'voxpupuli' secrets: diff --git a/.msync.yml b/.msync.yml index 7d6d4ee4..fae75b07 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.6.0' +modulesync_config_version: '10.7.0' diff --git a/.rubocop.yml b/.rubocop.yml index ea22bff8..fded90cf 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,8 +1,7 @@ --- -inherit_from: .rubocop_todo.yml - # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ +inherit_from: .rubocop_todo.yml inherit_gem: voxpupuli-test: rubocop.yml From 62fc3ef996f4557750a6ccc50265c9116639a699 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Tue, 14 Apr 2026 16:08:09 +0000 Subject: [PATCH 156/158] modulesync 10.8.0 --- .github/workflows/ci.yml | 27 +++++++++++++++++++++++++++ .msync.yml | 2 +- Gemfile | 4 ++-- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4bf69968..e9744066 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,6 +11,29 @@ on: branches: - main - master + workflow_dispatch: + inputs: + beaker_staging_url: + description: |- + URL to a staging Server to test unreleased packages. + We will append the version to the Server and assume all packages are in the same directory. + Only supported for AIO packages. + required: false + type: string + default: 'https://artifacts.voxpupuli.org/openvox-agent' + beaker_collection: + description: |- + When set to staging, we will download the packages from staging_url. + Otherwise we will use the official repos. Supported values: puppet7, puppet8, openvox7, openvox8, staging. + When unset, we will generate a list of supported collections based on metadata.json. + required: false + type: string + beaker_staging_version: + description: |- + The package version we want to test. + Only used for beaker_collection = staging + required: false + type: string concurrency: group: ${{ github.ref_name }} @@ -23,3 +46,7 @@ jobs: puppet: name: Puppet uses: voxpupuli/gha-puppet/.github/workflows/beaker.yml@v4 + with: + beaker_staging_url: ${{ inputs.beaker_staging_url }} + beaker_collection: ${{ inputs.beaker_collection }} + beaker_staging_version: ${{ inputs.beaker_staging_version }} diff --git a/.msync.yml b/.msync.yml index fae75b07..bfb9bee8 100644 --- a/.msync.yml +++ b/.msync.yml @@ -2,4 +2,4 @@ # Managed by modulesync - DO NOT EDIT # https://voxpupuli.org/docs/updating-files-managed-with-modulesync/ -modulesync_config_version: '10.7.0' +modulesync_config_version: '10.8.0' diff --git a/Gemfile b/Gemfile index e0c85815..12839821 100644 --- a/Gemfile +++ b/Gemfile @@ -5,7 +5,7 @@ source ENV['GEM_SOURCE'] || 'https://rubygems.org' group :test do gem 'voxpupuli-test', '~> 14.0', :require => false - gem 'puppet_metadata', '~> 6.0', :require => false + gem 'puppet_metadata', '~> 6.1', :require => false end group :development do @@ -14,7 +14,7 @@ group :development do end group :system_tests do - gem 'voxpupuli-acceptance', '~> 4.0', :require => false + gem 'voxpupuli-acceptance', '~> 4.4', :require => false end group :release do From 8ff45f7ec378384d9dad7f2f67221b9714420cef Mon Sep 17 00:00:00 2001 From: Tim Meusel Date: Mon, 4 May 2026 10:17:23 +0200 Subject: [PATCH 157/158] puppet/epel: Allow 6.x --- metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.json b/metadata.json index a536b318..8788bc5f 100644 --- a/metadata.json +++ b/metadata.json @@ -102,7 +102,7 @@ }, { "name": "puppet/epel", - "version_requirement": ">= 3.0.0 < 6.0.0" + "version_requirement": ">= 3.0.0 < 7.0.0" } ] } From f0345bcb3956b2fc0ec1d11555ce5ad26e0c9a32 Mon Sep 17 00:00:00 2001 From: pccibot <12855858+pccibot@users.noreply.github.com> Date: Tue, 5 May 2026 07:49:26 +0000 Subject: [PATCH 158/158] Release 9.0.0 --- CHANGELOG.md | 32 +++++++++++++++++++++++++++++++- metadata.json | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a4c996b..2c8c0db3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,36 @@ All notable changes to this project will be documented in this file. Each new release typically also includes the latest modulesync defaults. These should not affect the functionality of the module. +## [v9.0.0](https://github.com/voxpupuli/puppet-python/tree/v9.0.0) (2026-05-05) + +[Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v8.0.0...v9.0.0) + +**Breaking changes:** + +- `init.pp`: remove useless `exec` with `default` title that was trying to set a default `umask` [\#735](https://github.com/voxpupuli/puppet-python/pull/735) ([kenyon](https://github.com/kenyon)) +- Drop puppet, update openvox minimum version to 8.19 [\#729](https://github.com/voxpupuli/puppet-python/pull/729) ([TheMeier](https://github.com/TheMeier)) + +**Implemented enhancements:** + +- puppet/epel: Allow 6.x [\#751](https://github.com/voxpupuli/puppet-python/pull/751) ([bastelfreak](https://github.com/bastelfreak)) +- Add support for Debian 13 [\#740](https://github.com/voxpupuli/puppet-python/pull/740) ([smortex](https://github.com/smortex)) +- Do not pass `--log` to `pip install` [\#736](https://github.com/voxpupuli/puppet-python/pull/736) ([smortex](https://github.com/smortex)) +- Allow a version to start with "v" in `python::pip` [\#727](https://github.com/voxpupuli/puppet-python/pull/727) ([techsk8](https://github.com/techsk8)) + +**Fixed bugs:** + +- Fix group ownership for `pip.conf` on FreeBSD [\#739](https://github.com/voxpupuli/puppet-python/pull/739) ([Szparki](https://github.com/Szparki)) +- Replace legacy fact in gunicorn config templating [\#724](https://github.com/voxpupuli/puppet-python/pull/724) ([notCalle](https://github.com/notCalle)) + +**Closed issues:** + +- "Error: Could not find group root" on FreeBSD [\#738](https://github.com/voxpupuli/puppet-python/issues/738) +- Define pip\_package in hieradata [\#731](https://github.com/voxpupuli/puppet-python/issues/731) + +**Merged pull requests:** + +- Add section in README that simulates `python3 -m pip install pandas --user` [\#725](https://github.com/voxpupuli/puppet-python/pull/725) ([bschonec](https://github.com/bschonec)) + ## [v8.0.0](https://github.com/voxpupuli/puppet-python/tree/v8.0.0) (2025-04-28) [Full Changelog](https://github.com/voxpupuli/puppet-python/compare/v7.4.0...v8.0.0) @@ -495,7 +525,7 @@ Due to a bug in the release pipeline, release v6.0.1 didn't make it to the forge - Fix tests: Pin rake for ruby 1.9.3 [\#387](https://github.com/voxpupuli/puppet-python/pull/387) ([waipeng](https://github.com/waipeng)) - Support virtualenv for Ubuntu 16.04 [\#386](https://github.com/voxpupuli/puppet-python/pull/386) ([waipeng](https://github.com/waipeng)) - Set virtualenv package name for Debian stretch [\#383](https://github.com/voxpupuli/puppet-python/pull/383) ([sergiik](https://github.com/sergiik)) -- Update gunicorn.pp - Add manage\_config\_dir [\#382](https://github.com/voxpupuli/puppet-python/pull/382) ([bc-bjoern](https://github.com/bc-bjoern)) +- Update gunicorn.pp - Add manage\_config\_dir [\#382](https://github.com/voxpupuli/puppet-python/pull/382) ([epik0r](https://github.com/epik0r)) - Support latest puppet versions [\#376](https://github.com/voxpupuli/puppet-python/pull/376) ([ghoneycutt](https://github.com/ghoneycutt)) - Add python release as available facts [\#355](https://github.com/voxpupuli/puppet-python/pull/355) ([jcpunk](https://github.com/jcpunk)) - Allow hiera config for dotfiles [\#344](https://github.com/voxpupuli/puppet-python/pull/344) ([puppetninja](https://github.com/puppetninja)) diff --git a/metadata.json b/metadata.json index 8788bc5f..9cd44130 100644 --- a/metadata.json +++ b/metadata.json @@ -1,6 +1,6 @@ { "name": "puppet-python", - "version": "8.0.1-rc0", + "version": "9.0.0", "author": "Vox Pupuli", "summary": "Puppet module for Python", "license": "Apache-2.0",