From 9c479dc5e19072c84eaf343b989ef5ad490387ce Mon Sep 17 00:00:00 2001 From: Yaron Haviv Date: Thu, 6 Jun 2019 12:33:08 +0300 Subject: [PATCH 1/2] making MySQL user and password configurable --- backend/src/apiserver/client/sql.go | 2 +- backend/src/apiserver/client_manager.go | 9 +++++++-- backend/src/apiserver/config.go | 12 +++++++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/backend/src/apiserver/client/sql.go b/backend/src/apiserver/client/sql.go index c1c4b8c6fd1..47844b1e7bf 100644 --- a/backend/src/apiserver/client/sql.go +++ b/backend/src/apiserver/client/sql.go @@ -20,7 +20,7 @@ import ( "github.com/go-sql-driver/mysql" ) -func CreateMySQLConfig(user string, mysqlServiceHost string, +func CreateMySQLConfig(user, password string, mysqlServiceHost string, mysqlServicePort string, dbName string) *mysql.Config { return &mysql.Config{ User: user, diff --git a/backend/src/apiserver/client_manager.go b/backend/src/apiserver/client_manager.go index 50c9eb846b0..f33baf5b6f0 100644 --- a/backend/src/apiserver/client_manager.go +++ b/backend/src/apiserver/client_manager.go @@ -42,7 +42,10 @@ const ( minioServiceHost = "MINIO_SERVICE_SERVICE_HOST" minioServicePort = "MINIO_SERVICE_SERVICE_PORT" mysqlServiceHost = "MYSQL_SERVICE_HOST" + mysqlUser = "DBConfig.User" + mysqlPassword = "DBConfig.Password" mysqlServicePort = "MYSQL_SERVICE_PORT" + podNamespace = "POD_NAMESPACE" dbName = "mlpipeline" initConnectionTimeout = "InitConnectionTimeout" @@ -164,7 +167,8 @@ func initMetadataStore() *metadata.Store { Host: proto.String(getStringConfig(mysqlServiceHost)), Port: proto.Uint32(uint32(port)), Database: proto.String("mlmetadata"), - User: proto.String("root"), + User: proto.String(getStringConfigWithDefault(mysqlUser, "root")), + Password: proto.String(getStringConfigWithDefault(mysqlPassword, "")), }, }, } @@ -218,7 +222,8 @@ func initDBClient(initConnectionTimeout time.Duration) *storage.DB { // Format would be something like root@tcp(ip:port)/dbname?charset=utf8&loc=Local&parseTime=True func initMysql(driverName string, initConnectionTimeout time.Duration) string { mysqlConfig := client.CreateMySQLConfig( - "root", + getStringConfigWithDefault(mysqlUser, "root"), + getStringConfigWithDefault(mysqlPassword, ""), getStringConfig(mysqlServiceHost), getStringConfig(mysqlServicePort), "") diff --git a/backend/src/apiserver/config.go b/backend/src/apiserver/config.go index 6cc03ac79c5..9fa8dfcaa59 100644 --- a/backend/src/apiserver/config.go +++ b/backend/src/apiserver/config.go @@ -15,6 +15,7 @@ package main import ( + "strings" "time" "github.com/fsnotify/fsnotify" @@ -23,7 +24,9 @@ import ( ) func initConfig() { - // Import environment variable + // Import environment variable, support nested vars e.g. OBJECTSTORECONFIG_ACCESSKEY + replacer := strings.NewReplacer(".", "_") + viper.SetEnvKeyReplacer(replacer) viper.AutomaticEnv() // Set configuration file name. The format is auto detected in this case. @@ -49,6 +52,13 @@ func getStringConfig(configName string) string { return viper.GetString(configName) } +func getStringConfigWithDefault(configName, value string) string { + if !viper.IsSet(configName) { + return value + } + return viper.GetString(configName) +} + func getDurationConfig(configName string) time.Duration { if !viper.IsSet(configName) { glog.Fatalf("Please specify flag %s", configName) From 396bf4cea356a273e5bb9aa498af39ab72362873 Mon Sep 17 00:00:00 2001 From: Yaron Haviv Date: Thu, 6 Jun 2019 12:41:13 +0300 Subject: [PATCH 2/2] making minio parameters/secret configurable through env and file --- backend/src/apiserver/client_manager.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/src/apiserver/client_manager.go b/backend/src/apiserver/client_manager.go index f33baf5b6f0..908d6debef3 100644 --- a/backend/src/apiserver/client_manager.go +++ b/backend/src/apiserver/client_manager.go @@ -17,6 +17,7 @@ package main import ( "database/sql" "fmt" + "os" "strconv" "time" @@ -263,8 +264,10 @@ func initMysql(driverName string, initConnectionTimeout time.Duration) string { func initMinioClient(initConnectionTimeout time.Duration) storage.ObjectStoreInterface { // Create minio client. - minioServiceHost := getStringConfig(minioServiceHost) - minioServicePort := getStringConfig(minioServicePort) + minioServiceHost := getStringConfigWithDefault( + "ObjectStoreConfig.Host", os.Getenv(minioServiceHost)) + minioServicePort := getStringConfigWithDefault( + "ObjectStoreConfig.Port", os.Getenv(minioServicePort)) accessKey := getStringConfig("ObjectStoreConfig.AccessKey") secretKey := getStringConfig("ObjectStoreConfig.SecretAccessKey") bucketName := getStringConfig("ObjectStoreConfig.BucketName")