Ensure Functions can be created without stack definition
In a number of places we parse templates passing None as the stack definition, in order to be able to extract information from the template in cases where we don't actually need to resolve functions. However, the GetParam and GetFile HOT functions require an actual stack definition to be passed in order to initialise them. So far we haven't encountered any cases where those functions appear where we pass None for the stack definition. Ensure that all Functions can always be created even with no stack definition. Note that the cfn ParamRef class is not affected, as the Ref function always selects the GetResource implementation when the stack definition is None. Change-Id: Ic947dcdc17e9dbc58459a92ba970c292d70578cd
This commit is contained in:
parent
b90278b503
commit
bb3ddcf573
|
@ -62,9 +62,14 @@ class GetParam(function.Function):
|
||||||
def __init__(self, stack, fn_name, args):
|
def __init__(self, stack, fn_name, args):
|
||||||
super(GetParam, self).__init__(stack, fn_name, args)
|
super(GetParam, self).__init__(stack, fn_name, args)
|
||||||
|
|
||||||
self.parameters = self.stack.parameters
|
if self.stack is not None:
|
||||||
|
self.parameters = self.stack.parameters
|
||||||
|
else:
|
||||||
|
self.parameters = None
|
||||||
|
|
||||||
def result(self):
|
def result(self):
|
||||||
|
assert self.parameters is not None, "No stack definition in Function"
|
||||||
|
|
||||||
args = function.resolve(self.args)
|
args = function.resolve(self.args)
|
||||||
|
|
||||||
if not args:
|
if not args:
|
||||||
|
@ -542,9 +547,11 @@ class GetFile(function.Function):
|
||||||
def __init__(self, stack, fn_name, args):
|
def __init__(self, stack, fn_name, args):
|
||||||
super(GetFile, self).__init__(stack, fn_name, args)
|
super(GetFile, self).__init__(stack, fn_name, args)
|
||||||
|
|
||||||
self.files = self.stack.t.files
|
self.files = self.stack.t.files if self.stack is not None else None
|
||||||
|
|
||||||
def result(self):
|
def result(self):
|
||||||
|
assert self.files is not None, "No stack definition in Function"
|
||||||
|
|
||||||
args = function.resolve(self.args)
|
args = function.resolve(self.args)
|
||||||
if not (isinstance(args, six.string_types)):
|
if not (isinstance(args, six.string_types)):
|
||||||
raise TypeError(_('Argument to "%s" must be a string') %
|
raise TypeError(_('Argument to "%s" must be a string') %
|
||||||
|
|
Loading…
Reference in New Issue