summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2020-07-21 12:49:41 +0200
committerValerij Fredriksen <valerijf@verizonmedia.com>2020-07-21 12:49:41 +0200
commit9be970a77dbe288f55853c364ea0e1df9046c629 (patch)
tree5a5b7e0860a31418b10abc63fdf274ac6f2c6b73
parentecd871806391296801f5475c991c1a2d0820c7f9 (diff)
Add endpoint to remove all prod deployments
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ApplicationPackageTest.java27
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()));
+ }
+ }
+}