puppet-pip 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. data/lib/puppet/provider/package/pip.rb +70 -0
  2. metadata +80 -0
@@ -0,0 +1,70 @@
1
+ # Puppet package provider for Python's `pip` package management
2
+ # frontend.
3
+ # <http://pip.openplans.org/>
4
+
5
+ require 'puppet/provider/package'
6
+
7
+ Puppet::Type.type(:package).provide :pip,
8
+ :parent => ::Puppet::Provider::Package do
9
+
10
+ desc "Python packages via `pip`."
11
+
12
+ has_feature :installable, :uninstallable, :versionable
13
+
14
+ # Enabling :upgradable and thus the ability to `ensure => latest`
15
+ # will require talking to the PyPI XMLRPC interface because the
16
+ # only way to figure out what the latest version number is from
17
+ # the CLI is to download and unpack it.
18
+ # <http://wiki.python.org/moin/PyPiXmlRpc>
19
+ #has_feature :upgradeable
20
+
21
+ if pathname = `which pip`.chomp
22
+ commands :pip => pathname
23
+ else
24
+ raise NotImplementedError
25
+ end
26
+
27
+ def self.parse(line)
28
+ if line.chomp =~ /^([^=]+)==([^=]+)$/
29
+ {:ensure => $2, :name => $1, :provider => name}
30
+ else
31
+ nil
32
+ end
33
+ end
34
+
35
+ def self.instances
36
+ packages = []
37
+ execpipe "#{command :pip} freeze" do |process|
38
+ process.collect do |line|
39
+ next unless options = parse(line)
40
+ packages << new(options)
41
+ end
42
+ end
43
+ packages
44
+ end
45
+
46
+ def query
47
+ execpipe "#{command :pip} freeze" do |process|
48
+ process.each do |line|
49
+ options = self.class.parse(line)
50
+ return options if options[:name] == @resource[:name]
51
+ end
52
+ end
53
+ nil
54
+ end
55
+
56
+ def install
57
+ arg = @resource[:name]
58
+ if String === @resource[:ensure]
59
+ arg = "#{arg}==#{@resource[:ensure]}"
60
+ end
61
+ pip "install", "-q", arg
62
+ end
63
+
64
+ # Uninstall won't work unless this issue gets fixed.
65
+ # <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562544>
66
+ def uninstall
67
+ pip "uninstall", "-y", "-q", @resource[:name]
68
+ end
69
+
70
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: puppet-pip
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Richard Crowley
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-08 00:00:00 +00:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: puppet
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ description: Puppet provider of Python packages via pip.
36
+ email: richard@devstructure.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files: []
42
+
43
+ files:
44
+ - lib/puppet/provider/package/pip.rb
45
+ has_rdoc: true
46
+ homepage: http://github.com/rcrowley/python-pip
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ hash: 3
69
+ segments:
70
+ - 0
71
+ version: "0"
72
+ requirements: []
73
+
74
+ rubyforge_project:
75
+ rubygems_version: 1.3.7
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: Puppet provider of Python packages via pip.
79
+ test_files: []
80
+