Skip to content

Commit b480625

Browse files
committed
[Test] In test_pcluster_configure, assert that head node and compute instance types are taken from the current free tier.
1 parent 2806ab7 commit b480625

File tree

2 files changed

+39
-7
lines changed

2 files changed

+39
-7
lines changed

tests/integration-tests/tests/configure/test_pcluster_configure.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied.
1111
# See the License for the specific language governing permissions and limitations under the License.
1212
import logging
13+
import re
1314
from datetime import datetime
1415
from os import environ
1516

@@ -21,23 +22,26 @@
2122
from cfn_stacks_factory import CfnVpcStack
2223
from conftest import inject_additional_config_settings
2324
from conftest_networking import CIDR_FOR_CUSTOM_SUBNETS
24-
from utils import get_instance_info
25+
from utils import get_instance_info, get_free_tier_instance_types, or_regex
2526

2627
PROMPTS = {
2728
"region": lambda region: {"prompt": r"AWS Region ID \[.*\]: ", "response": region},
2829
"key_pair": lambda key_name: {"prompt": r"EC2 Key Pair Name \[.*\]: ", "response": key_name},
2930
"scheduler": lambda scheduler: {"prompt": r"Scheduler \[slurm\]: ", "response": scheduler},
3031
"os": lambda os: {"prompt": r"Operating System \[alinux2\]: ", "response": os, "skip_for_batch": True},
31-
"head_instance_type": lambda instance: {"prompt": r"Head node instance type \[t.\.micro\]: ", "response": instance},
32+
"head_instance_type": lambda free_tier_instance_types, instance: {
33+
"prompt": rf"Head node instance type \[({or_regex(free_tier_instance_types)}\]: ",
34+
"response": instance,
35+
},
3236
"no_of_queues": lambda n: {"prompt": rf"Number of queues \[{n}\]: ", "response": f"{n}", "skip_for_batch": True},
3337
"queue_name": lambda queue, name: {"prompt": rf"Name of queue {queue} \[queue{queue}\]: ", "response": name},
3438
"no_of_compute_resources": lambda queue_name, queue, n: {
3539
"prompt": rf"Number of compute resources for {queue_name} \[{queue}\]: ",
3640
"response": f"{n}",
3741
"skip_for_batch": True,
3842
},
39-
"compute_instance_type": lambda resource, queue_name, instance: {
40-
"prompt": rf"Compute instance type for compute resource {resource} in {queue_name} \[t.\.micro\]: ",
43+
"compute_instance_type": lambda free_tier_instance_types, resource, queue_name, instance: {
44+
"prompt": rf"Compute instance type for compute resource {resource} in {queue_name} \[({or_regex(free_tier_instance_types)})\]: ",
4145
"response": instance,
4246
"skip_for_batch": True,
4347
},
@@ -161,7 +165,12 @@ def test_efa_and_placement_group(
161165
PROMPTS["no_of_queues"](1),
162166
PROMPTS["queue_name"](queue=1, name="myqueue"),
163167
PROMPTS["no_of_compute_resources"](queue_name="myqueue", queue=1, n=1),
164-
PROMPTS["compute_instance_type"](resource=1, queue_name="myqueue", instance=instance),
168+
PROMPTS["compute_instance_type"](
169+
free_tier_instance_types=get_free_tier_instance_types(region),
170+
resource=1,
171+
queue_name="myqueue",
172+
instance=instance,
173+
),
165174
PROMPTS["enable_efa"](efa_response),
166175
prompt_max_size(scheduler=scheduler),
167176
]
@@ -237,7 +246,10 @@ def standard_first_stage_prompts(region, key_name, scheduler, os, instance):
237246
PROMPTS["key_pair"](key_name),
238247
PROMPTS["scheduler"](scheduler),
239248
PROMPTS["os"](os),
240-
PROMPTS["head_instance_type"](instance),
249+
PROMPTS["head_instance_type"](
250+
free_tier_instance_types=get_free_tier_instance_types(region),
251+
instance=instance,
252+
),
241253
]
242254

243255

@@ -246,7 +258,12 @@ def standard_queue_prompts(scheduler, instance, region, size=""):
246258
PROMPTS["no_of_queues"](1),
247259
PROMPTS["queue_name"](queue=1, name="myqueue"),
248260
PROMPTS["no_of_compute_resources"](queue_name="myqueue", queue=1, n=1),
249-
PROMPTS["compute_instance_type"](resource=1, queue_name="myqueue", instance=instance),
261+
PROMPTS["compute_instance_type"](
262+
free_tier_instance_types=get_free_tier_instance_types(region),
263+
resource=1,
264+
queue_name="myqueue",
265+
instance=instance,
266+
),
250267
]
251268

252269
is_efa_supported = False

tests/integration-tests/utils.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,3 +908,18 @@ def find_stack_by_tag(tag, region, stack_prefix):
908908
logging.info(f"Found stack: {name} (created on {creation_date})")
909909
return name
910910
return None
911+
912+
913+
def get_free_tier_instance_types(region: str = None):
914+
ec2 = boto3.client('ec2', region_name=region)
915+
response = ec2.describe_instance_types(
916+
Filters=[
917+
{"Name": "free-tier-eligible", "Values": ["true"]},
918+
{"Name": "current-generation", "Values": ["true"]},
919+
]
920+
)
921+
return [instance['InstanceType'] for instance in response['InstanceTypes']]
922+
923+
924+
def or_regex(items: list):
925+
return '|'.join(map(re.escape, items))

0 commit comments

Comments
 (0)