diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-17 13:18:26 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-17 13:18:26 +0100 |
commit | bf76355d3cc26f9e99013a30369cef5537ae72b0 (patch) | |
tree | b6a9ba552a0f095e38f6e127ccb2ed40cc27ad40 | |
parent | 6f695e3201aaa24a0672e81a24fea478479b89a4 (diff) |
Allow requiring ports illegal for tenants
4 files changed, 11 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java index bc207d1f36f..400ddf80cf9 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/Http.java @@ -97,7 +97,7 @@ public class Http extends AbstractConfigProducer<AbstractConfigProducer<?>> impl if (bindings.isEmpty()) return; if (filterChains == null) - throw new IllegalArgumentException("Null FilterChains is not allowed when there are filter bindings!"); + throw new IllegalArgumentException("Null FilterChains are not allowed when there are filter bindings"); ComponentRegistry<ChainedComponent<?>> filters = filterChains.componentsRegistry(); ComponentRegistry<Chain<Filter>> chains = filterChains.allChains(); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java index e04604a6ca3..38915b97a61 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/HttpBuilder.java @@ -10,6 +10,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.text.XML; import com.yahoo.vespa.defaults.Defaults; +import com.yahoo.vespa.model.builder.xml.dom.ModelElement; import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.container.Container; import com.yahoo.vespa.model.container.ApplicationContainerCluster; @@ -127,19 +128,18 @@ public class HttpBuilder extends VespaDomBuilder.DomConfigProducerBuilder<Http> http.setHttpServer(new JettyHttpServerBuilder().build(deployState, ancestor, spec)); } - static int readPort(Element spec, boolean isHosted) { - String portString = spec.getAttribute("port"); - if (portString == null || portString.isEmpty()) + static int readPort(ModelElement spec, boolean isHosted) { + Integer port = spec.integerAttribute("port"); + if (port == null) return Defaults.getDefaults().vespaWebServicePort(); - int port = Integer.parseInt(portString); if (port < 0) - throw new IllegalArgumentException(String.format("Invalid port %d.", port)); + throw new IllegalArgumentException("Invalid port " + port); int legalPortInHostedVespa = Container.BASEPORT; - if (isHosted && port != legalPortInHostedVespa) + if (isHosted && port != legalPortInHostedVespa && ! spec.booleanAttribute("required", false)) throw new IllegalArgumentException("Illegal port " + port + " in http server '" + - spec.getAttribute("id") + "'" + + spec.stringAttribute("id") + "'" + ": Port must be set to " + legalPortInHostedVespa); return port; } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/JettyConnectorBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/JettyConnectorBuilder.java index 052cb289655..99da1dbbfc2 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/JettyConnectorBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/http/xml/JettyConnectorBuilder.java @@ -5,6 +5,7 @@ import com.yahoo.config.model.builder.xml.XmlHelper; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.text.XML; +import com.yahoo.vespa.model.builder.xml.dom.ModelElement; import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder; import com.yahoo.vespa.model.container.component.SimpleComponent; import com.yahoo.vespa.model.container.http.ConnectorFactory; @@ -24,7 +25,7 @@ public class JettyConnectorBuilder extends VespaDomBuilder.DomConfigProducerBuil @Override protected ConnectorFactory doBuild(DeployState deployState, AbstractConfigProducer ancestor, Element serverSpec) { String name = XmlHelper.getIdString(serverSpec); - int port = HttpBuilder.readPort(serverSpec, deployState.isHosted()); + int port = HttpBuilder.readPort(new ModelElement(serverSpec), deployState.isHosted()); SimpleComponent sslProviderComponent = getSslConfigComponents(name, serverSpec); return new ConnectorFactory(name, port, sslProviderComponent); diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc index ffa26bc6251..6e4346d96ee 100644 --- a/config-model/src/main/resources/schema/containercluster.rnc +++ b/config-model/src/main/resources/schema/containercluster.rnc @@ -65,6 +65,7 @@ Filtering = element filtering { HttpServer = element server { attribute port { xsd:nonNegativeInteger }? & + attribute required { xsd:boolean }? & ComponentId & (Ssl | SslProvider)? & GenericConfig* |