X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fxds%2Fxds-cli.git;a=blobdiff_plain;f=main.go;h=737c9b2e642f67b608ac1cd49781b581fe51a65b;hp=8d1e0eb5b7e07673dfd0fbc52035128c01084aac;hb=3b5e82b55433fd49cfe0cd0349756e0c2e9a9c12;hpb=92f718ade3789c1ed33be04d03c3214b6ed8f596 diff --git a/main.go b/main.go index 8d1e0eb..737c9b2 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017-2018 "IoT.bzh" + * Copyright (C) 2017-2019 "IoT.bzh" * Author Sebastien Douheret * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,6 +23,7 @@ package main import ( "fmt" "os" + "path" "regexp" "sort" "strings" @@ -30,9 +31,8 @@ import ( "text/tabwriter" "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent.git/lib/xaapiv1" - common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib" + common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git" "github.com/Sirupsen/logrus" - "github.com/joho/godotenv" "github.com/urfave/cli" ) @@ -58,8 +58,9 @@ var AppSubVersion = "unknown-dev" // Application details const ( - appCopyright = "Copyright (C) 2017-2018 IoT.bzh - Apache-2.0" - defaultLogLevel = "error" + appCopyright = "Copyright (C) 2017-2019 IoT.bzh - Apache-2.0" + defaultLogLevel = "error" + defaultConfigEnvFilename = "cli-config.env" ) // Log Global variable that hold logger @@ -149,7 +150,10 @@ func main() { app.Metadata["version"] = AppVersion app.Metadata["git-tag"] = AppSubVersion app.Metadata["logger"] = Log - app.EnableBashCompletion = true + // FIXME: Disable completion for now, because it's not working with options + // (eg. --label) and prevents to complete local path + // (IOW current function only completes command and sub-commands) + app.EnableBashCompletion = false // Create env vars help dynDesc := "\nENVIRONMENT VARIABLES:" @@ -238,27 +242,40 @@ func main() { // Early and manual processing of --config option in order to set XDS_xxx // variables before parsing of option by app cli - confFile := os.Getenv("XDS_CONFIG") + // 1/ from command line option: "--config myConfig.json" + // 2/ from environment variable XDS_CONFIG + // 3/ $HOME/.xds/cli/cli-config.env file + // 4/ /etc/xds/cli/cli-config.env file + searchIn := make([]string, 0, 4) for idx, a := range os.Args[1:] { if a == "-c" || a == "--config" || a == "-config" { - confFile = os.Args[idx+2] + searchIn = append(searchIn, os.Args[idx+2]) break } } + searchIn = append(searchIn, os.Getenv("XDS_CONFIG")) + if usrHome := common.GetUserHome(); usrHome != "" { + searchIn = append(searchIn, path.Join(usrHome, ".xds", "cli", defaultConfigEnvFilename)) + } + searchIn = append(searchIn, path.Join("/etc", "xds", "cli", defaultConfigEnvFilename)) + + // Use the first existing env config file + confFile := "" + for _, p := range searchIn { + if pr, err := common.ResolveEnvVar(p); err == nil { + earlyPrintf("Check if confFile exists : %v", pr) + if common.Exists(pr) { + confFile = pr + break + } + } + } // Load config file if requested if confFile != "" { - earlyPrintf("confFile detected: %v", confFile) - confFile, err := common.ResolveEnvVar(confFile) - if err != nil { - exitError(1, "Error while resolving confFile: %v", err) - } - earlyPrintf("Resolved confFile: %v", confFile) - if !common.Exists(confFile) { - exitError(1, "Error env config file not found") - } + earlyPrintf("Used confFile: %v", confFile) // Load config file variables that will overwrite env variables - err = godotenv.Overload(confFile) + err := godotenv.Overload(confFile) if err != nil { exitError(1, "Error loading env config file "+confFile) }