diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-10-15 15:54:38 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-10-15 15:54:38 +0200 |
commit | cbefb58c71bc888061d1586e70bf01f1a432a756 (patch) | |
tree | 8e5f0d5d55400161a73f8f546a0c83fa204bc98e /config-model/src/main/java/com | |
parent | c51b015a8dd8f9fc8f6c6f65c4ceab4090831df3 (diff) |
Allow deploying self-hosted applications to dev
Diffstat (limited to 'config-model/src/main/java/com')
4 files changed, 19 insertions, 12 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java b/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java index dea2095d8e4..ec1038c67db 100644 --- a/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java +++ b/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java @@ -77,6 +77,10 @@ public class AdminModel extends ConfigModel { @Override public void doBuild(AdminModel model, Element adminElement, ConfigModelContext modelContext) { + if (modelContext.getDeployState().isHosted()) { // admin v2 is used on hosted: Build a default V4 instead + new BuilderV4().doBuild(model, adminElement, modelContext); + return; + } AbstractConfigProducer parent = modelContext.getParentProducer(); ModelContext.Properties properties = modelContext.getDeployState().getProperties(); DomAdminV2Builder domBuilder = new DomAdminV2Builder(modelContext.getApplicationType(), diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java index b0a74c08b4e..86c72221cab 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java @@ -63,13 +63,13 @@ public class NodesSpecification { private NodesSpecification(boolean dedicated, boolean canFail, Version version, ModelElement nodesElement) { this(dedicated, - nodesElement.requiredIntegerAttribute("count"), + nodesElement.integerAttribute("count", 1), nodesElement.integerAttribute("groups", 1), version, nodesElement.booleanAttribute("required", false), canFail, nodesElement.booleanAttribute("exclusive", false), - getFlavor(nodesElement), + getResources(nodesElement), Optional.ofNullable(nodesElement.stringAttribute("docker-image"))); } @@ -162,7 +162,7 @@ public class NodesSpecification { return hostSystem.allocateHosts(cluster, Capacity.fromCount(count, resources, required, canFail), groups, logger); } - private static Optional<NodeResources> getFlavor(ModelElement nodesElement) { + private static Optional<NodeResources> getResources(ModelElement nodesElement) { ModelElement resources = nodesElement.child("resources"); if (resources != null) { return Optional.of(new NodeResources(resources.requiredDoubleAttribute("vcpu"), 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 efc566f2dec..cc78b92c260 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 @@ -499,8 +499,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { } void extractJvmFromLegacyNodesTag(List<ApplicationContainer> nodes, ApplicationContainerCluster cluster, - Element nodesElement, ConfigModelContext context) - { + Element nodesElement, ConfigModelContext context) { applyNodesTagJvmArgs(nodes, getJvmOptions(cluster, nodesElement, context.getDeployLogger())); if (!cluster.getJvmGCOptions().isPresent()) { @@ -512,9 +511,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { applyMemoryPercentage(cluster, nodesElement.getAttribute(VespaDomBuilder.Allocated_MEMORY_ATTRIB_NAME)); } + void extractJvmTag(List<ApplicationContainer> nodes, ApplicationContainerCluster cluster, - Element jvmElement, ConfigModelContext context) - { + Element jvmElement, ConfigModelContext context) { applyNodesTagJvmArgs(nodes, jvmElement.getAttribute(VespaDomBuilder.OPTIONS)); applyMemoryPercentage(cluster, jvmElement.getAttribute(VespaDomBuilder.Allocated_MEMORY_ATTRIB_NAME)); String jvmGCOptions = jvmElement.hasAttribute(VespaDomBuilder.GC_OPTIONS) @@ -522,9 +521,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { : null; cluster.setJvmGCOptions(buildJvmGCOptions(context.getDeployState().zone(), jvmGCOptions, context.getDeployState().isHosted())); } + private void addNodesFromXml(ApplicationContainerCluster cluster, Element containerElement, ConfigModelContext context) { Element nodesElement = XML.getChild(containerElement, "nodes"); - Element rotationsElement = XML.getChild(containerElement, "rotations"); if (nodesElement == null) { // default single node on localhost ApplicationContainer node = new ApplicationContainer(cluster, "container.0", 0, cluster.isHostedVespa()); HostResource host = allocateSingleNodeHost(cluster, log, containerElement, context); @@ -564,12 +563,14 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { } private List<ApplicationContainer> createNodes(ApplicationContainerCluster cluster, Element nodesElement, ConfigModelContext context) { - if (nodesElement.hasAttribute("count")) // regular, hosted node spec - return createNodesFromNodeCount(cluster, nodesElement, context); - else if (nodesElement.hasAttribute("type")) // internal use for hosted system infrastructure nodes + if (nodesElement.hasAttribute("type")) // internal use for hosted system infrastructure nodes return createNodesFromNodeType(cluster, nodesElement, context); else if (nodesElement.hasAttribute("of")) // hosted node spec referencing a content cluster return createNodesFromContentServiceReference(cluster, nodesElement, context); + else if (nodesElement.hasAttribute("count")) // regular, hosted node spec + return createNodesFromNodeCount(cluster, nodesElement, context); + else if (cluster.isHostedVespa() && cluster.getZone().environment().isManuallyDeployed()) // default to 1 in manual zones + return createNodesFromNodeCount(cluster, nodesElement, context); else // the non-hosted option return createNodesFromNodeList(context.getDeployState(), cluster, nodesElement); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java index 4d1252a2618..228d972b839 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java @@ -401,9 +401,11 @@ public class StorageGroup { Optional<NodesSpecification> nodeRequirement; if (nodesElement.isPresent() && nodesElement.get().stringAttribute("count") != null ) // request these nodes nodeRequirement = Optional.of(NodesSpecification.from(nodesElement.get(), context)); + else if (nodesElement.isPresent() && context.getDeployState().isHosted() && context.getDeployState().zone().environment().isManuallyDeployed() ) // default to 1 node + nodeRequirement = Optional.of(NodesSpecification.from(nodesElement.get(), context)); else if (! nodesElement.isPresent() && subGroups.isEmpty() && context.getDeployState().isHosted()) // request one node nodeRequirement = Optional.of(NodesSpecification.nonDedicated(1, context)); - else // Nodes or groups explicitly listed, and/opr not hosted - resolve in GroupBuilder + else // Nodes or groups explicitly listed - resolve in GroupBuilder nodeRequirement = Optional.empty(); return new GroupBuilder(group, subGroups, explicitNodes, nodeRequirement, context.getDeployLogger()); |