aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2023-09-26 09:41:12 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2023-09-26 09:41:30 +0200
commit55a1a5835cf182e70bf3a40404ae9498629e40e1 (patch)
tree8fb4d6536402cd04598e84e6345d8ce0cd363ba8 /controller-server
parent7ebb018355d1186b084bff1a2b89692b185aafe7 (diff)
Expose tenant cloud accounts in /application/v4 tenant response
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java9
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-cloud.json35
3 files changed, 49 insertions, 2 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index 46c81fc073f..16d862a66ef 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -2915,6 +2915,15 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
}
}
tenantMetaDataToSlime(tenant, applications, object.setObject("metaData"));
+
+ if (!tenant.cloudAccounts().isEmpty()) {
+ Cursor cloudAccounts = object.setArray("cloudAccounts");
+ tenant.cloudAccounts().forEach(accountInfo -> {
+ Cursor accountObject = cloudAccounts.addObject();
+ accountObject.setString("cloudAccount", accountInfo.cloudAccount().value());
+ accountObject.setString("templateVersion", accountInfo.templateVersion().toFullString());
+ });
+ }
}
private void toSlime(ArchiveAccess archiveAccess, Cursor object) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
index 4eb6e080737..3b74fea2b9c 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
@@ -5,6 +5,7 @@ import ai.vespa.hosted.api.MultiPartStreamer;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
+import com.yahoo.config.provision.CloudAccount;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.restapi.RestApiException;
@@ -26,12 +27,14 @@ import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerCloudTest;
import com.yahoo.vespa.hosted.controller.security.Auth0Credentials;
import com.yahoo.vespa.hosted.controller.security.CloudTenantSpec;
import com.yahoo.vespa.hosted.controller.security.Credentials;
+import com.yahoo.vespa.hosted.controller.tenant.CloudAccountInfo;
import com.yahoo.vespa.hosted.controller.tenant.CloudTenant;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.Collections;
+import java.util.List;
import java.util.Optional;
import java.util.Set;
@@ -369,10 +372,10 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest {
new DeploymentTester(wrapped).newDeploymentContext(ApplicationId.from(tenantName, applicationName, InstanceName.defaultName()))
.submit()
.deploy();
+ tester.controller().tenants().updateCloudAccounts(tenantName, List.of(new CloudAccountInfo(CloudAccount.from("aws:123456789012"), new Version(1, 2, 4))));
tester.assertResponse(request("/application/v4/tenant/scoober", GET).roles(Role.reader(tenantName)),
- (response) -> assertFalse(response.getBodyAsString().contains("archiveAccessRole")),
- 200);
+ new File("tenant-cloud.json"));
tester.assertResponse(request("/application/v4/tenant/scoober/archive-access/aws", PUT)
.data("{\"role\":\"arn:aws:iam::123456789012:role/my-role\"}").roles(Role.administrator(tenantName)),
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-cloud.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-cloud.json
new file mode 100644
index 00000000000..c7258ab3aa6
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/tenant-cloud.json
@@ -0,0 +1,35 @@
+{
+ "tenant": "scoober",
+ "type": "CLOUD",
+ "creator": "developer@scoober",
+ "pemDeveloperKeys": [],
+ "secretStores": [],
+ "integrations": {
+ "aws": {
+ "tenantRole": "scoober-tenant-role",
+ "accounts": []
+ }
+ },
+ "quota": {
+ "budgetUsed": 1.304
+ },
+ "archiveAccess": {},
+ "applications": [
+ {
+ "tenant": "scoober",
+ "application": "albums",
+ "instance": "default",
+ "url": "http://localhost:8080/application/v4/tenant/scoober/application/albums/instance/default"
+ }
+ ],
+ "metaData": {
+ "createdAtMillis": 1600000000000,
+ "lastSubmissionToProdMillis": 1000
+ },
+ "cloudAccounts": [
+ {
+ "cloudAccount": "aws:123456789012",
+ "templateVersion": "1.2.4"
+ }
+ ]
+}