docs: def _delete_resource(name, name_param, desc, res_type, wait=0, status_param=None,
                       status_gone='deleted', region=None, key=None, keyid=None, profile=None,
                       **args):
      '''
      Delete a generic Elasticache resource.
      '''
      try:
          wait = int(wait)
      except Exception:
          raise SaltInvocationError("Bad value ('{0}') passed for 'wait' param - must be an "
                                    "int or boolean.".format(wait))
      conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile)
      if name_param in args:
          log.info(
              "'name: %s' param being overridden by explicitly provided '%s: %s'",
              name, name_param, args[name_param]
          )
          name = args[name_param]
      else:
          args[name_param] = name
      args = dict([(k, v) for k, v in args.items() if not k.startswith('_')])
      try:
          func = 'delete_'+res_type
          f = getattr(conn, func)
          if wait:
              func = 'describe_'+res_type+'s'
              s = globals()[func]
      except (AttributeError, KeyError) as e:
          raise SaltInvocationError("No function '{0}()' found: {1}".format(func, e.message))
      try:
  
          f(**args)
          if not wait:
              log.info('%s %s deletion requested.', desc.title(), name)
              return True
          log.info('Waiting up to %s seconds for %s %s to be deleted.', wait, desc, name)
          orig_wait = wait
          while wait > 0:
              r = s(name=name, conn=conn)
              if not r or r[0].get(status_param) == status_gone:
                  log.info('%s %s deleted.', desc.title(), name)
                  return True
              sleep = wait if wait % 60 == wait else 60
              log.info('Sleeping %s seconds for %s %s to be deleted.',
                       sleep, desc, name)
              time.sleep(sleep)
              wait -= sleep
          log.error('%s %s not deleted after %s seconds!', desc.title(), name, orig_wait)
  
          return False
      except botocore.exceptions.ClientError as e:
          log.error('Failed to delete %s %s: %s', desc, name, e)
          return False