package core.aws.plan.ec2; import core.aws.plan.Planner; import core.aws.resource.ec2.Instance; import core.aws.task.ec2.CreateInstanceProfileTask; import core.aws.task.ec2.CreateInstanceTask; import core.aws.task.ec2.CreateKeyPairTask; import core.aws.task.ec2.CreateSGTask; import core.aws.task.ec2.DeleteInstanceTask; import core.aws.task.ec2.DeleteSGTask; import core.aws.task.elb.CreateELBTask; import core.aws.task.vpc.CreateSubnetTask; import core.aws.task.vpc.DeleteSubnetTask; import core.aws.workflow.Tasks; /** * @author neo */ public class InstanceTaskPlanner extends Planner { public InstanceTaskPlanner(Tasks tasks) { super(tasks); } @Override public void plan() { linkCreateTasks(); linkDeleteTasks(); } private void linkDeleteTasks() { for (final DeleteInstanceTask instanceTask : all(DeleteInstanceTask.class)) { String securityGroupId = instanceTask.deletedInstances.get(0).getSecurityGroups().get(0).getGroupId(); all(DeleteSGTask.class).stream() .filter(task -> securityGroupId.equals(task.resource.remoteSecurityGroup.getGroupId())) .findAny().ifPresent(task -> task.dependsOn(instanceTask)); String subnetId = instanceTask.deletedInstances.get(0).getSubnetId(); all(DeleteSubnetTask.class).stream() .filter(task -> task.resource.remoteSubnets.stream().anyMatch(subnet -> subnet.getSubnetId().equals(subnetId))) .findAny().ifPresent(task -> task.dependsOn(instanceTask)); } } private void linkCreateTasks() { for (CreateInstanceTask instanceTask : all(CreateInstanceTask.class)) { Instance instance = instanceTask.resource; find(CreateSGTask.class, instance.securityGroup) .ifPresent(instanceTask::dependsOn); find(CreateSubnetTask.class, instance.subnet) .ifPresent(instanceTask::dependsOn); if (instance.elb != null) { find(CreateELBTask.class, instance.elb) .ifPresent(instanceTask::dependsOn); } if (instance.instanceProfile != null) { find(CreateInstanceProfileTask.class, instance.instanceProfile) .ifPresent(instanceTask::dependsOn); } find(CreateKeyPairTask.class, instance.keyPair) .ifPresent(instanceTask::dependsOn); } } }