in aws-devopsguru-resourcecollection/src/main/java/software/amazon/devopsguru/resourcecollection/BaseHandlerStd.java [128:173]
protected UpdateResourceCollectionResponse updateResourceCollection(
final UpdateResourceCollectionRequest updateResourceCollectionRequest,
final ProxyClient<DevOpsGuruClient> proxyClient,
final ResourceModel model,
final Logger logger,
final boolean overrideEmpty) {
UpdateResourceCollectionResponse updateResourceCollectionResponse = null;
List<String> getResourceCollectionResponseStackNames = null;
try {
GetResourceCollectionRequest getResourceCollectionRequest =
GetResourceCollectionRequest.builder().resourceCollectionType(ResourceCollectionType.AWS_CLOUD_FORMATION.getName()).build();
getResourceCollectionResponseStackNames = getAllResourceCollection(getResourceCollectionRequest,
proxyClient, model, logger);
logger.log(String.format("getAllResourceCollection return %s", getResourceCollectionResponseStackNames));
} catch (CfnNotFoundException e) {
if (overrideEmpty) {
getResourceCollectionResponseStackNames = new ArrayList<>();
logger.log("This is user first time onboarding. Setting existing list as empty.");
} else {
logger.log("Attempting to update non-existent resource");
throw e;
}
}
List<String> updateStackNames =
updateResourceCollectionRequest.resourceCollection().cloudFormation().stackNames();
Set<String> updateStackNamesSet = new HashSet<>(updateStackNames);
Set<String> existingStackNamesSet = new HashSet<>(getResourceCollectionResponseStackNames);
List<String> addStackNames = new ArrayList<>(Sets.difference(updateStackNamesSet, existingStackNamesSet));
List<String> removeStackNames = new ArrayList<>(Sets.difference(existingStackNamesSet, updateStackNamesSet));
if (addStackNames.size() > 0) {
updateResourceCollectionResponse = updateResourceCollectionByBatch(addStackNames, Translator.AddAction,
proxyClient, logger);
}
if (removeStackNames.size() > 0 && !existingStackNamesSet.contains("*") && !updateStackNamesSet.contains("*")) {
updateResourceCollectionResponse = updateResourceCollectionByBatch(removeStackNames,
Translator.RemoveAction, proxyClient, logger);
}
if (updateResourceCollectionResponse == null)
return UpdateResourceCollectionResponse.builder().build();
else
return updateResourceCollectionResponse;
}