============================== 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 - developer Other contributors: - Oleksandr Martsyniuk - feature lead, developer - Kostiantyn Kalynovskyi - developer Project manager: - Andrian Noga Quality assurance: - Vitaliy Yerys - qa - Oleksandr Kosse - 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/