Skip to content

Commit fd5f10b

Browse files
committed
[Test] Add options 'api-stack' and 'build-image-roles-stack'
to let the test runner use an existing ParallelCluster API stack and a build-image permissions stack, respectively. Signed-off-by: Giacomo Marciani <mgiacomo@amazon.com>
1 parent 2a2be29 commit fd5f10b

File tree

3 files changed

+68
-32
lines changed

3 files changed

+68
-32
lines changed

tests/integration-tests/README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ usage: test_runner.py [-h] --key-name KEY_NAME --key-path KEY_PATH [-n PARALLELI
4444
[--node-git-ref NODE_GIT_REF] [--ami-owner AMI_OWNER] [--benchmarks] [--benchmarks-target-capacity BENCHMARKS_TARGET_CAPACITY] [--benchmarks-max-time BENCHMARKS_MAX_TIME]
4545
[--api-definition-s3-uri API_DEFINITION_S3_URI] [--api-infrastructure-s3-uri API_INFRASTRUCTURE_S3_URI] [--api-uri API_URI] [--policies-uri POLICIES_URI] [--vpc-stack VPC_STACK] [--cluster CLUSTER] [--lambda-layer-source LAMBDA_LAYER_SOURCE]
4646
[--no-delete] [--retain-ad-stack] [--delete-logs-on-success] [--stackname-suffix STACKNAME_SUFFIX] [--dry-run] [--directory-stack-name DIRECTORY_STACK_NAME] [--ldaps-nlb-stack-name LDAPS_NLB_STACK_NAME] [--external-shared-storage-stack-name SHARED_STORAGE_STACK_NAME]
47-
[--bucket-name BUCKET_NAME] [--proxy-stack PROXY_STACK_NAME]
47+
[--bucket-name BUCKET_NAME] [--proxy-stack PROXY_STACK_NAME] [--build-image-roles-stack BUILD_IMAGE_ROLES_STACK_NAME] [--api-stack API_STACK_NAME]
4848
4949
Run integration tests suite.
5050
@@ -178,6 +178,10 @@ Debugging/Development options:
178178
Name of an existing bucket. (default: None)
179179
--proxy-stack
180180
Name of an existing proxy stack. (default: None)
181+
--build-image-roles-stack
182+
Name of CFN stack providing the build image permissions. (default: None)
183+
--api-stack
184+
Name of CFN stack providing the ParallelCluster API infrastructure. (default: None)
181185
```
182186

183187
Here is an example of tests submission:

tests/integration-tests/conftest.py

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,14 @@ def pytest_addoption(parser):
214214
"--proxy-stack",
215215
help="Name of CFN stack providing a Proxy environment.",
216216
)
217+
parser.addoption(
218+
"--build-image-roles-stack",
219+
help="Name of CFN stack providing the build image permissions.",
220+
)
221+
parser.addoption(
222+
"--api-stack",
223+
help="Name of CFN stack providing the ParallelCluster API infrastructure.",
224+
)
217225

218226

219227
def pytest_generate_tests(metafunc):
@@ -420,38 +428,44 @@ def api_server_factory(
420428
api_servers = {}
421429

422430
def _api_server_factory(server_region):
423-
api_stack_name = generate_stack_name("integ-tests-api", request.config.getoption("stackname_suffix"))
424-
425-
params = [
426-
{"ParameterKey": "EnableIamAdminAccess", "ParameterValue": "true"},
427-
{"ParameterKey": "CreateApiUserRole", "ParameterValue": "false"},
428-
]
429-
if api_definition_s3_uri:
430-
params.append({"ParameterKey": "ApiDefinitionS3Uri", "ParameterValue": api_definition_s3_uri})
431-
if policies_uri:
432-
params.append({"ParameterKey": "PoliciesTemplateUri", "ParameterValue": policies_uri})
433-
if resource_bucket:
434-
params.append({"ParameterKey": "CustomBucket", "ParameterValue": resource_bucket})
435-
436-
template = (
437-
api_infrastructure_s3_uri
438-
or f"https://{resource_bucket}.s3.{server_region}.amazonaws.com"
439-
f"{'.cn' if server_region.startswith('cn') else ''}"
440-
f"/parallelcluster/{get_installed_parallelcluster_version()}/api/parallelcluster-api.yaml"
441-
)
442-
if server_region not in api_servers:
443-
logging.info(f"Creating API Server stack: {api_stack_name} in {server_region} with template {template}")
444-
stack = CfnStack(
445-
name=api_stack_name,
446-
region=server_region,
447-
parameters=params,
448-
capabilities=["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"],
449-
template=template,
450-
)
451-
cfn_stacks_factory.create_stack(stack)
452-
api_servers[server_region] = stack
431+
option = "api_stack"
432+
if request.config.getoption(option):
433+
api_stack_name = request.config.getoption(option)
434+
logging.info(f"Using existing ParallelCluster API stack in {server_region}: {api_stack_name}")
435+
api_servers[server_region] = CfnStack(name=api_stack_name, region=server_region, template=None)
453436
else:
454-
logging.info(f"Found cached API Server stack: {api_stack_name} in {server_region}")
437+
api_stack_name = generate_stack_name("integ-tests-api", request.config.getoption("stackname_suffix"))
438+
439+
params = [
440+
{"ParameterKey": "EnableIamAdminAccess", "ParameterValue": "true"},
441+
{"ParameterKey": "CreateApiUserRole", "ParameterValue": "false"},
442+
]
443+
if api_definition_s3_uri:
444+
params.append({"ParameterKey": "ApiDefinitionS3Uri", "ParameterValue": api_definition_s3_uri})
445+
if policies_uri:
446+
params.append({"ParameterKey": "PoliciesTemplateUri", "ParameterValue": policies_uri})
447+
if resource_bucket:
448+
params.append({"ParameterKey": "CustomBucket", "ParameterValue": resource_bucket})
449+
450+
template = (
451+
api_infrastructure_s3_uri
452+
or f"https://{resource_bucket}.s3.{server_region}.amazonaws.com"
453+
f"{'.cn' if server_region.startswith('cn') else ''}"
454+
f"/parallelcluster/{get_installed_parallelcluster_version()}/api/parallelcluster-api.yaml"
455+
)
456+
if server_region not in api_servers:
457+
logging.info(f"Creating API Server stack: {api_stack_name} in {server_region} with template {template}")
458+
stack = CfnStack(
459+
name=api_stack_name,
460+
region=server_region,
461+
parameters=params,
462+
capabilities=["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"],
463+
template=template,
464+
)
465+
cfn_stacks_factory.create_stack(stack)
466+
api_servers[server_region] = stack
467+
else:
468+
logging.info(f"Found cached API Server stack: {api_stack_name} in {server_region}")
455469

456470
return api_servers[server_region]
457471

tests/integration-tests/test_runner.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"api_uri": None,
7171
"cluster": None,
7272
"policies_uri": None,
73+
"api_stack": None,
7374
"api_definition_s3_uri": None,
7475
"api_infrastructure_s3_uri": None,
7576
"no_delete": False,
@@ -99,6 +100,7 @@
99100
"retain_ad_stack": False,
100101
"global_build_number": 0,
101102
"proxy_stack": None,
103+
"build_image_roles_stack": None,
102104
}
103105

104106

@@ -461,6 +463,16 @@ def _init_argparser():
461463
help="Name of CFN stack providing a Proxy environment.",
462464
default=TEST_DEFAULTS.get("proxy_stack"),
463465
)
466+
debug_group.add_argument(
467+
"--build-image-roles-stack",
468+
help="Name of CFN stack providing build image permissions.",
469+
default=TEST_DEFAULTS.get("build_image_roles_stack"),
470+
)
471+
debug_group.add_argument(
472+
"--api-stack",
473+
help="Name of CFN stack providing the ParallelCluster API infrastructure.",
474+
default=TEST_DEFAULTS.get("api_stack"),
475+
)
464476

465477
return parser
466478

@@ -685,6 +697,12 @@ def _set_custom_stack_args(args, pytest_args): # noqa: C901
685697
if args.proxy_stack:
686698
pytest_args.extend(["--proxy-stack", args.proxy_stack])
687699

700+
if args.build_image_roles_stack:
701+
pytest_args.extend(["--build-image-roles-stack", args.build_image_roles_stack])
702+
703+
if args.api_stack:
704+
pytest_args.extend(["--api-stack", args.api_stack])
705+
688706

689707
def _set_validate_instance_type_args(args, pytest_args):
690708
if args.force_elastic_ip:

0 commit comments

Comments
 (0)