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.

Reply via email to