Merge pull request #865 from Mazo/env-config

Load config with ConfigSource.default to allow environment variables or java opts to override config values
This commit is contained in:
Fate-JH 2021-06-15 18:58:38 -04:00 committed by GitHub
commit 7b840719be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 17 deletions

View file

@ -183,16 +183,6 @@ object Server {
loggerContext.reset()
configurator.doConfigure(loggerConfigPath)
Config.result match {
case Left(failures) =>
logger.error("Loading config failed")
failures.toList.foreach { failure =>
logger.error(failure.toString)
}
sys.exit(1)
case Right(_) =>
}
val builder = OParser.builder[CliConfig]
val parser = {

View file

@ -8,13 +8,14 @@ import net.psforever.objects.avatar.{BattleRank, Certification, CommandRank}
import net.psforever.packet.game.ServerType
import net.psforever.types.ChatMessageType
import pureconfig.ConfigConvert.viaNonEmptyStringOpt
import pureconfig.ConfigReader.Result
import pureconfig.{ConfigConvert, ConfigSource}
import scala.concurrent.duration._
import scala.reflect.ClassTag
import pureconfig.generic.auto._ // intellij: this is not unused
object Config {
private val logger = org.log4s.getLogger
// prog.home is defined when we are running from SBT pack
val directory: String = System.getProperty("prog.home") match {
case null =>
@ -53,18 +54,34 @@ object Config {
private val source = {
val configFile = Paths.get(directory, "psforever.conf").toFile
if (configFile.exists)
ConfigSource.file(configFile).withFallback(ConfigSource.defaultApplication)
ConfigSource.file(configFile).withFallback(ConfigSource.default)
else
ConfigSource.defaultApplication
ConfigSource.default
}
val result: Result[AppConfig] = source.load[AppConfig]
// Raw config object - prefer app when possible
lazy val config: TypesafeConfig = source.config().toOption.get
lazy val config: TypesafeConfig = source.config() match {
case Right(config) => config
case Left(failures) => {
logger.error("Loading config failed")
failures.toList.foreach { failure =>
logger.error(failure.toString)
}
sys.exit(1)
}
}
// Typed config object
lazy val app: AppConfig = result.toOption.get
lazy val app: AppConfig = source.load[AppConfig] match {
case Right(config) => config
case Left(failures) => {
logger.error("Loading config failed")
failures.toList.foreach { failure =>
logger.error(failure.toString)
}
sys.exit(1)
}
}
}
case class AppConfig(