summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2018-11-01 21:12:56 +0100
committerJon Marius Venstad <venstad@gmail.com>2018-11-01 21:29:53 +0100
commit8b4d665d7351516ff88a1e5ea3eafae371a808d7 (patch)
tree51530bd25cb1ba3d7f12493117dd7d033a9d33fd /controller-server
parentb6d371e546cac5dd0671fd6d0e3f248864217fbe (diff)
Allow tenants to trigger their own jobs (copied from screwdriver API)
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java13
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java9
2 files changed, 18 insertions, 4 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 0e0b5ca0bf3..25f2ccce1cd 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
@@ -100,6 +100,7 @@ import java.util.logging.Level;
import java.util.stream.Collectors;
import static com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger.ChangesToCancel.ALL;
+import static java.util.stream.Collectors.joining;
/**
* This implements the application/v4 API which is used to deploy and manage applications
@@ -203,6 +204,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deploying")) return deploy(path.get("tenant"), path.get("application"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/jobreport")) return notifyJobCompletion(path.get("tenant"), path.get("application"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/submit")) return submit(path.get("tenant"), path.get("application"), request);
+ if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job/{jobtype}")) return trigger(appIdFromPath(path), jobTypeFromPath(path), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/job/{jobtype}/pause")) return pause(appIdFromPath(path), jobTypeFromPath(path));
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}")) return deploy(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}/environment/{environment}/region/{region}/instance/{instance}/deploy")) return deploy(path.get("tenant"), path.get("application"), path.get("instance"), path.get("environment"), path.get("region"), request); // legacy synonym of the above
@@ -369,10 +371,17 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
return new SlimeJsonResponse(slime);
}
+ private HttpResponse trigger(ApplicationId id, JobType type, HttpRequest request) {
+ String triggered = controller.applications().deploymentTrigger()
+ .forceTrigger(id, type, request.getJDiscRequest().getUserPrincipal().getName())
+ .stream().map(JobType::jobName).collect(joining(", "));
+ return new MessageResponse("Triggered " + triggered + " for " + id);
+ }
+
private HttpResponse pause(ApplicationId id, JobType type) {
Instant until = controller.clock().instant().plus(DeploymentTrigger.maxPause);
controller.applications().deploymentTrigger().pauseJob(id, type, until);
- return new MessageResponse(type + " for " + id + " paused for " + DeploymentTrigger.maxPause);
+ return new MessageResponse(type.jobName() + " for " + id + " paused for " + DeploymentTrigger.maxPause);
}
private HashMap<String, String> getParameters(String query) {
@@ -767,7 +776,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
.stream()
.map(VespaVersion::versionNumber)
.map(Version::toString)
- .collect(Collectors.joining(", ")));
+ .collect(joining(", ")));
change = Change.of(version);
}
controller.applications().deploymentTrigger().forceChange(application.get().id(), change);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
index 2dec92b8fcc..0c0605dd9c0 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
@@ -359,8 +359,13 @@ public class ApplicationApiTest extends ControllerContainerTest {
// POST a pause to a production job
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/default/job/production-us-west-1/pause", POST)
- .userIdentity(USER_ID),
- "{\"message\":\"productionUsWest1 for tenant1.application1 paused for " + DeploymentTrigger.maxPause + "\"}");
+ .userIdentity(USER_ID),
+ "{\"message\":\"production-us-west-1 for tenant1.application1 paused for " + DeploymentTrigger.maxPause + "\"}");
+
+ // POST a triggering to the same production job
+ tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/default/job/production-us-west-1", POST)
+ .userIdentity(USER_ID),
+ "{\"message\":\"Triggered production-us-west-1 for tenant1.application1\"}");
// POST a 'restart application' command
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/corp-us-east-1/instance/default/restart", POST)