[pkg-eucalyptus-commits] [SCM] managing cloud instances for Eucalyptus branch, master, updated. 3.0.0-alpha3-257-g1da8e3a
Garrett Holmstrom
gholms at fedoraproject.org
Sun Jun 16 02:29:50 UTC 2013
The following commit has been merged in the master branch:
commit faa8bdc100417e08c23765a2bfa7ff74a5e4a404
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date: Sat Apr 28 16:53:42 2012 -0700
Rewrite DescribeImageAttribute
diff --git a/bin/euca-describe-image-attribute b/bin/euca-describe-image-attribute
index 37424b4..e17fe7a 100755
--- a/bin/euca-describe-image-attribute
+++ b/bin/euca-describe-image-attribute
@@ -1,42 +1,6 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-# Software License Agreement (BSD License)
-#
-# Copyright (c) 2009-2011, Eucalyptus Systems, Inc.
-# All rights reserved.
-#
-# Redistribution and use of this software in source and binary forms, with or
-# without modification, are permitted provided that the following conditions
-# are met:
-#
-# Redistributions of source code must retain the above
-# copyright notice, this list of conditions and the
-# following disclaimer.
-#
-# Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the
-# following disclaimer in the documentation and/or other
-# materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-#
-# Author: Neil Soman neil at eucalyptus.com
-# Mitch Garnaat mgarnaat at eucalyptus.com
+#!/usr/bin/python -tt
import euca2ools.commands.euca.describeimageattribute
if __name__ == '__main__':
- cmd = euca2ools.commands.euca.describeimageattribute.DescribeImageAttribute()
- cmd.main_cli()
-
+ euca2ools.commands.euca.describeimageattribute.DescribeImageAttribute().do_cli()
diff --git a/euca2ools/commands/euca/describeimageattribute.py b/euca2ools/commands/euca/describeimageattribute.py
index 43f6db7..51c567a 100644
--- a/euca2ools/commands/euca/describeimageattribute.py
+++ b/euca2ools/commands/euca/describeimageattribute.py
@@ -1,6 +1,6 @@
# Software License Agreement (BSD License)
#
-# Copyright (c) 2009-2011, Eucalyptus Systems, Inc.
+# Copyright (c) 2009-2012, Eucalyptus Systems, Inc.
# All rights reserved.
#
# Redistribution and use of this software in source and binary forms, with or
@@ -27,87 +27,61 @@
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
-#
-# Author: Neil Soman neil at eucalyptus.com
-# Mitch Garnaat mgarnaat at eucalyptus.com
-
-import euca2ools.commands.eucacommand
-from boto.roboto.param import Param
-class DescribeImageAttribute(euca2ools.commands.eucacommand.EucaCommand):
+from requestbuilder import Arg, MutuallyExclusiveArgList
+from . import EucalyptusRequest
- Description = 'Show image attributes.'
- Options = [Param(name='blockDeviceMapping', metavar='block_device_mapping',
- short_name='B', long_name='block-device-mapping',
- optional=True, ptype='boolean',
- doc='show block device mapping.'),
- Param(name='launchPermission', metavar='launch_permission',
- short_name='l', long_name='launch-permission',
- optional=True, ptype='boolean',
- doc='show launch permissions.'),
- Param(name='productCode', metavar='product_code',
- short_name='p', long_name='product-code',
- optional=True, ptype='boolean',
- doc='show the product codes associated with the image.'),
- Param(name='kernel', long_name='kernel',
- optional=True, ptype='boolean',
- doc='show the kernel id associated with the image.'),
- Param(name='ramdisk', long_name='ramdisk',
- optional=True, ptype='boolean',
- doc='show the ramdisk id associated with the image.')]
- Args = [Param(name='image_id', ptype='string',
- doc="""unique identifier for the image that you want
- to retrieve the attributes for.""",
- cardinality=1, optional=False)]
-
- def display_image_attribute(self, image_id, image_attribute):
- if image_attribute.name == 'launch_permission':
- if image_attribute.attrs.has_key('groups'):
- for group in image_attribute.attrs['groups']:
- print 'launchPermission\t%s\tgroup\t%s' \
- % (image_attribute.image_id, group)
- if image_attribute.attrs.has_key('user_ids'):
- for userid in image_attribute.attrs['user_ids']:
- print 'launchPermission\t%s\tuserId\t%s' \
- % (image_attribute.image_id, userid)
- if image_attribute.attrs.has_key('product_codes'):
- for product_code in image_attribute.attrs['product_codes']:
- print 'productCodes\t%s\tproductCode\t%s' \
- % (image_attribute.image_id, product_code)
- if image_attribute.kernel is not None:
- print 'kernel\t%s\t\t%s' % (image_attribute.image_id,
- getattr(image_attribute, 'value', ""))
- if image_attribute.ramdisk is not None:
- print 'ramdisk\t%s\t\t%s' % (image_attribute.image_id,
- getattr(image_attribute, 'value', ""))
- if image_attribute.attrs.has_key('block_device_mapping'):
- block_device_mapping = \
- image_attribute.attrs['block_device_mapping']
- for dev_name in block_device_mapping:
- print 'blockDeviceMapping\t%s\tblockDeviceMap\t%s: %s' \
- % (image_id, dev_name,
- (block_device_mapping[dev_name].ephemeral_name or
- block_device_mapping[dev_name].snapshot_id))
-
- def main(self):
- attribute = None
- attr_names = [ opt.name for opt in self.Options ]
- for name in attr_names:
- if not attribute:
- if getattr(self, name):
- attribute = name
- if attribute:
- conn = self.make_connection_cli()
- return self.make_request_cli(conn, 'get_image_attribute',
- image_id=self.image_id,
- attribute=attribute)
- else:
- msg = 'image attribute must be specified'
- self.display_error_and_exit(msg)
+class DescribeImageAttribute(EucalyptusRequest):
+ Description = 'Show information about an attribute of an image'
+ Args = [Arg('ImageId', metavar='IMAGE', help='image to describe'),
+ MutuallyExclusiveArgList(True,
+ Arg('-l', '--launch-permission', dest='Attribute',
+ action='store_const', const='launchPermission',
+ help='display launch permissions'),
+ Arg('-p', '--product-codes', dest='Attribute',
+ action='store_const', const='productCodes',
+ help='list associated product codes'),
+ Arg('-B', '--block-device-mapping', dest='Attribute',
+ action='store_const', const='blockDeviceMapping',
+ help='describe block device mappings'),
+ Arg('--kernel', dest='Attribute', action='store_const',
+ const='kernel', help='show associated kernel image ID'),
+ Arg('--ramdisk', dest='Attribute', action='store_const',
+ const='ramdisk', help='show associated ramdisk image ID'),
+ Arg('--description', dest='Attribute', action='store_const',
+ const='description', help="show the image's description"))]
+ ListMarkers = ['blockDeviceMapping', 'launchPermission', 'productCodes']
+ ItemMarkers = ['item']
- def main_cli(self):
- image_attribute = self.main()
- if image_attribute:
- self.display_image_attribute(self.image_id,
- image_attribute)
+ def print_result(self, result):
+ image_id = result.get('imageId')
+ for perm in result.get('launchPermission', []):
+ for (entity_type, entity_name) in perm.items():
+ print self.tabify(('launchPermission', image_id, entity_type,
+ entity_name))
+ for code in result.get('productCodes', []):
+ if 'type' in code:
+ code_str = '[{0}: {1}]'.format(code['type'],
+ code.get('productCode'))
+ else:
+ code_str = code.get('productCode')
+ print self.tabify(('productCodes', image_id, 'productCode',
+ code_str))
+ for blockdev in result.get('blockDeviceMapping', []):
+ blockdev_src = (blockdev.get('virtualName') or
+ blockdev.get('ebs', {}).get('snapshotId'))
+ blockdev_str = '{0}: {1}'.format(blockdev.get('deviceName'),
+ blockdev_src)
+ ## TODO: figure out how to print mappings that create new volumes
+ print self.tabify(('blockDeviceMapping', image_id,
+ 'blockDeviceMap', blockdev_str))
+ if result.get('kernel'):
+ print self.tabify(('kernel', image_id, None,
+ result['kernel'].get('value')))
+ if result.get('ramdisk'):
+ print self.tabify(('ramdisk', image_id, None,
+ result['ramdisk'].get('value')))
+ if result.get('description'):
+ print self.tabify(('description', image_id, None,
+ result['description'].get('value')))
--
managing cloud instances for Eucalyptus
More information about the pkg-eucalyptus-commits
mailing list