summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2018-05-09 16:40:01 +0200
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2018-05-09 16:40:01 +0200
commitfdc5bf6d20317d158dcb05b927e73716254c1310 (patch)
tree0beeeb034446795f91a3cd38d41230f9793b19d2 /controller-server
parentf1bc55d4a00a5f7fb449139aee46a2a8d4286de7 (diff)
Replace ScrewdriverBuildJob with a boolean
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java25
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java52
6 files changed, 26 insertions, 77 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index 4e55b4857e9..db749713483 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -270,8 +270,7 @@ public class ApplicationController {
.map(app -> new LockedApplication(app, lock))
.orElseGet(() -> new LockedApplication(createApplication(applicationId, Optional.empty()), lock));
- boolean canDeployDirectly = ! options.screwdriverBuildJob.map(job1 -> job1.screwdriverId).isPresent()
- || zone.environment().isManuallyDeployed();
+ boolean canDeployDirectly = options.deployDirectly || zone.environment().isManuallyDeployed();
boolean preferOldestVersion = options.deployCurrentVersion;
// Determine versions to use.
@@ -430,7 +429,7 @@ public class ApplicationController {
}
private DeployOptions withVersion(Version version, DeployOptions options) {
- return new DeployOptions(options.screwdriverBuildJob,
+ return new DeployOptions(options.deployDirectly,
Optional.of(version),
options.ignoreValidationErrors,
options.deployCurrentVersion);
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 d8ed99f116c..d9848577f0a 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
@@ -35,19 +35,13 @@ import com.yahoo.vespa.hosted.controller.api.application.v4.EnvironmentResource;
import com.yahoo.vespa.hosted.controller.api.application.v4.TenantResource;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.EndpointStatus;
-import com.yahoo.vespa.hosted.controller.api.application.v4.model.GitRevision;
-import com.yahoo.vespa.hosted.controller.api.application.v4.model.ScrewdriverBuildJob;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.RefeedAction;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.RestartAction;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.ServiceInfo;
import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
-import com.yahoo.vespa.hosted.controller.api.identifiers.GitBranch;
-import com.yahoo.vespa.hosted.controller.api.identifiers.GitCommit;
-import com.yahoo.vespa.hosted.controller.api.identifiers.GitRepository;
import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname;
import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
-import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId;
import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId;
import com.yahoo.vespa.hosted.controller.api.identifiers.UserId;
import com.yahoo.vespa.hosted.controller.api.integration.athenz.AthenzClientFactory;
@@ -627,7 +621,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
private HttpResponse updateTenant(String tenantName, HttpRequest request) {
Optional<AthenzTenant> existingTenant = controller.tenants().athenzTenant(TenantName.from(tenantName));
- if ( ! existingTenant.isPresent()) return ErrorResponse.notFoundError("Tenant '" + tenantName + "' does not exist");;
+ if ( ! existingTenant.isPresent()) return ErrorResponse.notFoundError("Tenant '" + tenantName + "' does not exist");
Inspector requestData = toSlime(request.getData()).get();
AthenzTenant updatedTenant = existingTenant.get()
@@ -738,7 +732,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
verifyApplicationIdentityConfiguration(tenantName, applicationPackage);
// TODO: get rid of the json object
- DeployOptions deployOptionsJsonClass = new DeployOptions(screwdriverBuildJobFromSlime(deployOptions.field("screwdriverBuildJob")),
+ DeployOptions deployOptionsJsonClass = new DeployOptions(deployOptions.field("deployDirectly").asBool(),
optional("vespaVersion", deployOptions).map(Version::new),
deployOptions.field("ignoreValidationErrors").asBool(),
deployOptions.field("deployCurrentVersion").asBool());
@@ -1096,21 +1090,6 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
array.addString(string);
}
- // TODO: get rid of the json object
- private Optional<ScrewdriverBuildJob> screwdriverBuildJobFromSlime(Inspector object) {
- if ( ! object.valid() ) return Optional.empty();
- Optional<ScrewdriverId> screwdriverId = optional("screwdriverId", object).map(ScrewdriverId::new);
- return Optional.of(new ScrewdriverBuildJob(screwdriverId.orElse(null),
- gitRevisionFromSlime(object.field("gitRevision"))));
- }
-
- // TODO: get rid of the json object
- private GitRevision gitRevisionFromSlime(Inspector object) {
- return new GitRevision(optional("repository", object).map(GitRepository::new).orElse(null),
- optional("branch", object).map(GitBranch::new).orElse(null),
- optional("commit", object).map(GitCommit::new).orElse(null));
- }
-
private String readToString(InputStream stream) {
Scanner scanner = new Scanner(stream).useDelimiter("\\A");
if ( ! scanner.hasNext()) return null;
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
index 2506f35a08b..0de153fc3f9 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java
@@ -14,7 +14,6 @@ import com.yahoo.vespa.athenz.api.NToken;
import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.EndpointStatus;
-import com.yahoo.vespa.hosted.controller.api.application.v4.model.ScrewdriverBuildJob;
import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId;
import com.yahoo.vespa.hosted.controller.api.integration.BuildService;
@@ -794,7 +793,7 @@ public class ControllerTest {
// Direct deploy is allowed when project ID is missing
ZoneId zone = ZoneId.from("prod", "cd-us-central-1");
// Same options as used in our integration tests
- DeployOptions options = new DeployOptions(Optional.empty(), Optional.empty(), false,
+ DeployOptions options = new DeployOptions(true, Optional.empty(), false,
false);
tester.controller().applications().deploy(app.id(), zone, Optional.of(applicationPackage), options);
@@ -870,8 +869,7 @@ public class ControllerTest {
ControllerTester tester = new ControllerTester();
String application = "this_application_name_is_far_too_long_and_has_underscores";
ZoneId zone = ZoneId.from("test", "us-east-1");
- DeployOptions options = new DeployOptions(Optional.of(new ScrewdriverBuildJob(new ScrewdriverId("123"),
- null)),
+ DeployOptions options = new DeployOptions(false,
Optional.empty(),
false,
false);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
index 52225a4c62e..98189613bd0 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
@@ -11,11 +11,6 @@ import com.yahoo.vespa.athenz.api.AthenzDomain;
import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions;
-import com.yahoo.vespa.hosted.controller.api.application.v4.model.GitRevision;
-import com.yahoo.vespa.hosted.controller.api.application.v4.model.ScrewdriverBuildJob;
-import com.yahoo.vespa.hosted.controller.api.identifiers.GitBranch;
-import com.yahoo.vespa.hosted.controller.api.identifiers.GitCommit;
-import com.yahoo.vespa.hosted.controller.api.identifiers.GitRepository;
import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId;
@@ -240,12 +235,10 @@ public final class ControllerTester {
}
public void deploy(Application application, ZoneId zone, Optional<ApplicationPackage> applicationPackage, boolean deployCurrentVersion) {
- ScrewdriverId app1ScrewdriverId = new ScrewdriverId(String.valueOf(application.deploymentJobs().projectId().getAsLong()));
- GitRevision app1RevisionId = new GitRevision(new GitRepository("repo"), new GitBranch("master"), new GitCommit("commit1"));
controller().applications().deploy(application.id(),
zone,
applicationPackage,
- new DeployOptions(Optional.of(new ScrewdriverBuildJob(app1ScrewdriverId, app1RevisionId)), Optional.empty(), false, deployCurrentVersion));
+ new DeployOptions(false, Optional.empty(), false, deployCurrentVersion));
}
/** Used by ApplicationSerializerTest to avoid breaking encapsulation. Should not be used by anything else */
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
index e776f613880..51437be2832 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java
@@ -12,8 +12,6 @@ import com.yahoo.vespa.hosted.controller.ArtifactRepositoryMock;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.TestIdentities;
import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions;
-import com.yahoo.vespa.hosted.controller.api.application.v4.model.GitRevision;
-import com.yahoo.vespa.hosted.controller.api.application.v4.model.ScrewdriverBuildJob;
import com.yahoo.vespa.hosted.controller.api.identifiers.GitBranch;
import com.yahoo.vespa.hosted.controller.api.identifiers.GitCommit;
import com.yahoo.vespa.hosted.controller.api.identifiers.GitRepository;
@@ -88,10 +86,8 @@ public class ContainerControllerTester {
}
public Application deploy(Application application, ApplicationPackage applicationPackage, ZoneId zone, long projectId) {
- ScrewdriverId app1ScrewdriverId = new ScrewdriverId(String.valueOf(projectId));
- GitRevision app1RevisionId = new GitRevision(new GitRepository("repo"), new GitBranch("master"), new GitCommit("commit1"));
controller().applications().deploy(application.id(), zone, Optional.of(applicationPackage),
- new DeployOptions(Optional.of(new ScrewdriverBuildJob(app1ScrewdriverId, app1RevisionId)), Optional.empty(), false, false));
+ new DeployOptions(false, Optional.empty(), false, false));
return application;
}
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 196794df068..407263a7973 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
@@ -9,6 +9,7 @@ import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.TenantName;
+import com.yahoo.io.IOUtils;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.Slime;
@@ -178,7 +179,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
addUserToHostedOperatorRole(HostedAthenzIdentities.from(HOSTED_VESPA_OPERATOR));
// POST (deploy) an application to a zone - manual user deployment
- HttpEntity entity = createApplicationDeployData(applicationPackage, Optional.empty());
+ HttpEntity entity = createApplicationDeployData(applicationPackage, true);
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/dev/region/us-west-1/instance/default/deploy", POST)
.data(entity)
.userIdentity(USER_ID),
@@ -201,7 +202,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
// ... systemtest
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/test/region/us-east-1/instance/default/", POST)
- .data(createApplicationDeployData(applicationPackage, Optional.of(screwdriverProjectId)))
+ .data(createApplicationDeployData(applicationPackage, false))
.screwdriverIdentity(SCREWDRIVER_ID),
new File("deploy-result.json"));
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/test/region/us-east-1/instance/default", DELETE)
@@ -215,7 +216,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
// ... staging
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/staging/region/us-east-3/instance/default/", POST)
- .data(createApplicationDeployData(applicationPackage, Optional.of(screwdriverProjectId)))
+ .data(createApplicationDeployData(applicationPackage, false))
.screwdriverIdentity(SCREWDRIVER_ID),
new File("deploy-result.json"));
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/staging/region/us-east-3/instance/default", DELETE)
@@ -228,7 +229,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
// ... prod zone
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/corp-us-east-1/instance/default/", POST)
- .data(createApplicationDeployData(applicationPackage, Optional.of(screwdriverProjectId)))
+ .data(createApplicationDeployData(applicationPackage, false))
.screwdriverIdentity(SCREWDRIVER_ID),
new File("deploy-result.json"));
controllerTester.jobCompletion(DeploymentJobs.JobType.productionCorpUsEast1)
@@ -418,7 +419,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
new com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId("application1"));
// POST (deploy) an application to a prod zone - allowed when project ID is not specified
- HttpEntity entity = createApplicationDeployData(applicationPackage, Optional.empty());
+ HttpEntity entity = createApplicationDeployData(applicationPackage, true);
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/corp-us-east-1/instance/default/deploy", POST)
.data(entity)
.screwdriverIdentity(SCREWDRIVER_ID),
@@ -446,7 +447,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
new File("create-user-response.json"));
// POST (deploy) an application to a dev zone
- HttpEntity entity = createApplicationDeployData(applicationPackage, Optional.empty());
+ HttpEntity entity = createApplicationDeployData(applicationPackage, true);
tester.assertResponse(request("/application/v4/tenant/by-new-user/application/application1/environment/dev/region/cd-us-central-1/instance/default", POST)
.data(entity)
.userIdentity(userId),
@@ -483,7 +484,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
.build();
ApplicationId id = ApplicationId.from("tenant1", "application1", "default");
long projectId = 1;
- HttpEntity deployData = createApplicationDeployData(Optional.empty(), Optional.of(projectId));
+ HttpEntity deployData = createApplicationDeployData(Optional.empty(), false);
startAndTestChange(controllerTester, id, projectId, applicationPackage, deployData, 100);
// us-east-3
@@ -617,7 +618,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
configServer.throwOnNextPrepare(new ConfigServerException(new URI("server-url"), "Failed to prepare application", ConfigServerException.ErrorCode.INVALID_APPLICATION_PACKAGE, null));
// POST (deploy) an application with an invalid application package
- HttpEntity entity = createApplicationDeployData(applicationPackage, Optional.empty());
+ HttpEntity entity = createApplicationDeployData(applicationPackage, true);
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/dev/region/us-west-1/instance/default/deploy", POST)
.data(entity)
.userIdentity(USER_ID),
@@ -742,7 +743,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
200);
// Deploy to an authorized zone by a user tenant is disallowed
- HttpEntity entity = createApplicationDeployData(applicationPackage, Optional.empty());
+ HttpEntity entity = createApplicationDeployData(applicationPackage, true);
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/us-west-1/instance/default/deploy", POST)
.data(entity)
.userIdentity(USER_ID),
@@ -803,7 +804,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
controllerTester.authorize(ATHENZ_TENANT_DOMAIN, screwdriverId, ApplicationAction.deploy, application);
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/test/region/us-east-1/instance/default/", POST)
- .data(createApplicationDeployData(applicationPackage, Optional.of(screwdriverProjectId)))
+ .data(createApplicationDeployData(applicationPackage, false))
.screwdriverIdentity(screwdriverId),
"{\"error-code\":\"FORBIDDEN\",\"message\":\"Athenz domain in deployment.xml: [invalid.domain] must match tenant domain: [domain1]\"}",
403);
@@ -835,7 +836,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
.uploadArtifact(applicationPackage)
.submit();
tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/test/region/us-east-1/instance/default/", POST)
- .data(createApplicationDeployData(applicationPackage, Optional.of(screwdriverProjectId)))
+ .data(createApplicationDeployData(applicationPackage, false))
.screwdriverIdentity(screwdriverId),
new File("deploy-result.json"));
@@ -954,39 +955,22 @@ public class ApplicationApiTest extends ControllerContainerTest {
}
}
- private HttpEntity createApplicationDeployData(ApplicationPackage applicationPackage, Optional<Long> screwdriverJobId) {
- return createApplicationDeployData(Optional.of(applicationPackage), screwdriverJobId);
+ private HttpEntity createApplicationDeployData(ApplicationPackage applicationPackage, boolean deployDirectly) {
+ return createApplicationDeployData(Optional.of(applicationPackage), deployDirectly);
}
- private HttpEntity createApplicationDeployData(Optional<ApplicationPackage> applicationPackage, Optional<Long> screwdriverJobId) {
+ private HttpEntity createApplicationDeployData(Optional<ApplicationPackage> applicationPackage, boolean deployDirectly) {
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
- builder.addTextBody("deployOptions", deployOptions(screwdriverJobId), ContentType.APPLICATION_JSON);
+ builder.addTextBody("deployOptions", deployOptions(deployDirectly), ContentType.APPLICATION_JSON);
applicationPackage.ifPresent(ap -> builder.addBinaryBody("applicationZip", ap.zippedContent()));
return builder.build();
}
- private String deployOptions(Optional<Long> screwdriverJobId) {
- if (screwdriverJobId.isPresent()) // deployment from screwdriver
+ private String deployOptions(boolean deployDirectly) {
return "{\"vespaVersion\":null," +
"\"ignoreValidationErrors\":false," +
- "\"screwdriverBuildJob\":{\"screwdriverId\":\"" + screwdriverJobId.get() + "\"," +
- "\"gitRevision\":{\"repository\":\"repository1\"," +
- "\"branch\":\"master\"," +
- "\"commit\":\"commit1\"" +
- "}" +
- "}" +
+ "\"deployDirectly\":" + deployDirectly +
"}";
- else // This is ugly and evil, but tentatively replicates the existing behavor from the client on user deployments
- return "{\"vespaVersion\":null," +
- "\"ignoreValidationErrors\":false," +
- "\"screwdriverBuildJob\":{\"screwdriverId\":null," +
- "\"gitRevision\":{\"repository\":null," +
- "\"branch\":null," +
- "\"commit\":null" +
- "}" +
- "}" +
- "}";
-
}
private static class RequestBuilder implements Supplier<Request> {