diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2017-09-08 07:27:19 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2017-09-08 07:27:19 +0000 |
commit | d0339c87070c88aa97ddb44d6e29ba4d0a95ed29 (patch) | |
tree | c768b40d101462a693223345304d94edc2dbc75f /defaults | |
parent | 9886b87286a16c8385e9642d6f864157cec9ce9d (diff) |
add vespaHostname function
Diffstat (limited to 'defaults')
-rw-r--r-- | defaults/src/apps/printdefault/printdefault.cpp | 6 | ||||
-rw-r--r-- | defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java | 34 | ||||
-rw-r--r-- | defaults/src/vespa/defaults.cpp | 21 | ||||
-rw-r--r-- | defaults/src/vespa/defaults.h | 6 |
4 files changed, 65 insertions, 2 deletions
diff --git a/defaults/src/apps/printdefault/printdefault.cpp b/defaults/src/apps/printdefault/printdefault.cpp index da0c6782d31..73e199fb441 100644 --- a/defaults/src/apps/printdefault/printdefault.cpp +++ b/defaults/src/apps/printdefault/printdefault.cpp @@ -7,13 +7,17 @@ int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "usage: %s <variable>\n", argv[0]); - fprintf(stderr, " the variable must be 'home' or 'portbase' currently\n"); + fprintf(stderr, " variable names are: home, user, hostname, portbase, configservers,\n"); + fprintf(stderr, " configserver_rpc_port, configservers_rpc\n"); + fprintf(stderr, " configservers_http, configsources, configproxy_rpc\n"); return 1; } if (strcmp(argv[1], "home") == 0) { printf("%s\n", vespa::Defaults::vespaHome()); } else if (strcmp(argv[1], "user") == 0) { printf("%s\n", vespa::Defaults::vespaUser()); + } else if (strcmp(argv[1], "hostname") == 0) { + printf("%s\n", vespa::Defaults::vespaHostname()); } else if (strcmp(argv[1], "portbase") == 0) { printf("%d\n", vespa::Defaults::vespaPortBase()); } else if (strcmp(argv[1], "configserver_rpc_port") == 0) { diff --git a/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java b/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java index d8cf0947ef0..8a9be7891ae 100644 --- a/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java +++ b/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java @@ -1,8 +1,14 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.defaults; -import java.util.Optional; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.nio.charset.StandardCharsets; import java.util.logging.Logger; +import java.util.Optional; + + /** * The defaults of basic Vespa configuration variables. @@ -18,12 +24,14 @@ public class Defaults { private final String vespaHome; private final String vespaUser; + private final String vespaHost; private final int vespaWebServicePort; private final int vespaPortBase; private Defaults() { vespaHome = findVespaHome(); vespaUser = findVespaUser(); + vespaHost = findVespaHostname(); vespaWebServicePort = findVespaWebServicePort(); vespaPortBase = 19000; // TODO } @@ -42,6 +50,23 @@ public class Defaults { return vespaHome; } + static private String findVespaHostname() { + Optional<String> vespaHostEnv = Optional.ofNullable(System.getenv("VESPA_HOSTNAME")); + if (vespaHostEnv.isPresent() && ! vespaHostEnv.get().trim().isEmpty()) { + return vespaHostEnv.get().trim(); + } + try { + Process p = Runtime.getRuntime().exec("hostname"); + BufferedReader r = new BufferedReader( + new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8)); + String line = r.readLine(); + if (line != null && ! line.trim().isEmpty()) { + return line; + } + } catch (java.io.IOException e) {} + return "localhost"; + } + static private String findVespaUser() { Optional<String> vespaUserEnv = Optional.ofNullable(System.getenv("VESPA_USER")); if (! vespaUserEnv.isPresent()) { @@ -72,6 +97,13 @@ public class Defaults { **/ public String vespaUser() { return vespaUser; } + + /** + * Compute the host name that identifies myself + * @return the vespa host name + **/ + public String vespaHostname() { return vespaHost; } + /** * Returns the path to the root under which Vespa should read and write files. * Will not end with a "/". diff --git a/defaults/src/vespa/defaults.cpp b/defaults/src/vespa/defaults.cpp index 730ec4735ca..d10e4064f83 100644 --- a/defaults/src/vespa/defaults.cpp +++ b/defaults/src/vespa/defaults.cpp @@ -13,8 +13,12 @@ namespace { +#define HOST_BUF_SZ 1024 + const char *defaultHome = "/opt/vespa"; const char *defaultUser = "vespa"; +const char *defaultHost = "localhost"; +char hostbuf[HOST_BUF_SZ]; int defaultWebServicePort = 8080; int defaultPortBase = 19000; int defaultPortConfigServerRpc = 19070; @@ -63,6 +67,16 @@ void findDefaults() { defaultUser = env; } } + env = getenv("VESPA_HOSTNAME"); + if (env != NULL) { + defaultHost = env; + } else { + int err = gethostname(hostbuf, HOST_BUF_SZ); + hostbuf[HOST_BUF_SZ-1] = '\0'; + if (err == 0 && strlen(hostbuf) > 0 && strlen(hostbuf) < HOST_BUF_SZ-1) { + defaultHost = hostbuf; + } + } long p = getNumFromEnv("VESPA_WEB_SERVICE_PORT"); if (p > 0) { // fprintf(stderr, "debug\tdefault web service port is '%ld'\n", p); @@ -180,6 +194,13 @@ Defaults::vespaUser() return defaultUser; } +const char * +Defaults::vespaHostname() +{ + findDefaults(); + return defaultHost; +} + int Defaults::vespaWebServicePort() { diff --git a/defaults/src/vespa/defaults.h b/defaults/src/vespa/defaults.h index 53e44b3f526..d0b400ef563 100644 --- a/defaults/src/vespa/defaults.h +++ b/defaults/src/vespa/defaults.h @@ -34,6 +34,12 @@ public: static const char *vespaUser(); /** + * Compute the host name that identifies myself + * @return the vespa host name + **/ + static const char *vespaHostname(); + + /** * Compute the port number where the Vespa webservice * container should be available. * |