[EDP] 允许编辑数据源对象

https://blueprints.launchpad.net/sahara/+spec/edp-edit-data-sources

目前没有办法编辑数据源对象。如果需要更改路径,例如,必须删除数据源并创建一个新的。最常见的用例是用户创建数据源、运行作业,并且由于路径不存在而从作业收到错误的情况。虽然这并非绝对必要,但可编辑的数据源对象在用户需要更正路径或凭据时会提供便利。

问题描述

REST API 或 Conductor 级别没有用于更新数据源对象的 API 方法。

更正数据源的唯一方法是删除现有数据源并创建一个包含更正信息的新的。虽然可以使用相同的名称,但对象 ID 会不同。

如果允许编辑,用户只需要执行一次操作即可进行更正。此外,ID 会被保留,以便引用它的对象将引用更正后的路径。

通常情况下,编辑数据源不应成为引用它的作业执行的问题。一旦作业执行进入“RUNNING”状态,它所引用的数据源对象中的所有信息都已被提取并传递给运行作业的进程。因此,编辑被正在运行或已完成的作业引用的数据源不会导致错误。在重新启动时,作业执行将从数据源中提取当前信息。

只有在数据源对象被“PENDING”状态的作业执行引用时,可能存在一个不允许编辑的小窗口。此时,尚未从数据源对象中提取信息,在此窗口期间的更改将导致作业使用与提交时不同的路径运行。

提议的变更

为数据源对象添加 REST API 中的更新操作。不允许更新被“PENDING”状态的作业执行引用的数据源对象(这可以在验证期间检查)。

未处于 PENDING 状态的作业执行引用的数据源对象可以更改。在现有的蓝图和相关的 CR(在参考部分中列出)中,作业执行使用的 URL 将在作业进入 RUNNING 状态时记录在作业执行中。这意味着对于任何正在运行或已完成的作业执行,即使引用的数据源已被编辑,也可以从作业执行本身获得执行中使用的确切数据源 URL 列表。

允许更新数据源对象中的任何字段,但 ID 除外。应保留对象 ID。

将相应的更新操作添加到 python-saharaclient。

替代方案

无需操作

数据模型影响

REST API 影响

将保持向后兼容性,因为这是一个新的端点。

PUT /v1.1/{tenant_id}/data-sources/{data_source_id}

正常响应代码:202 (ACCEPTED)

错误:400 (BAD REQUEST), 404 (NOT FOUND)

更新指定的数据源对象

示例

请求

PUT http://sahara/v1.1/{tenant_id}/data-sources/{data_source_id}
{
    "description": "some description",
    "name": "my_input",
    "url": "swift://container/correct_path"
}

response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
{
    "created_at": "2015-04-08 20:27:13",
    "description": "some_description",
    "id": "7b25fc64-5913-4bc3-aaf4-f82ad03ea2bc",
    "name": "my_input",
    "tenant_id": "33724d3bf3114ae9b8ab1c170e22926f",
    "type": "swift",
    "updated_at": "2015-04-09 10:27:13",
    "url": "swift://container_correct_path"
}

其他最终用户影响

此操作还应添加到 python-saharaclient API 中

$ sahara data-source-update [–name NAME] [–id ID] [–json]

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

为了从 Horizon UI 中利用这一点,我们需要在数据源页面上的每个数据源上选择一个“编辑”操作

实现

负责人

主要负责人

Trevor McKay

其他贡献者

Chad Roberts

工作项

为 Sahara 添加 REST 和支持方法,为 python-saharaclient 添加操作,为 Horizon 中的数据源屏幕添加操作,在 api-ref 中添加到 WADL

依赖项

测试

Sahara 和 python-saharaclient 中的单元测试

文档影响

可能需要更新任何讨论重新启动或编辑其他对象(如模板)的用户文档

参考资料

https://blueprints.launchpad.net/sahara/+spec/edp-datasource-placeholders https://review.openstack.org/#/c/158909/