* each service class was moved to a new file * Service and VersionedService were moved from api_discovery to service_base.py * api_discovery.py is removed and methods for discovery were moved to a newly created class Services - class holds methods related to instantiating services, discovering their versions and extensions, configuring them * constants were moved to an independent file - constants.py Change-Id: I00880f4bd30cc4d1609c20aecca820854312b1e7
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright 2016 Red Hat, Inc.
 | 
						|
# All Rights Reserved.
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
						|
# not use this file except in compliance with the License. You may obtain
 | 
						|
# a copy of the License at
 | 
						|
#
 | 
						|
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
						|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
						|
# License for the specific language governing permissions and limitations
 | 
						|
# under the License.
 | 
						|
 | 
						|
from constants import LOG
 | 
						|
 | 
						|
 | 
						|
class Flavors(object):
 | 
						|
    def __init__(self, client, allow_creation, conf):
 | 
						|
        """Init.
 | 
						|
 | 
						|
        :type client: FlavorsClient object from tempest lib
 | 
						|
        :type allow_creation: boolean
 | 
						|
        :type conf: TempestConf object
 | 
						|
        """
 | 
						|
        self.client = client
 | 
						|
        self.allow_creation = allow_creation
 | 
						|
        self._conf = conf
 | 
						|
 | 
						|
    def create_tempest_flavors(self):
 | 
						|
        """Find or create flavors and set them in conf.
 | 
						|
 | 
						|
        If 'flavor_ref' and 'flavor_ref_alt' are specified in conf, it will
 | 
						|
        first try to find those - otherwise it will try finding or creating
 | 
						|
        'm1.nano' and 'm1.micro' and overwrite those options in conf.
 | 
						|
        """
 | 
						|
        # m1.nano flavor
 | 
						|
        flavor_id = None
 | 
						|
        if self._conf.has_option('compute', 'flavor_ref'):
 | 
						|
            flavor_id = self._conf.get('compute', 'flavor_ref')
 | 
						|
        flavor_id = self.find_or_create_flavor(flavor_id, 'm1.nano', ram=64)
 | 
						|
        self._conf.set('compute', 'flavor_ref', flavor_id)
 | 
						|
 | 
						|
        # m1.micro flavor
 | 
						|
        alt_flavor_id = None
 | 
						|
        if self._conf.has_option('compute', 'flavor_ref_alt'):
 | 
						|
            alt_flavor_id = self._conf.get('compute', 'flavor_ref_alt')
 | 
						|
        alt_flavor_id = self.find_or_create_flavor(alt_flavor_id, 'm1.micro',
 | 
						|
                                                   ram=128)
 | 
						|
        self._conf.set('compute', 'flavor_ref_alt', alt_flavor_id)
 | 
						|
 | 
						|
    def find_or_create_flavor(self, flavor_id, flavor_name,
 | 
						|
                              ram=64, vcpus=1, disk=0):
 | 
						|
        """Try finding flavor by ID or name, create if not found.
 | 
						|
 | 
						|
        :param flavor_id: first try finding the flavor by this
 | 
						|
        :param flavor_name: find by this if it was not found by ID, create new
 | 
						|
            flavor with this name if not found at allCLIENT_MOCK
 | 
						|
        :param ram: memory of created flavor in MB
 | 
						|
        :param vcpus: number of VCPUs for the flavor
 | 
						|
        :param disk: size of disk for flavor in GB
 | 
						|
        """
 | 
						|
        flavor = None
 | 
						|
        flavors = self.client.list_flavors()['flavors']
 | 
						|
        # try finding it by the ID first
 | 
						|
        if flavor_id:
 | 
						|
            found = [f for f in flavors if f['id'] == flavor_id]
 | 
						|
            if found:
 | 
						|
                flavor = found[0]
 | 
						|
        # if not found, try finding it by name
 | 
						|
        if flavor_name and not flavor:
 | 
						|
            found = [f for f in flavors if f['name'] == flavor_name]
 | 
						|
            if found:
 | 
						|
                flavor = found[0]
 | 
						|
 | 
						|
        if not flavor and not self.allow_creation:
 | 
						|
            raise Exception("Flavor '%s' not found, but resource creation"
 | 
						|
                            " isn't allowed. Either use '--create' or provide"
 | 
						|
                            " an existing flavor" % flavor_name)
 | 
						|
 | 
						|
        if not flavor:
 | 
						|
            LOG.info("Creating flavor '%s'", flavor_name)
 | 
						|
            flavor = self.client.create_flavor(name=flavor_name,
 | 
						|
                                               ram=ram, vcpus=vcpus,
 | 
						|
                                               disk=disk, id=None)
 | 
						|
            return flavor['flavor']['id']
 | 
						|
        else:
 | 
						|
            LOG.info("(no change) Found flavor '%s'", flavor['name'])
 | 
						|
 | 
						|
        return flavor['id']
 |