[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:49 UTC 2013


The following commit has been merged in the master branch:
commit d1905572106d55987b10d18bd77dd218a8836f6b
Author: Garrett Holmstrom <gholms at fedoraproject.org>
Date:   Sat Apr 28 15:13:52 2012 -0700

    Rewrite ModifyImageAttribute

diff --git a/bin/euca-modify-image-attribute b/bin/euca-modify-image-attribute
index fe1982c..c529d26 100755
--- a/bin/euca-modify-image-attribute
+++ b/bin/euca-modify-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.modifyimageattribute
 
 if __name__ == '__main__':
-    cmd = euca2ools.commands.euca.modifyimageattribute.ModifyImageAttribute()
-    cmd.main_cli()
-
+    euca2ools.commands.euca.modifyimageattribute.ModifyImageAttribute().do_cli()
diff --git a/euca2ools/commands/euca/modifyimageattribute.py b/euca2ools/commands/euca/modifyimageattribute.py
index c9091ed..5272490 100644
--- a/euca2ools/commands/euca/modifyimageattribute.py
+++ b/euca2ools/commands/euca/modifyimageattribute.py
@@ -1,6 +1,6 @@
 # Software License Agreement (BSD License)
 #
-# Copyright (c) 20092011, 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,97 +27,73 @@
 # 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 ModifyImageAttribute(euca2ools.commands.eucacommand.EucaCommand):
+from requestbuilder import Arg, MutuallyExclusiveArgList
+from . import EucalyptusRequest
 
-    Description = 'Show image attributes.'
-    Options = [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='string', cardinality='*',
-                     doc='show the product codes associated with the image.'),
-               Param(name='add', short_name='a', long_name='add',
-                     optional=True, ptype='string', cardinality='*',
-                     doc='Entity (typically, user id) to add.'),
-               Param(name='remove', short_name='r', long_name='remove',
-                     optional=True, ptype='string', cardinality='*',
-                     doc='Entity (typically, user id) to remove.')]
-    Args = [Param(name='image_id', ptype='string',
-                  doc="""unique identifier for the image that you want
-                  to modify the attributes of.""",
-                  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])
+class ModifyImageAttribute(EucalyptusRequest):
+    Description = 'Modify an attribute of an image'
+    Args = [Arg('ImageId', metavar='IMAGE', help='image to modify'),
+            MutuallyExclusiveArgList(True,
+                Arg('--description', dest='Description.Value', metavar='DESC',
+                    help="change the image's description"),
+                Arg('-p', '--product-code', dest='ProductCode', metavar='CODE',
+                    action='append', help='''product code to add to the given
+                    instance-store image'''),
+                Arg('-l', '--launch-permission', action='store_true',
+                    route_to=None,
+                    help='grant/revoke launch permissions with -a/-r')),
+            Arg('-a', '--add', metavar='ENTITY', action='append', default=[],
+                route_to=None, help='''account to grant launch permission, or
+                "all" for all accounts'''),
+            Arg('-r', '--remove', metavar='ENTITY', action='append',
+                default=[], route_to=None, help='''account to remove launch
+                permission from , or "all" for all accounts''')]
 
     def main(self):
-        users = []
-        groups = []
-        image_attribute = None
-        operation_type = 'add'
-        if self.productCode:
-            image_attribute = 'productCodes'
-        if not image_attribute and self.launchPermission:
-            image_attribute = 'launchPermission'
-        if self.add and self.remove:
-            msg = 'You cannot add and remove in the same call'
-            self.display_error_and_exit(msg)
-        if self.add:
-            operation_type = 'add'
-        if self.remove:
-            operation_type = 'remove'
-        users = self.add + self.remove
-        if 'all' in users:
-            users.remove('all')
-            groups.append('all')
-        if image_attribute:
-            conn = self.make_connection_cli()
-            return self.make_request_cli(conn, 'modify_image_attribute',
-                                         image_id=self.image_id,
-                                         attribute=image_attribute,
-                                         operation=operation_type,
-                                         user_ids=users,
-                                         groups=groups,
-                                         product_codes=self.productCode)
+        if self.args.get('launch_permission'):
+            lp = {}
+            for entity in self.args.get('add', []):
+                lp.setdefault('Add', [])
+                if entity == 'all':
+                    lp['Add'].append({'Group':  entity})
+                else:
+                    lp['Add'].append({'UserId': entity})
+            for entity in self.args.get('remove', []):
+                lp.setdefault('Remove', [])
+                if entity == 'all':
+                    lp['Remove'].append({'Group':  entity})
+                else:
+                    lp['Remove'].append({'UserId': entity})
+            if not lp:
+                self._cli_parser.error('at least one entity must be specified '
+                                       'with -a/--add or -r/--remove')
+            self.params = {'LaunchPermission': lp}
         else:
-            msg = 'No attributes were specified'
-            self.display_error_and_exit(msg)
-
-    def main_cli(self):
-        self.main()
-        print 'IMAGE\t%s' % self.image_id
+            if self.args.get('add'):
+                self._cli_parser.error('argument -a/--add may only be used '
+                                       'with -l/--launch-permission')
+            if self.args.get('remove'):
+                self._cli_parser.error('argument -r/--remove may only be used '
+                                       'with -l/--launch-permission')
+        return self.send()
 
+    def print_result(self, result):
+        if self.args.get('Description.Value'):
+            print self.tabify(('description', self.args['ImageId'],
+                               None, self.args['Description.Value']))
+        if self.args.get('ProductCode'):
+            for code in self.args['ProductCode']:
+                print self.tabify(('productcodes', self.args['ImageId'],
+                                   'productCode',  code))
+        if self.args.get('launch_permission'):
+            for add in self.params['LaunchPermission'].get('Add', []):
+                for (entity_type, entity_name) in add.items():
+                    print self.tabify(('launchPermission',
+                                       self.args['ImageId'], 'ADD',
+                                       entity_type, entity_name))
+            for add in self.params['LaunchPermission'].get('Remove', []):
+                for (entity_type, entity_name) in add.items():
+                    print self.tabify(('launchPermission',
+                                       self.args['ImageId'], 'REMOVE',
+                                       entity_type, entity_name))

-- 
managing cloud instances for Eucalyptus



More information about the pkg-eucalyptus-commits mailing list