Add fixture to create flavor for CirrOS images

Change-Id: I273fedb0c8ede8e58165279ebd950532acd9747f
This commit is contained in:
Federico Ressi 2019-07-05 10:34:56 +02:00
parent 7dd1a6de57
commit a6f041bdb5
5 changed files with 117 additions and 3 deletions

View File

@ -93,6 +93,9 @@ class HeatStackFixture(tobiko.SharedFixture):
def setup_stack(self):
self.create_stack()
def get_stack_parameters(self):
return tobiko.reset_fixture(self.parameters).values
def create_stack(self, retry=None):
"""Creates stack based on passed parameters."""
created_stack_ids = set()
@ -133,7 +136,7 @@ class HeatStackFixture(tobiko.SharedFixture):
self.stack = self._outputs = None
# Compile template parameters
parameters = tobiko.reset_fixture(self.parameters).values
parameters = self.get_stack_parameters()
try:
LOG.debug('Creating stack %r (re-tries left %d)...',
self.stack_name, retry)

View File

@ -19,6 +19,8 @@ from tobiko.openstack.stacks import _neutron
from tobiko.openstack.stacks import _nova
KeyPairStackFixture = _nova.KeyPairStackFixture
FlavorStackFixture = _nova.FlavorStackFixture
CirrosFlavorStackFixture = _nova.CirrosFlavorStackFixture
NetworkStackFixture = _neutron.NetworkStackFixture
NetworkWithNetMtuWriteStackFixture = (

View File

@ -186,8 +186,14 @@ class FloatingIpServerStackFixture(heat.HeatStackFixture):
"""password used to login to a Nova server instance"""
return self.image_fixture.password
#: Nova flavor used to create a Nova server instance
flavor = CONF.tobiko.nova.flavor
# Stack used to create flavor for Nova server instance
flavor_stack = tobiko.required_setup_fixture(
_nova.CirrosFlavorStackFixture)
@property
def flavor(self):
"""Flavor for Nova server instance"""
return self.flavor_stack.flavor_id
#: Whenever port security on internal network is enable
port_security_enabled = False

View File

@ -44,6 +44,28 @@ class KeyPairStackFixture(heat.HeatStackFixture):
self.public_key = as_str(fd.read())
class FlavorStackFixture(heat.HeatStackFixture):
template = _hot.heat_template_file('nova/flavor.yaml')
disk = None
ephemeral = None
extra_specs = None
is_public = None
name = None
rxtx_factor = None
swap = None
vcpus = None
def get_stack_parameters(self):
parameters = super(FlavorStackFixture, self).get_stack_parameters()
parameters.setdefault('name', self.stack_name)
return parameters
class CirrosFlavorStackFixture(FlavorStackFixture):
ram = 64
def as_str(text):
if isinstance(text, six.string_types):
return text

View File

@ -0,0 +1,81 @@
heat_template_version: newton
description: |
Creates a nova SSH keypair to be used for creating Nova servers
parameters:
disk:
type: number
description: |
Size of local disk in GB. The “0” size is a special case that uses the
native base image size as the size of the ephemeral root volume.
default: 0
ephemeral:
type: number
description: Size of a secondary ephemeral data disk in GB.
default: 0
extra_specs:
type: json
description: Key/Value pairs to extend the capabilities of the flavor.
default: {}
is_public:
type: boolean
description: |
Scope of flavor accessibility. Public or private. Default value is True,
means public, shared across all projects.
default: true
name:
type: string
description: Name of the flavor.
ram:
type: number
description: Memory in MB for the flavor
rxtx_factor:
type: number
description: RX/TX factor.
default: 1.0
swap:
type: number
description: Swap space in MB.
default: 0
vcpus:
type: number
description: Number of VCPUs for the flavor
default: 1
resources:
flavor:
type: OS::Nova::Flavor
properties:
disk: {get_param: disk}
ephemeral: {get_param: ephemeral}
extra_specs: {get_param: extra_specs}
is_public: {get_param: is_public}
name: {get_param: name}
ram: {get_param: ram}
rxtx_factor: {get_param: rxtx_factor}
swap: {get_param: swap}
vcpus: {get_param: vcpus}
outputs:
flavor_id:
description: unique Nova flavor ID
value: {get_resource: flavor}
falvor_name:
description: Nova flavor name
value: {get_attr: [flavor, show, name]}