<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def pull(self, action, image_name, **kwargs):
 """ Pulls an image for a container configuration :param action: Action configuration. :type action: dockermap.map.runner.ActionConfig :param image_name: Image name. :type image_name: unicode | str :param kwargs: Additional keyword arguments to complement or override the configuration-based values. :type kwargs: dict """

        config_id = action.config_id
        registry, __, image = config_id.config_name.rpartition('/')
        if registry and '.' in registry and registry not in self._login_registries:
            self.login(action, registry, insecure_registry=kwargs.get('insecure_registry'))
        log.info("Pulling image %s:%s.", config_id.config_name, config_id.instance_name)
        res = action.client.pull(repository=config_id.config_name, tag=config_id.instance_name, **kwargs)
        log.debug("Done pulling image %s:%s.", config_id.config_name, config_id.instance_name)
        self._policy.images[action.client_name].refresh_repo(config_id.config_name)
        log.debug("Refreshed image cache for repo %s.", config_id.config_name)
        return res