diff options
3 files changed, 42 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java index 3298b627b19..6b8428a07ac 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java @@ -9,6 +9,7 @@ import com.yahoo.config.model.api.Quota; import com.yahoo.config.model.api.TenantSecretStore; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.AthenzDomain; +import com.yahoo.config.provision.CloudAccount; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.Zone; @@ -80,6 +81,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea private int heapSizePercentage = ApplicationContainerCluster.defaultHeapSizePercentageOfTotalNodeMemory; private Architecture adminClusterNodeResourcesArchitecture = Architecture.getDefault(); private boolean useRestrictedDataPlaneBindings = false; + private Optional<CloudAccount> cloudAccount = Optional.empty(); @Override public ModelContext.FeatureFlags featureFlags() { return this; } @Override public boolean multitenant() { return multitenant; } @@ -134,6 +136,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea @Override public String queryDispatchPolicy() { return queryDispatchPolicy; } @Override public boolean useTwoPhaseDocumentGc() { return useTwoPhaseDocumentGc; } @Override public boolean useRestrictedDataPlaneBindings() { return useRestrictedDataPlaneBindings; } + @Override public Optional<CloudAccount> cloudAccount() { return cloudAccount; } public TestProperties sharedStringRepoNoReclaim(boolean sharedStringRepoNoReclaim) { this.sharedStringRepoNoReclaim = sharedStringRepoNoReclaim; @@ -358,6 +361,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea return this; } + public TestProperties setCloudAccount(CloudAccount cloudAccount) { + this.cloudAccount = Optional.ofNullable(cloudAccount); + return this; + } + public static class Spec implements ConfigServerSpec { private final String hostName; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index 0219f8a5275..5dc937fe585 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -795,9 +795,12 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { int nodeCount = deployState.zone().environment().isProduction() ? 2 : 1; deployState.getDeployLogger().logApplicationPackage(Level.INFO, "Using " + nodeCount + " nodes in " + cluster); - Capacity capacity = Capacity.from(new ClusterResources(nodeCount, 1, NodeResources.unspecified()), + ClusterResources resources = new ClusterResources(nodeCount, 1, NodeResources.unspecified()); + Capacity capacity = Capacity.from(resources, + resources, false, - !deployState.getProperties().isBootstrap()); + !deployState.getProperties().isBootstrap(), + context.getDeployState().getProperties().cloudAccount()); var hosts = hostSystem.allocateHosts(clusterSpec, capacity, log); return createNodesFromHosts(hosts, cluster, context.getDeployState()); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java index e172e68c0ee..251c18dbdd6 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilderTest.java @@ -17,6 +17,7 @@ import com.yahoo.config.model.provision.InMemoryProvisioner; import com.yahoo.config.model.provision.SingleNodeProvisioner; import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.model.test.MockRoot; +import com.yahoo.config.provision.CloudAccount; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.RegionName; @@ -35,7 +36,6 @@ import com.yahoo.container.usability.BindingsOverviewHandler; import com.yahoo.net.HostName; import com.yahoo.prelude.cluster.QrMonitorConfig; import com.yahoo.search.config.QrStartConfig; -import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.AbstractService; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.container.ApplicationContainer; @@ -67,7 +67,13 @@ import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * Tests for "core functionality" of the container model, e.g. ports, or the 'components' and 'bundles' configs. @@ -423,6 +429,27 @@ public class ContainerModelBuilderTest extends ContainerModelBuilderTestBase { } @Test + void cloud_account_without_nodes_tag() throws Exception { + String servicesXml = "<container id='default' version='1.0' />"; + ApplicationPackage applicationPackage = new MockApplicationPackage.Builder().withServices(servicesXml).build(); + CloudAccount cloudAccount = CloudAccount.from("000000000000"); + InMemoryProvisioner provisioner = new InMemoryProvisioner(true, false, "host1.yahoo.com", "host2.yahoo.com"); + VespaModel model = new VespaModel(new NullConfigModelRegistry(), new DeployState.Builder() + .modelHostProvisioner(provisioner) + .provisioned(provisioner.startProvisionedRecording()) + .applicationPackage(applicationPackage) + .properties(new TestProperties().setMultitenant(true) + .setHostedVespa(true) + .setCloudAccount(cloudAccount)) + .build()); + assertEquals(2, model.hostSystem().getHosts().size()); + assertEquals(List.of(cloudAccount), model.provisioned().all().values() + .stream() + .map(capacity -> capacity.cloudAccount().get()) + .collect(Collectors.toList())); + } + + @Test void renderers_named_JsonRenderer_are_not_allowed() { assertThrows(IllegalArgumentException.class, () -> { createModel(root, generateContainerElementWithRenderer("JsonRenderer")); |