summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java5
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java12
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java10
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java3
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java15
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java9
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java2
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java3
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java3
18 files changed, 67 insertions, 42 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index c406fa80434..151a881eabe 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -7,6 +7,7 @@ import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.application.api.FileRegistry;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.Zone;
@@ -34,9 +35,13 @@ public interface ModelContext {
Properties properties();
default Optional<File> appDir() { return Optional.empty();}
+ // TODO: Remove when 7.211 is oldest model version in use
/** The Docker image repo we want to use for images for this deployment (optional, will use default if empty) */
default Optional<String> wantedDockerImageRepository() { return Optional.empty(); }
+ /** The Docker image repo we want to use for images for this deployment (optional, will use default if empty) */
+ default Optional<DockerImage> wantedDockerImageRepo() { return Optional.empty(); }
+
/** The Vespa version this model is built for */
Version modelVespaVersion();
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java
index 3fb7ba6bc3a..c52ea1ef092 100644
--- a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java
+++ b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java
@@ -23,6 +23,7 @@ import com.yahoo.config.model.application.provider.MockFileRegistry;
import com.yahoo.config.model.provision.HostsXmlProvisioner;
import com.yahoo.config.model.provision.SingleNodeProvisioner;
import com.yahoo.config.model.test.MockApplicationPackage;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Zone;
import com.yahoo.io.IOUtils;
import com.yahoo.io.reader.NamedReader;
@@ -77,7 +78,7 @@ public class DeployState implements ConfigDefinitionStore {
private final ImportedMlModels importedModels;
private final ValidationOverrides validationOverrides;
private final Version wantedNodeVespaVersion;
- private final Optional<String> wantedDockerImageRepo;
+ private final Optional<DockerImage> wantedDockerImageRepo;
private final Instant now;
private final HostProvisioner provisioner;
private final Provisioned provisioned;
@@ -114,7 +115,7 @@ public class DeployState implements ConfigDefinitionStore {
Instant now,
Version wantedNodeVespaVersion,
boolean accessLoggingEnabledByDefault,
- Optional<String> wantedDockerImageRepo) {
+ Optional<DockerImage> wantedDockerImageRepo) {
this.logger = deployLogger;
this.fileRegistry = fileRegistry;
this.rankProfileRegistry = rankProfileRegistry;
@@ -266,7 +267,7 @@ public class DeployState implements ConfigDefinitionStore {
public Version getWantedNodeVespaVersion() { return wantedNodeVespaVersion; }
- public Optional<String> getWantedDockerImageRepo() { return wantedDockerImageRepo; }
+ public Optional<DockerImage> getWantedDockerImageRepo() { return wantedDockerImageRepo; }
public Instant now() { return now; }
@@ -306,7 +307,7 @@ public class DeployState implements ConfigDefinitionStore {
private Instant now = Instant.now();
private Version wantedNodeVespaVersion = Vtag.currentVersion;
private boolean accessLoggingEnabledByDefault = true;
- private Optional<String> wantedDockerImageRepo = Optional.empty();
+ private Optional<DockerImage> wantedDockerImageRepo = Optional.empty();
public Builder applicationPackage(ApplicationPackage applicationPackage) {
this.applicationPackage = applicationPackage;
@@ -383,7 +384,7 @@ public class DeployState implements ConfigDefinitionStore {
return this;
}
- public Builder wantedDockerImageRepo(Optional<String> dockerImageRepo) {
+ public Builder wantedDockerImageRepo(Optional<DockerImage> dockerImageRepo) {
this.wantedDockerImageRepo = dockerImageRepo;
return this;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
index 631f4dab1a7..6a2ba5ed005 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java
@@ -152,7 +152,7 @@ public class VespaModelFactory implements ModelFactory {
.zone(zone)
.now(clock.instant())
.wantedNodeVespaVersion(modelContext.wantedNodeVespaVersion())
- .wantedDockerImageRepo(modelContext.wantedDockerImageRepository());
+ .wantedDockerImageRepo(modelContext.wantedDockerImageRepo());
modelContext.previousModel().ifPresent(builder::previousModel);
return builder.build(validationParameters);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
index 5418ba1a6ee..ea47e490b12 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
@@ -49,7 +49,7 @@ public class NodesSpecification {
private final boolean exclusive;
/** The repo part of a docker image (without tag), optional */
- private final Optional<String> dockerImageRepo;
+ private final Optional<DockerImage> dockerImageRepo;
/** The ID of the cluster referencing this node specification, if any */
private final Optional<String> combinedId;
@@ -58,7 +58,7 @@ public class NodesSpecification {
ClusterResources max,
boolean dedicated, Version version,
boolean required, boolean canFail, boolean exclusive,
- Optional<String> dockerImageRepo,
+ Optional<DockerImage> dockerImageRepo,
Optional<String> combinedId) {
if (max.smallerThan(min))
throw new IllegalArgumentException("Min resources must be larger or equal to max resources, but " +
@@ -84,7 +84,7 @@ public class NodesSpecification {
}
private static NodesSpecification create(boolean dedicated, boolean canFail, Version version,
- ModelElement nodesElement, Optional<String> dockerImageRepo) {
+ ModelElement nodesElement, Optional<DockerImage> dockerImageRepo) {
var resolvedElement = resolveElement(nodesElement);
var combinedId = findCombinedId(nodesElement, resolvedElement);
var resources = toResources(resolvedElement);
@@ -209,7 +209,7 @@ public class NodesSpecification {
.vespaVersion(version)
.exclusive(exclusive)
.combinedId(combinedId.map(ClusterSpec.Id::from))
- .dockerImageRepository(dockerImageRepo.map(DockerImage::fromString))
+ .dockerImageRepository(dockerImageRepo)
.build();
return hostSystem.allocateHosts(cluster, Capacity.from(min, max, required, canFail), logger);
}
@@ -370,9 +370,9 @@ public class NodesSpecification {
return new IllegalArgumentException("referenced service '" + referenceId + "' is not defined");
}
- private static Optional<String> dockerImageToUse(ModelElement nodesElement, Optional<String> dockerImage) {
+ private static Optional<DockerImage> dockerImageToUse(ModelElement nodesElement, Optional<DockerImage> dockerImage) {
String dockerImageFromElement = nodesElement.stringAttribute("docker-image");
- return dockerImageFromElement == null ? dockerImage : Optional.of(dockerImageFromElement);
+ return dockerImageFromElement == null ? dockerImage : Optional.of(DockerImage.fromString(dockerImageFromElement));
}
/** Parses a value ("value") or value range ("[min-value, max-value]") */
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index 78ef475653d..2fba8189046 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -25,7 +25,6 @@ import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.ClusterResources;
import com.yahoo.config.provision.ClusterSpec;
-import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeResources;
@@ -659,7 +658,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
ClusterSpec clusterSpec = ClusterSpec.request(ClusterSpec.Type.container,
ClusterSpec.Id.from(cluster.getName()))
.vespaVersion(deployState.getWantedNodeVespaVersion())
- .dockerImageRepository(deployState.getWantedDockerImageRepo().map(DockerImage::fromString))
+ .dockerImageRepository(deployState.getWantedDockerImageRepo())
.build();
int nodeCount = deployState.zone().environment().isProduction() ? 2 : 1;
Capacity capacity = Capacity.from(new ClusterResources(nodeCount, 1, NodeResources.unspecified),
@@ -691,7 +690,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
NodeType type = NodeType.valueOf(nodesElement.getAttribute("type"));
ClusterSpec clusterSpec = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from(cluster.getName()))
.vespaVersion(context.getDeployState().getWantedNodeVespaVersion())
- .dockerImageRepository(context.getDeployState().getWantedDockerImageRepo().map(DockerImage::fromString))
+ .dockerImageRepository(context.getDeployState().getWantedDockerImageRepo())
.build();
Map<HostResource, ClusterMembership> hosts =
cluster.getRoot().hostSystem().allocateHosts(clusterSpec,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
index 4bd5cf30cc6..079a05167b0 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/Deployment.java
@@ -5,6 +5,7 @@ import com.yahoo.component.Version;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostFilter;
import com.yahoo.config.provision.Provisioner;
import com.yahoo.log.LogLevel;
@@ -49,7 +50,7 @@ public class Deployment implements com.yahoo.config.provision.Deployment {
private final DeployLogger logger = new SilentDeployLogger();
/** The repository part of docker image this application should run on. Version is separate from image repo */
- Optional<String> dockerImageRepository;
+ Optional<DockerImage> dockerImageRepository;
/** The Vespa version this application should run on */
private final Version version;
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index 2773659559b..89714392869 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -16,6 +16,7 @@ import com.yahoo.config.model.api.Provisioned;
import com.yahoo.config.model.api.TlsSecrets;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.Zone;
import com.yahoo.vespa.flags.FetchVector;
@@ -46,7 +47,7 @@ public class ModelContextImpl implements ModelContext {
private final ModelContext.Properties properties;
private final Optional<File> appDir;
- private final Optional<String> wantedDockerImageRepository;
+ private final Optional<DockerImage> wantedDockerImageRepository;
/** The version of Vespa we are building a model for */
private final Version modelVespaVersion;
@@ -70,7 +71,7 @@ public class ModelContextImpl implements ModelContext {
Provisioned provisioned,
ModelContext.Properties properties,
Optional<File> appDir,
- Optional<String> wantedDockerImageRepository,
+ Optional<DockerImage> wantedDockerImageRepository,
Version modelVespaVersion,
Version wantedNodeVespaVersion) {
this.applicationPackage = applicationPackage;
@@ -124,7 +125,10 @@ public class ModelContextImpl implements ModelContext {
public Optional<File> appDir() { return appDir; }
@Override
- public Optional<String> wantedDockerImageRepository() { return wantedDockerImageRepository; }
+ public Optional<String> wantedDockerImageRepository() { return wantedDockerImageRepository.map(DockerImage::repository); }
+
+ @Override
+ public Optional<DockerImage> wantedDockerImageRepo() { return wantedDockerImageRepository; }
@Override
public Version modelVespaVersion() { return modelVespaVersion; }
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
index 99bec2c9db7..f62d065960d 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ActivatedModelsBuilder.java
@@ -12,6 +12,7 @@ import com.yahoo.config.model.api.Provisioned;
import com.yahoo.config.model.application.provider.MockFileRegistry;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.container.jdisc.secretstore.SecretStore;
@@ -84,7 +85,7 @@ public class ActivatedModelsBuilder extends ModelsBuilder<Application> {
protected Application buildModelVersion(ModelFactory modelFactory,
ApplicationPackage applicationPackage,
ApplicationId applicationId,
- Optional<String> wantedDockerImageRepository,
+ Optional<DockerImage> wantedDockerImageRepository,
Version wantedNodeVespaVersion,
Optional<AllocatedHosts> ignored, // Ignored since we have this in the app package for activated models
Instant now) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
index cc4378ae05e..5cac74907d4 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java
@@ -5,12 +5,12 @@ import com.google.common.util.concurrent.UncheckedTimeoutException;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.api.HostProvisioner;
-import com.yahoo.config.model.api.ModelContext;
import com.yahoo.config.model.api.ModelFactory;
import com.yahoo.config.model.api.Provisioned;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationLockException;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.OutOfCapacityException;
import com.yahoo.component.Version;
import com.yahoo.config.provision.TransientException;
@@ -73,7 +73,7 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> {
* and assigns to this SettableOptional such that it can be used after this method returns
*/
public List<MODELRESULT> buildModels(ApplicationId applicationId,
- Optional<String> dockerImageRepository,
+ Optional<DockerImage> dockerImageRepository,
Version wantedNodeVespaVersion,
ApplicationPackage applicationPackage,
SettableOptional<AllocatedHosts> allocatedHosts,
@@ -149,7 +149,7 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> {
// versions is the set of versions for one particular major version
private List<MODELRESULT> buildModelVersions(Set<Version> versions,
ApplicationId applicationId,
- Optional<String> wantedDockerImageRepository,
+ Optional<DockerImage> wantedDockerImageRepository,
Version wantedNodeVespaVersion,
ApplicationPackage applicationPackage,
SettableOptional<AllocatedHosts> allocatedHosts,
@@ -244,7 +244,7 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> {
}
protected abstract MODELRESULT buildModelVersion(ModelFactory modelFactory, ApplicationPackage applicationPackage,
- ApplicationId applicationId, Optional<String> dockerImageRepository,
+ ApplicationId applicationId, Optional<DockerImage> dockerImageRepository,
Version wantedNodeVespaVersion, Optional<AllocatedHosts> allocatedHosts,
Instant now);
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
index 6d0403f21c8..82648d40d60 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/PreparedModelsBuilder.java
@@ -18,6 +18,7 @@ import com.yahoo.config.model.application.provider.FilesApplicationPackage;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.component.Version;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.server.application.Application;
import com.yahoo.vespa.config.server.application.ApplicationSet;
@@ -84,7 +85,7 @@ public class PreparedModelsBuilder extends ModelsBuilder<PreparedModelsBuilder.P
protected PreparedModelResult buildModelVersion(ModelFactory modelFactory,
ApplicationPackage applicationPackage,
ApplicationId applicationId,
- Optional<String> wantedDockerImageRepository,
+ Optional<DockerImage> wantedDockerImageRepository,
Version wantedNodeVespaVersion,
Optional<AllocatedHosts> allocatedHosts,
Instant now) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java
index 825ae0d8d92..4946c24efbc 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/LocalSession.java
@@ -8,6 +8,7 @@ import com.yahoo.config.application.api.ApplicationMetaData;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.transaction.AbstractTransaction;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.transaction.Transaction;
@@ -139,7 +140,7 @@ public class LocalSession extends Session implements Comparable<LocalSession> {
zooKeeperClient.writeVespaVersion(version);
}
- public void setDockerImageRepository(Optional<String> dockerImageRepository) {
+ public void setDockerImageRepository(Optional<DockerImage> dockerImageRepository) {
zooKeeperClient.writeDockerImageRepository(dockerImageRepository);
}
@@ -157,7 +158,7 @@ public class LocalSession extends Session implements Comparable<LocalSession> {
public ApplicationId getApplicationId() { return zooKeeperClient.readApplicationId(); }
- public Optional<String> getDockerImageRepository() { return zooKeeperClient.readDockerImageRepository(); }
+ public Optional<DockerImage> getDockerImageRepository() { return zooKeeperClient.readDockerImageRepository(); }
public Version getVespaVersion() { return zooKeeperClient.readVespaVersion(); }
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java
index f7ed801ddbd..df5e3d630ff 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/PrepareParams.java
@@ -6,6 +6,7 @@ import com.yahoo.config.model.api.ContainerEndpoint;
import com.yahoo.config.model.api.EndpointCertificateMetadata;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.TenantName;
import com.yahoo.container.jdisc.HttpRequest;
import com.yahoo.slime.Slime;
@@ -49,14 +50,14 @@ public final class PrepareParams {
private final List<ContainerEndpoint> containerEndpoints;
private final Optional<String> tlsSecretsKeyName;
private final Optional<EndpointCertificateMetadata> endpointCertificateMetadata;
- private final Optional<String> dockerImageRepository;
+ private final Optional<DockerImage> dockerImageRepository;
private final Optional<AthenzDomain> athenzDomain;
private PrepareParams(ApplicationId applicationId, TimeoutBudget timeoutBudget, boolean ignoreValidationErrors,
boolean dryRun, boolean verbose, boolean isBootstrap, Optional<Version> vespaVersion,
List<ContainerEndpoint> containerEndpoints, Optional<String> tlsSecretsKeyName,
Optional<EndpointCertificateMetadata> endpointCertificateMetadata,
- Optional<String> dockerImageRepository, Optional<AthenzDomain> athenzDomain) {
+ Optional<DockerImage> dockerImageRepository, Optional<AthenzDomain> athenzDomain) {
this.timeoutBudget = timeoutBudget;
this.applicationId = applicationId;
this.ignoreValidationErrors = ignoreValidationErrors;
@@ -83,7 +84,7 @@ public final class PrepareParams {
private List<ContainerEndpoint> containerEndpoints = List.of();
private Optional<String> tlsSecretsKeyName = Optional.empty();
private Optional<EndpointCertificateMetadata> endpointCertificateMetadata = Optional.empty();
- private Optional<String> dockerImageRepository = Optional.empty();
+ private Optional<DockerImage> dockerImageRepository = Optional.empty();
private Optional<AthenzDomain> athenzDomain = Optional.empty();
public Builder() { }
@@ -154,6 +155,12 @@ public final class PrepareParams {
public Builder dockerImageRepository(String dockerImageRepository) {
if (dockerImageRepository == null) return this;
+ this.dockerImageRepository = Optional.of(DockerImage.fromString(dockerImageRepository));
+ return this;
+ }
+
+ public Builder dockerImageRepository(DockerImage dockerImageRepository) {
+ if (dockerImageRepository == null) return this;
this.dockerImageRepository = Optional.of(dockerImageRepository);
return this;
}
@@ -249,7 +256,7 @@ public final class PrepareParams {
return endpointCertificateMetadata;
}
- public Optional<String> dockerImageRepository() {
+ public Optional<DockerImage> dockerImageRepository() {
return dockerImageRepository;
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
index 6c77964a58b..535ab8eaf86 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java
@@ -18,6 +18,7 @@ import com.yahoo.config.model.api.EndpointCertificateSecrets;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
@@ -141,7 +142,7 @@ public class SessionPreparer {
final ApplicationId applicationId;
/** The repository part of docker image to be used for this deployment */
- final Optional<String> dockerImageRepository;
+ final Optional<DockerImage> dockerImageRepository;
/** The version of Vespa the application to be prepared specifies for its nodes */
final Version vespaVersion;
@@ -291,7 +292,7 @@ public class SessionPreparer {
private void writeStateToZooKeeper(SessionZooKeeperClient zooKeeperClient,
ApplicationPackage applicationPackage,
ApplicationId applicationId,
- Optional<String> dockerImageRepository,
+ Optional<DockerImage> dockerImageRepository,
Version vespaVersion,
DeployLogger deployLogger,
Map<Version, FileRegistry> fileRegistryMap,
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
index 81777bf3642..64d4be680b8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
@@ -9,6 +9,7 @@ import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.log.LogLevel;
import com.yahoo.path.Path;
@@ -185,14 +186,14 @@ public class SessionZooKeeperClient {
return new Version(configCurator.getData(versionPath()));
}
- public Optional<String> readDockerImageRepository() {
+ public Optional<DockerImage> readDockerImageRepository() {
if ( ! configCurator.exists(dockerImageRepositoryPath())) return Optional.empty();
String dockerImageRepository = configCurator.getData(dockerImageRepositoryPath());
- return dockerImageRepository.isEmpty() ? Optional.empty() : Optional.of(dockerImageRepository);
+ return dockerImageRepository.isEmpty() ? Optional.empty() : Optional.of(DockerImage.fromString(dockerImageRepository));
}
- public void writeDockerImageRepository(Optional<String> dockerImageRepository) {
- dockerImageRepository.ifPresent(repo -> configCurator.putData(dockerImageRepositoryPath(), repo));
+ public void writeDockerImageRepository(Optional<DockerImage> dockerImageRepository) {
+ dockerImageRepository.ifPresent(repo -> configCurator.putData(dockerImageRepositoryPath(), repo.repository()));
}
// in seconds
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
index 03c6bad79a8..20e8524b9b8 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java
@@ -81,7 +81,7 @@ public class ModelContextImplTest {
assertThat(context.properties().endpoints(), equalTo(endpoints));
assertThat(context.properties().isFirstTimeDeployment(), equalTo(false));
- assertEquals(Optional.empty(), context.wantedDockerImageRepository());
+ assertEquals(Optional.empty(), context.wantedDockerImageRepo());
assertEquals(new Version(7), context.modelVespaVersion());
assertEquals(new Version(8), context.wantedNodeVespaVersion());
assertEquals(1.0, context.properties().defaultTermwiseLimit(), 0.0);
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
index 7e700b78bf7..d8534774e33 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java
@@ -15,6 +15,7 @@ import com.yahoo.config.model.provision.Hosts;
import com.yahoo.config.model.provision.InMemoryProvisioner;
import com.yahoo.config.model.test.HostedConfigModelRegistry;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
@@ -101,7 +102,7 @@ public class HostedDeployTest {
assertTrue(deployment.isPresent());
deployment.get().activate();
assertEquals("4.5.6", ((Deployment) deployment.get()).session().getVespaVersion().toString());
- assertEquals(dockerImageRepository, ((Deployment) deployment.get()).session().getDockerImageRepository().get());
+ assertEquals(DockerImage.fromString(dockerImageRepository), ((Deployment) deployment.get()).session().getDockerImageRepository().get());
assertEquals("foo", ((Deployment) deployment.get()).session().getAthenzDomain().get().value());
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
index 5b0bb7885d8..89a901ad051 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
@@ -9,6 +9,7 @@ import com.yahoo.config.model.application.provider.FilesApplicationPackage;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.HostFilter;
import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.ProvisionLogger;
@@ -101,7 +102,7 @@ public class SessionHandlerTest {
private ConfigChangeActions actions = new ConfigChangeActions();
private long createTime = System.currentTimeMillis() / 1000;
private ApplicationId applicationId;
- private Optional<String> dockerImageRepository;
+ private Optional<DockerImage> dockerImageRepository;
public MockSession(long id, ApplicationPackage app) {
this(id, app, new InMemoryFlagSource());
@@ -174,7 +175,7 @@ public class SessionHandlerTest {
public void delete(NestedTransaction transaction) { }
@Override
- public Optional<String> getDockerImageRepository() {
+ public Optional<DockerImage> getDockerImageRepository() {
return dockerImageRepository;
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
index 11cbdb03ccf..94276b30f42 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionPrepareHandlerTest.java
@@ -9,6 +9,7 @@ import com.yahoo.config.model.api.ServiceInfo;
import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationLockException;
+import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.OutOfCapacityException;
import com.yahoo.config.provision.TenantName;
import com.yahoo.container.jdisc.HttpResponse;
@@ -336,7 +337,7 @@ public class SessionPrepareHandlerTest extends SessionHandlerTest {
localRepo.addSession(session);
String dockerImageRepository = "https://foo.bar.com:4443/baz";
request(HttpRequest.Method.PUT, 1L, Map.of("dockerImageRepository", dockerImageRepository));
- assertEquals(dockerImageRepository, localRepo.getSession(1).getDockerImageRepository().get());
+ assertEquals(DockerImage.fromString(dockerImageRepository), localRepo.getSession(1).getDockerImageRepository().get());
}
private Slime getData(HttpResponse response) throws IOException {