code: async def run_action(self, action_name, **params):
          
          action_facade = client.ActionFacade.from_connection(self.connection)
  
          log.debug('Starting action `%s` on %s', action_name, self.name)
  
          res = await action_facade.Enqueue([client.Action(
              name=action_name,
              parameters=params,
              receiver=self.tag,
          )])
          action = res.results[0].action
          error = res.results[0].error
          if error and error.code == 'not found':
              raise ValueError('Action `%s` not found on %s' % (action_name,
                                                                self.name))
          elif error:
              raise Exception('Unknown action error: %s' % error.serialize())
          action_id = action.tag[len('action-'):]
          log.debug('Action started as %s', action_id)
          # we mustn't use wait_for_action because that blocks until the
          # action is complete, rather than just being in the model
          return await self.model._wait_for_new('action', action_id)
docs: Run an action on this unit.
  
          :param str action_name: Name of action to run
          :param **params: Action parameters
          :returns: A :class:`juju.action.Action` instance.
  
          Note that this only enqueues the action.  You will need to call
          ``action.wait()`` on the resulting `Action` instance if you wish
          to block until the action is complete.