Generates keyword arguments for the Docker client to prepare an attached container (i.e. adjust user and
        permissions).

        :param action: Action configuration.
        :type action: dockermap.map.runner.ActionConfig
        :param volume_container: Name of the container that shares the volume.
        :type volume_container: unicode | str
        :param volume_alias: Volume alias that is used for map references, for looking up paths.
        :type volume_alias: unicode | str
        :param kwargs: Additional keyword arguments to complement or override the configuration-based values.
        :type kwargs: dict | NoneType
        :return: Resulting keyword arguments.
        :rtype: dict

def get_attached_preparation_create_kwargs(self, action, volume_container, volume_alias, kwargs=None):
        """
        Generates keyword arguments for the Docker client to prepare an attached container (i.e. adjust user and
        permissions).

        :param action: Action configuration.
        :type action: dockermap.map.runner.ActionConfig
        :param volume_container: Name of the container that shares the volume.
        :type volume_container: unicode | str
        :param volume_alias: Volume alias that is used for map references, for looking up paths.
        :type volume_alias: unicode | str
        :param kwargs: Additional keyword arguments to complement or override the configuration-based values.
        :type kwargs: dict | NoneType
        :return: Resulting keyword arguments.
        :rtype: dict
        """
        client_config = action.client_config
        config_id = action.config_id
        policy = self._policy
        if client_config.features['volumes']:
            path = PREPARATION_TMP_PATH
        else:
            path = resolve_value(policy.default_volume_paths[config_id.map_name][volume_alias])
        user = policy.volume_users[config_id.map_name][volume_alias]
        permissions = policy.volume_permissions[config_id.map_name][volume_alias]
        cmd = ' && '.join(get_preparation_cmd(user, permissions, path))
        if not cmd:
            return None
        c_kwargs = dict(
            image=policy.core_image,
            command=cmd,
            user='root',
            network_disabled=True,
        )
        hc_extra_kwargs = kwargs.pop('host_config', None) if kwargs else None
        use_host_config = client_config.features['host_config']
        if use_host_config:
            if client_config.features['volumes']:
                c_kwargs['volumes'] = [PREPARATION_TMP_PATH]
            hc_kwargs = self.get_attached_preparation_host_config_kwargs(action, None, volume_container,
                                                                         kwargs=hc_extra_kwargs)
            if hc_kwargs:
                if use_host_config == USE_HC_MERGE:
                    c_kwargs.update(hc_kwargs)
                else:
                    c_kwargs['host_config'] = HostConfig(version=client_config.version, **hc_kwargs)
        update_kwargs(c_kwargs, kwargs)
        return c_kwargs