[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