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..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" @@ -42,7 +43,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 +168,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 +223,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), "") @@ -258,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") 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)