Skip to content

Commit 52c3355

Browse files
committed
Install venv packages in python::install::venv
1 parent b08bf1a commit 52c3355

File tree

7 files changed

+63
-18
lines changed

7 files changed

+63
-18
lines changed

REFERENCE.md

+5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
* [`python`](#python): Installs and manages python, python-dev and gunicorn.
1212
* [`python::install::dev`](#python--install--dev): Installs python development packages
13+
* [`python::install::venv`](#python--install--venv): Installs python virtualenv packages
1314
* [`python::pip::bootstrap`](#python--pip--bootstrap): allow to bootstrap pip when python is managed from other module
1415

1516
#### Private Classes
@@ -294,6 +295,10 @@ Default value: `'/opt/python'`
294295

295296
Installs python development packages
296297

298+
### <a name="python--install--venv"></a>`python::install::venv`
299+
300+
Installs python virtualenv packages
301+
297302
### <a name="python--pip--bootstrap"></a>`python::pip::bootstrap`
298303

299304
allow to bootstrap pip when python is managed from other module

manifests/install.pp

+1-10
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,7 @@
3232
}
3333

3434
if $python::manage_venv_package {
35-
##
36-
## CentOS has no extra package for venv
37-
##
38-
unless $facts['os']['family'] == 'RedHat' {
39-
package { 'python-venv':
40-
ensure => $python::venv,
41-
name => "${python}-venv",
42-
require => Package['python'],
43-
}
44-
}
35+
contain python::install::venv
4536
}
4637

4738
case $python::provider {

manifests/install/venv.pp

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# @summary Installs python virtualenv packages
2+
class python::install::venv {
3+
include python
4+
5+
# Main python package bundle venv on some operating systems
6+
unless $facts['os']['family'] in ['Archlinux', 'FreeBSD', 'RedHat'] {
7+
package { 'python-venv':
8+
ensure => $python::venv,
9+
name => "${python::install::python}-venv",
10+
require => Package['python'],
11+
}
12+
}
13+
}

manifests/params.pp

+2
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
}
4141
$manage_venv_package = $facts['os']['family'] ? {
4242
'Archlinux' => false,
43+
'FreeBSD' => false,
44+
'RedHat' => false,
4345
default => true,
4446
}
4547
}

manifests/pyvenv.pp

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
Python::Venv::PipVersion $pip_version = 'latest',
3737
) {
3838
include python
39+
include python::install::venv
3940

4041
if $ensure == 'present' {
4142
$python_version = $version ? {

spec/classes/install/venv_spec.rb

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
describe 'python::install::venv' do
6+
on_supported_os.each do |os, facts|
7+
context "on #{os}" do
8+
let :facts do
9+
facts
10+
end
11+
12+
context 'with default settings' do
13+
if %w[Archlinux FreeBSD RedHat].include?(facts[:os]['family'])
14+
it { is_expected.not_to contain_package('python-venv') }
15+
else
16+
it { is_expected.to contain_package('python-venv').with(ensure: 'absent') }
17+
end
18+
end
19+
20+
context 'when ensuring venv is setup' do
21+
let(:pre_condition) do
22+
<<~PP
23+
class { 'python':
24+
venv => present,
25+
}
26+
PP
27+
end
28+
29+
if %w[Archlinux FreeBSD RedHat].include?(facts[:os]['family'])
30+
it { is_expected.not_to contain_package('python-venv') }
31+
else
32+
it { is_expected.to contain_package('python-venv').with(ensure: 'present') }
33+
end
34+
end
35+
end
36+
end
37+
end

spec/classes/python_spec.rb

+4-8
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@
2323
it { is_expected.to contain_package('pip') }
2424
end
2525

26-
if %w[Archlinux RedHat].include?(facts[:os]['family'])
27-
it { is_expected.not_to contain_package('python-venv') }
26+
if %w[Archlinux FreeBSD RedHat].include?(facts[:os]['family'])
27+
it { is_expected.not_to contain_class('python::install::venv') }
2828
else
29-
it { is_expected.to contain_package('python-venv') }
29+
it { is_expected.to contain_class('python::install::venv') }
3030
end
3131
end
3232

@@ -44,23 +44,19 @@
4444
it { is_expected.not_to contain_package('python') }
4545
it { is_expected.not_to contain_package('python-dev') }
4646
it { is_expected.not_to contain_package('pip') }
47-
it { is_expected.not_to contain_package('python-venv') }
47+
it { is_expected.not_to contain_class('python::install::venv') }
4848
end
4949

5050
context 'with packages present' do
5151
let :params do
5252
{
5353
manage_pip_package: true,
54-
manage_venv_package: true,
5554
pip: 'present',
56-
venv: 'present'
5755
}
5856
end
5957

6058
it { is_expected.to compile.with_all_deps }
6159
it { is_expected.to contain_package('pip').with(ensure: 'present') }
62-
63-
it { is_expected.to contain_package('python-venv').with(ensure: 'present') } unless facts[:os]['family'] == 'RedHat'
6460
end
6561

6662
case facts[:os]['family']

0 commit comments

Comments
 (0)