From c5d79ec1c3abb217b7c9ce1832424cb37a0d9a67 Mon Sep 17 00:00:00 2001 From: Ashvin Deodhar Date: Fri, 24 Jan 2020 16:11:37 -0800 Subject: [PATCH 1/5] file path changes --- cns/configuration/configuration.go | 2 +- cns/networkcontainers/networkcontainers_windows.go | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/cns/configuration/configuration.go b/cns/configuration/configuration.go index 36b4204203..410cc38ff9 100644 --- a/cns/configuration/configuration.go +++ b/cns/configuration/configuration.go @@ -46,7 +46,7 @@ func ReadConfig() (CNSConfig, error) { // Check if env set for config path otherwise use default path configpath, found := os.LookupEnv("CNS_CONFIGURATION_PATH") if !found { - dir, err := filepath.Abs(filepath.Dir(os.Args[0])) + dir, err := os.Getwd() if err != nil { logger.Errorf("[Configuration] Failed to find exe dir:%v", err) return cnsConfig, err diff --git a/cns/networkcontainers/networkcontainers_windows.go b/cns/networkcontainers/networkcontainers_windows.go index 2636f8da9c..42f759aac1 100644 --- a/cns/networkcontainers/networkcontainers_windows.go +++ b/cns/networkcontainers/networkcontainers_windows.go @@ -9,7 +9,6 @@ import ( "net" "os" "os/exec" - "path" "path/filepath" "strconv" "strings" @@ -250,12 +249,12 @@ func getAzureNetworkContainerBinaryPath() (string, error) { err error ) - if workingDir, err = filepath.Abs(filepath.Dir(os.Args[0])); err != nil { + if workingDir, err = os.Getwd(); err != nil { return binaryPath, fmt.Errorf("[Azure CNS] Unable to find working directory. Error: %v. Cannot continue", err) } - binaryPath = path.Join(workingDir, binaryAzureNetworkContainer) + binaryPath = filepath.Join(workingDir, binaryAzureNetworkContainer) if _, err = os.Stat(binaryPath); err != nil { return binaryPath, From 6db409d52fd82a5d812369b63d37c20cba1785f5 Mon Sep 17 00:00:00 2001 From: Ashvin Deodhar Date: Thu, 30 Jan 2020 12:30:46 -0800 Subject: [PATCH 2/5] Use os.Executable --- cns/configuration/configuration.go | 17 ++++++++++++++++- .../networkcontainers_windows.go | 14 +++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/cns/configuration/configuration.go b/cns/configuration/configuration.go index 410cc38ff9..8bfd483b39 100644 --- a/cns/configuration/configuration.go +++ b/cns/configuration/configuration.go @@ -46,7 +46,22 @@ func ReadConfig() (CNSConfig, error) { // Check if env set for config path otherwise use default path configpath, found := os.LookupEnv("CNS_CONFIGURATION_PATH") if !found { - dir, err := os.Getwd() + var ( + dir string + ex string + err error + ) + ex, err = os.Executable() + if err == nil { + dir = filepath.Dir(ex) + } else { + var exReal string + exReal, err = filepath.EvalSymlinks(ex) + if err == nil { + dir = filepath.Dir(exReal) + } + } + if err != nil { logger.Errorf("[Configuration] Failed to find exe dir:%v", err) return cnsConfig, err diff --git a/cns/networkcontainers/networkcontainers_windows.go b/cns/networkcontainers/networkcontainers_windows.go index 42f759aac1..08eb63c8ad 100644 --- a/cns/networkcontainers/networkcontainers_windows.go +++ b/cns/networkcontainers/networkcontainers_windows.go @@ -246,10 +246,22 @@ func getAzureNetworkContainerBinaryPath() (string, error) { var ( binaryPath string workingDir string + ex string err error ) - if workingDir, err = os.Getwd(); err != nil { + ex, err = os.Executable() + if err == nil { + workingDir = filepath.Dir(ex) + } else { + var exReal string + exReal, err = filepath.EvalSymlinks(ex) + if err == nil { + workingDir = filepath.Dir(exReal) + } + } + + if err != nil { return binaryPath, fmt.Errorf("[Azure CNS] Unable to find working directory. Error: %v. Cannot continue", err) } From 9032fae59627ca13747b5b3d2dfc14b15f5b97db Mon Sep 17 00:00:00 2001 From: Ashvin Deodhar Date: Thu, 30 Jan 2020 15:19:46 -0800 Subject: [PATCH 3/5] Move to common util function --- cns/configuration/configuration.go | 18 ++-------------- .../networkcontainers_windows.go | 14 ++----------- common/utils.go | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/cns/configuration/configuration.go b/cns/configuration/configuration.go index 8bfd483b39..c2e2a9eabb 100644 --- a/cns/configuration/configuration.go +++ b/cns/configuration/configuration.go @@ -8,6 +8,7 @@ import ( "path/filepath" "github.com/Azure/azure-container-networking/cns/logger" + "github.com/Azure/azure-container-networking/common" ) const ( @@ -46,22 +47,7 @@ func ReadConfig() (CNSConfig, error) { // Check if env set for config path otherwise use default path configpath, found := os.LookupEnv("CNS_CONFIGURATION_PATH") if !found { - var ( - dir string - ex string - err error - ) - ex, err = os.Executable() - if err == nil { - dir = filepath.Dir(ex) - } else { - var exReal string - exReal, err = filepath.EvalSymlinks(ex) - if err == nil { - dir = filepath.Dir(exReal) - } - } - + dir, err := common.GetExecutableDirectory() if err != nil { logger.Errorf("[Configuration] Failed to find exe dir:%v", err) return cnsConfig, err diff --git a/cns/networkcontainers/networkcontainers_windows.go b/cns/networkcontainers/networkcontainers_windows.go index 08eb63c8ad..9db81b67a2 100644 --- a/cns/networkcontainers/networkcontainers_windows.go +++ b/cns/networkcontainers/networkcontainers_windows.go @@ -16,6 +16,7 @@ import ( "github.com/Azure/azure-container-networking/cns" "github.com/Azure/azure-container-networking/cns/logger" + "github.com/Azure/azure-container-networking/common" "github.com/Azure/azure-container-networking/log" "github.com/containernetworking/cni/libcni" ) @@ -246,21 +247,10 @@ func getAzureNetworkContainerBinaryPath() (string, error) { var ( binaryPath string workingDir string - ex string err error ) - ex, err = os.Executable() - if err == nil { - workingDir = filepath.Dir(ex) - } else { - var exReal string - exReal, err = filepath.EvalSymlinks(ex) - if err == nil { - workingDir = filepath.Dir(exReal) - } - } - + workingDir, err = common.GetExecutableDirectory() if err != nil { return binaryPath, fmt.Errorf("[Azure CNS] Unable to find working directory. Error: %v. Cannot continue", err) diff --git a/common/utils.go b/common/utils.go index d392989f3b..680b50901c 100644 --- a/common/utils.go +++ b/common/utils.go @@ -14,6 +14,7 @@ import ( "net" "net/http" "os" + "path/filepath" "strings" "time" @@ -323,3 +324,23 @@ func GetAzureCloud(url string) (string, error) { return strings.TrimSpace(string(bodyBytes)), nil } + +func GetExecutableDirectory() (string, error) { + var ( + dir string + ex string + err error + ) + ex, err = os.Executable() + if err == nil { + dir = filepath.Dir(ex) + } else { + var exReal string + exReal, err = filepath.EvalSymlinks(ex) + if err == nil { + dir = filepath.Dir(exReal) + } + } + + return dir, err +} From f3ca757e353d1a2bc7bc90afffd1ae812e057f6a Mon Sep 17 00:00:00 2001 From: Ashvin Deodhar Date: Thu, 30 Jan 2020 15:39:02 -0800 Subject: [PATCH 4/5] configuration log --- cns/configuration/configuration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cns/configuration/configuration.go b/cns/configuration/configuration.go index c2e2a9eabb..0a3e46ed0e 100644 --- a/cns/configuration/configuration.go +++ b/cns/configuration/configuration.go @@ -57,7 +57,7 @@ func ReadConfig() (CNSConfig, error) { //dir + string(os.PathSeparator) + defaultConfigName } - logger.Printf("Config path:%s", configpath) + logger.Printf("[Configuration] Config path:%s", configpath) content, err := ioutil.ReadFile(configpath) if err != nil { From 149f79e22efb3f1385979d0822be42ee34dce869 Mon Sep 17 00:00:00 2001 From: Ashvin Deodhar Date: Thu, 30 Jan 2020 17:52:51 -0800 Subject: [PATCH 5/5] review comments --- cns/configuration/configuration.go | 1 - common/utils.go | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cns/configuration/configuration.go b/cns/configuration/configuration.go index 0a3e46ed0e..18e7a4c680 100644 --- a/cns/configuration/configuration.go +++ b/cns/configuration/configuration.go @@ -54,7 +54,6 @@ func ReadConfig() (CNSConfig, error) { } configpath = filepath.Join(dir, defaultConfigName) - //dir + string(os.PathSeparator) + defaultConfigName } logger.Printf("[Configuration] Config path:%s", configpath) diff --git a/common/utils.go b/common/utils.go index 680b50901c..fd0832af2b 100644 --- a/common/utils.go +++ b/common/utils.go @@ -336,6 +336,9 @@ func GetExecutableDirectory() (string, error) { dir = filepath.Dir(ex) } else { var exReal string + // If a symlink was used to start the process, depending on the operating system, + // the result might be the symlink or the path it pointed to. + // filepath.EvalSymlinks returns stable results exReal, err = filepath.EvalSymlinks(ex) if err == nil { dir = filepath.Dir(exReal)