summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/tests/volume/v2/fakes.py1
-rw-r--r--openstackclient/tests/volume/v2/test_backup.py14
-rw-r--r--openstackclient/volume/v2/backup.py10
3 files changed, 24 insertions, 1 deletions
diff --git a/openstackclient/tests/volume/v2/fakes.py b/openstackclient/tests/volume/v2/fakes.py
index 1cbbf68a..ae4c9f51 100644
--- a/openstackclient/tests/volume/v2/fakes.py
+++ b/openstackclient/tests/volume/v2/fakes.py
@@ -403,6 +403,7 @@ class FakeBackup(object):
"id": 'backup-id-' + uuid.uuid4().hex,
"name": 'backup-name-' + uuid.uuid4().hex,
"volume_id": 'volume-id-' + uuid.uuid4().hex,
+ "snapshot_id": 'snapshot-id' + uuid.uuid4().hex,
"description": 'description-' + uuid.uuid4().hex,
"object_count": None,
"container": 'container-' + uuid.uuid4().hex,
diff --git a/openstackclient/tests/volume/v2/test_backup.py b/openstackclient/tests/volume/v2/test_backup.py
index ba0f1c18..b1e6594c 100644
--- a/openstackclient/tests/volume/v2/test_backup.py
+++ b/openstackclient/tests/volume/v2/test_backup.py
@@ -25,6 +25,8 @@ class TestBackup(volume_fakes.TestVolume):
self.backups_mock.reset_mock()
self.volumes_mock = self.app.client_manager.volume.volumes
self.volumes_mock.reset_mock()
+ self.snapshots_mock = self.app.client_manager.volume.volume_snapshots
+ self.snapshots_mock.reset_mock()
self.restores_mock = self.app.client_manager.volume.restores
self.restores_mock.reset_mock()
@@ -32,8 +34,9 @@ class TestBackup(volume_fakes.TestVolume):
class TestBackupCreate(TestBackup):
volume = volume_fakes.FakeVolume.create_one_volume()
+ snapshot = volume_fakes.FakeSnapshot.create_one_snapshot()
new_backup = volume_fakes.FakeBackup.create_one_backup(
- attrs={'volume_id': volume.id})
+ attrs={'volume_id': volume.id, 'snapshot_id': snapshot.id})
columns = (
'availability_zone',
@@ -43,6 +46,7 @@ class TestBackupCreate(TestBackup):
'name',
'object_count',
'size',
+ 'snapshot_id',
'status',
'volume_id',
)
@@ -54,6 +58,7 @@ class TestBackupCreate(TestBackup):
new_backup.name,
new_backup.object_count,
new_backup.size,
+ new_backup.snapshot_id,
new_backup.status,
new_backup.volume_id,
)
@@ -62,6 +67,7 @@ class TestBackupCreate(TestBackup):
super(TestBackupCreate, self).setUp()
self.volumes_mock.get.return_value = self.volume
+ self.snapshots_mock.get.return_value = self.snapshot
self.backups_mock.create.return_value = self.new_backup
# Get the command object to test
@@ -73,6 +79,7 @@ class TestBackupCreate(TestBackup):
"--description", self.new_backup.description,
"--container", self.new_backup.container,
"--force",
+ "--snapshot", self.new_backup.snapshot_id,
self.new_backup.volume_id,
]
verifylist = [
@@ -80,6 +87,7 @@ class TestBackupCreate(TestBackup):
("description", self.new_backup.description),
("container", self.new_backup.container),
("force", True),
+ ("snapshot", self.new_backup.snapshot_id),
("volume", self.new_backup.volume_id),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -92,6 +100,7 @@ class TestBackupCreate(TestBackup):
name=self.new_backup.name,
description=self.new_backup.description,
force=True,
+ snapshot_id=self.new_backup.snapshot_id,
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
@@ -117,6 +126,7 @@ class TestBackupCreate(TestBackup):
name=None,
description=self.new_backup.description,
force=False,
+ snapshot_id=None,
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
@@ -264,6 +274,7 @@ class TestBackupShow(TestBackup):
'name',
'object_count',
'size',
+ 'snapshot_id',
'status',
'volume_id',
)
@@ -275,6 +286,7 @@ class TestBackupShow(TestBackup):
backup.name,
backup.object_count,
backup.size,
+ backup.snapshot_id,
backup.status,
backup.volume_id,
)
diff --git a/openstackclient/volume/v2/backup.py b/openstackclient/volume/v2/backup.py
index 519913a9..a8da4080 100644
--- a/openstackclient/volume/v2/backup.py
+++ b/openstackclient/volume/v2/backup.py
@@ -49,6 +49,11 @@ class CreateBackup(command.ShowOne):
help=_("Optional backup container name")
)
parser.add_argument(
+ "--snapshot",
+ metavar="<snapshot>",
+ help=_("Snapshot to backup (name or ID)")
+ )
+ parser.add_argument(
'--force',
action='store_true',
default=False,
@@ -60,12 +65,17 @@ class CreateBackup(command.ShowOne):
volume_client = self.app.client_manager.volume
volume_id = utils.find_resource(
volume_client.volumes, parsed_args.volume).id
+ snapshot_id = None
+ if parsed_args.snapshot:
+ snapshot_id = utils.find_resource(
+ volume_client.volume_snapshots, parsed_args.snapshot).id
backup = volume_client.backups.create(
volume_id,
container=parsed_args.container,
name=parsed_args.name,
description=parsed_args.description,
force=parsed_args.force,
+ snapshot_id=snapshot_id,
)
backup._info.pop("links", None)
return zip(*sorted(six.iteritems(backup._info)))