summaryrefslogtreecommitdiffstats
path: root/defaults
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahoo-inc.com>2017-06-08 09:42:23 +0200
committerArne H Juul <arnej@yahoo-inc.com>2017-06-08 09:42:23 +0200
commit94f13b1dae241ab033d932b9e2cddef059b33206 (patch)
treef92d2ca8897e50ff8c3c1519e31f17f5e3c17ec8 /defaults
parentaf06ce6113d1881c3109ea2371720ef2237e1174 (diff)
make API for getting VESPA_USER setting
Diffstat (limited to 'defaults')
-rw-r--r--defaults/src/apps/printdefault/printdefault.cpp2
-rw-r--r--defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java23
-rw-r--r--defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java5
-rw-r--r--defaults/src/vespa/defaults.cpp17
-rw-r--r--defaults/src/vespa/defaults.h6
5 files changed, 50 insertions, 3 deletions
diff --git a/defaults/src/apps/printdefault/printdefault.cpp b/defaults/src/apps/printdefault/printdefault.cpp
index 0419ca9b2dd..8c1e265fff3 100644
--- a/defaults/src/apps/printdefault/printdefault.cpp
+++ b/defaults/src/apps/printdefault/printdefault.cpp
@@ -12,6 +12,8 @@ int main(int argc, char **argv) {
}
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], "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 060fd3c56cd..97a58fc8440 100644
--- a/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java
+++ b/defaults/src/main/java/com/yahoo/vespa/defaults/Defaults.java
@@ -17,28 +17,39 @@ public class Defaults {
private static final Defaults defaults = new Defaults();
private final String vespaHome;
+ private final String vespaUser;
private final int vespaWebServicePort;
private final int vespaPortBase;
private Defaults() {
vespaHome = findVespaHome();
+ vespaUser = findVespaUser();
vespaWebServicePort = findVespaWebServicePort();
vespaPortBase = 19000; // TODO
}
- private String findVespaHome() {
+ static private String findVespaHome() {
Optional<String> vespaHomeEnv = Optional.ofNullable(System.getenv("VESPA_HOME"));
if ( ! vespaHomeEnv.isPresent() || vespaHomeEnv.get().trim().isEmpty()) {
log.info("VESPA_HOME not set, using /opt/yahoo/vespa/");
return "/opt/yahoo/vespa/";
}
- String vespaHome = vespaHomeEnv.get();
+ String vespaHome = vespaHomeEnv.get().trim();
if ( ! vespaHome.endsWith("/"))
vespaHome = vespaHome + "/";
return vespaHome;
}
- private int findVespaWebServicePort() {
+ static private String findVespaUser() {
+ Optional<String> vespaUserEnv = Optional.ofNullable(System.getenv("VESPA_USER"));
+ if (! vespaUserEnv.isPresent()) {
+ log.fine("VESPA_USER not set, using yahoo");
+ return "yahoo";
+ }
+ return vespaUserEnv.get().trim();
+ }
+
+ static private int findVespaWebServicePort() {
Optional<String> vespaWebServicePortString = Optional.ofNullable(System.getenv("VESPA_WEB_SERVICE_PORT"));
if ( ! vespaWebServicePortString.isPresent() || vespaWebServicePortString.get().trim().isEmpty()) {
log.info("VESPA_WEB_SERVICE_PORT not set, using 8080");
@@ -54,6 +65,12 @@ public class Defaults {
}
/**
+ * Get the username to own directories, files and processes
+ * @return the vespa user name
+ **/
+ public String vespaUser() { return vespaUser; }
+
+ /**
* Returns the path to the root under which Vespa should read and write files, ending by "/".
*
* @return the vespa home directory, ending by "/"
diff --git a/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java b/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java
index ef64b6a252a..99a8421ae54 100644
--- a/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java
+++ b/defaults/src/test/java/com/yahoo/vespa/defaults/DefaultsTestCase.java
@@ -17,4 +17,9 @@ public class DefaultsTestCase {
assertEquals("./my/explicit/relative/path", Defaults.getDefaults().underVespaHome("./my/explicit/relative/path"));
}
+ @Test
+ public void testFindVespaUser() {
+ assertEquals("yahoo", Defaults.getDefaults().vespaUser());
+ }
+
}
diff --git a/defaults/src/vespa/defaults.cpp b/defaults/src/vespa/defaults.cpp
index 74fc36f1859..9e59fe15802 100644
--- a/defaults/src/vespa/defaults.cpp
+++ b/defaults/src/vespa/defaults.cpp
@@ -9,11 +9,13 @@
#include <vector>
#include <unistd.h>
#include <atomic>
+#include <pwd.h>
namespace {
const char *defaultHome = "/opt/yahoo/vespa/";
char computedHome[PATH_MAX];
+const char *defaultUser = "yahoo";
int defaultWebServicePort = 8080;
int defaultPortBase = 19000;
int defaultPortConfigServerRpc = 19070;
@@ -63,6 +65,14 @@ void findDefaults() {
fprintf(stderr, "warning\tbad VESPA_HOME '%s' (ignored)\n", env);
}
}
+ env = getenv("VESPA_USER");
+ if (env != NULL) {
+ if (*env != '0' && getpwnam(env) == 0) {
+ fprintf(stderr, "warning\tbad VESPA_USER '%s' (ignored)\n", env);
+ } else {
+ defaultUser = env;
+ }
+ }
long p = getNumFromEnv("VESPA_WEB_SERVICE_PORT");
if (p > 0) {
// fprintf(stderr, "debug\tdefault web service port is '%ld'\n", p);
@@ -157,6 +167,13 @@ Defaults::vespaHome()
return defaultHome;
}
+const char *
+Defaults::vespaUser()
+{
+ findDefaults();
+ return defaultUser;
+}
+
int
Defaults::vespaWebServicePort()
{
diff --git a/defaults/src/vespa/defaults.h b/defaults/src/vespa/defaults.h
index ec3f78e1e29..738f70f8b19 100644
--- a/defaults/src/vespa/defaults.h
+++ b/defaults/src/vespa/defaults.h
@@ -26,6 +26,12 @@ public:
static const char *vespaHome();
/**
+ * Compute the user name to own directories and run processes.
+ * @return the vespa user name
+ **/
+ static const char *vespaUser();
+
+ /**
* Compute the port number where the Vespa webservice
* container should be available.
*