aboutsummaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorMorten Tokle <mortent@yahooinc.com>2022-05-24 21:11:00 +0200
committerGitHub <noreply@github.com>2022-05-24 21:11:00 +0200
commit52809db7dfd40b26b600f001ea014460ea9f45d9 (patch)
tree438eb2a2fc5932b6b86c62c5a2b3291bc66ad47a /configserver
parent076aa66db97f0eec04596f16e210643ff7ae3772 (diff)
parent207dd0f9e1cc54781928d2cb0f4d6b57780aab1a (diff)
Merge pull request #22741 from vespa-engine/mpolden/preserve-cloud-account
Preserve cloud account from active session on internal redeployment
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java9
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java4
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/HostedDeployTest.java16
3 files changed, 27 insertions, 2 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
index bb7dedac6d1..881d3de4eaa 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
@@ -10,6 +10,7 @@ import com.yahoo.config.model.api.TenantSecretStore;
import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.AthenzDomain;
+import com.yahoo.config.provision.CloudAccount;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.TenantName;
import com.yahoo.path.Path;
@@ -142,6 +143,10 @@ public abstract class Session implements Comparable<Session> {
sessionZooKeeperClient.writeOperatorCertificates(operatorCertificates);
}
+ public void setCloudAccount(Optional<CloudAccount> cloudAccount) {
+ sessionZooKeeperClient.writeCloudAccount(cloudAccount);
+ }
+
/** Returns application id read from ZooKeeper. Will throw RuntimeException if not found */
public ApplicationId getApplicationId() {
return sessionZooKeeperClient.readApplicationId()
@@ -181,6 +186,10 @@ public abstract class Session implements Comparable<Session> {
return sessionZooKeeperClient.readOperatorCertificates();
}
+ public Optional<CloudAccount> getCloudAccount() {
+ return sessionZooKeeperClient.readCloudAccount();
+ }
+
private Transaction createSetStatusTransaction(Status status) {
return sessionZooKeeperClient.createWriteStatusTransaction(status);
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
index a5305f8f886..f572f241ce0 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
@@ -12,13 +12,11 @@ import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.application.provider.DeployData;
import com.yahoo.config.model.application.provider.FilesApplicationPackage;
-import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.secretstore.SecretStore;
import com.yahoo.io.IOUtils;
-import com.yahoo.lang.SettableOptional;
import com.yahoo.path.Path;
import com.yahoo.transaction.AbstractTransaction;
import com.yahoo.transaction.NestedTransaction;
@@ -52,6 +50,7 @@ import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.zookeeper.KeeperException;
+
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
@@ -279,6 +278,7 @@ public class SessionRepository {
session.setAthenzDomain(existingSession.getAthenzDomain());
session.setTenantSecretStores(existingSession.getTenantSecretStores());
session.setOperatorCertificates(existingSession.getOperatorCertificates());
+ session.setCloudAccount(existingSession.getCloudAccount());
return session;
}
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 800cf7bad60..c58b550d660 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.CloudAccount;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.DockerImage;
import com.yahoo.config.provision.Environment;
@@ -453,6 +454,21 @@ public class HostedDeployTest {
tester.tenant().getApplicationRepo().database().readReindexingStatus(tester.applicationId()));
}
+ @Test
+ public void testRedeployWithCloudAccount() {
+ CloudAccount cloudAccount = new CloudAccount("012345678912");
+ DeployTester tester = new DeployTester.Builder(temporaryFolder)
+ .modelFactory(createHostedModelFactory(Version.fromString("4.5.6"), Clock.systemUTC()))
+ .build();
+ tester.deployApp("src/test/apps/hosted/", new PrepareParams.Builder()
+ .vespaVersion("4.5.6")
+ .cloudAccount(cloudAccount));
+ Optional<com.yahoo.config.provision.Deployment> deployment = tester.redeployFromLocalActive(tester.applicationId());
+ assertTrue(deployment.isPresent());
+ deployment.get().activate();
+ assertEquals(cloudAccount, ((Deployment) deployment.get()).session().getCloudAccount().get());
+ }
+
/** Create the given number of hosts using the supplied versions--the last version is repeated as needed. */
private List<Host> createHosts(int count, String ... versions) {
return IntStream.rangeClosed(1, count)