17
17
18
18
from cfnlint .data import Serverless
19
19
from cfnlint .decode .utils import convert_dict
20
- from cfnlint .helpers import load_resource
20
+ from cfnlint .helpers import ensure_list , is_function , load_resource
21
21
from cfnlint .template .transforms ._types import TransformResult
22
22
23
23
LOGGER = logging .getLogger ("cfnlint" )
@@ -100,11 +100,10 @@ def _replace_local_codeuri(self):
100
100
Transform ._update_to_s3_uri ("CodeUri" , resource_dict )
101
101
auto_publish_alias = resource_dict .get ("AutoPublishAlias" )
102
102
if isinstance (auto_publish_alias , dict ):
103
- if len (auto_publish_alias ) == 1 :
104
- for k , v in auto_publish_alias .items ():
105
- if k == "Ref" :
106
- if v in self ._template .get ("Parameters" ):
107
- self ._parameters [v ] = "Alias"
103
+ k , v = is_function (auto_publish_alias )
104
+ if k == "Ref" :
105
+ if v in self ._template .get ("Parameters" ):
106
+ self ._parameters [v ] = "Alias"
108
107
if isinstance (resource_dict .get ("AutoPublishCodeSha256" ), dict ):
109
108
resource_dict ["AutoPublishCodeSha256" ] = "fakesha"
110
109
if resource_type in ["AWS::Serverless::LayerVersion" ]:
@@ -130,6 +129,33 @@ def _replace_local_codeuri(self):
130
129
):
131
130
Transform ._update_to_s3_uri ("DefinitionUri" , resource_dict )
132
131
132
+ def _find_and_replace (self , item , parameters ):
133
+
134
+ k , v = is_function (item )
135
+ if k == "Ref" :
136
+ if v in parameters :
137
+ return parameters [v ]
138
+ if isinstance (item , dict ):
139
+ for k , v in item .items ():
140
+ item [k ] = self ._find_and_replace (v , parameters )
141
+ if isinstance (item , list ):
142
+ for i , v in enumerate (item ):
143
+ item [i ] = self ._find_and_replace (v , parameters )
144
+
145
+ return item
146
+
147
+ def _replace_variables_with_language_extension (self ):
148
+ transforms = self ._template .get ("Transform" , [])
149
+
150
+ transforms = ensure_list (transforms )
151
+ if "AWS::LanguageExtensions" in transforms :
152
+ parameters = {}
153
+ for k , v in self ._template .get ("Parameters" , {}).items ():
154
+ if isinstance (v , dict ) and v .get ("Default" ):
155
+ parameters [k ] = v .get ("Default" )
156
+
157
+ self ._template = self ._find_and_replace (self ._template , parameters )
158
+
133
159
def transform_template (self ):
134
160
"""
135
161
Transform the Template using the Serverless Application Model.
@@ -144,6 +170,7 @@ def transform_template(self):
144
170
managed_policy_map = self ._managed_policy_map , sam_parser = self ._sam_parser
145
171
)
146
172
173
+ self ._replace_variables_with_language_extension ()
147
174
self ._replace_local_codeuri ()
148
175
149
176
# Tell SAM to use the region we're linting in, this has to be
0 commit comments