任务

概念概述

图像文件可能非常大,并且处理图像(例如将图像从一种格式转换为另一种格式)可能需要大量的资源。此外,对于图像处理采用一刀切的方法并非理想。公共云与例如学术部门运行的小型私有云的安全问题截然不同,在学术部门的云中,所有用户都彼此了解和信任。因此,公共云部署者可能希望对用户想要导入云的图像运行各种验证检查,而部门云部署者可能认为这种处理是浪费资源。

为了解决这种情况,Glance 包含任务。任务旨在为最终用户提供一个长期运行的异步操作的前端——您启动的操作,并且不希望在您去咖啡馆、与咖啡师愉快地聊天、喝咖啡、愉快地回家散步等之后才能完成的操作。任务的异步性质在最前面被强调,以便设定最终用户对任务可能需要多长时间的期望(提示:比其他 Glance 操作更长)。通过任务执行的一组操作允许部署者灵活地控制同时处理多少操作,进而灵活地控制需要为任务处理预留的资源类型。因此,虽然大型云部署者肯定对任务感兴趣,因为它们可以实现替代的自定义图像处理工作流程,但较小的部署者发现它们对于控制资源利用率很有用。

将任务引入 Glance 的另一个原因是支持 Glance 在 OpenStack 生态系统中的作用。Glance 提供虚拟机镜像的编目、存储和交付。因此,它需要对其他 OpenStack 组件做出响应。例如,Nova 为了启动实例会从 Glance 请求镜像;它将镜像上传到 Glance 作为 Nova image-create 操作工作流程的一部分;并且它使用 Glance 来提供 Compute API 中定义的与镜像相关的 API 调用,Nova 实例化这些调用。为了 OpenStack 云的正常运行,这些同步操作不能受到图像导入等非必要功能引起的过载影响。

通过在 Images API 中将任务资源与镜像资源分离,部署者可以更轻松地分配资源并将任务请求与支持 Glance 服务角色所需的资源分开路由。同时,这种分离避免了 OpenStack 云用户的混淆。对 /v2/images 的请求的响应应该很快返回,而对 /v2/tasks 的请求可能需要一段时间。

简而言之,任务为 OpenStack 安装中的用户提供了一个通用的 API,用于请求与镜像相关的操作,但同时任务也可以为各个云提供商进行定制。

概念细节

Glance 任务是对异步镜像相关操作的请求。该请求会创建一个任务资源,可以轮询该资源以获取有关操作状态的信息。

出于多种原因,此处需要一种与传统的 Glance 镜像资源不同的特定类型的资源

  • 可以独立于传统的 Glance 镜像资源(在结构和工作流程方面)开发一个专用的任务资源。

  • 可能存在多个任务(例如,镜像导出或镜像转换)同时对一个镜像进行操作。

  • 一个专用的任务资源允许向最终用户提供清晰、详细的错误消息,这些错误消息特定于该操作。

  • 一个专用的任务资源遵循最小惊讶原则。例如,导入任务在清楚提交的比特通过部署者对允许的镜像的测试后才会在 Glance 中创建镜像。

达到最终状态(successerror)后,任务资源将被分配一个到期日期时间,该日期时间将显示在 expires_at 字段中。(最终状态与到期时间之间的间隔是可配置的。)过了该日期时间,任务资源可能会被删除。任务的结果(例如,导入的镜像)仍然存在。

有关定义的任务状态的详细信息,请参阅 任务状态

任务最终会过期,因为没有理由保留它们,因为用户将拥有任务的结果,而创建任务的目的是获得这个结果。任务不会立即删除的原因是任务资源中可能包含不易在其他地方获取的信息。(例如,成功的导入任务最终将导致在 Glance 中创建镜像,并且知道此镜像的 UUID 会很有用。同样,如果导入任务失败,我们希望给最终用户时间来读取任务资源以分析错误消息。)

任务实体

任务实体由在 /v2/schemas/task 可用的 JSON 模式定义的 JSON 编码数据结构表示。

任务实体具有一个标识符(id),该标识符保证在其所属的端点内是唯一的。该 id 用作请求 URI 中的令牌,以与该特定任务进行交互。

除了您期望的常规属性(例如,created_atselftypestatusupdated_at 等)之外,任务还具有以下感兴趣的属性

  • input:定义为 JSON blob,其确切内容将取决于特定云部署者的要求。意图是每个部署者都将为最终用户记录这些要求。

  • result:这也定义为 JSON blob,其内容将由每个云部署者记录。在任务达到最终状态之前,result 元素将为 null,如果最终状态为 failure,则结果元素仍然为 null。

  • message:预计此字符串字段在任务进入 failure 状态之前为 null。此时,它包含有关任务失败原因的 informative 人类可读消息。