def _uninstall(action='remove', name=None, version=None, pkgs=None, normalize=True, ignore_epoch=False, **kwargs):
 if (action not in ('remove', 'purge')):
  return {'name': name, 'changes': {}, 'result': False, 'comment': "Invalid action '{0}'. This is probably a bug.".format(action)}
 try:
  pkg_params = __salt__['pkg_resource.parse_targets'](name, pkgs, normalize=normalize)[0]
 except MinionError as exc:
  return {'name': name, 'changes': {}, 'result': False, 'comment': 'An error was encountered while parsing targets: {0}'.format(exc)}
 targets = _find_remove_targets(name, version, pkgs, normalize, ignore_epoch=ignore_epoch, **kwargs)
 if (isinstance(targets, dict) and ('result' in targets)):
  return targets
 elif (not isinstance(targets, list)):
  return {'name': name, 'changes': {}, 'result': False, 'comment': 'An error was encountered while checking targets: {0}'.format(targets)}
 if (action == 'purge'):
  old_removed = __salt__['pkg.list_pkgs'](versions_as_list=True, removed=True, **kwargs)
  targets.extend([x for x in pkg_params if (x in old_removed)])
 targets.sort()
 if (not targets):
  return {'name': name, 'changes': {}, 'result': True, 'comment': 'None of the targeted packages are installed{0}'.format((' or partially installed' if (action == 'purge') else ''))}
 if __opts__['test']:
  return {'name': name, 'changes': {}, 'result': None, 'comment': 'The following packages will be {0}d: {1}.'.format(action, ', '.join(targets))}
 changes = __salt__['pkg.{0}'.format(action)](name, pkgs=pkgs, version=version, **kwargs)
 new = __salt__['pkg.list_pkgs'](versions_as_list=True, **kwargs)
 failed = [x for x in pkg_params if (x in new)]
 if (action == 'purge'):
  new_removed = __salt__['pkg.list_pkgs'](versions_as_list=True, removed=True, **kwargs)
  failed.extend([x for x in pkg_params if (x in new_removed)])
 failed.sort()
 if failed:
  return {'name': name, 'changes': changes, 'result': False, 'comment': 'The following packages failed to {0}: {1}.'.format(action, ', '.join(failed))}
 comments = []
 not_installed = sorted([x for x in pkg_params if (x not in targets)])
 if not_installed:
  comments.append('The following packages were not installed: {0}'.format(', '.join(not_installed)))
  comments.append('The following packages were {0}d: {1}.'.format(action, ', '.join(targets)))
 else:
  comments.append('All targeted packages were {0}d.'.format(action))
 return {'name': name, 'changes': changes, 'result': True, 'comment': ' '.join(comments)}

def _uninstall ( action = 'remove' , name = None , version = None , pkgs = None , normalize = True , ignore_epoch = False , ** kwargs ) : if ( action not in ( 'remove' , 'purge' ) ) : return { 'name' : name , 'changes' : { } , 'result' : False , 'comment' : "Invalid action '{0}'. This is probably a bug." . format ( action ) } try : pkg_params = __salt__ [ 'pkg_resource.parse_targets' ] ( name , pkgs , normalize = normalize ) [ 0 ] except MinionError as exc : return { 'name' : name , 'changes' : { } , 'result' : False , 'comment' : 'An error was encountered while parsing targets: {0}' . format ( exc ) } targets = _find_remove_targets ( name , version , pkgs , normalize , ignore_epoch = ignore_epoch , ** kwargs ) if ( isinstance ( targets , dict ) and ( 'result' in targets ) ) : return targets elif ( not isinstance ( targets , list ) ) : return { 'name' : name , 'changes' : { } , 'result' : False , 'comment' : 'An error was encountered while checking targets: {0}' . format ( targets ) } if ( action == 'purge' ) : old_removed = __salt__ [ 'pkg.list_pkgs' ] ( versions_as_list = True , removed = True , ** kwargs ) targets . extend ( [ x for x in pkg_params if ( x in old_removed ) ] ) targets . sort ( ) if ( not targets ) : return { 'name' : name , 'changes' : { } , 'result' : True , 'comment' : 'None of the targeted packages are installed{0}' . format ( ( ' or partially installed' if ( action == 'purge' ) else '' ) ) } if __opts__ [ 'test' ] : return { 'name' : name , 'changes' : { } , 'result' : None , 'comment' : 'The following packages will be {0}d: {1}.' . format ( action , ', ' . join ( targets ) ) } changes = __salt__ [ 'pkg.{0}' . format ( action ) ] ( name , pkgs = pkgs , version = version , ** kwargs ) new = __salt__ [ 'pkg.list_pkgs' ] ( versions_as_list = True , ** kwargs ) failed = [ x for x in pkg_params if ( x in new ) ] if ( action == 'purge' ) : new_removed = __salt__ [ 'pkg.list_pkgs' ] ( versions_as_list = True , removed = True , ** kwargs ) failed . extend ( [ x for x in pkg_params if ( x in new_removed ) ] ) failed . sort ( ) if failed : return { 'name' : name , 'changes' : changes , 'result' : False , 'comment' : 'The following packages failed to {0}: {1}.' . format ( action , ', ' . join ( failed ) ) } comments = [ ] not_installed = sorted ( [ x for x in pkg_params if ( x not in targets ) ] ) if not_installed : comments . append ( 'The following packages were not installed: {0}' . format ( ', ' . join ( not_installed ) ) ) comments . append ( 'The following packages were {0}d: {1}.' . format ( action , ', ' . join ( targets ) ) ) else : comments . append ( 'All targeted packages were {0}d.' . format ( action ) ) return { 'name' : name , 'changes' : changes , 'result' : True , 'comment' : ' ' . join ( comments ) }
remove and purge do identical things but with different zypper commands .