diff options
author | Josh Kearney <josh@jk0.org> | 2011-06-24 14:48:14 -0500 |
---|---|---|
committer | Josh Kearney <josh@jk0.org> | 2011-06-24 14:48:14 -0500 |
commit | cee51f8aff494c1e7dd266e2a24c9dc9bb7b18f8 (patch) | |
tree | 8b1c62d851baff84679772f0a211737c86fcd489 | |
parent | 8a523431e3db9a1390933036532dc9f2ffacf17f (diff) | |
download | python-novaclient-cee51f8aff494c1e7dd266e2a24c9dc9bb7b18f8.tar.gz |
Refactored backup rotation.
-rw-r--r-- | docs/conf.py | 2 | ||||
-rw-r--r-- | novaclient/images.py | 21 | ||||
-rw-r--r-- | novaclient/shell.py | 21 | ||||
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | tests/fakeserver.py | 2 | ||||
-rw-r--r-- | tests/test_shell.py | 14 |
6 files changed, 40 insertions, 22 deletions
diff --git a/docs/conf.py b/docs/conf.py index 999dd3c2..dc034780 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -47,7 +47,7 @@ copyright = u'Rackspace, based on work by Jacob Kaplan-Moss' # The short X.Y version. version = '2.5' # The full version, including alpha/beta/rc tags. -release = '2.5.6' +release = '2.5.7' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/novaclient/images.py b/novaclient/images.py index d7d07e33..d911cc74 100644 --- a/novaclient/images.py +++ b/novaclient/images.py @@ -47,7 +47,7 @@ class ImageManager(base.ManagerWithFind): return self._list("/images%s" % detail, "images") - def create(self, server, image_type=None, name=None, rotation=None): + def create(self, server, name, image_type=None, backup_type=None, rotation=None): """ Create a new image by snapshotting a running :class:`Server` @@ -58,17 +58,20 @@ class ImageManager(base.ManagerWithFind): if image_type is None: image_type = "snapshot" - if image_type not in ("daily", "weekly", "snapshot"): - raise Exception("Invalid image_type: must be daily, " - "weekly or snapshot") + if image_type not in ("backup", "snapshot"): + raise Exception("Invalid image_type: must be backup or snapshot") - if image_type == "snapshot" and not name: - raise Exception("name is required for snapshots") - elif image_type != "snapshot" and not rotation: - raise Exception("rotation is required for backups") + if image_type == "backup": + if not rotation: + raise Exception("rotation is required for backups") + elif not backup_type: + raise Exception("backup_type required for backups") + elif backup_type not in ("daily", "weekly"): + raise Exception("Invalid backup_type: must be daily or weekly") data = {"image": {"serverId": base.getid(server), "name": name, - "image_type": image_type, "rotation": rotation}} + "image_type": image_type, "backup_type": backup_type, + "rotation": rotation}} return self._create("/images", data, "image") def delete(self, image): diff --git a/novaclient/shell.py b/novaclient/shell.py index e439d2c0..03fa2e1f 100644 --- a/novaclient/shell.py +++ b/novaclient/shell.py @@ -474,20 +474,27 @@ class OpenStackShell(object): print_list(self.cs.images.list(), ['ID', 'Name', 'Status']) @arg('server', metavar='<server>', help='Name or ID of server.') - @arg('image_type', metavar='<image_type>', default='snapshot', help='daily, weekly or snapshot (default)') + @arg('name', metavar='<name>', help='Name of backup or snapshot.') + @arg('--image-type', + metavar='<backup|snapshot>', + default='snapshot', + help='type of image (default: snapshot)') + @arg('--backup-type', + metavar='<daily|weekly>', + default=None, + help='type of backup') @arg('--rotation', default=None, type=int, metavar='<rotation>', - help="Number of backups to retain. (for image-type daily or weekly)") - @arg('--name', - default=None, - metavar='<name>', - help="Name of the new snapshot") + help="Number of backups to retain. Used for backup image_type.") def do_image_create(self, args): """Create a new image by taking a snapshot of a running server.""" server = self._find_server(args.server) - image = self.cs.images.create(server, image_type=args.image_type, name=args.name, rotation=args.rotation) + image = self.cs.images.create(server, args.name, + image_type=args.image_type, + backup_type=args.backup_type, + rotation=args.rotation) print_dict(image._info) @arg('image', metavar='<image>', help='Name or ID of image.') @@ -11,7 +11,7 @@ if sys.version_info < (2,6): setup( name = "python-novaclient", - version = "2.5.6", + version = "2.5.7", description = "Client library for OpenStack Nova API", long_description = read('README.rst'), url = 'https://github.com/rackspace/python-novaclient', diff --git a/tests/fakeserver.py b/tests/fakeserver.py index f9dc7ba7..bc5e9267 100644 --- a/tests/fakeserver.py +++ b/tests/fakeserver.py @@ -336,7 +336,7 @@ class FakeClient(OpenStackClient): def post_images(self, body, **kw): assert_equal(body.keys(), ['image']) - assert_has_keys(body['image'], required=['serverId', 'name', 'image_type', 'rotation']) + assert_has_keys(body['image'], required=['serverId', 'name', 'image_type', 'backup_type', 'rotation']) return (202, self.get_images_1()[1]) def delete_images_1(self, **kw): diff --git a/tests/test_shell.py b/tests/test_shell.py index 3999936d..17ba5a44 100644 --- a/tests/test_shell.py +++ b/tests/test_shell.py @@ -191,11 +191,19 @@ def test_image_list(): assert_called('GET', '/images/detail') -def test_image_create(): - shell('image-create sample-server snapshot --name new-image') +def test_snapshot_create(): + shell('image-create sample-server mysnapshot') assert_called( 'POST', '/images', - {'image': {'name': 'new-image', 'serverId': 1234, 'image_type': 'snapshot', 'rotation': None}} + {'image': {'name': 'mysnapshot', 'serverId': 1234, 'image_type': 'snapshot', 'backup_type': None, 'rotation': None}} + ) + + +def test_backup_create(): + shell('image-create sample-server mybackup --image-type backup --backup-type daily --rotation 1') + assert_called( + 'POST', '/images', + {'image': {'name': 'mybackup', 'serverId': 1234, 'image_type': 'backup', 'backup_type': 'daily', 'rotation': 1}} ) |