diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2020-07-21 12:49:41 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2020-07-21 12:49:41 +0200 |
commit | 9be970a77dbe288f55853c364ea0e1df9046c629 (patch) | |
tree | 5a5b7e0860a31418b10abc63fdf274ac6f2c6b73 | |
parent | ecd871806391296801f5475c991c1a2d0820c7f9 (diff) |
Add endpoint to remove all prod deployments
2 files changed, 34 insertions, 0 deletions
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<String, byte[]> 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())); + } + } +} |