3. Explanation of the Java classes
Introduction
As you should have seen in the result of creating a project from the archetype, two main classes have been created:
These classes can be renamed as you prefer but they must implement the required interfaces to work with Abiquo.
CustomBackupConnection
This is the class that receives the connection data and manages the connection to the backup system.
Implements: com.abiquo.commons.plugin.IConnection
Methods
Connect
Should start the connection to the backup system.
For example, perform a login in basic auth to the REST API and save the authorization token for the next requests.
Returns: void
Parameters: com.abiquo.commons.model.ConnectionData containing the necessary data to perform the connection
Throws: com.abiquo.commons.plugin.exception.ComputeException is the expected exception to throw if something goes wrong when making the connection
Disconnect
Should stop or finish the connection to the backup system.
For example: perform a logout from the REST API and remove the authorization token saved by the connect method.
Returns: void
Parameters: none
Throws: com.abiquo.commons.plugin.exception.ComputeException is the expected exception to throw if something goes wrong when disconnecting
CustomBackupPlugin
This is the main class that will manage all the requests from the Abiquo components (Virtual Factory and Cloud Provider Proxy).
This is the class that represents the plugin.
It must implement the BackupScheduling interface typed with your own connection class, in this case the CustomBackupConnection.
It must contain two Java annotations at class level:
- BackupConnectionMetadata: in order to define which connection parameters are required
- PluginMetadata: in order to define basics of the plugin
Implements: com.abiquo.backup.plugin.BackupScheduling
Methods
Validate Configurantion
This method is called when the plugin is loaded by an Abiquo component (API, Virtual Factory and Cloud Provider Proxy) to perform the required validations to assure the plugin is properly configured to be used.
Returns: void
Parameters: none
Throws: java.lang.IllegalStateException
Apply Schedule
There are two signatures for this method that differ in the number of parameters received and the moment when they are invoked.
Signature 1
This method is invoked when a VM that contains backup information is being deployed.
The VM is already deployed and is expected to configure the backup schedule at this point.
If this method fails, the deploy is rolled back and the VM will not exist in the hypervisor.
Returns: void
Parameters:
- CustomBackupConnection with the connection already established.
- com.abiquo.backup.model.VirtualMachineBackupRestoreInfo the VM identification with extra data useful for backup and restore processes.
- com.abiquo.backup.model.BackupSchedule with all the backup policies and configurations associated with this VM and expected to be configured right now.
Throws: com.abiquo.backup.plugin.exception.BackupPluginException to tell the Abiquo component what failed
Signature 2
This method is invoked for a VM that is already deployed when its backup configuration is modified.
That means that someone adds new backup configurations, removes old backup configurations or changes backup configuration values of a VM that was deployed in the past.
So we now need to apply these changes into the backup system.
If this method fails, the reconfigure is rolled back and the VM will still be in the same state it was in before the process started.
Returns: void
Parameters:
- CustomBackupConnection with the connection already established.
- com.abiquo.backup.model.VirtualMachineBackupRestoreInfo the VM identification with extra data useful for backup and restore processes.
- com.abiquo.backup.model.BackupSchedule with all the backup policies and configurations associated with this VM before the user made the changes (old).
- com.abiquo.backup.model.BackupSchedule with all the backup policies and configurations associated with this VM after the user made the changes (new).
Throws: com.abiquo.backup.plugin.exception.BackupPluginException to tell the Abiquo component what failed
Remove Schedule
This method is called when the virtual factory is going to undeploy a VM that has some backup configuration.
So we need to remove this configuration from the backup system before continuing with the VM undeploy process.
If this method fails, the undeploy is aborted.
Returns: void
Parameters:
- CustomBackupConnection with the connection already established.
- com.abiquo.backup.model.VirtualMachineBackupRestoreInfo the VM identification with extra data useful for backup and restore processes.
Throws: com.abiquo.backup.plugin.exception.BackupPluginException to tell the Abiquo component what failed
Execute Backup
This method is called when a user requests an immediate backup.
So we need to request the backup to the backup system and wait until this finishes successfully or not and return a com.abiquo.backup.model.BackupResult of the executed backup.
Until this method finishes the VM is locked in Abiquo, which means no users can access or modify it.
So its a good idea to wait until the backup finishes to end this method.
Returns: com.abiquo.backup.model.BackupResult with all the results data from the backup executed, and whether it finished successfully or not.
Parameters:
- CustomBackupConnection with the connection already established.
- com.abiquo.backup.model.VirtualMachineBackupRestoreInfo the VM identification with extra data useful for backup and restore processes.
- com.abiquo.backup.model.OnDemandBackupOptions with some extra information about the desired type of backup.
Throws: com.abiquo.backup.plugin.exception.BackupPluginException to tell the Abiquo component what failed
Execute Restore
This method is called when a user requests a restore of a backup from a virtual machine.
So we need to request to restore the saved backup and wait until it finishes successfully or not and return a com.abiquo.backup.model.BackupResult.RestoreResult of the executed restore.
Until this method finishes the VM remains locked in Abiquo, which means that no user can access or modify it.
A restore can be requested for a deployed VM or an undeployed one.
Returns: com.abiquo.backup.model.BackupResult.RestoreResult with all the data from the executed restore, finished successfully or not.
Parameters:
- CustomBackupConnection with the connection already established.
- com.abiquo.backup.model.VirtualMachineBackupRestoreInfo the VM identification with extra data useful for backup and restore processes.
- java.lang.String with the ID of the backup that should be restored.
Throws: com.abiquo.backup.plugin.exception.BackupPluginException to tell the Abiquo component what failed
List Results
This method is called every time the API wants to check for the existing backup results in the backup system.
This is done when a Backup Manager of the type of the plugin exists, at intervals defined by the property abiquo.backup.check.delay defined in the abiquo.properties file of the API server.
This method retrieves all results and sends them to the API.
As some backups may not expire or exist for a long time, the API saves the date when this call is made (lastCheckDate parameter) and sends it in the next iteration.
Sending this date enables the plugin to filter the results requested of the backup system and skip to request results already saved in Abiquo database and with no changes made.
This could cause the skip of the results that were in an in progress state because they are older than the given lastCheckDate. To solve that, another parameter is received with a set of all the provider IDs of the results that actually are saved in Abiquo database as in progress in order to check them and add them to the results list.
Returns: java.util.List<com.abiquo.backup.model.BackupResult> with all the returned backup results, done, failed or in progress.
Parameters:
- CustomBackupConnection with the connection already established.
- java.time.ZonedDateTime (lastCheckDate) of the last execution of this method.
- java.util.Set<java.lang.String> with all the provider IDs of backup results saved as in progress in the Abiquo database.
Throws: com.abiquo.backup.plugin.exception.BackupPluginException to tell the Abiquo component what failed
Get Expired Results
This method is called after invoking the List Results method.
This method receives a list of provider IDs of the backup results that the Abiquo API considers to be expired and it's expected to return only those ones that are really expired.
So get the provider ids, check each result, and return only the expired ones.
Returns: java.util.List<Srting> with the provider IDs of the backup results really expired.
Parameters:
- CustomBackupConnection with the connection already established.
- java.util.List<java.lang.String> with the provider IDs of the backup results to check.
Throws: com.abiquo.backup.plugin.exception.BackupPluginException to tell the Abiquo component what failed
Get Constraint
Abiquo integrates different backup technologies and not all of them support the same features, so we created a list of constraints that defines which features are not supported.
This method returns the value of the constraint requested by Abiquo components.
The key parameter is a java.lang.String that can be converted into the enumeration com.abiquo.commons.model.enumerator.ConstraintKey that for backup always expects a java.lang.Boolean value converted to java.lang.String.
Returns: java.lang.String with the value for a constraint
Parameters: java.lang.String the key of the constraint
Throws: No checked exception
Copyright © 2006-2022, Abiquo Holdings SL. All rights reserved