summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-08-24 11:20:48 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-08-24 11:20:48 +0200
commit650eba270a16e150d9d7b47cb90791465725909f (patch)
tree77de4c80a3cde30fa2c31cedf95c5d2ccf2e8920 /controller-server
parentd0dc1411dcc1b3aac5504d7101633c4af1995cc4 (diff)
Remove unused parts of API response, and code generating it
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java302
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json47
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json5
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json350
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json68
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json947
6 files changed, 17 insertions, 1702 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
index 0e25ee1fe85..2f0a462c69f 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java
@@ -1,14 +1,9 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.restapi.application;
-import com.google.common.base.Joiner;
-import com.yahoo.component.Version;
-import com.yahoo.config.application.api.DeploymentInstanceSpec;
import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.application.api.DeploymentSpec.ChangeBlocker;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.SystemName;
-import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.container.jdisc.HttpResponse;
import com.yahoo.restapi.MessageResponse;
import com.yahoo.restapi.SlimeJsonResponse;
@@ -16,7 +11,6 @@ import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.vespa.hosted.controller.Application;
import com.yahoo.vespa.hosted.controller.Controller;
-import com.yahoo.vespa.hosted.controller.Instance;
import com.yahoo.vespa.hosted.controller.NotExistsException;
import com.yahoo.vespa.hosted.controller.api.integration.LogEntry;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion;
@@ -26,13 +20,10 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.RunId;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision;
import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
import com.yahoo.vespa.hosted.controller.application.Change;
-import com.yahoo.vespa.hosted.controller.application.Deployment;
import com.yahoo.vespa.hosted.controller.application.TenantAndApplicationId;
import com.yahoo.vespa.hosted.controller.deployment.ConvergenceSummary;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentStatus;
-import com.yahoo.vespa.hosted.controller.deployment.DeploymentSteps;
import com.yahoo.vespa.hosted.controller.deployment.JobController;
-import com.yahoo.vespa.hosted.controller.deployment.JobList;
import com.yahoo.vespa.hosted.controller.deployment.JobStatus;
import com.yahoo.vespa.hosted.controller.deployment.Run;
import com.yahoo.vespa.hosted.controller.deployment.RunLog;
@@ -44,35 +35,22 @@ import com.yahoo.vespa.hosted.controller.versions.VespaVersion;
import java.net.URI;
import java.time.Instant;
import java.time.format.TextStyle;
-import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Collection;
-import java.util.Comparator;
-import java.util.Deque;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy.canary;
-import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy.conservative;
-import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy.defaultPolicy;
-import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.stagingTest;
-import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.systemTest;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.succeeded;
import static com.yahoo.vespa.hosted.controller.deployment.Step.Status.unfinished;
import static com.yahoo.vespa.hosted.controller.deployment.Step.deployReal;
import static com.yahoo.vespa.hosted.controller.deployment.Step.installInitialReal;
import static com.yahoo.vespa.hosted.controller.deployment.Step.installReal;
import static com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence.broken;
-import static com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence.high;
import static com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence.normal;
-import static java.util.stream.Collectors.groupingBy;
-import static java.util.stream.Collectors.toList;
-import static java.util.stream.Collectors.toMap;
/**
* Implements the REST API for the job controller delegated from the Application API.
@@ -89,104 +67,13 @@ class JobControllerApiHandlerHelper {
* @return Response with all job types that have recorded runs for the application _and_ the status for the last run of that type
*/
static HttpResponse jobTypeResponse(Controller controller, ApplicationId id, URI baseUriForJobs) {
- Application application = controller.applications().requireApplication(TenantAndApplicationId.from(id));
- DeploymentStatus deploymentStatus = controller.jobController().deploymentStatus(application);
- Instance instance = application.require(id.instance());
- Change change = instance.change();
- Optional<DeploymentInstanceSpec> spec = application.deploymentSpec().instance(id.instance());
- Optional<DeploymentSteps> steps = spec.map(s -> new DeploymentSteps(s, controller::system));
- List<JobType> jobs = deploymentStatus.jobSteps().keySet().stream()
- .filter(jobId -> id.equals(jobId.application()))
- .map(JobId::type)
- .collect(Collectors.toUnmodifiableList());
- List<JobType> productionJobs = jobs.stream()
- .filter(JobType::isProduction)
- .collect(Collectors.toUnmodifiableList());
- Map<JobType, JobStatus> status = deploymentStatus.instanceJobs(id.instance());
-
- // The logic for pending runs imitates DeploymentTrigger logic; not good, but the trigger wiring must be re-written to reuse :S
- Map<JobType, Versions> pendingProduction =
- productionJobs.stream()
- .filter(type -> ! controller.applications().deploymentTrigger().isComplete(change, change, instance, type, status.get(type)))
- .collect(Collectors.toMap(type -> type,
- type -> Versions.from(change,
- application,
- Optional.ofNullable(instance.deployments().get(type.zone(controller.system()))),
- controller.systemVersion()),
- (v1, v2) -> { throw new IllegalStateException("Entries '" + v1 + "' and '" + v2 + "' have the same key!"); },
- LinkedHashMap::new));
-
- Map<JobType, Run> running = jobs.stream()
- .map(type -> controller.jobController().last(id, type))
- .flatMap(Optional::stream)
- .filter(run -> ! run.hasEnded())
- .collect(toMap(run -> run.id().type(),
- run -> run));
-
Slime slime = new Slime();
Cursor responseObject = slime.setObject();
- Cursor lastVersionsObject = responseObject.setObject("lastVersions");
- if (application.latestVersion().isPresent()) {
- lastPlatformToSlime(lastVersionsObject.setObject("platform"), controller, application, instance, status, change, productionJobs, spec);
- lastApplicationToSlime(lastVersionsObject.setObject("application"), application, instance, status, change, productionJobs, controller);
- }
-
- Cursor deployingObject = responseObject.setObject("deploying");
- if ( ! change.isEmpty()) {
- change.platform().ifPresent(version -> deployingObject.setString("platform", version.toString()));
- change.application().ifPresent(version -> applicationVersionToSlime(deployingObject.setObject("application"), version));
- }
-
- Cursor deploymentsArray = responseObject.setArray("deployments");
- steps.ifPresent(deploymentSteps -> deploymentSteps.production().forEach(step -> {
- if (step.isTest()) return;
- Cursor deploymentsObject = deploymentsArray.addObject();
- deploymentSteps.toJobs(step).forEach(type -> {
- ZoneId zone = type.zone(controller.system());
- Deployment deployment = instance.deployments().get(zone);
- if (deployment != null)
- deploymentToSlime(deploymentsObject.setObject(zone.region().value()),
- change,
- pendingProduction,
- running,
- type,
- status.get(type),
- deployment);
- });
- }));
-
- Cursor jobsObject = responseObject.setObject("jobs");
- steps.ifPresent(deploymentSteps -> jobs.forEach(type -> {
- jobTypeToSlime(jobsObject.setObject(shortNameOf(type, controller.system())),
- controller,
- application,
- instance,
- status,
- type,
- deploymentSteps,
- pendingProduction,
- running,
- baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize());
- }));
-
- Cursor devJobsObject = responseObject.setObject("devJobs");
- for (JobType type : JobType.allIn(controller.system()))
- if ( type.environment() != null
- && type.environment().isManuallyDeployed())
- controller.jobController().last(instance.id(), type)
- .ifPresent(last -> {
- Cursor devJobObject = devJobsObject.setObject(type.jobName());
- runToSlime(devJobObject.setArray("runs").addObject(),
- last,
- baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize());
- devJobObject.setString("url", baseUriForJobs.resolve(baseUriForJobs.getPath() + "/" + type.jobName()).normalize().toString());
- });
-
Cursor jobsArray = responseObject.setArray("deployment");
Arrays.stream(JobType.values())
.filter(type -> type.environment().isManuallyDeployed())
- .map(devType -> new JobId(instance.id(), devType))
+ .map(devType -> new JobId(id, devType))
.forEach(job -> {
Collection<Run> runs = controller.jobController().runs(job).descendingMap().values();
if (runs.isEmpty())
@@ -200,193 +87,6 @@ class JobControllerApiHandlerHelper {
return new SlimeJsonResponse(slime);
}
- private static void lastPlatformToSlime(Cursor lastPlatformObject, Controller controller, Application application,
- Instance instance, Map<JobType, JobStatus> status, Change change,
- List<JobType> productionJobs, Optional<DeploymentInstanceSpec> instanceSpec) {
- VespaVersion lastVespa = controller.versionStatus().version(controller.systemVersion());
- VespaVersion.Confidence targetConfidence = instanceSpec.map(spec -> Map.of(defaultPolicy, normal,
- conservative, high)
- .getOrDefault(spec.upgradePolicy(), broken))
- .orElse(normal);
- for (VespaVersion version : controller.versionStatus().versions())
- if ( ! version.versionNumber().isAfter(controller.systemVersion())
- && version.confidence().equalOrHigherThan(targetConfidence))
- lastVespa = version;
-
- Version lastPlatform = lastVespa.versionNumber();
- lastPlatformObject.setString("platform", lastPlatform.toString());
- lastPlatformObject.setLong("at", lastVespa.committedAt().toEpochMilli());
- long completed = productionJobs.stream()
- .filter(type -> ! type.isTest())
- .filter(type -> controller.applications().deploymentTrigger().isComplete(Change.of(lastPlatform), change.withoutPlatform().withoutPin().with(lastPlatform), instance, type, status.get(type)))
- .count();
- long total = productionJobs.stream().filter(type -> ! type.isTest()).count();
- if (Optional.of(lastPlatform).equals(change.platform()))
- lastPlatformObject.setString("deploying", completed + " of " + total + " complete");
- else if (completed == total)
- lastPlatformObject.setString("completed", completed + " of " + total + " complete");
- else if ( ! application.deploymentSpec().requireInstance(instance.name()).canUpgradeAt(controller.clock().instant())) {
- lastPlatformObject.setString("blocked", application.deploymentSpec().instances().stream()
- .flatMap(spec -> spec.changeBlocker().stream())
- .filter(blocker -> blocker.blocksVersions())
- .filter(blocker -> blocker.window().includes(controller.clock().instant()))
- .findAny().map(blocker -> blocker.window().toString()).get());
- }
- else
- lastPlatformObject.setString("pending",
- instance.change().isEmpty()
- ? "Waiting for upgrade slot"
- : "Waiting for " + instance.change() + " to complete");
- }
-
- private static void lastApplicationToSlime(Cursor lastApplicationObject, Application application, Instance instance, Map<JobType, JobStatus> status, Change change, List<JobType> productionJobs, Controller controller) {
- ApplicationVersion lastApplication = application.latestVersion().get();
- applicationVersionToSlime(lastApplicationObject.setObject("application"), lastApplication);
- lastApplicationObject.setLong("at", lastApplication.buildTime().get().toEpochMilli());
- long completed = productionJobs.stream()
- .filter(type -> ! type.isTest())
- .filter(type -> controller.applications().deploymentTrigger().isComplete(Change.of(lastApplication), change.withoutApplication().with(lastApplication), instance, type, status.get(type)))
- .count();
- long total = productionJobs.stream().filter(type -> ! type.isTest()).count();
- if (Optional.of(lastApplication).equals(change.application()))
- lastApplicationObject.setString("deploying", completed + " of " + total + " complete");
- else if (completed == total)
- lastApplicationObject.setString("completed", completed + " of " + total + " complete");
- else if ( ! application.deploymentSpec().instances().stream()
- .allMatch(spec -> spec.canChangeRevisionAt(controller.clock().instant()))) {
- lastApplicationObject.setString("blocked", application.deploymentSpec().instances().stream()
- .flatMap(spec -> spec.changeBlocker().stream())
- .filter(blocker -> blocker.blocksRevisions())
- .filter(blocker -> blocker.window().includes(controller.clock().instant()))
- .findAny().map(blocker -> blocker.window().toString()).get());
- }
- else
- lastApplicationObject.setString("pending", "Waiting for current deployment to complete");
- }
-
- private static void deploymentToSlime(Cursor deploymentObject, Change change,
- Map<JobType, Versions> pendingProduction, Map<JobType, Run> running,
- JobType type, JobStatus jobStatus, Deployment deployment) {
- deploymentObject.setLong("at", deployment.at().toEpochMilli());
- deploymentObject.setString("platform", deployment.version().toString());
- applicationVersionToSlime(deploymentObject.setObject("application"), deployment.applicationVersion());
- deploymentObject.setBool("verified", jobStatus.lastSuccess()
- .map(Run::versions)
- .filter(run -> run.targetPlatform().equals(deployment.version())
- && run.targetApplication().equals(deployment.applicationVersion()))
- .isPresent());
- if (running.containsKey(type))
- deploymentObject.setString("status", running.get(type).stepStatus(deployReal).equals(Optional.of(unfinished)) ? "deploying" : "verifying");
- else if (change.hasTargets())
- deploymentObject.setString("status", pendingProduction.containsKey(type) ? "pending" : "completed");
- }
-
- private static void jobTypeToSlime(Cursor jobObject, Controller controller, Application application, Instance instance,
- Map<JobType, JobStatus> status, JobType type, DeploymentSteps steps,
- Map<JobType, Versions> pendingProduction, Map<JobType, Run> running, URI baseUriForJob) {
- instance.jobPause(type).ifPresent(until -> jobObject.setLong("pausedUntil", until.toEpochMilli()));
- int runs = 0;
- Cursor runArray = jobObject.setArray("runs");
- JobList jobList = JobList.from(status.values());
- if (type.environment().isTest()) {
- Deque<List<JobType>> pending = new ArrayDeque<>();
- pendingProduction.entrySet().stream()
- .filter(typeVersions -> jobList.type(type).successOn(typeVersions.getValue()).isEmpty())
- .filter(typeVersions -> jobList.production().triggeredOn(typeVersions.getValue()).isEmpty())
- .collect(groupingBy(Map.Entry::getValue,
- LinkedHashMap::new,
- Collectors.mapping(Map.Entry::getKey, toList())))
- .forEach((versions, types) -> pending.addFirst(types));
- for (List<JobType> productionTypes : pending) {
- Versions versions = pendingProduction.get(productionTypes.get(0));
- if (statusOf(controller, instance.id(), type, versions).equals("running"))
- continue;
-
- runs++;
- Cursor runObject = runArray.addObject();
- runObject.setString("status", "pending");
- versionsToSlime(runObject, versions);
- if ( ! controller.applications().deploymentTrigger().triggerAt(controller.clock().instant(), type, status.get(type), versions, instance, application.deploymentSpec()))
- runObject.setObject("tasks").setString("cooldown", "failed");
- else
- runObject.setObject("tasks").setString("capacity", "running");
-
- runObject.setString("reason", "Testing for " + Joiner.on(", ").join(productionTypes));
- }
- }
- else if ( pendingProduction.containsKey(type)
- && ! running.containsKey(type)) {
- Versions versions = pendingProduction.get(type);
- runs++;
- Cursor runObject = runArray.addObject();
- runObject.setString("status", "pending");
- versionsToSlime(runObject, pendingProduction.get(type));
- Cursor pendingObject = runObject.setObject("tasks");
- if (instance.jobPauses().containsKey(type))
- pendingObject.setString("paused", "pending");
- else if ( ! controller.applications().deploymentTrigger().triggerAt(controller.clock().instant(), type, status.get(type), versions, instance, application.deploymentSpec()))
- pendingObject.setString("cooldown", "failed");
- else {
- int pending = 0;
- controller.applications().deploymentTrigger();
- if (jobList.production().triggeredOn(versions).isEmpty()) {
- if (jobList.type(systemTest).successOn(versions).isEmpty()) {
- pending++;
- pendingObject.setString(shortNameOf(systemTest, controller.system()), statusOf(controller, instance.id(), systemTest, versions));
- }
- if (jobList.type(stagingTest).successOn(versions).isEmpty()) {
- pending++;
- pendingObject.setString(shortNameOf(stagingTest, controller.system()), statusOf(controller, instance.id(), stagingTest, versions));
- }
- }
- steps: for (DeploymentSpec.Step step : steps.production()) {
- if (steps.toJobs(step).contains(type))
- break;
- for (JobType stepType : steps.toJobs(step)) {
- if (pendingProduction.containsKey(stepType)) {
- Versions jobVersions = Versions.from(instance.change(),
- application,
- Optional.ofNullable(instance.deployments().get(stepType.zone(controller.system()))),
- controller.systemVersion());
- pendingObject.setString(shortNameOf(stepType, controller.system()), statusOf(controller, instance.id(), stepType, jobVersions));
- if (++pending == 3)
- break steps;
- }
- }
- }
- if (pending == 0)
- pendingObject.setString("delay", "running");
- }
- }
-
- controller.jobController().runs(instance.id(), type).values().stream()
- .sorted(Comparator.comparing(run -> -run.id().number()))
- .limit(Math.max(0, 10 - runs))
- .forEach(run -> runToSlime(runArray.addObject(), run, baseUriForJob));
-
- jobObject.setString("url", baseUriForJob.toString());
- }
-
- private static String statusOf(Controller controller, ApplicationId id, JobType type, Versions versions) {
- return controller.jobController().last(id, type)
- .filter(run -> run.versions().targetsMatch(versions))
- .filter(run -> type != stagingTest || run.versions().sourcesMatchIfPresent(versions))
- .map(JobControllerApiHandlerHelper::taskStatusOf)
- .orElse("pending");
- }
-
- private static String shortNameOf(JobType type, SystemName system) {
- return type.jobName().replaceFirst("production-", "");
- }
-
- private static String taskStatusOf(Run run) {
- switch (run.status()) {
- case running: return "running";
- case success: return "succeeded";
- default: return "failed";
- }
- }
-
private static void runToSlime(Cursor runObject, Run run, URI baseUriForJobType) {
runObject.setLong("id", run.id().number());
runObject.setString("status", nameOf(run.status()));
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json
index b37d0d41ae4..e3beb371acd 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-overview.json
@@ -1,49 +1,16 @@
{
- "lastVersions": {},
- "deploying": {},
- "deployments": [],
- "jobs": {},
- "devJobs": {
- "dev-us-east-1": {
- "runs": [
- {
- "id": 1,
- "status": "success",
- "start": 0,
- "end": 0,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "unknown"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "copyVespaLogs": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "https://some.url:43/root/dev-us-east-1/run/1"
- }
- ],
- "url": "https://some.url:43/root/dev-us-east-1"
- }
- },
"deployment": [
{
"jobName": "dev-us-east-1",
"runs": [
{
- "id": 1,
- "url": "https://some.url:43/root/run/1",
- "start": 0,
- "end": 0,
- "status": "success",
"versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {}
+ "targetApplication": {},
+ "targetPlatform": "6.1.0"
},
+ "start": 0,
+ "end": 0,
+ "id": 1,
"steps": [
{
"name": "deployReal",
@@ -57,7 +24,9 @@
"name": "copyVespaLogs",
"status": "succeeded"
}
- ]
+ ],
+ "url": "https://some.url:43/root/run/1",
+ "status": "success"
}
]
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json
index 1e43c6e2953..25f6ed21466 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs-direct-deployment.json
@@ -1,8 +1,3 @@
{
- "lastVersions": {},
- "deploying": {},
- "deployments": [],
- "jobs": {},
- "devJobs": {},
"deployment": []
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json
index b16ca4cc67c..9a742a9b176 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/jobs.json
@@ -1,354 +1,4 @@
{
- "lastVersions": {
- "platform": {
- "platform": "6.1",
- "at": "(ignore)",
- "pending": "Waiting for application change to 1.0.4-commit1 to complete"
- },
- "application": {
- "application": {
- "hash": "1.0.4-commit1",
- "build": 4,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "at": 1000,
- "deploying": "0 of 3 complete"
- }
- },
- "deploying": {
- "application": {
- "hash": "1.0.4-commit1",
- "build": 4,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- }
- },
- "deployments": [
- {},
- {}
- ],
- "jobs": {
- "system-test": {
- "runs": [
- {
- "id": 2,
- "status": "running",
- "start": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.4-commit1",
- "build": 4,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "unfinished",
- "installTester": "unfinished",
- "deployReal": "unfinished",
- "installReal": "unfinished",
- "startTests": "unfinished",
- "endTests": "unfinished",
- "copyVespaLogs": "unfinished",
- "deactivateReal": "unfinished",
- "deactivateTester": "unfinished",
- "report": "unfinished"
- },
- "tasks": {},
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": "(ignore)",
- "end": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/1"
- }
- ],
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test"
- },
- "staging-test": {
- "runs": [
- {
- "id": 2,
- "status": "running",
- "start": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.4-commit1",
- "build": 4,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "unfinished",
- "installTester": "unfinished",
- "deployInitialReal": "unfinished",
- "installInitialReal": "unfinished",
- "startStagingSetup": "unfinished",
- "endStagingSetup": "unfinished",
- "deployReal": "unfinished",
- "installReal": "unfinished",
- "startTests": "unfinished",
- "endTests": "unfinished",
- "copyVespaLogs": "unfinished",
- "deactivateReal": "unfinished",
- "deactivateTester": "unfinished",
- "report": "unfinished"
- },
- "tasks": {},
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": "(ignore)",
- "end": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployInitialReal": "succeeded",
- "installInitialReal": "succeeded",
- "startStagingSetup": "succeeded",
- "endStagingSetup": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test/run/1"
- }
- ],
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test"
- },
- "us-central-1": {
- "runs": [
- {
- "status": "pending",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.4-commit1",
- "build": 4,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "tasks": {
- "system-test": "running",
- "staging-test": "running"
- }
- },
- {
- "id": 1,
- "status": "success",
- "start": "(ignore)",
- "end": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-central-1/run/1"
- }
- ],
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-central-1"
- },
- "us-west-1": {
- "runs": [
- {
- "id": 1,
- "status": "aborted",
- "start": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "unfinished",
- "installReal": "unfinished",
- "report": "unfinished"
- },
- "tasks": {},
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1/run/1"
- }
- ],
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1"
- },
- "us-east-3": {
- "runs": [
- {
- "id": 2,
- "status": "aborted",
- "start": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "unfinished",
- "installReal": "unfinished",
- "report": "unfinished"
- },
- "tasks": {},
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": "(ignore)",
- "end": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "unknown"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "copyVespaLogs": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3/run/1"
- }
- ],
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3"
- }
- },
- "devJobs": {
- "dev-us-east-1": {
- "runs": [
- {
- "id": 1,
- "status": "success",
- "start": "(ignore)",
- "end": "(ignore)",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "unknown"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "copyVespaLogs": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1/run/1"
- }
- ],
- "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/dev-us-east-1"
- }
- },
"deployment": [
{
"jobName": "dev-us-east-1",
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json
index d46b396b8cd..285e7f14e8f 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview-user-instance.json
@@ -1,70 +1,16 @@
{
- "lastVersions": {
- "platform": {
- "platform": "7.1",
- "at": 0,
- "completed": "0 of 0 complete"
- },
- "application": {
- "application": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "at": 1000,
- "completed": "0 of 0 complete"
- }
- },
- "deploying": {},
- "deployments": [],
- "jobs": {},
- "devJobs": {
- "dev-aws-us-east-2a": {
- "runs": [
- {
- "id": 1,
- "status": "success",
- "start": 7303000,
- "end": 7303000,
- "wantedPlatform": "7.1",
- "wantedApplication": {
- "hash": "unknown"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "copyVespaLogs": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "https://some.url:43/root/dev-aws-us-east-2a/run/1"
- }
- ],
- "url": "https://some.url:43/root/dev-aws-us-east-2a"
- }
- },
"deployment": [
{
"jobName": "dev-aws-us-east-2a",
"runs": [
{
- "id": 1,
- "url": "https://some.url:43/root//run/1",
- "start": 7303000,
- "end": 7303000,
- "status": "success",
"versions": {
- "targetPlatform": "7.1.0",
- "targetApplication": {}
+ "targetApplication": {},
+ "targetPlatform": "7.1.0"
},
+ "start": 7303000,
+ "end": 7303000,
+ "id": 1,
"steps": [
{
"name": "deployReal",
@@ -78,7 +24,9 @@
"name": "copyVespaLogs",
"status": "succeeded"
}
- ]
+ ],
+ "url": "https://some.url:43/root//run/1",
+ "status": "success"
}
]
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json
index 2c43aa45d06..25f6ed21466 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/overview.json
@@ -1,950 +1,3 @@
{
- "lastVersions": {
- "platform": {
- "platform": "7.1",
- "at": 0,
- "pending": "Waiting for application change to 1.0.3-commit1 to complete"
- },
- "application": {
- "application": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "at": 1000,
- "deploying": "0 of 3 complete"
- }
- },
- "deploying": {
- "application": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- }
- },
- "deployments": [
- {
- "us-central-1": {
- "at": 7203000,
- "platform": "6.1",
- "application": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "verified": false,
- "status": "verifying"
- }
- },
- {
- "us-west-1": {
- "at": 1000,
- "platform": "6.1",
- "application": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "verified": false,
- "status": "pending"
- },
- "us-east-3": {
- "at": 0,
- "platform": "6.1",
- "application": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "verified": true,
- "status": "pending"
- }
- }
- ],
- "jobs": {
- "system-test": {
- "runs": [
- {
- "id": 3,
- "status": "success",
- "start": 7203000,
- "end": 7203000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/system-test/run/3"
- },
- {
- "id": 2,
- "status": "success",
- "start": 1000,
- "end": 1000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/system-test/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": 0,
- "end": 0,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/system-test/run/1"
- }
- ],
- "url": "https://some.url:43/root/system-test"
- },
- "staging-test": {
- "runs": [
- {
- "status": "pending",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "tasks": {
- "cooldown": "failed"
- },
- "reason": "Testing for productionUsEast3"
- },
- {
- "id": 5,
- "status": "installationFailed",
- "start": 7303000,
- "end": 7303000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "unfinished",
- "deployInitialReal": "succeeded",
- "installInitialReal": "failed",
- "startStagingSetup": "unfinished",
- "endStagingSetup": "unfinished",
- "deployReal": "unfinished",
- "installReal": "unfinished",
- "startTests": "unfinished",
- "endTests": "unfinished",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {},
- "log": "https://some.url:43/root/staging-test/run/5"
- },
- {
- "id": 4,
- "status": "installationFailed",
- "start": 7203000,
- "end": 7203000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "unfinished",
- "deployInitialReal": "succeeded",
- "installInitialReal": "failed",
- "startStagingSetup": "unfinished",
- "endStagingSetup": "unfinished",
- "deployReal": "unfinished",
- "installReal": "unfinished",
- "startTests": "unfinished",
- "endTests": "unfinished",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {},
- "log": "https://some.url:43/root/staging-test/run/4"
- },
- {
- "id": 3,
- "status": "success",
- "start": 7203000,
- "end": 7203000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployInitialReal": "succeeded",
- "installInitialReal": "succeeded",
- "startStagingSetup": "succeeded",
- "endStagingSetup": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/staging-test/run/3"
- },
- {
- "id": 2,
- "status": "success",
- "start": 1000,
- "end": 1000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployInitialReal": "succeeded",
- "installInitialReal": "succeeded",
- "startStagingSetup": "succeeded",
- "endStagingSetup": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/staging-test/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": 0,
- "end": 0,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "deployInitialReal": "succeeded",
- "installInitialReal": "succeeded",
- "startStagingSetup": "succeeded",
- "endStagingSetup": "succeeded",
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "copyVespaLogs": "succeeded",
- "deactivateReal": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded",
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/staging-test/run/1"
- }
- ],
- "url": "https://some.url:43/root/staging-test"
- },
- "us-central-1": {
- "runs": [
- {
- "id": 3,
- "status": "running",
- "start": 7203000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "unfinished",
- "report": "unfinished"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "running"
- },
- "log": "https://some.url:43/root/production-us-central-1/run/3"
- },
- {
- "id": 2,
- "status": "success",
- "start": 1000,
- "end": 1000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "https://some.url:43/root/production-us-central-1/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": 0,
- "end": 0,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "https://some.url:43/root/production-us-central-1/run/1"
- }
- ],
- "url": "https://some.url:43/root/production-us-central-1"
- },
- "test-us-central-1": {
- "runs": [
- {
- "status": "pending",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "tasks": {
- "us-central-1": "running",
- "us-west-1": "pending",
- "us-east-3": "pending"
- }
- },
- {
- "id": 2,
- "status": "success",
- "start": 1000,
- "end": 1000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/test-us-central-1/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": 0,
- "end": 0,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployTester": "succeeded",
- "installTester": "succeeded",
- "startTests": "succeeded",
- "endTests": "succeeded",
- "deactivateTester": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "test": "succeeded"
- },
- "log": "https://some.url:43/root/test-us-central-1/run/1"
- }
- ],
- "url": "https://some.url:43/root/test-us-central-1"
- },
- "us-west-1": {
- "runs": [
- {
- "status": "pending",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "tasks": {
- "us-central-1": "running"
- }
- },
- {
- "id": 2,
- "status": "installationFailed",
- "start": 1000,
- "end": 7202000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "failed",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "failed"
- },
- "log": "https://some.url:43/root/production-us-west-1/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": 0,
- "end": 0,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "https://some.url:43/root/production-us-west-1/run/1"
- }
- ],
- "url": "https://some.url:43/root/production-us-west-1"
- },
- "us-east-3": {
- "runs": [
- {
- "status": "pending",
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.3-commit1",
- "build": 3,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "tasks": {
- "staging-test": "failed",
- "us-central-1": "running"
- }
- },
- {
- "id": 2,
- "status": "deploymentFailed",
- "start": 1000,
- "end": 1000,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.2-commit1",
- "build": 2,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "currentPlatform": "6.1",
- "currentApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "failed",
- "installReal": "unfinished",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "failed"
- },
- "log": "https://some.url:43/root/production-us-east-3/run/2"
- },
- {
- "id": 1,
- "status": "success",
- "start": 0,
- "end": 0,
- "wantedPlatform": "6.1",
- "wantedApplication": {
- "hash": "1.0.1-commit1",
- "build": 1,
- "source": {
- "gitRepository": "repository1",
- "gitBranch": "master",
- "gitCommit": "commit1"
- },
- "sourceUrl": "repository1/tree/commit1",
- "commit": "commit1"
- },
- "steps": {
- "deployReal": "succeeded",
- "installReal": "succeeded",
- "report": "succeeded"
- },
- "tasks": {
- "deploy": "succeeded",
- "install": "succeeded"
- },
- "log": "https://some.url:43/root/production-us-east-3/run/1"
- }
- ],
- "url": "https://some.url:43/root/production-us-east-3"
- }
- },
- "devJobs": {},
"deployment": []
}