diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-04-29 09:49:00 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-04-29 09:49:00 +0200 |
commit | a7d261ebc83e23449398c9f055c48cd0cebd4fb3 (patch) | |
tree | 2a81919b9830536984443e6019c3aa269dcbcd03 | |
parent | 16a4ed9a030c9654e415561e23fb5f6abc4a2b96 (diff) |
Add endpoints field for endpoints defined by routing policies
9 files changed, 280 insertions, 23 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java index 14a5d3c7ddf..ce7af03aa7e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java @@ -26,6 +26,7 @@ public class Endpoint { private final Scope scope; private final boolean legacy; private final boolean directRouting; + private final boolean tls; private Endpoint(String name, ApplicationId application, ZoneId zone, SystemName system, Port port, boolean legacy, boolean directRouting) { @@ -37,6 +38,7 @@ public class Endpoint { this.scope = zone == null ? Scope.global : Scope.zone; this.legacy = legacy; this.directRouting = directRouting; + this.tls = port.tls; } /** Returns the URL used to access this */ @@ -67,6 +69,11 @@ public class Endpoint { return directRouting; } + /** Returns whether this endpoint supports TLS connections */ + public boolean tls() { + return tls; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 0ca08f7ba3b..1b9bf28f395 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -584,13 +584,22 @@ public class ApplicationApiHandler extends LoggingRequestHandler { } private void toSlime(Cursor response, DeploymentId deploymentId, Deployment deployment, HttpRequest request) { - response.setString("tenant", deploymentId.applicationId().tenant().value()); response.setString("application", deploymentId.applicationId().application().value()); response.setString("instance", deploymentId.applicationId().instance().value()); // pointless response.setString("environment", deploymentId.zoneId().environment().value()); response.setString("region", deploymentId.zoneId().region().value()); + // Add endpoint(s) defined by routing policies + var endpointArray = response.setArray("endpoints"); + for (var policy : controller.applications().routingPolicies(deploymentId.applicationId())) { + Cursor endpointObject = endpointArray.addObject(); + Endpoint endpoint = policy.endpointIn(controller.system()); + endpointObject.setString("cluster", policy.cluster().value()); + endpointObject.setBool("tls", endpoint.tls()); + endpointObject.setString("url", endpoint.url().toString()); + } + // serviceUrls contains zone/cluster-specific endpoints for this deployment. The name of these endpoints may // contain the cluster name (if non-default) and since the controller has no knowledge of clusters, we have to // ask the routing layer here diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 23b09273624..a7a28591d62 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -11,6 +11,7 @@ import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.RotationName; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; import com.yahoo.vespa.athenz.api.AthenzDomain; @@ -34,7 +35,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.organization.Contact; import com.yahoo.vespa.hosted.controller.api.integration.organization.IssueId; import com.yahoo.vespa.hosted.controller.api.integration.organization.MockContactRetriever; import com.yahoo.vespa.hosted.controller.api.integration.organization.User; -import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.Change; import com.yahoo.vespa.hosted.controller.application.ClusterInfo; @@ -1344,8 +1344,13 @@ public class ApplicationApiTest extends ControllerContainerTest { } @Test - public void applicationWithPerClusterGlobalRotation() { + public void applicationWithRoutingPolicy() { Application app = controllerTester.createApplication(); + ApplicationPackage applicationPackage = new ApplicationPackageBuilder() + .environment(Environment.prod) + .region("us-west-1") + .build(); + controllerTester.deployCompletely(app, applicationPackage, 1, false); RoutingPolicy policy = new RoutingPolicy(app.id(), ClusterSpec.Id.from("default"), ZoneId.from(Environment.prod, RegionName.from("us-west-1")), @@ -1356,7 +1361,12 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET application tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", GET) .userIdentity(USER_ID), - new File("application-cluster-global-rotation.json")); + new File("application-with-routing-policy.json")); + + // GET deployment + tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default", GET) + .userIdentity(USER_ID), + new File("deployment-with-routing-policy.json")); } private void notifyCompletion(DeploymentJobs.JobReport report, ContainerControllerTester tester) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-cluster-global-rotation.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-cluster-global-rotation.json deleted file mode 100644 index baaf0cd038d..00000000000 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-cluster-global-rotation.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "tenant": "tenant1", - "application": "application1", - "instance": "default", - "deployments": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/default/job/", - "deployedInternally": false, - "deploymentJobs": [], - "changeBlockers": [], - "compileVersion": "(ignore)", - "globalRotations": [ - "https://c0.application1.tenant1.global.vespa.oath.cloud/" - ], - "instances": [], - "metrics": { - "queryServiceQuality": 0.0, - "writeServiceQuality": 0.0 - }, - "activity": {} -} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-with-routing-policy.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-with-routing-policy.json new file mode 100644 index 00000000000..627afbf2674 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-with-routing-policy.json @@ -0,0 +1,203 @@ +{ + "tenant": "tenant1", + "application": "application1", + "instance": "default", + "deployments": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/instance/default/job/", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + }, + "projectId": 1, + "deployedInternally": false, + "deploymentJobs": [ + { + "type": "component", + "success": true, + "lastCompleted": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Application commit", + "at": "(ignore)" + }, + "lastSuccess": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Application commit", + "at": "(ignore)" + } + }, + { + "type": "system-test", + "success": true, + "lastTriggered": { + "id": -1, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Testing last changes outside prod", + "at": "(ignore)" + }, + "lastCompleted": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Testing last changes outside prod", + "at": "(ignore)" + }, + "lastSuccess": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Testing last changes outside prod", + "at": "(ignore)" + } + }, + { + "type": "staging-test", + "success": true, + "lastTriggered": { + "id": -1, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Testing deployment for production-us-west-1 (platform (ignore), application 1.0.42-commit1)", + "at": "(ignore)" + }, + "lastCompleted": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Testing deployment for production-us-west-1 (platform (ignore), application 1.0.42-commit1)", + "at": "(ignore)" + }, + "lastSuccess": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "Testing deployment for production-us-west-1 (platform (ignore), application 1.0.42-commit1)", + "at": "(ignore)" + } + }, + { + "type": "production-us-west-1", + "success": true, + "lastTriggered": { + "id": -1, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "New change available", + "at": "(ignore)" + }, + "lastCompleted": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "New change available", + "at": "(ignore)" + }, + "lastSuccess": { + "id": 42, + "version": "(ignore)", + "revision": { + "hash": "1.0.42-commit1", + "source": { + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1" + } + }, + "reason": "New change available", + "at": "(ignore)" + } + } + ], + "changeBlockers": [], + "compileVersion": "(ignore)", + "globalRotations": [ + "https://c0.application1.tenant1.global.vespa.oath.cloud/" + ], + "instances": [ + { + "environment": "prod", + "region": "us-west-1", + "instance": "default", + "url": "http://localhost:8080/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default" + } + ], + "metrics": { + "queryServiceQuality": 0.0, + "writeServiceQuality": 0.0 + }, + "activity": {} +} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-with-routing-policy.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-with-routing-policy.json new file mode 100644 index 00000000000..519c9b1c842 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-with-routing-policy.json @@ -0,0 +1,44 @@ +{ + "tenant": "tenant1", + "application": "application1", + "instance": "default", + "environment": "prod", + "region": "us-west-1", + "endpoints": [ + { + "cluster": "default", + "tls": true, + "url": "https://application1.tenant1.us-west-1.vespa.oath.cloud/" + } + ], + "serviceUrls": [ + "http://old-endpoint.vespa.yahooapis.com:4080", + "http://qrs-endpoint.vespa.yahooapis.com:4080", + "http://feeding-endpoint.vespa.yahooapis.com:4080", + "http://global-endpoint.vespa.yahooapis.com:4080", + "http://alias-endpoint.vespa.yahooapis.com:4080" + ], + "nodes": "http://localhost:8080/zone/v2/prod/us-west-1/nodes/v2/node/%3F&recursive=true&application=tenant1.application1.default", + "yamasUrl": "http://monitoring-system.test/?environment=prod®ion=us-west-1&application=tenant1.application1", + "version": "(ignore)", + "revision": "1.0.42-commit1", + "deployTimeEpochMs": "(ignore)", + "screwdriverId": "1", + "gitRepository": "repository1", + "gitBranch": "master", + "gitCommit": "commit1", + "activity": {}, + "cost": { + "tco": 0, + "waste": 0, + "utilization": 0.0, + "cluster": {} + }, + "metrics": { + "queriesPerSecond": 0.0, + "writesPerSecond": 0.0, + "documentCount": 0.0, + "queryLatencyMillis": 0.0, + "writeLatencyMillis": 0.0 + } +} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json index af21260676c..6caac3bd532 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json @@ -4,6 +4,7 @@ "instance": "default", "environment": "prod", "region": "us-central-1", + "endpoints": [], "serviceUrls": [ "http://old-endpoint.vespa.yahooapis.com:4080", "http://qrs-endpoint.vespa.yahooapis.com:4080", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-west-1.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-west-1.json index 54e94c4521e..67c71ee3880 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-west-1.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-west-1.json @@ -4,6 +4,7 @@ "instance": "default", "environment": "dev", "region": "us-west-1", + "endpoints": [], "serviceUrls": [ "http://old-endpoint.vespa.yahooapis.com:4080", "http://qrs-endpoint.vespa.yahooapis.com:4080", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/prod-us-central-1.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/prod-us-central-1.json index cfefe629b9a..9b08fccf883 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/prod-us-central-1.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/prod-us-central-1.json @@ -7,6 +7,7 @@ "instance": "default", "environment": "prod", "region": "us-central-1", + "endpoints": [], "serviceUrls": [ "http://old-endpoint.vespa.yahooapis.com:4080", "http://qrs-endpoint.vespa.yahooapis.com:4080", |