7125955 install_transfer/ips module should log more info about the packages being installed into the image
authorGeoffrey Hart <geoffrey.hart@oracle.com>
Thu, 07 Jun 2012 16:54:19 -0600
changeset 1706 bfbbe94a121d
parent 1703 4b4182b9a404
child 1707 d79d8938eb54
7125955 install_transfer/ips module should log more info about the packages being installed into the image
usr/src/lib/install_transfer/ips.py
--- a/usr/src/lib/install_transfer/ips.py	Wed Jun 06 11:03:59 2012 +0200
+++ b/usr/src/lib/install_transfer/ips.py	Thu Jun 07 16:54:19 2012 -0600
@@ -39,6 +39,7 @@
 import pkg.client.publisher as publisher
 import pkg.misc as misc
 
+from pkg.fmri import PkgFmri
 from pkg.client import global_settings
 from pkg.client.api import IMG_TYPE_ENTIRE, IMG_TYPE_PARTIAL
 from solaris_install import PKG5_API_VERSION
@@ -87,6 +88,7 @@
         self._act_started = False
         self._ind_started = False
         self._item_started = False
+        self._package_dict = {}
 
     def _logger_output(self, message):
         if self.show_stdout:
@@ -112,7 +114,12 @@
             self._dl_started = True
 
         if self._dl_cur_pkg != self.cur_pkg:
-            self._logger_output("Download: %s ..." % self.cur_pkg)
+            if (self.cur_pkg in self._package_dict):
+                fmri = self._package_dict[self.cur_pkg]
+                self._logger_output("Download: %s ...", fmri.get_fmri())
+            else:
+                # only hits this at end when the cur_pkg becomes empty str
+                self._logger_output("Download: %s ..." % self.cur_pkg)
             self._dl_cur_pkg = self.cur_pkg
 
     def dl_output_done(self):
@@ -147,6 +154,9 @@
         self._logger_output("%s ... Done." % self.item_phase)
         self._item_started = False
 
+    def set_package_dict(self, package_dict):
+        self._package_dict = package_dict
+
 
 class InstallFancyProgressTracker(progress.FancyUNIXProgressTracker):
     ''' Subclass of the IPS api's FancyUNIXProgressTracker; we leverage
@@ -168,6 +178,7 @@
         self._act_started = False
         self._ind_started = False
         self._item_started = False
+        self._package_dict = {}
 
     def eval_output_start(self):
         super(InstallFancyProgressTracker, self).eval_output_start()
@@ -192,7 +203,12 @@
             self._dl_started = True
 
         if self._dl_cur_pkg != self.cur_pkg:
-            self.trans_logger.debug("Download: %s ..." % self.cur_pkg)
+            if (self.cur_pkg in self._package_dict):
+                fmri = self._package_dict[self.cur_pkg]
+                self.trans_logger.debug("Download: %s ...", fmri.get_fmri())
+            else:
+                # only hits this at end when the cur_pkg becomes empty str
+                self.trans_logger.debug("Download: %s ..." % self.cur_pkg)
             self._dl_cur_pkg = self.cur_pkg
 
     def dl_output_done(self):
@@ -234,6 +250,9 @@
         self.trans_logger.debug("%s ... Done." % self.item_phase)
         self._item_started = False
 
+    def set_package_dict(self, package_dict):
+        self._package_dict = package_dict
+
 
 class AbstractIPS(Checkpoint):
     '''Subclass for transfer IPS checkpoint'''
@@ -316,6 +335,9 @@
         self._add_mirror = []
         self._image_args = {}
 
+        # list for holding package plans (publisher, package, version)
+        self._package_dict = {}
+
         # publisher list to hold a reference between publishers and
         # origins/mirrors
         self.publisher_list = list()
@@ -727,6 +749,15 @@
                                 "using the command:")
                             self.logger.info("  pkg info --license <pkg_fmri>")
 
+                        # building up a collection of packages so we have
+                        # the publisher and version info for each package
+                        package_dict = {}
+                        plan = self.api_inst.describe().get_changes()
+                        for pkg_plan in plan:
+                            fmri = PkgFmri(pkg_plan[1].__str__())
+                            package_dict[fmri.get_name()] = fmri
+                        self.prog_tracker.set_package_dict(package_dict)
+
                         # Execute the transfer action
                         self.api_inst.prepare()
                         self.api_inst.execute_plan()