From 2e67238b6190b5114405c665ef0d641389fd455e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 14 Feb 2022 18:40:24 +0800 Subject: [PATCH] Fix: registry don't have enough info to build a reader (#3249) Signed-off-by: barnettZQG (cherry picked from commit 8db1d2b6168639f06838d60b12232a48f90edf27) Co-authored-by: barnettZQG --- pkg/addon/addon.go | 20 ++++++++++++++++++++ pkg/addon/helper.go | 8 ++++++++ pkg/addon/source.go | 1 - references/cli/addon.go | 4 ++-- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/pkg/addon/addon.go b/pkg/addon/addon.go index c12e4e597..2d734ee0c 100644 --- a/pkg/addon/addon.go +++ b/pkg/addon/addon.go @@ -951,6 +951,26 @@ func (h *Installer) installDependency(addon *InstallPackage) error { return nil } +// checkDependency checks if addon's dependency +func (h *Installer) checkDependency(addon *InstallPackage) ([]string, error) { + var app v1beta1.Application + var needEnable []string + for _, dep := range addon.Dependencies { + err := h.cli.Get(h.ctx, client.ObjectKey{ + Namespace: types.DefaultKubeVelaNS, + Name: Convert2AppName(dep.Name), + }, &app) + if err == nil { + continue + } + if !apierrors.IsNotFound(err) { + return nil, err + } + needEnable = append(needEnable, dep.Name) + } + return needEnable, nil +} + func (h *Installer) dispatchAddonResource(addon *InstallPackage) error { app, err := RenderApp(h.ctx, addon, h.config, h.cli, h.args) if err != nil { diff --git a/pkg/addon/helper.go b/pkg/addon/helper.go index c03674f17..30132de0a 100644 --- a/pkg/addon/helper.go +++ b/pkg/addon/helper.go @@ -92,6 +92,14 @@ func EnableAddonByLocalDir(ctx context.Context, name string, dir string, cli cli return err } h := NewAddonInstaller(ctx, cli, applicator, config, &Registry{Name: LocalAddonRegistryName}, args, nil) + needEnableAddonNames, err := h.checkDependency(pkg) + if err != nil { + return err + } + if len(needEnableAddonNames) > 0 { + return fmt.Errorf("you must first enable dependencies: %v", needEnableAddonNames) + } + err = h.enableAddon(pkg) if err != nil { return err diff --git a/pkg/addon/source.go b/pkg/addon/source.go index e386e16ba..9af8509ee 100644 --- a/pkg/addon/source.go +++ b/pkg/addon/source.go @@ -169,7 +169,6 @@ func (r *Registry) BuildReader() (AsyncReader, error) { return NewAsyncReader(g.URL, "", g.Path, g.Token, gitType) } return nil, errors.New("registry don't have enough info to build a reader") - } // GetUIData get UIData of an addon diff --git a/references/cli/addon.go b/references/cli/addon.go index f07b8a3a8..b26fd593b 100644 --- a/references/cli/addon.go +++ b/references/cli/addon.go @@ -140,7 +140,7 @@ func NewAddonEnableCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Com if !file.IsDir() { return fmt.Errorf("%s is not addon dir", addonOrDir) } - ioStream.Infof("enable addon by local dir: %s", addonOrDir) + ioStream.Infof("enable addon by local dir: %s \n", addonOrDir) // args[0] is a local path install with local dir, use base dir name as addonName name = filepath.Base(addonOrDir) err = enableAddonByLocal(ctx, name, addonOrDir, k8sClient, config, addonArgs) @@ -210,7 +210,7 @@ func NewAddonUpgradeCommand(c common.Args, ioStream cmdutil.IOStreams) *cobra.Co if !file.IsDir() { return fmt.Errorf("%s is not addon dir", addonOrDir) } - ioStream.Infof("enable addon by local dir: %s", addonOrDir) + ioStream.Infof("enable addon by local dir: %s \n", addonOrDir) // args[0] is a local path install with local dir name := filepath.Base(addonOrDir) _, err = pkgaddon.FetchAddonRelatedApp(context.Background(), k8sClient, name)