[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