diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-03-16 15:50:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-16 15:50:18 +0100 |
commit | 85bc5cf66ec7c546649ea224d8b55906e9dd86b6 (patch) | |
tree | 8e7250628a39df05e0e3f94d6d8902fb7288d806 | |
parent | 94d58d03e282ef1d5afd8db8b0a451ad24806c51 (diff) | |
parent | 402bfddd19860286dc68910a6932d5f770f6be97 (diff) |
Merge pull request #12582 from vespa-engine/freva/docker-image-flag
Set docker image repository when deploying
3 files changed, 28 insertions, 2 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java index 43d702d108f..ee2e292ade9 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/model/DeploymentData.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.controller.api.application.v4.model; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ContainerEndpoint; @@ -24,16 +25,19 @@ public class DeploymentData { private final Version platform; private final Set<ContainerEndpoint> containerEndpoints; private final Optional<EndpointCertificateMetadata> endpointCertificateMetadata; + private final Optional<DockerImage> dockerImageRepo; public DeploymentData(ApplicationId instance, ZoneId zone, byte[] applicationPackage, Version platform, Set<ContainerEndpoint> containerEndpoints, - Optional<EndpointCertificateMetadata> endpointCertificateMetadata) { + Optional<EndpointCertificateMetadata> endpointCertificateMetadata, + Optional<DockerImage> dockerImageRepo) { this.instance = requireNonNull(instance); this.zone = requireNonNull(zone); this.applicationPackage = requireNonNull(applicationPackage); this.platform = requireNonNull(platform); this.containerEndpoints = requireNonNull(containerEndpoints); this.endpointCertificateMetadata = requireNonNull(endpointCertificateMetadata); + this.dockerImageRepo = requireNonNull(dockerImageRepo); } public ApplicationId instance() { @@ -60,4 +64,7 @@ public class DeploymentData { return endpointCertificateMetadata; } + public Optional<DockerImage> dockerImageRepo() { + return dockerImageRepo; + } } 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 a382d357e49..cb6d02b4b77 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 @@ -6,6 +6,7 @@ import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.application.api.ValidationId; import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.TenantName; @@ -17,7 +18,10 @@ import com.yahoo.vespa.athenz.api.AthenzPrincipal; import com.yahoo.vespa.athenz.api.AthenzService; import com.yahoo.vespa.athenz.api.AthenzUser; import com.yahoo.vespa.curator.Lock; +import com.yahoo.vespa.flags.FetchVector; import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; +import com.yahoo.vespa.flags.StringFlag; import com.yahoo.vespa.hosted.controller.api.ActivateResult; import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions; import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeploymentData; @@ -108,6 +112,7 @@ public class ApplicationController { private final DeploymentTrigger deploymentTrigger; private final ApplicationPackageValidator applicationPackageValidator; private final EndpointCertificateManager endpointCertificateManager; + private final StringFlag dockerImageRepoFlag; ApplicationController(Controller controller, CuratorDb curator, AccessControl accessControl, Clock clock, SecretStore secretStore, FlagSource flagSource) { @@ -119,6 +124,7 @@ public class ApplicationController { this.clock = clock; this.artifactRepository = controller.serviceRegistry().artifactRepository(); this.applicationStore = controller.serviceRegistry().applicationStore(); + this.dockerImageRepoFlag = Flags.DOCKER_IMAGE_REPO.bindTo(flagSource); deploymentTrigger = new DeploymentTrigger(controller, clock); applicationPackageValidator = new ApplicationPackageValidator(controller); @@ -485,9 +491,16 @@ public class ApplicationController { ZoneId zone, Version platform, Set<ContainerEndpoint> endpoints, Optional<EndpointCertificateMetadata> endpointCertificateMetadata) { try { + Optional<DockerImage> dockerImageRepo = Optional.ofNullable( + dockerImageRepoFlag + .with(FetchVector.Dimension.ZONE_ID, zone.value()) + .with(FetchVector.Dimension.APPLICATION_ID, application.serializedForm()) + .value()) + .filter(s -> !s.isBlank()) + .map(DockerImage::fromString); ConfigServer.PreparedApplication preparedApplication = configServer.deploy(new DeploymentData(application, zone, applicationPackage.zippedContent(), platform, - endpoints, endpointCertificateMetadata)); + endpoints, endpointCertificateMetadata, dockerImageRepo)); return new ActivateResult(new RevisionId(applicationPackage.hash()), preparedApplication.prepareResponse(), applicationPackage.zippedContent().length); } finally { diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index a17b4aa76c3..2a2b255e529 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -233,6 +233,12 @@ public class Flags { "Takes effect at redeployment", APPLICATION_ID); + public static final UnboundStringFlag DOCKER_IMAGE_REPO = defineStringFlag( + "docker-image-repo", "", + "Override default docker image repo. Docker image version will be Vespa version.", + "Takes effect on next deployment from controller", + ZONE_ID, APPLICATION_ID); + public static final UnboundStringFlag DOCKER_IMAGE_OVERRIDE = defineStringFlag( "docker-image-override", "", "Override the Docker image to use for deployments. This must containing the image name only, without tag", |