def METHOD_NAME(name, driver=None, driver_opts=None, force=False):
    """
    Ensure that a volume is present.
    .. versionadded:: 2015.8.4
    .. versionchanged:: 2015.8.6
        This state no longer deletes and re-creates a volume if the existing
        volume's driver does not match the ``driver`` parameter (unless the
        ``force`` parameter is set to ``True``).
    .. versionchanged:: 2017.7.0
        This state was renamed from **docker.volume_present** to **docker_volume.present**
    name
        Name of the volume
    driver
        Type of driver for that volume.  If ``None`` and the volume
        does not yet exist, the volume will be created using Docker's
        default driver.  If ``None`` and the volume does exist, this
        function does nothing, even if the existing volume's driver is
        not the Docker default driver.  (To ensure that an existing
        volume's driver matches the Docker default, you must
        explicitly name Docker's default driver here.)
    driver_opts
        Options for the volume driver
    force : False
        If the volume already exists but the existing volume's driver
        does not match the driver specified by the ``driver``
        parameter, this parameter controls whether the function errors
        out (if ``False``) or deletes and re-creates the volume (if
        ``True``).
        .. versionadded:: 2015.8.6
    Usage Examples:
    .. code-block:: yaml
        volume_foo:
          docker_volume.present
    .. code-block:: yaml
        volume_bar:
          docker_volume.present
            - name: bar
            - driver: local
            - driver_opts:
                foo: bar
    .. code-block:: yaml
        volume_bar:
          docker_volume.present
            - name: bar
            - driver: local
            - driver_opts:
                - foo: bar
                - option: value
    """
    ret = {"name": name, "changes": {}, "result": False, "comment": ""}
    if salt.utils.data.is_dictlist(driver_opts):
        driver_opts = salt.utils.data.repack_dictlist(driver_opts)
    volume = _find_volume(name)
    if not volume:
        if __opts__["test"]:
            ret["result"] = None
            ret["comment"] = "The volume '{}' will be created".format(name)
            return ret
        try:
            ret["changes"]["created"] = __salt__["docker.create_volume"](
                name, driver=driver, driver_opts=driver_opts
            )
        except Exception as exc:  # pylint: disable=broad-except
            ret["comment"] = "Failed to create volume '{}': {}".format(name, exc)
            return ret
        else:
            result = True
            ret["result"] = result
            return ret
    # volume exists, check if driver is the same.
    if driver is not None and volume["Driver"] != driver:
        if not force:
            ret["comment"] = (
                "Driver for existing volume '{}' ('{}')"
                " does not match specified driver ('{}')"
                " and force is False".format(name, volume["Driver"], driver)
            )
            ret["result"] = None if __opts__["test"] else False
            return ret
        if __opts__["test"]:
            ret["result"] = None
            ret["comment"] = (
                "The volume '{}' will be replaced with a"
                " new one using the driver '{}'".format(name, volume)
            )
            return ret
        try:
            ret["changes"]["removed"] = __salt__["docker.remove_volume"](name)
        except Exception as exc:  # pylint: disable=broad-except
            ret["comment"] = "Failed to remove volume '{}': {}".format(name, exc)
            return ret
        else:
            try:
                ret["changes"]["created"] = __salt__["docker.create_volume"](
                    name, driver=driver, driver_opts=driver_opts
                )
            except Exception as exc:  # pylint: disable=broad-except
                ret["comment"] = "Failed to create volume '{}': {}".format(name, exc)
                return ret
            else:
                result = True
                ret["result"] = result
                return ret
    ret["result"] = True
    ret["comment"] = "Volume '{}' already exists.".format(name)
    return ret