Added get_target_job for tracking the progress of an individual job. Added some example code (for a fictional driver)
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/c086d347 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/c086d347 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/c086d347 Branch: refs/heads/trunk Commit: c086d347c9d44df684f3b4b020188bc86a251e73 Parents: b3398da Author: Anthony Shaw <anthony.p.s...@gmail.com> Authored: Mon Nov 9 14:57:15 2015 +1100 Committer: Anthony Shaw <anthony.p.s...@gmail.com> Committed: Mon Nov 9 14:57:15 2015 +1100 ---------------------------------------------------------------------- docs/backup/examples.rst | 11 ++++++ docs/backup/index.rst | 2 +- docs/examples/backup/create_backup_from_node.py | 37 ++++++++++++++++++++ libcloud/backup/base.py | 16 +++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/c086d347/docs/backup/examples.rst ---------------------------------------------------------------------- diff --git a/docs/backup/examples.rst b/docs/backup/examples.rst index 78f27e4..2e71462 100644 --- a/docs/backup/examples.rst +++ b/docs/backup/examples.rst @@ -3,3 +3,14 @@ Backup Examples ============ +Getting a node from a compute driver and enabling backup +--------------------------------------------------------- + +This example shows how to get a node using a remote Azure datacenter, enable backup +and backup the node. + +.. note:: + This example works with Libcloud version 0.20.0 and above. + +.. literalinclude:: /examples/backup/create_backup_from_node.py + :language: python http://git-wip-us.apache.org/repos/asf/libcloud/blob/c086d347/docs/backup/index.rst ---------------------------------------------------------------------- diff --git a/docs/backup/index.rst b/docs/backup/index.rst index 2479746..7d1b9f7 100644 --- a/docs/backup/index.rst +++ b/docs/backup/index.rst @@ -1,4 +1,4 @@ -DNS +Backup === .. note:: http://git-wip-us.apache.org/repos/asf/libcloud/blob/c086d347/docs/examples/backup/create_backup_from_node.py ---------------------------------------------------------------------- diff --git a/docs/examples/backup/create_backup_from_node.py b/docs/examples/backup/create_backup_from_node.py new file mode 100644 index 0000000..ec7c2d6 --- /dev/null +++ b/docs/examples/backup/create_backup_from_node.py @@ -0,0 +1,37 @@ +import time +from pprint import pprint + +from libcloud.backup.types import Provider, BackupTargetJobStatusType +from libcloud.backup.providers import get_driver as get_backup_driver + +from libcloud.compute.providers import get_driver as get_compute_driver + +backup_driver = get_backup_driver(Provider.AZURE)('username', 'api key') +compute_driver = get_compute_driver(Provider.AZURE)('username', 'api key') + +nodes = compute_driver.list_nodes() + +# Backup the first node in the pool +selected_node = nodes[0] + +print('Enabling backup for node') +new_target = backup_driver.create_target_from_node(selected_node) + +print('Starting backup of node') +job = backup_driver.create_target_job(new_target) + +print('Waiting for job to complete') +while True: + if job.status != BackupTargetJobStatusType.RUNNING: + break + else: + job = backup_driver.get_target_job(job.id) + + print('Job is now at %s percent complete' % job.progress) + time.sleep(20) + +print('Job is completed with status- %s' % job.status) + +print('Getting a list of recovery points') +recovery_points = backup_driver.list_recovery_points(new_target) +pprint(recovery_points) http://git-wip-us.apache.org/repos/asf/libcloud/blob/c086d347/libcloud/backup/base.py ---------------------------------------------------------------------- diff --git a/libcloud/backup/base.py b/libcloud/backup/base.py index 6bca933..26ea2d8 100644 --- a/libcloud/backup/base.py +++ b/libcloud/backup/base.py @@ -400,6 +400,22 @@ class BackupDriver(BaseDriver): raise NotImplementedError( 'delete_target not implemented for this driver') + def get_target_job(self, target, id): + """ + Get a specific backup job by ID + + :param target: Backup target with the backup data + :type target: Instance of :class:`BackupTarget` + + :param id: Backup target with the backup data + :type id: Instance of :class:`BackupTarget` + + :rtype: :class:`BackupTargetJob` + """ + jobs = self.list_target_jobs(target) + return list(filter(lambda x: x.id == id, jobs))[0] + + def list_target_jobs(self, target): """ List the backup jobs on a target