Skip to content

Commit c48aa5c

Browse files
authored
S3 cloudfront error when get_object_enable_dirs is empty (#5427)
* S3 cloudfront error when get_object_enable_dirs is empty Make error more explicid since now the error appears in terraform apply * Add test for the new funcionality
1 parent 405461e commit c48aa5c

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

reconcile/test/utils/test_terrascript_aws_client.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,3 +1933,51 @@ def test_populate_tf_resource_s3_cloudfront_with_bucket_policy_multiple_statemen
19331933
assert "Statement1" in sids
19341934
assert "Statement2" in sids
19351935
assert "Grant access to CloudFront Origin Identity" in sids
1936+
1937+
1938+
@pytest.mark.parametrize(
1939+
"get_object_enable_dirs",
1940+
[
1941+
[],
1942+
None,
1943+
],
1944+
ids=["empty_list", "none"],
1945+
)
1946+
def test_populate_tf_resource_s3_cloudfront_raises_on_empty_get_object_enable_dirs(
1947+
mocker: MockerFixture,
1948+
ts: TerrascriptClient,
1949+
get_object_enable_dirs: list[str] | None,
1950+
) -> None:
1951+
init_values: dict = {
1952+
"region": "us-east-1",
1953+
"distribution_config": {
1954+
"enabled": True,
1955+
"default_root_object": "index.html",
1956+
},
1957+
"tags": {},
1958+
}
1959+
if get_object_enable_dirs is not None:
1960+
init_values["get_object_enable_dirs"] = get_object_enable_dirs
1961+
1962+
mocker.patch.object(ts, "add_resources")
1963+
mocker.patch.object(ts, "init_values", return_value=init_values)
1964+
1965+
resource: dict = {
1966+
"identifier": "s3-cf-bucket",
1967+
"provider": "s3-cloudfront",
1968+
"region": "us-east-1",
1969+
"distribution_config": {
1970+
"enabled": True,
1971+
"default_root_object": "index.html",
1972+
},
1973+
}
1974+
if get_object_enable_dirs is not None:
1975+
resource["get_object_enable_dirs"] = get_object_enable_dirs
1976+
1977+
spec = build_s3_spec(resource)
1978+
1979+
with pytest.raises(
1980+
ValueError,
1981+
match="get_object_enable_dirs must be provided and non-empty",
1982+
):
1983+
ts.populate_tf_resource_s3_cloudfront(spec)

reconcile/utils/terrascript_aws_client.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3464,14 +3464,20 @@ def populate_tf_resource_s3_cloudfront(self, spec: ExternalResourceSpec) -> None
34643464
tf_resources.append(cf_oai_tf_resource)
34653465

34663466
# bucket policy for cloudfront - merge custom policy with CloudFront access statement
3467+
get_object_enable_dirs = common_values.get("get_object_enable_dirs", [])
3468+
if not get_object_enable_dirs:
3469+
raise ValueError(
3470+
f"get_object_enable_dirs must be provided and non-empty for resource {identifier}"
3471+
)
3472+
34673473
cf_statement = {
34683474
"Sid": "Grant access to CloudFront Origin Identity",
34693475
"Effect": "Allow",
34703476
"Principal": {"AWS": "${" + cf_oai_tf_resource.iam_arn + "}"},
34713477
"Action": "s3:GetObject",
34723478
"Resource": [
34733479
f"arn:aws:s3:::{identifier}/{enable_dir}/*"
3474-
for enable_dir in common_values.get("get_object_enable_dirs", [])
3480+
for enable_dir in get_object_enable_dirs
34753481
],
34763482
}
34773483

0 commit comments

Comments
 (0)