diff --git a/e2e/addon/mock/testrepo/helm-repo/bar-v1.0.0.tgz b/e2e/addon/mock/testrepo/helm-repo/bar-v1.0.0.tgz new file mode 100644 index 000000000..400586602 Binary files /dev/null and b/e2e/addon/mock/testrepo/helm-repo/bar-v1.0.0.tgz differ diff --git a/e2e/addon/mock/testrepo/helm-repo/bar-v2.0.0.tgz b/e2e/addon/mock/testrepo/helm-repo/bar-v2.0.0.tgz new file mode 100644 index 000000000..a53310f88 Binary files /dev/null and b/e2e/addon/mock/testrepo/helm-repo/bar-v2.0.0.tgz differ diff --git a/e2e/addon/mock/testrepo/helm-repo/foo-v1.0.0.tgz b/e2e/addon/mock/testrepo/helm-repo/foo-v1.0.0.tgz new file mode 100644 index 000000000..e835e8848 Binary files /dev/null and b/e2e/addon/mock/testrepo/helm-repo/foo-v1.0.0.tgz differ diff --git a/e2e/addon/mock/testrepo/helm-repo/index.yaml b/e2e/addon/mock/testrepo/helm-repo/index.yaml index 8d5bc3211..f10666a8c 100644 --- a/e2e/addon/mock/testrepo/helm-repo/index.yaml +++ b/e2e/addon/mock/testrepo/helm-repo/index.yaml @@ -34,4 +34,30 @@ entries: urls: - http://127.0.0.1:9098/helm/vela-workflow-v0.3.1.tgz version: v0.3.1 + foo: + - created: "2022-10-29T09:11:16.865230605Z" + description: Vela test addon named foo + home: https://www.foo.com/icon + icon: https://www.foo.com + name: foo + urls: + - http://127.0.0.1:9098/helm/foo-v1.0.0.tgz + version: v1.0.0 + bar: + - created: "2022-10-29T09:11:16.865230605Z" + description: Vela test addon named bar + home: https://www.bar.com/icon + icon: https://www.bar.com + name: foo + urls: + - http://127.0.0.1:9098/helm/bar-v1.0.0.tgz + version: v1.0.0 + - created: "2022-10-29T09:11:16.865230605Z" + description: Vela test addon named bar + home: https://www.bar.com/icon + icon: https://www.bar.com + name: foo + urls: + - http://127.0.0.1:9098/helm/bar-v2.0.0.tgz + version: v2.0.0 generated: "2022-06-15T13:17:04.733573+08:00" \ No newline at end of file diff --git a/e2e/addon/mock/vela_addon_mock_server.go b/e2e/addon/mock/vela_addon_mock_server.go index 2808a4c69..a9e399a6b 100644 --- a/e2e/addon/mock/vela_addon_mock_server.go +++ b/e2e/addon/mock/vela_addon_mock_server.go @@ -131,6 +131,24 @@ var helmHandler http.HandlerFunc = func(rw http.ResponseWriter, req *http.Reques _, _ = rw.Write([]byte(err.Error())) } rw.Write(file) + case strings.Contains(req.URL.Path, "foo-v1.0.0.tgz"): + file, err := os.ReadFile("./e2e/addon/mock/testrepo/helm-repo/foo-v1.0.0.tgz") + if err != nil { + _, _ = rw.Write([]byte(err.Error())) + } + rw.Write(file) + case strings.Contains(req.URL.Path, "bar-v1.0.0.tgz"): + file, err := os.ReadFile("./e2e/addon/mock/testrepo/helm-repo/bar-v1.0.0.tgz") + if err != nil { + _, _ = rw.Write([]byte(err.Error())) + } + rw.Write(file) + case strings.Contains(req.URL.Path, "bar-v2.0.0.tgz"): + file, err := os.ReadFile("./e2e/addon/mock/testrepo/helm-repo/bar-v2.0.0.tgz") + if err != nil { + _, _ = rw.Write([]byte(err.Error())) + } + rw.Write(file) } } diff --git a/pkg/addon/addon.go b/pkg/addon/addon.go index 70b28a852..a3d2c4f8b 100644 --- a/pkg/addon/addon.go +++ b/pkg/addon/addon.go @@ -953,7 +953,7 @@ func (h *Installer) installDependency(addon *InstallPackage) error { continue } // always install addon's latest version - depAddon, err := h.loadInstallPackage(dep.Name, "") + depAddon, err := h.loadInstallPackage(dep.Name, dep.Version) if err != nil { return err } diff --git a/pkg/addon/type.go b/pkg/addon/type.go index f3326babf..1633cd43c 100644 --- a/pkg/addon/type.go +++ b/pkg/addon/type.go @@ -105,7 +105,8 @@ type DeployTo struct { // Dependency defines the other addons it depends on type Dependency struct { - Name string `json:"name,omitempty"` + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` } // ElementFile can be addon's definition or addon's component diff --git a/test/e2e-apiserver-test/addon_test.go b/test/e2e-apiserver-test/addon_test.go index fc8dc4fd9..2636e381b 100644 --- a/test/e2e-apiserver-test/addon_test.go +++ b/test/e2e-apiserver-test/addon_test.go @@ -213,4 +213,23 @@ var _ = Describe("Test addon rest api", func() { Expect(strings.Contains(errResponse.Message, "fail to install")) }) }) + + Describe("Test addon dependency installed version", func() { + It("Test Operation of enabling foo addon will enable bar addon automatically", func() { + req := apisv1.EnableAddonRequest{} + res := post("/addons/foo/enable", req) + defer res.Body.Close() + var addon apisv1.AddonStatusResponse + Expect(decodeResponseBody(res, &addon)).Should(Succeed()) + Expect(addon.Name).Should(BeEquivalentTo("foo")) + + Eventually(func(g Gomega) { + status := get("/addons/bar/status") + var newaddonStatus apisv1.AddonStatusResponse + g.Expect(decodeResponseBody(status, &newaddonStatus)).Should(Succeed()) + g.Expect(newaddonStatus.Name).Should(BeEquivalentTo("bar")) + g.Expect(newaddonStatus.InstalledVersion).Should(BeEquivalentTo("v1.0.0")) + }, 30*time.Second, 300*time.Millisecond).Should(Succeed()) + }) + }) })