Retire Karbor

As announced on the openstack-discuss ML[1], Karbor is retiring
this cycle (Wallaby).

This commit retires this repository as per the process defined in
the project-guide[2].

Thank you to all the contributors of Karbor for your hard work!

[1] http://lists.openstack.org/pipermail/openstack-discuss/2020-November/018643.html
[2] https://docs.openstack.org/project-team-guide/repository.html#retiring-a-repository

Depends-On: https://review.opendev.org/c/openstack/project-config/+/767030
Change-Id: I972ffb299f93863c4e34b1f504b002095661e6af
This commit is contained in:
Kendall Nelson 2020-12-14 15:23:07 -08:00
parent fcca3935af
commit 61cb9eddd3
571 changed files with 8 additions and 68922 deletions

View File

@ -1,15 +0,0 @@
If you would like to contribute to the development of OpenStack, you must
follow the steps in this page:
https://docs.openstack.org/infra/manual/developers.html
Once those steps have been completed, changes to OpenStack should be
submitted for review via the Gerrit tool, following the workflow documented at:
https://docs.openstack.org/infra/manual/developers.html#development-workflow
Pull requests submitted through GitHub will be ignored.
Bugs should be filed on Launchpad, not GitHub:
https://bugs.launchpad.net/karbor

View File

@ -1,4 +0,0 @@
karbor Style Commandments
===============================================
Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest/

176
LICENSE
View File

@ -1,176 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

View File

@ -1,81 +1,11 @@
========================
Team and repository tags
========================
This project is no longer maintained.
.. image:: https://governance.openstack.org/tc/badges/karbor.svg
:target: https://governance.openstack.org/tc/reference/tags/index.html
.. Change things from this point on
======
Karbor
======
Application Data Protection as a Service for OpenStack
.. image:: https://raw.githubusercontent.com/openstack/karbor/master/doc/images/mascot/OpenStack_Project_Karbor_vertical.png
:alt: Karbor
:width: 300
:height: 525
:align: center
The contents of this repository are still available in the Git
source code management system. To see the contents of this
repository before it reached its end of life, please check out the
previous commit with "git checkout HEAD^1".
*****************
Mission Statement
*****************
To protect the Data and Metadata that comprises an OpenStack-deployed
Application against loss/damage (e.g. backup, replication) by providing a
standard framework of APIs and services that allows vendors to provide plugins
through a unified interface
Open Architecture
"""""""""""""""""
Design for multiple perspectives:
* User: Protect App Deployment
* Configure and manage custom protection plans on the deployed resources
(topology, VMs, volumes, images, ...)
* Admin: Define Protectable Resources
* Decide what plugins protect which resources, what is available for the user
* Decide where users can protect their resources
* Vendors: Standard API for protection products
* Create plugins that implement Protection mechanisms for different OpenStack
resources
*****
Links
*****
* Free software: Apache license
* Wiki: https://wiki.openstack.org/wiki/Karbor
* Documentation: https://docs.openstack.org/karbor/latest/
* Admin guide: https://docs.openstack.org/karbor/latest/admin/index.html
* Source: https://opendev.org/openstack/karbor
* Bugs: https://storyboard.openstack.org/#!/project/openstack/karbor
* Release notes: https://docs.openstack.org/karbor/latest/releasenotes.html
********
Features
********
Version 0.1
"""""""""""
* Resource API
* Plan API
* Bank API
* Ledger API
* Cross-resource dependencies
Limitations
***********
* Only 1 Bank plugin per Protection Plan
* Automatic object discovery not supported
For any further questions, please email
openstack-discuss@lists.openstack.org or join #openstack-dev on
Freenode.

View File

@ -1,208 +0,0 @@
# -*- coding: utf-8 -*-
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# karbor documentation build configuration file, created by
# sphinx-quickstart on Mon Sep 19 15:17:47 2016.
#
# This file is execfile()d with the current directory set to
# its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import os
import sys
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('../../'))
sys.path.insert(0, os.path.abspath('../'))
sys.path.insert(0, os.path.abspath('./'))
# -- General configuration ----------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = [
'openstackdocstheme',
'os_api_ref'
]
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#
# source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Data Protection API Reference'
copyright = u'OpenStack Foundation'
repository_name = 'openstack/karbor'
bug_project = 'karbor'
bug_tag = 'api-ref'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
# today = ''
# Else, today_fmt is used as the format for a strftime call.
# today_fmt = '%B %d, %Y'
# The reST default role (used for this markup: `text`) to use
# for all documents.
# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
add_module_names = False
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# -- Options for man page output ----------------------------------------------
# Grouping the document tree for man pages.
# List of tuples 'sourcefile', 'target', u'title', u'Authors name', 'manual'
# -- Options for HTML output --------------------------------------------------
# The theme to use for HTML and HTML Help pages. Major themes that come with
# Sphinx are currently 'default' and 'sphinxdoc'.
# html_theme_path = ["."]
# html_theme = '_theme'
html_theme = 'openstackdocs'
html_theme_options = {
"sidebar_mode": "toc",
}
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
# html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
# html_additional_pages = {}
# If false, no module index is generated.
# html_use_modindex = True
# If false, no index is generated.
# html_use_index = True
# If true, the index is split into individual pages for each letter.
# html_split_index = False
# If true, links to the reST sources are added to the pages.
# html_show_sourcelink = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
# html_use_opensearch = ''
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
# html_file_suffix = ''
# Output file base name for HTML help builder.
htmlhelp_basename = 'karbordoc'
# -- Options for LaTeX output -------------------------------------------------
# The paper size ('letter' or 'a4').
# latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
# latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass
# [howto/manual]).
latex_documents = [
('index', 'karbor.tex', u'OpenStack Data Protection API Documentation',
u'OpenStack Foundation', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
# latex_use_parts = False
# Additional stuff for the LaTeX preamble.
# latex_preamble = ''
# Documents to append as an appendix to all manuals.
# latex_appendices = []
# If false, no module index is generated.
# latex_use_modindex = True

View File

@ -1,17 +0,0 @@
===================
Data Protection API
===================
Contents:
.. toctree::
:maxdepth: 1
v1/index
Indices and tables
==================
* :ref:`genindex`
* :ref:`search`

View File

@ -1,17 +0,0 @@
:tocdepth: 2
======================
Data Protection API V1
======================
.. rest_expand_all::
.. include:: karbor-v1-protectables.inc
.. include:: karbor-v1-providers.inc
.. include:: karbor-v1-plans.inc
.. include:: karbor-v1-triggers.inc
.. include:: karbor-v1-scheduled-operations.inc
.. include:: karbor-v1-checkpoints.inc
.. include:: karbor-v1-restores.inc
.. include:: karbor-v1-operation-logs.inc
.. include:: karbor-v1-services.inc

View File

@ -1,271 +0,0 @@
.. -*- rst -*-
===========
Checkpoints
===========
This API enables the Karbor user to access and manage the checkpoints stored in
the protection provider:
- List all checkpoints given a Bank ID.
- Show Information on a given checkpoint ID.
- Delete a checkpoint.
- Create a checkpoint.
When you perform the above operation, these status values are possible:
+-----------------+----------------------------------------------------------+
| Status | Description |
+=================+==========================================================+
| error | A checkpoint creation error occurred. |
+-----------------+----------------------------------------------------------+
| protecting | The checkpoint is being created. |
+-----------------+----------------------------------------------------------+
| available | The checkpoint is created, and available. |
+-----------------+----------------------------------------------------------+
| deleting | The checkpoint is being deleted. |
+-----------------+----------------------------------------------------------+
| deleted | The checkpoint is deleted. |
+-----------------+----------------------------------------------------------+
| error-deleting | A checkpoint deletion error occurred. |
+-----------------+----------------------------------------------------------+
List checkpoints
================
.. rest_method:: GET /v1/{tenant_id}/providers/{provider_id}/checkpoints
List all the checkpoints offered at the given provider, or part of checkpoints
limited by ``?limit={limit_num}`` by ``GET`` method.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- provider_id: provider_id_1
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- checkpoints: checkpoint_list
- id: checkpoint_id
- project_id: tenant_id_1
- status: checkpoint_status
- protection_plan: plan
- resource_graph: resource_graph
- checkpoints_links: links
Response Example
----------------
.. literalinclude:: ./samples/checkpoints-list-response.json
:language: javascript
Create checkpoint
=================
.. rest_method:: POST /v1/{tenant_id}/providers/{provider_id}/checkpoints
Execute the protect operation for the specified plan and create a checkpoint
at a given provider.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- provider_id: provider_id_1
- checkpoint: checkpoint
- plan_id: plan_id
- extra_info: extra_info
Request Example
---------------
.. literalinclude:: ./samples/checkpoint-create-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- checkpoint: checkpoint
- id: checkpoint_id
- project_id: tenant_id_1
- status: checkpoint_status
- protection_plan: plan
- resource_graph: resource_graph
Response Example
----------------
.. literalinclude:: ./samples/checkpoint-create-response.json
:language: javascript
Show checkpoint
===============
.. rest_method:: GET /v1/{tenant_id}/providers/{provider_id}/checkpoints/{checkpoint_id}
Shows the information about the specified checkpoint offered at a given
provider.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- provider_id: provider_id_1
- checkpoint_id: checkpoint_id_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- checkpoint: checkpoint
- id: checkpoint_id
- project_id: tenant_id_1
- status: checkpoint_status
- protection_plan: plan
- resource_graph: resource_graph
Response Example
----------------
.. literalinclude:: ./samples/checkpoint-create-response.json
:language: javascript
Delete checkpoint
=================
.. rest_method:: DELETE /v1/{tenant_id}/providers/{provider_id}/checkpoints/{checkpoint_id}
Deletes a specific checkpoint.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- provider_id: provider_id_1
- checkpoint_id: checkpoint_id_1
Response
--------
Empty dict
Response Example
----------------
.. literalinclude:: ./samples/checkpoint-delete-response.json
:language: javascript
Update checkpoint
=================
.. rest_method:: PUT /v1/{tenant_id}/providers/{provider_id}/checkpoints/{checkpoint_id}
Updates a specific checkpoint.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- provider_id: provider_id_1
- checkpoint_id: checkpoint_id_1
- os-resetState: os-resetState
- os-resetState.state: state
Response
--------
Empty dict
Response Example
----------------
.. literalinclude:: ./samples/checkpoint-reset-state-response.json
:language: javascript

View File

@ -1,136 +0,0 @@
.. -*- rst -*-
==============
Operation logs
==============
This API enables the Karbor user get the information about operation logs:
- List all operation logs by a given project.
- Show the information of a given operation log.
When you perform the above operation, these status values are possible:
+-----------------+----------------------------------------------------------+
| Status | Description |
+=================+==========================================================+
| available | A protect operation is finished. |
+-----------------+----------------------------------------------------------+
| success | A restore operation is success. |
+-----------------+----------------------------------------------------------+
| deleted | A delete operation is finished. |
+-----------------+----------------------------------------------------------+
List operation logs
===================
.. rest_method:: GET /v1/{tenant_id}/operation_logs
List all operation logs, triggered by a given project, or part of the operation
logs limited by ``?limit={limit_num}`` by ``GET`` method.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- operation_logs: operation_log_list
- id: operation_log_id
- project_id: tenant_id_1
- operation_type: operation_type
- checkpoint_id: checkpoint_id_2
- plan_id: plan_id_1
- provider_id: provider_id_2
- restore_id: restore_id_2
- scheduled_operation_id: operation_id_2
- status: operation_log_status
- started_at: started_at
- ended_at: ended_at
- error_info: error_info
- extra_info: extra_info
- operation_logs_links: links
Response Example
----------------
.. literalinclude:: ./samples/operation-logs-list-response.json
:language: javascript
Show operation log
==================
.. rest_method:: GET /v1/{tenant_id}/operation_logs/{operation_log_id}
Show the information of a given operation log.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- operation_log_id: operation_log_id_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- operation_log: operation_log
- id: operation_log_id
- project_id: tenant_id_1
- operation_type: operation_type_1
- checkpoint_id: checkpoint_id_2
- plan_id: plan_id_1
- provider_id: provider_id_2
- restore_id: restore_id_2
- scheduled_operation_id: operation_id_2
- status: operation_log_status
- started_at: started_at
- ended_at: ended_at
- error_info: error_info
- extra_info: extra_info_1
Response Example
----------------
.. literalinclude:: ./samples/operation-log-show-response.json
:language: javascript

View File

@ -1,268 +0,0 @@
.. -*- rst -*-
=====
Plans
=====
This API enables the Karbor user to access the protection Plan registry and do
the following operations:
- Plan CRUD.
- List Plans.
- Starting and suspending of plans.
When you perform the above operation, these status values are possible:
+-----------------+----------------------------------------------------------+
| Status | Description |
+=================+==========================================================+
| started | A plan is updated. |
+-----------------+----------------------------------------------------------+
| suspended | A plan is created. |
+-----------------+----------------------------------------------------------+
List plans
==========
.. rest_method:: GET /v1/{tenant_id}/plans
List all the protection plans offered for the given project, or part of the
protection plans limited by ``?limit={limit_num}`` by ``GET`` method.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- plans: plan_list
- id: plan_id
- name: plan_name
- resources: resources
- status: plan_status
- provider_id: provider_id
- parameters: plan_parameters
- plans_links: links
Response Example
----------------
.. literalinclude:: ./samples/plans-list-response.json
:language: javascript
Create plan
===========
.. rest_method:: POST /v1/{tenant_id}/plans
Create a new plan.
To specify the parameters for this plan, include the parameters
in the ``parameters`` attribute in the request body.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- plan: plan
- name: plan_name
- resources: resources
- provider_id: provider_id
- parameters: plan_parameters
Request Example
---------------
.. literalinclude:: ./samples/plan-create-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- plan: plan
- id: plan_id
- name: plan_name
- resources: resources
- status: plan_status
- provider_id: provider_id
- parameters: plan_parameters
Response Example
----------------
.. literalinclude:: ./samples/plan-create-response.json
:language: javascript
Show plan
=========
.. rest_method:: GET /v1/{tenant_id}/plans/{plan_id}
Shows the information about a specific plan.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- plan_id: plan_id
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- plan: plan
- id: plan_id
- name: plan_name
- resources: resources
- status: plan_status
- provider_id: provider_id
- parameters: plan_parameters
Response Example
----------------
.. literalinclude:: ./samples/plan-create-response.json
:language: javascript
Update plan
===========
.. rest_method:: PUT /v1/{tenant_id}/plans/{plan_id}
Updates a specific plan.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- plan_id: plan_id
- plan: plan
- name: plan_name_1
- resources: resources_1
- status: plan_status_1
Request Example
---------------
.. literalinclude:: ./samples/plan-update-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- plan: plan
- id: plan_id
- name: plan_name
- resources: resources
- status: plan_status
- provider_id: provider_id
- parameters: plan_parameters
Response Example
----------------
.. literalinclude:: ./samples/plan-update-response.json
:language: javascript
Delete plan
===========
.. rest_method:: DELETE /v1/{tenant_id}/plans/{plan_id}
Deletes a specific plan.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 202
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- plan_id: plan_id

View File

@ -1,192 +0,0 @@
.. -*- rst -*-
============
Protectables
============
Enables the Karbor user to access information about which resource types are
protectable (i.e. can be protected by Karbor). In addition, enables the user
to get additional information on each resource type, such as a list of actual
instances and their dependencies.
List protectable types
======================
.. rest_method:: GET /v1/{tenant_id}/protectables
Lists all the available protectable types.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- protectable_type: protectable_type
Response Example
----------------
.. literalinclude:: ./samples/protectables-list-response.json
:language: javascript
Show protectable type
=====================
.. rest_method:: GET /v1/{tenant_id}/protectables/{protectable_type}
Shows the information of a given protectable type.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- protectable_type: protectable_type_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- protectable_type: protectable_type_2
- name: protectable_name
- dependent_types: dependent_types
Response Example
----------------
.. literalinclude:: ./samples/protectable-show-response.json
:language: javascript
List protectable instances
==========================
.. rest_method:: GET /v1/{tenant_id}/protectables/{protectable_type}/instances
List all the available instances for the given protectable type.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- protectable_type: protectable_type_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- instances: protectable_instance_list
- id: protectable_instance_id
- type: protectable_type_3
- name: protectable_instance_name
- dependent_resources: dependent_resources
- instances_links: links
Response Example
----------------
.. literalinclude:: ./samples/protectable-instances-list-response.json
:language: javascript
Show protectable instance
=========================
.. rest_method:: GET /v1/{tenant_id}/protectables/{protectable_type}/instances/{resource_id}
Show the information about a specific instance and its immediate dependencies.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- protectable_type: protectable_type_1
- resource_id: resource_id
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- instance: protectable_instance
- id: protectable_instance_id
- type: protectable_type_3
- name: protectable_instance_name
- dependent_resources: dependent_resources
Response Example
----------------
.. literalinclude:: ./samples/protectable-instance-show-response.json
:language: javascript

View File

@ -1,109 +0,0 @@
.. -*- rst -*-
=========
Providers
=========
Enables the Karbor user to list available providers and get parameters and
result schema super-set for all plugins of a specific Provider.
List protection providers
=========================
.. rest_method:: GET /v1/{tenant_id}/providers
List all the information about the providers offered at a given service, or
part of the providers limited by ``?limit={limit_num}`` by ``GET`` method.
All providers need to be configured first by the admin.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- providers: provider_list
- id: provider_id
- name: provider_name
- description: description
- extended_info_schema: schema_extended_info
- saved_info_schema: schema_saved_info
- restore_schema: schema_restore
- providers_links: links
Response Example
----------------
.. literalinclude:: ./samples/providers-list-response.json
:language: javascript
Show protection provider
========================
.. rest_method:: GET /v1/{tenant_id}/providers/{provider_id}
Shows the information about a specific provider.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- provider_id: provider_id_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- provider: provider
- id: provider_id
- name: provider_name
- description: description
- extended_info_schema: schema_extended_info
- saved_info_schema: schema_saved_info
- restore_schema: schema_restore
Response Example
----------------
.. literalinclude:: ./samples/provider-show-response.json
:language: javascript

View File

@ -1,193 +0,0 @@
.. -*- rst -*-
========
Restores
========
This API enables the Karbor user restore a checkpoint on to a restore target:
- List all restores by a given project.
- Create restored system from a checkpoint.
- Show the information of a given restore operation.
When you perform the above operation, these status values are possible:
+-----------------+----------------------------------------------------------+
| Status | Description |
+=================+==========================================================+
| started | A restore operation is in progress. |
+-----------------+----------------------------------------------------------+
| success | A restore operation is success. |
+-----------------+----------------------------------------------------------+
| failed | A restore operation is failed. |
+-----------------+----------------------------------------------------------+
List restores
=============
.. rest_method:: GET /v1/{tenant_id}/restores
List all restores started, success or failed, triggered by a given project,
or part of the protection plans limited by ``?limit={limit_num}`` by ``GET``
method.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- restores: restore_list
- id: restore_id
- project_id: tenant_id_1
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- restore_target: restore_target
- parameters: restore_parameters
- status: restore_status
- resource_status: restore_resource_status
- resource_reason: restore_resource_reason
- restores_links: links
Response Example
----------------
.. literalinclude:: ./samples/restores-list-response.json
:language: javascript
Create restore
==============
.. rest_method:: POST /v1/{tenant_id}/restores
Start a restore operation.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- restore: restore
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- restore_target: restore_target
- restore_auth: restore_auth
- parameters: restore_parameters
Request Example
---------------
.. literalinclude:: ./samples/restore-create-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- restore: restore
- id: restore_id
- project_id: tenant_id_1
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- restore_target: restore_target
- restore_auth: restore_auth
- parameters: restore_parameters
- status: restore_status
- resource_status: restore_resource_status
- resource_reason: restore_resource_reason
Response Example
----------------
.. literalinclude:: ./samples/restore-create-response.json
:language: javascript
Show restore
============
.. rest_method:: GET /v1/{tenant_id}/restores/{restore_id}
Show the information of a given restore operation.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- restore_id: restore_id_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- restore: restore
- id: restore_id
- project_id: tenant_id_1
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- restore_target: restore_target
- parameters: restore_parameters
- status: restore_status
- resource_status: restore_resource_status
- resource_reason: restore_resource_reason
Response Example
----------------
.. literalinclude:: ./samples/restore-create-response.json
:language: javascript

View File

@ -1,204 +0,0 @@
.. -*- rst -*-
====================
Scheduled operations
====================
This API enables the Karbor user to manage protection Operations:
- Create a checkpoint for a given Protection Plan.
- Delete unneeded checkpoints from the provider.
- Status on a given Operation ID.
Scheduled operations are operations that will be executed when a specific
trigger is triggered.
List scheduled operations
=========================
.. rest_method:: GET /v1/{tenant_id}/scheduled_operations
List all the scheduled operations based on trigger and plan, or part of the
scheduled operations limited by ``?limit={limit_num}`` by ``GET`` method.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- operations: operation_list
- scheduled_operation: operation
- id: operation_id
- name: operation_name
- description: description
- operation_type: operation_type
- trigger_id: trigger_id
- operation_definition: operation_definition
- enabled: enabled
- plans_links: links
Response Example
----------------
.. literalinclude:: ./samples/scheduled-operations-list-response.json
:language: javascript
Create scheduled operation
==========================
.. rest_method:: POST /v1/{tenant_id}/scheduled_operations
Create a new scheduled operation.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- scheduled_operation: operation
- name: operation_name
- description: description
- operation_type: operation_type
- trigger_id: trigger_id
- operation_definition: operation_definition
Request Example
---------------
.. literalinclude:: ./samples/scheduled-operation-create-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- scheduled_operation: operation
- id: operation_id
- name: operation_name
- description: description
- operation_type: operation_type
- trigger_id: trigger_id
- operation_definition: operation_definition
- enabled: enabled
Response Example
----------------
.. literalinclude:: ./samples/scheduled-operation-create-response.json
:language: javascript
Show scheduled operation
========================
.. rest_method:: GET /v1/{tenant_id}/scheduled_operations/{scheduled_operation_id}
Shows the specified scheduled operation information.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- scheduled_operation_id: operation_id_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- scheduled_operation: operation
- id: operation_id
- name: operation_name
- description: description
- operation_type: operation_type
- trigger_id: trigger_id
- operation_definition: operation_definition
- enabled: enabled
Response Example
----------------
.. literalinclude:: ./samples/scheduled-operation-create-response.json
:language: javascript
Delete scheduled operation
==========================
.. rest_method:: DELETE /v1/{tenant_id}/scheduled_operations/{scheduled_operation_id}
Deletes a specific scheduled operation.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 202
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- scheduled_operation_id: operation_id_1

View File

@ -1,115 +0,0 @@
.. -*- rst -*-
========
Services
========
Administrator only. Lists all Karbor services, enables or disables a Karbor
service, freeze or thaw the specified karbor-operationengine host, failover a
replicating karbor-operationengine host.
List All Karbor Services
========================
.. rest_method:: GET /v1/{tenant_id}/os-services
Lists all Karbor services. Provides details why any services were disabled.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- host: host_query
- binary: binary_query
Response
--------
.. rest_parameters:: parameters.yaml
- services: services
- id: service_id
- binary: binary_required
- host: host_name_body_req
- status: service_status
- state: service_state_up_down
- updated_at: updated
- disabled_reason: disabled_reason_body_req
Response Example
----------------
.. literalinclude:: ./samples/services-list-response.json
:language: javascript
Update a Karbor Service Status
==============================
.. rest_method:: PUT /v1/{tenant_id}/os-services/{service_id}
Update a Karbor operationengine service status. Specify the service by its id.
Response codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 400
- 401
- 403
- 404
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- service_id: service_id_path
Request Example
---------------
.. literalinclude:: ./samples/services-update-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- service: service_body
- id: service_id
- binary: binary_required
- host: host_name_body_req
- status: service_status
- state: service_state_up_down
- updated_at: updated
- disabled_reason: disabled_reason_body_req
Response Example
----------------
.. literalinclude:: ./samples/services-update-response.json
:language: javascript

View File

@ -1,245 +0,0 @@
.. -*- rst -*-
========
Triggers
========
This API enables the Karbor user to access the trigger registry and do
the following operations:
- Trigger CRUD.
- List Triggers.
List triggers
=============
.. rest_method:: GET /v1/{tenant_id}/triggers
List all the triggers offered for the given project, or part of the triggers
limited by ``?limit={limit_num}`` by ``GET`` method.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- triggers: trigger_list
- id: trigger_id
- type: trigger_type
- name: trigger_name
- properties: trigger_properties
- plans_links: links
Response Example
----------------
.. literalinclude:: ./samples/triggers-list-response.json
:language: javascript
Create trigger
==============
.. rest_method:: POST /v1/{tenant_id}/triggers
Create a new trigger.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- trigger_info: trigger
- type: trigger_type
- name: trigger_name
- properties: trigger_properties
Request Example
---------------
.. literalinclude:: ./samples/trigger-create-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- trigger_info: trigger
- id: trigger_id
- type: trigger_type
- name: trigger_name
- properties: trigger_properties
Response Example
----------------
.. literalinclude:: ./samples/trigger-create-response.json
:language: javascript
Show trigger
============
.. rest_method:: GET /v1/{tenant_id}/triggers/{trigger_id}
Shows the information about a specified trigger.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- trigger_id: trigger_id_1
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- trigger_info: trigger
- id: trigger_id
- type: trigger_type
- name: trigger_name
- properties: trigger_properties
Response Example
----------------
.. literalinclude:: ./samples/trigger-create-response.json
:language: javascript
Update trigger
==============
.. rest_method:: PUT /v1/{tenant_id}/triggers/{trigger_id}
Updates the name or properties of a specific trigger alone or at the same
time.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- trigger_id: trigger_id_1
- trigger_info: trigger
- name: trigger_name_1
- properties: trigger_properties_1
Request Example
---------------
.. literalinclude:: ./samples/trigger-update-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- X-Openstack-Request-Id: request_id
- trigger_info: trigger
- id: trigger_id
- type: trigger_type
- name: trigger_name
- properties: trigger_properties
Response Example
----------------
.. literalinclude:: ./samples/trigger-update-response.json
:language: javascript
Delete trigger
==============
.. rest_method:: DELETE /v1/{tenant_id}/triggers/{trigger_id}
Deletes a specific trigger.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 202
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- trigger_id: trigger_id_1

View File

@ -1,185 +0,0 @@
.. -*- rst -*-
=============
Verifications
=============
This API enables the Karbor user to do verifications of the specify checkpoint:
- Create a verification for a given checkpoint.
- List all verifications of a given project.
- Show the information of a given verification.
When you perform the above operation, these status values are possible:
+-----------------+----------------------------------------------------------+
| Status | Description |
+=================+==========================================================+
| in_progress | A verify operation is in progress. |
+-----------------+----------------------------------------------------------+
| success | A verify operation is success. |
+-----------------+----------------------------------------------------------+
| fail | A verify operation is failed. |
+-----------------+----------------------------------------------------------+
List All Verifications
======================
.. rest_method:: GET /v1/{tenant_id}/verifications
Lists all verifications offered for the given project.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 403
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- sort: sort
- limit: limit
- marker: marker
Response
--------
.. rest_parameters:: parameters.yaml
- verifications: verifications
- id: verification_id
- project_id: tenant_id_1
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- parameters: verification_parameters
- status: verification_status
- resources_status: resources_status
- resources_reason: resources_reason
- verifications_links: verifications_links
Response Example
----------------
.. literalinclude:: ./samples/verifications-list-response.json
:language: javascript
Create verification
===================
.. rest_method:: PUT /v1/{tenant_id}/verifications
Execute the verify operation for the specified provider and checkpoint.
Response codes
--------------
.. rest_status_code:: success ../status.yaml
- 200
.. rest_status_code:: error ../status.yaml
- 401
- 403
- 404
Request
-------
.. rest_parameters:: parameters.yaml
- verification: verification
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- parameters: verification_parameters
Request Example
---------------
.. literalinclude:: ./samples/verification-create-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- verification: verification
- id: verification_id
- project_id: tenant_id_1
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- parameters: verification_parameters
- status: verification_status
- resources_status: resources_status
- resources_reason: resources_reason
Response Example
----------------
.. literalinclude:: ./samples/verification-create-response.json
:language: javascript
Show Verification
=================
.. rest_method:: GET /v1/{tenant_id}/verifications/{verification_id}
Show the information of a given verify operation.
Response Codes
--------------
.. rest_status_code:: success status.yaml
- 200
.. rest_status_code:: error status.yaml
- 401
- 404
Request
-------
.. rest_parameters:: parameters.yaml
- tenant_id: tenant_id
- verification_id: verification_id_path
Response
--------
.. rest_parameters:: parameters.yaml
- verification: verification
- id: verification_id
- project_id: tenant_id_1
- provider_id: provider_id
- checkpoint_id: checkpoint_id
- parameters: verification_parameters
- status: verification_status
- resources_status: resources_status
- resources_reason: resources_reason
Response Example
----------------
.. literalinclude:: ./samples/verification-create-response.json
:language: javascript

View File

@ -1,690 +0,0 @@
# variables in header
request_id:
description: |
A unique ID for tracking service request. The request ID associated
with the request by default appears in the service logs.
in: header
required: true
type: UUID
# variables in path
checkpoint_id_1:
description: |
The UUID of a checkpoint.
in: path
required: true
type: UUID
operation_id_1:
description: |
The UUID of the scheduled operation.
in: path
required: true
type: UUID
operation_log_id_1:
description: |
The UUID of the operation log.
in: path
required: true
type: UUID
protectable_type_1:
description: |
The name of a specified protectable type.
in: path
required: true
type: string
provider_id_1:
description: |
The UUID of a provider.
in: path
required: true
type: UUID
resource_id:
description: |
The UUID of a resource.
in: path
required: true
type: UUID
restore_id_1:
description: |
The UUID of the restore.
in: path
required: true
type: UUID
service_id_path:
description: |
The ID of the service.
in: path
required: true
type: integer
tenant_id:
description: |
The UUID of the tenant in a multi-tenancy cloud.
in: path
required: true
type: string
trigger_id_1:
description: |
The UUID of the trigger.
in: path
required: true
type: UUID
verification_id_path:
description: |
The UUID of the verify.
in: path
required: true
type: UUID
# variables in query
binary_query:
description: |
Filter the service list result by binary name of the service.
in: query
required: false
type: string
host_query:
description: |
Filter the service list result by host name of the service.
in: query
required: false
type: string
limit:
description: |
Requests a page size of items. Returns a number
of items up to a limit value. Use the ``limit`` parameter to make
an initial limited request and use the ID of the last-seen item
from the response as the ``marker`` parameter value in a
subsequent limited request.
in: query
required: false
type: integer
marker:
description: |
The ID of the last-seen item. Use the ``limit``
parameter to make an initial limited request and use the ID of the
last-seen item from the response as the ``marker`` parameter value
in a subsequent limited request.
in: query
required: false
type: string
sort:
description: |
Comma-separated list of sort keys and optional
sort directions in the form of < key > [: < direction > ]. A valid
direction is ``asc`` (ascending) or ``desc`` (descending).
in: query
required: false
type: string
# variables in body
binary_required:
description: |
The binary name of the service.
in: body
required: true
type: string
checkpoint:
description: |
A ``checkpoint`` object.
in: body
required: true
type: object
checkpoint_id:
description: |
The UUID of the checkpoint.
in: body
required: true
type: UUID
checkpoint_id_2:
description: |
The UUID of the checkpoint.
in: body
required: false
type: UUID
checkpoint_list:
description: |
The list of ``checkpoint`` objects.
in: body
required: true
type: array
checkpoint_status:
description: |
The status of checkpoint. A valid value is ``error``, ``protecting``,
``available``, ``deleting``, ``deleted`` or ``error-deleting``.
in: body
required: true
type: string
dependent_resources:
description: |
All dependent resources for a given protectable instance, It can be an
empty list.
in: body
required: true
type: array
dependent_types:
description: |
All dependent protectable type, It can be an empty list.
in: body
required: true
type: array
description:
description: |
The description for this object, resource, operation and so on. May be
``NULL``.
in: body
required: true
type: string
disabled_reason_body_req:
description: |
The reason for disabling a service.
in: body
required: true
type: string
enabled:
description: |
"``1``" means ``Enable``, "``0``" means ``Disable``.
in: body
required: true
type: int
ended_at:
description: |
The ended time of the operation.
in: body
required: false
type: string
error_info:
description: |
The error info of of the operation.
in: body
required: false
type: dict
extra_info:
description: |
The extra information for checkpoint.
in: body
required: false
type: dict
extra_info_1:
description: |
The extra info of of the operation.
in: body
required: false
type: dict
host_name_body_req:
description: |
The name of the host.
in: body
required: true
type: string
links:
description: |
Links for transfer.
in: body
required: true
type: array
operation:
description: |
A ``scheduled operation`` object.
in: body
required: true
type: object
operation_definition:
description: |
The operation definition for scheduled operation, include ``provider_id``
and ``plan_id`` key.
in: body
required: true
type: dict
operation_id:
description: |
The UUID of the scheduled operation.
in: body
required: true
type: UUID
operation_id_2:
description: |
The UUID of the scheduled operation.
in: body
required: false
type: UUID
operation_list:
description: |
The list of ``scheduled operation`` objects.
in: body
required: true
type: array
operation_log:
description: |
A ``operation_log`` object.
in: body
required: true
type: object
operation_log_id:
description: |
The UUID of the operation_log.
in: body
required: true
type: UUID
operation_log_list:
description: |
The list of ``operation_log`` objects.
in: body
required: true
type: array
operation_log_status:
description: |
The status of operation logs.
in: body
required: false
type: string
operation_name:
description: |
The name of the scheduled operation.
in: body
required: true
type: string
operation_type:
description: |
The type of the scheduled operation.
in: body
required: true
type: string
operation_type_1:
description: |
The type of the operation acitons.
in: body
required: true
type: UUID
os-resetState:
description: |
A ``os-resetState`` object.
in: body
required: true
type: object
plan:
description: |
A ``plan`` object.
in: body
required: true
type: object
plan_id:
description: |
The UUID of the plan.
in: body
required: true
type: UUID
plan_id_1:
description: |
The UUID of the plan.
in: body
required: false
type: UUID
plan_list:
description: |
The list of ``plan`` objects.
in: body
required: true
type: array
plan_name:
description: |
The name of the plan.
in: body
required: true
type: string
plan_name_1:
description: |
The name of the plan.
in: body
required: false
type: string
plan_parameters:
description: |
The specified parameters for plan.
in: body
required: true
type: dict
plan_status:
description: |
The status of plan. A valid value is ``started`` or ``suspended``.
in: body
required: true
type: string
plan_status_1:
description: |
The status of plan. A valid value is ``started`` or ``suspended``.
in: body
required: false
type: string
protectable_instance:
description: |
A ``protectable_instance`` object.
in: body
required: true
type: object
protectable_instance_id:
description: |
The UUID of a protectable instance.
in: body
required: true
type: UUID
protectable_instance_list:
description: |
The list of ``protectable_instance`` objects.
in: body
required: true
type: array
protectable_instance_name:
description: |
The name of a protectable instance.
in: body
required: true
type: string
protectable_name:
description: |
The name of the protectable type.
in: body
required: true
type: string
protectable_type:
description: |
All the available protection types.
in: body
required: true
type: array
protectable_type_2:
description: |
A ``protectable_type`` object.
in: body
required: true
type: object
protectable_type_3:
description: |
The name of a specified protectable type.
in: body
required: true
type: string
provider:
description: |
A ``provider`` object.
in: body
required: true
type: object
provider_id:
description: |
The UUID of the provider.
in: body
required: true
type: UUID
provider_id_2:
description: |
The UUID of the provider.
in: body
required: false
type: UUID
provider_list:
description: |
The list of ``provider`` objects.
in: body
required: true
type: array
provider_name:
description: |
The name of the provider.
in: body
required: true
type: string
resource_graph:
description: |
The resource graph of protection plan corresponding to the checkpoint.
in: body
required: true
type: array
resources:
description: |
The list of all resources in plan.
in: body
required: true
type: array
resources_1:
description: |
The list of all resources in plan.
in: body
required: false
type: array
resources_reason:
description: |
Map of the verify reason for each resource.
in: body
required: true
type: dict
resources_status:
description: |
Map of the verify status for each resource.
in: body
required: true
type: dict
restore:
description: |
A ``restore`` object.
in: body
required: true
type: object
restore_auth:
description: |
The authentication for restore, include "``type``" "``username``" and
"``password``" key.
in: body
required: true
type: dict
restore_id:
description: |
The UUID of the restore.
in: body
required: true
type: UUID
restore_id_2:
description: |
The UUID of the restore.
in: body
required: false
type: UUID
restore_list:
description: |
The list of ``restore`` objects.
in: body
required: true
type: array
restore_parameters:
description: |
specifies each resource or resource type paramters according to protection
plugin's restore schema.
in: body
required: true
type: dict
restore_resource_reason:
description: |
Map of the reason for failure of each resource in the restore
in: body
required: true
type: dict
restore_resource_status:
description: |
Map of the restore status for each resource
in: body
required: true
type: dict
restore_status:
description: |
The status of restore. A valid value is "``started``" "``success``" or
"``failed``".
in: body
required: true
type: string
restore_target:
description: |
The target of the restore operation.
in: body
required: true
type: string
schema_extended_info:
description: |
The extended info schema for provider.
in: body
required: true
type: dict
schema_restore:
description: |
The restore schema for provider.
in: body
required: true
type: dict
schema_saved_info:
description: |
The saved info schema for provider.
in: body
required: true
type: dict
service_body:
description: |
A ``service`` object.
in: body
required: true
type: object
service_id:
description: |
UUID for the cleanup service.
in: body
required: true
type: integer
service_state_up_down:
description: |
The state of the service. One of ``up`` or ``down``.
in: body
required: true
type: string
service_status:
description: |
The status of the service. One of ``enabled`` or ``disabled``.
in: body
required: true
type: string
services:
description: |
A list of service objects.
in: body
required: true
type: array
started_at:
description: |
The started time of the operation.
in: body
required: false
type: string
state:
description: |
The status of checkpoint. A valid value is ``error`` or ``available``.
in: body
required: true
type: string
tenant_id_1:
description: |
The UUID of the tenant in a multi-tenancy cloud.
in: body
required: true
type: string
trigger:
description: |
A ``trigger`` object.
in: body
required: true
type: object
trigger_id:
description: |
The UUID of the trigger.
in: body
required: true
type: UUID
trigger_list:
description: |
The list of ``trigger`` objects.
in: body
required: true
type: array
trigger_name:
description: |
The name of the trigger.
in: body
required: true
type: string
trigger_name_1:
description: |
The name of the trigger.
in: body
required: false
type: string
trigger_properties:
description: |
The property list for trigger. it must include "``pattern``" and
"``format``", may include "``window``" "``start_time``" and "``end_time``".
in: body
required: true
type: dict
trigger_properties_1:
description: |
The property list for trigger. it must include "``pattern``" and
"``format``", may include "``window``" "``start_time``" and "``end_time``".
in: body
required: false
type: dict
trigger_type:
description: |
The type of the trigger.
in: body
required: true
type: string
updated:
description: |
The date and time stamp when the extension was
last updated.
in: body
required: true
type: string
verification:
description: |
A ``verification`` object.
in: body
required: true
type: object
verification_id:
description: |
The UUID of the verify.
in: body
required: true
type: UUID
verification_parameters:
description: |
The specified parameters for verification.
in: body
required: true
type: dict
verification_status:
description: |
The status of verify. A valid value is "``in_progress``" "``success``" or
"``fail``".
in: body
required: true
type: string
verifications:
description: |
A list of verification objects.
in: body
required: true
type: array
verifications_links:
description: |
Links for transfer.
in: body
required: true
type: array

View File

@ -1,9 +0,0 @@
{
"checkpoint": {
"plan_id": "3523a271-68aa-42f5-b9ba-56e5200a2ebb",
"extra_info": {
"create-by": "operation-engine",
"trigger_id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba"
}
}
}

View File

@ -1,35 +0,0 @@
{
"checkpoint": {
"id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
"project_id": "e486a2f49695423ca9c47e589b948108",
"status": "available",
"protection_plan": {
"id": "3523a271-68aa-42f5-b9ba-56e5200a2ebb",
"name": "My 3 tier application",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"resources": [
{
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
"type": "OS::Glance::Image",
"name": "cirros-0.3.4-x86_64-uec"
},
{
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"type": "OS::Nova::Server",
"name": "App server"
},
{
"id": "25336116-f38e-4c22-81ad-e9b7bd71ba51",
"type": "OS::Cinder::Volume",
"name": "System volume"
},
{
"id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba",
"type": "OS::Cinder::Volume",
"name": "Data volume"
}
]
},
"resource_graph": "[{'0x3': ['OS::Cinder::Volume', '33b6bb0b-1157-4e66-8553-1c9e14b1c7ba', 'Data volume'], '0x2': ['OS::Cinder::Volume', '25336116-f38e-4c22-81ad-e9b7bd71ba51', 'System volume'], '0x1': ['OS::Nova::Server', 'cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01', 'App server'], '0x0': ['OS::Glance::Image', '99777fdd-8a5b-45ab-ba2c-52420008103f', 'cirros-0.3.4-x86_64-uec']}, [['0x1', ['0x0']]]]"
}
}

View File

@ -1,43 +0,0 @@
{
"checkpoints": [
{
"id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
"project_id": "e486a2f49695423ca9c47e589b948108",
"status": "available",
"protection_plan": {
"id": "3523a271-68aa-42f5-b9ba-56e5200a2ebb",
"name": "My 3 tier application",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"resources": [
{
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
"type": "OS::Glance::Image",
"name": "cirros-0.3.4-x86_64-uec"
},
{
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"type": "OS::Nova::Server",
"name": "App server"
},
{
"id": "25336116-f38e-4c22-81ad-e9b7bd71ba51",
"type": "OS::Cinder::Volume",
"name": "System volume"
},
{
"id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba",
"type": "OS::Cinder::Volume",
"name": "Data volume"
}
]
},
"resource_graph": "[{'0x3': ['OS::Cinder::Volume', '33b6bb0b-1157-4e66-8553-1c9e14b1c7ba', 'Data volume'], '0x2': ['OS::Cinder::Volume', '25336116-f38e-4c22-81ad-e9b7bd71ba51', 'System volume'], '0x1': ['OS::Nova::Server', 'cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01', 'App server'], '0x0': ['OS::Glance::Image', '99777fdd-8a5b-45ab-ba2c-52420008103f', 'cirros-0.3.4-x86_64-uec']}, [['0x1', ['0x0']]]]"
}
],
"checkpoints_links": [
{
"href": "/v1/{project_id}/checkpoints?limit={limit_num}&marker=dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
"rel": "next"
}
]
}

View File

@ -1,16 +0,0 @@
{
"operation_log": {
"status": "available",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"restore_id": null,
"checkpoint_id": "dbc459ff-2ac6-44fa-ba15-89350d7ebd43",
"error_info": null,
"ended_at": "2017-07-28T08:43:22.000000",
"started_at": "2017-07-28T08:42:02.000000",
"id": "7a16c731-0658-47dd-aa3b-98ee21830e23",
"extra_info": null,
"plan_id": "d58ffd3e-f64e-4b67-9bb0-b86d3483e7d0",
"scheduled_operation_id": null,
"operation_type": "protect"
}
}

View File

@ -1,48 +0,0 @@
{
"operation_logs": [{
"status": "deleted",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"restore_id": null,
"checkpoint_id": "dbc459ff-2ac6-44fa-ba15-89350d7ebd43",
"error_info": null,
"ended_at": "2017-07-28T09:02:57.000000",
"started_at": "2017-07-28T09:02:41.000000",
"id": "f0aa664b-f385-4618-bc27-9e0116cceea7",
"extra_info": null,
"plan_id": "d58ffd3e-f64e-4b67-9bb0-b86d3483e7d0",
"scheduled_operation_id": null,
"operation_type": "protect"
},
{
"status": "success",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"restore_id": "7c0d396a-981b-4953-95f5-30382ddaa8bf",
"checkpoint_id": "dbc459ff-2ac6-44fa-ba15-89350d7ebd43",
"error_info": null,
"ended_at": "2017-07-28T08:58:08.000000",
"started_at": "2017-07-28T08:57:36.000000",
"id": "8736649d-857e-4637-923c-3bdb35edd74e",
"extra_info": null,
"plan_id": null,
"scheduled_operation_id": null,
"operation_type": "restore"
},
{
"status": "available",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"restore_id": null,
"checkpoint_id": "dbc459ff-2ac6-44fa-ba15-89350d7ebd43",
"error_info": null,
"ended_at": "2017-07-28T08:43:22.000000",
"started_at": "2017-07-28T08:42:02.000000",
"id": "7a16c731-0658-47dd-aa3b-98ee21830e23",
"extra_info": null,
"plan_id": "d58ffd3e-f64e-4b67-9bb0-b86d3483e7d0",
"scheduled_operation_id": null,
"operation_type": "protect"
}],
"operation_logs_links": [{
"href": "/v1/{project_id}/operation_logs?limit={limit_num}&marker=7a16c731-0658-47dd-aa3b-98ee21830e23",
"rel": "next"
}]
}

View File

@ -1,48 +0,0 @@
{
"plan": {
"name": "My 3 tier application",
"resources": [
{
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
"type": "OS::Glance::Image",
"name": "cirros-0.3.4-x86_64-uec"
},
{
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"type": "OS::Nova::Server",
"name": "App server"
},
{
"id": "25336116-f38e-4c22-81ad-e9b7bd71ba51",
"type": "OS::Cinder::Volume",
"name": "System volume",
"extra_info": {
"availability_zone": "az1"
}
},
{
"id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba",
"type": "OS::Cinder::Volume",
"name": "Data volume",
"extra_info": {
"availability_zone": "az1"
}
}
],
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"parameters": {
"OS::Nova::Server": {
"backup_name": "os"
},
"OS::Nova::Server#cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01": {
"backup_name": "crash"
},
"OS::Cinder::Volume": {
"backup_name": "os"
},
"OS::Cinder::Volume#33b6bb0b-1157-4e66-8553-1c9e14b1c7ba": {
"backup_name": "crash"
}
}
}
}

View File

@ -1,50 +0,0 @@
{
"plan": {
"id": "9e5475d2-6425-4986-9136-a4f09642297f",
"name": "My 3 tier application",
"resources": [
{
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
"type": "OS::Glance::Image",
"name": "cirros-0.3.4-x86_64-uec"
},
{
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"type": "OS::Nova::Server",
"name": "App server"
},
{
"id": "25336116-f38e-4c22-81ad-e9b7bd71ba51",
"type": "OS::Cinder::Volume",
"name": "System volume",
"extra_info": {
"availability_zone": "az1"
}
},
{
"id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba",
"type": "OS::Cinder::Volume",
"name": "Data volume",
"extra_info": {
"availability_zone": "az1"
}
}
],
"status": "suspended",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"parameters": {
"OS::Nova::Server": {
"backup_name": "os"
},
"OS::Nova::Server#cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01": {
"backup_name": "crash"
},
"OS::Cinder::Volume": {
"backup_name": "os"
},
"OS::Cinder::Volume#33b6bb0b-1157-4e66-8553-1c9e14b1c7ba": {
"backup_name": "crash"
}
}
}
}

View File

@ -1,6 +0,0 @@
{
"plan":{
"status": "started",
"name": "My 1 tier application"
}
}

View File

@ -1,50 +0,0 @@
{
"plan": {
"id": "9e5475d2-6425-4986-9136-a4f09642297f",
"name": "My 1 tier application",
"resources": [
{
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
"type": "OS::Glance::Image",
"name": "cirros-0.3.4-x86_64-uec"
},
{
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"type": "OS::Nova::Server",
"name": "App server"
},
{
"id": "25336116-f38e-4c22-81ad-e9b7bd71ba51",
"type": "OS::Cinder::Volume",
"name": "System volume",
"extra_info": {
"availability_zone": "az1"
}
},
{
"id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba",
"type": "OS::Cinder::Volume",
"name": "Data volume",
"extra_info": {
"availability_zone": "az1"
}
}
],
"status": "started",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"parameters": {
"OS::Nova::Server": {
"backup_name": "os"
},
"OS::Nova::Server#cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01": {
"backup_name": "crash"
},
"OS::Cinder::Volume": {
"backup_name": "os"
},
"OS::Cinder::Volume#33b6bb0b-1157-4e66-8553-1c9e14b1c7ba": {
"backup_name": "crash"
}
}
}
}

View File

@ -1,58 +0,0 @@
{
"plans": [
{
"id": "9e5475d2-6425-4986-9136-a4f09642297f",
"name": "My 3 tier application",
"resources": [
{
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
"type": "OS::Glance::Image",
"name": "cirros-0.3.4-x86_64-uec"
},
{
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"type": "OS::Nova::Server",
"name": "App server"
},
{
"id": "25336116-f38e-4c22-81ad-e9b7bd71ba51",
"type": "OS::Cinder::Volume",
"name": "System volume",
"extra_info": {
"availability_zone": "az1"
}
},
{
"id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba",
"type": "OS::Cinder::Volume",
"name": "Data volume",
"extra_info": {
"availability_zone": "az1"
}
}
],
"status": "suspended",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"parameters": {
"OS::Nova::Server": {
"backup_name": "os"
},
"OS::Nova::Server#cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01": {
"backup_name": "crash"
},
"OS::Cinder::Volume": {
"backup_name": "os"
},
"OS::Cinder::Volume#33b6bb0b-1157-4e66-8553-1c9e14b1c7ba": {
"backup_name": "crash"
}
}
}
],
"plans_links": [
{
"href": "/v1/{project_id}/plans?limit={limit_num}&marker=9e5475d2-6425-4986-9136-a4f09642297f",
"rel": "next"
}
]
}

View File

@ -1,14 +0,0 @@
{
"instance": {
"id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"type": "OS::Nova::Server",
"name": "My VM",
"dependent_resources": [
{
"id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
"type": "OS::Glance::Image",
"name": "cirros-0.3.4-x86_64-uec"
}
]
}
}

View File

@ -1,26 +0,0 @@
{
"instances":[
{
"id": "25336116-f38e-4c22-81ad-e9b7bd71ba51",
"type": "OS::Cinder::Volume",
"name": "System volume",
"extra_info": {
"availability_zone": "az1"
}
},
{
"id": "33b6bb0b-1157-4e66-8553-1c9e14b1c7ba",
"type": "OS::Cinder::Volume",
"name": "Data volume",
"extra_info": {
"availability_zone": "az1"
}
}
],
"instances_links": [
{
"href": "/v1/{project_id}/instances?limit=1&marker=cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
"rel": "next"
}
]
}

View File

@ -1,9 +0,0 @@
{
"protectable_type": {
"name": "OS::Nova::Server",
"dependent_types": [
"OS::Cinder::Volume",
"OS::Glance::Image"
]
}
}

View File

@ -1,8 +0,0 @@
{
"protectable_type": [
"OS::Keystone::Project",
"OS::Cinder::Volume",
"OS::Glance::Image",
"OS::Nova::Server"
]
}

View File

@ -1,60 +0,0 @@
{
"provider": {
"id": "2220f8b1-975d-4621-a872-fa9afb43cb6c",
"name": "OS Infra Provider",
"description": "This provider uses OpenStack's own services (swift, cinder) as storage",
"extended_info_schema": {
"options_schema": {
"OS::Cinder::Volume": {
"required": [
"backup_mode"
],
"type": "object",
"properties": {
"backup_mode": {
"default": "auto",
"enum": [
"full",
"incremental",
"auto"
],
"type": "string",
"description": "The backup mode.",
"title": "Backup Mode"
}
},
"title": "Cinder Protection Options"
}
},
"saved_info_schema": {
"OS::Cinder::Volume": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for this backup.",
"title": "Name"
}
},
"title": "Cinder Protection Saved Info"
}
},
"restore_schema": {
"OS::Cinder::Volume": {
"type": "object",
"properties": {
"restore_name": {
"type": "string",
"description": "The name of the restored volume.",
"title": "Restore Name"
}
},
"title": "Cinder Protection Restore"
}
}
}
}
}

View File

@ -1,68 +0,0 @@
{
"providers": [
{
"id": "2220f8b1-975d-4621-a872-fa9afb43cb6c",
"name": "OS Infra Provider",
"description": "This provider uses OpenStack's own services (swift, cinder) as storage",
"extended_info_schema": {
"options_schema": {
"OS::Cinder::Volume": {
"required": [
"backup_mode"
],
"type": "object",
"properties": {
"backup_mode": {
"default": "auto",
"enum": [
"full",
"incremental",
"auto"
],
"type": "string",
"description": "The backup mode.",
"title": "Backup Mode"
}
},
"title": "Cinder Protection Options"
}
},
"saved_info_schema": {
"OS::Cinder::Volume": {
"required": [
"name"
],
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for this backup.",
"title": "Name"
}
},
"title": "Cinder Protection Saved Info"
}
},
"restore_schema": {
"OS::Cinder::Volume": {
"type": "object",
"properties": {
"restore_name": {
"type": "string",
"description": "The name of the restored volume.",
"title": "Restore Name"
}
},
"title": "Cinder Protection Restore"
}
}
}
}
],
"providers_links": [
{
"href": "/v1/{project_id}/providers?limit={limit_num}&marker=cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"rel": "next"
}
]
}

View File

@ -1,18 +0,0 @@
{
"restore": {
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"checkpoint_id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
"restore_target": "http://192.168.1.2/identity/",
"restore_auth": {
"type": "password",
"username": "admin",
"password": "secretadmin"
},
"parameters": {
"OS::Cinder::Volume": {
},
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": {
}
}
}
}

View File

@ -1,27 +0,0 @@
{
"restore": {
"id": "22b82aa7-9179-4c71-bba2-caf5c0e68db7",
"project_id": "e486a2f49695423ca9c47e589b948108",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"checkpoint_id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
"restore_target": "http://192.168.1.2/identity/",
"restore_auth": {
"type": "password",
"username": "admin",
"password": "***"
},
"parameters": {
"OS::Cinder::Volume": {
},
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": {
}
},
"resource_status": {
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": "restoring",
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "restoring"
},
"resource_reason": {
},
"status": "success"
}
}

View File

@ -1,36 +0,0 @@
{
"restores": [
{
"id": "22b82aa7-9179-4c71-bba2-caf5c0e68db7",
"project_id": "e486a2f49695423ca9c47e589b948108",
"provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9",
"checkpoint_id": "dcb20606-ad71-40a3-80e4-ef0fafdad0c3",
"restore_target": "http://192.168.1.2/identity/",
"parameters": {
"OS::Cinder::Volume": {
},
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": {
}
},
"restore_auth": {
"type": "password",
"username": "admin",
"password": "***"
},
"resource_status": {
"OS::Nova::Server#3f8af6c6-ecea-42bd-b44c-724785bbe5ea": "restoring",
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "error"
},
"resource_reason": {
"OS::Cinder::Volume#98eb847f-9f59-4d54-8b7b-5047bd2fa4c7": "Backup not found"
},
"status": "success"
}
],
"restores_links": [
{
"href": "/v1/{project_id}/restores?limit={limit_num}&marker=22b82aa7-9179-4c71-bba2-caf5c0e68db7",
"rel": "next"
}
]
}

View File

@ -1,11 +0,0 @@
{"scheduled_operation": {
"name": "My scheduled operation",
"description": "It will run everyday",
"operation_type": "protect",
"trigger_id": "23902b02-5666-4ee6-8dfe-962ac09c3995",
"operation_definition": {
"provider_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa399",
"plan_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa398"
}
}
}

View File

@ -1,13 +0,0 @@
{"scheduled_operation": {
"id": "1a2c0c3d-f402-4cd8-b5db-82e85cb51fad",
"name": "My scheduled operation",
"description": "It will run everyday",
"operation_type": "protect",
"trigger_id": "23902b02-5666-4ee6-8dfe-962ac09c3995",
"operation_definition": {
"provider_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa399",
"plan_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa398"
},
"enabled": 1
}
}

View File

@ -1,22 +0,0 @@
{"operations": [
{"scheduled_operation": {
"id": "1a2c0c3d-f402-4cd8-b5db-82e85cb51fad",
"name": "My scheduled operation",
"description": "It will run everyday",
"operation_type": "protect",
"trigger_id": "23902b02-5666-4ee6-8dfe-962ac09c3995",
"operation_definition": {
"provider_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa399",
"plan_id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa398"
},
"enabled": 1
}
},
],
"operations_links": [
{
"href": "/v1/{project_id}/scheduled_operations?limit={limit_num}&marker=1a2c0c3d-f402-4cd8-b5db-82e85cb51fad",
"rel": "next"
}
]
}

View File

@ -1,27 +0,0 @@
{
"services": [{
"status": "enabled",
"binary": "karbor-operationengine",
"state": "down",
"updated_at": "2019-11-03T11:50:25.000000",
"host": "devstack",
"disabled_reason": null,
"id": 1
}, {
"status": "enabled",
"binary": "karbor-operationengine",
"state": "up",
"updated_at": "2019-11-11T02:56:05.000000",
"host": "devstack",
"disabled_reason": null,
"id": 2
}, {
"status": "enabled",
"binary": "karbor-protection",
"state": "up",
"updated_at": "2019-11-11T02:56:03.000000",
"host": "devstack",
"disabled_reason": null,
"id": 3
}]
}

View File

@ -1,4 +0,0 @@
{
"status": "disabled",
"disabled_reason": "service down"
}

View File

@ -1,11 +0,0 @@
{
"service": {
"status": "disabled",
"binary": "karbor-operationengine",
"state": "down",
"updated_at": "2019-11-03T11:50:25.000000",
"host": "devstack",
"disabled_reason": null,
"id": 1
}
}

View File

@ -1,12 +0,0 @@
{"trigger_info": {
"name": "My backup trigger",
"type": "time",
"properties": {
"format": "calendar",
"pattern": "BEGIN:VEVENT\\nRRULE:FREQ=HOURLY;INTERVAL=1;\\nEND:VEVENT",
"start_time": "2015-12-17T08:30:00",
"end_time": "2016-03-17T08:30:00",
"window": "3600"
}
}
}

View File

@ -1,13 +0,0 @@
{"trigger_info": {
"id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa398",
"name": "My backup trigger",
"type": "time",
"properties": {
"format": "calendar",
"pattern": "BEGIN:VEVENT\\nRRULE:FREQ=HOURLY;INTERVAL=1;\\nEND:VEVENT",
"start_time": "2015-12-17T08:30:00",
"end_time": "2016-03-17T08:30:00",
"window": "3600"
}
}
}

View File

@ -1,11 +0,0 @@
{"trigger_info": {
"name": "Trigger for backup",
"properties": {
"format": "calendar",
"pattern": "BEGIN:VEVENT\\nRRULE:FREQ=HOURLY;INTERVAL=1;\\nEND:VEVENT",
"start_time": "2015-12-17T08:30:00",
"end_time": "2016-03-17T08:30:00",
"window": "3600"
}
}
}

View File

@ -1,13 +0,0 @@
{"trigger_info": {
"id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa398",
"name": "Trigger for backup",
"type": "time",
"properties": {
"format": "calendar",
"pattern": "BEGIN:VEVENT\\nRRULE:FREQ=HOURLY;INTERVAL=1;\\nEND:VEVENT",
"start_time": "2015-12-17T08:30:00",
"end_time": "2016-03-17T08:30:00",
"window": "3600"
}
}
}

View File

@ -1,22 +0,0 @@
{"triggers": [
{"trigger_info": {
"id": "2a9ce1f3-cc1a-4516-9435-0ebb13caa398",
"type": "time",
"name": "My backup trigger",
"properties": {
"format": "calendar",
"pattern": "BEGIN:VEVENT\\nRRULE:FREQ=HOURLY;INTERVAL=1;\\nEND:VEVENT",
"start_time": "2015-12-17T08:30:00",
"end_time": "2016-03-17T08:30:00",
"window": "3600"
}
}
}
],
"triggers_links": [
{
"href": "/v1/{project_id}/triggers?limit={limit_num}&marker=2a9ce1f3-cc1a-4516-9435-0ebb13caa398",
"rel": "next"
}
]
}

View File

@ -1,12 +0,0 @@
{
"verification": {
"status": "in_progress",
"resources_status": {},
"provider_id": "6659007d-6f66-4a0f-9cb4-17d6aded0bb9",
"parameters": {},
"checkpoint_id": "a7418b97-0474-4360-9600-5a08fd60a2b6",
"project_id": "5d3242420cb641ac840cd4ae37af0f18",
"id": "8c1df1c5-29ab-4f77-8b45-bebc3aacf996",
"resources_reason": {}
}
}

View File

@ -1,25 +0,0 @@
{"verifications": [
{
"status": "fail",
"resources_status": {},
"provider_id": "6659007d-6f66-4a0f-9cb4-17d6aded0bb9",
"parameters": {},
"checkpoint_id": "35486bac-1b14-4158-a403-916cf09a5596",
"project_id": "5d3242420cb641ac840cd4ae37af0f18",
"id": "7f7bd4a4-0a96-4f03-9553-d6c6cf7b36b8",
"resources_reason": {}
},
{
"status": "success",
"resources_status": {
"OS::Glance::Image#1a220464-6449-4fb6-8169-14f3016c4bb9": "available"
},
"provider_id": "6659007d-6f66-4a0f-9cb4-17d6aded0bb9",
"parameters": {},
"checkpoint_id": "dd8bbf5a-6759-4ce2-a64b-854db2fa7541",
"project_id": "5d3242420cb641ac840cd4ae37af0f18",
"id": "2c126c95-3e69-46fb-83f0-b63e9770906f",
"resources_reason": {
"OS::Glance::Image#1a220464-6449-4fb6-8169-14f3016c4bb9": ""}
}]
}

View File

@ -1,62 +0,0 @@
#################
# Success Codes #
#################
200:
default: |
Request was successful.
201:
default: |
Resource was created and is ready to use.
202:
default: |
Request was accepted for processing, but the processing has not been
completed. A 'location' header is included in the response which contains
a link to check the progress of the request.
204:
default: |
The server has fulfilled the request by deleting the resource.
300:
default: |
There are multiple choices for resources. The request has to be more
specific to successfully retrieve one of these resources.
302:
default: |
The response is about a redirection hint. The header of the response
usually contains a 'location' value where requesters can check to track
the real location of the resource.
#################
# Error Codes #
#################
400:
default: |
Some content in the request was invalid.
resource_signal: |
The target resource doesn't support receiving a signal.
401:
default: |
User must authenticate before making a request.
403:
default: |
Policy does not allow current user to do this operation.
404:
default: |
The requested resource could not be found.
405:
default: |
Method is not valid for this endpoint.
409:
default: |
This operation conflicted with another operation on this resource.
duplcate_zone: |
There is already a zone with this name.
500:
default: |
Something went wrong inside the service. This should not happen usually.
If it does happen, it means the server has experienced some serious
problems.
503:
default: |
Service is not available. This is mostly caused by service configuration
errors which prevents the service from successful start up.

View File

@ -1,2 +0,0 @@
[python: **.py]

View File

@ -1,62 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# This script is executed in the OpenStack CI job that runs DevStack + tempest.
# It is also used by the rally job. You can find the CI job configuration here:
#
# http://git.openstack.org/cgit/openstack-infra/project-config/tree/jenkins/jobs/karbor.yaml
#
s=rabbit,mysql,key
s+=,n-cpu,n-api,n-cond,n-sch,n-cauth,placement-api,n-api-meta
# n-obj has been removed from mitaka
if [[ "stable/kilo stable/liberty" =~ $ZUUL_BRANCH ]]; then
s+=,n-obj
fi
if [[ "stable/kilo stable/liberty stable/mitaka stable/ocata" =~ $ZUUL_BRANCH ]]; then
s+=,n-crt
fi
s+=,neutron,q-svc,q-agt,q-dhcp,q-meta
s+=,cinder,g-api,g-reg
s+=,c-api,c-vol,c-sch,c-bak
s+=,s-proxy,s-object,s-container,s-account
s+=,h-eng,h-api,h-api-cfn,h-api-cw
s+=,manila,m-api,m-sch,m-shr,m-dat
s+=,karbor,karbor-api,karbor-operationengine,karbor-protection
ENABLED_SERVICES=$s
export ENABLED_SERVICES
DEFAULT_EXTRA_SPECS="'snapshot_support=True create_share_from_snapshot_support=True mount_snapshot_support=True driver_handles_share_servers=False'"
DEVSTACK_LOCAL_CONFIG+="API_WORKERS=4"
DEVSTACK_LOCAL_CONFIG+=$'\n'"VOLUME_BACKING_FILE_SIZE=20490M"
DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin karbor https://git.openstack.org/openstack/karbor"
DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin manila https://git.openstack.org/openstack/manila"
DEVSTACK_LOCAL_CONFIG+=$'\n'"MANILA_OPTGROUP_generic1_driver_handles_share_servers=False"
DEVSTACK_LOCAL_CONFIG+=$'\n'"MANILA_USE_SERVICE_INSTANCE_PASSWORD=True"
DEVSTACK_LOCAL_CONFIG+=$'\n'"MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS=$DEFAULT_EXTRA_SPECS"
DEVSTACK_LOCAL_CONFIG+=$'\n'"SHARE_DRIVER=manila.share.drivers.lvm.LVMShareDriver"
DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5"
DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_REPLICAS=1"
DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_DATA_DIR=$DEST/data"
DEVSTACK_LOCAL_CONFIG+=$'\n'"SWIFT_LOOPBACK_DISK_SIZE=10G"
DEVSTACK_LOCAL_CONFIG+=$'\n'"DATABASE_PASSWORD=password"
DEVSTACK_LOCAL_CONFIG+=$'\n'"RABBIT_PASSWORD=password"
DEVSTACK_LOCAL_CONFIG+=$'\n'"SERVICE_PASSWORD=password"
DEVSTACK_LOCAL_CONFIG+=$'\n'"SERVICE_TOKEN=password"
DEVSTACK_LOCAL_CONFIG+=$'\n'"ADMIN_PASSWORD=password"
export DEVSTACK_LOCAL_CONFIG

View File

@ -1,26 +0,0 @@
Listen %PUBLICPORT%
<VirtualHost *:%PUBLICPORT%>
WSGIDaemonProcess osapi_karbor processes=%APIWORKERS% threads=1 user=%USER% display-name=%{GROUP}
WSGIProcessGroup osapi_karbor
WSGIScriptAlias / %KARBOR_BIN_DIR%/karbor-wsgi
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
ErrorLog /var/log/%APACHE_NAME%/karbor-api.log
%SSLENGINE%
%SSLCERTFILE%
%SSLKEYFILE%
<Directory %KARBOR_BIN_DIR%>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
</VirtualHost>

View File

@ -1,44 +0,0 @@
[[local|localrc]]
DATABASE_PASSWORD=password
RABBIT_PASSWORD=password
SERVICE_PASSWORD=password
SERVICE_TOKEN=password
ADMIN_PASSWORD=password
enable_plugin karbor https://git.openstack.org/openstack/karbor master
enable_plugin karbor-dashboard https://git.openstack.org/openstack/karbor-dashboard master
#run the services you want to use
ENABLED_SERVICES=rabbit,mysql,key
ENABLED_SERVICES+=,n-cpu,n-api,n-obj,n-cond,n-sch,n-novnc,n-cauth,n-api-meta
ENABLED_SERVICES+=,placement-api
ENABLED_SERVICES+=,neutron,q-svc,q-agt,q-dhcp,q-meta
ENABLED_SERVICES+=,cinder,g-api,g-reg
ENABLED_SERVICES+=,c-api,c-vol,c-sch,c-bak,horizon
ENABLED_SERVICES+=,manila,m-api,m-sch,m-shr,m-dat
#Add the karbor services
enable_service karbor-api
enable_service karbor-operationengine
enable_service karbor-protection
#Add the karbor-dashboard services
enable_service karbor-dashboard
#disable the default services you don't want to use
disable_service n-net
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
SWIFT_REPLICAS=1
SWIFT_DATA_DIR=$DEST/data
enable_service s-proxy s-object s-container s-account
# Enable Manila
enable_plugin manila https://git.openstack.org/openstack/manila master
MANILA_OPTGROUP_generic1_driver_handles_share_servers=False
MANILA_USE_SERVICE_INSTANCE_PASSWORD=True
MANILA_DEFAULT_SHARE_TYPE_EXTRA_SPECS="snapshot_support=True create_share_from_snapshot_support=True mount_snapshot_support=True driver_handles_share_servers=False"
SHARE_DRIVER=manila.share.drivers.lvm.LVMShareDriver

View File

@ -1,272 +0,0 @@
# Devstack extras script to install Karbor
# Test if any karbor services are enabled
# is_karbor_enabled
function is_karbor_enabled {
echo "Checking if Karbor is Enabled"
[[ ,${ENABLED_SERVICES} =~ ,"karbor-" ]] && Q_ENABLE_KARBOR="False"
Q_ENABLE_KARBOR="True"
}
function _create_karbor_conf_dir {
# Put config files in ``KARBOR_CONF_DIR`` for everyone to find
sudo install -d -o $STACK_USER $KARBOR_CONF_DIR
}
# create_karbor_accounts() - Set up common required karbor accounts
# Tenant User Roles
# ------------------------------------------------------------------
# service karbor service
function create_karbor_accounts {
if is_service_enabled karbor-api karbor-protection karbor-operationengine; then
create_service_user "$KARBOR_TRUSTEE_USER" "admin"
fi
if is_service_enabled karbor-api; then
get_or_create_service "$KARBOR_SERVICE_NAME" "$KARBOR_SERVICE_TYPE" "Application Data Protection Service"
get_or_create_endpoint "$KARBOR_SERVICE_TYPE" "$REGION_NAME" \
"$KARBOR_API_ENDPOINT" \
"$KARBOR_API_ENDPOINT" \
"$KARBOR_API_ENDPOINT"
fi
}
# karbor_config_apache_wsgi() - Set WSGI config files
function karbor_config_apache_wsgi {
local karbor_apache_conf
karbor_apache_conf=$(apache_site_config_for osapi_karbor)
local karbor_ssl=""
local karbor_certfile=""
local karbor_keyfile=""
local karbor_api_port=$KARBOR_API_PORT
if is_ssl_enabled_service karbor-api; then
karbor_ssl="SSLEngine On"
karbor_certfile="SSLCertificateFile $KARBOR_SSL_CERT"
karbor_keyfile="SSLCertificateKeyFile $KARBOR_SSL_KEY"
fi
# copy proxy vhost file
sudo cp $KARBOR_API_APACHE_TEMPLATE $karbor_apache_conf
sudo sed -e "
s|%PUBLICPORT%|$karbor_api_port|g;
s|%APACHE_NAME%|$APACHE_NAME|g;
s|%APIWORKERS%|$API_WORKERS|g
s|%KARBOR_BIN_DIR%|$KARBOR_BIN_DIR|g;
s|%SSLENGINE%|$karbor_ssl|g;
s|%SSLCERTFILE%|$karbor_certfile|g;
s|%SSLKEYFILE%|$karbor_keyfile|g;
s|%USER%|$STACK_USER|g;
" -i $karbor_apache_conf
}
function karbor_config_uwsgi {
write_uwsgi_config "$KARBOR_API_UWSGI_CONF" "$KARBOR_API_UWSGI" "/$KARBOR_SERVICE_TYPE"
}
# clean_karbor_api_mod_wsgi() - Remove wsgi files, disable and remove apache vhost file
function clean_karbor_api_mod_wsgi {
sudo rm -f $(apache_site_config_for osapi_karbor)
}
function clean_karbor_api_uwsgi {
remove_uwsgi_config "$KARBOR_API_UWSGI_CONF" "$KARBOR_API_UWSGI"
}
# start_karbor_api_mod_wsgi() - Start the API processes ahead of other things
function start_karbor_api_mod_wsgi {
enable_apache_site osapi_karbor
restart_apache_server
tail_log karbor-api /var/log/$APACHE_NAME/karbor-api.log
echo "Waiting for Karbor API to start..."
if ! wait_for_service $SERVICE_TIMEOUT $KARBOR_API_ENDPOINT; then
die $LINENO "karbor-api mod_wsgi did not start"
fi
}
function start_karbor_api_uwsgi {
run_process karbor-api "$(which uwsgi) --ini $KARBOR_API_UWSGI_CONF" ""
echo "Waiting for Karbor API to start..."
if ! wait_for_service $SERVICE_TIMEOUT $KARBOR_API_ENDPOINT; then
die $LINENO "karbor-api uwsgi did not start"
fi
}
# stop_karbor_api_mod_wsgi() - Disable the api service and stop it.
function stop_karbor_api_mod_wsgi {
disable_apache_site osapi_karbor
restart_apache_server
}
function stop_karbor_api_uwsgi {
remove_uwsgi_config "$KARBOR_API_UWSGI_CONF" "$KARBOR_API_UWSGI"
stop_process karbor-api
}
function configure_karbor {
if is_service_enabled karbor-api karbor-operationengine karbor-protection ; then
echo "Configuring Karbor API"
# generate configuration file
cd $KARBOR_DIR
oslo-config-generator --config-file etc/oslo-config-generator/karbor.conf --output-file etc/karbor.conf.sample
cp etc/karbor.conf.sample etc/karbor.conf
cp $KARBOR_DIR/etc/karbor.conf $KARBOR_CONF
cp $KARBOR_DIR/etc/api-paste.ini $KARBOR_CONF_DIR
if [[ -f $KARBOR_DIR/etc/policy.json ]]; then
cp $KARBOR_DIR/etc/policy.json $KARBOR_CONF_DIR
fi
cp -R $KARBOR_DIR/etc/providers.d $KARBOR_CONF_DIR
cp $KARBOR_DIR/devstack/providers.d/* $KARBOR_CONF_DIR/providers.d
iniset $KARBOR_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
iniset $KARBOR_CONF DEFAULT use_syslog $SYSLOG
iniset $KARBOR_CONF DEFAULT min_interval $KARBOR_SCHEDULED_MIN_INTERVAL
iniset $KARBOR_CONF DEFAULT min_window_time $KARBOR_SCHEDULED_MIN_WINDOW_TIME
iniset $KARBOR_CONF DEFAULT max_window_time $KARBOR_SCHEDULED_MAX_WINDOW_TIME
echo "Configuring Karbor API Database"
iniset $KARBOR_CONF database connection `database_connection_url karbor`
iniset_rpc_backend karbor $KARBOR_CONF
# Configure for trustee
iniset $KARBOR_CONF trustee auth_type password
iniset $KARBOR_CONF trustee auth_url $KEYSTONE_AUTH_URI
iniset $KARBOR_CONF trustee username $KARBOR_TRUSTEE_USER
iniset $KARBOR_CONF trustee password $SERVICE_PASSWORD
iniset $KARBOR_CONF trustee user_domain_id default
setup_colorized_logging $KARBOR_CONF DEFAULT
echo "Configuring Karbor API colorized"
if is_service_enabled keystone; then
echo "Configuring Karbor keystone Auth"
create_karbor_cache_dir
# Configure auth token middleware
configure_auth_token_middleware $KARBOR_CONF karbor \
$KARBOR_AUTH_CACHE_DIR
# Configure for clients_keystone
iniset $KARBOR_CONF clients_keystone auth_uri $KEYSTONE_AUTH_URI
# Config karbor client
iniset $KARBOR_CONF karbor_client service_name $KARBOR_SERVICE_NAME
iniset $KARBOR_CONF karbor_client service_type $KARBOR_SERVICE_TYPE
iniset $KARBOR_CONF karbor_client version 1
else
iniset $KARBOR_CONF DEFAULT auth_strategy noauth
fi
fi
}
function configure_providers {
if is_swift_enabled; then
echo_summary "Configuring Swift Bank"
iniset $KARBOR_CONF_DIR/providers.d/openstack-infra.conf swift_client swift_key $SERVICE_PASSWORD
fi
}
function create_karbor_cache_dir {
# Delete existing dir
sudo rm -rf $KARBOR_AUTH_CACHE_DIR
sudo mkdir -p $KARBOR_AUTH_CACHE_DIR
sudo chown `whoami` $KARBOR_AUTH_CACHE_DIR
}
function install_karborclient {
if use_library_from_git "python-karborclient"; then
echo_summary "Installing Karbor Client from git"
git_clone $KARBORCLIENT_REPO $KARBORCLIENT_DIR $KARBORCLIENT_BRANCH
setup_develop $KARBORCLIENT_DIR
fi
}
is_karbor_enabled
if [[ "$Q_ENABLE_KARBOR" == "True" ]]; then
if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
echo summary "Karbor pre-install"
elif [[ "$1" == "stack" && "$2" == "install" ]]; then
install_karborclient
echo_summary "Installing Karbor"
setup_package $KARBOR_DIR -e
_create_karbor_conf_dir
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
echo_summary "Configuring Karbor"
configure_karbor
configure_providers
if [[ "$KARBOR_DEPLOY" == "mod_wsgi" ]]; then
karbor_config_apache_wsgi
elif [[ "$KARBOR_DEPLOY" == "uwsgi" ]]; then
karbor_config_uwsgi
fi
echo export PYTHONPATH=\$PYTHONPATH:$KARBOR_DIR >> $RC_DIR/.localrc.auto
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
echo_summary "Creating Karbor entities for auth service"
create_karbor_accounts
echo_summary "Initializing Karbor Service"
if is_service_enabled $DATABASE_BACKENDS; then
# (re)create karbor database
recreate_database karbor utf8
# Migrate karbor database
$KARBOR_BIN_DIR/karbor-manage db sync
fi
if is_service_enabled karbor-api; then
if [[ "$KARBOR_DEPLOY" == "mod_wsgi" ]]; then
start_karbor_api_mod_wsgi
elif [[ "$KARBOR_DEPLOY" == "uwsgi" ]]; then
start_karbor_api_uwsgi
fi
fi
if is_service_enabled karbor-operationengine; then
run_process karbor-operationengine "$KARBOR_BIN_DIR/karbor-operationengine --config-file $KARBOR_CONF"
fi
if is_service_enabled karbor-protection; then
run_process karbor-protection "$KARBOR_BIN_DIR/karbor-protection --config-file $KARBOR_CONF"
fi
fi
if [[ "$1" == "unstack" ]]; then
if is_service_enabled karbor-api; then
if [[ "$KARBOR_DEPLOY" == "mod_wsgi" ]]; then
stop_karbor_api_mod_wsgi
clean_karbor_api_mod_wsgi
elif [[ "$KARBOR_DEPLOY" == "uwsgi" ]]; then
stop_karbor_api_uwsgi
clean_karbor_api_uwsgi
fi
fi
if is_service_enabled karbor-operationengine; then
stop_process karbor-operationengine
fi
if is_service_enabled karbor-protection; then
stop_process karbor-protection
fi
fi
fi

View File

@ -1,24 +0,0 @@
[provider]
name=EISOO Provider
description=This provider provides data protection for applications with EISOO AnyBackup
id=e4008868-be97-492c-be41-44e50ef2e16f
bank=karbor-swift-bank-plugin
enabled=False
[swift_client]
swift_auth_url=http://127.0.0.1/identity
swift_user=demo
swift_key=password
swift_tenant_name=demo
[swift_bank_plugin]
lease_expire_window=120
lease_renew_window=100
lease_validity_window=100
[eisoo_client]
eisoo_endpoint=https://172.17.238.11:9801
eisoo_app_id=MTQ3NzAyMDg0MC41OQ==
eisoo_app_secret=OEVBM0IyQkQ3OEZGMDIxNTFGRUVDRjMwOTIzM0IyQ0M=

View File

@ -1,14 +0,0 @@
[provider]
name = OS Infra Provider with local file system bank
description = This provider uses local file system as the bank of karbor
id = 6659007d-6f66-4a0f-9cb4-17d6aded0bb9
plugin=karbor-volume-protection-plugin
plugin=karbor-image-protection-plugin
plugin=karbor-server-protection-plugin
bank=karbor-fs-bank-plugin
enabled=True
[file_system_bank_plugin]
file_system_bank_path=/opt/stack/karbor_fs_bank

View File

@ -1,20 +0,0 @@
[provider]
name = OS Infra Provider with volume snapshot plugin
description = This provider uses OpenStack's own services (swift, cinder) as storage
id = 90d5bfea-a259-41e6-80c6-dcfcfcd9d827
plugin=karbor-volume-snapshot-plugin
bank=karbor-swift-bank-plugin
enabled=True
[swift_client]
swift_auth_url=http://127.0.0.1/identity
swift_user=demo
swift_key=password
swift_tenant_name=demo
[swift_bank_plugin]
lease_expire_window=120
lease_renew_window=100
lease_validity_window=100

View File

@ -1,23 +0,0 @@
[provider]
name = OS Infra Provider with S3 compatible storage bank
description = This provider uses S3 compatible storage as the bank of karbor
id = c8e52e4d-0479-43e0-b1a1-318c86798cb8
plugin=karbor-volume-protection-plugin
plugin=karbor-image-protection-plugin
plugin=karbor-server-protection-plugin
bank=karbor-s3-bank-plugin
enabled=False
[s3_client]
s3_endpoint=http://127.0.0.1:7480
s3_access_key=demo
s3_secret_key=password
[s3_bank_plugin]
lease_expire_window=600
lease_renew_window=120
lease_validity_window=100
bank_s3_object_bucket=karbor
bank_s3_lease_bucket=lease

View File

@ -1,42 +0,0 @@
# Git information
KARBOR_REPO=${KARBOR_REPO:-https://opendev.org/openstack/karbor/}
KARBOR_DIR=$DEST/karbor
KARBOR_BRANCH=${KARBOR_BRANCH:-master}
KARBORCLIENT_REPO=${KARBORCLIENT_REPO:-"https://opendev.org/openstack/python-karborclient/"}
KARBORCLIENT_DIR=$DEST/python-karborclient
KARBORCLIENT_BRANCH=${KARBORCLIENT_BRANCH:-master}
# common variables
KARBOR_SERVICE_NAME=karbor
KARBOR_SERVICE_TYPE=data-protect
KARBOR_CONF_DIR=${KARBOR_CONF_DIR:-/etc/karbor}
KARBOR_BIN_DIR=$(get_python_exec_prefix)
KARBOR_CONF=$KARBOR_CONF_DIR/karbor.conf
KARBOR_TRUSTEE_USER=karbor
KARBOR_SCHEDULED_MIN_INTERVAL=60
KARBOR_SCHEDULED_MIN_WINDOW_TIME=20
KARBOR_SCHEDULED_MAX_WINDOW_TIME=30
KARBOR_API_UWSGI_CONF=$KARBOR_CONF_DIR/karbor-uwsgi.ini
KARBOR_API_UWSGI=$KARBOR_BIN_DIR/karbor-wsgi
# karbor rest api
KARBOR_API=$KARBOR_DIR/karbor/cmd/api.py
KARBOR_API_APACHE_TEMPLATE=$KARBOR_DIR/devstack/files/apache-karbor-api.template
KARBOR_API_LISTEN_ADDRESS=${KARBOR_API_LISTEN_ADDRESS:-0.0.0.0}
KARBOR_API_HOST=${KARBOR_API_HOST:-$SERVICE_HOST}
KARBOR_API_PORT=${KARBOR_API_PORT:-8799}
KARBOR_API_PROTOCOL=${KARBOR_API_PROTOCOL:-$SERVICE_PROTOCOL}
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
KARBOR_DEPLOY=uwsgi
KARBOR_API_ENDPOINT="$KARBOR_API_PROTOCOL://$KARBOR_API_HOST/$KARBOR_SERVICE_TYPE/v1/\$(project_id)s"
else
KARBOR_DEPLOY=mod_wsgi
KARBOR_API_ENDPOINT="$KARBOR_API_PROTOCOL://$KARBOR_API_HOST:$KARBOR_API_PORT/v1/\$(project_id)s"
fi
KARBOR_AUTH_CACHE_DIR=${KARBOR_AUTH_CACHE_DIR:-/var/cache/karbor}
export PYTHONPATH=$PYTHONPATH:$KARBOR_DIR

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="370px" style="width:612px;height:370px;" version="1.1" viewBox="0 0 612 370" width="612px">
<defs>
<filter height="300%" id="f1" width="300%" x="-1" y="-1">
<feGaussianBlur result="blurOut" stdDeviation="2.0" />
<feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0" />
<feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3" />
<feBlend in="SourceGraphic" in2="blurOut3" mode="normal" />
</filter>
</defs>
<g>
<text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="175" x="223" y="16.708">Karbor Protectables</text>
<polygon fill="#DDDDDD" points="43.5,28.9531,43.5,104.1406,576.5,104.1406,576.5,28.9531,43.5,28.9531" style="stroke: #000000; stroke-width: 1.0;" />
<text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="474" x="49.5" y="46.9482">This file contains the dependecy between protectables in the default</text>
<text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="514" x="49.5" y="63.2451">distribution of Karbor. The arrows, similar to inheritance point to the parent</text>
<text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="521" x="49.5" y="79.542">since Protectables define what types they depend on so this reflects who is</text>
<text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="216" x="49.5" y="95.8389">responsible for the connection.</text>
<rect fill="#FEFECE" filter="url(#f1)" height="39.9688" style="stroke: #A80036; stroke-width: 1.5;" width="120" x="6" y="321.1406" />
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="114" x="9" y="337.2793">OS::Glance::Image</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="125" y1="345.1094" y2="345.1094" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="125" y1="353.1094" y2="353.1094" />
<rect fill="#FEFECE" filter="url(#f1)" height="39.9688" style="stroke: #A80036; stroke-width: 1.5;" width="110" x="90" y="221.1406" />
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="104" x="93" y="237.2793">OS::Nova::Server</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="91" x2="199" y1="245.1094" y2="245.1094" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="91" x2="199" y1="253.1094" y2="253.1094" />
<rect fill="#FEFECE" filter="url(#f1)" height="39.9688" style="stroke: #A80036; stroke-width: 1.5;" width="140" x="183" y="121.1406" />
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="134" x="186" y="137.2793">OS::Keystone::Project</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="184" x2="322" y1="145.1094" y2="145.1094" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="184" x2="322" y1="153.1094" y2="153.1094" />
<rect fill="#FEFECE" filter="url(#f1)" height="39.9688" style="stroke: #A80036; stroke-width: 1.5;" width="125" x="175.5" y="321.1406" />
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="119" x="178.5" y="337.2793">OS::Cinder::Volume</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="176.5" x2="299.5" y1="345.1094" y2="345.1094" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="176.5" x2="299.5" y1="353.1094" y2="353.1094" />
<rect fill="#FEFECE" filter="url(#f1)" height="39.9688" style="stroke: #A80036; stroke-width: 1.5;" width="146" x="306" y="221.1406" />
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="140" x="309" y="237.2793">OS::Neutron::Topology</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="307" x2="451" y1="245.1094" y2="245.1094" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="307" x2="451" y1="253.1094" y2="253.1094" />
<rect fill="#FEFECE" filter="url(#f1)" height="39.9688" style="stroke: #A80036; stroke-width: 1.5;" width="116" x="487" y="221.1406" />
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="110" x="490" y="237.2793">OS::Manila::Share</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="488" x2="602" y1="245.1094" y2="245.1094" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="488" x2="602" y1="253.1094" y2="253.1094" />
<path d="M116.496,277.4996 C104.7183,292.1104 91.5229,308.4793 81.5754,320.8192 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="111.39,272.6798,129.392,261.5022,122.29,281.4662,111.39,272.6798" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M163.291,160.0376 C129.059,171.5966 93.2034,190.4656 72,221.1406 C51.416,250.9196 56.1704,295.5937 61.2398,320.883 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="161.414,153.2916,182.585,154.1916,165.474,166.6906,161.414,153.2916" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M177.204,276.0761 C191.403,291.0385 207.572,308.0769 219.664,320.8192 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="172.063,280.8282,163.374,261.5022,182.219,271.1911,172.063,280.8282" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M250.003,181.6976 C246.806,223.8996 241.875,288.9852 239.449,321.008 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="243.044,180.9006,251.534,161.4866,257.004,181.9576,243.044,180.9006" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M217.053,174.7586 C200.12,190.1246 180.51,207.9186 166.027,221.0606 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="212.405,169.5246,231.92,161.2686,221.813,179.8926,212.405,169.5246" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M293.425,173.5816 C313.517,189.2086 337.139,207.5816 354.469,221.0606 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="289.083,179.0726,277.593,161.2686,297.678,168.0216,289.083,179.0726" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M328.634,167.5246 C378.412,184.2306 442.531,205.7506 488.013,221.0146 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="326.38,174.1516,309.647,161.1526,330.835,160.8796,326.38,174.1516" style="stroke: #A80036; stroke-width: 1.0;" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -1,208 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="817px" style="width:1216px;height:817px;" version="1.1" viewBox="0 0 1216 817" width="1216px">
<defs>
<filter height="300%" id="f1" width="300%" x="-1" y="-1">
<feGaussianBlur result="blurOut" stdDeviation="2.0" />
<feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0" />
<feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3" />
<feBlend in="SourceGraphic" in2="blurOut3" mode="normal" />
</filter>
</defs>
<g>
<text fill="#000000" font-family="sans-serif" font-size="18" lengthAdjust="spacingAndGlyphs" textLength="172" x="526.5" y="16.708">"Karbor API model"</text>
<rect fill="#FEFECE" filter="url(#f1)" height="86.4141" style="stroke: #A80036; stroke-width: 1.5;" width="136" x="1071" y="519.9531" />
<ellipse cx="1099.95" cy="535.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M1102.9188,541.5938 Q1102.3406,541.8906 1101.7,542.0391 Q1101.0594,542.1875 1100.3563,542.1875 Q1097.8563,542.1875 1096.5359,540.5391 Q1095.2156,538.8906 1095.2156,535.7656 Q1095.2156,532.6406 1096.5359,530.9844 Q1097.8563,529.3281 1100.3563,529.3281 Q1101.0594,529.3281 1101.7078,529.4844 Q1102.3563,529.6406 1102.9188,529.9375 L1102.9188,532.6563 Q1102.2938,532.0781 1101.7,531.8047 Q1101.1063,531.5313 1100.4813,531.5313 Q1099.1375,531.5313 1098.45,532.6016 Q1097.7625,533.6719 1097.7625,535.7656 Q1097.7625,537.8594 1098.45,538.9297 Q1099.1375,540 1100.4813,540 Q1101.1063,540 1101.7,539.7266 Q1102.2938,539.4531 1102.9188,538.875 L1102.9188,541.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="73" x="1117.05" y="540.1074">Protectable</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="1072" x2="1206" y1="551.9531" y2="551.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="1077" y="566.1636">name: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="124" x="1077" y="578.9683">instances: []Resource</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="71" x="1077" y="591.7729">is_root: bool</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="1072" x2="1206" y1="598.3672" y2="598.3672" />
<rect fill="#FEFECE" filter="url(#f1)" height="99.2188" style="stroke: #A80036; stroke-width: 1.5;" width="205" x="821.5" y="708.9531" />
<ellipse cx="890.25" cy="724.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M893.2188,730.5938 Q892.6406,730.8906 892,731.0391 Q891.3594,731.1875 890.6563,731.1875 Q888.1563,731.1875 886.8359,729.5391 Q885.5156,727.8906 885.5156,724.7656 Q885.5156,721.6406 886.8359,719.9844 Q888.1563,718.3281 890.6563,718.3281 Q891.3594,718.3281 892.0078,718.4844 Q892.6563,718.6406 893.2188,718.9375 L893.2188,721.6563 Q892.5938,721.0781 892,720.8047 Q891.4063,720.5313 890.7813,720.5313 Q889.4375,720.5313 888.75,721.6016 Q888.0625,722.6719 888.0625,724.7656 Q888.0625,726.8594 888.75,727.9297 Q889.4375,729 890.7813,729 Q891.4063,729 892,728.7266 Q892.5938,728.4531 893.2188,727.875 L893.2188,730.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="59" x="910.75" y="729.1074">Resource</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="822.5" x2="1025.5" y1="740.9531" y2="740.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="827.5" y="755.1636">id: UUID</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="827.5" y="767.9683">type: ResourceType</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="827.5" y="780.7729">schema: JSONSchema</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="193" x="827.5" y="793.5776">dependent_resources: []Resource</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="822.5" x2="1025.5" y1="800.1719" y2="800.1719" />
<rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="76" x="918" y="224.4531" />
<ellipse cx="933" cy="240.4531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M935.9688,246.0938 Q935.3906,246.3906 934.75,246.5391 Q934.1094,246.6875 933.4063,246.6875 Q930.9063,246.6875 929.5859,245.0391 Q928.2656,243.3906 928.2656,240.2656 Q928.2656,237.1406 929.5859,235.4844 Q930.9063,233.8281 933.4063,233.8281 Q934.1094,233.8281 934.7578,233.9844 Q935.4063,234.1406 935.9688,234.4375 L935.9688,237.1563 Q935.3438,236.5781 934.75,236.3047 Q934.1563,236.0313 933.5313,236.0313 Q932.1875,236.0313 931.5,237.1016 Q930.8125,238.1719 930.8125,240.2656 Q930.8125,242.3594 931.5,243.4297 Q932.1875,244.5 933.5313,244.5 Q934.1563,244.5 934.75,244.2266 Q935.3438,243.9531 935.9688,243.375 L935.9688,246.0938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="44" x="947" y="244.6074">Trigger</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="919" x2="993" y1="256.4531" y2="256.4531" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="919" x2="993" y1="264.4531" y2="264.4531" />
<rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="113" x="801.5" y="355.9531" />
<ellipse cx="816.5" cy="371.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M819.4688,377.5938 Q818.8906,377.8906 818.25,378.0391 Q817.6094,378.1875 816.9063,378.1875 Q814.4063,378.1875 813.0859,376.5391 Q811.7656,374.8906 811.7656,371.7656 Q811.7656,368.6406 813.0859,366.9844 Q814.4063,365.3281 816.9063,365.3281 Q817.6094,365.3281 818.2578,365.4844 Q818.9063,365.6406 819.4688,365.9375 L819.4688,368.6563 Q818.8438,368.0781 818.25,367.8047 Q817.6563,367.5313 817.0313,367.5313 Q815.6875,367.5313 815,368.6016 Q814.3125,369.6719 814.3125,371.7656 Q814.3125,373.8594 815,374.9297 Q815.6875,376 817.0313,376 Q817.6563,376 818.25,375.7266 Q818.8438,375.4531 819.4688,374.875 L819.4688,377.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="81" x="830.5" y="376.1074">TimedTrigger</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="802.5" x2="913.5" y1="387.9531" y2="387.9531" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="802.5" x2="913.5" y1="395.9531" y2="395.9531" />
<rect fill="#FEFECE" filter="url(#f1)" height="48" style="stroke: #A80036; stroke-width: 1.5;" width="111" x="949.5" y="355.9531" />
<ellipse cx="964.5" cy="371.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M967.4688,377.5938 Q966.8906,377.8906 966.25,378.0391 Q965.6094,378.1875 964.9063,378.1875 Q962.4063,378.1875 961.0859,376.5391 Q959.7656,374.8906 959.7656,371.7656 Q959.7656,368.6406 961.0859,366.9844 Q962.4063,365.3281 964.9063,365.3281 Q965.6094,365.3281 966.2578,365.4844 Q966.9063,365.6406 967.4688,365.9375 L967.4688,368.6563 Q966.8438,368.0781 966.25,367.8047 Q965.6563,367.5313 965.0313,367.5313 Q963.6875,367.5313 963,368.6016 Q962.3125,369.6719 962.3125,371.7656 Q962.3125,373.8594 963,374.9297 Q963.6875,376 965.0313,376 Q965.6563,376 966.25,375.7266 Q966.8438,375.4531 967.4688,374.875 L967.4688,377.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="79" x="978.5" y="376.1074">EventTrigger</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="950.5" x2="1059.5" y1="387.9531" y2="387.9531" />
<line style="stroke: #A80036; stroke-width: 1.5;" x1="950.5" x2="1059.5" y1="395.9531" y2="395.9531" />
<rect fill="#FEFECE" filter="url(#f1)" height="112.0234" style="stroke: #A80036; stroke-width: 1.5;" width="132" x="6" y="506.9531" />
<ellipse cx="34.5" cy="522.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M37.4688,528.5938 Q36.8906,528.8906 36.25,529.0391 Q35.6094,529.1875 34.9063,529.1875 Q32.4063,529.1875 31.0859,527.5391 Q29.7656,525.8906 29.7656,522.7656 Q29.7656,519.6406 31.0859,517.9844 Q32.4063,516.3281 34.9063,516.3281 Q35.6094,516.3281 36.2578,516.4844 Q36.9063,516.6406 37.4688,516.9375 L37.4688,519.6563 Q36.8438,519.0781 36.25,518.8047 Q35.6563,518.5313 35.0313,518.5313 Q33.6875,518.5313 33,519.6016 Q32.3125,520.6719 32.3125,522.7656 Q32.3125,524.8594 33,525.9297 Q33.6875,527 35.0313,527 Q35.6563,527 36.25,526.7266 Q36.8438,526.4531 37.4688,525.875 L37.4688,528.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="70" x="51.5" y="527.1074">Checkpoint</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="137" y1="538.9531" y2="538.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="12" y="553.1636">id: UUID</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="12" y="565.9683">tenant_id: UUID</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="113" x="12" y="578.7729">plan: ProtectionPlan</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="77" x="12" y="591.5776">status: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="120" x="12" y="604.3823">started_at: DateTime</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="7" x2="137" y1="610.9766" y2="610.9766" />
<rect fill="#FEFECE" filter="url(#f1)" height="137.6328" style="stroke: #A80036; stroke-width: 1.5;" width="234" x="277" y="493.9531" />
<ellipse cx="343.75" cy="509.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M346.7188,515.5938 Q346.1406,515.8906 345.5,516.0391 Q344.8594,516.1875 344.1563,516.1875 Q341.6563,516.1875 340.3359,514.5391 Q339.0156,512.8906 339.0156,509.7656 Q339.0156,506.6406 340.3359,504.9844 Q341.6563,503.3281 344.1563,503.3281 Q344.8594,503.3281 345.5078,503.4844 Q346.1563,503.6406 346.7188,503.9375 L346.7188,506.6563 Q346.0938,506.0781 345.5,505.8047 Q344.9063,505.5313 344.2813,505.5313 Q342.9375,505.5313 342.25,506.6016 Q341.5625,507.6719 341.5625,509.7656 Q341.5625,511.8594 342.25,512.9297 Q342.9375,514 344.2813,514 Q344.9063,514 345.5,513.7266 Q346.0938,513.4531 346.7188,512.875 L346.7188,515.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="92" x="364.25" y="514.1074">ProtectionPlan</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="278" x2="510" y1="525.9531" y2="525.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="283" y="540.1636">id: UUID</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="114" x="283" y="552.9683">is_enabled: boolean</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="283" y="565.7729">name: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="112" x="283" y="578.5776">status: ePlanStatus</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="127" x="283" y="591.3823">resources: []Resource</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="222" x="283" y="604.187">protection_provider: ProtectionProvider</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="95" x="283" y="616.9917">parameters: dict</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="278" x2="510" y1="623.5859" y2="623.5859" />
<rect fill="#FEFECE" filter="url(#f1)" height="99.2188" style="stroke: #A80036; stroke-width: 1.5;" width="157" x="461.5" y="41.9531" />
<ellipse cx="476.5" cy="57.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M479.4688,63.5938 Q478.8906,63.8906 478.25,64.0391 Q477.6094,64.1875 476.9063,64.1875 Q474.4063,64.1875 473.0859,62.5391 Q471.7656,60.8906 471.7656,57.7656 Q471.7656,54.6406 473.0859,52.9844 Q474.4063,51.3281 476.9063,51.3281 Q477.6094,51.3281 478.2578,51.4844 Q478.9063,51.6406 479.4688,51.9375 L479.4688,54.6563 Q478.8438,54.0781 478.25,53.8047 Q477.6563,53.5313 477.0313,53.5313 Q475.6875,53.5313 475,54.6016 Q474.3125,55.6719 474.3125,57.7656 Q474.3125,59.8594 475,60.9297 Q475.6875,62 477.0313,62 Q477.6563,62 478.25,61.7266 Q478.8438,61.4531 479.4688,60.875 L479.4688,63.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="125" x="490.5" y="62.1074">AutomaticOperation</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="462.5" x2="617.5" y1="73.9531" y2="73.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="467.5" y="88.1636">id: UUID</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="467.5" y="100.9683">name: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="104" x="467.5" y="113.7729">description: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="467.5" y="126.5776">tenant_id: UUID</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="462.5" x2="617.5" y1="133.1719" y2="133.1719" />
<rect fill="#FEFECE" filter="url(#f1)" height="66.7422" style="stroke: #A80036; stroke-width: 1.5;" width="160" x="460" y="214.9531" />
<ellipse cx="475" cy="233.9219" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M477.9688,239.5625 Q477.3906,239.8594 476.75,240.0078 Q476.1094,240.1563 475.4063,240.1563 Q472.9063,240.1563 471.5859,238.5078 Q470.2656,236.8594 470.2656,233.7344 Q470.2656,230.6094 471.5859,228.9531 Q472.9063,227.2969 475.4063,227.2969 Q476.1094,227.2969 476.7578,227.4531 Q477.4063,227.6094 477.9688,227.9063 L477.9688,230.625 Q477.3438,230.0469 476.75,229.7734 Q476.1563,229.5 475.5313,229.5 Q474.1875,229.5 473.5,230.5703 Q472.8125,231.6406 472.8125,233.7344 Q472.8125,235.8281 473.5,236.8984 Q474.1875,237.9688 475.5313,237.9688 Q476.1563,237.9688 476.75,237.6953 Q477.3438,237.4219 477.9688,236.8438 L477.9688,239.5625 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="66" x="520" y="231.0918">«abstract»</text>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="128" x="489" y="245.0605">ScheduledOperation</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="461" x2="619" y1="252.8906" y2="252.8906" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="87" x="466" y="267.1011">trigger: Trigger</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="461" x2="619" y1="273.6953" y2="273.6953" />
<rect fill="#FEFECE" filter="url(#f1)" height="60.8047" style="stroke: #A80036; stroke-width: 1.5;" width="188" x="300" y="349.4531" />
<ellipse cx="353.25" cy="365.4531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M356.2188,371.0938 Q355.6406,371.3906 355,371.5391 Q354.3594,371.6875 353.6563,371.6875 Q351.1563,371.6875 349.8359,370.0391 Q348.5156,368.3906 348.5156,365.2656 Q348.5156,362.1406 349.8359,360.4844 Q351.1563,358.8281 353.6563,358.8281 Q354.3594,358.8281 355.0078,358.9844 Q355.6563,359.1406 356.2188,359.4375 L356.2188,362.1563 Q355.5938,361.5781 355,361.3047 Q354.4063,361.0313 353.7813,361.0313 Q352.4375,361.0313 351.75,362.1016 Q351.0625,363.1719 351.0625,365.2656 Q351.0625,367.3594 351.75,368.4297 Q352.4375,369.5 353.7813,369.5 Q354.4063,369.5 355,369.2266 Q355.5938,368.9531 356.2188,368.375 L356.2188,371.0938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="73" x="373.75" y="369.6074">BackupPlan</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="301" x2="487" y1="381.4531" y2="381.4531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="176" x="306" y="395.6636">protection_plan: ProtectionPlan</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="301" x2="487" y1="402.2578" y2="402.2578" />
<rect fill="#FEFECE" filter="url(#f1)" height="73.6094" style="stroke: #A80036; stroke-width: 1.5;" width="234" x="523" y="342.9531" />
<ellipse cx="576.75" cy="358.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M579.7188,364.5938 Q579.1406,364.8906 578.5,365.0391 Q577.8594,365.1875 577.1563,365.1875 Q574.6563,365.1875 573.3359,363.5391 Q572.0156,361.8906 572.0156,358.7656 Q572.0156,355.6406 573.3359,353.9844 Q574.6563,352.3281 577.1563,352.3281 Q577.8594,352.3281 578.5078,352.4844 Q579.1563,352.6406 579.7188,352.9375 L579.7188,355.6563 Q579.0938,355.0781 578.5,354.8047 Q577.9063,354.5313 577.2813,354.5313 Q575.9375,354.5313 575.25,355.6016 Q574.5625,356.6719 574.5625,358.7656 Q574.5625,360.8594 575.25,361.9297 Q575.9375,363 577.2813,363 Q577.9063,363 578.5,362.7266 Q579.0938,362.4531 579.7188,361.875 L579.7188,364.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="597.25" y="363.1074">DeleteCheckpoints</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="524" x2="756" y1="374.9531" y2="374.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="529" y="389.1636">query: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="222" x="529" y="401.9683">protection_provider: ProtectionProvider</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="524" x2="756" y1="408.5625" y2="408.5625" />
<rect fill="#FEFECE" filter="url(#f1)" height="124.8281" style="stroke: #A80036; stroke-width: 1.5;" width="312" x="581" y="500.4531" />
<ellipse cx="674.75" cy="516.4531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M677.7188,522.0938 Q677.1406,522.3906 676.5,522.5391 Q675.8594,522.6875 675.1563,522.6875 Q672.6563,522.6875 671.3359,521.0391 Q670.0156,519.3906 670.0156,516.2656 Q670.0156,513.1406 671.3359,511.4844 Q672.6563,509.8281 675.1563,509.8281 Q675.8594,509.8281 676.5078,509.9844 Q677.1563,510.1406 677.7188,510.4375 L677.7188,513.1563 Q677.0938,512.5781 676.5,512.3047 Q675.9063,512.0313 675.2813,512.0313 Q673.9375,512.0313 673.25,513.1016 Q672.5625,514.1719 672.5625,516.2656 Q672.5625,518.3594 673.25,519.4297 Q673.9375,520.5 675.2813,520.5 Q675.9063,520.5 676.5,520.2266 Q677.0938,519.9531 677.7188,519.375 L677.7188,522.0938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="695.25" y="520.6074">ProtectionProvider</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="582" x2="892" y1="532.4531" y2="532.4531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="73" x="587" y="546.6636">name: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="104" x="587" y="559.4683">description: string</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="300" x="587" y="572.2729">extended_info_schema: [ResourceType]JSONSchema</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="263" x="587" y="585.0776">options_schema: [ResourceType]JSONSchema</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="260" x="587" y="597.8823">restore_options: [ResourceType]JSONSchema</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="145" x="587" y="610.687">checkpoints: []Checkpoint</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="582" x2="892" y1="617.2813" y2="617.2813" />
<rect fill="#FEFECE" filter="url(#f1)" height="73.6094" style="stroke: #A80036; stroke-width: 1.5;" width="108" x="928" y="525.9531" />
<ellipse cx="943" cy="541.9531" fill="#EB937F" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M947.1094,547.9531 L939.3906,547.9531 L939.3906,535.5625 L947.1094,535.5625 L947.1094,537.7188 L941.8438,537.7188 L941.8438,540.3906 L946.6094,540.3906 L946.6094,542.5469 L941.8438,542.5469 L941.8438,545.7969 L947.1094,545.7969 L947.1094,547.9531 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="76" x="957" y="546.1074">ePlanStatus</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="929" x2="1035" y1="557.9531" y2="557.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="41" x="934" y="572.1636">started</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="63" x="934" y="584.9683">suspended</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="929" x2="1035" y1="591.5625" y2="591.5625" />
<rect fill="#FEFECE" filter="url(#f1)" height="60.8047" style="stroke: #A80036; stroke-width: 1.5;" width="122" x="931" y="60.9531" />
<ellipse cx="946" cy="76.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M948.9688,82.5938 Q948.3906,82.8906 947.75,83.0391 Q947.1094,83.1875 946.4063,83.1875 Q943.9063,83.1875 942.5859,81.5391 Q941.2656,79.8906 941.2656,76.7656 Q941.2656,73.6406 942.5859,71.9844 Q943.9063,70.3281 946.4063,70.3281 Q947.1094,70.3281 947.7578,70.4844 Q948.4063,70.6406 948.9688,70.9375 L948.9688,73.6563 Q948.3438,73.0781 947.75,72.8047 Q947.1563,72.5313 946.5313,72.5313 Q945.1875,72.5313 944.5,73.6016 Q943.8125,74.6719 943.8125,76.7656 Q943.8125,78.8594 944.5,79.9297 Q945.1875,81 946.5313,81 Q947.1563,81 947.75,80.7266 Q948.3438,80.4531 948.9688,79.875 L948.9688,82.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="960" y="81.1074">RestoreTarget</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="932" x2="1052" y1="92.9531" y2="92.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="98" x="937" y="107.1636">keystone_uri: URI</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="932" x2="1052" y1="113.7578" y2="113.7578" />
<rect fill="#FEFECE" filter="url(#f1)" height="124.8281" style="stroke: #A80036; stroke-width: 1.5;" width="171" x="653.5" y="28.9531" />
<ellipse cx="710.25" cy="44.9531" fill="#ADD1B2" rx="11" ry="11" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M713.2188,50.5938 Q712.6406,50.8906 712,51.0391 Q711.3594,51.1875 710.6563,51.1875 Q708.1563,51.1875 706.8359,49.5391 Q705.5156,47.8906 705.5156,44.7656 Q705.5156,41.6406 706.8359,39.9844 Q708.1563,38.3281 710.6563,38.3281 Q711.3594,38.3281 712.0078,38.4844 Q712.6563,38.6406 713.2188,38.9375 L713.2188,41.6563 Q712.5938,41.0781 712,40.8047 Q711.4063,40.5313 710.7813,40.5313 Q709.4375,40.5313 708.75,41.6016 Q708.0625,42.6719 708.0625,44.7656 Q708.0625,46.8594 708.75,47.9297 Q709.4375,49 710.7813,49 Q711.4063,49 712,48.7266 Q712.5938,48.4531 713.2188,47.875 L713.2188,50.5938 Z "
/>
<text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="49" x="730.75" y="49.1074">Restore</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="654.5" x2="823.5" y1="60.9531" y2="60.9531" />
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="45" x="659.5" y="75.1636">id: UUID</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="90" x="659.5" y="87.9683">project_id: UUID</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="123" x="659.5" y="100.7729">target: RestoreTarget</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="159" x="659.5" y="113.5776">provider: ProtectionProvider</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="130" x="659.5" y="126.3823">checkpoint: Checkpoint</text>
<text fill="#000000" font-family="sans-serif" font-size="11" lengthAdjust="spacingAndGlyphs" textLength="99" x="659.5" y="139.187">started_at: string</text>
<line style="stroke: #A80036; stroke-width: 1.5;" x1="654.5" x2="823.5" y1="145.7813" y2="145.7813" />
<path d="M1092.08,606.1781 C1059.66,635.3621 1016.31,674.3731 981.76,705.4691 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="978.019,708.8356,987.3838,705.7859,981.7347,705.4899,982.0307,699.8408,978.019,708.8356" style="stroke: #A80036; stroke-width: 1.0;" />
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="25" x="1027" y="675.02">lists</text>
<path d="M926.167,288.8751 C909.672,310.6721 889.738,337.0141 875.699,355.5651 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="920.829,284.3291,938.48,272.6051,931.993,292.7771,920.829,284.3291" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M971.904,291.4851 C979.949,312.7461 989.409,337.7481 996.15,355.5651 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="965.291,293.7881,964.76,272.6051,978.385,288.8331,965.291,293.7881" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M151.351,562.9531 C185.2,562.9531 225.597,562.9531 263.627,562.9531 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="276.965,562.9531,267.965,558.9531,271.965,562.9531,267.965,566.9531,276.965,562.9531" style="stroke: #A80036; stroke-width: 1.0;" />
<line style="stroke: #A80036; stroke-width: 1.0;" x1="271.965" x2="263.965" y1="562.9531" y2="562.9531" />
<polygon fill="#A80036" points="138.328,562.9531,144.328,566.9531,150.328,562.9531,144.328,558.9531,138.328,562.9531" style="stroke: #A80036; stroke-width: 1.0;" />
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="102" x="156.5" y="556.02">stores a copy of</text>
<path d="M540,161.1721 C540,179.7811 540,199.0751 540,214.6871 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="533,161.0711,540,141.0711,547,161.0711,533,161.0711" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M633.395,248.4531 C723.017,248.4531 853.91,248.4531 917.911,248.4531 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="620.209,248.4531,626.209,252.4531,632.209,248.4531,626.209,244.4531,620.209,248.4531" style="stroke: #A80036; stroke-width: 1.0;" />
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="261" x="638.5" y="241.52">when should the operation should trigger</text>
<path d="M487.954,295.6171 C467.775,313.5151 445.264,333.4831 427.335,349.3851 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="483.551,290.1661,503.158,282.1311,492.841,300.6401,483.551,290.1661" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M394,424.0871 C394,441.0621 394,461.1331 394,480.6291 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="394,493.6541,398,484.6541,394,488.6541,390,484.6541,394,493.6541" style="stroke: #A80036; stroke-width: 1.0;" />
<line style="stroke: #A80036; stroke-width: 1.0;" x1="394" x2="394" y1="488.6541" y2="480.6541" />
<polygon fill="#A80036" points="394,410.8411,390,416.8411,394,422.8411,398,416.8411,394,410.8411" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M577.576,298.1141 C588.975,312.8761 601.295,328.8301 611.953,342.6321 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="none" points="571.918,302.2391,565.234,282.1311,582.998,293.6831,571.918,302.2391" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M583.446,496.0381 C488.99,463.5821 365.717,436.8831 257.5,463.9531 C219.968,473.3421 181.718,491.9251 149.778,510.4801 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="138.309,517.2981,148.0892,516.1374,142.6069,514.7431,144.0012,509.2608,138.309,517.2981" style="stroke: #A80036; stroke-width: 1.0;" />
<line style="stroke: #A80036; stroke-width: 1.0;" x1="142.6069" x2="149.484" y1="514.7431" y2="510.6551" />
<polygon fill="none" points="595.99,500.4401,591.6528,494.6792,584.6668,496.4671,589.004,502.228,595.99,500.4401" style="stroke: #A80036; stroke-width: 1.0;" />
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="25" x="258.5" y="460.02">lists</text>
<path d="M523.613,616.8381 C536.882,622.0321 550.189,627.1521 563,631.9531 C644.62,662.5411 737.53,694.7821 808.652,718.9267 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="821.22,723.1859,813.9802,716.5087,816.4846,721.581,811.4123,724.0854,821.22,723.1859" style="stroke: #A80036; stroke-width: 1.0;" />
<line style="stroke: #A80036; stroke-width: 1.0;" x1="816.4846" x2="808.9075" y1="721.581" y2="719.0133" />
<polygon fill="#A80036" points="511.453,612.0541,515.5717,617.9733,522.6196,616.448,518.5009,610.5288,511.453,612.0541" style="stroke: #A80036; stroke-width: 1.0;" />
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="73" x="693" y="675.02">aggregates</text>
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="8" x="518.854" y="611.6713">1</text>
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="10" x="803.6417" y="717.2427">N</text>
<path d="M511.236,562.9531 C532.736,562.9531 554.235,562.9531 575.735,562.9531 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="580.906,562.9531,571.906,558.9531,575.906,562.9531,571.906,566.9531,580.906,562.9531" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M491.882,493.8481 C519.307,478.1021 549.994,463.6161 580.5,455.4531 C714.454,419.6111 766.938,396.6081 892.5,455.4531 C921.585,469.0841 944.507,497.3261 959.871,521.4431 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="962.651,525.8941,961.2754,516.1418,960.002,521.6535,954.4904,520.3802,962.651,525.8941" style="stroke: #A80036; stroke-width: 1.0;" />
<path d="M837.91,91.4531 C864.464,91.4531 892.723,91.4531 917.691,91.4531 " fill="none" style="stroke: #A80036; stroke-width: 1.0;" />
<polygon fill="#A80036" points="930.806,91.4531,921.806,87.4531,925.806,91.4531,921.806,95.4531,930.806,91.4531" style="stroke: #A80036; stroke-width: 1.0;" />
<line style="stroke: #A80036; stroke-width: 1.0;" x1="925.806" x2="917.806" y1="91.4531" y2="91.4531" />
<polygon fill="#A80036" points="824.654,91.4531,830.654,95.4531,836.654,91.4531,830.654,87.4531,824.654,91.4531" style="stroke: #A80036; stroke-width: 1.0;" />
<text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="70" x="842.75" y="84.52">restores to</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

View File

@ -1,604 +0,0 @@
=======================
Using the Karbor Client
=======================
Environment Variables
---------------------
To use cinder or karbor client, we should provide Keystone authentication
variables.
.. code-block:: console
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://10.229.47.230/identity/
Provider
--------
List the provider
.. code-block:: console
karbor provider-list
+--------------------------------------+-------------------+-------------------------------------------------------------------------------------+
| Id | Name | Description |
+--------------------------------------+-------------------+-------------------------------------------------------------------------------------+
| b766f37c-d011-4026-8228-28730d734a3f | No-Op Provider | This provider does nothing for each protect and restore operation. Used for testing |
| cf56bd3e-97a7-4078-b6d5-f36246333fd9 | OS Infra Provider | This provider uses OpenStack's own services (swift, cinder) as storage |
| e4008868-be97-492c-be41-44e50ef2e16f | EISOO Provider | This provider provides data protection for applications with EISOO AnyBackup |
+--------------------------------------+-------------------+-------------------------------------------------------------------------------------+
Show the provider information
.. code-block:: console
karbor provider-show cf56bd3e-97a7-4078-b6d5-f36246333fd9
+----------------------+---------------------------------------------------------------------------------------------+
| Property | Value |
+----------------------+---------------------------------------------------------------------------------------------+
| description | This provider uses OpenStack's own services (swift, cinder) as storage |
| extended_info_schema | { |
| | "options_schema": { |
| | "OS::Cinder::Volume": { |
| | "properties": { |
| | "backup_mode": { |
| | "default": "auto", |
| | "description": "The backup mode.", |
| | "enum": [ |
| | "full", |
| | "incremental", |
| | "auto" |
| | ], |
| | "title": "Backup Mode", |
| | "type": "string" |
| | }, |
| | "backup_name": { |
| | "description": "The name of the backup.", |
| | "title": "Backup Name", |
| | "type": "string" |
| | }, |
| | "container": { |
| | "description": "The container which been chosen.", |
| | "title": "Container", |
| | "type": "string" |
| | }, |
| | "description": { |
| | "description": "The description of the volume.", |
| | "title": "Description", |
| | "type": "string" |
| | }, |
| | "force": { |
| | "default": false, |
| | "description": "Whether to backup, even if the volumeis attached", |
| | "title": "Force", |
| | "type": "boolean" |
| | } |
| | }, |
| | "required": [ |
| | "backup_name", |
| | "backup_mode", |
| | "container", |
| | "force" |
| | ], |
| | "title": "Cinder Protection Options", |
| | "type": "object" |
| | }, |
| | "OS::Glance::Image": { |
| | "properties": { |
| | "backup_name": { |
| | "default": null, |
| | "description": "The name of the backup.", |
| | "title": "Backup Name", |
| | "type": "string" |
| | } |
| | }, |
| | "required": [], |
| | "title": "Image Protection Options", |
| | "type": "object" |
| | }, |
| | "OS::Nova::Server": { |
| | "properties": {}, |
| | "required": [], |
| | "title": "Server Protection Options", |
| | "type": "object" |
| | } |
| | }, |
| | "restore_schema": { |
| | "OS::Cinder::Volume": { |
| | "properties": { |
| | "restore_description": { |
| | "default": null, |
| | "description": "The description of the restored volume.", |
| | "title": "Restore Description", |
| | "type": "string" |
| | }, |
| | "restore_name": { |
| | "default": null, |
| | "description": "The name of the restored volume.", |
| | "title": "Restore Name", |
| | "type": "string" |
| | }, |
| | "volume_id": { |
| | "description": "The target volume ID to restore to.", |
| | "title": "Volume ID", |
| | "type": "string" |
| | } |
| | }, |
| | "title": "Cinder Protection Restore", |
| | "type": "object" |
| | }, |
| | "OS::Glance::Image": { |
| | "properties": { |
| | "restore_name": { |
| | "description": "The name of the restore image", |
| | "title": "Restore Image Name", |
| | "type": "string" |
| | } |
| | }, |
| | "required": [ |
| | "backup_name" |
| | ], |
| | "title": "Image Protection Restore", |
| | "type": "object" |
| | }, |
| | "OS::Nova::Server": { |
| | "properties": { |
| | "restore_name": { |
| | "description": "The name of the restore server", |
| | "title": "Restore Server Name", |
| | "type": "string" |
| | } |
| | }, |
| | "required": [ |
| | "restore_name" |
| | ], |
| | "title": "Server Protection Restore", |
| | "type": "object" |
| | } |
| | }, |
| | "saved_info_schema": { |
| | "OS::Cinder::Volume": { |
| | "properties": { |
| | "fail_reason": { |
| | "description": "The reason for the failure status of the backup.", |
| | "title": "Fail Reason", |
| | "type": "string" |
| | }, |
| | "is_incremental": { |
| | "description": "The type of the backup, True is incremental and False is full.", |
| | "title": "Is Incremental", |
| | "type": "boolean" |
| | }, |
| | "name": { |
| | "description": "The name for this backup.", |
| | "title": "Name", |
| | "type": "string" |
| | }, |
| | "progress": { |
| | "constraint": { |
| | "max": 1, |
| | "min": 0 |
| | }, |
| | "description": "The current operation progress for this backup.", |
| | "title": "Progress", |
| | "type": "number" |
| | }, |
| | "size": { |
| | "description": "The size of the backup, in GB.", |
| | "title": "Size", |
| | "type": "integer" |
| | }, |
| | "status": { |
| | "description": "The backup status, such as available.", |
| | "enum": [ |
| | "creating", |
| | "available", |
| | "deleting", |
| | "error", |
| | "restoring", |
| | "error_restoring" |
| | ], |
| | "title": "Status", |
| | "type": "string" |
| | }, |
| | "volume_id": { |
| | "description": "The ID of the volume from which the backup was created.", |
| | "title": "Volume ID", |
| | "type": "string" |
| | } |
| | }, |
| | "required": [ |
| | "name", |
| | "status", |
| | "progress", |
| | "fail_reason", |
| | "size", |
| | "volume_id" |
| | ], |
| | "title": "Cinder Protection Saved Info", |
| | "type": "object" |
| | }, |
| | "OS::Glance::Image": { |
| | "properties": { |
| | "image_metadata": { |
| | "description": "To save disk_format and container_format", |
| | "title": "Image Metadata", |
| | "type": "image" |
| | } |
| | }, |
| | "required": [ |
| | "image_metadata" |
| | ], |
| | "title": "Image Protection Saved Info", |
| | "type": "object" |
| | }, |
| | "OS::Nova::Server": { |
| | "properties": { |
| | "attach_metadata": { |
| | "description": "The devices of attached volumes", |
| | "title": "Attached Volume Metadata", |
| | "type": "object" |
| | }, |
| | "snapshot_metadata": { |
| | "description": "The metadata of snapshot", |
| | "title": "Snapshot Metadata", |
| | "type": "object" |
| | } |
| | }, |
| | "required": [ |
| | "attached_metadata", |
| | "snapshot_metadata" |
| | ], |
| | "title": "Server Protection Saved Info", |
| | "type": "object" |
| | } |
| | } |
| | } |
| id | cf56bd3e-97a7-4078-b6d5-f36246333fd9 |
| name | OS Infra Provider |
+----------------------+---------------------------------------------------------------------------------------------+
Protectables
------------
Use cinder client to create volumes
.. code-block:: console
cinder create 1 --name volume1
cinder create 1 --name volume2
cinder list
+--------------------------------------+-----------+---------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+---------+------+-------------+----------+-------------+
| 12e2abc6-f20b-430d-9b36-1a6befd23b6c | available | volume2 | 1 | lvmdriver-1 | false | |
| 700495ee-38e6-41a0-963f-f3f9a24c0f75 | available | volume1 | 1 | lvmdriver-1 | false | |
+--------------------------------------+-----------+---------+------+-------------+----------+-------------+
List the protectable resources
.. code-block:: console
karbor protectable-list
+-----------------------+
| Protectable type |
+-----------------------+
| OS::Cinder::Volume |
| OS::Glance::Image |
| OS::Keystone::Project |
| OS::Nova::Server |
+-----------------------+
karbor protectable-show OS::Nova::Server
+-----------------+-----------------------------------------------+
| Property | Value |
+-----------------+-----------------------------------------------+
| dependent_types | [u'OS::Cinder::Volume', u'OS::Glance::Image'] |
| name | OS::Nova::Server |
+-----------------+-----------------------------------------------+
karbor protectable-list-instances OS::Cinder::Volume
+--------------------------------------+--------------------+---------------------+
| Id | Type | Dependent resources |
+--------------------------------------+--------------------+---------------------+
| 12e2abc6-f20b-430d-9b36-1a6befd23b6c | OS::Cinder::Volume | [] |
| 700495ee-38e6-41a0-963f-f3f9a24c0f75 | OS::Cinder::Volume | [] |
+--------------------------------------+--------------------+---------------------+
karbor protectable-show-instance OS::Cinder::Volume 12e2abc6-f20b-430d-9b36-1a6befd23b6c
+---------------------+--------------------------------------+
| Property | Value |
+---------------------+--------------------------------------+
| dependent_resources | [] |
| id | 12e2abc6-f20b-430d-9b36-1a6befd23b6c |
| name | volume2 |
| type | OS::Cinder::Volume |
+---------------------+--------------------------------------+
Plans
-----
Create a protection plan with a provider and resources
.. code-block:: console
karbor plan-create 'OS volumes protection plan.' 'cf56bd3e-97a7-4078-b6d5-f36246333fd9' '12e2abc6-f20b-430d-9b36-1a6befd23b6c'='OS::Cinder::Volume'='volume2','700495ee-38e6-41a0-963f-f3f9a24c0f75'='OS::Cinder::Volume'='volume1'
+-------------+----------------------------------------------------+
| Property | Value |
+-------------+----------------------------------------------------+
| description | None |
| id | ef8b83f3-d0c4-48ec-8949-5c72bbf14103 |
| name | OS volumes protection plan. |
| parameters | {} |
| provider_id | cf56bd3e-97a7-4078-b6d5-f36246333fd9 |
| resources | [ |
| | { |
| | "id": "12e2abc6-f20b-430d-9b36-1a6befd23b6c", |
| | "name": "volume2", |
| | "type": "OS::Cinder::Volume" |
| | }, |
| | { |
| | "id": "700495ee-38e6-41a0-963f-f3f9a24c0f75", |
| | "name": "volume1", |
| | "type": "OS::Cinder::Volume" |
| | } |
| | ] |
| status | suspended |
+-------------+----------------------------------------------------+
Checkpoints
-----------
Execute a protect operation manually with a plan
.. code-block:: console
karbor checkpoint-create cf56bd3e-97a7-4078-b6d5-f36246333fd9 ef8b83f3-d0c4-48ec-8949-5c72bbf14103
+-----------------+------------------------------------------------------+
| Property | Value |
+-----------------+------------------------------------------------------+
| created_at | None |
| extra_info | {"created_by": "manual"} |
| id | 80f6154f-cc43-441f-8841-35ae23e17f4f |
| project_id | 31478a6f980d4e73a3bdac3ad04a3605 |
| protection_plan | { |
| | "id": "ef8b83f3-d0c4-48ec-8949-5c72bbf14103", |
| | "name": "OS volumes protection plan.", |
| | "resources": [ |
| | { |
| | "id": "12e2abc6-f20b-430d-9b36-1a6befd23b6c", |
| | "name": "volume2", |
| | "type": "OS::Cinder::Volume" |
| | }, |
| | { |
| | "id": "700495ee-38e6-41a0-963f-f3f9a24c0f75", |
| | "name": "volume1", |
| | "type": "OS::Cinder::Volume" |
| | } |
| | ] |
| | } |
| resource_graph | None |
| status | protecting |
+-----------------+------------------------------------------------------+
# check the protect result
cinder backup-list
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
| ID | Volume ID | Status | Name | Size | Object Count | Container |
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
| becf53cd-12f8-424d-9b08-54fbffe9495a | 700495ee-38e6-41a0-963f-f3f9a24c0f75 | available | - | 1 | 22 | volumebackups |
| c35317f4-df2a-4c7d-9f36-6495c563a5bf | 12e2abc6-f20b-430d-9b36-1a6befd23b6c | available | - | 1 | 22 | volumebackups |
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
karbor checkpoint-show cf56bd3e-97a7-4078-b6d5-f36246333fd9 80f6154f-cc43-441f-8841-35ae23e17f4f
+-----------------+-----------------------------------------------------------+
| Property | Value |
+-----------------+-----------------------------------------------------------+
| created_at | 2017-02-13 |
| extra_info | {"created_by": "manual"} |
| id | 80f6154f-cc43-441f-8841-35ae23e17f4f |
| project_id | 31478a6f980d4e73a3bdac3ad04a3605 |
| protection_plan | { |
| | "id": "ef8b83f3-d0c4-48ec-8949-5c72bbf14103", |
| | "name": "OS volumes protection plan.", |
| | "provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9", |
| | "resources": [ |
| | { |
| | "id": "12e2abc6-f20b-430d-9b36-1a6befd23b6c", |
| | "name": "volume2", |
| | "type": "OS::Cinder::Volume" |
| | }, |
| | { |
| | "id": "700495ee-38e6-41a0-963f-f3f9a24c0f75", |
| | "name": "volume1", |
| | "type": "OS::Cinder::Volume" |
| | } |
| | ] |
| | } |
| resource_graph | [ |
| | { |
| | "0x0": [ |
| | "OS::Cinder::Volume", |
| | "700495ee-38e6-41a0-963f-f3f9a24c0f75", |
| | "volume1" |
| | ], |
| | "0x1": [ |
| | "OS::Cinder::Volume", |
| | "12e2abc6-f20b-430d-9b36-1a6befd23b6c", |
| | "volume2" |
| | ] |
| | }, |
| | [] |
| | ] |
| status | available |
+-----------------+-----------------------------------------------------------+
Restores
--------
Execute a restore operation manually with a checkpoint id
.. code-block:: console
karbor restore-create cf56bd3e-97a7-4078-b6d5-f36246333fd9 80f6154f-cc43-441f-8841-35ae23e17f4f
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checkpoint_id | 80f6154f-cc43-441f-8841-35ae23e17f4f |
| id | f30cb640-594a-487b-9569-c26fd5861c95 |
| parameters | {} |
| project_id | 31478a6f980d4e73a3bdac3ad04a3605 |
| provider_id | cf56bd3e-97a7-4078-b6d5-f36246333fd9 |
| resources_reason | {} |
| resources_status | {} |
| restore_target | None |
| status | in_progress |
+------------------+--------------------------------------+
karbor restore-show f30cb640-594a-487b-9569-c26fd5861c95
+------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| Property | Value |
+------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
| checkpoint_id | 80f6154f-cc43-441f-8841-35ae23e17f4f |
| id | f30cb640-594a-487b-9569-c26fd5861c95 |
| parameters | {} |
| project_id | 31478a6f980d4e73a3bdac3ad04a3605 |
| provider_id | cf56bd3e-97a7-4078-b6d5-f36246333fd9 |
| resources_reason | {} |
| resources_status | {u'OS::Cinder::Volume#2b6e0055-bec0-41f5-85fa-a830a3684fd9': u'available', u'OS::Cinder::Volume#6c77fd44-c76b-400e-8aa4-97bce241b690': u'available'} |
| restore_target | None |
| status | success |
+------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+
cinder list
+--------------------------------------+-----------+---------------------------------------------------------------------------+------+-------------+----------+-------------+
| ID | Status | Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+---------------------------------------------------------------------------+------+-------------+----------+-------------+
| 12e2abc6-f20b-430d-9b36-1a6befd23b6c | available | volume2 | 1 | lvmdriver-1 | false | |
| 2b6e0055-bec0-41f5-85fa-a830a3684fd9 | available | 80f6154f-cc43-441f-8841-35ae23e17f4f@12e2abc6-f20b-430d-9b36-1a6befd23b6c | 1 | lvmdriver-1 | false | |
| 6c77fd44-c76b-400e-8aa4-97bce241b690 | available | 80f6154f-cc43-441f-8841-35ae23e17f4f@700495ee-38e6-41a0-963f-f3f9a24c0f75 | 1 | lvmdriver-1 | false | |
| 700495ee-38e6-41a0-963f-f3f9a24c0f75 | available | volume1 | 1 | lvmdriver-1 | false | |
+--------------------------------------+-----------+---------------------------------------------------------------------------+------+-------------+----------+-------------+
Checkpoint Delete
-----------------
Execute a delete operation manually with a checkpoint id
.. code-block:: console
cinder backup-list
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
| ID | Volume ID | Status | Name | Size | Object Count | Container |
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
| becf53cd-12f8-424d-9b08-54fbffe9495a | 700495ee-38e6-41a0-963f-f3f9a24c0f75 | available | - | 1 | 22 | volumebackups |
| c35317f4-df2a-4c7d-9f36-6495c563a5bf | 12e2abc6-f20b-430d-9b36-1a6befd23b6c | available | - | 1 | 22 | volumebackups |
+--------------------------------------+--------------------------------------+-----------+------+------+--------------+---------------+
karbor checkpoint-delete cf56bd3e-97a7-4078-b6d5-f36246333fd9 80f6154f-cc43-441f-8841-35ae23e17f4f
cinder backup-list
+----+-----------+--------+------+------+--------------+-----------+
| ID | Volume ID | Status | Name | Size | Object Count | Container |
+----+-----------+--------+------+------+--------------+-----------+
+----+-----------+--------+------+------+--------------+-----------+
Checkpoint Reset State
----------------------
Execute a reset state operation manually with a checkpoint id
.. code-block:: console
karbor checkpoint-reset-state cf56bd3e-97a7-4078-b6d5-f36246333fd9 80f6154f-cc43-441f-8841-35ae23e17f4f --available
# check the checkpoint status
karbor checkpoint-show cf56bd3e-97a7-4078-b6d5-f36246333fd9 80f6154f-cc43-441f-8841-35ae23e17f4f
+-----------------+-----------------------------------------------------------+
| Property | Value |
+-----------------+-----------------------------------------------------------+
| created_at | 2017-02-13 |
| extra_info | {"created_by": "manual"} |
| id | 80f6154f-cc43-441f-8841-35ae23e17f4f |
| project_id | 31478a6f980d4e73a3bdac3ad04a3605 |
| protection_plan | { |
| | "id": "ef8b83f3-d0c4-48ec-8949-5c72bbf14103", |
| | "name": "OS volumes protection plan.", |
| | "provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9", |
| | "resources": [ |
| | { |
| | "id": "12e2abc6-f20b-430d-9b36-1a6befd23b6c", |
| | "name": "volume2", |
| | "type": "OS::Cinder::Volume" |
| | }, |
| | { |
| | "id": "700495ee-38e6-41a0-963f-f3f9a24c0f75", |
| | "name": "volume1", |
| | "type": "OS::Cinder::Volume" |
| | } |
| | ] |
| | } |
| resource_graph | [ |
| | { |
| | "0x0": [ |
| | "OS::Cinder::Volume", |
| | "700495ee-38e6-41a0-963f-f3f9a24c0f75", |
| | "volume1" |
| | ], |
| | "0x1": [ |
| | "OS::Cinder::Volume", |
| | "12e2abc6-f20b-430d-9b36-1a6befd23b6c", |
| | "volume2" |
| | ] |
| | }, |
| | [] |
| | ] |
| status | available |
+-----------------+-----------------------------------------------------------+
Scheduled Opeartions
--------------------
Execute a protect operation automatically with a scheduler
.. code-block:: console
karbor trigger-create 'My Trigger' 'time' "pattern"="BEGIN:VEVENT\nRRULE:FREQ=MINUTELY;INTERVAL=5;\nEND:VEVENT","format"="calendar"
+------------+------------------------------------------------------------------------------+
| Property | Value |
+------------+------------------------------------------------------------------------------+
| id | b065836f-6485-429d-b12c-e04395c5f58e |
| name | My Trigger |
| properties | { |
| | "format": "calendar", |
| | "pattern": "BEGIN:VEVENT\\nRRULE:FREQ=MINUTELY;INTERVAL=5;\\nEND:VEVENT", |
| | "start_time": "2017-03-02 22:56:42" |
| | } |
| type | time |
+------------+------------------------------------------------------------------------------+
karbor scheduledoperation-create 'Protect with My Trigger' protect b065836f-6485-429d-b12c-e04395c5f58e "plan_id"="ca572b42-6d35-4d81-bb4e-c9b100a3387a","provider_id"="cf56bd3e-97a7-4078-b6d5-f36246333fd9"
+----------------------+---------------------------------------------------------+
| Property | Value |
+----------------------+---------------------------------------------------------+
| description | None |
| enabled | True |
| id | 2ebcf7cc-d8fe-4a70-af71-8a13f20556fb |
| name | PMT |
| operation_definition | { |
| | "plan_id": "ca572b42-6d35-4d81-bb4e-c9b100a3387a", |
| | "provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9" |
| | } |
| operation_type | protect |
| trigger_id | b065836f-6485-429d-b12c-e04395c5f58e |
+----------------------+---------------------------------------------------------+
karbor checkpoint-list cf56bd3e-97a7-4078-b6d5-f36246333fd9
+--------------------------------------+----------------------------------+-----------+-----------------------------------------------------------+------------+
| Id | Project id | Status | Protection plan | Created at |
+--------------------------------------+----------------------------------+-----------+-----------------------------------------------------------+------------+
| 92e74f0c-8519-4928-9bd5-0039e0fe92b0 | 9632a0c585c94d708c57a83190913c76 | available | { | 2017-03-03 |
| | | | "id": "ca572b42-6d35-4d81-bb4e-c9b100a3387a", | |
| | | | "name": "Plan1", | |
| | | | "provider_id": "cf56bd3e-97a7-4078-b6d5-f36246333fd9", | |
| | | | "resources": [ | |
| | | | { | |
| | | | "id": "d72e83c2-4083-4cc7-9283-4578332732ab", | |
| | | | "name": "Volume1", | |
| | | | "type": "OS::Cinder::Volume" | |
| | | | } | |
| | | | ] | |
| | | | } | |
+--------------------------------------+----------------------------------+-----------+-----------------------------------------------------------+------------+

View File

@ -1,9 +0,0 @@
======================
Administration Guide
======================
.. toctree::
:maxdepth: 2
provider
client

View File

@ -1,51 +0,0 @@
=============================
Configure Protection Provider
=============================
Provider Configuration Files
----------------------------
Before starting the karbor-protection service, the admin needs to configure a
Protection Providers in /etc/karbor/providers.d/
Each file must contain the `provider` section with the following fields:
* name - name of the provider
* description - One sentence representing the provider
* id - unique id for the provider, should be generated with uuid4
* plugin - multiple plugin statements, for each protection plugin enabled.
Available options are under the `karbor.protections` namespace entry point.
* bank - bank plugin used for this provider.
Available options are under the `karbor.protections` namespace entry point.
* enabled - true or false, whether to load the provider or not
Each protection plugin and the bank require additional configuration. Each
plugin defines the section and configuration options.
The "OpenStack Infra Provider" is the default provider, and can be used,
removed, or serve as a base for other providers.
Example
~~~~~~~
.. code-block:: ini
[provider]
name = OS Infra Provider
description = This provider uses OpenStack's own services (swift, cinder) as storage
id = cf56bd3e-97a7-4078-b6d5-f36246333fd9
plugin=karbor-volume-protection-plugin
bank=karbor-swift-bank-plugin
enabled = True
[swift_client]
swift_auth_url=http://10.229.47.230/identity/
swift_user=admin
swift_key=123456
swift_tenant_name=admin
[swift_bank_plugin]
lease_expire_window=120
lease_renew_window=100
lease_validity_window=100

View File

@ -1,57 +0,0 @@
@startuml
title API Service Class Diagram
class wsgi.Controller{
}
class ProvidersController extends wsgi.Controller{
+index(self, req):[]Provider
+show(self, req, provider_id:String):Provider
}
class CheckpointsController extends wsgi.Controller{
+index(self, req, provider_id:String):[]Checkpoint
+create(self, req, body:JSON, provider_id:String):Checkpoint
+show(self, req, provider_id:String, checkpoint_id:String):):Checkpoint
+delete(self, req, provider_id:String, checkpoint_id:String):):void
}
class ProtectablesController extends wsgi.Controller{
+index(self, req):[]Protectable
+show(self, req, protectable_type:String):[]Protectable
+index_instances(self, req, protectable_type:String):[]Resource
}
class PlansController extends wsgi.Controller{
+create(self, req, body:JSON):Plan
+index(self, req):[]Plan
+show(self, req, id:String):Plan
+update(self, req, id:String):Plan
+delete(self, req, id:String):void
}
class ScheduledOperationsController extends wsgi.Controller{
+create(self, req, body:JSON):ScheduledOperation
+index(self, req):[]ScheduledOperation
+show(self, req, id:String):ScheduledOperation
+delete(self, req, id:String):void
}
class RestorationsController extends wsgi.Controller{
+create(self, req, body:JSON):Restoration
+index(self, req):[]Restoration
+show(self, req, id:String):Restoration
}
class TriggersController extends wsgi.Controller{
+create(self, req, body:JSON):Trigger
+index(self, req):[]Trigger
+show(self, req, id:String):Trigger
+delete(self, req, id:String):void
}
@enduml

View File

@ -1,28 +0,0 @@
Bank Plugins
------------
Swift
"""""
.. autoclass:: karbor.services.protection.bank_plugins.swift_bank_plugin.SwiftBankPlugin
:noindex:
:members:
:show-inheritance:
Local Filesystem
""""""""""""""""
.. autoclass:: karbor.services.protection.bank_plugins.file_system_bank_plugin.FileSystemBankPlugin
:noindex:
:members:
:show-inheritance:
S3
""
.. autoclass:: karbor.services.protection.bank_plugins.s3_bank_plugin.S3BankPlugin
:noindex:
:members:
:show-inheritance:

View File

@ -1,11 +0,0 @@
========================
Karbor CLI Documentation
========================
In this section you will find information on Karbor's command line
interface.
.. toctree::
:maxdepth: 1
karbor-status

View File

@ -1,83 +0,0 @@
=============
karbor-status
=============
----------------------------------------
CLI interface for Karbor status commands
----------------------------------------
Synopsis
========
::
karbor-status <category> <command> [<args>]
Description
===========
:program:`karbor-status` is a tool that provides routines for checking the
status of a Karbor deployment.
Options
=======
The standard pattern for executing a :program:`karbor-status` command is::
karbor-status <category> <command> [<args>]
Run without arguments to see a list of available command categories::
karbor-status
Categories are:
* ``upgrade``
Detailed descriptions are below:
You can also run with a category argument such as ``upgrade`` to see a list of
all commands in that category::
karbor-status upgrade
These sections describe the available categories and arguments for
:program:`karbor-status`.
Upgrade
~~~~~~~
.. _karbor-status-checks:
``karbor-status upgrade check``
Performs a release-specific readiness check before restarting services with
new code. For example, missing or changed configuration options,
incompatible object states, or other conditions that could lead to
failures while upgrading.
**Return Codes**
.. list-table::
:widths: 20 80
:header-rows: 1
* - Return code
- Description
* - 0
- All upgrade readiness checks passed successfully and there is nothing
to do.
* - 1
- At least one check encountered an issue and requires further
investigation. This is considered a warning but the upgrade may be OK.
* - 2
- There was an upgrade status check failure that needs to be
investigated. This should be considered something that stops an
upgrade.
* - 255
- An unexpected error occurred.
**History of Checks**
**x.x.x (Stein)**
* Sample check to be filled in with checks as they are added in Stein.

Some files were not shown because too many files have changed in this diff Show More