From fb193c4ec28d4f7adb8aeba0756698b71291f5ae Mon Sep 17 00:00:00 2001 From: Samyak Kumar Date: Thu, 13 Feb 2025 11:20:50 -0800 Subject: [PATCH] Only run OU and Account list validations if ALT was enabled --- .../stackset/util/AltResourceModelAnalyzer.java | 6 ++++-- .../cloudformation/stackset/util/Validator.java | 8 ++++---- .../util/AltResourceModelAnalyzerTest.java | 15 --------------- 3 files changed, 8 insertions(+), 21 deletions(-) diff --git a/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzer.java b/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzer.java index 00f9ce2..335abb9 100644 --- a/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzer.java +++ b/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzer.java @@ -16,6 +16,8 @@ import software.amazon.cloudformation.stackset.ResourceModel; import software.amazon.cloudformation.stackset.StackInstances; +import static software.amazon.cloudformation.stackset.util.Comparator.isAccountLevelTargetingEnabled; + @Builder @Data public class AltResourceModelAnalyzer { @@ -40,8 +42,8 @@ public void analyze(final StackInstancesPlaceHolder placeHolder) { Set currentStackInstancesGroup = currentModel == null ? new HashSet<>() : currentModel.getStackInstancesGroup(); - Validator.validateServiceMangedInstancesGroup(previousStackInstancesGroup); - Validator.validateServiceMangedInstancesGroup(currentStackInstancesGroup); + Validator.validateServiceMangedInstancesGroup(previousStackInstancesGroup, isAccountLevelTargetingEnabled(previousModel)); + Validator.validateServiceMangedInstancesGroup(currentStackInstancesGroup, isAccountLevelTargetingEnabled(currentModel)); Set previousModelRegionOrder = new LinkedHashSet<>(); Set currentModelRegionOrder = new LinkedHashSet<>(); diff --git a/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/Validator.java b/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/Validator.java index 247b2b9..89939a9 100644 --- a/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/Validator.java +++ b/aws-cloudformation-stackset/src/main/java/software/amazon/cloudformation/stackset/util/Validator.java @@ -76,15 +76,15 @@ public void validateTemplate( } } - public static void validateServiceMangedInstancesGroup (final Collection stackInstancesGroup) { + public static void validateServiceMangedInstancesGroup (final Collection stackInstancesGroup, boolean isAlt) { if (CollectionUtils.isNullOrEmpty(stackInstancesGroup)) return; stackInstancesGroup.forEach(it -> - validateServiceManagedDeploymentTarget(it.getDeploymentTargets()) + validateServiceManagedDeploymentTarget(it.getDeploymentTargets(), isAlt) ); } - public static void validateServiceManagedDeploymentTarget (DeploymentTargets targets) { + public static void validateServiceManagedDeploymentTarget (DeploymentTargets targets, boolean isAlt) { if (targets == null) { throw new CfnInvalidRequestException("DeploymentTargets should be specified"); @@ -106,7 +106,7 @@ public static void validateServiceManagedDeploymentTarget (DeploymentTargets tar final Set accounts = CollectionUtils.isNullOrEmpty(targets.getAccounts()) ? new HashSet<>() : targets.getAccounts(); - if (Objects.equals(filter, NONE) && !CollectionUtils.isNullOrEmpty(accounts)) { + if (isAlt && (Objects.equals(filter, NONE) && !CollectionUtils.isNullOrEmpty(accounts))) { throw new CfnInvalidRequestException("AccountFilterType should be specified when both OrganizationalUnitIds and Accounts are provided"); } diff --git a/aws-cloudformation-stackset/src/test/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzerTest.java b/aws-cloudformation-stackset/src/test/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzerTest.java index 4f927d1..6c41044 100644 --- a/aws-cloudformation-stackset/src/test/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzerTest.java +++ b/aws-cloudformation-stackset/src/test/java/software/amazon/cloudformation/stackset/util/AltResourceModelAnalyzerTest.java @@ -59,15 +59,6 @@ public void test_Invalid_Alt_Model() { ResourceModel modelNoneFilter = generateModel(new HashSet<>(Arrays.asList( generateInstances(OU_1, account_1, NONE)))); - ResourceModel modelNullFilter = generateModel(new HashSet<>(Arrays.asList( - StackInstances.builder().deploymentTargets( - DeploymentTargets.builder() - .organizationalUnitIds(new HashSet<>(Arrays.asList(OU_1))) - .accounts(new HashSet<>(Arrays.asList(account_1))) - .build()) - .build() - ))); - ResourceModel modelPartiallyInvalid = generateModel(new HashSet<>(Arrays.asList( generateInstances(OU_1, account_1, INTER), generateInstances(OU_1, account_1, NONE)))); @@ -97,12 +88,6 @@ public void test_Invalid_Alt_Model() { ); assertThat(ex.getMessage()).contains("AccountFilterType should be specified when both OrganizationalUnitIds and Accounts are provided"); - ex = assertThrows( - CfnInvalidRequestException.class, - () -> AltResourceModelAnalyzer.builder().currentModel(modelNullFilter).build().analyze(placeHolder) - ); - assertThat(ex.getMessage()).contains("AccountFilterType should be specified when both OrganizationalUnitIds and Accounts are provided"); - assertThrows( CfnInvalidRequestException.class, () -> AltResourceModelAnalyzer.builder().currentModel(modelPartiallyInvalid).build().analyze(placeHolder)