diff options
Diffstat (limited to 'controller-server')
2 files changed, 23 insertions, 18 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java index cd9c467582c..2077278ee0c 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java @@ -68,7 +68,7 @@ public class ChangeManagementApiHandler extends AuditLoggingRequestHandler { private HttpResponse post(HttpRequest request) { Path path = new Path(request.getUri()); - if (path.matches("/changemanagement/v1/assessment")) return new SlimeJsonResponse(doAssessment(request)); + if (path.matches("/changemanagement/v1/assessment")) return doAssessment(request); return ErrorResponse.notFoundError("Nothing at " + path); } @@ -97,31 +97,24 @@ public class ChangeManagementApiHandler extends AuditLoggingRequestHandler { return ErrorResponse.notFoundError("Could not find any upcoming change requests with id " + changeRequestId); var changeRequest = optionalChangeRequest.get(); - var zone = affectedZone(changeRequest); - if (zone.isEmpty()) - return ErrorResponse.notFoundError("Could not find prod zone affected by change request " + changeRequestId); - - var assessment = doAssessment(changeRequest.getImpactedHosts(), zone.get()); - return new SlimeJsonResponse(assessment); + return doAssessment(changeRequest.getImpactedHosts()); } // The structure here should be // // { - // zone: string // hosts: string[] // switches: string[] // switchInSequence: boolean // } // - // Only zone and host are supported right now - private Slime doAssessment(HttpRequest request) { + // Only hosts is supported right now + private HttpResponse doAssessment(HttpRequest request) { Inspector inspector = inspectorOrThrow(request); // For now; mandatory fields - String zoneStr = getInspectorFieldOrThrow(inspector, "zone").asString(); Inspector hostArray = getInspectorFieldOrThrow(inspector, "hosts"); // The impacted hostnames @@ -130,11 +123,15 @@ public class ChangeManagementApiHandler extends AuditLoggingRequestHandler { hostArray.traverse((ArrayTraverser) (i, host) -> hostNames.add(host.asString())); } - return doAssessment(hostNames, ZoneId.from(zoneStr)); + return doAssessment(hostNames); } - private Slime doAssessment(List<String> hostNames, ZoneId zoneId) { - ChangeManagementAssessor.Assessment assessments = assessor.assessment(hostNames, zoneId); + private HttpResponse doAssessment(List<String> hostNames) { + var zone = affectedZone(hostNames); + if (zone.isEmpty()) + return ErrorResponse.notFoundError("Could not infer prod zone from host list: " + hostNames); + + ChangeManagementAssessor.Assessment assessments = assessor.assessment(hostNames, zone.get()); Slime slime = new Slime(); Cursor root = slime.setObject(); @@ -171,12 +168,11 @@ public class ChangeManagementApiHandler extends AuditLoggingRequestHandler { hostObject.setLong("numberOfProblematicChildren", assessment.numberOfProblematicChildren); }); - return slime; + return new SlimeJsonResponse(slime); } - private Optional<ZoneId> affectedZone(ChangeRequest changeRequest) { - var affectedHosts = changeRequest.getImpactedHosts() - .stream() + private Optional<ZoneId> affectedZone(List<String> hosts) { + var affectedHosts = hosts.stream() .map(HostName::from) .collect(Collectors.toList()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java index 2f2e70e2cf6..cd815a2064b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandlerTest.java @@ -2,9 +2,11 @@ package com.yahoo.vespa.hosted.controller.restapi.changemanagement; import com.yahoo.application.container.handler.Request; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.athenz.api.AthenzIdentity; import com.yahoo.vespa.athenz.api.AthenzUser; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.Node; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeMembership; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeOwner; import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryNode; @@ -32,6 +34,7 @@ public class ChangeManagementApiHandlerTest extends ControllerContainerTest { tester = new ContainerTester(container, responses); addUserToHostedOperatorRole(operator); tester.serviceRegistry().configServer().nodeRepository().addNodes(ZoneId.from("prod.us-east-3"), createNodes()); + tester.serviceRegistry().configServer().nodeRepository().putNodes(ZoneId.from("prod.us-east-3"), createNode()); } @Test @@ -49,6 +52,12 @@ public class ChangeManagementApiHandlerTest extends ControllerContainerTest { tester.assertResponse(request, new File(filename)); } + private Node createNode() { + return new Node.Builder() + .hostname(HostName.from("host1")) + .build(); + } + private List<NodeRepositoryNode> createNodes() { List<NodeRepositoryNode> nodes = new ArrayList<>(); nodes.add(createNode("node1", "host1", "default", 0 )); |