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 |