Skip to content

Commit 3b07bf7

Browse files
authored
Only replace parameter values in Resources (#3908)
1 parent 0d17484 commit 3b07bf7

File tree

4 files changed

+32
-1
lines changed

4 files changed

+32
-1
lines changed

src/cfnlint/template/transforms/_sam.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,9 @@ def _replace_variables_with_language_extension(self):
158158
if isinstance(v, dict) and v.get("Default"):
159159
parameters[k] = v.get("Default")
160160

161-
self._template = self._find_and_replace(self._template, parameters)
161+
self._template["Resources"] = self._find_and_replace(
162+
self._template.get("Resources", {}), parameters
163+
)
162164

163165
def transform_template(self):
164166
"""

src/cfnlint/template/transforms/transform.py

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ def transform(self, cfn: Any) -> list[Match]:
4949
continue
5050

5151
matches, template = transform(cfn)
52+
LOGGER.debug(
53+
"Transformed template from %s: \n%s",
54+
name,
55+
format_json_string(cfn.template),
56+
)
5257
if matches:
5358
return matches
5459
cfn.template = template

test/fixtures/templates/good/transform/language_extension.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,21 @@ Parameters:
1313
VpcId:
1414
Type: "AWS::SSM::Parameter::Value<AWS::EC2::VPC::Id>"
1515
Default: "/network/vpc/primary/id"
16+
Environment:
17+
Type: String
18+
Default: Prod
1619
Mappings:
1720
StackIdMap01:
1821
teststack1:
1922
DeletionPolicy: Retain
2023
teststack2:
2124
DeletionPolicy: Delete
25+
Rules:
26+
IsAutPublishAliasParameterProd:
27+
RuleCondition: !Equals [ !Ref Environment, "Prod" ]
28+
Assertions:
29+
- Assert: !Not
30+
- !Equals [ !Ref DBPolicy, "" ]
2231
Resources:
2332
WaitHandleRef:
2433
Type: AWS::CloudFormation::WaitConditionHandle

test/unit/module/transform/test_transform.py

+15
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,21 @@ def test_sam_with_language_extension(self):
117117
template = cfn_yaml.load(filename)
118118
transformed_template = Transform(filename, template, region)
119119
results = transformed_template.transform_template()
120+
self.assertDictEqual(
121+
transformed_template._template.get("Rules"),
122+
{
123+
"IsAutPublishAliasParameterProd": {
124+
"Assertions": [
125+
{
126+
"Assert": {
127+
"Fn::Not": [{"Fn::Equals": [{"Ref": "DBPolicy"}, ""]}]
128+
}
129+
}
130+
],
131+
"RuleCondition": {"Fn::Equals": [{"Ref": "Environment"}, "Prod"]},
132+
}
133+
},
134+
)
120135
self.assertEqual(results, [])
121136

122137
def test_parameter_for_autopublish_code_sha256(self):

0 commit comments

Comments
 (0)