You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.9 KiB

# 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
# 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 heat.engine import template
def _identity(resource_name, definition):
return definition
def member_definitions(old_resources, new_definition,
num_resources, num_new,
get_new_id, customise=_identity):
"""Iterate over resource definitions for a scaling group
Generates the definitions for the next change to the scaling group. Each
item is a (name, definition) tuple.
The input is a list of (name, definition) tuples for existing resources in
the group, sorted in the order that they should be replaced or removed
(i.e. the resource that should be the first to be replaced (on update) or
removed (on scale down) appears at the beginning of the list.) New
resources are added or old resources removed as necessary to ensure a total
of num_resources.
The number of resources to have their definition changed to the new one is
controlled by num_new. This value includes any new resources to be added,
with any shortfall made up by modifying the definitions of existing
old_resources = old_resources[-num_resources:]
num_create = num_resources - len(old_resources)
num_replace = num_new - num_create
for i in range(num_resources):
if i < len(old_resources):
old_name, old_definition = old_resources[i]
custom_definition = customise(old_name, new_definition)
if old_definition != custom_definition and num_replace > 0:
num_replace -= 1
yield old_name, custom_definition
yield old_name, old_definition
new_name = get_new_id()
yield new_name, customise(new_name, new_definition)
def make_template(resource_definitions,
version=('heat_template_version', '2015-04-30'),
"""Return a Template object containing the given resource definitions.
By default, the template will be in the HOT format. A different format
can be specified by passing a (version_type, version_string) tuple matching
any of the available template format plugins.
tmpl = template.Template(dict([version]), env=child_env)
for name, defn in resource_definitions:
tmpl.add_resource(defn, name)
return tmpl