package core.aws.task.vpc; import com.amazonaws.AmazonServiceException; import com.amazonaws.services.ec2.model.DeleteSubnetRequest; import core.aws.client.AWS; import core.aws.env.Context; import core.aws.resource.vpc.Subnet; import core.aws.util.Runner; import core.aws.workflow.Action; import core.aws.workflow.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.Duration; /** * @author neo */ @Action("del-subnet") public class DeleteSubnetTask extends Task<Subnet> { private final Logger logger = LoggerFactory.getLogger(DeleteSubnetTask.class); public DeleteSubnetTask(Subnet subnet) { super(subnet); } @Override public void execute(Context context) throws Exception { String key = "subnet/" + resource.id; for (com.amazonaws.services.ec2.model.Subnet remoteSubnet : resource.remoteSubnets) { new Runner<Void>() .maxAttempts(5) .retryInterval(Duration.ofSeconds(60)) .retryOn(e -> e instanceof AmazonServiceException) .run(() -> { logger.info("delete subnet, subnetId={}, cidr={}", remoteSubnet.getSubnetId(), remoteSubnet.getCidrBlock()); AWS.vpc.ec2.deleteSubnet(new DeleteSubnetRequest().withSubnetId(remoteSubnet.getSubnetId())); context.output(key, String.format("deletedSubnetId=%s, cidr=%s", remoteSubnet.getSubnetId(), remoteSubnet.getCidrBlock())); return null; }); } } }