计划备份¶
Trove 目前没有计划实例备份的方式。本文档建议通过利用 Mistral 工作流来实现计划备份。
Launchpad 蓝图:https://blueprints.launchpad.net/trove/+spec/scheduled-backup
问题描述¶
Trove 不支持计划备份。
提议的变更¶
将通过利用 Mistral 工作流来支持计划备份 1。Trove python API 将被扩展,以提供一个以 Trove 为中心的 Mistral 工作流接口。
一个 Trove 工作簿将被加载到 Mistral 中,以支持通过计划调用 trove.backup_create python API。将添加 Trove python API 方法以支持计划备份以及列出计划备份及其执行。使用这些 Trove 命令,用户将能够管理备份计划(创建/删除/列出等)并查看所述计划的执行情况。然而,就像 Nova flavors 一样,Trove 本身不会实际执行任何命令,只是将它们传递给 Mistral。任何发生的错误都将在查看执行情况时可见,但将仅限于 Mistral 暴露的内容。
所有更改都将在 python-troveclient 模块中进行,工作簿除外。如果启用了 Mistral,它将可在 Trove 仓库中提供,以便(可能)被 devstack 插件加载。
请参阅 附录 以获取 Trove 工作簿示例。
配置¶
没有配置更改。
数据库¶
没有数据库更改。
公共 API¶
没有 REST API 更改。
公共 API 安全¶
没有安全影响。
Python API¶
注意:引用的“cron 模式”是标准的 cron 表达式。2
def schedule_create(self, instance, pattern, name,
description=None, parent_id=None,
mistral_client=None):
"""Create a new schedule to backup the given instance.
:param instance: instance to backup.
:param pattern: cron pattern for schedule.
:param name: name for backup.
:param description: (optional).
:param parent_id: base for incremental backup (optional).
:returns: :class:`Backups`
"""
def schedule_list(self, instance, mistral_client=None):
"""Get a list of all backup schedules for an instance.
:param: instance for which to list schedules.
:rtype: list of :class:`Schedule`.
"""
def schedule_show(self, schedule, mistral_client=None):
"""Get details of a backup schedule.
:param: schedule to show.
:rtype: :class:`Schedule`.
"""
def schedule_delete(self, schedule, mistral_client=None):
"""Remove a given backup schedule.
:param schedule: schedule to delete.
"""
def execution_list(self, schedule, mistral_client=None,
marker='', limit=None):
"""Get a list of all executions of a scheduled backup.
:param: schedule for which to list executions.
:rtype: list of :class:`ScheduleExecution`.
"""
def execution_delete(self, execution, mistral_client=None):
"""Remove a given schedule execution.
:param execution: id of execution to remove.
"""
CLI (python-troveclient)¶
加载 Trove 工作簿¶
$ mistral workbook-create ~/mwj/mistral/trove.yaml
创建计划¶
$ trove schedule-create m "*/2 * * * *" myback
+---------------------+----------------------------------------------------------------------------------------------------------------+
| Property | Value |
+---------------------+----------------------------------------------------------------------------------------------------------------+
| created_at | 2016-06-14 14:47:16.865731 |
| id | fb149a29-be9b-49c1-a2f7-ca6c1213896f |
| input | {"instance": "5328f62a-d999-4be3-90bb-83cc6af4469c", "description": null, "parent_id": null, "name": "myback"} |
| instance | 5328f62a-d999-4be3-90bb-83cc6af4469c |
| name | myback |
| next_execution_time | 2016-06-14 07:48:00 |
| parent_id | None |
| pattern | */2 * * * * |
+---------------------+----------------------------------------------------------------------------------------------------------------+
列出计划¶
$ trove schedule-list m
+--------------------------------------+--------+-------------+---------------------+
| ID | Name | Pattern | Next Execution Time |
+--------------------------------------+--------+-------------+---------------------+
| fb149a29-be9b-49c1-a2f7-ca6c1213896f | myback | */2 * * * * | 2016-06-14 07:50:00 |
+--------------------------------------+--------+-------------+---------------------+
显示计划¶
trove schedule-show fb149a29-be9b-49c1-a2f7-ca6c1213896f
+---------------------+----------------------------------------------------------------------------------------------------------------+
| Property | Value |
+---------------------+----------------------------------------------------------------------------------------------------------------+
| created_at | 2016-06-14 14:47:16 |
| id | fb149a29-be9b-49c1-a2f7-ca6c1213896f |
| input | {"instance": "5328f62a-d999-4be3-90bb-83cc6af4469c", "description": null, "parent_id": null, "name": "myback"} |
| instance | 5328f62a-d999-4be3-90bb-83cc6af4469c |
| name | myback |
| next_execution_time | 2016-06-14 07:52:00 |
| parent_id | None |
| pattern | */2 * * * * |
| updated_at | 2016-06-14 14:49:59 |
+---------------------+----------------------------------------------------------------------------------------------------------------+
删除计划¶
$ trove schedule-delete fb149a29-be9b-49c1-a2f7-ca6c1213896f
列出执行¶
trove execution-list fb149a29-be9b-49c1-a2f7-ca6c1213896f
+--------------------------------------+---------------------+---------+-------------------------------+
| ID | Execution Time | State | Output |
+--------------------------------------+---------------------+---------+-------------------------------+
| 38ef2289-4330-4554-8574-4b5351f69713 | 2016-06-14 14:49:59 | SUCCESS | {"status": "Backup complete"} |
| 3713355a-b65e-44e0-ac43-150b863a6e6e | 2016-06-14 14:51:59 | SUCCESS | {"status": "Backup complete"} |
+--------------------------------------+---------------------+---------+-------------------------------+
删除执行¶
$ trove execution-delete 3713355a-b65e-44e0-ac43-150b863a6e6e
内部 API¶
没有内部 API 更改。
Guest Agent¶
没有客户机更改。
备选方案¶
另一种选择是让 Trove 实现自己的调度机制。
Dashboard 影响 (UX)¶
将向实例操作下拉菜单添加一个操作,以显示实例的计划备份。这将导向一系列面板,用于显示计划备份、计划的详细信息以及计划的执行情况。计划备份列表将有一个选项来创建新的计划。列出计划和执行情况的面板将有一个操作来删除相应的资源。
升级影响¶
没有升级影响。
依赖项¶
n/a
测试¶
如果我们在场景测试中添加支持(通过 python API),这意味着我们需要安装 Mistral。因此,不会创建任何场景测试。
文档影响¶
需要记录新的 python API 方法和 CLI 命令。
参考资料¶
附录¶
这是 Mistral 的 Trove 工作簿的样子
---
version: '2.0'
name: trove
description: Trove Workflows
workflows:
backup_create:
input: [instance, name, description, parent_id]
output:
status: <% $.message %>
tasks:
backup_create:
action: trove.backups_create instance=<% $.instance %> name=<% $.name %> description=<% $.description %> parent_id=<% $.parent_id %>
publish:
message: <% 'Backup complete' %>