summaryrefslogtreecommitdiffstats
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
parent015d21fa026f18fccff897b8681157861909e7f5 (diff)
Fix DockerImage
-rw-r--r--config-provisioning/abi-spec.json13
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/DockerImage.java64
2 files changed, 63 insertions, 14 deletions
diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json
index af61fb46e50..80680a4d095 100644
--- a/config-provisioning/abi-spec.json
+++ b/config-provisioning/abi-spec.json
@@ -309,12 +309,19 @@
"public"
],
"methods": [
- "public void <init>(java.lang.String)",
+ "public java.lang.String repository()",
+ "public java.util.Optional tag()",
"public com.yahoo.component.Version tagAsVersion()",
"public com.yahoo.config.provision.DockerImage withTag(com.yahoo.component.Version)",
- "public java.lang.String asString()"
+ "public java.lang.String asString()",
+ "public java.lang.String toString()",
+ "public boolean equals(java.lang.Object)",
+ "public int hashCode()",
+ "public static com.yahoo.config.provision.DockerImage fromString(java.lang.String)"
],
- "fields": []
+ "fields": [
+ "public static final com.yahoo.config.provision.DockerImage EMPTY"
+ ]
},
"com.yahoo.config.provision.Environment": {
"superClass": "java.lang.Enum",
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());
+ }
}