aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-09-08 13:18:29 +0200
committerHarald Musum <musum@yahooinc.com>2022-09-08 13:18:29 +0200
commite48450133bfef7af532614fa21daad77f88a4481 (patch)
treed0498a20180bb90dc64e9d0484840bd1cf2f6a5c /config-model/src
parent5f19d58210dee17bf2c8161b6fbea66163cd79d6 (diff)
Allow no adminserver element in services.xml
Create single config server on container node if not given
Diffstat (limited to 'config-model/src')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java13
-rw-r--r--config-model/src/main/resources/schema/admin.rnc2
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java11
3 files changed, 21 insertions, 5 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java
index e081848d01c..ac5633a1461 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java
@@ -17,7 +17,6 @@ import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainerC
import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder.DomConfigProducerBuilder;
import com.yahoo.vespa.model.container.Container;
import org.w3c.dom.Element;
-
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -69,7 +68,8 @@ public class DomAdminV2Builder extends DomAdminBuilderBase {
private Logserver parseLogserver(DeployState deployState, Admin admin, Element adminE) {
Element logserverE = XML.getChild(adminE, "logserver");
if (logserverE == null) {
- logserverE = XML.getChild(adminE, "adminserver");
+ var adminserverE = XML.getChild(adminE, "adminserver");
+ logserverE = adminserverE != null ? adminserverE : adminE;
}
return new LogserverBuilder().build(deployState, admin, logserverE);
}
@@ -104,13 +104,18 @@ public class DomAdminV2Builder extends DomAdminBuilderBase {
}
private List<Configserver> getConfigServers(DeployState deployState, AbstractConfigProducer<?> parent, Element adminE) {
- SimpleConfigProducer<?> configServers = new SimpleConfigProducer<>(parent, "configservers");
Element configserversE = XML.getChild(adminE, "configservers");
if (configserversE == null) {
Element adminserver = XML.getChild(adminE, "adminserver");
- return List.of(new ConfigserverBuilder(0, configServerSpecs).build(deployState, configServers, adminserver));
+ if (adminserver == null) {
+ return createSingleConfigServer(deployState, parent);
+ } else {
+ SimpleConfigProducer<?> configServers = new SimpleConfigProducer<>(parent, "configservers");
+ return List.of(new ConfigserverBuilder(0, configServerSpecs).build(deployState, configServers, adminserver));
+ }
}
else {
+ SimpleConfigProducer<?> configServers = new SimpleConfigProducer<>(parent, "configservers");
List<Configserver> configservers = new ArrayList<>();
int i = 0;
for (Element configserverE : XML.getChildren(configserversE, "configserver"))
diff --git a/config-model/src/main/resources/schema/admin.rnc b/config-model/src/main/resources/schema/admin.rnc
index 4e916e0901f..6f4c90159d8 100644
--- a/config-model/src/main/resources/schema/admin.rnc
+++ b/config-model/src/main/resources/schema/admin.rnc
@@ -4,7 +4,7 @@ Admin = AdminV2 | AdminV3 | AdminV4
AdminV2 =
element admin {
attribute version { "2.0" } &
- element adminserver { service.attlist } &
+ element adminserver { service.attlist }? &
GenericConfig* &
LogServer? &
ConfigServers? &
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java
index 8a2a23a795d..a38f0ebe476 100755
--- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2BuilderTest.java
@@ -101,6 +101,11 @@ public class DomAdminV2BuilderTest extends DomBuilderTest {
"</admin>").getDocumentElement();
}
+ private Element servicesAdminNoAdminServerOrConfigServer() {
+ return XML.getDocument("<admin version=\"2.0\">" +
+ "</admin>").getDocumentElement();
+ }
+
@Test
void multitenant() {
List<ConfigServerSpec> configServerSpecs = Arrays.asList(
@@ -182,6 +187,12 @@ public class DomAdminV2BuilderTest extends DomBuilderTest {
assertEquals("foobar", config.logserver().host());
}
+ @Test
+ void noAdminServerOrConfigServer() {
+ Admin admin = buildAdmin(servicesAdminNoAdminServerOrConfigServer());
+ assertEquals(1, admin.getConfigservers().size());
+ }
+
private Admin buildAdmin(Element xml) {
return buildAdmin(xml, false, new ArrayList<>());
}