Skip to content

Commit 0d1fae8

Browse files
committed
Add integration test for queue and compute resource tags
Signed-off-by: chenwany <[email protected]>
1 parent 93d459f commit 0d1fae8

File tree

4 files changed

+161
-13
lines changed

4 files changed

+161
-13
lines changed

tests/integration-tests/tests/tags/test_tag_propagation.py

Lines changed: 59 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import pytest
1616
from assertpy import assert_that
17+
from remote_command_executor import RemoteCommandExecutor
1718
from retrying import retry
1819
from tags_utils import (
1920
convert_tags_dicts_to_tags_list,
@@ -26,6 +27,7 @@
2627
)
2728
from time_utils import minutes, seconds
2829

30+
from tests.common.schedulers_common import SlurmCommands
2931
from tests.common.utils import get_installed_parallelcluster_version
3032

3133

@@ -64,15 +66,34 @@ def test_tag_propagation(pcluster_config_reader, clusters_factory, scheduler, os
6466
# Checks for tag propagation
6567
_check_tag_propagation(cluster, scheduler, os, volume_name)
6668

69+
if scheduler == "slurm":
70+
_test_queue_and_compute_resources_tags(cluster, pcluster_config_reader, scheduler, os, volume_name)
71+
6772

6873
@retry(wait_fixed=seconds(20), stop_max_delay=minutes(5))
6974
def _wait_for_compute_fleet_start(cluster):
7075
compute_nodes = cluster.get_cluster_instance_ids(node_type="Compute")
7176
assert_that(compute_nodes).is_length(1)
7277

7378

74-
def _check_tag_propagation(cluster, scheduler, os, volume_name):
75-
config_file_tags = {"ConfigFileTag": "ConfigFileTagValue"}
79+
def _check_tag_propagation(cluster, scheduler, os, volume_name, queue_tags=None, compute_resource_tags=None):
80+
config_file_tags = {
81+
"ConfigFileTag": "ConfigFileTagValue",
82+
"QueueOverrideTag": "ClusterLevelValue",
83+
"ComputeOverrideTag": "ClusterLevelValue",
84+
}
85+
if not queue_tags:
86+
queue_tags = {
87+
"QueueTag": "QueueValue",
88+
"QueueOverrideTag": "QueueLevelValue",
89+
"ComputeOverrideTag": "QueueLevelValue",
90+
}
91+
if not compute_resource_tags:
92+
compute_resource_tags = {
93+
"ComputeResourceTag": "ComputeResourceValue",
94+
"ComputeOverrideTag": "ComputeLevelValue",
95+
}
96+
7697
version_tags = {"parallelcluster:version": get_installed_parallelcluster_version()}
7798
cluster_name_tags = {"parallelcluster:cluster-name": cluster.name}
7899
test_cases = [
@@ -101,7 +122,7 @@ def _check_tag_propagation(cluster, scheduler, os, volume_name):
101122
"expected_tags": (
102123
cluster_name_tags,
103124
{"Name": "Compute", "parallelcluster:node-type": "Compute"},
104-
config_file_tags,
125+
{**config_file_tags, **queue_tags, **compute_resource_tags},
105126
),
106127
"skip": scheduler == "awsbatch",
107128
},
@@ -111,7 +132,7 @@ def _check_tag_propagation(cluster, scheduler, os, volume_name):
111132
"expected_tags": (
112133
cluster_name_tags,
113134
{"parallelcluster:node-type": "Compute"},
114-
config_file_tags if scheduler == "slurm" else {},
135+
{**config_file_tags, **queue_tags, **compute_resource_tags},
115136
),
116137
"tag_getter_kwargs": {"cluster": cluster, "os": os},
117138
"skip": scheduler == "awsbatch",
@@ -135,3 +156,37 @@ def _check_tag_propagation(cluster, scheduler, os, volume_name):
135156
observed_tags = tag_getter(**tag_getter_args)
136157
expected_tags = test_case["expected_tags"]
137158
assert_that(observed_tags).contains(*convert_tags_dicts_to_tags_list(expected_tags))
159+
160+
161+
def _test_queue_and_compute_resources_tags(cluster, pcluster_config_reader, scheduler, os, volume_name):
162+
# Test update queue level tags and compute resource level tags with queue update strategy
163+
command_executor = RemoteCommandExecutor(cluster)
164+
slurm_commands = SlurmCommands(command_executor)
165+
result = slurm_commands.submit_command("sleep infinity", constraint="static")
166+
job_id = slurm_commands.assert_job_submitted(result.stdout)
167+
slurm_commands.wait_job_running(job_id)
168+
169+
# Updates cluster with new configuration
170+
updated_cluster_config = pcluster_config_reader(
171+
config_file="pcluster.config.update.queue_update.yaml", volume_name=volume_name
172+
)
173+
cluster.update(str(updated_cluster_config))
174+
175+
slurm_commands.assert_job_state(job_id, "RUNNING")
176+
# check nodes still have old tags before replacement
177+
_check_tag_propagation(cluster, scheduler, os, volume_name)
178+
179+
# requeue job to launch new instances for nodes
180+
command_executor.run_remote_command(f"scontrol requeue {job_id}")
181+
slurm_commands.wait_job_running(job_id)
182+
# check new instances have new tags
183+
new_queue_tags = {
184+
"QueueTagUpdate": "QueueValueUpdate",
185+
"QueueOverrideTag": "QueueLevelValueUpdate",
186+
"ComputeOverrideTag": "QueueLevelValueUpdate",
187+
}
188+
new_compute_resource_tags = {
189+
"ComputeResourceTagUpdate": "ComputeResourceValueUpdate",
190+
"ComputeOverrideTag": "ComputeLevelValueUpdate",
191+
}
192+
_check_tag_propagation(cluster, scheduler, os, volume_name, new_queue_tags, new_compute_resource_tags)
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
Image:
2+
Os: {{ os }}
3+
Tags:
4+
- Key: ConfigFileTag
5+
Value: ConfigFileTagValue
6+
- Key: QueueOverrideTag
7+
Value: ClusterLevelValue
8+
- Key: ComputeOverrideTag
9+
Value: ClusterLevelValue
10+
HeadNode:
11+
InstanceType: {{ instance }}
12+
Networking:
13+
SubnetId: {{ public_subnet_id }}
14+
Ssh:
15+
KeyName: {{ key_name }}
16+
Imds:
17+
Secured: {{ imds_secured }}
18+
Scheduling:
19+
Scheduler: {{ scheduler }}
20+
SlurmSettings:
21+
QueueUpdateStrategy: DRAIN
22+
SlurmQueues:
23+
- Name: queue-0
24+
ComputeResources:
25+
- Name: compute-resource-1
26+
Instances:
27+
- InstanceType: {{ instance }}
28+
MinCount: 1
29+
Tags:
30+
- Key: ComputeResourceTagUpdate
31+
Value: ComputeResourceValueUpdate
32+
- Key: ComputeOverrideTag
33+
Value: ComputeLevelValueUpdate
34+
Networking:
35+
SubnetIds:
36+
- {{ private_subnet_id }}
37+
Tags:
38+
- Key: QueueTagUpdate
39+
Value: QueueValueUpdate
40+
- Key: QueueOverrideTag
41+
Value: QueueLevelValueUpdate
42+
- Key: ComputeOverrideTag
43+
Value: QueueLevelValueUpdate
44+
SharedStorage:
45+
- MountDir: /shared
46+
Name: {{ volume_name }}
47+
StorageType: Ebs

tests/integration-tests/tests/tags/test_tag_propagation/test_tag_propagation/pcluster.config.update.yaml

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ Image:
33
Tags:
44
- Key: ConfigFileTag
55
Value: ConfigFileTagValue
6+
- Key: QueueOverrideTag
7+
Value: ClusterLevelValue
8+
- Key: ComputeOverrideTag
9+
Value: ClusterLevelValue
610
HeadNode:
711
InstanceType: {{ instance }}
812
Networking:
@@ -13,23 +17,42 @@ HeadNode:
1317
Secured: {{ imds_secured }}
1418
Scheduling:
1519
Scheduler: {{ scheduler }}
16-
{% if scheduler == "awsbatch" %}AwsBatchQueues:{% else %}SlurmQueues:{% endif %}
17-
- Name: queue-1
20+
{% if scheduler == "awsbatch" %}
21+
AwsBatchQueues:
22+
- Name: queue-0
1823
ComputeResources:
1924
- Name: compute-resource-1
20-
{% if scheduler == "awsbatch" %}
2125
InstanceTypes:
2226
- {{ instance }}
2327
MinvCpus: 4
2428
DesiredvCpus: 4
25-
{% else %}
29+
Networking:
30+
SubnetIds:
31+
- {{ private_subnet_id }}
32+
{% else %}
33+
SlurmQueues:
34+
- Name: queue-0
35+
ComputeResources:
36+
- Name: compute-resource-1
2637
Instances:
2738
- InstanceType: {{ instance }}
2839
MinCount: 1
29-
{% endif %}
40+
Tags:
41+
- Key: ComputeResourceTag
42+
Value: ComputeResourceValue
43+
- Key: ComputeOverrideTag
44+
Value: ComputeLevelValue
3045
Networking:
3146
SubnetIds:
3247
- {{ private_subnet_id }}
48+
Tags:
49+
- Key: QueueTag
50+
Value: QueueValue
51+
- Key: QueueOverrideTag
52+
Value: QueueLevelValue
53+
- Key: ComputeOverrideTag
54+
Value: QueueLevelValue
55+
{% endif %}
3356
SharedStorage:
3457
- MountDir: /shared
3558
Name: {{ volume_name }}

tests/integration-tests/tests/tags/test_tag_propagation/test_tag_propagation/pcluster.config.yaml

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ Image:
33
Tags:
44
- Key: ConfigFileTag
55
Value: ConfigFileTagValue
6+
- Key: QueueOverrideTag
7+
Value: ClusterLevelValue
8+
- Key: ComputeOverrideTag
9+
Value: ClusterLevelValue
610
HeadNode:
711
InstanceType: {{ instance }}
812
Networking:
@@ -13,23 +17,42 @@ HeadNode:
1317
Secured: {{ imds_secured }}
1418
Scheduling:
1519
Scheduler: {{ scheduler }}
16-
{% if scheduler == "awsbatch" %}AwsBatchQueues:{% else %}SlurmQueues:{% endif %}
20+
{% if scheduler == "awsbatch" %}
21+
AwsBatchQueues:
1722
- Name: queue-0
1823
ComputeResources:
1924
- Name: compute-resource-0
20-
{% if scheduler == "awsbatch" %}
2125
InstanceTypes:
2226
- {{ instance }}
2327
MinvCpus: 4
2428
DesiredvCpus: 4
25-
{% else %}
29+
Networking:
30+
SubnetIds:
31+
- {{ private_subnet_id }}
32+
{% else %}
33+
SlurmQueues:
34+
- Name: queue-0
35+
ComputeResources:
36+
- Name: compute-resource-0
2637
Instances:
2738
- InstanceType: {{ instance }}
2839
MinCount: 1
29-
{% endif %}
40+
Tags:
41+
- Key: ComputeResourceTag
42+
Value: ComputeResourceValue
43+
- Key: ComputeOverrideTag
44+
Value: ComputeLevelValue
3045
Networking:
3146
SubnetIds:
3247
- {{ private_subnet_id }}
48+
Tags:
49+
- Key: QueueTag
50+
Value: QueueValue
51+
- Key: QueueOverrideTag
52+
Value: QueueLevelValue
53+
- Key: ComputeOverrideTag
54+
Value: QueueLevelValue
55+
{% endif %}
3356
SharedStorage:
3457
- MountDir: /shared
3558
Name: {{ volume_name }}

0 commit comments

Comments
 (0)