LocalStackCapabilitySnapshot.java
package com.cloudforge.core.local;
import java.net.URI;
import java.util.EnumSet;
import java.util.Map;
import java.util.Set;
/**
* Snapshot of LocalStack health, edition, and service availability for adapt/deploy decisions.
*/
public record LocalStackCapabilitySnapshot(
boolean healthy,
URI endpoint,
LocalStackTierProfile tierProfile,
String edition,
String version,
Set<LocalStackServiceCapability> capabilities,
Map<String, Object> details) {
public LocalStackCapabilitySnapshot {
capabilities = capabilities == null
? Set.of()
: Set.copyOf(capabilities);
details = details == null ? Map.of() : Map.copyOf(details);
}
public boolean supports(LocalStackServiceCapability capability) {
return capabilities.contains(capability);
}
public boolean supportsFargatePath() {
return supports(LocalStackServiceCapability.ECS)
&& supports(LocalStackServiceCapability.ELBV2);
}
public boolean supportsRdsPath() {
return supports(LocalStackServiceCapability.RDS);
}
public boolean supportsEc2RuntimePath() {
return supports(LocalStackServiceCapability.EC2)
&& supports(LocalStackServiceCapability.AUTOSCALING);
}
public boolean keepEfsResources() {
return tierProfile == LocalStackTierProfile.ULTIMATE
&& supports(LocalStackServiceCapability.EFS);
}
public boolean keepBackupResources() {
return tierProfile == LocalStackTierProfile.ULTIMATE
&& supports(LocalStackServiceCapability.BACKUP);
}
public static LocalStackCapabilitySnapshot unavailable(URI endpoint, String reason) {
return new LocalStackCapabilitySnapshot(
false,
endpoint,
LocalStackTierProfile.BASE,
"unknown",
"unknown",
EnumSet.noneOf(LocalStackServiceCapability.class),
Map.of("error", reason));
}
}