I can test it on SUSE 11 I have puppet 0.25.4 running with a zypper script that I found
Be aware that zypper on sles 10 has limited options (like you cant specify a version of a package that you want to use) rug sucks also cos it crashes regulary on sles 10.2 I let something known when I had the chance to test this script On Apr 13, 11:31 pm, Markus Roberts <[email protected]> wrote: > +1 pending some testing by someone SuSE. > > > > On Tue, Apr 13, 2010 at 2:27 PM, Rein Henrichs <[email protected]> wrote: > > Zypper is the replacement for `rug' from earlier SuSE releases. Zypper > > is backward compatible with the rug command (mostly) and supports most > > of the same commands that rug does. > > > This version fixes a number of bugs in the original: > > > * when installing with a specified version, fix bug where the package > > name was being doubled ("foo" became "foofoo"). > > > * fix bug where package name and version were separated by a "=" when it > > should have been a "-". > > > * Update specs to reflect the implementation's use of the "-l" flag as > > recommended in > >http://groups.google.com/group/puppet-dev/msg/d86416c079bd3faf > > > Signed-off-by: Rein Henrichs <[email protected]> > > Signed-off-by: Rein Henrichs <[email protected]> > > --- > > lib/puppet/provider/package/zypper.rb | 52 +++++++++++++++++++++ > > spec/unit/provider/package/zypper.rb | 81 > > +++++++++++++++++++++++++++++++++ > > 2 files changed, 133 insertions(+), 0 deletions(-) > > create mode 100644 lib/puppet/provider/package/zypper.rb > > create mode 100644 spec/unit/provider/package/zypper.rb > > > diff --git a/lib/puppet/provider/package/zypper.rb > > b/lib/puppet/provider/package/zypper.rb > > new file mode 100644 > > index 0000000..2a9c2b3 > > --- /dev/null > > +++ b/lib/puppet/provider/package/zypper.rb > > @@ -0,0 +1,52 @@ > > +Puppet::Type.type(:package).provide :zypper, :parent => :rpm do > > + desc "Support for SuSE ``zypper`` package manager. Found in SLES10sp2+ > > and SLES11" > > + > > + has_feature :versionable > > + > > + commands :rug => "/usr/bin/zypper" > > + commands :rpm => "rpm" > > + > > + confine :operatingsystem => [:suse, :sles, :sled, :opensuse] > > + > > + # Install a package using 'zypper'. > > + def install > > + should = @resource.should(:ensure) > > + self.debug "Ensuring => #{should}" > > + wanted = @resource[:name] > > + > > + # XXX: We don't actually deal with epochs here. > > + case should > > + when true, false, Symbol > > + # pass > > + else > > + # Add the package version > > + wanted = "%s-%s" % [wanted, should] > > + end > > + output = zypper "--quiet", :install, "-l", "-y", wanted > > + > > + unless self.query > > + raise Puppet::ExecutionFailure.new( > > + "Could not find package %s" % self.name > > + ) > > + end > > + end > > + > > + # What's the latest package version available? > > + def latest > > + #zypper can only get a list of *all* available packages? > > + output = zypper "list-updates" > > + > > + if output =~ /#{Regexp.escape @resource[:name]}\s*\|\s*([^\s\|]+)/ > > + return $1 > > + else > > + # rug didn't find updates, pretend the current > > + # version is the latest > > + return @property_hash[:ensure] > > + end > > + end > > + > > + def update > > + # rug install can be used for update, too > > + self.install > > + end > > +end > > diff --git a/spec/unit/provider/package/zypper.rb > > b/spec/unit/provider/package/zypper.rb > > new file mode 100644 > > index 0000000..be45a4c > > --- /dev/null > > +++ b/spec/unit/provider/package/zypper.rb > > @@ -0,0 +1,81 @@ > > +#!/usr/bin/env ruby > > + > > +require File.dirname(__FILE__) + '/../../../spec_helper' > > + > > +provider_class = Puppet::Type.type(:package).provider(:zypper) > > + > > +describe provider_class do > > + before(:each) do > > + # Create a mock resource > > + �...@resource = stub 'resource' > > + > > + # A catch all; no parameters set > > + �[email protected](:[]).returns(nil) > > + > > + # But set name and source > > + �[email protected](:[]).with(:name).returns "mypackage" > > + �[email protected](:[]).with(:ensure).returns :installed > > + �[email protected](:command).with(:zypper).returns > > "/usr/bin/zypper" > > + > > + �...@provider = provider_class.new(@resource) > > + end > > + > > + it "should have an install method" do > > + �...@provider = provider_class.new > > + �[email protected] respond_to(:install) > > + end > > + > > + it "should have a latest method" do > > + �...@provider = provider_class.new > > + �[email protected] respond_to(:uninstall) > > + end > > + > > + it "should have an update method" do > > + �...@provider = provider_class.new > > + �[email protected] respond_to(:update) > > + end > > + > > + it "should have a latest method" do > > + �...@provider = provider_class.new > > + �[email protected] respond_to(:latest) > > + end > > + > > + describe "when installing" do > > + it "should use a command-line with versioned package'" do > > + �[email protected](:should).with(:ensure).returns "1.2.3-4.5.6" > > + �[email protected](:zypper).with('--quiet', :install, '-l', > > '-y', 'mypackage-1.2.3-4.5.6') > > + �[email protected](:query).returns "mypackage 0 1.2.3 4.5.6 > > x86_64" > > + �[email protected] > > + end > > + > > + it "should use a command-line without versioned package" do > > + �[email protected](:should).with(:ensure).returns :latest > > + �[email protected](:zypper).with('--quiet', :install, '-l', > > '-y', 'mypackage') > > + �[email protected](:query).returns "mypackage 0 1.2.3 4.5.6 > > x86_64" > > + �[email protected] > > + end > > + end > > + > > + describe "when updating" do > > + it "should call install method of instance" do > > + �[email protected](:install) > > + �[email protected] > > + end > > + end > > + > > + describe "when getting latest version" do > > + it "should return a version string" do > > + > > + fake_data = "Loading repository data... > > +Reading installed packages... > > +S | Repository | Name | Version | Arch > > +--+----------------+-----------------------+-----------------+------- > > +v | SLES11-Updates | cups | 1.1.1 | x86_64 > > +v | SLES11-Updates | mypackage | 1.3.9h-8.20.1 | x86_64" > > + > > + �[email protected](:zypper).with("list-updates").returns > > fake_data > > + �[email protected] == "1.3.9h-8.20.1" > > + end > > + end > > + > > + end > > -- > > 1.7.0.2 > > > -- > > You received this message because you are subscribed to the Google Groups > > "Puppet Developers" group. > > To post to this group, send email to [email protected]. > > To unsubscribe from this group, send email to > > [email protected]<puppet-dev%[email protected]> > > . > > For more options, visit this group at > >http://groups.google.com/group/puppet-dev?hl=en. > > -- > ----------------------------------------------------------- > The power of accurate observation is > commonly called cynicism by those > who have not got it. ~George Bernard Shaw > ------------------------------------------------------------ -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
