Reputation: 1339
Attempting to use ${HOSTNAME}
in a config file does not work! According to the documentation, config files should resolve environment variables as mentioned in the docs:
substitutions fall back to environment variables if they don't resolve in the config itself, so ${HOME} would work as you expect. Also, most configs have system properties merged in so you could use ${user.home}.
Is there a way to get hostname into the config file?
Reproduction
Add host.name=${HOSTNAME}
to an application.conf
file, then try and access it from anywhere. For example try adding
Logger.info(s"Hostname is ${current.configuration.getString("host.name").getOrElse("NOT-FOUND")}")
to the Global.scala
.
Environment
This was run on a RHEL6 environment where echo $HOSTNAME
produces precise32
so the environment variable exists, this is not the program hostname
.
Upvotes: 9
Views: 10879
Reputation: 1339
The solution seems to be passing in the hostname via a system property as -Dhost.name=$HOSTNAME
or -Dhost.name=$(hostname)
. I'd imagine in windows it would be something else, but this works for *NIX environments.
Unless anyone can come up with something cleaner this will be the accepted answer.
Upvotes: 8
Reputation: 35443
You should see if calling System.getenv("HOSTNAME")
returns a non-null value. If not, then HOSTNAME
is not an env variable according to the java runtime which is what is important for mapping that to a config property in typesafe config. I tried this with HOSTNAME
and even though I could echo it in bash, it was not available in java as a env substitution. I changed it to USER
and everything worked as expected.
Upvotes: 1
Reputation: 29433
This probably isn't working because $HOSTNAME
doesn't seem to actually be an environment variable:
jamesw@T430s:~$ echo $HOSTNAME
T430s
jamesw@T430s:~$ export|grep HOSTNAME
jamesw@T430s:~$
So it must be some other special bash thing.
Upvotes: 7