DB Admin Configure
module.exports = (service) ->
options = service.options
Engine
Default engine based on service discovery. The option "engine" is set if a suitable database is found and match a pre-configured provider. Possible values are 'mariadb', 'postgresql' and 'mysql' in this order of preference.
For exemple, an "engine" options set to "mariadb" reflect the discovery of an instance of MariaDB and the existance of a usable db object available as the "mariadb" option.
if service.deps.mariadb
options.engine ?= 'mariadb'
else if service.deps.postgresql
options.engine ?= 'postgresql'
else if service.deps.mysql
options.engine ?= 'mysql'
else
options.engine ?= null
Providers
A provider object contains commons properties and potentially database specific properties. Commons properties are:
engine
(string)
One of the supported engine between "mariadb", "postgresql", "mysql", required.admin_username
(string)
Administrator username.admin_password
(string)
Administrator password.java.driver
(string)
Java driver.java.datasource
(string)
Java datasource.jdbc
(string)
JDBC URL.fqdns
([string])
List of database FQDNs.host
([string])
Single database host for customers which doesn't support multi hosts or if a proxy is configured.port
(int)
Database server port.
MariaDB
# Auto discovered configuration
if service.deps.mariadb
options.mariadb ?= {}
options.mariadb.discovered = true
options.mariadb.engine = 'mariadb'
options.mariadb.admin_username ?= 'root'
options.mariadb.admin_password ?= service.deps.mariadb[0].options.admin_password
options.mariadb.fqdns ?= service.deps.mariadb.map (srv) -> srv.node.fqdn
options.mariadb.host ?= options.mariadb.fqdns[0]
options.mariadb.port ?= service.deps.mariadb[0].options.my_cnf['mysqld']['port']
# Manual configurattion
else if options.mariadb
throw Error "Required Options: fqdns" unless options.mariadb.fqdns
# Default value of auto discovered and manual configurattion
if options.mariadb
options.mariadb.java ?= {}
options.mariadb.java.driver = 'com.mysql.jdbc.Driver'
options.mariadb.java.datasource = 'org.mariadb.jdbc.MariaDbDataSource'
options.mariadb.port ?= 3306
url = options.mariadb.fqdns.map((fqdn)-> "#{fqdn}:#{options.mariadb.port}").join(',')
options.mariadb.jdbc ?= "jdbc:mysql://#{url}"
if options.mariadb
throw Error 'Required Option: mariadb.admin_username' unless options.mariadb.admin_username?
throw Error 'Required Option: mariadb.admin_password' unless options.mariadb.admin_password?
PostgreSQL
# Auto discovered configuration
if service.deps.postgresql
options.postgresql ?= {}
options.postgresql.discovered = true
options.postgresql.engine = 'postgresql'
options.postgresql.admin_username ?= 'root'
options.postgresql.admin_password ?= service.deps.postgresql[0].options.password
options.postgresql.fqdns ?= service.deps.postgresql.map (srv) -> srv.node.fqdn
options.postgresql.host ?= options.postgresql.fqdns[0]
options.postgresql.port ?= service.deps.postgresql[0].options.port
url = options.postgresql.fqdns.map((fqdn)-> "#{fqdn}:#{options.postgresql.port}").join(',')
options.postgresql.jdbc ?= "jdbc:postgresql://#{url}"
# Manual configurattion
else if options.postgresql
throw Error "Required Options: fqdns" unless options.postgresql.fqdns
# Default value of auto discovered and manual configurattion
if options.postgresql
options.postgresql.java ?= {}
options.postgresql.java.datasource = 'org.postgresql.jdbc2.Jdbc2PoolingDataSource'
options.postgresql.java.driver = 'org.postgresql.Driver'
options.postgresql.port ?= 5432
url = options.postgresql.fqdns.map((fqdn)-> "#{fqdn}:#{options.postgresql.port}").join(',')
options.postgresql.jdbc ?= "jdbc:postgresql://#{url}"
if options.postgresql
throw Error 'Required Option: postgresql.admin_username' unless options.postgresql.admin_username?
throw Error 'Required Option: postgresql.admin_password' unless options.postgresql.admin_password?
Mysql
# Auto discovered configuration
if service.deps.mysql
options.mysql ?= {}
options.mysql.discovered = true
options.mysql.engine = 'mysql'
options.mysql.admin_username ?= 'root'
options.mysql.admin_password ?= service.deps.mysql[0].options.admin_password
options.mysql.fqdns ?= service.deps.mysql.map (srv) -> srv.node.fqdn
options.mysql.host ?= options.mysql.fqdns[0]
options.mysql.port ?= service.deps.mysql[0].options.my_cnf['mysqld']['port']
# Manual configurattion
else if options.postgresql
throw Error "Required Options: fqdns" unless options.postgresql.fqdns
# Default value of auto discovered and manual configurattion
if options.mysql
options.mysql.java ?= {}
options.mysql.java.driver = 'com.mysql.jdbc.Driver'
options.mysql.java.datasource = 'com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource'
options.mysql.port ?= 3306
url = options.mysql.fqdns.map((fqdn)-> "#{fqdn}:#{options.mysql.port}").join(',')
options.mysql.jdbc ?= "jdbc:mysql://#{url}"
if options.mysql
throw Error 'Required Option: mysql.admin_username' unless options.mysql.admin_username?
throw Error 'Required Option: mysql.admin_password' unless options.mysql.admin_password?
Wait
options.wait_mariadb = service.deps.mariadb[0].options.wait if service.deps.mariadb
options.wait_postgresql = service.deps.postgresql[0].options.wait if service.deps.postgresql
options.wait_mysql = service.deps.mysql[0].options.wait if service.deps.mysql
options.wait = {}
options.wait.tcp = []
if options.mariadb then for fqdn in options.mariadb.fqdns
options.wait.tcp.push host: fqdn, port: options.mariadb.port
if options.postgresql then for fqdn in options.postgresql.fqdns
options.wait.tcp.push host: fqdn, port: options.postgresql.port
if options.mysql then for fqdn in options.mysql.fqdns
options.wait.tcp.push host: fqdn, port: options.mysql.port