summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2023-02-27 13:14:29 +0100
committerValerij Fredriksen <valerijf@yahooinc.com>2023-02-27 13:14:29 +0100
commit3bea9a0492ea1d37a1a501facbb6bb0b3e0d7c78 (patch)
tree9aff25c6fbca4a0920213533cbf937f8f58c1818 /controller-api
parent311f0b4a454dc7d56db50a2921ffc9376bab92b2 (diff)
Extend controller NR client to allow updating cloud account archive URI
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/archive/ArchiveUriUpdate.java43
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ArchiveUris.java15
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java18
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ArchiveList.java3
4 files changed, 66 insertions, 13 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/archive/ArchiveUriUpdate.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/archive/ArchiveUriUpdate.java
new file mode 100644
index 00000000000..e6dec99b84c
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/archive/ArchiveUriUpdate.java
@@ -0,0 +1,43 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.archive;
+
+import com.yahoo.config.provision.CloudAccount;
+import com.yahoo.config.provision.TenantName;
+
+import java.net.URI;
+import java.util.Optional;
+
+/**
+ * Represents an operation to update or unset the archive URI value for a given tenant or cloud account.
+ *
+ * @author freva
+ */
+public class ArchiveUriUpdate {
+ private final Optional<TenantName> tenantName;
+ private final Optional<CloudAccount> cloudAccount;
+ private final Optional<URI> archiveUri;
+
+ private ArchiveUriUpdate(Optional<TenantName> tenantName, Optional<CloudAccount> cloudAccount, Optional<URI> archiveUri) {
+ this.tenantName = tenantName;
+ this.cloudAccount = cloudAccount;
+ this.archiveUri = archiveUri;
+ }
+
+ public Optional<TenantName> tenantName() { return tenantName; }
+ public Optional<CloudAccount> cloudAccount() { return cloudAccount; }
+ public Optional<URI> archiveUri() { return archiveUri; }
+
+ public static ArchiveUriUpdate setArchiveUriFor(TenantName tenantName, URI archiveUri) {
+ return new ArchiveUriUpdate(Optional.of(tenantName), Optional.empty(), Optional.of(archiveUri));
+ }
+ public static ArchiveUriUpdate deleteArchiveUriFor(TenantName tenantName) {
+ return new ArchiveUriUpdate(Optional.of(tenantName), Optional.empty(), Optional.empty());
+ }
+
+ public static ArchiveUriUpdate setArchiveUriFor(CloudAccount cloudAccount, URI archiveUri) {
+ return new ArchiveUriUpdate(Optional.empty(), Optional.of(cloudAccount), Optional.of(archiveUri));
+ }
+ public static ArchiveUriUpdate deleteArchiveUriFor(CloudAccount cloudAccount) {
+ return new ArchiveUriUpdate(Optional.empty(), Optional.of(cloudAccount), Optional.empty());
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ArchiveUris.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ArchiveUris.java
new file mode 100644
index 00000000000..a0f6955b59f
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/ArchiveUris.java
@@ -0,0 +1,15 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.configserver;
+
+import com.yahoo.config.provision.CloudAccount;
+import com.yahoo.config.provision.TenantName;
+
+import java.net.URI;
+import java.util.Map;
+
+/**
+ * @author freva
+ */
+public record ArchiveUris(Map<TenantName, URI> tenantArchiveUris, Map<CloudAccount, URI> accountArchiveUris) {
+ public static final ArchiveUris EMPTY = new ArchiveUris(Map.of(), Map.of());
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
index 1768de8d012..4c5a67626ea 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
@@ -5,15 +5,10 @@ import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.api.integration.archive.ArchiveUriUpdate;
import com.yahoo.vespa.hosted.controller.api.integration.noderepository.ApplicationPatch;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import java.net.URI;
import java.util.List;
import java.util.Map;
@@ -48,14 +43,11 @@ public interface NodeRepository {
/** Get node statistics such as cost and load from given zone */
NodeRepoStats getStats(ZoneId zone);
- /** Get all archive URLs found in zone */
- Map<TenantName, URI> getArchiveUris(ZoneId zone);
+ /** Get all archive URIs found in zone */
+ ArchiveUris getArchiveUris(ZoneId zone);
- /** Update archive URL for given tenant */
- void setArchiveUri(ZoneId zone, TenantName tenantName, URI archiveUri);
-
- /** Remove archive URL for given tenant */
- void removeArchiveUri(ZoneId zone, TenantName tenantName);
+ /** Update some archive URI in the given zone */
+ void updateArchiveUri(ZoneId zone, ArchiveUriUpdate archiveUriUpdate);
/** Upgrade all nodes of given type to a new version */
void upgrade(ZoneId zone, NodeType type, Version version, boolean allowDowngrade);
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ArchiveList.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ArchiveList.java
index 274d07bfc3b..172523eb261 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ArchiveList.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ArchiveList.java
@@ -16,6 +16,9 @@ public class ArchiveList {
@JsonProperty("tenant")
public String tenant;
+ @JsonProperty("account")
+ public String account;
+
@JsonProperty("uri")
public String uri;
}