package core.aws.local.elb; import core.aws.env.Environment; import core.aws.local.DependencyResolvers; import core.aws.local.LocalResourceLoader; import core.aws.local.ResourceNode; import core.aws.resource.Resources; import core.aws.resource.ec2.SecurityGroup; import core.aws.resource.elb.ELB; import core.aws.resource.elb.ServerCert; import core.aws.resource.s3.Bucket; import core.aws.resource.vpc.Subnet; import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * @author neo */ public class ELBLoader implements LocalResourceLoader { @Override @SuppressWarnings("unchecked") public void load(ResourceNode node, final Resources resources, DependencyResolvers resolvers, Environment env) { List<String> listenProtocols = new ArrayList<>(); Object listen = node.field("listen"); if (listen instanceof String) listenProtocols.add((String) listen); else if (listen instanceof List) listenProtocols.addAll((java.util.Collection<? extends String>) listen); boolean listenHTTP = listenProtocols.contains("http"); boolean listenHTTPS = listenProtocols.contains("https"); Optional<String> serverCertId = node.getString("cert"); String healthCheckURL = node.requiredString("health-check"); String securityGroupId = node.requiredString("security-group"); String subnetId = node.requiredString("subnet"); Optional<String> scheme = node.getString("scheme"); Optional<String> accessLogBucketId = node.getString("access-log-s3-bucket"); final ELB elb = resources.add(new ELB(node.id)); elb.name = env.name + "-" + node.id; elb.listenHTTP = listenHTTP; elb.listenHTTPS = listenHTTPS; elb.healthCheckURL = healthCheckURL; elb.scheme = scheme; resolvers.add(node, () -> { serverCertId.ifPresent(id -> { if (id.startsWith("arn:aws:acm:")) { elb.amazonCertARN = id; } else { elb.cert = resources.get(ServerCert.class, id); } }); elb.subnet = resources.get(Subnet.class, subnetId); elb.securityGroup = resources.get(SecurityGroup.class, securityGroupId); accessLogBucketId.ifPresent(bucketId -> elb.accessLogBucket = resources.get(Bucket.class, bucketId)); }); } }