def METHOD_NAME():
    module = AnsibleModule(
        argument_spec=dict(
            image=dict(type='path', required=True, aliases=['path', 'src']),
            dest=dict(type='path', required=True),
            files=dict(type='list', elements='str', required=True),
            force=dict(type='bool', default=True),
            executable=dict(type='path'),  # No default on purpose
        ),
        supports_check_mode=True,
    )
    image = module.params['image']
    dest = module.params['dest']
    files = module.params['files']
    force = module.params['force']
    executable = module.params['executable']
    result = dict(
        changed=False,
        dest=dest,
        image=image,
    )
    # We want to know if the user provided it or not, so we set default here
    if executable is None:
        executable = '7z'
    binary = module.get_bin_path(executable, None)
    # When executable was provided and binary not found, warn user !
    if module.params['executable'] is not None and not binary:
        module.warn("Executable '%s' is not found on the system, trying to mount ISO instead." % executable)
    if not os.path.exists(dest):
        module.fail_json(msg="Directory '%s' does not exist" % dest)
    if not os.path.exists(os.path.dirname(image)):
        module.fail_json(msg="ISO image '%s' does not exist" % image)
    result['files'] = []
    extract_files = list(files)
    if not force:
        # Check if we have to process any files based on existence
        for f in files:
            dest_file = os.path.join(dest, os.path.basename(f))
            if os.path.exists(dest_file):
                result['files'].append(dict(
                    checksum=None,
                    dest=dest_file,
                    src=f,
                ))
                extract_files.remove(f)
    if not extract_files:
        module.exit_json(**result)
    tmp_dir = tempfile.mkdtemp()
    # Use 7zip when we have a binary, otherwise try to mount
    if binary:
        cmd = [binary, 'x', image, '-o%s' % tmp_dir] + extract_files
    else:
        cmd = [module.get_bin_path('mount'), '-o', 'loop,ro', image, tmp_dir]
    rc, out, err = module.run_command(cmd)
    if rc != 0:
        result.update(dict(
            cmd=cmd,
            rc=rc,
            stderr=err,
            stdout=out,
        ))
        shutil.rmtree(tmp_dir)
        if binary:
            module.fail_json(msg="Failed to extract from ISO image '%s' to '%s'" % (image, tmp_dir), **result)
        else:
            module.fail_json(msg="Failed to mount ISO image '%s' to '%s', and we could not find executable '%s'." % (image, tmp_dir, executable), **result)
    try:
        for f in extract_files:
            tmp_src = os.path.join(tmp_dir, f)
            if not os.path.exists(tmp_src):
                module.fail_json(msg="Failed to extract '%s' from ISO image" % f, **result)
            src_checksum = module.sha1(tmp_src)
            dest_file = os.path.join(dest, os.path.basename(f))
            if os.path.exists(dest_file):
                dest_checksum = module.sha1(dest_file)
            else:
                dest_checksum = None
            result['files'].append(dict(
                checksum=src_checksum,
                dest=dest_file,
                src=f,
            ))
            if src_checksum != dest_checksum:
                if not module.check_mode:
                    shutil.copy(tmp_src, dest_file)
                result['changed'] = True
    finally:
        if not binary:
            module.run_command([module.get_bin_path('umount'), tmp_dir])
        shutil.rmtree(tmp_dir)
    module.exit_json(**result)