Skip to content

Commit 40e4fc9

Browse files
hgreebeHimani Anil Deshpande
authored andcommitted
Add test for build image in isolated env
Switch proxy to al2023 Fix allowlist
1 parent 7998658 commit 40e4fc9

File tree

4 files changed

+394
-0
lines changed

4 files changed

+394
-0
lines changed

tests/integration-tests/configs/develop.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ test-suites:
174174
- regions: ["ca-central-1"]
175175
instances: {{ common.INSTANCES_DEFAULT_X86 }}
176176
oss: ["alinux2"]
177+
test_createami.py::test_build_image_no_internet:
178+
dimensions:
179+
- regions: ["eu-west-1"]
180+
instances: {{ common.INSTANCES_DEFAULT_X86 }}
181+
oss: [{{ OS_X86_1 }}]
177182
custom_resource:
178183
test_cluster_custom_resource.py::test_cluster_create:
179184
dimensions:

tests/integration-tests/tests/createami/test_createami.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import datetime
1313
import json
1414
import logging
15+
import os
1516
import re
1617
import tarfile
1718
import tempfile
@@ -51,6 +52,52 @@ class ImageNotFound(Exception):
5152
pass
5253

5354

55+
@pytest.fixture(scope="class")
56+
def no_internet_proxy_stack(region, request, cfn_stacks_factory):
57+
"""Deploy a VPC with a proxy that only allows OS repo access and VPC endpoints for AWS services."""
58+
proxy_template_path = os.path.join(os.path.dirname(__file__), "test_createami", "test_build_image_no_internet", "proxy_stack.yaml")
59+
with open(proxy_template_path) as f:
60+
template = f.read()
61+
62+
stack = CfnStack(
63+
name=generate_stack_name("integ-tests-build-image-no-internet", request.config.getoption("stackname_suffix")),
64+
region=region,
65+
template=template,
66+
parameters=[{"ParameterKey": "Keypair", "ParameterValue": request.config.getoption("key_name")}],
67+
capabilities=["CAPABILITY_IAM"],
68+
)
69+
cfn_stacks_factory.create_stack(stack)
70+
yield stack
71+
if not request.config.getoption("no_delete"):
72+
cfn_stacks_factory.delete_stack(stack.name, region)
73+
74+
75+
@pytest.mark.usefixtures("instance")
76+
def test_build_image_no_internet(
77+
region,
78+
os,
79+
instance,
80+
pcluster_config_reader,
81+
architecture,
82+
no_internet_proxy_stack,
83+
images_factory,
84+
request,
85+
):
86+
"""Test build image in a private subnet with no internet access, only VPC endpoints and a proxy for OS repos."""
87+
base_ami = retrieve_latest_ami(region, os, architecture=architecture)
88+
89+
image_id = generate_stack_name("integ-tests-build-image-no-internet", request.config.getoption("stackname_suffix"))
90+
image_config = pcluster_config_reader(
91+
config_file="image.config.yaml",
92+
parent_image=base_ami,
93+
subnet_id=no_internet_proxy_stack.cfn_outputs["PrivateSubnetId"],
94+
security_group_id=no_internet_proxy_stack.cfn_outputs["DefaultSecurityGroupId"],
95+
)
96+
97+
image = images_factory(image_id, image_config, region)
98+
_test_build_image_success(image)
99+
100+
54101
@pytest.mark.usefixtures("instance")
55102
def test_invalid_config(
56103
region,
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Image:
2+
RootVolume:
3+
Size: 200
4+
Encrypted: True
5+
6+
Build:
7+
InstanceType: {{ instance }}
8+
ParentImage: {{ parent_image }}
9+
SecurityGroupIds:
10+
- {{ security_group_id }}
11+
SubnetId: {{ subnet_id }}
12+
13+
DevSettings:
14+
TerminateInstanceOnFailure: True

0 commit comments

Comments
 (0)