usr/src/lib/install_ict/cleanup_cpio_install.py
changeset 1381 6a009cae3466
parent 1380 2f3830b79568
equal deleted inserted replaced
1380:2f3830b79568 1381:6a009cae3466
    28 import shutil
    28 import shutil
    29 import sys
    29 import sys
    30 
    30 
    31 import pkg.client.api as api
    31 import pkg.client.api as api
    32 import pkg.client.api_errors as api_errors
    32 import pkg.client.api_errors as api_errors
    33 import pkg.client.progress as progress
       
    34 import solaris_install.ict as ICT
    33 import solaris_install.ict as ICT
    35 
    34 
    36 from stat import S_IREAD, S_IRGRP, S_IROTH
    35 from stat import S_IREAD, S_IRGRP, S_IROTH
    37 
    36 
    38 from solaris_install import PKG5_API_VERSION
    37 from solaris_install import PKG5_API_VERSION
    39 from solaris_install.data_object import ObjectNotFoundError
    38 from solaris_install.data_object import ObjectNotFoundError
    40 from solaris_install.transfer.info import Args
    39 from solaris_install.transfer.info import Args
    41 from solaris_install.transfer.info import CPIOSpec
    40 from solaris_install.transfer.info import CPIOSpec
    42 from solaris_install.transfer.info import IPSSpec
    41 from solaris_install.transfer.info import IPSSpec
    43 from solaris_install.transfer.ips import RedirectIPSTrans
    42 from solaris_install.transfer.ips import InstallCLIProgressTracker
    44 from solaris_install.transfer.info import Software
    43 from solaris_install.transfer.info import Software
    45 
    44 
    46 
    45 
    47 class CleanupCPIOInstall(ICT.ICTBaseClass):
    46 class CleanupCPIOInstall(ICT.ICTBaseClass):
    48     '''
    47     '''
   205 
   204 
   206         if not dry_run:
   205         if not dry_run:
   207             try:
   206             try:
   208                 api_inst = api.ImageInterface(self.target_dir,
   207                 api_inst = api.ImageInterface(self.target_dir,
   209                                PKG5_API_VERSION,
   208                                PKG5_API_VERSION,
   210                                progress.CommandLineProgressTracker(),
   209                                InstallCLIProgressTracker(self.logger),
   211                                None,
   210                                None,
   212                                ICT.PKG_CLIENT_NAME)
   211                                ICT.PKG_CLIENT_NAME)
   213 
   212 
   214             except api_errors.VersionException, ips_err:
   213             except api_errors.VersionException, ips_err:
   215                 raise ValueError("The IPS API version specified, "
   214                 raise ValueError("The IPS API version specified, "
   276                             pkg_rm_node.contents, **pkg_args.arg_dict)
   275                             pkg_rm_node.contents, **pkg_args.arg_dict)
   277                     else:
   276                     else:
   278                         pkg_rval = api_inst.plan_uninstall(
   277                         pkg_rval = api_inst.plan_uninstall(
   279                             pkg_rm_node.contents)
   278                             pkg_rm_node.contents)
   280 
   279 
   281                 # Redirect stdout and stderr from the pkg image in order
       
   282                 # to capture the command line output from the pkg
       
   283                 # progress tracker into the transfer logs.
       
   284                 if pkg_rval:
   280                 if pkg_rval:
   285                     tmp_stdout = sys.stdout
       
   286                     tmp_stderr = sys.stderr
       
   287                     sys.stdout = sys.stderr = RedirectIPSTrans(self.logger)
       
   288 
       
   289                     api_inst.prepare()
   281                     api_inst.prepare()
   290                     api_inst.execute_plan()
   282                     api_inst.execute_plan()
   291                     api_inst.reset()
   283                     api_inst.reset()
   292 
       
   293                     # Release stdout and stderr
       
   294                     sys.stdout = tmp_stdout
       
   295                     sys.stderr = tmp_stderr
       
   296                 else:
   284                 else:
   297                     self.logger.debug('Unable to uninstall install specific '
   285                     self.logger.debug('Unable to uninstall install specific '
   298                                       'packages')
   286                                       'packages')
   299 
   287 
   300         # Reset the pkg(1) image UUID to the preferred publisher
   288         # Reset the pkg(1) image UUID to the preferred publisher