pip.pp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # == Define: python::pip
  2. #
  3. # Installs and manages packages from pip.
  4. #
  5. # === Parameters
  6. #
  7. # [*ensure*]
  8. # present|absent. Default: present
  9. #
  10. # [*virtualenv*]
  11. # virtualenv to run pip in.
  12. #
  13. # [*url*]
  14. # URL to install from. Default: none
  15. #
  16. # [*owner*]
  17. # The owner of the virtualenv being manipulated. Default: root
  18. #
  19. # [*proxy*]
  20. # Proxy server to use for outbound connections. Default: none
  21. #
  22. # [*environment*]
  23. # Additional environment variables required to install the packages. Default: none
  24. #
  25. # === Examples
  26. #
  27. # python::pip { 'flask':
  28. # virtualenv => '/var/www/project1',
  29. # proxy => 'http://proxy.domain.com:3128',
  30. # }
  31. #
  32. # === Authors
  33. #
  34. # Sergey Stankevich
  35. # Fotis Gimian
  36. #
  37. define python::pip (
  38. $ensure = present,
  39. $virtualenv = 'system',
  40. $url = false,
  41. $owner = 'root',
  42. $proxy = false,
  43. $environment = []
  44. ) {
  45. # Parameter validation
  46. if ! $virtualenv {
  47. fail('python::pip: virtualenv parameter must not be empty')
  48. }
  49. if $virtualenv == 'system' and $owner != 'root' {
  50. fail('python::pip: root user must be used when virtualenv is system')
  51. }
  52. $cwd = $virtualenv ? {
  53. 'system' => '/',
  54. default => "${virtualenv}",
  55. }
  56. $pip_env = $virtualenv ? {
  57. 'system' => 'pip',
  58. default => "${virtualenv}/bin/pip",
  59. }
  60. $proxy_flag = $proxy ? {
  61. false => '',
  62. default => "--proxy=${proxy}",
  63. }
  64. $grep_regex = $name ? {
  65. /==/ => "^${name}\$",
  66. default => "^${name}==",
  67. }
  68. $source = $url ? {
  69. false => $name,
  70. default => "${url}#egg=${name}",
  71. }
  72. case $ensure {
  73. present: {
  74. exec { "pip_install_${name}":
  75. command => "$pip_env --log-file ${cwd}/pip.log install ${proxy_flag} ${source}",
  76. unless => "$pip_env freeze | grep -i -e ${grep_regex}",
  77. user => $owner,
  78. environment => $environment,
  79. }
  80. }
  81. default: {
  82. exec { "pip_uninstall_${name}":
  83. command => "echo y | $pip_env uninstall ${proxy_flag} ${name}",
  84. onlyif => "$pip_env freeze | grep -i -e ${grep_regex}",
  85. user => $owner,
  86. environment => $environment,
  87. }
  88. }
  89. }
  90. }