package core.aws.plan.vpc; import core.aws.plan.Planner; import core.aws.task.as.DeleteASGroupTask; import core.aws.task.ec2.DeleteInstanceTask; import core.aws.task.elb.DeleteELBTask; import core.aws.task.vpc.CreateInternetGatewayTask; import core.aws.task.vpc.CreateVPCTask; import core.aws.task.vpc.DeleteInternetGatewayTask; import core.aws.task.vpc.DeleteNATGatewayTask; import core.aws.task.vpc.DeleteVPCTask; import core.aws.workflow.Tasks; /** * @author neo */ public class InternetGatewayTaskPlanner extends Planner { public InternetGatewayTaskPlanner(Tasks tasks) { super(tasks); } @Override public void plan() { linkCreateTasks(); linkDeleteTasks(); } private void linkDeleteTasks() { for (DeleteInternetGatewayTask internetGatewayTask : all(DeleteInternetGatewayTask.class)) { find(DeleteVPCTask.class) .ifPresent(task -> task.dependsOn(internetGatewayTask)); // to remove internet gateway requires all mapped public ip deleted all(DeleteNATGatewayTask.class).forEach(internetGatewayTask::dependsOn); // simply wait until all instance terminated, in theory only need to wait all public subnet instances all(DeleteInstanceTask.class).forEach(internetGatewayTask::dependsOn); all(DeleteASGroupTask.class).forEach(internetGatewayTask::dependsOn); all(DeleteELBTask.class).forEach(internetGatewayTask::dependsOn); } } private void linkCreateTasks() { find(CreateInternetGatewayTask.class) .ifPresent(internetGatewayTask -> find(CreateVPCTask.class) .ifPresent(internetGatewayTask::dependsOn)); } }