summaryrefslogtreecommitdiff
path: root/manifests/virtualenv.pp
blob: a5cf12b642f671557aa60b5a437f37771285263c (plain)
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
# == 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
#
# === Examples
#
# python::virtualenv { '/var/www/project1':
#   ensure       => present,
#   version      => 'system',
#   requirements => '/var/www/project1/requirements.txt',
#   proxy        => 'http://proxy.domain.com:3128',
# }
#
# === Authors
#
# Sergey Stankevich
#
define python::virtualenv (
  $ensure       = present,
  $version      = 'system',
  $requirements = false,
  $proxy        = false
) {

  $venv_dir = $name

  if $ensure == 'present' {

    $python = $version ? {
      'system' => 'python',
      default  => "python${version}",
    }

    $proxy_flag = $proxy ? {
      false    => '',
      default  => "--proxy=${proxy}",
    }

    exec { "python_virtualenv_${venv_dir}":
      command => "mkdir -p ${venv_dir} \
        && export http_proxy=${proxy} \
        && virtualenv -p `which ${python}` ${venv_dir} \
        && ${venv_dir}/bin/pip install ${proxy_flag} --upgrade distribute pip",
      creates => $venv_dir,
    }

    if $requirements {
      Exec["python_virtualenv_${venv_dir}"]
      -> Python::Requirements[$requirements]

      python::requirements { $requirements:
        virtualenv => $venv_dir,
        proxy      => $proxy,
      }
    }

  } elsif $ensure == 'absent' {

    file { $venv_dir:
      ensure  => absent,
      force   => true,
      recurse => true,
      purge   => true,
    }

  }

}