.. This work is licensed under a Creative Commons Attribution 3.0 Unported License. http://creativecommons.org/licenses/by/3.0/legalcode ========================================================== Trove database instance protectable and protection plugins ========================================================== https://blueprints.launchpad.net/karbor/+spec/trove-database-proection-plugin Problem description =================== The database instance managed by Trove can not be protected by Karbor now. Currently, Trove as a Database service allows the user to quickly and easily use database features without the burden of handling complex administrative tasks. The users can use Database service (Trove) to backup a database and store the backup artifact in the Object Storage service. Later on, if the original database is damaged, users can use the backup artifact to restore the database. The restore process creates a database instance. So the backup feature of database instance can be introduced to karbor by making a protection plugin for the database instance. Use Cases ========= User creates the database instance in Trove. Then the database instance is used for saving lots of relational and non-relational data by user. To avoid the loss of these data, the user want to protect them by making periodic backup of this database instance. If the user want to restore the database instance, he can create a new database instance from a backup. Proposed change =============== Trove database instance protectable plugin: ------------------------------------------- A new protectable plugin about Trove database instance need be implemented. The type of resource database instance is "OS::Trove::Instance". It will be added to the constant RESOURCE_TYPES in karbor. 1. The parent resource types: PROJECT_RESOURCE_TYPE 2. list the resources: This interface of plugin will call the 'list' method of Instances manager in troveclient. 3. show the resource: This interface of plugin will call the 'get' method of Instances manager in troveclient. The parameter is a database instance id. 4. get dependent resources: The parameter parent_resource is a project, this interface of plugin will return the database instance in this project. Trove database instance protection plugin ----------------------------------------- A new protection plugin about Trove database instance need be implemented. 1. Protect Operation: The 'create' method of Backups manager will be called in the main hook of this operation to make a backup of the database instance. 2. Restore Operation: The 'create' method of Instances manager will be called in the main hook of this operation to create a new database instance from the giving backup. 3. Delete Operation: The database instance backup will be deleted. The 'delete' method of Backups manager will be called in the main hook of this operation to delete the database instance backup. Trove database instance protection plugin schema: ------------------------------------------------- :: OPTIONS_SCHEMA = { "title": "Database Instance Protection Options", "type": "object", "properties": { "backup_name": { "type": "string", "title": "Backup Name", "description": "The name of the database instance backup." }, "description": { "type": "string", "title": "Description", "description": "The description of the database instance backup." } }, "required": ["backup_name", "description"] } RESTORE_SCHEMA = { "title": "Database Instance Protection Restore", "type": "object", "properties": { "restore_name": { "type": "string", "title": "Restore Name", "description": "The name of the restored database instance.", "default": None }, "restore_description": { "type": "string", "title": "Restore Description", "description": "The description of the restored database instance.", "default": None } } } Alternatives ------------ None Data model impact ----------------- None REST API impact --------------- None Security impact --------------- None Notifications impact -------------------- None Other end user impact --------------------- None Performance Impact ------------------ None Other deployer impact --------------------- Add the database instance protection plugin endpoint to setup.cfg. Add the database instance protection plugin configuration to provider file. Developer impact ---------------- None Implementation ============== Assignee(s) ----------- Work Items ---------- * Write database instance backup protectable plugin * Write database instance backup protection plugin * Write tests * Add a usage example about database instance protection Dependencies ============ None Testing ======= Unit tests in Karbor. Documentation Impact ==================== Add a usage example about database instance protection. References ========== None