From 9be970a77dbe288f55853c364ea0e1df9046c629 Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Tue, 21 Jul 2020 12:49:41 +0200 Subject: Add endpoint to remove all prod deployments --- .../restapi/application/ApplicationApiHandler.java | 7 ++++++ .../application/ApplicationPackageTest.java | 27 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index fa581bc13d6..7f03cc84802 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -284,6 +284,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { if (path.matches("/application/v4/tenant/{tenant}")) return deleteTenant(path.get("tenant"), request); if (path.matches("/application/v4/tenant/{tenant}/key")) return removeDeveloperKey(path.get("tenant"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}")) return deleteApplication(path.get("tenant"), path.get("application"), request); + if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deployment")) return removeProdAllDeployments(path.get("tenant"), path.get("application")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deploying")) return cancelDeploy(path.get("tenant"), path.get("application"), "default", "all"); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deploying/{choice}")) return cancelDeploy(path.get("tenant"), path.get("application"), "default", path.get("choice")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/key")) return removeDeployKey(path.get("tenant"), path.get("application"), request); @@ -1906,6 +1907,12 @@ public class ApplicationApiHandler extends LoggingRequestHandler { dataParts.get(EnvironmentResource.APPLICATION_TEST_ZIP)); } + private HttpResponse removeProdAllDeployments(String tenant, String application) { + return JobControllerApiHandlerHelper.submitResponse(controller.jobController(), tenant, application, + Optional.empty(), Optional.empty(), Optional.empty(), 1, + ApplicationPackage.createEmptyForDeploymentRemoval(), new byte[0]); + } + private static Map parseDataParts(HttpRequest request) { String contentHash = request.getHeader("x-Content-Hash"); if (contentHash == null) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java new file mode 100644 index 00000000000..63e0d7cd6c6 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java @@ -0,0 +1,27 @@ +package com.yahoo.vespa.hosted.controller.application; + +import com.yahoo.config.application.api.DeploymentSpec; +import com.yahoo.config.application.api.ValidationId; +import org.junit.Test; + +import java.time.Instant; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author valerijf + */ +public class ApplicationPackageTest { + @Test + public void test_createEmptyForDeploymentRemoval() { + ApplicationPackage app = ApplicationPackage.createEmptyForDeploymentRemoval(); + assertEquals(DeploymentSpec.empty, app.deploymentSpec()); + assertEquals(List.of(), app.trustedCertificates()); + + for (ValidationId validationId : ValidationId.values()) { + assertTrue(app.validationOverrides().allows(validationId, Instant.now())); + } + } +} -- cgit v1.2.3