summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-12-30 12:39:30 +0100
committerJon Marius Venstad <venstad@gmail.com>2019-12-30 12:39:30 +0100
commit1f34c55482a91ce129c72c9014ab081acb79a018 (patch)
tree8a0133ca406f649d62549d3059d3b343afd7dfd0 /controller-server
parentcef1ea2774e76b515b0118befa4328ebb6040abc (diff)
Add runs to step nodes in deployment graph
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java46
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json1219
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json498
3 files changed, 1486 insertions, 277 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 a3923e4c1d7..6413be181c3 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
@@ -508,7 +508,7 @@ 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 overviewResponse(Controller controller, TenantAndApplicationId id, URI baseUriForJobs) {
+ static HttpResponse overviewResponse(Controller controller, TenantAndApplicationId id, URI baseUriForDeployments) {
Application application = controller.applications().requireApplication(id);
DeploymentStatus status = controller.jobController().deploymentStatus(application);
@@ -531,6 +531,10 @@ class JobControllerApiHandlerHelper {
stepStatus.job().ifPresent(job -> {
stepObject.setString("jobName", job.type().jobName());
+ String baseUriForJob = baseUriForDeployments.resolve(baseUriForDeployments.getPath() +
+ "/../instance/" + job.application().instance().value() +
+ "/job/" + job.type().jobName()).normalize().toString();
+ stepObject.setString("url", baseUriForJob);
stepObject.setString("environment", job.type().environment().value());
stepObject.setString("region", job.type().zone(controller.system()).value());
@@ -542,37 +546,47 @@ class JobControllerApiHandlerHelper {
}
JobStatus jobStatus = status.jobs().get(job).get();
- Cursor jobsArray = stepObject.setArray("jobs");
+ Cursor toRunArray = stepObject.setArray("toRun");
for (Versions versions : jobsToRun.getOrDefault(job, List.of())) {
- Cursor jobObject = jobsArray.addObject();
- toSlime(jobObject.setObject("versions"), versions);
- stepStatus.readyAt(change, versions).ifPresent(ready -> jobObject.setLong("readyAt", ready.toEpochMilli()));
- stepStatus.readyAt(change, versions)
- .filter(controller.clock().instant()::isBefore)
- .ifPresent(until -> jobObject.setLong("delayedUntil", until.toEpochMilli()));
- stepStatus.pausedUntil().ifPresent(until -> jobObject.setLong("pausedUntil", until.toEpochMilli()));
- stepStatus.coolingDownUntil(versions).ifPresent(until -> jobObject.setLong("coolingDownUntil", until.toEpochMilli()));
- stepStatus.blockedUntil(change).ifPresent(until -> jobObject.setLong("blockedUntil", until.toEpochMilli()));
-
boolean running = jobStatus.lastTriggered()
.map(run -> jobStatus.isRunning()
&& versions.targetsMatch(run.versions())
&& (job.type().isProduction() || versions.sourcesMatchIfPresent(run.versions())))
.orElse(false);
- jobObject.setBool("running", running);
+ if (running)
+ continue; // Run will be contained in the "runs" array.
+
+ Cursor runObject = toRunArray.addObject();
+ toSlime(runObject.setObject("versions"), versions);
+ stepStatus.readyAt(change, versions).ifPresent(ready -> runObject.setLong("readyAt", ready.toEpochMilli()));
+ stepStatus.readyAt(change, versions)
+ .filter(controller.clock().instant()::isBefore)
+ .ifPresent(until -> runObject.setLong("delayedUntil", until.toEpochMilli()));
+ stepStatus.pausedUntil().ifPresent(until -> runObject.setLong("pausedUntil", until.toEpochMilli()));
+ stepStatus.coolingDownUntil(versions).ifPresent(until -> runObject.setLong("coolingDownUntil", until.toEpochMilli()));
+ stepStatus.blockedUntil(change).ifPresent(until -> runObject.setLong("blockedUntil", until.toEpochMilli()));
}
- jobStatus.lastTriggered().ifPresent(run -> {
- Cursor runObject = stepObject.setObject("lastRun");
+ Cursor runsArray = stepObject.setArray("runs");
+ jobStatus.runs().descendingMap().values().stream().limit(10).forEach(run -> {
+ Cursor runObject = runsArray.addObject();
+ runObject.setLong("id", run.id().number());
+ runObject.setString("url", baseUriForJob + "/run/" + run.id());
runObject.setLong("start", run.start().toEpochMilli());
run.end().ifPresent(end -> runObject.setLong("end", end.toEpochMilli()));
runObject.setString("status", run.status().name());
toSlime(runObject.setObject("versions"), run.versions());
+ Cursor runStepsArray = runObject.setArray("steps");
+ run.steps().forEach((step, info) -> {
+ Cursor runStepObject = runStepsArray.addObject();
+ runStepObject.setString("name", step.name());
+ runStepObject.setString("status", info.status().name());
+ });
});
});
}
- // TODO jonmv: Add latest platform and application status, and lists of runs for each of the jobs.
+ // TODO jonmv: Add latest platform and application status.
return new SlimeJsonResponse(slime);
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
index 3406ad47a33..59b200753fe 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview-2.json
@@ -1,299 +1,1174 @@
{
- "tenant": "tenant",
"application": "application",
"steps": [
{
- "type": "test",
- "dependencies": [],
"declared": true,
- "instance": "default",
"jobName": "staging-test",
"environment": "staging",
- "region": "staging.us-east-3",
- "jobs": [
+ "instance": "default",
+ "toRun": [
{
+ "readyAt": 752000,
+ "coolingDownUntil": 752000,
"versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
"targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "delayedUntil": 752000
+ }
+ ],
+ "type": "test",
+ "region": "staging.us-east-3",
+ "runs": [
+ {
+ "versions": {
"targetApplication": {
+ "commit": "commit1",
"id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
"commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "start": 102000,
+ "end": 102000,
+ "id": 5,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installInitialReal",
+ "status": "failed"
+ },
+ {
+ "name": "deployReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/staging-test/run/run 5 of staging-test for tenant.application",
+ "status": "installationFailed"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 3,
"source": "repository1/tree/commit1"
},
"sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
"sourceApplication": {
+ "commit": "commit1",
"id": 1,
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "start": 2000,
+ "end": 2000,
+ "id": 4,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installInitialReal",
+ "status": "failed"
+ },
+ {
+ "name": "deployReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/staging-test/run/run 4 of staging-test for tenant.application",
+ "status": "installationFailed"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
"commit": "commit1",
+ "id": 2,
"source": "repository1/tree/commit1"
}
},
- "readyAt": 752000,
- "delayedUntil": 752000,
- "coolingDownUntil": 752000,
- "running": false
- }
- ],
- "lastRun": {
- "start": 102000,
- "end": 102000,
- "status": "installationFailed",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 3,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
+ "start": 2000,
+ "end": 2000,
+ "id": 3,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/staging-test/run/run 3 of staging-test for tenant.application",
+ "status": "success"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 2,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ }
},
- "sourcePlatform": "6.1.0",
- "sourceApplication": {
- "id": 1,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "start": 1000,
+ "end": 1000,
+ "id": 2,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/staging-test/run/run 2 of staging-test for tenant.application",
+ "status": "success"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ },
+ "targetPlatform": "6.1.0"
+ },
+ "start": 0,
+ "end": 0,
+ "id": 1,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/staging-test/run/run 1 of staging-test for tenant.application",
+ "status": "success"
}
- }
+ ],
+ "url": "https://some.url:43/instance/default/job/staging-test",
+ "dependencies": []
},
{
- "type": "test",
- "dependencies": [],
"declared": false,
- "instance": "default",
"jobName": "system-test",
"environment": "test",
+ "instance": "default",
+ "toRun": [],
+ "type": "test",
"region": "test.us-east-1",
- "jobs": [],
- "lastRun": {
- "start": 2000,
- "end": 2000,
- "status": "success",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 3,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
+ "runs": [
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 2,
+ "source": "repository1/tree/commit1"
+ }
},
- "sourcePlatform": "6.1.0",
- "sourceApplication": {
- "id": 2,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "start": 2000,
+ "end": 2000,
+ "id": 3,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/system-test/run/run 3 of system-test for tenant.application",
+ "status": "success"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 2,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "start": 1000,
+ "end": 1000,
+ "id": 2,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/system-test/run/run 2 of system-test for tenant.application",
+ "status": "success"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ },
+ "targetPlatform": "6.1.0"
+ },
+ "start": 0,
+ "end": 0,
+ "id": 1,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/system-test/run/run 1 of system-test for tenant.application",
+ "status": "success"
}
- }
+ ],
+ "url": "https://some.url:43/instance/default/job/system-test",
+ "dependencies": []
},
{
- "type": "deployment",
- "dependencies": [
- 0
- ],
"declared": true,
- "instance": "default",
"jobName": "production-us-central-1",
"environment": "prod",
- "region": "prod.us-central-1",
+ "instance": "default",
"currentPlatform": "6.1.0",
+ "toRun": [],
"currentApplication": {
- "id": 3,
"commit": "commit1",
+ "id": 3,
"source": "repository1/tree/commit1"
},
- "jobs": [
+ "type": "deployment",
+ "region": "prod.us-central-1",
+ "runs": [
{
"versions": {
- "targetPlatform": "6.1.0",
"targetApplication": {
+ "commit": "commit1",
"id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
"commit": "commit1",
+ "id": 2,
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "start": 2000,
+ "id": 3,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "report",
+ "status": "unfinished"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-central-1/run/run 3 of production-us-central-1 for tenant.application",
+ "status": "running"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 2,
"source": "repository1/tree/commit1"
},
"sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
"sourceApplication": {
- "id": 3,
"commit": "commit1",
+ "id": 1,
"source": "repository1/tree/commit1"
}
},
- "readyAt": 2000,
- "running": true
- }
- ],
- "lastRun": {
- "start": 2000,
- "status": "running",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 3,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
+ "start": 1000,
+ "end": 1000,
+ "id": 2,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-central-1/run/run 2 of production-us-central-1 for tenant.application",
+ "status": "success"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ },
+ "targetPlatform": "6.1.0"
},
- "sourcePlatform": "6.1.0",
- "sourceApplication": {
- "id": 2,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "start": 0,
+ "end": 0,
+ "id": 1,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-central-1/run/run 1 of production-us-central-1 for tenant.application",
+ "status": "success"
}
- }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-central-1",
+ "dependencies": [
+ 0
+ ]
},
{
- "type": "test",
- "dependencies": [
- 2
- ],
"declared": true,
- "instance": "default",
"jobName": "test-us-central-1",
"environment": "prod",
+ "instance": "default",
+ "toRun": [
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 3,
+ "source": "repository1/tree/commit1"
+ }
+ }
+ }
+ ],
+ "type": "test",
"region": "prod.us-central-1",
- "jobs": [
+ "runs": [
{
"versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 2,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
"targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 2,
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "start": 1000,
+ "end": 1000,
+ "id": 2,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/test-us-central-1/run/run 2 of test-us-central-1 for tenant.application",
+ "status": "success"
+ },
+ {
+ "versions": {
"targetApplication": {
- "id": 3,
"commit": "commit1",
+ "id": 1,
"source": "repository1/tree/commit1"
},
"sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
"sourceApplication": {
- "id": 3,
"commit": "commit1",
+ "id": 1,
"source": "repository1/tree/commit1"
}
},
- "running": false
+ "start": 0,
+ "end": 0,
+ "id": 1,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/test-us-central-1/run/run 1 of test-us-central-1 for tenant.application",
+ "status": "success"
}
],
- "lastRun": {
- "start": 1000,
- "end": 1000,
- "status": "success",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 2,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- },
- "sourcePlatform": "6.1.0",
- "sourceApplication": {
- "id": 2,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
- }
- }
+ "url": "https://some.url:43/instance/default/job/test-us-central-1",
+ "dependencies": [
+ 2
+ ]
},
{
- "type": "deployment",
- "dependencies": [
- 3
- ],
"declared": true,
- "instance": "default",
"jobName": "production-us-west-1",
"environment": "prod",
- "region": "prod.us-west-1",
+ "instance": "default",
"currentPlatform": "6.1.0",
+ "toRun": [
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 2,
+ "source": "repository1/tree/commit1"
+ }
+ }
+ }
+ ],
"currentApplication": {
- "id": 2,
"commit": "commit1",
+ "id": 2,
"source": "repository1/tree/commit1"
},
- "jobs": [
+ "type": "deployment",
+ "region": "prod.us-west-1",
+ "runs": [
{
"versions": {
- "targetPlatform": "6.1.0",
"targetApplication": {
- "id": 3,
"commit": "commit1",
+ "id": 2,
"source": "repository1/tree/commit1"
},
"sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
"sourceApplication": {
- "id": 2,
"commit": "commit1",
+ "id": 1,
"source": "repository1/tree/commit1"
}
},
- "running": false
- }
- ],
- "lastRun": {
- "start": 1000,
- "end": 1000,
- "status": "testFailure",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 2,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
+ "start": 1000,
+ "end": 1000,
+ "id": 2,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "failed"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-west-1/run/run 2 of production-us-west-1 for tenant.application",
+ "status": "testFailure"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ },
+ "targetPlatform": "6.1.0"
},
- "sourcePlatform": "6.1.0",
- "sourceApplication": {
- "id": 1,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "start": 0,
+ "end": 0,
+ "id": 1,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-west-1/run/run 1 of production-us-west-1 for tenant.application",
+ "status": "success"
}
- }
- },
- {
- "type": "deployment",
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-west-1",
"dependencies": [
3
- ],
+ ]
+ },
+ {
"declared": true,
- "instance": "default",
"jobName": "production-us-east-3",
"environment": "prod",
- "region": "prod.us-east-3",
+ "instance": "default",
"currentPlatform": "6.1.0",
+ "toRun": [
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 3,
+ "source": "repository1/tree/commit1"
+ },
+ "sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
+ "sourceApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ }
+ }
+ }
+ ],
"currentApplication": {
- "id": 1,
"commit": "commit1",
+ "id": 1,
"source": "repository1/tree/commit1"
},
- "jobs": [
+ "type": "deployment",
+ "region": "prod.us-east-3",
+ "runs": [
{
"versions": {
- "targetPlatform": "6.1.0",
"targetApplication": {
- "id": 3,
"commit": "commit1",
+ "id": 2,
"source": "repository1/tree/commit1"
},
"sourcePlatform": "6.1.0",
+ "targetPlatform": "6.1.0",
"sourceApplication": {
- "id": 1,
"commit": "commit1",
+ "id": 1,
"source": "repository1/tree/commit1"
}
},
- "running": false
- }
- ],
- "lastRun": {
- "start": 1000,
- "end": 1000,
- "status": "deploymentFailed",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 2,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
+ "start": 1000,
+ "end": 1000,
+ "id": 2,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "failed"
+ },
+ {
+ "name": "deployReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-east-3/run/run 2 of production-us-east-3 for tenant.application",
+ "status": "deploymentFailed"
+ },
+ {
+ "versions": {
+ "targetApplication": {
+ "commit": "commit1",
+ "id": 1,
+ "source": "repository1/tree/commit1"
+ },
+ "targetPlatform": "6.1.0"
},
- "sourcePlatform": "6.1.0",
- "sourceApplication": {
- "id": 1,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "start": 0,
+ "end": 0,
+ "id": 1,
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-east-3/run/run 1 of production-us-east-3 for tenant.application",
+ "status": "success"
}
- }
+ ],
+ "url": "https://some.url:43/instance/default/job/production-us-east-3",
+ "dependencies": [
+ 3
+ ]
}
- ]
-} \ No newline at end of file
+ ],
+ "tenant": "tenant"
+}
+
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
index f4fdac81b0c..df04b2a165a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-overview.json
@@ -8,10 +8,16 @@
"declared": false,
"instance": "instance1",
"jobName": "system-test",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test",
"environment": "test",
"region": "test.us-east-1",
- "jobs": [
+ "toRun": [],
+ "runs": [
{
+ "id": 2,
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/run 2 of system-test for tenant1.application1.instance1",
+ "start": "(ignore)",
+ "status": "running",
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -20,22 +26,107 @@
"source": "repository1/tree/commit1"
}
},
- "readyAt": 0,
- "running": true
- }
- ],
- "lastRun": {
- "start": "(ignore)",
- "status": "running",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 4,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "deployReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "report",
+ "status": "unfinished"
+ }
+ ]
+ },
+ {
+ "id": 1,
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/system-test/run/run 1 of system-test for tenant1.application1.instance1",
+ "start": "(ignore)",
+ "end": "(ignore)",
+ "status": "success",
+ "versions": {
+ "targetPlatform": "6.1.0",
+ "targetApplication": {
+ "id": 1,
+ "commit": "commit1",
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ]
}
- }
+ ]
},
{
"type": "test",
@@ -43,10 +134,16 @@
"declared": false,
"instance": "instance1",
"jobName": "staging-test",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test",
"environment": "staging",
"region": "staging.us-east-3",
- "jobs": [
+ "toRun": [],
+ "runs": [
{
+ "id": 2,
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test/run/run 2 of staging-test for tenant1.application1.instance1",
+ "start": "(ignore)",
+ "status": "running",
"versions": {
"targetPlatform": "6.1.0",
"targetApplication": {
@@ -55,22 +152,123 @@
"source": "repository1/tree/commit1"
}
},
- "readyAt": 0,
- "running": true
- }
- ],
- "lastRun": {
- "start": "(ignore)",
- "status": "running",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 4,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "deployInitialReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installInitialReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "deployReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "report",
+ "status": "unfinished"
+ }
+ ]
+ },
+ {
+ "id": 1,
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/staging-test/run/run 1 of staging-test for tenant1.application1.instance1",
+ "start": "(ignore)",
+ "end": "(ignore)",
+ "status": "success",
+ "versions": {
+ "targetPlatform": "6.1.0",
+ "targetApplication": {
+ "id": 1,
+ "commit": "commit1",
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installInitialReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "copyVespaLogs",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ]
}
- }
+ ]
},
{
"type": "deployment",
@@ -78,9 +276,10 @@
"declared": true,
"instance": "instance1",
"jobName": "production-us-central-1",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-central-1",
"environment": "prod",
"region": "prod.us-central-1",
- "jobs": [
+ "toRun": [
{
"versions": {
"targetPlatform": "6.1.0",
@@ -89,23 +288,60 @@
"commit": "commit1",
"source": "repository1/tree/commit1"
}
- },
- "running": false
+ }
}
],
- "lastRun": {
- "start": "(ignore)",
- "end": "(ignore)",
- "status": "success",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 1,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "runs": [
+ {
+ "id": 1,
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-central-1/run/run 1 of production-us-central-1 for tenant1.application1.instance1",
+ "start": "(ignore)",
+ "end": "(ignore)",
+ "status": "success",
+ "versions": {
+ "targetPlatform": "6.1.0",
+ "targetApplication": {
+ "id": 1,
+ "commit": "commit1",
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "deployReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "installTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "installReal",
+ "status": "succeeded"
+ },
+ {
+ "name": "startTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "endTests",
+ "status": "succeeded"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "succeeded"
+ },
+ {
+ "name": "report",
+ "status": "succeeded"
+ }
+ ]
}
- }
+ ]
},
{
"type": "deployment",
@@ -115,9 +351,10 @@
"declared": true,
"instance": "instance1",
"jobName": "production-us-west-1",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1",
"environment": "prod",
"region": "prod.us-west-1",
- "jobs": [
+ "toRun": [
{
"versions": {
"targetPlatform": "6.1.0",
@@ -126,22 +363,59 @@
"commit": "commit1",
"source": "repository1/tree/commit1"
}
- },
- "running": false
+ }
}
],
- "lastRun": {
- "start": "(ignore)",
- "status": "aborted",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 1,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "runs": [
+ {
+ "id": 1,
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-west-1/run/run 1 of production-us-west-1 for tenant1.application1.instance1",
+ "start": "(ignore)",
+ "status": "aborted",
+ "versions": {
+ "targetPlatform": "6.1.0",
+ "targetApplication": {
+ "id": 1,
+ "commit": "commit1",
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "deployReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "report",
+ "status": "unfinished"
+ }
+ ]
}
- }
+ ]
},
{
"type": "deployment",
@@ -151,9 +425,10 @@
"declared": true,
"instance": "instance1",
"jobName": "production-us-east-3",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3",
"environment": "prod",
"region": "prod.us-east-3",
- "jobs": [
+ "toRun": [
{
"versions": {
"targetPlatform": "6.1.0",
@@ -162,22 +437,59 @@
"commit": "commit1",
"source": "repository1/tree/commit1"
}
- },
- "running": false
+ }
}
],
- "lastRun": {
- "start": "(ignore)",
- "status": "aborted",
- "versions": {
- "targetPlatform": "6.1.0",
- "targetApplication": {
- "id": 1,
- "commit": "commit1",
- "source": "repository1/tree/commit1"
- }
+ "runs": [
+ {
+ "id": 1,
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance1/job/production-us-east-3/run/run 1 of production-us-east-3 for tenant1.application1.instance1",
+ "start": "(ignore)",
+ "status": "aborted",
+ "versions": {
+ "targetPlatform": "6.1.0",
+ "targetApplication": {
+ "id": 1,
+ "commit": "commit1",
+ "source": "repository1/tree/commit1"
+ }
+ },
+ "steps": [
+ {
+ "name": "deployTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "deployReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "installTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "installReal",
+ "status": "unfinished"
+ },
+ {
+ "name": "startTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "endTests",
+ "status": "unfinished"
+ },
+ {
+ "name": "deactivateTester",
+ "status": "unfinished"
+ },
+ {
+ "name": "report",
+ "status": "unfinished"
+ }
+ ]
}
- }
+ ]
},
{
"type": "test",
@@ -185,9 +497,11 @@
"declared": false,
"instance": "instance2",
"jobName": "system-test",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance2/job/system-test",
"environment": "test",
"region": "test.us-east-1",
- "jobs": []
+ "toRun": [],
+ "runs": []
},
{
"type": "test",
@@ -195,9 +509,11 @@
"declared": false,
"instance": "instance2",
"jobName": "staging-test",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance2/job/staging-test",
"environment": "staging",
"region": "staging.us-east-3",
- "jobs": []
+ "toRun": [],
+ "runs": []
},
{
"type": "deployment",
@@ -208,9 +524,10 @@
"declared": true,
"instance": "instance2",
"jobName": "production-us-central-1",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance2/job/production-us-central-1",
"environment": "prod",
"region": "prod.us-central-1",
- "jobs": [
+ "toRun": [
{
"versions": {
"targetPlatform": "6.1.0",
@@ -219,10 +536,10 @@
"commit": "commit1",
"source": "repository1/tree/commit1"
}
- },
- "running": false
+ }
}
- ]
+ ],
+ "runs": []
},
{
"type": "deployment",
@@ -232,9 +549,10 @@
"declared": true,
"instance": "instance2",
"jobName": "production-us-west-1",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance2/job/production-us-west-1",
"environment": "prod",
"region": "prod.us-west-1",
- "jobs": [
+ "toRun": [
{
"versions": {
"targetPlatform": "6.1.0",
@@ -243,10 +561,10 @@
"commit": "commit1",
"source": "repository1/tree/commit1"
}
- },
- "running": false
+ }
}
- ]
+ ],
+ "runs": []
},
{
"type": "deployment",
@@ -256,9 +574,10 @@
"declared": true,
"instance": "instance2",
"jobName": "production-us-east-3",
+ "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/instance2/job/production-us-east-3",
"environment": "prod",
"region": "prod.us-east-3",
- "jobs": [
+ "toRun": [
{
"versions": {
"targetPlatform": "6.1.0",
@@ -267,10 +586,11 @@
"commit": "commit1",
"source": "repository1/tree/commit1"
}
- },
- "running": false
+ }
}
- ]
+ ],
+ "runs": []
}
]
}
+