diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2018-11-01 21:12:56 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2018-11-01 21:29:53 +0100 |
commit | 8b4d665d7351516ff88a1e5ea3eafae371a808d7 (patch) | |
tree | 51530bd25cb1ba3d7f12493117dd7d033a9d33fd /controller-server | |
parent | b6d371e546cac5dd0671fd6d0e3f248864217fbe (diff) |
Allow tenants to trigger their own jobs (copied from screwdriver API)
Diffstat (limited to 'controller-server')
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) |