Skip to content

Commit 68ac3a6

Browse files
authored
Look at OriginGroups too for rule E3057 (#3607)
* Look at OriginGroups too for rule E3057 * Add one more test
1 parent efe911f commit 68ac3a6

File tree

2 files changed

+109
-7
lines changed

2 files changed

+109
-7
lines changed

src/cfnlint/rules/resources/cloudfront/DistributionTargetOriginId.py

+19-6
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,22 @@ def validate(
5050
break
5151
origin_ids.append(origin_id)
5252
else:
53-
yield ValidationError(
54-
message=f"{cache_origin_id!r} is not one of {origin_ids!r}",
55-
rule=self,
56-
path_override=cache_validator.context.path.path,
57-
validator="enum",
58-
)
53+
for origin_id, _ in get_value_from_path(
54+
cache_validator,
55+
instance,
56+
path=deque(["OriginGroups", "Items", "*", "Id"]),
57+
):
58+
if origin_id is None:
59+
continue
60+
if not validator.is_type(origin_id, "string"):
61+
break
62+
if origin_id == cache_origin_id:
63+
break
64+
origin_ids.append(origin_id)
65+
else:
66+
yield ValidationError(
67+
message=f"{cache_origin_id!r} is not one of {origin_ids!r}",
68+
rule=self,
69+
path_override=cache_validator.context.path.path,
70+
validator="enum",
71+
)

test/unit/rules/resources/cloudfront/test_distribution_target_origin_id.py

+90-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def rule():
7474
},
7575
[
7676
ValidationError(
77-
("'origin-id' is not one of " "['foo', 'bar']"),
77+
("'origin-id' is not one of ['foo', 'bar']"),
7878
rule=DistributionTargetOriginId(),
7979
path=deque([]),
8080
validator="enum",
@@ -117,6 +117,95 @@ def rule():
117117
},
118118
[],
119119
),
120+
(
121+
{
122+
"DefaultCacheBehavior": {
123+
"TargetOriginId": "origin-id",
124+
},
125+
"Origins": [
126+
{
127+
"Id": "foo",
128+
},
129+
{
130+
"Id": "bar",
131+
},
132+
],
133+
"OriginGroups": {
134+
"Items": [
135+
{
136+
"Id": "group-1",
137+
},
138+
{
139+
"Id": "group-2",
140+
},
141+
]
142+
},
143+
},
144+
[
145+
ValidationError(
146+
(
147+
"'origin-id' is not one of "
148+
"['foo', 'bar', 'group-1', 'group-2']"
149+
),
150+
rule=DistributionTargetOriginId(),
151+
path=deque([]),
152+
validator="enum",
153+
path_override=deque(["DefaultCacheBehavior", "TargetOriginId"]),
154+
)
155+
],
156+
),
157+
(
158+
{
159+
"DefaultCacheBehavior": {
160+
"TargetOriginId": "origin-id",
161+
},
162+
"Origins": [
163+
{
164+
"Id": "foo",
165+
},
166+
{
167+
"Id": "bar",
168+
},
169+
],
170+
"OriginGroups": {
171+
"Items": [
172+
{
173+
"Id": "group-1",
174+
},
175+
{
176+
"Id": "origin-id",
177+
},
178+
]
179+
},
180+
},
181+
[],
182+
),
183+
(
184+
{
185+
"DefaultCacheBehavior": {
186+
"TargetOriginId": "origin-id",
187+
},
188+
"Origins": [
189+
{
190+
"Id": "foo",
191+
},
192+
{
193+
"Id": "bar",
194+
},
195+
],
196+
"OriginGroups": {
197+
"Items": [
198+
{
199+
"Id": "group-1",
200+
},
201+
{
202+
"Id": {"Ref": "MyParameter"},
203+
},
204+
]
205+
},
206+
},
207+
[],
208+
),
120209
],
121210
)
122211
def test_validate(instance, expected, rule, validator):

0 commit comments

Comments
 (0)