summaryrefslogtreecommitdiffstats
path: root/config-provisioning/src
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2019-03-13 15:54:09 +0100
committerValerij Fredriksen <valerijf@verizonmedia.com>2019-03-13 15:54:09 +0100
commite7e5610b092a1467d69d1dd66f17ca91149f364b (patch)
tree256d30b1b489da70b80c4c978587b1141b714888 /config-provisioning/src
parent015d21fa026f18fccff897b8681157861909e7f5 (diff)
Fix DockerImage
Diffstat (limited to 'config-provisioning/src')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/DockerImage.java64
1 files changed, 53 insertions, 11 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/DockerImage.java b/config-provisioning/src/main/java/com/yahoo/config/provision/DockerImage.java
index c0e5e74f110..bbf65c1cd47 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/DockerImage.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/DockerImage.java
@@ -3,6 +3,9 @@ package com.yahoo.config.provision;
import com.yahoo.component.Version;
+import java.util.Objects;
+import java.util.Optional;
+
/**
* A Docker image.
*
@@ -10,28 +13,67 @@ import com.yahoo.component.Version;
*/
public class DockerImage {
- private final String name;
+ public static final DockerImage EMPTY = new DockerImage("", Optional.empty());
+
+ private final String repository;
+ private final Optional<String> tag;
- public DockerImage(String name) {
- this.name = name;
+ private DockerImage(String repository, Optional<String> tag) {
+ this.repository = Objects.requireNonNull(repository, "repository must be non-null");
+ this.tag = Objects.requireNonNull(tag, "tag must be non-null");
}
- /** Get Docker image tag as version */
+ public String repository() {
+ return repository;
+ }
+
+ public Optional<String> tag() {
+ return tag;
+ }
+
+ /** Returns the tag as Version, {@link Version#emptyVersion} if tag is not set */
public Version tagAsVersion() {
- String[] parts = asString().split(":");
- if (parts.length < 2) {
- throw new IllegalArgumentException("Could not parse tag from Docker image '" + asString() + "'");
- }
- return Version.fromString(parts[parts.length - 1]);
+ return tag.map(Version::new).orElse(Version.emptyVersion);
}
/** Returns the Docker image tagged with the given version */
public DockerImage withTag(Version version) {
- return new DockerImage(name + ":" + version.toFullString());
+ return new DockerImage(repository, Optional.of(version.toFullString()));
}
public String asString() {
- return name;
+ return repository + tag.map(t -> ':' + t).orElse("");
+ }
+
+ @Override
+ public String toString() {
+ return asString();
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ DockerImage that = (DockerImage) o;
+ return repository.equals(that.repository) &&
+ tag.equals(that.tag);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(repository, tag);
+ }
+
+ public static DockerImage fromString(String name) {
+ if (name.isEmpty()) return EMPTY;
+
+ int n = name.lastIndexOf(':');
+ if (n < 0) return new DockerImage(name, Optional.empty());
+
+ String tag = name.substring(n + 1);
+ if (!tag.contains("/")) {
+ return new DockerImage(name.substring(0, n), Optional.of(tag));
+ }
+ return new DockerImage(name, Optional.empty());
+ }
}