diff options
author | Harald Musum <musum@verizonmedia.com> | 2022-09-08 14:30:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-08 14:30:39 +0200 |
commit | 82ca9faf4d2b25d71fb1df0dff834ec7be5f078e (patch) | |
tree | 1eab753de96d0a93a9ce617048598e0ece8a3367 | |
parent | 3b854939ee4290a84db3af0872e83018420fe846 (diff) | |
parent | e48450133bfef7af532614fa21daad77f88a4481 (diff) |
Merge pull request #23982 from vespa-engine/hmusum/allow-no-adminserver-element
Allow no adminserver element in services.xml [run-systemtest]
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<>()); } |