Issue #2382 has been updated by Luke Kanies.

Status changed from Unreviewed to Needs design decision

I can definitely see the reason for the change to the port provider, but this 
is a potentially large change in behaviour for the package type.  Apparently 
every other package provider that supports upgrading will install a missing app 
or upgrade an existing app; will portupgrade not do this?

I'm concerned that making this change would require that we modify many other 
providers, also.  At the least, have you tested this on other platforms?
----------------------------------------
Feature #2382: package provider ports: portupgrade does not work
http://projects.reductivelabs.com/issues/2382

Author: Ryan Hutchison
Status: Needs design decision
Priority: Normal
Assigned to: 
Category: package
Target version: 
Complexity: Trivial
Affected version: 0.24.8
Keywords: 


In puppet/provider/package/ports.rb the command passes argument -N which 
prevents installed ports from being upgraded.

* Modified type 'packages.rb'.
> * latest now calls install when port is absent and update when port exists, 
> but is not the latest version.
* Modified package provider 'ports.rb'.
> * update now runs portupgrade with -M BATCH=yes instead of calling install.
> * install runs as normal.


Patch:
<pre>
--- puppet/provider/package/ports.rb    2009-07-01 14:22:00.000000000 -0400
+++ puppet-patched/provider/package/ports.rb    2009-07-01 14:25:45.000000000 
-0400
@@ -91,7 +91,13 @@ Puppet::Type.type(:package).provide :por
     end

     def update
-        install()
+        # -M: yes, we're a batch, so don't ask any questions
+        cmd = %w{-M BATCH=yes} << @resource[:name]
+
+        output = portupgrade(*cmd)
+        if output =~ /\*\* No such /
+            raise Puppet::ExecutionFailure, "Could not find package %s" % 
@resource[:name]
+        end
     end
 end

--- puppet/type/package.rb      2009-07-01 14:22:01.000000000 -0400
+++ puppet-patched/type/package.rb      2009-07-01 14:25:22.000000000 -0400
@@ -68,15 +68,20 @@ module Puppet
                 # in the "install" method.  So, check the current state now,
                 # to compare against later.
                 current = self.retrieve
-                begin
-                    provider.update
-                rescue => detail
-                    self.fail "Could not update: %s" % detail
-                end

                 if current == :absent
+                    begin
+                        provider.install
+                    rescue => detail
+                        self.fail "Could not install: %s" % detail
+                    end
                     :package_installed
                 else
+                    begin
+                        provider.update
+                    rescue => detail
+                        self.fail "Could not update: %s" % detail
+                    end
                     :package_changed
                 end
             end
</pre>> 


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://reductivelabs.com/redmine/my/account

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" 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-bugs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to