HOT intrinisic function list_join like Fn::Join
We have an increasing number of attributes which are a list of strings. In HOT there is no way to join a list into a string as with the CFN function Fn::Join. This change implements HOT intrinsic function list_join using an identical implementation as Fn::Join. Tripleo will benefit from this function since the lack of a join function in HOT is one of the barriers to transitioning to the HOT template format. Change-Id: I29e0b744271213429fff6922397b925eb9ccc204
This commit is contained in:
parent
30e416324e
commit
1e8e0fcc46
@ -726,6 +726,26 @@ The *resource ID* of the referenced resources as used in the current template is
|
||||
given as single parameter to the get_resource function.
|
||||
|
||||
|
||||
list_join
|
||||
--------
|
||||
The *list_join* function joins a list of strings with the given delimiter.
|
||||
The syntax of the list_join function is as follows:
|
||||
|
||||
::
|
||||
|
||||
list_join:
|
||||
- <delimiter>
|
||||
- <list to join>
|
||||
|
||||
A sample use of this function with a simple list is shown below.
|
||||
|
||||
::
|
||||
|
||||
list_join: [', ', ['one', 'two', 'and three']]
|
||||
|
||||
This would resolve to "one, two, and three".
|
||||
|
||||
|
||||
resource_facade
|
||||
---------------
|
||||
The *resource_facade* function allows a provider template to retrieve data
|
||||
|
@ -202,6 +202,20 @@ class GetFile(function.Function):
|
||||
return f
|
||||
|
||||
|
||||
class Join(cfn_funcs.Join):
|
||||
'''
|
||||
A function for joining strings.
|
||||
|
||||
Takes the form::
|
||||
|
||||
{ "list_join" : [ "<delim>", [ "<string_1>", "<string_2>", ... ] }
|
||||
|
||||
And resolves to::
|
||||
|
||||
"<string_1><delim><string_2><delim>..."
|
||||
'''
|
||||
|
||||
|
||||
class ResourceFacade(cfn_funcs.ResourceFacade):
|
||||
'''
|
||||
A function for obtaining data from the facade resource from within the
|
||||
@ -235,6 +249,7 @@ def function_mapping(version_key, version):
|
||||
'get_attr': GetAtt,
|
||||
'Fn::Select': cfn_funcs.Select,
|
||||
'Fn::Join': cfn_funcs.Join,
|
||||
'list_join': Join,
|
||||
'Fn::Split': cfn_funcs.Split,
|
||||
'str_replace': Replace,
|
||||
'Fn::Replace': cfn_funcs.Replace,
|
||||
|
@ -17,10 +17,10 @@ import six
|
||||
from heat.common import exception
|
||||
from heat.common import identifier
|
||||
from heat.common import template_format
|
||||
from heat.engine.cfn import functions as cfn_funcs
|
||||
from heat.engine import constraints
|
||||
from heat.engine import environment
|
||||
from heat.engine import function
|
||||
from heat.engine.hot import functions as hot_functions
|
||||
from heat.engine.hot import parameters as hot_param
|
||||
from heat.engine.hot import template as hot_template
|
||||
from heat.engine import parameters
|
||||
@ -585,8 +585,8 @@ class HOTemplateTest(HeatTestCase):
|
||||
parent_resource.stack = parser.Stack(utils.dummy_context(),
|
||||
'toplevel_stack',
|
||||
parser.Template(hot_tpl_empty))
|
||||
del_policy = cfn_funcs.Join(parent_resource.stack,
|
||||
'Fn::Join', ['eta', ['R', 'in']])
|
||||
del_policy = hot_functions.Join(parent_resource.stack,
|
||||
'list_join', ['eta', ['R', 'in']])
|
||||
parent_resource.t = rsrc_defn.ResourceDefinition(
|
||||
'parent', 'SomeType',
|
||||
deletion_policy=del_policy)
|
||||
|
Loading…
Reference in New Issue
Block a user