in aws-networkfirewall-loggingconfiguration/src/main/java/software/amazon/networkfirewall/loggingconfiguration/Utils.java [98:174]
static void convertTemplateToUpdateLoggingConfigurationCall(
final ResourceModel model, final ProxyClient<NetworkFirewallClient> proxyClient, boolean isDeleteRequest, boolean isCreateRequest) {
LoggingConfiguration trackingLoggingConfiguration;
if (!isCreateRequest) {
final DescribeLoggingConfigurationRequest readRequest = translateToReadRequest(model);
final DescribeLoggingConfigurationResponse describeLoggingConfigurationResponse = proxyClient
.injectCredentialsAndInvokeV2(readRequest,
proxyClient.client()::describeLoggingConfiguration);
trackingLoggingConfiguration = toModelLoggingConfiguration(
describeLoggingConfigurationResponse.loggingConfiguration());
} else {
trackingLoggingConfiguration = toModelLoggingConfiguration(null);
}
final Map<String, LogDestinationConfig> newConfigMap = isDeleteRequest? new HashMap<>(): convertToMap(model.getLoggingConfiguration());
final Map<String, LogDestinationConfig> currentConfigMap = convertToMap(trackingLoggingConfiguration);
for (String logType: logTypeSet) {
final LogDestinationConfig currentConfig = currentConfigMap.get(logType);
final LogDestinationConfig newConfig = newConfigMap.get(logType);
if (newConfig != null) {
if (currentConfig == null) {
// case: we add a new logType
final List<LogDestinationConfig> trackingLogDestinationConfig =
trackingLoggingConfiguration.getLogDestinationConfigs();
trackingLogDestinationConfig.add(newConfig);
executeUpdateLoggingConfigurationRequest(model, proxyClient,
trackingLoggingConfiguration,trackingLogDestinationConfig);
} else if (newConfig.getLogDestinationType().equals(currentConfig.getLogDestinationType())) {
if (newConfig.getLogDestination().equals(currentConfig.getLogDestination())) {
continue;
}
// case: we just need to update the loggingDestination
final List<LogDestinationConfig> trackingLogDestinationConfig =
trackingLoggingConfiguration.getLogDestinationConfigs();
for (LogDestinationConfig logDestinationConfig: trackingLoggingConfiguration.
getLogDestinationConfigs()) {
if (logDestinationConfig.getLogType().equals(logType)) {
logDestinationConfig.setLogDestination(newConfig.getLogDestination());
}
}
executeUpdateLoggingConfigurationRequest(model, proxyClient,
trackingLoggingConfiguration, trackingLogDestinationConfig);
} else {
// case: we need to swap the loggingDestinationType
final List<LogDestinationConfig> trackingLogDestinationConfig = new ArrayList<>();
for (LogDestinationConfig logDestinationConfig: trackingLoggingConfiguration.
getLogDestinationConfigs()) {
if (!logDestinationConfig.getLogType().equals(logType)) {
trackingLogDestinationConfig.add(logDestinationConfig);
}
}
executeUpdateLoggingConfigurationRequest(model, proxyClient,
trackingLoggingConfiguration, trackingLogDestinationConfig);
trackingLogDestinationConfig.add(newConfig);
executeUpdateLoggingConfigurationRequest(model, proxyClient,
trackingLoggingConfiguration, trackingLogDestinationConfig);
}
} else {
if (currentConfig != null) {
//case: we remove the current loggingDestinationConfig
final List<LogDestinationConfig> trackingLogDestinationConfig = new ArrayList<>();
for (LogDestinationConfig logDestinationConfig: trackingLoggingConfiguration.
getLogDestinationConfigs()) {
if (!logDestinationConfig.getLogType().equals(logType)) {
trackingLogDestinationConfig.add(logDestinationConfig);
}
}
executeUpdateLoggingConfigurationRequest(model, proxyClient,
trackingLoggingConfiguration, trackingLogDestinationConfig);
}
}
}
}