10
10
# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied.
11
11
# See the License for the specific language governing permissions and limitations under the License.
12
12
import logging
13
+ import os
14
+ import subprocess
13
15
14
16
import boto3
15
17
import pytest
16
18
from assertpy import assert_that
17
- from utils import describe_cluster_instances , retrieve_cfn_resources
19
+ from utils import describe_cluster_instances , retrieve_cfn_resources , wait_for_computefleet_changed
18
20
19
21
20
22
@pytest .mark .usefixtures ("os" , "region" )
@@ -40,7 +42,50 @@ def test_on_demand_capacity_reservation(
40
42
pg_capacity_reservation_id = odcr_resources ["integTestsPgOdcr" ],
41
43
pg_capacity_reservation_arn = resource_group_arn ,
42
44
)
43
- cluster = clusters_factory (cluster_config )
45
+
46
+ # Apply patch to the repo
47
+ logging .info ("Applying patch to the repository" )
48
+ repo_root = os .path .abspath (os .path .join (os .path .dirname (__file__ ), "../../../.." ))
49
+ s3_bucket_file = os .path .join (repo_root , "cli/src/pcluster/models/s3_bucket.py" )
50
+
51
+ # Backup the original file
52
+ with open (s3_bucket_file , "r" ) as f :
53
+ original_content = f .read ()
54
+
55
+ try :
56
+ # Apply the patch - inject the bug that replaces capacity reservation IDs
57
+ with open (s3_bucket_file , "r" ) as f :
58
+ content = f .read ()
59
+
60
+ # Add the bug injection line after the upload_config method definition
61
+ modified_content = content .replace (
62
+ " def upload_config(self, config, config_name, format=S3FileFormat.YAML):\n "
63
+ ' """Upload config file to S3 bucket."""' ,
64
+ " def upload_config(self, config, config_name, format=S3FileFormat.YAML):\n "
65
+ ' """Upload config file to S3 bucket."""\n '
66
+ ' if config_name == "cluster-config.yaml":\n '
67
+ " config = re.sub(r'cr-[0-9a-f]{17}', 'cr-11111111111111111', config)" ,
68
+ )
69
+
70
+ # Write the modified content back
71
+ with open (s3_bucket_file , "w" ) as f :
72
+ f .write (modified_content )
73
+
74
+ # Install the CLI
75
+ logging .info ("Installing CLI from local repository" )
76
+ subprocess .run (["pip" , "install" , "./cli" ], cwd = repo_root , check = True )
77
+
78
+ # Create the cluster
79
+ cluster = clusters_factory (cluster_config )
80
+ finally :
81
+ # Revert the patch by restoring the original file
82
+ logging .info ("Reverting patch from the repository" )
83
+ with open (s3_bucket_file , "w" ) as f :
84
+ f .write (original_content )
85
+
86
+ # Reinstall the CLI
87
+ logging .info ("Reinstalling CLI from local repository" )
88
+ subprocess .run (["pip" , "install" , "./cli" ], cwd = repo_root , check = True )
44
89
45
90
_assert_instance_in_capacity_reservation (cluster , region , "open-odcr-id-cr" , odcr_resources ["integTestsOpenOdcr" ])
46
91
_assert_instance_in_capacity_reservation (cluster , region , "open-odcr-arn-cr" , odcr_resources ["integTestsOpenOdcr" ])
@@ -64,6 +109,19 @@ def test_on_demand_capacity_reservation(
64
109
)
65
110
_assert_instance_in_capacity_reservation (cluster , region , "pg-odcr-id-cr" , odcr_resources ["integTestsPgOdcr" ])
66
111
_assert_instance_in_capacity_reservation (cluster , region , "pg-odcr-arn-cr" , odcr_resources ["integTestsPgOdcr" ])
112
+ cluster .stop ()
113
+ wait_for_computefleet_changed (cluster , "STOPPED" )
114
+ updated_config_file = pcluster_config_reader (
115
+ config_file = "pcluster.config.update.yaml" ,
116
+ placement_group = placement_group_stack .cfn_resources ["PlacementGroup" ],
117
+ open_capacity_reservation_id = odcr_resources ["integTestsOpenOdcr" ],
118
+ open_capacity_reservation_arn = resource_group_arn ,
119
+ target_capacity_reservation_id = odcr_resources ["integTestsTargetOdcr" ],
120
+ target_capacity_reservation_arn = resource_group_arn ,
121
+ pg_capacity_reservation_id = odcr_resources ["integTestsPgOdcr" ],
122
+ pg_capacity_reservation_arn = resource_group_arn ,
123
+ )
124
+ cluster .update (str (updated_config_file ))
67
125
68
126
69
127
def _assert_instance_in_capacity_reservation (cluster , region , compute_resource_name , expected_reservation ):
0 commit comments