diff options
author | Morten Tokle <mortent@yahooinc.com> | 2022-05-24 21:11:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-24 21:11:00 +0200 |
commit | 52809db7dfd40b26b600f001ea014460ea9f45d9 (patch) | |
tree | 438eb2a2fc5932b6b86c62c5a2b3291bc66ad47a /configserver | |
parent | 076aa66db97f0eec04596f16e210643ff7ae3772 (diff) | |
parent | 207dd0f9e1cc54781928d2cb0f4d6b57780aab1a (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')
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) |