diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-11-20 06:37:25 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-11-20 06:37:25 +0000 |
| commit | d45187a0c163187649e29931d21c4607379d1e73 (patch) | |
| tree | a693cd9d92735a2e0ec750c79563978a95b0bca5 /openstackclient/compute | |
| parent | b70b1d04e447bb3748fcfd8cf25794fb8ea64b65 (diff) | |
| parent | 200ed62054847336235288c7785424be416bed06 (diff) | |
| download | python-openstackclient-d45187a0c163187649e29931d21c4607379d1e73.tar.gz | |
Merge "Add server image create command"
Diffstat (limited to 'openstackclient/compute')
| -rw-r--r-- | openstackclient/compute/v2/server.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 1de9f1ba..87f5f689 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -384,6 +384,73 @@ class CreateServer(show.ShowOne): return zip(*sorted(six.iteritems(details))) +class CreateServerImage(show.ShowOne): + """Create a new disk image from a running server""" + + log = logging.getLogger(__name__ + '.CreateServerImage') + + def get_parser(self, prog_name): + parser = super(CreateServerImage, self).get_parser(prog_name) + parser.add_argument( + 'server', + metavar='<server', + help='Server (name or ID)', + ) + parser.add_argument( + '--name', + metavar='<image-name>', + help='Name of new image (default is server name)', + ) + parser.add_argument( + '--wait', + action='store_true', + help='Wait for image create to complete', + ) + return parser + + def take_action(self, parsed_args): + self.log.debug('take_action(%s)' % parsed_args) + compute_client = self.app.client_manager.compute + image_client = self.app.client_manager.image + server = utils.find_resource( + compute_client.servers, + parsed_args.server, + ) + if parsed_args.name: + name = parsed_args.name + else: + name = server.name + + image = compute_client.servers.create_image( + server, + name, + ) + + if parsed_args.wait: + if utils.wait_for_status( + image_client.images.get, + image, + callback=_show_progress, + ): + sys.stdout.write('\n') + else: + self.log.error( + 'Error creating server snapshot: %s' % + parsed_args.image_name, + ) + sys.stdout.write('\nError creating server snapshot') + raise SystemExit + + image = utils.find_resource( + image_client.images, + image.id, + ) + + info = {} + info.update(image._info) + return zip(*sorted(six.iteritems(info))) + + class DeleteServer(command.Command): """Delete server command""" |
