components/ruby/puppet/patches/puppet-12-pkg-provider-latest.patch
author Shawn Ferry <shawn.ferry@oracle.com>
Mon, 28 Nov 2016 16:54:02 -0800
changeset 7565 48aa82a0931f
parent 5860 afd31ba91ee9
permissions -rw-r--r--
PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0 19429313 address_object type should support vrrp addresses 19888183 publisher provider is applied on each puppet run 22125767 nsswitch provider missing ipnodes, protocols, printers 22126108 add process scheduler administration provider 22960016 Puppet needs a native way to set ZFS ACLs 23107546 race condition with smf provider and manifest-import 23119445 Upgrade Ruby Hiera to 3.2.0 23547788 Add ILB type to Puppet 23593229 rspec tests need to be written for solaris_providers boot_environment 23593308 rspec tests need to be written for solaris_providers ipmp_interface 23593316 rspec tests need to be written for solaris_providers protocol_properties 23593225 rspec tests need to be written for solaris_providers etherstub 23593319 rspec tests need to be written for solaris_providers vnic 23593310 puppet module rspec tests and validation for nsswitch 24674283 current puppet.stencil implementation restricts some valid puppet use cases 24680838 puppet agent failures should be visible to administrator via SMF interfaces 24681179 puppet's logadm.conf is pointing at wrong location for master, ignoring agent 24696742 puppet svccfg doesn't work for some value types 24696809 Puppet link aggregation modules cascading errors 24825868 Update to Puppet 4, Puppet 3 is EOL 24836004 '-' is valid in pkg mediator implementation 24836209 nis provider needs to support multiple securenets entries 24928890 keystone and horizon modules patches create invalid metadata.json 25022632 puppet ipmp_interface type should not validate interface existence 25022714 Puppet SMF service should not refresh on every apply operation 25225039 puppet svccfg should not declare a property absent if it does not match desired 25060925 puppet resource address_object generates invalid puppet code for dhcp interfaces 25065015 update puppet oracle-solaris_providers 2.0.0 25071521 puppet svccfg type should return a clear error if value is not provided 25071681 puppet dns resource generates invalid manifest 25071686 puppet resource ldap; Error: Could not run: No ability to determine if ldap... 25071690 puppet resource nis; Error: Could not run: No ability to determine if nis exists 25092384 puppet module files should be owned by root 25093408 puppet-solaris should be part of puppet again 25106150 Nis provider is not idempotent 25106155 DNS provider is not idempotent 25163776 puppet link_aggregation misunderstands 'address' -u output 25163791 puppet link_aggregation should use resource values instead of property_hash 25163815 puppet address_object errors and validations could be better 25163840 puppet Puppet::Property::List types conflict with internally generated arrays 25163864 puppet link_aggregation type specs need to be written 25177901 puppet beadm should not use both -e and -p 25178928 puppet link_aggregation should try to copy existing values on change of mode 25179040 puppet link_aggregation should delete with -t for temporary 25192742 puppet svccfg shouldn't try to update properties for a non-existent fmri 25196056 puppet interface and address _properties namevars are problematic 25191982 puppet type 'dns' is not able to set 'options' property in resolv.conf 25211935 puppet link_aggregation needs to permanently delete before modifying temporary 25217063 puppet protocol_properties is not idempotent 25218036 puppet resource svccfg emits a warning for every property 25218053 puppet svccfg prefetch should match individually specified parameters 25218208 puppet svccfg should enforce well-formedness in fmri parameters 25224661 puppet resource address_properties shouldn't output read-only properties 25224777 puppet address_properties should not reset unchanged properties 25306835 puppet boot_environment needs to understand the new snapshot format 25306877 puppet svccfg should check for pg and allow nested property groups 25306904 puppet dns,nis,ldap,protocol_properties prefetch fails after input auto munge 25348321 puppet boot_environment needs to validate all properties and parameters 25354751 puppet vnic provider needs to support / and - as valid vnic name characters
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
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
     8
diff --git a/lib/puppet/provider/package/pkg.rb b/lib/puppet/provider/package/pkg.rb
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
     9
--- a/lib/puppet/provider/package/pkg.rb
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    10
+++ b/lib/puppet/provider/package/pkg.rb
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    11
@@ -1,7 +1,7 @@
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    12
 require 'puppet/provider/package'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    13
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    14
 Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package do
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    15
-  desc "OpenSolaris image packaging system. See pkg(5) for more information."
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    16
+  desc "Solaris image packaging system. See pkg(5) for more information"
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    17
   # https://docs.oracle.com/cd/E19963-01/html/820-6572/managepkgs.html
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    18
   # A few notes before we start:
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    19
   # Opensolaris pkg has two slightly different formats (as of now.)
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    20
@@ -14,10 +14,10 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    21
   # 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
    22
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    23
   has_feature :versionable
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    24
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    25
   has_feature :upgradable
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    26
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    27
   has_feature :holdable
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    28
+  has_feature :install_options
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    29
+  has_feature :uninstall_options
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    30
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    31
   commands :pkg => "/usr/bin/pkg"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    32
 
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    33
@@ -69,6 +69,10 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
5775
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
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    36
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    37
+  def self.ufxi_flag(flags)
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    38
+    {}
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    39
+  end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    40
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    41
   # 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
    42
   # 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
    43
   # it was used to indicate that a particular version was present (installed)
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    44
@@ -100,11 +104,74 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    45
     when %r'^pkg://([^/]+)/([^@]+)@(\S+) +(\S+) +(.....)$'
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    46
       {:publisher => $1, :name => $2, :ensure => $3}.merge pkg_state($4).merge(ufoxi_flag($5))
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    47
 
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    48
+    #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
    49
+    #FMRI                                                                         IFO
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    50
+    #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
    51
+    when /^(\S+) +(...)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    52
+      full_fmri = $1.split('@')
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    53
+      {: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
    54
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    55
+    #Solaris11 Express 10/11, OpenSolaris
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    56
+    #FMRI                                                               STATE       UFOXI
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    57
+    #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
    58
+    when /^(\S+) +(\S+) +(.....)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    59
+      full_fmri = $1.split('@')
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    60
+      {: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
    61
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    62
+    #OpenSolaris
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    63
+    #FMRI                                               STATE       UFXI
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    64
+    #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
    65
+    when /^(\S+) +(\S+) +(....)$/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    66
+      full_fmri = $1.split('@')
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    67
+      {:name => full_fmri[0], :ensure => full_fmri[1]}.merge pkg_state($2).merge(ufxi_flag($3))
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
    68
+
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    69
     else
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    70
       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
    71
     end).merge({:provider => self.name})
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    72
   end
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
+  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
    75
+    # 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
    76
+    name = @property_hash[:name]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    77
+    provider = @property_hash[:provider]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    78
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    79
+    # The package is up-to-date
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    80
+    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
    81
+      status = 'installed'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    82
+      version = @property_hash[:ensure]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    83
+    # Latest version is available
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    84
+    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
    85
+      if wildcard?
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    86
+        version = ''
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    87
+        status = 'known'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    88
+      else
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    89
+        # 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
    90
+        # 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
    91
+        # pkg://test/testing/testpkg@
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    92
+        # and retrieve the matched index.
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    93
+        search_pkg_name = name + '@'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    94
+        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
    95
+        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
    96
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
    97
+        # 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
    98
+        # 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
    99
+        # 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
   100
+        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
   101
+        status = 'known'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   102
+      end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   103
+    else
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   104
+      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
   105
+    end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   106
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   107
+    # Store as a desirable query
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   108
+    return {
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   109
+      :name=>name,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   110
+      :ensure=>version,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   111
+      :status=>status,
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   112
+      :provider=>provider
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   113
+    }
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   114
+  end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   115
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   116
   def hold
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   117
     pkg(:freeze, @resource[:name])
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   118
   end
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   119
@@ -167,28 +234,28 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   120
     false
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   121
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   122
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   123
-  # 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
   124
-  # 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
   125
-  # 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
   126
   def latest
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   127
-    lines = pkg(:list, "-Hvn", @resource[:name]).split("\n")
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   128
+    # Dry-run package update to check the availability of the latest version
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   129
+    # -- return code --
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   130
+    # 0: latest version available
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   131
+    # 1: error
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   132
+    # 4: already up-to-date
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   133
+    r = exec_cmd(command(:pkg), 'update', '-n', '--parsable=0', @resource[:name]).split('\n')
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   134
+    package_versions = JSON.parse(r[:out])['change-packages']
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   135
 
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   136
     # remove certificate expiration warnings from the output, but report them
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   137
-    cert_warnings = lines.select { |line| line =~ /^Certificate/ }
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   138
+    cert_warnings = r[:out].select { |line| line =~ /^Certificate/ }
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   139
     unless cert_warnings.empty?
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   140
       Puppet.warning("pkg warning: #{cert_warnings.join(', ')}")
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   141
     end
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   142
+    lst = r[:out].select { |line| line !~ /^Certificate/ }.map { |line| self.class.parse_line(line) }
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   143
 
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   144
-    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
   145
-
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   146
-    # 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
   147
-    # 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
   148
-    # 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
   149
-    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
   150
-    return known[:ensure] if known and exec_cmd(command(:pkg), 'update', '-n', @resource[:name])[:exit].zero?
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   151
+    raise Puppet::Error, "Cannot update to the latest package: #{r[:out]}\n" \
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   152
+      unless [0, 4].include? r[:exit]
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   153
 
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   154
-    # 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
   155
-    (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
   156
+    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
   157
+    Puppet.debug "Desirable query status = #{lst}"
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   158
+    return lst[:ensure]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   159
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   160
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   161
   # install the package and accept all licenses.
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   162
@@ -206,7 +273,10 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   163
     unless should.is_a? Symbol
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   164
       name += "@#{should}"
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   165
     end
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   166
-    r = exec_cmd(command(:pkg), command, '--accept', name)
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   167
+
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   168
+    opts = ['--accept']
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   169
+    opts << join_options(@resource[:install_options]) if @resource[:install_options]
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   170
+    r = exec_cmd(command(:pkg), 'install', opts, name)
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   171
     return r if nofail
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   172
     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
   173
   end
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   174
@@ -219,6 +289,7 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   175
     when /052adf36c3f4/
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   176
       cmd << '-r'
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   177
     end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   178
+    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
   179
     cmd << @resource[:name]
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   180
     pkg cmd
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   181
   end
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   182
@@ -231,10 +302,22 @@ Puppet::Type.type(:package).provide :pkg, :parent => Puppet::Provider::Package d
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   183
     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
   184
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   185
 
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   186
+  def wildcard?
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   187
+    @resource[:name].include?("*") || @resource[:name].include?("?")
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
   # list a specific package
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   191
   def query
7565
48aa82a0931f PSARC/2016/607 Puppet 4.7.0, Hiera 3.2.0
Shawn Ferry <shawn.ferry@oracle.com>
parents: 5860
diff changeset
   192
     r = exec_cmd(command(:pkg), 'list', '-Hv', @resource[:name])
5775
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   193
     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
   194
+
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   195
+    # 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
   196
+    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
   197
+    # 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
   198
+    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
   199
+      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
   200
+    end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   201
+    # 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
   202
     self.class.parse_line(r[:out])
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   203
   end
ecbec224a370 21815619 puppet fails to install latest package versions
Sungmin Lee <sungmin.lee@oracle.com>
parents:
diff changeset
   204