package core.aws.local.ec2; 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.Instance; import core.aws.resource.ec2.InstanceProfile; import core.aws.resource.ec2.KeyPair; import core.aws.resource.ec2.SecurityGroup; import core.aws.resource.elb.ELB; import core.aws.resource.vpc.Subnet; import java.util.Optional; /** * @author neo */ public class InstanceLoader implements LocalResourceLoader { @Override public void load(ResourceNode node, Resources resources, DependencyResolvers resolvers, Environment env) { String imageId = node.requiredString("ami"); String instanceType = node.requiredString("instance-type"); Optional<Integer> count = node.getInt("count"); String securityGroupId = node.requiredString("security-group"); String subnetId = node.requiredString("subnet"); Optional<String> elbId = node.getString("elb"); Optional<String> instanceProfileId = node.getString("instance-profile"); Instance instance = resources.add(new Instance(node.id)); count.ifPresent(value -> instance.count = value); instance.instanceType = instanceType; instance.ebs = new EBSBuilder().build(node.mapField("ebs")); instance.keyPair = resources.find(KeyPair.class, node.id) .orElseGet(() -> resources.add(new KeyPair(node.id, env.name + ":" + node.id))); resolvers.add(node, () -> { instance.securityGroup = resources.get(SecurityGroup.class, securityGroupId); instance.ami = resources.ami(env.region, imageId); instance.subnet = resources.get(Subnet.class, subnetId); elbId.ifPresent(id -> instance.elb = resources.get(ELB.class, id)); instanceProfileId.ifPresent(id -> instance.instanceProfile = resources.get(InstanceProfile.class, id)); }); } }