You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ke...@apache.org on 2021/03/05 07:56:00 UTC

[skywalking-infra-e2e] branch main updated: Fix relative paths to e2e.yaml (#11)

This is an automated email from the ASF dual-hosted git repository.

kezhenxu94 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-infra-e2e.git


The following commit(s) were added to refs/heads/main by this push:
     new 02e18db  Fix relative paths to e2e.yaml (#11)
02e18db is described below

commit 02e18dbb3d06f47c5722d01ca4ead13abce59893
Author: Zhenxu Ke <ke...@apache.org>
AuthorDate: Fri Mar 5 15:55:52 2021 +0800

    Fix relative paths to e2e.yaml (#11)
    
    Co-authored-by: HumbertZhang <50...@qq.com>
---
 commands/root.go                                   |  8 ++--
 commands/setup/setup.go                            |  7 ----
 commands/verify/verify.go                          |  4 +-
 examples/simple/e2e.yaml                           |  2 +-
 examples/simple/manifests2/busybox4.yaml           | 30 ++++++++++++++
 internal/components/cleanup/kind.go                |  7 ++--
 internal/components/setup/kind.go                  |  6 +--
 internal/config/e2eConfig.go                       | 20 +++++++++
 internal/config/globalConfig.go                    | 14 +++----
 .../{config/globalConfig.go => util/config.go}     | 47 ++++++++--------------
 internal/util/k8s.go                               |  9 +++--
 11 files changed, 91 insertions(+), 63 deletions(-)

diff --git a/commands/root.go b/commands/root.go
index d378f0c..8b5fe6c 100644
--- a/commands/root.go
+++ b/commands/root.go
@@ -20,6 +20,8 @@ package commands
 import (
 	"github.com/spf13/cobra"
 
+	"github.com/apache/skywalking-infra-e2e/internal/util"
+
 	"github.com/apache/skywalking-infra-e2e/commands/cleanup"
 	"github.com/apache/skywalking-infra-e2e/commands/run"
 	"github.com/apache/skywalking-infra-e2e/commands/setup"
@@ -29,8 +31,6 @@ import (
 	"github.com/apache/skywalking-infra-e2e/internal/constant"
 )
 
-var cfg string
-
 // Root represents the base command when called without any subcommands
 var Root = &cobra.Command{
 	Use:           "e2e command [flags]",
@@ -39,7 +39,7 @@ var Root = &cobra.Command{
 	SilenceErrors: true,
 	SilenceUsage:  true,
 	PersistentPreRun: func(cmd *cobra.Command, args []string) {
-		config.ReadGlobalConfigFile(cfg)
+		config.ReadGlobalConfigFile()
 	},
 }
 
@@ -52,7 +52,7 @@ func Execute() error {
 	Root.AddCommand(verify.Verify)
 	Root.AddCommand(cleanup.Cleanup)
 
-	Root.PersistentFlags().StringVarP(&cfg, "config", "c", constant.E2EDefaultFile, "the config file")
+	Root.PersistentFlags().StringVarP(&util.CfgFile, "config", "c", constant.E2EDefaultFile, "the config file")
 
 	return Root.Execute()
 }
diff --git a/commands/setup/setup.go b/commands/setup/setup.go
index a3eb3b9..146644f 100644
--- a/commands/setup/setup.go
+++ b/commands/setup/setup.go
@@ -25,7 +25,6 @@ import (
 	"github.com/apache/skywalking-infra-e2e/internal/config"
 	"github.com/apache/skywalking-infra-e2e/internal/constant"
 	"github.com/apache/skywalking-infra-e2e/internal/logger"
-	"github.com/apache/skywalking-infra-e2e/internal/util"
 
 	"github.com/spf13/cobra"
 )
@@ -33,12 +32,6 @@ import (
 var Setup = &cobra.Command{
 	Use:   "setup",
 	Short: "",
-	PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
-		if err := util.CheckDockerDaemon(); err != nil {
-			return err
-		}
-		return nil
-	},
 	RunE: func(cmd *cobra.Command, args []string) error {
 		if err := setupAccordingE2E(); err != nil {
 			return fmt.Errorf("[Setup] %s", err)
diff --git a/commands/verify/verify.go b/commands/verify/verify.go
index 05ccbe0..0e700b9 100644
--- a/commands/verify/verify.go
+++ b/commands/verify/verify.go
@@ -93,8 +93,8 @@ func verifyAccordingConfig() error {
 	e2eConfig := config.GlobalConfig.E2EConfig
 
 	for _, v := range e2eConfig.Verify {
-		if v.Expected != "" {
-			if err := verifySingleCase(v.Expected, v.Actual, v.Query); err != nil {
+		if v.GetExpected() != "" {
+			if err := verifySingleCase(v.GetExpected(), v.GetActual(), v.Query); err != nil {
 				logger.Log.Errorf("%v", err)
 			}
 		} else {
diff --git a/examples/simple/e2e.yaml b/examples/simple/e2e.yaml
index 721d446..480099b 100644
--- a/examples/simple/e2e.yaml
+++ b/examples/simple/e2e.yaml
@@ -24,7 +24,7 @@ setup:
         - namespace: default
           resource: pod/busybox1 
           for: condition=Ready
-    - path: manifests
+    - path: manifests,manifests2
       wait:
         - namespace: default
           resource: pod
diff --git a/examples/simple/manifests2/busybox4.yaml b/examples/simple/manifests2/busybox4.yaml
new file mode 100644
index 0000000..08e5759
--- /dev/null
+++ b/examples/simple/manifests2/busybox4.yaml
@@ -0,0 +1,30 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+kind: Pod
+metadata:
+  name: busybox4
+  labels:
+    app: busybox4
+spec:
+  containers:
+  - image: busybox
+    command:
+      - sleep
+      - "3600"
+    imagePullPolicy: IfNotPresent
+    name: busybox
+  restartPolicy: Always
diff --git a/internal/components/cleanup/kind.go b/internal/components/cleanup/kind.go
index 2fc4de2..1e19072 100644
--- a/internal/components/cleanup/kind.go
+++ b/internal/components/cleanup/kind.go
@@ -39,9 +39,9 @@ type KindClusterNameConfig struct {
 }
 
 func KindCleanUp(e2eConfig *config.E2EConfig) error {
-	kindConfigFilePath := e2eConfig.Setup.File
+	kindConfigFilePath := e2eConfig.Setup.GetFile()
 
-	logger.Log.Info("deleting kind cluster...")
+	logger.Log.Infof("deleting kind cluster...\n")
 	if err := cleanKindCluster(kindConfigFilePath); err != nil {
 		logger.Log.Error("delete kind cluster failed")
 		return err
@@ -52,8 +52,7 @@ func KindCleanUp(e2eConfig *config.E2EConfig) error {
 	logger.Log.Infof("deleting k8s cluster config file:%s", kubeConfigPath)
 	err := os.Remove(kubeConfigPath)
 	if err != nil {
-		logger.Log.Errorf("delete k8s cluster config file failed")
-		return err
+		logger.Log.Infoln("delete k8s cluster config file failed")
 	}
 
 	return nil
diff --git a/internal/components/setup/kind.go b/internal/components/setup/kind.go
index 9f7b156..2b6c100 100644
--- a/internal/components/setup/kind.go
+++ b/internal/components/setup/kind.go
@@ -52,7 +52,7 @@ var (
 
 // KindSetup sets up environment according to e2e.yaml.
 func KindSetup(e2eConfig *config.E2EConfig) error {
-	kindConfigPath = e2eConfig.Setup.File
+	kindConfigPath = e2eConfig.Setup.GetFile()
 
 	if kindConfigPath == "" {
 		return fmt.Errorf("no kind config file was provided")
@@ -187,9 +187,9 @@ func createManifestsAndWait(c *kubernetes.Clientset, dc dynamic.Interface, manif
 }
 
 func createByManifest(c *kubernetes.Clientset, dc dynamic.Interface, manifest config.Manifest) error {
-	files, err := util.GetManifests(manifest.Path)
+	files, err := util.GetManifests(manifest.GetPath())
 	if err != nil {
-		logger.Log.Error("get manifests from command line argument failed")
+		logger.Log.Error("get manifests failed")
 		return err
 	}
 
diff --git a/internal/config/e2eConfig.go b/internal/config/e2eConfig.go
index c242947..7b54aaf 100644
--- a/internal/config/e2eConfig.go
+++ b/internal/config/e2eConfig.go
@@ -18,6 +18,8 @@
 
 package config
 
+import "github.com/apache/skywalking-infra-e2e/internal/util"
+
 // E2EConfig corresponds to configuration file e2e.yaml.
 type E2EConfig struct {
 	Setup  Setup        `yaml:"setup"`
@@ -33,11 +35,19 @@ type Setup struct {
 	Timeout int   `yaml:"timeout"`
 }
 
+func (s *Setup) GetFile() string {
+	return util.ResolveAbs(s.File)
+}
+
 type Manifest struct {
 	Path  string `yaml:"path"`
 	Waits []Wait `yaml:"wait"`
 }
 
+func (m Manifest) GetPath() string {
+	return m.Path
+}
+
 type Run struct {
 	Command string `yaml:"command"`
 	Waits   []Wait `yaml:"wait"`
@@ -55,3 +65,13 @@ type VerifyCase struct {
 	Actual   string `yaml:"actual"`
 	Expected string `yaml:"expected"`
 }
+
+// GetActual resolves the absolute file path of the actual data file.
+func (v *VerifyCase) GetActual() string {
+	return util.ResolveAbs(v.Actual)
+}
+
+// GetExpected resolves the absolute file path of the expected data file.
+func (v *VerifyCase) GetExpected() string {
+	return util.ResolveAbs(v.Expected)
+}
diff --git a/internal/config/globalConfig.go b/internal/config/globalConfig.go
index c796962..fb72c9c 100644
--- a/internal/config/globalConfig.go
+++ b/internal/config/globalConfig.go
@@ -36,23 +36,21 @@ type GlobalE2EConfig struct {
 
 var GlobalConfig GlobalE2EConfig
 
-func ReadGlobalConfigFile(configFilePath string) {
-	e2eFile := configFilePath
-
-	if !util.PathExist(e2eFile) {
-		GlobalConfig.Error = fmt.Errorf("e2e config file %s not exist", e2eFile)
+func ReadGlobalConfigFile() {
+	if !util.PathExist(util.CfgFile) {
+		GlobalConfig.Error = fmt.Errorf("e2e config file %s not exist", util.CfgFile)
 		return
 	}
 
-	data, err := ioutil.ReadFile(e2eFile)
+	data, err := ioutil.ReadFile(util.CfgFile)
 	if err != nil {
-		GlobalConfig.Error = fmt.Errorf("read e2e config file %s error: %s", e2eFile, err)
+		GlobalConfig.Error = fmt.Errorf("read e2e config file %s error: %s", util.CfgFile, err)
 		return
 	}
 
 	e2eConfigObject := E2EConfig{}
 	if err := yaml.Unmarshal(data, &e2eConfigObject); err != nil {
-		GlobalConfig.Error = fmt.Errorf("unmarshal e2e config file %s error: %s", e2eFile, err)
+		GlobalConfig.Error = fmt.Errorf("unmarshal e2e config file %s error: %s", util.CfgFile, err)
 		return
 	}
 
diff --git a/internal/config/globalConfig.go b/internal/util/config.go
similarity index 50%
copy from internal/config/globalConfig.go
copy to internal/util/config.go
index c796962..15e38e1 100644
--- a/internal/config/globalConfig.go
+++ b/internal/util/config.go
@@ -1,4 +1,3 @@
-//
 // Licensed to Apache Software Foundation (ASF) under one or more contributor
 // license agreements. See the NOTICE file distributed with
 // this work for additional information regarding copyright
@@ -15,48 +14,34 @@
 // KIND, either express or implied.  See the License for the
 // specific language governing permissions and limitations
 // under the License.
+//
 
-package config
+package util
 
 import (
-	"fmt"
-	"io/ioutil"
+	"path"
+	"path/filepath"
 
 	"github.com/apache/skywalking-infra-e2e/internal/logger"
-	"github.com/apache/skywalking-infra-e2e/internal/util"
-
-	"gopkg.in/yaml.v2"
 )
 
-// GlobalE2EConfig store E2EConfig which can be used globally.
-type GlobalE2EConfig struct {
-	Error     error
-	E2EConfig E2EConfig
-}
-
-var GlobalConfig GlobalE2EConfig
-
-func ReadGlobalConfigFile(configFilePath string) {
-	e2eFile := configFilePath
+var CfgFile string
 
-	if !util.PathExist(e2eFile) {
-		GlobalConfig.Error = fmt.Errorf("e2e config file %s not exist", e2eFile)
-		return
+// ResolveAbs resolves the relative path (relative to CfgFile) to an absolute file path.
+func ResolveAbs(p string) string {
+	if p == "" {
+		return p
 	}
 
-	data, err := ioutil.ReadFile(e2eFile)
-	if err != nil {
-		GlobalConfig.Error = fmt.Errorf("read e2e config file %s error: %s", e2eFile, err)
-		return
+	if path.IsAbs(p) {
+		return p
 	}
 
-	e2eConfigObject := E2EConfig{}
-	if err := yaml.Unmarshal(data, &e2eConfigObject); err != nil {
-		GlobalConfig.Error = fmt.Errorf("unmarshal e2e config file %s error: %s", e2eFile, err)
-		return
+	abs, err := filepath.Abs(CfgFile)
+	if err != nil {
+		logger.Log.Warnf("failed to resolve the absolute file path of %v\n", CfgFile)
+		return p
 	}
 
-	GlobalConfig.E2EConfig = e2eConfigObject
-	GlobalConfig.Error = nil
-	logger.Log.Info("load the e2e config successfully")
+	return filepath.Join(filepath.Dir(abs), p)
 }
diff --git a/internal/util/k8s.go b/internal/util/k8s.go
index 04acf71..9a1f435 100644
--- a/internal/util/k8s.go
+++ b/internal/util/k8s.go
@@ -71,6 +71,7 @@ func GetManifests(manifests string) (files []string, err error) {
 	files = strings.Split(manifests, ",")
 	// file or directory
 	for _, f := range files {
+		f = ResolveAbs(f)
 		fi, err := os.Stat(f)
 		if err != nil {
 			return nil, err
@@ -78,12 +79,13 @@ func GetManifests(manifests string) (files []string, err error) {
 
 		switch mode := fi.Mode(); {
 		case mode.IsDir():
-			err := filepath.Walk(fi.Name(), func(path string, info os.FileInfo, err error) error {
+			err := filepath.Walk(f, func(path string, info os.FileInfo, err error) error {
 				if err != nil {
 					return err
 				}
-				filename := info.Name()
-				if strings.HasSuffix(filename, ".yml") || strings.HasSuffix(filename, ".yaml") {
+
+				if strings.HasSuffix(path, ".yml") || strings.HasSuffix(path, ".yaml") {
+					path = ResolveAbs(path)
 					s = append(s, path)
 				}
 				return nil
@@ -94,6 +96,7 @@ func GetManifests(manifests string) (files []string, err error) {
 		case mode.IsRegular():
 			filename := fi.Name()
 			if strings.HasSuffix(filename, ".yml") || strings.HasSuffix(filename, ".yaml") {
+				filename = ResolveAbs(filename)
 				s = append(s, filename)
 			}
 		}