components/ruby/puppet/patches/puppet-12-pkg-provider-latest.patch
author Patrick Einheber <patrick.einheber@oracle.com>
Wed, 27 Apr 2016 14:55:10 -0700
changeset 5860 afd31ba91ee9
parent 5775 ecbec224a370
child 7565 48aa82a0931f
permissions -rw-r--r--
23146903 Puppet and OpenStack modules need modification notices
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     1
In-house patch to fix Solaris specific bug; not suitible for upstream
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     2
Fixing issue with package ensure=>latest by refreshing the pkg cache first with pkg update
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     3
Using --parsable=0 option to obsolete pkg list -Hn
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     4
Fixing problem with ambiguous package names
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     5
Wildcards support
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     6
install_options/uninstall_options features support
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
     7
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
     8
--- puppet-3.8.6/lib/puppet/provider/package/pkg.rb.orig	2016-04-19 15:09:14.789792650 -0700
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
     9
+++ puppet-3.8.6/lib/puppet/provider/package/pkg.rb	2016-04-19 15:09:44.646514474 -0700
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
    10
@@ -5,7 +5,7 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    11
 require 'puppet/provider/package'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    12
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    13
 Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package do
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    14
-  desc "OpenSolaris image packaging system. See pkg(5) for more information"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    15
+  desc "Solaris image packaging system. See pkg(5) for more information"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    16
   # http://docs.oracle.com/cd/E19963-01/html/820-6572/managepkgs.html
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    17
   # A few notes before we start :
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    18
   # Opensolaris pkg has two slightly different formats (as of now.)
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
    19
@@ -18,10 +18,10 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    20
   # TODO: We still have to allow packages to specify a preferred publisher.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    21
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    22
   has_feature :versionable
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    23
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    24
   has_feature :upgradable
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    25
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    26
   has_feature :holdable
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    27
+  has_feature :install_options
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    28
+  has_feature :uninstall_options
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    29
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    30
   commands :pkg => "/usr/bin/pkg"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    31
 
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
    32
@@ -30,7 +30,7 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    33
   defaultfor :osfamily => :solaris, :kernelrelease => ['5.11', '5.12']
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    34
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    35
   def self.instances
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    36
-    pkg(:list, '-H').split("\n").map{|l| new(parse_line(l))}
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    37
+    pkg(:list, '-Hv').split("\n").map{|l| new(parse_line(l))}
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    38
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    39
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    40
   # The IFO flag field is just what it names, the first field can have ether
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
    41
@@ -73,6 +73,10 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    42
     {}
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    43
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    44
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    45
+  def self.ufxi_flag(flags)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    46
+    {}
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    47
+  end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    48
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    49
   # pkg state was present in the older version of pkg (with UFOXI) but is
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    50
   # no longer available with the IFO field version. When it was present,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    51
   # it was used to indicate that a particular version was present (installed)
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
    52
@@ -94,29 +98,73 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    53
   # formats of output for different pkg versions.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    54
   def self.parse_line(line)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    55
     (case line.chomp
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    56
-    # NAME (PUBLISHER)            VERSION           IFO  (new:630e1ffc7a19)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    57
-    # system/core-os              0.5.11-0.169      i--
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    58
-    when /^(\S+) +(\S+) +(...)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    59
-      {:name => $1, :ensure => $2}.merge ifo_flag($3)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    60
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    61
-    # x11/wm/fvwm (fvwm.org)      2.6.1-3           i--
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    62
-    when /^(\S+) \((.+)\) +(\S+) +(...)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    63
-      {:name => $1, :publisher => $2, :ensure => $3}.merge ifo_flag($4)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    64
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    65
-    # NAME (PUBLISHER)                  VERSION          STATE      UFOXI (dvd:052adf36c3f4)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    66
-    # SUNWcs                            0.5.11-0.126     installed  -----
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    67
-    when /^(\S+) +(\S+) +(\S+) +(.....)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    68
-      {:name => $1, :ensure => $2}.merge pkg_state($3).merge(ufoxi_flag($4))
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    69
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    70
-    # web/firefox/plugin/flash (extra)  10.0.32.18-0.111 installed  -----
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    71
-    when /^(\S+) \((.+)\) +(\S+) +(\S+) +(.....)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    72
-      {:name => $1, :publisher => $2, :ensure => $3}.merge pkg_state($4).merge(ufoxi_flag($5))
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    73
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    74
+    #pkg list -vH output format since build 165
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    75
+    #FMRI                                                                         IFO
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    76
+    #pkg://solaris/system/[email protected]:20151116T010109Z           i--
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    77
+    when /^(\S+) +(...)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    78
+      full_fmri = $1.split('@')
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    79
+      {:name => full_fmri[0], :ensure => full_fmri[1]}.merge(ifo_flag($2))
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    80
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    81
+    #Solaris11 Express 10/11, OpenSolaris
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    82
+    #FMRI                                                               STATE       UFOXI
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    83
+    #pkg://solaris/editor/[email protected],5.11-0.151.0.1:20101105T0540492   installed   -----
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    84
+    when /^(\S+) +(\S+) +(.....)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    85
+      full_fmri = $1.split('@')
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    86
+      {:name => full_fmri[0], :ensure => full_fmri[1]}.merge pkg_state($2).merge(ufoxi_flag($3))
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    87
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    88
+    #OpenSolaris
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    89
+    #FMRI                                               STATE       UFXI
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    90
+    #pkg:/[email protected],5.11-0.86:20080426T180612Z    installed   ----
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    91
+    when /^(\S+) +(\S+) +(....)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    92
+      full_fmri = $1.split('@')
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    93
+      {:name => full_fmri[0], :ensure => full_fmri[1]}.merge pkg_state($2).merge(ufxi_flag($3))
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    94
     else
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    95
       raise ArgumentError, 'Unknown line format %s: %s' % [self.name, line]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    96
     end).merge({:provider => self.name})
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    97
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    98
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    99
+  def parse_latest_query(exit_code, pkg_fmri_list)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   100
+    # Get the current status of the package
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   101
+    name = @property_hash[:name]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   102
+    provider = @property_hash[:provider]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   103
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   104
+    # The package is up-to-date
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   105
+    if pkg_fmri_list.empty? && exit_code == 4
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   106
+      status = 'installed'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   107
+      version = @property_hash[:ensure]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   108
+    # Latest version is available
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   109
+    elsif !pkg_fmri_list.empty? && exit_code == 0
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   110
+      if wildcard?
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   111
+        version = ''
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   112
+        status = 'known'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   113
+      else
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   114
+        # Search for the correct pkg FMRI (to ignore dependencies)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   115
+        # search string format will be, i.e.,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   116
+        # pkg://test/testing/testpkg@
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   117
+        # and retrieve the matched index.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   118
+        search_pkg_name = name + '@'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   119
+        index = pkg_fmri_list.index{|l| l[0].include?(search_pkg_name)}
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   120
+        raise Puppet::Error, "Cannot retrieve pkg name" if index.nil?
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   121
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   122
+        # Parse the fmri of the latest available pkg, i.e.,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   123
+        # from: pkg://test/testing/[email protected],5.11:20151112T015434Z
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   124
+        # to: 1.0.13,5.11:20151112T015434Z
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   125
+        version = pkg_fmri_list[index][1].split('@')[1]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   126
+        status = 'known'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   127
+      end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   128
+    else
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   129
+      raise Puppet::Error, "Cannot retrieve pkg version"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   130
+    end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   131
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   132
+    # Store as a desirable query
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   133
+    return {
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   134
+      :name=>name,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   135
+      :ensure=>version,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   136
+      :status=>status,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   137
+      :provider=>provider
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   138
+    }
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   139
+  end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   140
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   141
   def hold
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   142
     pkg(:freeze, @resource[:name])
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   143
   end
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
   144
@@ -126,31 +174,22 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   145
     raise Puppet::Error, "Unable to unfreeze #{r[:out]}" unless [0,4].include? r[:exit]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   146
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   147
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   148
-  # Return the version of the package. Note that the bug
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   149
-  # http://defect.opensolaris.org/bz/show_bug.cgi?id=19159%
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   150
-  # notes that we can't use -Ha for the same even though the manual page reads that way.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   151
+  # Return the version of the package.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   152
   def latest
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   153
-    lines = pkg(:list, "-Hn", @resource[:name]).split("\n")
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   154
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   155
-    # remove certificate expiration warnings from the output, but report them
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   156
-    # Note: we'd like to use select! here to modify the lines array and avoid
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   157
-    #       the second select further down. But Solaris 11 comes with ruby 1.8.7
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   158
-    #       which doesn't support select!, so do this as two selects.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   159
-    cert_warnings = lines.select { |line| line =~ /^Certificate/ }
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   160
-    if cert_warnings
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   161
-      Puppet.warning("pkg warning: #{cert_warnings}")
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   162
-    end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   163
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   164
-    lst = lines.select { |line| line !~ /^Certificate/ }.map { |line| self.class.parse_line(line) }
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   165
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   166
-    # Now we know there is a newer version. But is that installable? (i.e are there any constraints?)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   167
-    # return the first known we find. The only way that is currently available is to do a dry run of
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   168
-    # pkg update and see if could get installed (`pkg update -n res`).
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   169
-    known = lst.find {|p| p[:status] == 'known' }
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   170
-    return known[:ensure] if known and exec_cmd(command(:pkg), 'update', '-n', @resource[:name])[:exit].zero?
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   171
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   172
-    # If not, then return the installed, else nil
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   173
-    (lst.find {|p| p[:status] == 'installed' } || {})[:ensure]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   174
+    # Dry-run package update to check the availability of the latest version
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   175
+    # -- return code --
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   176
+    # 0: latest version available
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   177
+    # 1: error
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   178
+    # 4: already up-to-date
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   179
+    r = exec_cmd(command(:pkg), 'update', '-n', '--parsable=0', @resource[:name])
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   180
+    raise Puppet::Error, "Cannot update to the latest package: #{r[:out]}\n" \
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   181
+      unless [0, 4].include? r[:exit]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   182
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   183
+    package_versions = JSON.parse(r[:out])['change-packages']
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   184
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   185
+    lst =  parse_latest_query(r[:exit], package_versions)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   186
+    Puppet.debug "Desirable query status = #{lst}"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   187
+    return lst[:ensure]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   188
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   189
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   190
   # install the package and accept all licenses.
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
   191
@@ -166,19 +205,22 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   192
         self.uninstall if Puppet::Util::Package.versioncmp(should, is[:ensure]) < 0
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   193
       end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   194
     end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   195
-    r = exec_cmd(command(:pkg), 'install', '--accept', name)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   196
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   197
+    cmd = ['--accept']
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   198
+    cmd << join_options(@resource[:install_options]) if @resource[:install_options]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   199
+    r = exec_cmd(command(:pkg), 'install', cmd, name)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   200
     return r if nofail
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   201
     raise Puppet::Error, "Unable to update #{r[:out]}" if r[:exit] != 0
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   202
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   203
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   204
-  # uninstall the package. The complication comes from the -r_ecursive flag which is no longer
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   205
-  # present in newer package version.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   206
+  # uninstall the package.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   207
   def uninstall
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   208
     cmd = [:uninstall]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   209
     case (pkg :version).chomp
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   210
     when /052adf36c3f4/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   211
       cmd << '-r'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   212
     end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   213
+    cmd << join_options(@resource[:uninstall_options]) if @resource[:uninstall_options]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   214
     cmd << @resource[:name]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   215
     pkg cmd
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   216
   end
5860
afd31ba91ee9 23146903 Puppet and OpenStack modules need modification notices
Patrick Einheber <patrick.einheber@oracle.com>
parents: 5775
diff changeset
   217
@@ -191,10 +233,22 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   218
     raise Puppet::Error, "Unable to update #{r[:out]}"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   219
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   220
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   221
+  def wildcard?
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   222
+    @resource[:name].include?("*") || @resource[:name].include?("?")
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   223
+  end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   224
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   225
   # list a specific package
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   226
   def query
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   227
-    r = exec_cmd(command(:pkg), 'list', '-H', @resource[:name])
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   228
+    r = exec_cmd(command(:pkg), 'list', '-Hv', @resource[:name])
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   229
     return {:ensure => :absent, :name => @resource[:name]} if r[:exit] != 0
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   230
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   231
+    # Does input contain wildcard? just pass it down and let pkg decide
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   232
+    return {:ensure => :installed, :name => @resource[:name], :provider => self.class.name} if wildcard?
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   233
+    # If there are more than one results? this will fail due to the ambiguity.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   234
+    if r[:out].split("\n").length > 1
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   235
+      raise Puppet::Error, "'#{@resource[:name]}' matches multiple packages. \n#{r[:out]}"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   236
+    end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   237
+    # Pass the parsed result back to @property_hash
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   238
     self.class.parse_line(r[:out])
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   239
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   240