API-Explorer icon indicating copy to clipboard operation
API-Explorer copied to clipboard

Get props from OS system environment, just like OBP API

Open chrisjsimpson opened this issue 6 years ago • 1 comments

Objective:

(The same as OBP API https://github.com/OpenBankProject/OBP-API/issues/1208 )

Make container-like deployments easier by reading props from sys.env, we want to avoid rewriting the props file and repacking the war file like this: https://github.com/chrisjsimpson/obp-kubernetes/issues/2#issuecomment-460495439 (<< this is to be avoided)

For docker-like environments, it is helpful instead to read runtime settings from the operating system environment vars, because we can inject these at container runtime.

pseudo Logic

  • Load props from system environment (sys.env) https://www.scala-lang.org/api/2.9.3/scala/sys/package.html
  • Fallback to read from props file

pseudo code

  def getPropsValue(nameOfProperty: String): Box[String] = {
    # Replace "." with "_" (environment vars cannot include ".")
    brandSpecificPropertyName = brandSpecificPropertyName.replace('.', '_')
    # Convert to upper case
    brandSpecificPropertyName = brandSpecificPropertyName.toUpperCase()
    if (sys.env.get(brandSpecificPropertyName)) {
      
    } else {
      ..... load from props file as normal
    }
  }

Gotcha

  • Environment variables will be upper case (s.toUpperCase())
  • Environment variables cannot contain a dot ("."), therefore:
    • oauth_1.hostname becomes OAUTH_1_HOSTNAME
    • api_hostname becomes API_HOSTNAME

chrisjsimpson avatar Feb 07 '19 16:02 chrisjsimpson

Oh damn @hongwei1 I didn't see your commit :laughing: damn, thank you! We had the same ideas.

At least I got a chance to learn some Scala!

chrisjsimpson avatar Feb 22 '19 04:02 chrisjsimpson