1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# == Define: python::virtualenv
#
# Creates Python virtualenv.
#
# === Parameters
#
# [*ensure*]
# present|absent. Default: present
#
# [*version*]
# Python version to use. Default: system default
#
# [*requirements*]
# Path to pip requirements.txt file. Default: none
#
# [*proxy*]
# Proxy server to use for outbound connections. Default: none
#
# [*systempkgs*]
# Copy system site-packages into virtualenv. Default: don't
#
# [*distribute*]
# Include distribute in the virtualenv. Default: true
#
# === Examples
#
# python::virtualenv { '/var/www/project1':
# ensure => present,
# version => 'system',
# requirements => '/var/www/project1/requirements.txt',
# proxy => 'http://proxy.domain.com:3128',
# systempkgs => true,
# }
#
# === Authors
#
# Sergey Stankevich
# Ashley Penney
# Marc Fournier
#
define python::virtualenv (
$ensure = present,
$version = 'system',
$requirements = false,
$proxy = false,
$systempkgs = false,
$distribute = true,
) {
$venv_dir = $name
if $ensure == 'present' {
$python = $version ? {
'system' => 'python',
default => "python${version}",
}
$proxy_flag = $proxy ? {
false => '',
default => "--proxy=${proxy}",
}
$proxy_command = $proxy ? {
false => '',
default => "&& export http_proxy=${proxy}",
}
$system_pkgs_flag = $systempkgs ? {
false => '',
default => '--system-site-packages',
}
$distribute_pkg = $distribute ? {
true => 'distribute',
default => '',
}
exec { "python_virtualenv_${venv_dir}":
command => "mkdir -p ${venv_dir} \
${proxy_command} \
&& virtualenv -p `which ${python}` ${system_pkgs_flag} ${venv_dir} \
&& ${venv_dir}/bin/pip install ${proxy_flag} --upgrade ${distribute_pkg} pip",
creates => $venv_dir,
path => [ '/bin', '/usr/bin', '/usr/sbin' ],
}
if $requirements {
exec { "python_requirements_initial_install_${requirements}_${venv_dir}":
command => "${venv_dir}/bin/pip install ${proxy_flag} --requirement ${requirements}",
refreshonly => true,
timeout => 1800,
subscribe => Exec["python_virtualenv_${venv_dir}"],
}
python::requirements { "${requirements}_${venv_dir}":
requirements => $requirements,
virtualenv => $venv_dir,
proxy => $proxy,
require => Exec["python_virtualenv_${venv_dir}"],
}
}
} elsif $ensure == 'absent' {
file { $venv_dir:
ensure => absent,
force => true,
recurse => true,
purge => true,
}
}
}
|