Added utils.GetPath(pathKey) for getting paths that can be overriden by a .env for local dev

loop_loop_execution
Paulo Truta 2021-02-17 12:35:22 +01:00
parent 59707b8abd
commit 2817628fef
3 changed files with 57 additions and 16 deletions

3
.gitignore vendored
View File

@ -6,6 +6,9 @@
*.dylib
main
# Local .env file for overwriting info when doing local dev.
.env
# Test binary, built with `go test -c`
*.test

View File

@ -32,12 +32,6 @@ type EdgeAppService struct {
const configFilename = "/edgebox-compose.yml"
// const edgeAppsPath = "/home/system/components/apps/"
const edgeAppsPath = "/home/jpt/Repositories/edgebox/apps/"
// const wsPath = "/home/system/components/ws/"
const wsPath = "/home/jpt/Repositories/edgebox/ws"
// GetEdgeApps : Returns a list of EdgeApp struct filled with information
func GetEdgeApps() []EdgeApp {
@ -45,7 +39,7 @@ func GetEdgeApps() []EdgeApp {
// Building list of available edgeapps in the system with their status
files, err := ioutil.ReadDir(edgeAppsPath)
files, err := ioutil.ReadDir(utils.GetPath("edgeAppsPath"))
if err != nil {
log.Fatal(err)
}
@ -54,7 +48,7 @@ func GetEdgeApps() []EdgeApp {
if f.IsDir() {
// It is a folder that most probably contains an EdgeApp.
// To be fully sure, test that edgebox-compose.yml file exists in the target directory.
_, err := os.Stat(edgeAppsPath + f.Name() + configFilename)
_, err := os.Stat(utils.GetPath("edgeAppsPath") + f.Name() + configFilename)
if !os.IsNotExist(err) {
// File exists. Start digging!
edgeAppName := "Nextcloud"
@ -105,7 +99,7 @@ func GetEdgeAppServices(ID string) []EdgeAppService {
// strConfigFile := string(configFile) // convert content to a 'string'
cmdArgs := []string{"-r", ".services | keys[]", edgeAppsPath + ID + configFilename}
cmdArgs := []string{"-r", ".services | keys[]", utils.GetPath("edgeAppsPath") + ID + configFilename}
servicesString := utils.Exec("yq", cmdArgs)
serviceSlices := strings.Split(servicesString, "\n")
serviceSlices = utils.DeleteEmptySlices(serviceSlices)
@ -113,7 +107,7 @@ func GetEdgeAppServices(ID string) []EdgeAppService {
for _, serviceID := range serviceSlices {
log.Println(serviceID)
cmdArgs = []string{"-f", wsPath + "/docker-compose.yml", "ps", "-q", serviceID}
cmdArgs = []string{"-f", utils.GetPath("wsPath") + "/docker-compose.yml", "ps", "-q", serviceID}
cmdResult := utils.Exec("docker-compose", cmdArgs)
isRunning := false
if cmdResult != "" {
@ -129,7 +123,7 @@ func GetEdgeAppServices(ID string) []EdgeAppService {
// RunEdgeApp : Run an EdgeApp and return its most current status
func RunEdgeApp(ID string) EdgeAppStatus {
cmdArgs := []string{"-f", wsPath + "/docker-compose.yml", "up", ID}
cmdArgs := []string{"-f", utils.GetPath("wsPath") + "/docker-compose.yml", "up", ID}
utils.Exec("docker-compose", cmdArgs)
return GetEdgeAppStatus(ID)
@ -139,7 +133,7 @@ func RunEdgeApp(ID string) EdgeAppStatus {
// StopEdgeApp : Stops an EdgeApp and return its most current status
func StopEdgeApp(ID string) EdgeAppStatus {
cmdArgs := []string{"-f", wsPath + "/docker-compose.yml", "down", ID}
cmdArgs := []string{"-f", utils.GetPath("wsPath") + "/docker-compose.yml", "down", ID}
utils.Exec("docker-compose", cmdArgs)
return GetEdgeAppStatus(ID)

View File

@ -41,11 +41,8 @@ func DeleteEmptySlices(s []string) []string {
// GetMySQLDbConnectionDetails : Returns the necessary string as connection info for SQL.db()
func GetMySQLDbConnectionDetails() string {
// const apiEnvFileLocation = "/home/system/components/api/edgebox.env"
const apiEnvFileLocation = "/home/jpt/Repositories/edgebox/api/edgebox.env"
var apiEnv map[string]string
apiEnv, err := godotenv.Read(apiEnvFileLocation)
apiEnv, err := godotenv.Read(GetPath("apiEnvFileLocation"))
if err != nil {
log.Fatal("Error loading .env file")
@ -59,3 +56,50 @@ func GetMySQLDbConnectionDetails() string {
return Dbuser + ":" + Dbpass + "@tcp(" + Dbhost + ")/" + Dbname
}
// GetPath : Returns either the hardcoded path, or a overwritten value via .env file at project root. Register paths here for seamless working code between dev and prod environments ;)
func GetPath(pathKey string) string {
// Read whole of .env file to map.
var env map[string]string
env, err := godotenv.Read()
targetPath := ""
if err != nil {
log.Println("Project .env file not found withing project root. Using only hardcoded path variables.")
}
switch pathKey {
case "apiEnvFileLocation":
if env["API_ENV_FILE_LOCATION"] != "" {
targetPath = env["API_ENV_FILE_LOCATION"]
} else {
targetPath = "/home/system/components/api/edgebox.env"
}
case "edgeAppsPath":
if env["EDGEAPPS_PATH"] != "" {
targetPath = env["EDGEAPPS_PATH"]
} else {
targetPath = "/home/system/components/apps/"
}
case "wsPath":
if env["WS_PATH"] != "" {
targetPath = env["WS_PATH"]
} else {
targetPath = "/home/system/components/ws/"
}
default:
log.Printf("path_key %s nonexistant in GetPath().\n", pathKey)
}
return targetPath
}