Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import akka.actor.ActorSystem
- import com.azimolabs.config.definitions.AzimoApplicationConfig._
- import com.azimolabs.config.definitions.{ConsulConfiguration, VaultConfiguration}
- import pureconfig._
- import eu.timepit.refined._
- import eu.timepit.refined.pureconfig._
- import eu.timepit.refined.api.Refined
- import eu.timepit.refined.numeric._
- import eu.timepit.refined.string.{MatchesRegex, Uri}
- import cats.instances.all._
- import com.azimolabs.config.{ConsulAdapter, UpdatableConfiguration, VaultAdapter}
- import scala.concurrent.ExecutionContext
- import scala.util.Success
- object ApplicationConfig {
- implicit val actorSystem: ActorSystem = ActorSystem.create()
- implicit val executionContext: ExecutionContext = actorSystem.dispatcher
- private val updatableConfig = UpdatableConfiguration[ApplicationConfig]
- private val fileConfiguration: ApplicationConfig = loadConfig[ApplicationConfig]("azimo") match {
- case Left(err) => throw new RuntimeException(err.toString)
- case Right(conf) => conf
- }
- private val vaultConfigGetter: VaultAdapter = VaultAdapter.defaultVaultAdapter(fileConfiguration.vault)
- private def vaultConfiguration = updatableConfig.checkForUpdates(List(""), vaultConfigGetter, _ => ())(fileConfiguration)
- def consul = new ConsulAdapter(fileConfiguration.consul)
- val configuration: ApplicationConfig = if (fileConfiguration.cfg.useOnlyFile) {
- fileConfiguration
- } else {
- updatableConfig.checkForUpdates(List("example-project-group", "service-name"), consul, _ => ())(fileConfiguration)
- }
- // If you want to get e.g. credentials for PostgreSQL:
- private val postgresCredentials = vaultConfigGetter.getCredentials(UpdatableConfiguration.ValuePath(path = List("credentials_path_here")))
- val postgresUsername: String = postgresCredentials.map(_.username).getOrElse(configuration.db.default.user)
- val postgresPassword: String = postgresCredentials.map(_.password).getOrElse(configuration.db.default.password)
- // If you want to get information about external service from consul
- def haproxy: Option[(String, Int)] = {
- consul.serviceAddress("haproxy").map(c => c.getServiceAddress -> c.getServicePort)
- }
- def externalService(): ExternalServiceConfiguration = {
- haproxy.map(item => configuration.externalservice.copy(
- address = item._1,
- port = item._2,
- )).getOrElse(configuration.externalservice)
- }
- }
Add Comment
Please, Sign In to add comment