244 lines
4.5 KiB
ReStructuredText
244 lines
4.5 KiB
ReStructuredText
==============================
|
||
Sample Mistral backup workflow
|
||
==============================
|
||
|
||
The workflow can be imported to Mistral to perform backups in an automated way.
|
||
|
||
Problem description
|
||
===================
|
||
|
||
Any backup strategy requires taking backups on regular basis
|
||
and it's good to have these repeatable actions automated.
|
||
|
||
Taking a drive backup is often considered as a single action but
|
||
usually requires taking a snapshot, taking a backup of the snapshot and
|
||
then deleting the snapshot. So taking a drive backup is actually a workflow.
|
||
|
||
Mistral is a workflow service for OpenStack cloud.
|
||
|
||
Creating a workflow for Mistral requires some practice and
|
||
working workflow example should make it easier to start using Mistral
|
||
for the backup process automation.
|
||
|
||
Proposed changes
|
||
================
|
||
|
||
Provide an example of Mistral workflow for creating backups.
|
||
|
||
The sample is written in Mistral DSL v2.
|
||
|
||
The workflow accepts the following input parameters:
|
||
|
||
- project_id_list - list of project identifiers.
|
||
Backup of all volumes of projects from project_id_list
|
||
will be taken if not provided.
|
||
Mutually exclusive with volume_id_list.
|
||
Optional.
|
||
- volume_id_list - list of volume identifiers.
|
||
Backup of volumes from volume_id_list will be taken.
|
||
Mutually exclusive with project_id_list.
|
||
Optional.
|
||
- is_incremental - create an incremental backup or full.
|
||
Default is false.
|
||
Optional.
|
||
- report_to - list of e-mail addresses to send reports to
|
||
Reports are not e-mailed if not provided.
|
||
Optional.
|
||
|
||
If neither project_id_list nor volume_id_list are provided then
|
||
backup of all volumes of all projects will be taken.
|
||
If both project_id_list and volume_id_list are provided
|
||
the workflow does not take backups.
|
||
|
||
create_backups workflow tasks:
|
||
|
||
- analyze_input
|
||
|
||
- chooses the task to execute next accordingly to input
|
||
- if neither project_id_list nor volume_id_list are provided
|
||
then run get_all_projects_volumes_list
|
||
- if project_id_list is provided but volume_id_list is not
|
||
then run get_volumes_list
|
||
- if volume_id_list is provided but project_id_list is not
|
||
then run create_snapshots task
|
||
- if project_id_list are volume_id_list are provided
|
||
then report error
|
||
|
||
- get_all_projects_volumes_list
|
||
|
||
- provides list of volumes to backup
|
||
- runs create_snapshots task
|
||
|
||
- get_volumes_list
|
||
|
||
- provides list of volumes to backup accordingly to project_id_list
|
||
- runs create_snapshots task
|
||
|
||
- create_snapshots
|
||
|
||
- creates snapshots of selected volumes
|
||
- runs create_backups task
|
||
|
||
- create_backups
|
||
|
||
- creates backups using the snapshots
|
||
- runs wait_for_backups_completion task
|
||
|
||
- wait_for_backups_completion
|
||
|
||
- verifies if the backups are in avalilable state
|
||
- runs delete_snapshots task
|
||
|
||
- delete_snapshots
|
||
|
||
- deletes snapshots
|
||
- runs send_report task
|
||
|
||
- send_report
|
||
|
||
- sends report if report_to is provided
|
||
|
||
|
||
Web UI
|
||
------
|
||
|
||
None
|
||
|
||
Nailgun
|
||
-------
|
||
|
||
None
|
||
|
||
Data model
|
||
----------
|
||
|
||
None
|
||
|
||
REST API
|
||
--------
|
||
|
||
None
|
||
|
||
Orchestration
|
||
-------------
|
||
|
||
None
|
||
|
||
Fuel Client
|
||
-----------
|
||
|
||
None
|
||
|
||
Fuel Library
|
||
------------
|
||
|
||
None
|
||
|
||
Limitations
|
||
-----------
|
||
|
||
None
|
||
|
||
Alternatives
|
||
============
|
||
|
||
A set of separate OpenStack API calls can be invoked by a self written script.
|
||
|
||
Upgrade impact
|
||
==============
|
||
|
||
None
|
||
|
||
Security impact
|
||
===============
|
||
|
||
None
|
||
|
||
Notifications impact
|
||
====================
|
||
|
||
None
|
||
|
||
End user impact
|
||
===============
|
||
|
||
None
|
||
|
||
Performance impact
|
||
==================
|
||
|
||
None
|
||
|
||
Deployment impact
|
||
=================
|
||
|
||
None
|
||
|
||
Developer impact
|
||
================
|
||
None
|
||
|
||
Infrastructure impact
|
||
=====================
|
||
|
||
None
|
||
|
||
Documentation impact
|
||
====================
|
||
|
||
None
|
||
|
||
Implementation
|
||
==============
|
||
|
||
Assignee(s)
|
||
-----------
|
||
|
||
Primary assignee:
|
||
|
||
- Taras Kostyuk <tkostyuk@mirantis.com> - developer
|
||
|
||
Other contributors:
|
||
|
||
- Oleksandr Martsyniuk <omartsyniuk@mirantis.com> - feature lead, developer
|
||
- Kostiantyn Kalynovskyi <kkalynovskyi@mirantis.com> - developer
|
||
|
||
Project manager:
|
||
|
||
- Andrian Noga <anoga@mirantis.com>
|
||
|
||
Quality assurance:
|
||
|
||
- Vitaliy Yerys <vyerys@mirantis.com> - qa
|
||
- Oleksandr Kosse <okosse@mirantis.com> - qa
|
||
|
||
Work Items
|
||
----------
|
||
|
||
* Prepare development environment
|
||
* Create Mistral workflow
|
||
* Test the workflow
|
||
|
||
Dependencies
|
||
============
|
||
|
||
* Mistral >= 2.0
|
||
|
||
Testing
|
||
=======
|
||
|
||
TODO
|
||
|
||
Acceptance criterias
|
||
--------------------
|
||
|
||
* The workflow can be imported to Mistral
|
||
* Backups can be created by Mistral
|
||
* A report e-mail is received
|
||
|
||
References
|
||
==========
|
||
|
||
* Mistral’s documentation http://docs.openstack.org/developer/mistral/
|
||
* YAQL’s documentation https://yaql.readthedocs.io/en/latest/
|