From 715435c816b51b6ec8d38453326eecd35c339fd9 Mon Sep 17 00:00:00 2001 From: Rick Harris Date: Tue, 14 May 2013 15:23:55 +0000 Subject: Use strict=True instead of `is_valid_boolstr` Oslo's `bool_from_string` learned the `strict` keyword which allows callers to detect invalid boolean values, so we can use that instead of having a new Nova-specific function. Change-Id: I61bfa4029897c7304bd54d6cdae9f9a9bc4c1f78 --- nova/compute/api.py | 33 ++++++++++++++++++++++----------- nova/compute/flavors.py | 9 +++++---- 2 files changed, 27 insertions(+), 15 deletions(-) (limited to 'nova/compute') diff --git a/nova/compute/api.py b/nova/compute/api.py index f47121c36..56100d962 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -476,6 +476,26 @@ class API(base.Base): instance['uuid'], updates) return instance + def _check_config_drive(self, context, config_drive): + bool_like = True + try: + strutils.bool_from_string(config_drive, strict=True) + except ValueError: + bool_like = False + + if config_drive is None: + return None, None + elif bool_like and config_drive not in (0, 1, '0', '1'): + # NOTE(sirp): '0' and '1' could be a bool value or an ID. Since + # there are many other ways to specify bools (e.g. 't', 'f'), it's + # better to treat as an ID. + return None, config_drive + else: + cd_image_service, config_drive_id = \ + glance.get_remote_image_service(context, config_drive) + cd_image_service.show(context, config_drive_id) + return config_drive_id, None + def _validate_and_provision_instance(self, context, instance_type, image_href, kernel_id, ramdisk_id, min_count, max_count, @@ -557,17 +577,8 @@ class API(base.Base): kernel_id, ramdisk_id = self._handle_kernel_and_ramdisk( context, kernel_id, ramdisk_id, image) - # Handle config_drive - config_drive_id = None - if config_drive and not utils.is_valid_boolstr(config_drive): - # config_drive is volume id - config_drive_id = config_drive - config_drive = None - - # Ensure config_drive image exists - cd_image_service, config_drive_id = \ - glance.get_remote_image_service(context, config_drive_id) - cd_image_service.show(context, config_drive_id) + config_drive_id, config_drive = self._check_config_drive( + context, config_drive) if key_data is None and key_name: key_pair = self.db.key_pair_get(context, context.user_id, diff --git a/nova/compute/flavors.py b/nova/compute/flavors.py index 2958769e1..58dcd3fa5 100644 --- a/nova/compute/flavors.py +++ b/nova/compute/flavors.py @@ -123,10 +123,11 @@ def create(name, memory, vcpus, root_gb, ephemeral_gb=0, flavorid=None, kwargs['flavorid'] = unicode(flavorid) # ensure is_public attribute is boolean - if not utils.is_valid_boolstr(is_public): - msg = _("is_public must be a boolean") - raise exception.InvalidInput(reason=msg) - kwargs['is_public'] = strutils.bool_from_string(is_public) + try: + kwargs['is_public'] = strutils.bool_from_string( + is_public, strict=True) + except ValueError: + raise exception.InvalidInput(reason=_("is_public must be a boolean")) try: return db.instance_type_create(context.get_admin_context(), kwargs) -- cgit