diff --git a/cmd/core/app/server.go b/cmd/core/app/server.go index b26258825..9bc548e71 100644 --- a/cmd/core/app/server.go +++ b/cmd/core/app/server.go @@ -54,7 +54,6 @@ import ( "github.com/oam-dev/kubevela/pkg/monitor/watcher" "github.com/oam-dev/kubevela/pkg/multicluster" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" pkgutil "github.com/oam-dev/kubevela/pkg/utils" "github.com/oam-dev/kubevela/pkg/utils/common" "github.com/oam-dev/kubevela/pkg/utils/util" @@ -177,12 +176,6 @@ func run(ctx context.Context, s *options.CoreOptions) error { return err } - dm, err := discoverymapper.New(mgr.GetConfig()) - if err != nil { - klog.ErrorS(err, "Failed to create CRD discovery client") - return err - } - s.ControllerArgs.DiscoveryMapper = dm pd, err := packages.NewPackageDiscover(mgr.GetConfig()) if err != nil { klog.Error(err, "Failed to create CRD discovery for CUE package client") diff --git a/hack/docgen/def/mods/component.go b/hack/docgen/def/mods/component.go index 0eaf42bd1..bc306808e 100644 --- a/hack/docgen/def/mods/component.go +++ b/hack/docgen/def/mods/component.go @@ -23,7 +23,7 @@ import ( "strings" "time" - "k8s.io/klog/v2" + "github.com/kubevela/pkg/util/singleton" "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/utils/common" @@ -91,13 +91,8 @@ func ComponentDef(ctx context.Context, c common.Args, opt Options) { CustomDocHeader: CustomComponentHeaderEN, } ref.Local = &docgen.FromLocal{Paths: ComponentDefDirs} + ref.Client = singleton.KubeClient.Get() - dm, err := c.GetDiscoveryMapper() - if err != nil { - klog.ErrorS(err, "failed to get discovery mapper") - return - } - ref.DiscoveryMapper = dm if opt.Path != "" { ref.I18N = &docgen.En if strings.Contains(opt.Location, "zh") || strings.Contains(opt.Location, "chinese") { diff --git a/hack/docgen/def/mods/policy.go b/hack/docgen/def/mods/policy.go index 8fa51bf7e..b18df2e8e 100644 --- a/hack/docgen/def/mods/policy.go +++ b/hack/docgen/def/mods/policy.go @@ -23,6 +23,8 @@ import ( "strings" "time" + "github.com/kubevela/pkg/util/singleton" + "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/utils/common" "github.com/oam-dev/kubevela/references/docgen" @@ -89,6 +91,8 @@ func PolicyDef(ctx context.Context, c common.Args, opt Options) { CustomDocHeader: CustomPolicyHeaderEN, } ref.Local = &docgen.FromLocal{Paths: PolicyDefDirs} + ref.Client = singleton.KubeClient.Get() + if opt.Path != "" { ref.I18N = &docgen.En if strings.Contains(opt.Location, "zh") || strings.Contains(opt.Location, "chinese") { diff --git a/hack/docgen/def/mods/trait.go b/hack/docgen/def/mods/trait.go index d41c441df..9376f84de 100644 --- a/hack/docgen/def/mods/trait.go +++ b/hack/docgen/def/mods/trait.go @@ -23,6 +23,8 @@ import ( "strings" "time" + "github.com/kubevela/pkg/util/singleton" + "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/utils/common" "github.com/oam-dev/kubevela/references/docgen" @@ -88,9 +90,8 @@ func TraitDef(ctx context.Context, c common.Args, opt Options) { }, CustomDocHeader: CustomTraitHeaderEN, } - ref.Local = &docgen.FromLocal{ - Paths: TraitDefDirs, - } + ref.Local = &docgen.FromLocal{Paths: TraitDefDirs} + ref.Client = singleton.KubeClient.Get() if opt.Path != "" { ref.I18N = &docgen.En diff --git a/hack/docgen/def/mods/workflow.go b/hack/docgen/def/mods/workflow.go index f7686d3d0..0d047b764 100644 --- a/hack/docgen/def/mods/workflow.go +++ b/hack/docgen/def/mods/workflow.go @@ -23,6 +23,8 @@ import ( "strings" "time" + "github.com/kubevela/pkg/util/singleton" + "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/utils/common" "github.com/oam-dev/kubevela/references/docgen" @@ -91,6 +93,7 @@ func WorkflowDef(ctx context.Context, c common.Args, opt Options) { CustomDocHeader: CustomWorkflowHeaderEN, } ref.Local = &docgen.FromLocal{Paths: opt.DefDirs} + ref.Client = singleton.KubeClient.Get() if opt.Path != "" { ref.I18N = &docgen.En diff --git a/pkg/addon/suite_test.go b/pkg/addon/suite_test.go index da6afdf6b..da2928467 100644 --- a/pkg/addon/suite_test.go +++ b/pkg/addon/suite_test.go @@ -41,8 +41,6 @@ import ( coreoam "github.com/oam-dev/kubevela/apis/core.oam.dev" "github.com/kubevela/workflow/pkg/cue/packages" - - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" // +kubebuilder:scaffold:imports ) @@ -50,7 +48,6 @@ var cfg *rest.Config var scheme *runtime.Scheme var k8sClient client.Client var testEnv *envtest.Environment -var dm discoverymapper.DiscoveryMapper var pd *packages.PackageDiscover var testns string var dc *discovery.DiscoveryClient @@ -90,9 +87,6 @@ var _ = BeforeSuite(func() { Expect(err).ToNot(HaveOccurred()) Expect(dc).ShouldNot(BeNil()) - dm, err = discoverymapper.New(cfg) - Expect(err).ToNot(HaveOccurred()) - Expect(dm).ToNot(BeNil()) pd, err = packages.NewPackageDiscover(cfg) Expect(err).ToNot(HaveOccurred()) Expect(pd).ToNot(BeNil()) diff --git a/pkg/appfile/dryrun/diff.go b/pkg/appfile/dryrun/diff.go index 8a9e51142..158378aa5 100644 --- a/pkg/appfile/dryrun/diff.go +++ b/pkg/appfile/dryrun/diff.go @@ -37,13 +37,12 @@ import ( "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/appfile" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) // NewLiveDiffOption creates a live-diff option -func NewLiveDiffOption(c client.Client, cfg *rest.Config, dm discoverymapper.DiscoveryMapper, pd *packages.PackageDiscover, as []oam.Object) *LiveDiffOption { - parser := appfile.NewApplicationParser(c, dm, pd) - return &LiveDiffOption{DryRun: NewDryRunOption(c, cfg, dm, pd, as, false), Parser: parser} +func NewLiveDiffOption(c client.Client, cfg *rest.Config, pd *packages.PackageDiscover, as []oam.Object) *LiveDiffOption { + parser := appfile.NewApplicationParser(c, pd) + return &LiveDiffOption{DryRun: NewDryRunOption(c, cfg, pd, as, false), Parser: parser} } // ManifestKind enums the kind of OAM objects diff --git a/pkg/appfile/dryrun/diff_test.go b/pkg/appfile/dryrun/diff_test.go index 74515b5b9..be41077fc 100644 --- a/pkg/appfile/dryrun/diff_test.go +++ b/pkg/appfile/dryrun/diff_test.go @@ -153,8 +153,8 @@ var _ = Describe("Test Live-Diff", func() { It("Test renderless diff", func() { liveDiffOpt := LiveDiffOption{ - DryRun: NewDryRunOption(k8sClient, cfg, dm, pd, nil, false), - Parser: appfile.NewApplicationParser(k8sClient, dm, pd), + DryRun: NewDryRunOption(k8sClient, cfg, pd, nil, false), + Parser: appfile.NewApplicationParser(k8sClient, pd), } applyFile := func(filename string, ns string) { bs, err := os.ReadFile("./testdata/" + filename) diff --git a/pkg/appfile/dryrun/dryrun.go b/pkg/appfile/dryrun/dryrun.go index 187518bc5..359a27db4 100644 --- a/pkg/appfile/dryrun/dryrun.go +++ b/pkg/appfile/dryrun/dryrun.go @@ -43,7 +43,6 @@ import ( "github.com/oam-dev/kubevela/pkg/appfile" "github.com/oam-dev/kubevela/pkg/cue/definition" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" oamutil "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/policy/envbinding" "github.com/oam-dev/kubevela/pkg/utils" @@ -57,9 +56,9 @@ type DryRun interface { } // NewDryRunOption creates a dry-run option -func NewDryRunOption(c client.Client, cfg *rest.Config, dm discoverymapper.DiscoveryMapper, pd *packages.PackageDiscover, as []oam.Object, serverSideDryRun bool) *Option { - parser := appfile.NewDryRunApplicationParser(c, dm, pd, as) - return &Option{c, dm, pd, parser, parser.GenerateAppFileFromApp, cfg, as, serverSideDryRun} +func NewDryRunOption(c client.Client, cfg *rest.Config, pd *packages.PackageDiscover, as []oam.Object, serverSideDryRun bool) *Option { + parser := appfile.NewDryRunApplicationParser(c, pd, as) + return &Option{c, pd, parser, parser.GenerateAppFileFromApp, cfg, as, serverSideDryRun} } // GenerateAppFileFunc generate the app file model from an application @@ -68,7 +67,6 @@ type GenerateAppFileFunc func(ctx context.Context, app *v1beta1.Application) (*a // Option contains options to execute dry-run type Option struct { Client client.Client - DiscoveryMapper discoverymapper.DiscoveryMapper PackageDiscover *packages.PackageDiscover Parser *appfile.Parser GenerateAppFile GenerateAppFileFunc @@ -225,7 +223,7 @@ func (d *Option) ExecuteDryRunWithPolicies(ctx context.Context, application *v1b } else { ctx = oamutil.SetNamespaceInCtx(ctx, app.Namespace) } - parser := appfile.NewDryRunApplicationParser(d.Client, d.DiscoveryMapper, d.PackageDiscover, d.Auxiliaries) + parser := appfile.NewDryRunApplicationParser(d.Client, d.PackageDiscover, d.Auxiliaries) af, err := parser.GenerateAppFileFromApp(ctx, app) if err != nil { return err diff --git a/pkg/appfile/dryrun/suit_test.go b/pkg/appfile/dryrun/suit_test.go index 0ebf217cc..85f6904ff 100644 --- a/pkg/appfile/dryrun/suit_test.go +++ b/pkg/appfile/dryrun/suit_test.go @@ -47,7 +47,6 @@ import ( coreoam "github.com/oam-dev/kubevela/apis/core.oam.dev" "github.com/oam-dev/kubevela/pkg/appfile" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" oamutil "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -55,7 +54,6 @@ var cfg *rest.Config var scheme *runtime.Scheme var k8sClient client.Client var testEnv *envtest.Environment -var dm discoverymapper.DiscoveryMapper var pd *packages.PackageDiscover var dryrunOpt *Option var diffOpt *LiveDiffOption @@ -87,9 +85,6 @@ var _ = BeforeSuite(func() { k8sClient, err = client.New(cfg, client.Options{Scheme: scheme}) Expect(err).ToNot(HaveOccurred()) Expect(k8sClient).ToNot(BeNil()) - dm, err = discoverymapper.New(cfg) - Expect(err).ToNot(HaveOccurred()) - Expect(dm).ToNot(BeNil()) pd, err = packages.NewPackageDiscover(cfg) Expect(err).ToNot(HaveOccurred()) Expect(pd).ToNot(BeNil()) @@ -118,8 +113,8 @@ var _ = BeforeSuite(func() { wfsd.SetNamespace(types.DefaultKubeVelaNS) Expect(k8sClient.Create(context.TODO(), &wfsd)).Should(BeNil()) - dryrunOpt = NewDryRunOption(k8sClient, cfg, dm, pd, []oam.Object{cdMyWorker, tdMyIngress}, false) - diffOpt = &LiveDiffOption{DryRun: dryrunOpt, Parser: appfile.NewApplicationParser(k8sClient, dm, pd)} + dryrunOpt = NewDryRunOption(k8sClient, cfg, pd, []oam.Object{cdMyWorker, tdMyIngress}, false) + diffOpt = &LiveDiffOption{DryRun: dryrunOpt, Parser: appfile.NewApplicationParser(k8sClient, pd)} }) var _ = AfterSuite(func() { diff --git a/pkg/appfile/parser.go b/pkg/appfile/parser.go index b9c1b8ec2..83c99c021 100644 --- a/pkg/appfile/parser.go +++ b/pkg/appfile/parser.go @@ -45,7 +45,6 @@ import ( "github.com/oam-dev/kubevela/pkg/features" "github.com/oam-dev/kubevela/pkg/monitor/metrics" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" policypkg "github.com/oam-dev/kubevela/pkg/policy" "github.com/oam-dev/kubevela/pkg/utils" @@ -54,36 +53,33 @@ import ( ) // TemplateLoaderFn load template of a capability definition -type TemplateLoaderFn func(context.Context, discoverymapper.DiscoveryMapper, client.Reader, string, types.CapType) (*Template, error) +type TemplateLoaderFn func(context.Context, client.Client, string, types.CapType) (*Template, error) // LoadTemplate load template of a capability definition -func (fn TemplateLoaderFn) LoadTemplate(ctx context.Context, dm discoverymapper.DiscoveryMapper, c client.Reader, capName string, capType types.CapType) (*Template, error) { - return fn(ctx, dm, c, capName, capType) +func (fn TemplateLoaderFn) LoadTemplate(ctx context.Context, c client.Client, capName string, capType types.CapType) (*Template, error) { + return fn(ctx, c, capName, capType) } // Parser is an application parser type Parser struct { client client.Client - dm discoverymapper.DiscoveryMapper pd *packages.PackageDiscover tmplLoader TemplateLoaderFn } // NewApplicationParser create appfile parser -func NewApplicationParser(cli client.Client, dm discoverymapper.DiscoveryMapper, pd *packages.PackageDiscover) *Parser { +func NewApplicationParser(cli client.Client, pd *packages.PackageDiscover) *Parser { return &Parser{ client: cli, - dm: dm, pd: pd, tmplLoader: LoadTemplate, } } // NewDryRunApplicationParser create an appfile parser for DryRun -func NewDryRunApplicationParser(cli client.Client, dm discoverymapper.DiscoveryMapper, pd *packages.PackageDiscover, defs []oam.Object) *Parser { +func NewDryRunApplicationParser(cli client.Client, pd *packages.PackageDiscover, defs []oam.Object) *Parser { return &Parser{ client: cli, - dm: dm, pd: pd, tmplLoader: DryRunTemplateLoader(defs), } @@ -536,7 +532,7 @@ func (p *Parser) parseWorkflowStep(ctx context.Context, af *Appfile, workflowSte } func (p *Parser) makeWorkload(ctx context.Context, name, typ string, capType types.CapType, props *runtime.RawExtension) (*Workload, error) { - templ, err := p.tmplLoader.LoadTemplate(ctx, p.dm, p.client, typ, capType) + templ, err := p.tmplLoader.LoadTemplate(ctx, p.client, typ, capType) if err != nil { return nil, errors.WithMessagef(err, "fetch component/policy type of %s", name) } @@ -544,7 +540,7 @@ func (p *Parser) makeWorkload(ctx context.Context, name, typ string, capType typ } func (p *Parser) makeWorkloadFromRevision(name, typ string, capType types.CapType, props *runtime.RawExtension, appRev *v1beta1.ApplicationRevision) (*Workload, error) { - templ, err := LoadTemplateFromRevision(typ, capType, appRev, p.dm) + templ, err := LoadTemplateFromRevision(typ, capType, appRev, p.client.RESTMapper()) if err != nil { return nil, errors.WithMessagef(err, "fetch component/policy type of %s from revision", name) } @@ -611,7 +607,7 @@ func (p *Parser) parseTraits(ctx context.Context, workload *Workload, comp commo func (p *Parser) parseScopes(ctx context.Context, workload *Workload, comp common.ApplicationComponent) error { for scopeType, instanceName := range comp.Scopes { - sd, gvk, err := GetScopeDefAndGVK(ctx, p.client, p.dm, scopeType) + sd, gvk, err := GetScopeDefAndGVK(ctx, p.client, scopeType) if err != nil { return err } @@ -709,7 +705,7 @@ func (p *Parser) ParseWorkloadFromRevisionAndClient(ctx context.Context, comp co for scopeType, instanceName := range comp.Scopes { sd, gvk, err := GetScopeDefAndGVKFromRevision(scopeType, appRev) if IsNotFoundInAppRevision(err) { - sd, gvk, err = GetScopeDefAndGVK(ctx, p.client, p.dm, scopeType) + sd, gvk, err = GetScopeDefAndGVK(ctx, p.client, scopeType) } if err != nil { return nil, err @@ -725,7 +721,7 @@ func (p *Parser) ParseWorkloadFromRevisionAndClient(ctx context.Context, comp co } func (p *Parser) parseTrait(ctx context.Context, name string, properties map[string]interface{}) (*Trait, error) { - templ, err := p.tmplLoader.LoadTemplate(ctx, p.dm, p.client, name, types.TypeTrait) + templ, err := p.tmplLoader.LoadTemplate(ctx, p.client, name, types.TypeTrait) if kerrors.IsNotFound(err) { return nil, errors.Errorf("trait definition of %s not found", name) } @@ -736,7 +732,7 @@ func (p *Parser) parseTrait(ctx context.Context, name string, properties map[str } func (p *Parser) parseTraitFromRevision(name string, properties map[string]interface{}, appRev *v1beta1.ApplicationRevision) (*Trait, error) { - templ, err := LoadTemplateFromRevision(name, types.TypeTrait, appRev, p.dm) + templ, err := LoadTemplateFromRevision(name, types.TypeTrait, appRev, p.client.RESTMapper()) if err != nil { return nil, err } @@ -773,15 +769,14 @@ func (p *Parser) ValidateComponentNames(app *v1beta1.Application) (int, error) { } // GetScopeDefAndGVK get grouped an API version of the given scope -func GetScopeDefAndGVK(ctx context.Context, cli client.Reader, dm discoverymapper.DiscoveryMapper, - name string) (*v1beta1.ScopeDefinition, metav1.GroupVersionKind, error) { +func GetScopeDefAndGVK(ctx context.Context, cli client.Client, name string) (*v1beta1.ScopeDefinition, metav1.GroupVersionKind, error) { var gvk metav1.GroupVersionKind sd := new(v1beta1.ScopeDefinition) err := util.GetDefinition(ctx, cli, sd, name) if err != nil { return nil, gvk, err } - gvk, err = util.GetGVKFromDefinition(dm, sd.Spec.Reference) + gvk, err = util.GetGVKFromDefinition(cli.RESTMapper(), sd.Spec.Reference) if err != nil { return nil, gvk, err } diff --git a/pkg/appfile/parser_test.go b/pkg/appfile/parser_test.go index 9d03d79ea..2d95c89ff 100644 --- a/pkg/appfile/parser_test.go +++ b/pkg/appfile/parser_test.go @@ -32,13 +32,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/yaml" workflowv1alpha1 "github.com/kubevela/workflow/api/v1alpha1" "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/types" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/pkg/oam/util" @@ -266,21 +266,21 @@ var _ = Describe("Test application parser", func() { }, } - appfile, err := NewApplicationParser(&tclient, dm, pd).GenerateAppFile(context.TODO(), &o) + appfile, err := NewApplicationParser(&tclient, pd).GenerateAppFile(context.TODO(), &o) Expect(err).ShouldNot(HaveOccurred()) Expect(equal(expectedExceptApp, appfile)).Should(BeTrue()) notfound := v1beta1.Application{} err = yaml.Unmarshal([]byte(appfileYaml2), ¬found) Expect(err).ShouldNot(HaveOccurred()) - _, err = NewApplicationParser(&tclient, dm, pd).GenerateAppFile(context.TODO(), ¬found) + _, err = NewApplicationParser(&tclient, pd).GenerateAppFile(context.TODO(), ¬found) Expect(err).Should(HaveOccurred()) By("app with empty policy") emptyPolicy := v1beta1.Application{} err = yaml.Unmarshal([]byte(appfileYamlEmptyPolicy), &emptyPolicy) Expect(err).ShouldNot(HaveOccurred()) - _, err = NewApplicationParser(&tclient, dm, pd).GenerateAppFile(context.TODO(), &emptyPolicy) + _, err = NewApplicationParser(&tclient, pd).GenerateAppFile(context.TODO(), &emptyPolicy) Expect(err).Should(HaveOccurred()) Expect(err.Error()).Should(ContainSubstring("have empty properties")) }) @@ -440,7 +440,7 @@ patch: spec: replicas: parameter.replicas It("Test we can parse an application revision to an appFile 1", func() { - appfile, err := NewApplicationParser(&mockClient, dm, pd).GenerateAppFile(context.TODO(), &app) + appfile, err := NewApplicationParser(&mockClient, pd).GenerateAppFile(context.TODO(), &app) Expect(err).ShouldNot(HaveOccurred()) Expect(equal(expectedExceptAppfile, appfile)).Should(BeTrue()) Expect(len(appfile.WorkflowSteps) > 0 && @@ -470,7 +470,7 @@ patch: spec: replicas: parameter.replicas It("Test we can parse an application revision to an appFile 2", func() { - appfile, err := NewApplicationParser(&mockClient, dm, pd).GenerateAppFile(context.TODO(), &app) + appfile, err := NewApplicationParser(&mockClient, pd).GenerateAppFile(context.TODO(), &app) Expect(err).ShouldNot(HaveOccurred()) Expect(equal(expectedExceptAppfile, appfile)).Should(BeTrue()) Expect(len(appfile.WorkflowSteps) > 0 && @@ -501,7 +501,7 @@ patch: spec: replicas: parameter.replicas It("Test we can parse an application revision to an appFile 3", func() { - _, err := NewApplicationParser(&mockClient, dm, pd).GenerateAppFile(context.TODO(), &app) + _, err := NewApplicationParser(&mockClient, pd).GenerateAppFile(context.TODO(), &app) Expect(err).Should(HaveOccurred()) Expect(err.Error() == "failed to get workflow step definition apply-application-unknown: not found").Should(BeTrue()) }) @@ -557,7 +557,7 @@ func TestParser_parseTraits(t *testing.T) { }, }, }, - mockTemplateLoaderFn: func(context.Context, discoverymapper.DiscoveryMapper, client.Reader, string, types.CapType) (*Template, error) { + mockTemplateLoaderFn: func(context.Context, client.Client, string, types.CapType) (*Template, error) { return nil, fmt.Errorf("unsupported key not found") }, wantErr: assert.Error, @@ -578,7 +578,7 @@ func TestParser_parseTraits(t *testing.T) { workload: &Workload{}, }, wantErr: assert.NoError, - mockTemplateLoaderFn: func(ctx context.Context, mapper discoverymapper.DiscoveryMapper, reader client.Reader, s string, capType types.CapType) (*Template, error) { + mockTemplateLoaderFn: func(ctx context.Context, reader client.Client, s string, capType types.CapType) (*Template, error) { return &Template{ TemplateStr: "template", CapabilityCategory: "network", @@ -592,7 +592,7 @@ func TestParser_parseTraits(t *testing.T) { }, } - p := NewApplicationParser(nil, dm, pd) + p := NewApplicationParser(nil, pd) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { p.tmplLoader = tt.mockTemplateLoaderFn @@ -671,7 +671,7 @@ func TestParser_parseScopes(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - p := NewApplicationParser(&test.MockClient{MockGet: tt.mockGetFunc}, dm, pd) + p := NewApplicationParser(&test.MockClient{MockGet: tt.mockGetFunc}, pd) p.tmplLoader = tt.mockTemplateLoaderFn err := p.parseScopes(context.Background(), tt.args.workload, tt.args.comp) if !tt.wantErr(t, err, fmt.Sprintf("parseScopes(%v, %v)", tt.args.workload, tt.args.comp)) { @@ -773,7 +773,7 @@ func TestParser_parseTraitsFromRevision(t *testing.T) { }, }, } - p := NewApplicationParser(nil, dm, pd) + p := NewApplicationParser(fake.NewClientBuilder().Build(), pd) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { tt.wantErr(t, p.parseTraitsFromRevision(tt.args.comp, tt.args.appRev, tt.args.workload), fmt.Sprintf("parseTraitsFromRevision(%v, %v, %v)", tt.args.comp, tt.args.appRev, tt.args.workload)) @@ -860,7 +860,7 @@ func TestParser_parseScopesFromRevision(t *testing.T) { }, }, } - p := NewApplicationParser(nil, dm, pd) + p := NewApplicationParser(nil, pd) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { tt.wantErr(t, p.parseScopesFromRevision(tt.args.comp, tt.args.appRev, tt.args.workload), fmt.Sprintf("parseScopesFromRevision(%v, %v, %v)", tt.args.comp, tt.args.appRev, tt.args.workload)) diff --git a/pkg/appfile/suit_test.go b/pkg/appfile/suit_test.go index 5e6ad3939..a639e98d8 100644 --- a/pkg/appfile/suit_test.go +++ b/pkg/appfile/suit_test.go @@ -35,7 +35,6 @@ import ( "github.com/kubevela/workflow/pkg/cue/packages" coreoam "github.com/oam-dev/kubevela/apis/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" // +kubebuilder:scaffold:imports ) @@ -43,7 +42,6 @@ var cfg *rest.Config var scheme *runtime.Scheme var k8sClient client.Client var testEnv *envtest.Environment -var dm discoverymapper.DiscoveryMapper var pd *packages.PackageDiscover func TestAppFile(t *testing.T) { @@ -73,9 +71,6 @@ var _ = BeforeSuite(func() { k8sClient, err = client.New(cfg, client.Options{Scheme: scheme}) Expect(err).ToNot(HaveOccurred()) Expect(k8sClient).ToNot(BeNil()) - dm, err = discoverymapper.New(cfg) - Expect(err).ToNot(HaveOccurred()) - Expect(dm).ToNot(BeNil()) pd, err = packages.NewPackageDiscover(cfg) Expect(err).ToNot(HaveOccurred()) Expect(pd).ToNot(BeNil()) diff --git a/pkg/appfile/template.go b/pkg/appfile/template.go index 977aa3a37..3c28a499c 100644 --- a/pkg/appfile/template.go +++ b/pkg/appfile/template.go @@ -25,6 +25,7 @@ import ( "github.com/kubevela/pkg/multicluster" "github.com/pkg/errors" kerrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -34,7 +35,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" oamutil "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -70,7 +70,7 @@ type Template struct { // LoadTemplate gets the capability definition from cluster and resolve it. // It returns a helper struct, Template, which will be used for further // processing. -func LoadTemplate(ctx context.Context, dm discoverymapper.DiscoveryMapper, cli client.Reader, capName string, capType types.CapType) (*Template, error) { +func LoadTemplate(ctx context.Context, cli client.Client, capName string, capType types.CapType) (*Template, error) { ctx = multicluster.WithCluster(ctx, multicluster.Local) // Application Controller only loads template from ComponentDefinition and TraitDefinition switch capType { @@ -87,7 +87,7 @@ func LoadTemplate(ctx context.Context, dm discoverymapper.DiscoveryMapper, cli c if err != nil { return nil, err } - gvk, err := oamutil.GetGVKFromDefinition(dm, wd.Spec.Reference) + gvk, err := oamutil.GetGVKFromDefinition(cli.RESTMapper(), wd.Spec.Reference) if err != nil { return nil, errors.WithMessagef(err, "get group version kind from component definition [%s]", capName) } @@ -150,7 +150,7 @@ func LoadTemplate(ctx context.Context, dm discoverymapper.DiscoveryMapper, cli c } // LoadTemplateFromRevision will load Definition template from app revision -func LoadTemplateFromRevision(capName string, capType types.CapType, apprev *v1beta1.ApplicationRevision, dm discoverymapper.DiscoveryMapper) (*Template, error) { +func LoadTemplateFromRevision(capName string, capType types.CapType, apprev *v1beta1.ApplicationRevision, mapper meta.RESTMapper) (*Template, error) { if apprev == nil { return nil, errors.Errorf("fail to find template for %s as app revision is empty", capName) } @@ -167,7 +167,7 @@ func LoadTemplateFromRevision(capName string, capType types.CapType, apprev *v1b if err != nil { return nil, err } - gvk, err := oamutil.GetGVKFromDefinition(dm, wd.Spec.Reference) + gvk, err := oamutil.GetGVKFromDefinition(mapper, wd.Spec.Reference) if err != nil { return nil, errors.WithMessagef(err, "Get group version kind from component definition [%s]", capName) } @@ -270,7 +270,7 @@ func verifyRevisionName(capName string, capType types.CapType, apprev *v1beta1.A // LoadTemplate, but load template from provided ones before loading from // cluster through LoadTemplate func DryRunTemplateLoader(defs []oam.Object) TemplateLoaderFn { - return func(ctx context.Context, dm discoverymapper.DiscoveryMapper, r client.Reader, capName string, capType types.CapType) (*Template, error) { + return func(ctx context.Context, r client.Client, capName string, capType types.CapType) (*Template, error) { // retrieve provided cap definitions for _, def := range defs { if unstructDef, ok := def.(*unstructured.Unstructured); ok { @@ -303,7 +303,7 @@ func DryRunTemplateLoader(defs []oam.Object) TemplateLoaderFn { } // not found in provided cap definitions // then try to retrieve from cluster - tmpl, err := LoadTemplate(ctx, dm, r, capName, capType) + tmpl, err := LoadTemplate(ctx, r, capName, capType) if err != nil { return nil, errors.WithMessagef(err, "cannot load template %q from cluster and provided ones", capName) } diff --git a/pkg/appfile/template_test.go b/pkg/appfile/template_test.go index 7ff459519..cf3edd254 100644 --- a/pkg/appfile/template_test.go +++ b/pkg/appfile/template_test.go @@ -113,9 +113,8 @@ spec: return nil }, } - tdm := mock.NewMockDiscoveryMapper() - tdm.MockKindsFor = mock.NewMockKindsFor("Deployment", "v1") - temp, err := LoadTemplate(context.TODO(), tdm, &tclient, "worker", types.TypeComponentDefinition) + + temp, err := LoadTemplate(context.TODO(), &tclient, "worker", types.TypeComponentDefinition) if err != nil { t.Error(err) @@ -209,9 +208,7 @@ spec: return nil }, } - tdm := mock.NewMockDiscoveryMapper() - tdm.MockKindsFor = mock.NewMockKindsFor("Deployment", "v1") - temp, err := LoadTemplate(context.TODO(), tdm, &tclient, "worker", types.TypeComponentDefinition) + temp, err := LoadTemplate(context.TODO(), &tclient, "worker", types.TypeComponentDefinition) if err != nil { t.Error(err) @@ -319,9 +316,7 @@ spec: }, } - tdm := mock.NewMockDiscoveryMapper() - tdm.MockKindsFor = mock.NewMockKindsFor("Deployment", "v1") - temp, err := LoadTemplate(context.TODO(), tdm, &tclient, "ingress", types.TypeTrait) + temp, err := LoadTemplate(context.TODO(), &tclient, "ingress", types.TypeTrait) if err != nil { t.Error(err) @@ -482,7 +477,7 @@ spec: } dryRunLoadTemplate := DryRunTemplateLoader([]oam.Object{unstrctCompDef, unstrctTraitDef}) - compTmpl, err := dryRunLoadTemplate(nil, nil, nil, "myworker", types.TypeComponentDefinition) + compTmpl, err := dryRunLoadTemplate(nil, nil, "myworker", types.TypeComponentDefinition) if err != nil { t.Error("failed load template of component defintion", err) } @@ -490,7 +485,7 @@ spec: t.Fatal("failed load template of component defintion", diff) } - traitTmpl, err := dryRunLoadTemplate(nil, nil, nil, "myingress", types.TypeTrait) + traitTmpl, err := dryRunLoadTemplate(nil, nil, "myingress", types.TypeTrait) if err != nil { t.Error("failed load template of component defintion", err) } diff --git a/pkg/controller/core.oam.dev/oamruntime_controller.go b/pkg/controller/core.oam.dev/oamruntime_controller.go index 3f77e31fd..170279c2d 100644 --- a/pkg/controller/core.oam.dev/oamruntime_controller.go +++ b/pkg/controller/core.oam.dev/oamruntime_controller.go @@ -22,8 +22,6 @@ import ( "github.com/spf13/pflag" "github.com/kubevela/workflow/pkg/cue/packages" - - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) // ApplyOnceOnlyMode enumerates ApplyOnceOnly modes. @@ -67,8 +65,6 @@ type Args struct { // The webhook server will return a customized component revision for oam-runtime CustomRevisionHookURL string - // DiscoveryMapper used for CRD discovery in controller, a K8s client is contained in it. - DiscoveryMapper discoverymapper.DiscoveryMapper // PackageDiscover used for CRD discovery in CUE packages, a K8s client is contained in it. PackageDiscover *packages.PackageDiscover diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go b/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go index c3594694f..c585d1369 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/application_controller.go @@ -61,7 +61,6 @@ import ( "github.com/oam-dev/kubevela/pkg/features" "github.com/oam-dev/kubevela/pkg/monitor/metrics" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" oamutil "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/resourcekeeper" "github.com/oam-dev/kubevela/pkg/resourcetracker" @@ -86,7 +85,6 @@ var ( // Reconciler reconciles an Application object type Reconciler struct { client.Client - dm discoverymapper.DiscoveryMapper pd *packages.PackageDiscover Scheme *runtime.Scheme Recorder event.Recorder @@ -143,7 +141,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu } logCtx.AddTag("publish_version", app.GetAnnotations()[oam.AnnotationPublishVersion]) - appParser := appfile.NewApplicationParser(r.Client, r.dm, r.pd) + appParser := appfile.NewApplicationParser(r.Client, r.pd) handler, err := NewAppHandler(logCtx, r, app, appParser) if err != nil { return r.endWithNegativeCondition(logCtx, app, condition.ReconcileError(err), common.ApplicationStarting) @@ -595,7 +593,6 @@ func Setup(mgr ctrl.Manager, args core.Args) error { Client: mgr.GetClient(), Scheme: mgr.GetScheme(), Recorder: event.NewAPIRecorder(mgr.GetEventRecorderFor("Application")), - dm: args.DiscoveryMapper, pd: args.PackageDiscover, options: parseOptions(args), } diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/assemble/suit_test.go b/pkg/controller/core.oam.dev/v1alpha2/application/assemble/suit_test.go index 5116599be..2cb9451a9 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/assemble/suit_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/assemble/suit_test.go @@ -42,7 +42,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/apis/standard.oam.dev/v1alpha1" "github.com/oam-dev/kubevela/pkg/appfile" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" // +kubebuilder:scaffold:imports ) @@ -96,12 +95,10 @@ var _ = BeforeSuite(func() { k8sClient, err = client.New(cfg, client.Options{Scheme: testScheme}) Expect(err).ToNot(HaveOccurred()) Expect(k8sClient).ToNot(BeNil()) - dm, err := discoverymapper.New(cfg) - Expect(err).To(BeNil()) pd, err := packages.NewPackageDiscover(cfg) Expect(err).To(BeNil()) - appParser = appfile.NewApplicationParser(k8sClient, dm, pd) + appParser = appfile.NewApplicationParser(k8sClient, pd) }) var _ = AfterSuite(func() { diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/generator.go b/pkg/controller/core.oam.dev/v1alpha2/application/generator.go index 10b5ad4b1..9863196c2 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/generator.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/generator.go @@ -127,7 +127,7 @@ func (h *AppHandler) GenerateApplicationSteps(ctx monitorContext.Context, Providers: handlerProviders, PackageDiscover: h.r.pd, ProcessCtx: pCtx, - TemplateLoader: template.NewWorkflowStepTemplateRevisionLoader(appRev, h.r.dm), + TemplateLoader: template.NewWorkflowStepTemplateRevisionLoader(appRev, h.r.Client.RESTMapper()), Client: h.r.Client, StepConvertor: map[string]func(step workflowv1alpha1.WorkflowStep) (workflowv1alpha1.WorkflowStep, error){ wfTypes.WorkflowStepTypeApplyComponent: func(lstep workflowv1alpha1.WorkflowStep) (workflowv1alpha1.WorkflowStep, error) { diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/revision_test.go b/pkg/controller/core.oam.dev/v1alpha2/application/revision_test.go index 0bddcc857..e3cd9be93 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/revision_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/revision_test.go @@ -186,7 +186,7 @@ var _ = Describe("test generate revision ", func() { It("Test application revision compare", func() { By("Apply the application") - appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.dm, reconciler.pd) + appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.pd) ctx = util.SetNamespaceInCtx(ctx, app.Namespace) generatedAppfile, err := appParser.GenerateAppFile(ctx, &app) Expect(err).Should(Succeed()) @@ -209,7 +209,7 @@ var _ = Describe("test generate revision ", func() { It("Test apply success for none rollout case", func() { By("Apply the application") - appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.dm, reconciler.pd) + appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.pd) ctx = util.SetNamespaceInCtx(ctx, app.Namespace) annoKey1 := "testKey1" app.SetAnnotations(map[string]string{annoKey1: "true"}) @@ -433,7 +433,7 @@ var _ = Describe("test generate revision ", func() { It("Test App with rollout template", func() { By("Apply the application") - appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.dm, reconciler.pd) + appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.pd) ctx = util.SetNamespaceInCtx(ctx, app.Namespace) // mark the app as rollout app.SetAnnotations(map[string]string{oam.AnnotationAppRollout: strconv.FormatBool(true)}) @@ -555,7 +555,7 @@ var _ = Describe("test generate revision ", func() { It("Test apply passes all label and annotation from app to appRevision", func() { By("Apply the application") - appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.dm, reconciler.pd) + appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.pd) ctx = util.SetNamespaceInCtx(ctx, app.Namespace) labelKey1 := "labelKey1" app.SetLabels(map[string]string{labelKey1: "true"}) @@ -626,7 +626,7 @@ var _ = Describe("test generate revision ", func() { externalRevisionName1 := "specified-revision-v1" app.Spec.Components[0].ExternalRevision = externalRevisionName1 Expect(k8sClient.Update(ctx, &app)).Should(SatisfyAny(BeNil(), &util.AlreadyExistMatcher{})) - appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.dm, reconciler.pd) + appParser := appfile.NewApplicationParser(reconciler.Client, reconciler.pd) ctx = util.SetNamespaceInCtx(ctx, app.Namespace) generatedAppfile, err := appParser.GenerateAppFile(ctx, &app) Expect(err).Should(Succeed()) @@ -1046,7 +1046,7 @@ status: {} It("Test currentAppRevIsNew func", func() { By("Backport 1.2 version that WorkflowStepDefinitions are not patched to application revision") // generate appfile - appfile, err := appfile.NewApplicationParser(reconciler.Client, reconciler.dm, reconciler.pd).GenerateAppFile(ctx, &app) + appfile, err := appfile.NewApplicationParser(reconciler.Client, reconciler.pd).GenerateAppFile(ctx, &app) ctx = util.SetNamespaceInCtx(ctx, app.Namespace) Expect(err).To(Succeed()) Expect(handler.PrepareCurrentAppRevision(ctx, appfile)).Should(Succeed()) diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go b/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go index 91494d07a..ba28a6f00 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go @@ -55,7 +55,6 @@ import ( "github.com/oam-dev/kubevela/pkg/appfile" "github.com/oam-dev/kubevela/pkg/features" "github.com/oam-dev/kubevela/pkg/multicluster" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" // +kubebuilder:scaffold:imports ) @@ -130,17 +129,14 @@ var _ = BeforeSuite(func() { k8sClient, err = client.New(cfg, client.Options{Scheme: testScheme}) Expect(err).ToNot(HaveOccurred()) Expect(k8sClient).ToNot(BeNil()) - dm, err := discoverymapper.New(cfg) - Expect(err).To(BeNil()) pd, err := packages.NewPackageDiscover(cfg) Expect(err).To(BeNil()) - appParser = appfile.NewApplicationParser(k8sClient, dm, pd) + appParser = appfile.NewApplicationParser(k8sClient, pd) reconciler = &Reconciler{ Client: k8sClient, Scheme: testScheme, - dm: dm, pd: pd, Recorder: event.NewAPIRecorder(recorder), } diff --git a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration.go b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration.go index e10b705e6..ebcc161ef 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration.go +++ b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration.go @@ -48,7 +48,6 @@ import ( "github.com/oam-dev/kubevela/pkg/controller/common" core "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/utils/apply" ) @@ -98,7 +97,7 @@ func Setup(mgr ctrl.Manager, args core.Args) error { RevisionLimit: args.RevisionLimit, CustomRevisionHookURL: args.CustomRevisionHookURL, }). - Complete(NewReconciler(mgr, args.DiscoveryMapper, + Complete(NewReconciler(mgr, WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), WithApplyOnceOnlyMode(args.ApplyMode), WithDependCheckWait(args.DependCheckWait))) @@ -183,13 +182,12 @@ func WithDependCheckWait(dependCheckWait time.Duration) ReconcilerOption { // NewReconciler returns an OAMApplicationReconciler that reconciles ApplicationConfigurations // by rendering and instantiating their Components and Traits. -func NewReconciler(m ctrl.Manager, dm discoverymapper.DiscoveryMapper, o ...ReconcilerOption) *OAMApplicationReconciler { +func NewReconciler(m ctrl.Manager, o ...ReconcilerOption) *OAMApplicationReconciler { r := &OAMApplicationReconciler{ client: m.GetClient(), scheme: m.GetScheme(), components: &components{ client: m.GetClient(), - dm: dm, params: ParameterResolveFn(resolve), workload: ResourceRenderFn(renderWorkload), trait: ResourceRenderFn(renderTrait), @@ -197,7 +195,6 @@ func NewReconciler(m ctrl.Manager, dm discoverymapper.DiscoveryMapper, o ...Reco workloads: &workloads{ applicator: apply.NewAPIApplicator(m.GetClient()), rawClient: m.GetClient(), - dm: dm, }, gc: GarbageCollectorFn(eligible), record: event.NewNopRecorder(), diff --git a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration_test.go b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration_test.go index 77b790c26..c2524713e 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/applicationconfiguration_test.go @@ -701,7 +701,7 @@ func TestReconciler(t *testing.T) { for name, tc := range cases { t.Run(name, func(t *testing.T) { - r := NewReconciler(tc.args.m, nil, tc.args.o...) + r := NewReconciler(tc.args.m, tc.args.o...) got, err := r.Reconcile(context.TODO(), reconcile.Request{}) if diff := cmp.Diff(tc.want.err, err, test.EquateErrors()); diff != "" { @@ -1017,8 +1017,6 @@ func TestDependency(t *testing.T) { }, } - mapper := mock.NewMockDiscoveryMapper() - type args struct { components []v1alpha2.ApplicationConfigurationComponent wl *unstructured.Unstructured @@ -1577,7 +1575,6 @@ func TestDependency(t *testing.T) { for name, tc := range cases { t.Run(name, func(t *testing.T) { c := components{ - dm: mapper, client: &test.MockClient{ MockGet: test.MockGetFn(func(ctx context.Context, key client.ObjectKey, obj client.Object) error { if obj.GetObjectKind().GroupVersionKind().Kind == "Workload" { diff --git a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply.go b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply.go index e97d21197..8c00675d9 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply.go +++ b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply.go @@ -37,7 +37,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/utils/apply" ) @@ -97,7 +96,6 @@ func (fn WorkloadApplyFns) Finalize(ctx context.Context, ac *v1alpha2.Applicatio type workloads struct { applicator apply.Applicator rawClient client.Client - dm discoverymapper.DiscoveryMapper } func (a *workloads) Apply(ctx context.Context, status []v1alpha2.WorkloadStatus, w []Workload, @@ -349,7 +347,7 @@ func findDereferencedScopes(statusScopes []v1alpha2.WorkloadScope, scopes []unst func (a *workloads) applyScope(ctx context.Context, wl Workload, s unstructured.Unstructured, workloadRef corev1.ObjectReference) error { // get ScopeDefinition - scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, a.dm, &s) + scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, &s) if err != nil { return errors.Wrapf(err, errFmtGetScopeDefinition, s.GetAPIVersion(), s.GetKind(), s.GetName()) } @@ -405,7 +403,7 @@ func (a *workloads) applyScopeRemoval(ctx context.Context, namespace string, wr return errors.Wrapf(err, errFmtApplyScope, s.Reference.APIVersion, s.Reference.Kind, s.Reference.Name) } - scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, a.dm, &scopeObject) + scopeDefinition, err := util.FetchScopeDefinition(ctx, a.rawClient, &scopeObject) if err != nil { if apierrors.IsNotFound(err) { // if the scope definition is deleted diff --git a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply_test.go b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply_test.go index 9bc9c0a43..bfc550bf8 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/apply_test.go @@ -36,7 +36,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" - "github.com/oam-dev/kubevela/pkg/oam/mock" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/utils/apply" ) @@ -383,8 +382,7 @@ func TestApplyWorkloads(t *testing.T) { for name, tc := range cases { t.Run(name, func(t *testing.T) { - mapper := mock.NewMockDiscoveryMapper() - w := workloads{applicator: tc.applicator, rawClient: tc.rawClient, dm: mapper} + w := workloads{applicator: tc.applicator, rawClient: tc.rawClient} err := w.Apply(context.TODO(), tc.args.ws, tc.args.w) if diff := cmp.Diff(tc.want, err, test.EquateErrors()); diff != "" { @@ -529,8 +527,7 @@ func TestFinalizeWorkloadScopes(t *testing.T) { for _, tc := range cases { t.Run(tc.caseName, func(t *testing.T) { acTest := ac - mapper := mock.NewMockDiscoveryMapper() - w := workloads{applicator: tc.applicator, rawClient: tc.rawClient, dm: mapper} + w := workloads{applicator: tc.applicator, rawClient: tc.rawClient} err := w.Finalize(ctx, &acTest) if diff := cmp.Diff(tc.wantErr, err, test.EquateErrors()); diff != "" { diff --git a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render.go b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render.go index d7d2a85c5..d5392e18e 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render.go +++ b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render.go @@ -44,7 +44,6 @@ import ( "github.com/oam-dev/kubevela/pkg/controller/common" "github.com/oam-dev/kubevela/pkg/controller/utils" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -91,8 +90,7 @@ var _ ComponentRenderer = &components{} type components struct { // indicate that if this is generated by application - client client.Reader - dm discoverymapper.DiscoveryMapper + client client.Client params ParameterResolver workload ResourceRenderer trait ResourceRenderer @@ -313,7 +311,7 @@ func (r *components) renderTrait(ctx context.Context, ct v1alpha2.ComponentTrait if err != nil { return nil, nil, errors.Wrapf(err, errFmtRenderTrait, componentName) } - traitDef, err := util.FetchTraitDefinition(ctx, r.client, r.dm, t) + traitDef, err := util.FetchTraitDefinition(ctx, r.client, t) if err != nil { if !kerrors.IsNotFound(err) { return nil, nil, errors.Wrapf(err, errFmtGetTraitDefinition, t.GetAPIVersion(), t.GetKind(), t.GetName()) diff --git a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render_test.go b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render_test.go index b8aac25c3..ee589cfcc 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/render_test.go @@ -37,6 +37,7 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" @@ -44,7 +45,6 @@ import ( oamtype "github.com/oam-dev/kubevela/apis/types" helmapi "github.com/oam-dev/kubevela/pkg/appfile/helm/flux2apis" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/mock" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -118,7 +118,7 @@ func TestRender(t *testing.T) { errTrait := errors.New("errTrait") type fields struct { - client client.Reader + client client.Client params ParameterResolver workload ResourceRenderer trait ResourceRenderer @@ -866,8 +866,7 @@ func TestRender(t *testing.T) { } for name, tc := range cases { t.Run(name, func(t *testing.T) { - r := &components{tc.fields.client, mock.NewMockDiscoveryMapper(), tc.fields.params, - tc.fields.workload, tc.fields.trait} + r := &components{tc.fields.client, tc.fields.params, tc.fields.workload, tc.fields.trait} needTemplating := tc.args.ac.Status.RollingStatus != oamtype.RollingTemplated _, isRolling := tc.args.ac.GetAnnotations()[oam.AnnotationAppRollout] got, _, err := r.Render(context.Background(), tc.args.ac) @@ -931,7 +930,7 @@ func TestRender(t *testing.T) { func TestRenderComponent(t *testing.T) { type field struct { - client client.Reader + client client.Client workload ResourceRenderer trait ResourceRenderer } @@ -1184,8 +1183,7 @@ func TestRenderComponent(t *testing.T) { } for name, tc := range cases { t.Run(name, func(t *testing.T) { - r := &components{tc.fields.client, mock.NewMockDiscoveryMapper(), mockParams, - tc.fields.workload, tc.fields.trait} + r := &components{tc.fields.client, mockParams, tc.fields.workload, tc.fields.trait} got, err := r.renderComponent(ctx, tc.args.ac.Spec.Components[0], tc.args.ac, tc.args.isControlledByApp, tc.args.isCompChanged, tc.args.isRollingTemplate, tc.args.dag) if diff := cmp.Diff(tc.want.err, err, test.EquateErrors()); diff != "" { @@ -1498,7 +1496,7 @@ func TestRenderTraitWithoutMetadataName(t *testing.T) { ref := metav1.NewControllerRef(ac, v1alpha2.ApplicationConfigurationGroupVersionKind) type fields struct { - client client.Reader + client client.Client params ParameterResolver workload ResourceRenderer trait ResourceRenderer @@ -1560,8 +1558,7 @@ func TestRenderTraitWithoutMetadataName(t *testing.T) { } for name, tc := range cases { t.Run(name, func(t *testing.T) { - r := &components{tc.fields.client, mock.NewMockDiscoveryMapper(), tc.fields.params, - tc.fields.workload, tc.fields.trait} + r := &components{tc.fields.client, tc.fields.params, tc.fields.workload, tc.fields.trait} got, _, _ := r.Render(context.Background(), tc.args.ac) if len(got) == 0 || len(got[0].Traits) == 0 || got[0].Traits[0].Object.GetName() != util.GenTraitName(componentName, ac.Spec.Components[0].Traits[0].DeepCopy(), "") { t.Errorf("\n%s\nr.Render(...): -want error, +got error:\n%s\n", tc.reason, "Trait name is NOT "+ @@ -1600,8 +1597,7 @@ func TestGetDefinitionName(t *testing.T) { } for name, ti := range tests { t.Run(name, func(t *testing.T) { - m := mock.NewMockDiscoveryMapper() - m.MockRESTMapping = mock.NewMockRESTMapping(ti.resource) + m := fake.NewClientBuilder().Build().RESTMapper() got, err := util.GetDefinitionName(m, ti.u, "") assert.NoError(t, err) if got != ti.exp { diff --git a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/suite_test.go b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/suite_test.go index 1aa7f6006..80a0b80ed 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/suite_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/applicationconfiguration/suite_test.go @@ -46,7 +46,6 @@ import ( core "github.com/oam-dev/kubevela/apis/core.oam.dev" "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" // +kubebuilder:scaffold:imports ) @@ -167,12 +166,9 @@ var _ = BeforeSuite(func() { Expect(k8sClient.Create(context.Background(), &crd)).Should(SatisfyAny(BeNil(), &util.AlreadyExistMatcher{})) By("Created a crd for appconfig dependency test") - dm, err := discoverymapper.New(cfg) - Expect(err).Should(BeNil()) - var mapping *meta.RESTMapping Eventually(func() error { - mapping, err = dm.RESTMapping(schema.GroupKind{ + mapping, err = k8sClient.RESTMapper().RESTMapping(schema.GroupKind{ Group: "example.com", Kind: "Foo", }, "v1") @@ -180,7 +176,7 @@ var _ = BeforeSuite(func() { }, time.Second*30, time.Millisecond*500).Should(BeNil()) Expect(mapping.Resource.Resource).Should(Equal("foo")) - reconciler = NewReconciler(mgr, dm) + reconciler = NewReconciler(mgr) componentHandler = &ComponentHandler{Client: k8sClient, RevisionLimit: 100} By("Creating workload definition and trait definition") diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_controller.go b/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_controller.go index ca8c47c7c..105d51408 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_controller.go @@ -37,7 +37,6 @@ import ( oamctrl "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" coredef "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev/v1alpha2/core" "github.com/oam-dev/kubevela/pkg/controller/utils" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/version" ) @@ -45,7 +44,6 @@ import ( // Reconciler reconciles a ComponentDefinition object type Reconciler struct { client.Client - dm discoverymapper.DiscoveryMapper Scheme *runtime.Scheme record event.Recorder options @@ -144,7 +142,6 @@ func Setup(mgr ctrl.Manager, args oamctrl.Args) error { r := Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: args.DiscoveryMapper, options: parseOptions(args), } return r.SetupWithManager(mgr) diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_suit_test.go b/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_suit_test.go index bfb949957..f94b14c4f 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_suit_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/components/componentdefinition/componentdefinition_suit_test.go @@ -34,7 +34,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/envtest" oamCore "github.com/oam-dev/kubevela/apis/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) var cfg *rest.Config @@ -81,15 +80,10 @@ var _ = BeforeSuite(func() { Port: 48081, }) Expect(err).ToNot(HaveOccurred()) - dm, err := discoverymapper.New(mgr.GetConfig()) - Expect(err).ToNot(HaveOccurred()) - _, err = dm.Refresh() - Expect(err).ToNot(HaveOccurred()) r = Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: dm, options: options{ defRevLimit: defRevisionLimit, }, diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/policydefinition_controller.go b/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/policydefinition_controller.go index 2760e461b..4ee403731 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/policydefinition_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/policydefinition_controller.go @@ -37,7 +37,6 @@ import ( oamctrl "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" coredef "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev/v1alpha2/core" "github.com/oam-dev/kubevela/pkg/controller/utils" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/version" ) @@ -45,7 +44,6 @@ import ( // Reconciler reconciles a PolicyDefinition object type Reconciler struct { client.Client - dm discoverymapper.DiscoveryMapper Scheme *runtime.Scheme record event.Recorder defRevLimit int @@ -149,7 +147,6 @@ func Setup(mgr ctrl.Manager, args oamctrl.Args) error { r := Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: args.DiscoveryMapper, defRevLimit: args.DefRevisionLimit, concurrentReconciles: args.ConcurrentReconciles, ignoreDefNoCtrlReq: args.IgnoreDefinitionWithoutControllerRequirement, diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/suite_test.go b/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/suite_test.go index 05d901fb0..4504d1aa4 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/suite_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/policies/policydefinition/suite_test.go @@ -35,7 +35,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" oamCore "github.com/oam-dev/kubevela/apis/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) var cfg *rest.Config @@ -82,15 +81,9 @@ var _ = BeforeSuite(func() { }) Expect(err).ToNot(HaveOccurred()) - dm, err := discoverymapper.New(mgr.GetConfig()) - Expect(err).ToNot(HaveOccurred()) - _, err = dm.Refresh() - Expect(err).ToNot(HaveOccurred()) - r = Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: dm, defRevLimit: defRevisionLimit, } Expect(r.SetupWithManager(mgr)).ToNot(HaveOccurred()) diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope_controller.go b/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope_controller.go index 69acab6f2..5488c7845 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope_controller.go @@ -49,7 +49,6 @@ import ( controller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" "github.com/oam-dev/kubevela/pkg/multicluster" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/policy/envbinding" ) @@ -85,7 +84,6 @@ type AppInfo struct { func Setup(mgr ctrl.Manager, args controller.Args) error { name := "oam/" + strings.ToLower(v1alpha2.HealthScopeGroupKind) r := NewReconciler(mgr, WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name)))) - r.dm = args.DiscoveryMapper r.pd = args.PackageDiscover return ctrl.NewControllerManagedBy(mgr). Named(name). @@ -96,7 +94,6 @@ func Setup(mgr ctrl.Manager, args controller.Args) error { // A Reconciler reconciles OAM Scopes by keeping track of the health status of components. type Reconciler struct { client client.Client - dm discoverymapper.DiscoveryMapper pd *packages.PackageDiscover record event.Recorder // traitChecker represents checker fetching health condition from HealthCheckTrait @@ -479,7 +476,7 @@ func (r *Reconciler) patchHealthStatusToApplications(ctx context.Context, appHea } func (r *Reconciler) createAppfile(ctx context.Context, appName, ns, envName string) (*af.Appfile, error) { - appParser := af.NewApplicationParser(r.client, r.dm, r.pd) + appParser := af.NewApplicationParser(r.client, r.pd) if len(envName) != 0 { app := &v1beta1.Application{} if err := r.client.Get(ctx, types.NamespacedName{Namespace: ns, Name: appName}, app); err != nil { diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_controller.go b/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_controller.go index c523b2e2a..58cdb32fa 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_controller.go @@ -37,7 +37,6 @@ import ( oamctrl "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" coredef "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev/v1alpha2/core" "github.com/oam-dev/kubevela/pkg/controller/utils" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/version" ) @@ -45,7 +44,6 @@ import ( // Reconciler reconciles a TraitDefinition object type Reconciler struct { client.Client - dm discoverymapper.DiscoveryMapper Scheme *runtime.Scheme record event.Recorder options @@ -151,7 +149,6 @@ func Setup(mgr ctrl.Manager, args oamctrl.Args) error { r := Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: args.DiscoveryMapper, options: parseOptions(args), } return r.SetupWithManager(mgr) diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_suite_test.go b/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_suite_test.go index f9ca8dc17..0bea0cfc6 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_suite_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/traits/traitdefinition/traitdefinition_suite_test.go @@ -34,7 +34,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/envtest" oamCore "github.com/oam-dev/kubevela/apis/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) var cfg *rest.Config @@ -81,15 +80,9 @@ var _ = BeforeSuite(func() { }) Expect(err).ToNot(HaveOccurred()) - dm, err := discoverymapper.New(mgr.GetConfig()) - Expect(err).ToNot(HaveOccurred()) - _, err = dm.Refresh() - Expect(err).ToNot(HaveOccurred()) - r = Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: dm, options: options{ defRevLimit: defRevisionLimit, }, diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/suite_test.go b/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/suite_test.go index d253085bb..67320d1bc 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/suite_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/suite_test.go @@ -34,7 +34,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/envtest" oamCore "github.com/oam-dev/kubevela/apis/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) var cfg *rest.Config @@ -81,15 +80,9 @@ var _ = BeforeSuite(func() { }) Expect(err).ToNot(HaveOccurred()) - dm, err := discoverymapper.New(mgr.GetConfig()) - Expect(err).ToNot(HaveOccurred()) - _, err = dm.Refresh() - Expect(err).ToNot(HaveOccurred()) - r = Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: dm, options: options{ defRevLimit: defRevisionLimit, }, diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/workflowstepdefinition_controller.go b/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/workflowstepdefinition_controller.go index fdaedcb54..9b2b8329c 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/workflowstepdefinition_controller.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/workflow/workflowstepdefinition/workflowstepdefinition_controller.go @@ -37,7 +37,6 @@ import ( oamctrl "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" coredef "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev/v1alpha2/core" "github.com/oam-dev/kubevela/pkg/controller/utils" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/version" ) @@ -45,7 +44,6 @@ import ( // Reconciler reconciles a WorkflowStepDefinition object type Reconciler struct { client.Client - dm discoverymapper.DiscoveryMapper Scheme *runtime.Scheme record event.Recorder options @@ -151,7 +149,6 @@ func Setup(mgr ctrl.Manager, args oamctrl.Args) error { r := Reconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - dm: args.DiscoveryMapper, options: parseOptions(args), } return r.SetupWithManager(mgr) diff --git a/pkg/controller/utils/utils.go b/pkg/controller/utils/utils.go index f11d2b94c..51419f06a 100644 --- a/pkg/controller/utils/utils.go +++ b/pkg/controller/utils/utils.go @@ -49,7 +49,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/pkg/controller/common" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -259,8 +258,7 @@ func ComputeSpecHash(spec interface{}) (string, error) { // RefreshPackageDiscover help refresh package discover // Deprecated: The function RefreshKubePackagesFromCluster affects performance and the code has been commented a long time. -func RefreshPackageDiscover(ctx context.Context, k8sClient client.Client, dm discoverymapper.DiscoveryMapper, - pd *packages.PackageDiscover, definition runtime.Object) error { +func RefreshPackageDiscover(ctx context.Context, k8sClient client.Client, pd *packages.PackageDiscover, definition runtime.Object) error { var gvk metav1.GroupVersionKind var err error switch def := definition.(type) { @@ -271,7 +269,7 @@ func RefreshPackageDiscover(ctx context.Context, k8sClient client.Client, dm dis if err != nil { return err } - gvk, err = util.GetGVKFromDefinition(dm, workloadDef.Spec.Reference) + gvk, err = util.GetGVKFromDefinition(k8sClient.RESTMapper(), workloadDef.Spec.Reference) if err != nil { return err } @@ -287,17 +285,17 @@ func RefreshPackageDiscover(ctx context.Context, k8sClient client.Client, dm dis } } case *v1beta1.TraitDefinition: - gvk, err = util.GetGVKFromDefinition(dm, def.Spec.Reference) + gvk, err = util.GetGVKFromDefinition(k8sClient.RESTMapper(), def.Spec.Reference) if err != nil { return err } case *v1beta1.PolicyDefinition: - gvk, err = util.GetGVKFromDefinition(dm, def.Spec.Reference) + gvk, err = util.GetGVKFromDefinition(k8sClient.RESTMapper(), def.Spec.Reference) if err != nil { return err } case *v1beta1.WorkflowStepDefinition: - gvk, err = util.GetGVKFromDefinition(dm, def.Spec.Reference) + gvk, err = util.GetGVKFromDefinition(k8sClient.RESTMapper(), def.Spec.Reference) if err != nil { return err } diff --git a/pkg/oam/discoverymapper/mapper.go b/pkg/oam/discoverymapper/mapper.go deleted file mode 100644 index a6516f8cb..000000000 --- a/pkg/oam/discoverymapper/mapper.go +++ /dev/null @@ -1,141 +0,0 @@ -/* -Copyright 2021 The KubeVela Authors. - -Licensed 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. -*/ - -package discoverymapper - -import ( - "sync" - - "github.com/pkg/errors" - - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/discovery" - "k8s.io/client-go/rest" - "k8s.io/client-go/restmapper" -) - -// DiscoveryMapper is a interface for refresh and discovery resources from GVK. -type DiscoveryMapper interface { - GetMapper() (meta.RESTMapper, error) - Refresh() (meta.RESTMapper, error) - RESTMapping(gk schema.GroupKind, version ...string) (*meta.RESTMapping, error) - KindsFor(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error) - ResourcesFor(input schema.GroupVersionKind) (schema.GroupVersionResource, error) -} - -var _ DiscoveryMapper = &DefaultDiscoveryMapper{} - -// DefaultDiscoveryMapper is a K8s resource mapper for discovery, it will cache the result -type DefaultDiscoveryMapper struct { - dc *discovery.DiscoveryClient - mapper meta.RESTMapper - mutex sync.RWMutex -} - -// New will create a new DefaultDiscoveryMapper by giving a K8s rest config -func New(c *rest.Config) (DiscoveryMapper, error) { - dc, err := discovery.NewDiscoveryClientForConfig(c) - if err != nil { - return nil, err - } - return &DefaultDiscoveryMapper{ - dc: dc, - }, nil -} - -// GetMapper will get the cached restmapper, if nil, it will create one by refresh -// Prefer lazy discovery, because resources created after refresh can not be found -func (d *DefaultDiscoveryMapper) GetMapper() (meta.RESTMapper, error) { - d.mutex.RLock() - mapper := d.mapper - d.mutex.RUnlock() - - if mapper == nil { - return d.Refresh() - } - return mapper, nil -} - -// Refresh will re-create the mapper by getting the new resource from K8s API by using discovery client -func (d *DefaultDiscoveryMapper) Refresh() (meta.RESTMapper, error) { - gr, err := restmapper.GetAPIGroupResources(d.dc) - if err != nil { - return nil, err - } - d.mutex.Lock() - defer d.mutex.Unlock() - d.mapper = restmapper.NewDiscoveryRESTMapper(gr) - return d.mapper, nil -} - -// RESTMapping will mapping resources from GVK, if not found, it will refresh from APIServer and try once again -func (d *DefaultDiscoveryMapper) RESTMapping(gk schema.GroupKind, version ...string) (*meta.RESTMapping, error) { - mapper, err := d.GetMapper() - if err != nil { - return nil, err - } - mapping, err := mapper.RESTMapping(gk, version...) - if meta.IsNoMatchError(err) { - // if no kind match err, refresh and try once more. - mapper, err = d.Refresh() - if err != nil { - return nil, err - } - mapping, err = mapper.RESTMapping(gk, version...) - } - return mapping, err -} - -// KindsFor will get kinds from GroupVersionResource, if version not set, all resources matched will be returned. -func (d *DefaultDiscoveryMapper) KindsFor(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error) { - mapper, err := d.GetMapper() - if err != nil { - return nil, err - } - mapping, err := mapper.KindsFor(input) - if meta.IsNoMatchError(err) { - // if no kind match err, refresh and try once more. - mapper, err = d.Refresh() - if err != nil { - return nil, err - } - mapping, err = mapper.KindsFor(input) - } - return mapping, err -} - -// ResourcesFor will get a resource from GroupVersionKind -func (d *DefaultDiscoveryMapper) ResourcesFor(input schema.GroupVersionKind) (schema.GroupVersionResource, error) { - var gvr schema.GroupVersionResource - mapping, err := d.RESTMapping(input.GroupKind(), input.Version) - if err != nil { - return gvr, err - } - gvr = mapping.Resource - return gvr, nil -} - -// IsNamespacedScope discover the resources supported by API server and check -// whether a resource is namespaced-scope. -func IsNamespacedScope(dm DiscoveryMapper, gk schema.GroupKind) (bool, error) { - restMapping, err := dm.RESTMapping(gk) - if err != nil { - return false, errors.WithMessage(err, "cannot check resource scope") - } - isNamespaced := restMapping.Scope.Name() == meta.RESTScopeNameNamespace - return isNamespaced, nil -} diff --git a/pkg/oam/discoverymapper/suit_test.go b/pkg/oam/discoverymapper/suit_test.go deleted file mode 100644 index 857ce4c31..000000000 --- a/pkg/oam/discoverymapper/suit_test.go +++ /dev/null @@ -1,331 +0,0 @@ -/* -Copyright 2021 The KubeVela Authors. - -Licensed 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. -*/ - -package discoverymapper - -import ( - "context" - "testing" - "time" - - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" - - crdv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/rest" - "k8s.io/utils/pointer" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/envtest" - // +kubebuilder:scaffold:imports -) - -// These tests use Ginkgo (BDD-style Go testing framework). Refer to -// http://onsi.github.io/ginkgo/ to learn more about Ginkgo. - -var cfg *rest.Config -var k8sClient client.Client -var testEnv *envtest.Environment -var scheme = runtime.NewScheme() - -func TestMapper(t *testing.T) { - RegisterFailHandler(Fail) - - RunSpecs(t, "Test Mapper Suite") -} - -var _ = BeforeSuite(func() { - By("Bootstrapping test environment") - testEnv = &envtest.Environment{ - UseExistingCluster: pointer.Bool(false), - ControlPlaneStartTimeout: time.Minute, - ControlPlaneStopTimeout: time.Minute, - } - var err error - cfg, err = testEnv.Start() - Expect(err).ToNot(HaveOccurred()) - Expect(cfg).ToNot(BeNil()) - - Expect(crdv1.AddToScheme(scheme)).Should(BeNil()) - // +kubebuilder:scaffold:scheme - By("Create the k8s client") - k8sClient, err = client.New(cfg, client.Options{Scheme: scheme}) - Expect(err).ToNot(HaveOccurred()) - Expect(k8sClient).ToNot(BeNil()) -}) - -var _ = AfterSuite(func() { - By("Tearing down the test environment") - err := testEnv.Stop() - Expect(err).ToNot(HaveOccurred()) -}) - -var _ = Describe("Mapper discovery resources", func() { - - It("discovery built-in k8s resource", func() { - dism, err := New(cfg) - Expect(err).Should(BeNil()) - mapper, err := dism.GetMapper() - Expect(err).Should(BeNil()) - mapping, err := mapper.RESTMapping(schema.GroupKind{Group: "apps", Kind: "Deployment"}, "v1") - Expect(err).Should(BeNil()) - Expect(mapping.Resource).Should(Equal(schema.GroupVersionResource{ - Group: "apps", - Version: "v1", - Resource: "deployments", - })) - }) - - It("discovery CRD", func() { - - By("Check built-in resource") - dism, err := New(cfg) - Expect(err).Should(BeNil()) - mapper, err := dism.GetMapper() - Expect(err).Should(BeNil()) - var mapping *meta.RESTMapping - mapping, err = mapper.RESTMapping(schema.GroupKind{Group: "", Kind: "Pod"}, "v1") - Expect(err).Should(BeNil()) - Expect(mapping.Resource).Should(Equal(schema.GroupVersionResource{ - Group: "", - Version: "v1", - Resource: "pods", - })) - - By("CRD should be discovered after refresh") - crd := crdv1.CustomResourceDefinition{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foos.example.com", - Labels: map[string]string{"crd": "dependency"}, - }, - Spec: crdv1.CustomResourceDefinitionSpec{ - Group: "example.com", - Names: crdv1.CustomResourceDefinitionNames{ - Kind: "Foo", - Plural: "foos", - }, - Versions: []crdv1.CustomResourceDefinitionVersion{{ - Name: "v1", - Served: true, - Storage: true, - Schema: &crdv1.CustomResourceValidation{ - OpenAPIV3Schema: &crdv1.JSONSchemaProps{ - Type: "object", - }}, - }, { - Name: "v1beta1", - Served: true, - Schema: &crdv1.CustomResourceValidation{ - OpenAPIV3Schema: &crdv1.JSONSchemaProps{ - Type: "object", - }}, - }}, - Scope: crdv1.NamespaceScoped, - }, - } - Expect(k8sClient.Create(context.Background(), &crd)).Should(BeNil()) - updatedCrdObj := crdv1.CustomResourceDefinition{} - Eventually(func() bool { - if err := k8sClient.Get(context.Background(), - client.ObjectKey{Name: "foos.example.com"}, &updatedCrdObj); err != nil { - return false - } - return len(updatedCrdObj.Spec.Versions) == 2 - }, 3*time.Second, time.Second).Should(BeTrue()) - - Eventually(func() error { - mapping, err = dism.RESTMapping(schema.GroupKind{Group: "example.com", Kind: "Foo"}, "v1") - return err - }, time.Second*2, time.Millisecond*300).Should(BeNil()) - Expect(mapping.Resource).Should(Equal(schema.GroupVersionResource{ - Group: "example.com", - Version: "v1", - Resource: "foos", - })) - - var kinds []schema.GroupVersionKind - Eventually(func() []schema.GroupVersionKind { - kinds, _ = dism.KindsFor(schema.GroupVersionResource{Group: "example.com", Version: "", Resource: "foos"}) - return kinds - }, time.Second*60, time.Second*3).Should(Equal([]schema.GroupVersionKind{ - {Group: "example.com", Version: "v1", Kind: "Foo"}, - {Group: "example.com", Version: "v1beta1", Kind: "Foo"}, - })) - kinds, err = dism.KindsFor(schema.GroupVersionResource{Group: "example.com", Version: "v1", Resource: "foos"}) - Expect(err).Should(BeNil()) - Expect(kinds).Should(Equal([]schema.GroupVersionKind{{Group: "example.com", Version: "v1", Kind: "Foo"}})) - }) - - It("get GVK from k8s resource", func() { - dism, err := New(cfg) - Expect(err).Should(BeNil()) - - By("Test Pod") - podAPIVersion, podKind := "v1", "Pod" - podGV, err := schema.ParseGroupVersion(podAPIVersion) - Expect(err).Should(BeNil()) - podGVR, err := dism.ResourcesFor(podGV.WithKind(podKind)) - Expect(err).Should(BeNil()) - Expect(podGVR).Should(Equal(schema.GroupVersionResource{ - Version: "v1", - Resource: "pods", - })) - - By("Test Deployment") - deploymentAPIVersion, deploymentKind := "apps/v1", "Deployment" - deploymentGV, err := schema.ParseGroupVersion(deploymentAPIVersion) - Expect(err).Should(BeNil()) - deploymentGVR, err := dism.ResourcesFor(deploymentGV.WithKind(deploymentKind)) - Expect(err).Should(BeNil()) - Expect(deploymentGVR).Should(Equal(schema.GroupVersionResource{ - Group: "apps", - Version: "v1", - Resource: "deployments", - })) - - By("Test CronJob") - cronJobAPIVersion, cronJobKind := "batch/v1", "Job" - cronJobGV, err := schema.ParseGroupVersion(cronJobAPIVersion) - Expect(err).Should(BeNil()) - cronJobGVR, err := dism.ResourcesFor(cronJobGV.WithKind(cronJobKind)) - Expect(err).Should(BeNil()) - Expect(cronJobGVR).Should(Equal(schema.GroupVersionResource{ - Group: "batch", - Version: "v1", - Resource: "jobs", - })) - - By("Test Invalid GVK") - apiVersion, kind := "apps/v1", "Job" - gv, err := schema.ParseGroupVersion(apiVersion) - Expect(err).Should(BeNil()) - _, err = dism.ResourcesFor(gv.WithKind(kind)) - Expect(err).Should(HaveOccurred()) - }) - - It("check API resource scope", func() { - dism, err := New(cfg) - Expect(err).Should(BeNil()) - - var ( - clusterCRKind = "ImClusterScope" - namespaceCRKind = "ImNamespaceScope" - ) - - By("Register a cluster-scoped CRD") - clusterScopeCRD := crdv1.CustomResourceDefinition{ - ObjectMeta: metav1.ObjectMeta{ - Name: "imclusterscopes.example.com", - }, - Spec: crdv1.CustomResourceDefinitionSpec{ - Scope: crdv1.ClusterScoped, - Group: "example.com", - Names: crdv1.CustomResourceDefinitionNames{ - Kind: clusterCRKind, - Plural: "imclusterscopes", - }, - Versions: []crdv1.CustomResourceDefinitionVersion{{ - Name: "v1", - Served: true, - Storage: true, - Schema: &crdv1.CustomResourceValidation{ - OpenAPIV3Schema: &crdv1.JSONSchemaProps{ - Type: "object", - }}, - }}, - }, - } - Expect(k8sClient.Create(context.Background(), &clusterScopeCRD)).Should(BeNil()) - - By("Register a namespace-scoped CRD") - namespaceScopeCRD := crdv1.CustomResourceDefinition{ - ObjectMeta: metav1.ObjectMeta{ - Name: "imnamespacescopes.example.com", - }, - Spec: crdv1.CustomResourceDefinitionSpec{ - Scope: crdv1.NamespaceScoped, - Group: "example.com", - Names: crdv1.CustomResourceDefinitionNames{ - Kind: namespaceCRKind, - Plural: "imnamespacescopes", - }, - Versions: []crdv1.CustomResourceDefinitionVersion{{ - Name: "v1", - Served: true, - Storage: true, - Schema: &crdv1.CustomResourceValidation{ - OpenAPIV3Schema: &crdv1.JSONSchemaProps{ - Type: "object", - }}, - }}, - }, - } - Expect(k8sClient.Create(context.Background(), &namespaceScopeCRD)).Should(BeNil()) - - By("Verify checking built-in cluster-scoped resource") - clusterBuiltInRsc := schema.GroupKind{ - Group: "", - Kind: "PersistentVolume", - } - isNamespaced, err := IsNamespacedScope(dism, clusterBuiltInRsc) - Expect(err).Should(BeNil()) - Expect(isNamespaced).Should(BeFalse()) - - By("Verify checking built-in namespace-scoped resource") - namespaceBuiltInRsc := schema.GroupKind{ - Group: "apps", - Kind: "Deployment", - } - isNamespaced, err = IsNamespacedScope(dism, namespaceBuiltInRsc) - Expect(err).Should(BeNil()) - Expect(isNamespaced).Should(BeTrue()) - - By("Verify checking cluster-scoped custom resource") - clusterCR := schema.GroupKind{ - Group: "example.com", - Kind: clusterCRKind, - } - By("Wait for refreshing DiscoveryMapper") - Eventually(func() error { - isNamespaced, err = IsNamespacedScope(dism, clusterCR) - return err - }, time.Second*2, time.Millisecond*300).Should(BeNil()) - Expect(isNamespaced).Should(BeFalse()) - - By("Verify checking namespace-scoped custom resource") - namespaceCR := schema.GroupKind{ - Group: "example.com", - Kind: namespaceCRKind, - } - By("Wait for refreshing DiscoveryMapper") - Eventually(func() error { - isNamespaced, err = IsNamespacedScope(dism, namespaceCR) - return err - }, time.Second*2, time.Millisecond*300).Should(BeNil()) - Expect(isNamespaced).Should(BeTrue()) - - By("Cannot check an unknown resource") - unknownCR := schema.GroupKind{ - Group: "unknow.com", - Kind: "Unknown", - } - _, err = IsNamespacedScope(dism, unknownCR) - Expect(err).ShouldNot(BeNil()) - }) -}) diff --git a/pkg/oam/mock/client.go b/pkg/oam/mock/client.go new file mode 100644 index 000000000..61998f3b6 --- /dev/null +++ b/pkg/oam/mock/client.go @@ -0,0 +1,82 @@ +/* +Copyright 2023 The KubeVela Authors. + +Licensed 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. +*/ + +package mock + +import ( + "strings" + + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/runtime/schema" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" +) + +// NewClient new client with given mappings +func NewClient(c client.Client, mappings map[schema.GroupVersionResource][]schema.GroupVersionKind) client.Client { + if c == nil { + c = fake.NewClientBuilder().Build() + } + return &Client{Client: c, mappings: mappings} +} + +// Client fake client +type Client struct { + client.Client + mappings map[schema.GroupVersionResource][]schema.GroupVersionKind +} + +// RESTMapper override default mapper +func (in *Client) RESTMapper() meta.RESTMapper { + mapper := in.Client.RESTMapper() + if mapper == nil { + mapper = fake.NewClientBuilder().Build().RESTMapper() + } + return &RESTMapper{RESTMapper: mapper, mappings: in.mappings} +} + +// RESTMapper test mapper +type RESTMapper struct { + meta.RESTMapper + mappings map[schema.GroupVersionResource][]schema.GroupVersionKind +} + +// KindsFor get kinds +func (in *RESTMapper) KindsFor(resource schema.GroupVersionResource) ([]schema.GroupVersionKind, error) { + if gvks, found := in.mappings[resource]; found { + return gvks, nil + } + return in.RESTMapper.KindsFor(resource) +} + +// RESTMapping get mapping +func (in *RESTMapper) RESTMapping(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) { + version := "v1" + if len(versions) > 0 { + version = versions[0] + } + return &meta.RESTMapping{ + Resource: schema.GroupVersionResource{Group: gk.Group, Version: versions[0], Resource: strings.ToLower(gk.Kind) + "s"}, + GroupVersionKind: gk.WithVersion(version), + Scope: scope(meta.RESTScopeNameNamespace), + }, nil +} + +type scope meta.RESTScopeName + +func (in scope) Name() meta.RESTScopeName { + return meta.RESTScopeName(in) +} diff --git a/pkg/oam/mock/mapper.go b/pkg/oam/mock/mapper.go deleted file mode 100644 index 7c4188e98..000000000 --- a/pkg/oam/mock/mapper.go +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2021 The KubeVela Authors. - -Licensed 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. -*/ - -package mock - -import ( - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" - - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var _ discoverymapper.DiscoveryMapper = &DiscoveryMapper{} - -// GetMapper is func type for mock convenience -type GetMapper func() (meta.RESTMapper, error) - -// Refresh is func type for mock convenience -type Refresh func() (meta.RESTMapper, error) - -// RESTMapping is func type for mock convenience -type RESTMapping func(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) - -// KindsFor is func type for mock convenience -type KindsFor func(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error) - -// ResourcesFor is func type for mock convenience -type ResourcesFor func(input schema.GroupVersionKind) (schema.GroupVersionResource, error) - -// NewMockDiscoveryMapper for unit test only -func NewMockDiscoveryMapper() *DiscoveryMapper { - return &DiscoveryMapper{ - MockRESTMapping: NewMockRESTMapping(""), - MockKindsFor: NewMockKindsFor(""), - } -} - -// NewMockRESTMapping for unit test only -func NewMockRESTMapping(resource string) RESTMapping { - return func(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) { - return &meta.RESTMapping{Resource: schema.GroupVersionResource{Resource: resource, Version: versions[0], Group: gk.Group}}, nil - } -} - -// NewMockKindsFor for unit test only -func NewMockKindsFor(kind string, version ...string) KindsFor { - return func(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error) { - if len(kind) <= 1 { - return []schema.GroupVersionKind{{Version: input.Version, Group: input.Group, Kind: kind}}, nil - } - var ss []schema.GroupVersionKind - for _, v := range version { - gvk := schema.GroupVersionKind{Version: v, Group: input.Group, Kind: kind} - if input.Version != "" && input.Version == v { - return []schema.GroupVersionKind{gvk}, nil - } - ss = append(ss, gvk) - } - return ss, nil - } -} - -// DiscoveryMapper for unit test only, use GetMapper and refresh will panic -type DiscoveryMapper struct { - MockGetMapper GetMapper - MockRefresh Refresh - MockRESTMapping RESTMapping - MockKindsFor KindsFor - MockResourcesFor ResourcesFor -} - -// GetMapper for mock -func (m *DiscoveryMapper) GetMapper() (meta.RESTMapper, error) { - return m.MockGetMapper() -} - -// Refresh for mock -func (m *DiscoveryMapper) Refresh() (meta.RESTMapper, error) { - return m.MockRefresh() -} - -// RESTMapping for mock -func (m *DiscoveryMapper) RESTMapping(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) { - return m.MockRESTMapping(gk, versions...) -} - -// KindsFor for mock -func (m *DiscoveryMapper) KindsFor(input schema.GroupVersionResource) ([]schema.GroupVersionKind, error) { - return m.MockKindsFor(input) -} - -// ResourcesFor for mock -func (m *DiscoveryMapper) ResourcesFor(input schema.GroupVersionKind) (schema.GroupVersionResource, error) { - var gvr schema.GroupVersionResource - mapping, err := m.RESTMapping(input.GroupKind(), input.Version) - if err != nil { - return gvr, err - } - gvr = mapping.Resource - return gvr, nil -} diff --git a/pkg/oam/util/helper.go b/pkg/oam/util/helper.go index a792c4258..effc3313d 100644 --- a/pkg/oam/util/helper.go +++ b/pkg/oam/util/helper.go @@ -48,7 +48,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" types2 "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) const ( @@ -228,11 +227,10 @@ func GetDummyWorkloadDefinition(u *unstructured.Unstructured) *v1alpha2.Workload } // FetchScopeDefinition fetch corresponding scopeDefinition given a scope -func FetchScopeDefinition(ctx context.Context, r client.Reader, dm discoverymapper.DiscoveryMapper, - scope *unstructured.Unstructured) (*v1alpha2.ScopeDefinition, error) { +func FetchScopeDefinition(ctx context.Context, r client.Client, scope *unstructured.Unstructured) (*v1alpha2.ScopeDefinition, error) { // The name of the scopeDefinition CR is the CRD name of the scope // TODO(wonderflow): we haven't support scope definition label type yet. - spName, err := GetDefinitionName(dm, scope, "") + spName, err := GetDefinitionName(r.RESTMapper(), scope, "") if err != nil { return nil, err } @@ -244,10 +242,9 @@ func FetchScopeDefinition(ctx context.Context, r client.Reader, dm discoverymapp } // FetchTraitDefinition fetch corresponding traitDefinition given a trait -func FetchTraitDefinition(ctx context.Context, r client.Reader, dm discoverymapper.DiscoveryMapper, - trait *unstructured.Unstructured) (*v1alpha2.TraitDefinition, error) { +func FetchTraitDefinition(ctx context.Context, r client.Client, trait *unstructured.Unstructured) (*v1alpha2.TraitDefinition, error) { // The name of the traitDefinition CR is the CRD name of the trait - trName, err := GetDefinitionName(dm, trait, oam.TraitTypeLabel) + trName, err := GetDefinitionName(r.RESTMapper(), trait, oam.TraitTypeLabel) if err != nil { return nil, err } @@ -259,10 +256,9 @@ func FetchTraitDefinition(ctx context.Context, r client.Reader, dm discoverymapp } // FetchWorkloadDefinition fetch corresponding workloadDefinition given a workload -func FetchWorkloadDefinition(ctx context.Context, r client.Reader, dm discoverymapper.DiscoveryMapper, - workload *unstructured.Unstructured) (*v1alpha2.WorkloadDefinition, error) { +func FetchWorkloadDefinition(ctx context.Context, r client.Client, workload *unstructured.Unstructured) (*v1alpha2.WorkloadDefinition, error) { // The name of the workloadDefinition CR is the CRD name of the component - wldName, err := GetDefinitionName(dm, workload, oam.WorkloadTypeLabel) + wldName, err := GetDefinitionName(r.RESTMapper(), workload, oam.WorkloadTypeLabel) if err != nil { return nil, err } @@ -394,12 +390,11 @@ func checkRequestNamespaceError(err error) bool { } // FetchWorkloadChildResources fetch corresponding child resources given a workload -func FetchWorkloadChildResources(ctx context.Context, r client.Reader, - dm discoverymapper.DiscoveryMapper, workload *unstructured.Unstructured) ([]*unstructured.Unstructured, error) { +func FetchWorkloadChildResources(ctx context.Context, r client.Client, workload *unstructured.Unstructured) ([]*unstructured.Unstructured, error) { // Fetch the corresponding workloadDefinition CR - workloadDefinition, err := FetchWorkloadDefinition(ctx, r, dm, workload) + workloadDefinition, err := FetchWorkloadDefinition(ctx, r, workload) if err != nil { - // No definition will won't block app from running + // No definition won't block app from running if apierrors.IsNotFound(err) { return nil, nil } @@ -549,7 +544,7 @@ func RemoveAnnotations(o labelAnnotationObject, removeKeys []string) { // the format of the definition of a resource is . // Now the definition name of a resource could also be defined as `definition.oam.dev/name` in `metadata.annotations` // typeLabel specified which Definition it is, if specified, will directly get definition from label. -func GetDefinitionName(dm discoverymapper.DiscoveryMapper, u *unstructured.Unstructured, typeLabel string) (string, error) { +func GetDefinitionName(mapper meta.RESTMapper, u *unstructured.Unstructured, typeLabel string) (string, error) { if typeLabel != "" { if labels := u.GetLabels(); labels != nil { if definitionName, ok := labels[typeLabel]; ok { @@ -561,7 +556,7 @@ func GetDefinitionName(dm discoverymapper.DiscoveryMapper, u *unstructured.Unstr if err != nil { return "", err } - mapping, err := dm.RESTMapping(schema.GroupKind{Group: groupVersion.Group, Kind: u.GetKind()}, groupVersion.Version) + mapping, err := mapper.RESTMapping(schema.GroupKind{Group: groupVersion.Group, Kind: u.GetKind()}, groupVersion.Version) if err != nil { return "", err } @@ -569,7 +564,7 @@ func GetDefinitionName(dm discoverymapper.DiscoveryMapper, u *unstructured.Unstr } // GetGVKFromDefinition help get Group Version Kind from DefinitionReference -func GetGVKFromDefinition(dm discoverymapper.DiscoveryMapper, definitionRef common.DefinitionReference) (metav1.GroupVersionKind, error) { +func GetGVKFromDefinition(mapper meta.RESTMapper, definitionRef common.DefinitionReference) (metav1.GroupVersionKind, error) { // if given definitionRef is empty or it's a dummy definition, return an empty GVK // NOTE currently, only TraitDefinition is allowed to omit definitionRef conditionally. if len(definitionRef.Name) < 1 || definitionRef.Name == Dummy { @@ -578,7 +573,7 @@ func GetGVKFromDefinition(dm discoverymapper.DiscoveryMapper, definitionRef comm var gvk metav1.GroupVersionKind groupResource := schema.ParseGroupResource(definitionRef.Name) gvr := schema.GroupVersionResource{Group: groupResource.Group, Resource: groupResource.Resource, Version: definitionRef.Version} - kinds, err := dm.KindsFor(gvr) + kinds, err := mapper.KindsFor(gvr) if err != nil { return gvk, err } @@ -595,17 +590,18 @@ func GetGVKFromDefinition(dm discoverymapper.DiscoveryMapper, definitionRef comm } // ConvertWorkloadGVK2Definition help convert a GVK to DefinitionReference -func ConvertWorkloadGVK2Definition(dm discoverymapper.DiscoveryMapper, def common.WorkloadGVK) (common.DefinitionReference, error) { +func ConvertWorkloadGVK2Definition(mapper meta.RESTMapper, def common.WorkloadGVK) (common.DefinitionReference, error) { var reference common.DefinitionReference gv, err := schema.ParseGroupVersion(def.APIVersion) if err != nil { return reference, err } gvk := gv.WithKind(def.Kind) - gvr, err := dm.ResourcesFor(gvk) + mappings, err := mapper.RESTMapping(gvk.GroupKind(), gvk.Version) if err != nil { return reference, err } + gvr := mappings.Resource reference.Version = gvr.Version reference.Name = gvr.GroupResource().String() return reference, nil diff --git a/pkg/oam/util/helper_test.go b/pkg/oam/util/helper_test.go index bd5ccd922..d9ef5c411 100644 --- a/pkg/oam/util/helper_test.go +++ b/pkg/oam/util/helper_test.go @@ -264,10 +264,10 @@ func TestScopeRelatedUtils(t *testing.T) { }, } for name, tc := range cases { - tclient := test.MockClient{ + tclient := mock.NewClient(&test.MockClient{ MockGet: test.NewMockGetFn(nil, tc.fields.getFunc), - } - got, err := util.FetchScopeDefinition(ctx, &tclient, mock.NewMockDiscoveryMapper(), unstructuredScope) + }, nil) + got, err := util.FetchScopeDefinition(ctx, tclient, unstructuredScope) t.Log(fmt.Sprint("Running test: ", name)) assert.Equal(t, tc.want.err, err) assert.Equal(t, tc.want.spd, got) @@ -367,10 +367,10 @@ func TestUtils(t *testing.T) { }, } for name, tc := range cases { - tclient := test.MockClient{ + tclient := mock.NewClient(&test.MockClient{ MockGet: test.NewMockGetFn(nil, tc.fields.getFunc), - } - got, err := util.FetchWorkloadDefinition(ctx, &tclient, mock.NewMockDiscoveryMapper(), unstructuredWorkload) + }, nil) + got, err := util.FetchWorkloadDefinition(ctx, tclient, unstructuredWorkload) t.Log(fmt.Sprint("Running test: ", name)) assert.Equal(t, tc.want.err, err) @@ -429,8 +429,7 @@ func TestUnstructured(t *testing.T) { }, } for name, ti := range tests { - mapper := mock.NewMockDiscoveryMapper() - mapper.MockRESTMapping = mock.NewMockRESTMapping(ti.resource) + mapper := mock.NewClient(nil, nil).RESTMapper() got, err := util.GetDefinitionName(mapper, ti.u, ti.typeLabel) assert.NoError(t, err) t.Log(fmt.Sprint("Running test: ", name)) @@ -439,8 +438,10 @@ func TestUnstructured(t *testing.T) { } func TestGetGVKFromDef(t *testing.T) { - mapper := mock.NewMockDiscoveryMapper() - mapper.MockKindsFor = mock.NewMockKindsFor("Abc", "v1", "v2") + mapper := mock.NewClient(nil, map[schema.GroupVersionResource][]schema.GroupVersionKind{ + schema.GroupVersionResource{Group: "example.com", Resource: "abcs"}: {{Group: "example.com", Version: "v1", Kind: "Abc"}}, + schema.GroupVersionResource{Group: "example.com", Resource: "abcs", Version: "v2"}: {{Group: "example.com", Version: "v2", Kind: "Abc"}}, + }).RESTMapper() gvk, err := util.GetGVKFromDefinition(mapper, common.DefinitionReference{Name: "abcs.example.com"}) assert.NoError(t, err) assert.Equal(t, metav1.GroupVersionKind{ @@ -475,9 +476,7 @@ func TestGetGVKFromDef(t *testing.T) { } func TestConvertWorkloadGVK2Def(t *testing.T) { - mapper := mock.NewMockDiscoveryMapper() - - mapper.MockRESTMapping = mock.NewMockRESTMapping("clonesets") + mapper := mock.NewClient(nil, map[schema.GroupVersionResource][]schema.GroupVersionKind{}).RESTMapper() ref, err := util.ConvertWorkloadGVK2Definition(mapper, common.WorkloadGVK{APIVersion: "apps.kruise.io/v1alpha1", Kind: "CloneSet"}) assert.NoError(t, err) @@ -486,7 +485,6 @@ func TestConvertWorkloadGVK2Def(t *testing.T) { Version: "v1alpha1", }, ref) - mapper.MockRESTMapping = mock.NewMockRESTMapping("deployments") ref, err = util.ConvertWorkloadGVK2Definition(mapper, common.WorkloadGVK{APIVersion: "apps/v1", Kind: "Deployment"}) assert.NoError(t, err) diff --git a/pkg/rollout/suit_test.go b/pkg/rollout/suit_test.go index 8eb771669..806adacda 100644 --- a/pkg/rollout/suit_test.go +++ b/pkg/rollout/suit_test.go @@ -46,7 +46,6 @@ import ( "github.com/kubevela/workflow/pkg/cue/packages" coreoam "github.com/oam-dev/kubevela/apis/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" // +kubebuilder:scaffold:imports ) @@ -54,7 +53,6 @@ var cfg *rest.Config var scheme *runtime.Scheme var k8sClient client.Client var testEnv *envtest.Environment -var dm discoverymapper.DiscoveryMapper var pd *packages.PackageDiscover var testns string var dc *discovery.DiscoveryClient @@ -95,9 +93,6 @@ var _ = BeforeSuite(func() { Expect(err).ToNot(HaveOccurred()) Expect(dc).ShouldNot(BeNil()) - dm, err = discoverymapper.New(cfg) - Expect(err).ToNot(HaveOccurred()) - Expect(dm).ToNot(BeNil()) pd, err = packages.NewPackageDiscover(cfg) Expect(err).ToNot(HaveOccurred()) Expect(pd).ToNot(BeNil()) diff --git a/pkg/utils/common/args.go b/pkg/utils/common/args.go index 4325a4304..2bfb0a135 100644 --- a/pkg/utils/common/args.go +++ b/pkg/utils/common/args.go @@ -34,7 +34,6 @@ import ( "github.com/kubevela/workflow/pkg/cue/packages" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) // Args is args for controller-runtime client @@ -43,7 +42,6 @@ type Args struct { rawConfig *api.Config Schema *runtime.Scheme client client.Client - dm discoverymapper.DiscoveryMapper pd *packages.PackageDiscover dc *discovery.DiscoveryClient } @@ -145,24 +143,6 @@ func (a *Args) GetFakeClient(defs []oam.Object) (client.Client, error) { return fake.NewClientBuilder().WithObjects(objs...).WithScheme(a.Schema).Build(), nil } -// GetDiscoveryMapper get discoveryMapper client if exist, create if not exist. -func (a *Args) GetDiscoveryMapper() (discoverymapper.DiscoveryMapper, error) { - if a.config == nil { - if err := a.SetConfig(nil); err != nil { - return nil, err - } - } - if a.dm != nil { - return a.dm, nil - } - dm, err := discoverymapper.New(a.config) - if err != nil { - return nil, fmt.Errorf("failed to create CRD discovery client %w", err) - } - a.dm = dm - return dm, nil -} - // GetPackageDiscover get PackageDiscover client if exist, create if not exist. func (a *Args) GetPackageDiscover() (*packages.PackageDiscover, error) { if a.config == nil { diff --git a/pkg/velaql/suite_test.go b/pkg/velaql/suite_test.go index ba17f4ce5..e22d01f33 100644 --- a/pkg/velaql/suite_test.go +++ b/pkg/velaql/suite_test.go @@ -33,7 +33,6 @@ import ( "github.com/kubevela/workflow/pkg/cue/packages" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/utils/common" ) @@ -69,12 +68,10 @@ var _ = BeforeSuite(func() { Expect(k8sClient).ToNot(BeNil()) By("new kube client success") - dm, err := discoverymapper.New(cfg) - Expect(err).To(BeNil()) pd, err := packages.NewPackageDiscover(cfg) Expect(err).To(BeNil()) - viewHandler = NewViewHandler(k8sClient, cfg, dm, pd) + viewHandler = NewViewHandler(k8sClient, cfg, pd) ctx := context.Background() ns := corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "vela-system"}} diff --git a/pkg/velaql/view.go b/pkg/velaql/view.go index c7f2b87db..06567c0d3 100644 --- a/pkg/velaql/view.go +++ b/pkg/velaql/view.go @@ -46,7 +46,6 @@ import ( "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/cue/process" "github.com/oam-dev/kubevela/pkg/multicluster" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" oamutil "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/stdlib" "github.com/oam-dev/kubevela/pkg/utils" @@ -74,17 +73,15 @@ type ViewHandler struct { cli client.Client cfg *rest.Config viewTask workflowv1alpha1.WorkflowStep - dm discoverymapper.DiscoveryMapper pd *packages.PackageDiscover namespace string } // NewViewHandler new view handler -func NewViewHandler(cli client.Client, cfg *rest.Config, dm discoverymapper.DiscoveryMapper, pd *packages.PackageDiscover) *ViewHandler { +func NewViewHandler(cli client.Client, cfg *rest.Config, pd *packages.PackageDiscover) *ViewHandler { return &ViewHandler{ cli: cli, cfg: cfg, - dm: dm, pd: pd, namespace: qlNs, } diff --git a/pkg/webhook/core.oam.dev/register.go b/pkg/webhook/core.oam.dev/register.go index 9dbee73c8..d8c8043aa 100644 --- a/pkg/webhook/core.oam.dev/register.go +++ b/pkg/webhook/core.oam.dev/register.go @@ -34,7 +34,7 @@ func Register(mgr manager.Manager, args controller.Args) { case "all": application.RegisterValidatingHandler(mgr, args) componentdefinition.RegisterMutatingHandler(mgr, args) - componentdefinition.RegisterValidatingHandler(mgr, args) + componentdefinition.RegisterValidatingHandler(mgr) traitdefinition.RegisterValidatingHandler(mgr, args) applicationconfiguration.RegisterMutatingHandler(mgr) applicationconfiguration.RegisterValidatingHandler(mgr, args) @@ -43,13 +43,13 @@ func Register(mgr manager.Manager, args controller.Args) { case "minimal": application.RegisterValidatingHandler(mgr, args) componentdefinition.RegisterMutatingHandler(mgr, args) - componentdefinition.RegisterValidatingHandler(mgr, args) + componentdefinition.RegisterValidatingHandler(mgr) traitdefinition.RegisterValidatingHandler(mgr, args) case "v0.3": application.RegisterValidatingHandler(mgr, args) application.RegisterMutatingHandler(mgr) componentdefinition.RegisterMutatingHandler(mgr, args) - componentdefinition.RegisterValidatingHandler(mgr, args) + componentdefinition.RegisterValidatingHandler(mgr) traitdefinition.RegisterValidatingHandler(mgr, args) case "v0.2": applicationconfiguration.RegisterMutatingHandler(mgr) diff --git a/pkg/webhook/core.oam.dev/v1alpha2/application/suite_test.go b/pkg/webhook/core.oam.dev/v1alpha2/application/suite_test.go index eb7ab5d1f..287c23662 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/application/suite_test.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/application/suite_test.go @@ -42,7 +42,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" // +kubebuilder:scaffold:imports ) @@ -54,7 +53,6 @@ var k8sClient client.Client var testEnv *envtest.Environment var testScheme = runtime.NewScheme() var decoder *admission.Decoder -var dm discoverymapper.DiscoveryMapper var pd *packages.PackageDiscover var ctx = context.Background() var handler *ValidatingHandler @@ -100,18 +98,11 @@ var _ = BeforeSuite(func() { Expect(err).ToNot(HaveOccurred()) Expect(k8sClient).ToNot(BeNil()) - dm, err = discoverymapper.New(cfg) - Expect(err).ToNot(HaveOccurred()) - Expect(dm).ToNot(BeNil()) - pd, err = packages.NewPackageDiscover(cfg) Expect(err).ToNot(HaveOccurred()) Expect(pd).ToNot(BeNil()) - handler = &ValidatingHandler{ - dm: dm, - pd: pd, - } + handler = &ValidatingHandler{pd: pd} decoder, err = admission.NewDecoder(testScheme) Expect(err).Should(BeNil()) diff --git a/pkg/webhook/core.oam.dev/v1alpha2/application/validating_handler.go b/pkg/webhook/core.oam.dev/v1alpha2/application/validating_handler.go index 5b7a8cd83..e94d75b1e 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/application/validating_handler.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/application/validating_handler.go @@ -33,7 +33,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" controller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -41,7 +40,6 @@ var _ admission.Handler = &ValidatingHandler{} // ValidatingHandler handles application type ValidatingHandler struct { - dm discoverymapper.DiscoveryMapper pd *packages.PackageDiscover Client client.Client // Decoder decodes objects @@ -120,5 +118,5 @@ func (h *ValidatingHandler) Handle(ctx context.Context, req admission.Request) a // RegisterValidatingHandler will register application validate handler to the webhook func RegisterValidatingHandler(mgr manager.Manager, args controller.Args) { server := mgr.GetWebhookServer() - server.Register("/validating-core-oam-dev-v1beta1-applications", &webhook.Admission{Handler: &ValidatingHandler{dm: args.DiscoveryMapper, pd: args.PackageDiscover}}) + server.Register("/validating-core-oam-dev-v1beta1-applications", &webhook.Admission{Handler: &ValidatingHandler{pd: args.PackageDiscover}}) } diff --git a/pkg/webhook/core.oam.dev/v1alpha2/application/validation.go b/pkg/webhook/core.oam.dev/v1alpha2/application/validation.go index 9aa3046d3..beb1df021 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/application/validation.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/application/validation.go @@ -94,7 +94,7 @@ func (h *ValidatingHandler) ValidateComponents(ctx context.Context, app *v1beta1 var componentErrs field.ErrorList // try to generate an app file cli := &appRevBypassCacheClient{Client: h.Client} - appParser := appfile.NewApplicationParser(cli, h.dm, h.pd) + appParser := appfile.NewApplicationParser(cli, h.pd) af, err := appParser.GenerateAppFile(ctx, app) if err != nil { diff --git a/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/handler_test.go b/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/handler_test.go index 51233c86b..5dbc499b3 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/handler_test.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/handler_test.go @@ -22,6 +22,7 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "sigs.k8s.io/controller-runtime/pkg/client/fake" "github.com/crossplane/crossplane-runtime/pkg/test" admissionv1 "k8s.io/api/admission/v1" @@ -37,7 +38,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/mock" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -207,8 +207,7 @@ var _ = Describe("ApplicationConfiguration Admission controller Test", func() { }) It("Test validating handler", func() { - mapper := mock.NewMockDiscoveryMapper() - var handler admission.Handler = &ValidatingHandler{Mapper: mapper} + var handler admission.Handler = &ValidatingHandler{Client: fake.NewClientBuilder().Build()} decoderInjector := handler.(admission.DecoderInjector) decoderInjector.InjectDecoder(decoder) @@ -337,7 +336,6 @@ var _ = Describe("ApplicationConfiguration Admission controller Test", func() { By("reject the request for validation fails") var rejectHandler admission.Handler = &ValidatingHandler{ - Mapper: mapper, Validators: []AppConfigValidator{ AppConfigValidateFunc(func(c context.Context, vac ValidatingAppConfig) []error { return []error{fmt.Errorf("validation fails")} diff --git a/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/helper.go b/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/helper.go index ff9d347ae..838374b5f 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/helper.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/helper.go @@ -29,7 +29,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -70,8 +69,7 @@ type ValidatingTrait struct { } // PrepareForValidation prepares data for validations to avoiding repetitive GET/unmarshal operations -func (v *ValidatingAppConfig) PrepareForValidation(ctx context.Context, c client.Reader, - dm discoverymapper.DiscoveryMapper, ac *v1alpha2.ApplicationConfiguration) error { +func (v *ValidatingAppConfig) PrepareForValidation(ctx context.Context, c client.Client, ac *v1alpha2.ApplicationConfiguration) error { v.appConfig = *ac v.validatingComps = make([]ValidatingComponent, 0, len(ac.Spec.Components)) for _, acc := range ac.Spec.Components { @@ -108,7 +106,7 @@ func (v *ValidatingAppConfig) PrepareForValidation(ctx context.Context, c client tmp.workloadContent = wl // get workload definition - wlDef, err := util.FetchWorkloadDefinition(ctx, c, dm, &wl) + wlDef, err := util.FetchWorkloadDefinition(ctx, c, &wl) if err != nil { return errors.Wrapf(err, errFmtGetWorkloadDefinition, tmp.compName) } @@ -129,7 +127,7 @@ func (v *ValidatingAppConfig) PrepareForValidation(ctx context.Context, c client } // get trait definition - tDef, err := util.FetchTraitDefinition(ctx, c, dm, &tContent) + tDef, err := util.FetchTraitDefinition(ctx, c, &tContent) if err != nil { if !k8serrors.IsNotFound(err) { return errors.Wrapf(err, errFmtGetTraitDefinition, tmp.compName) diff --git a/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/validating_handler.go b/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/validating_handler.go index cb8003ffc..4acc620e0 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/validating_handler.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/applicationconfiguration/validating_handler.go @@ -36,7 +36,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" controller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -75,7 +74,6 @@ func (fn AppConfigValidateFunc) Validate(ctx context.Context, v ValidatingAppCon // ValidatingHandler handles CloneSet type ValidatingHandler struct { Client client.Client - Mapper discoverymapper.DiscoveryMapper // Decoder decodes objects Decoder *admission.Decoder @@ -138,7 +136,7 @@ func (h *ValidatingHandler) ValidateCreate(ctx context.Context, obj *v1alpha2.Ap var componentErrs field.ErrorList vAppConfig := &ValidatingAppConfig{} ctx = util.SetNamespaceInCtx(ctx, obj.Namespace) - if err := vAppConfig.PrepareForValidation(ctx, h.Client, h.Mapper, obj); err != nil { + if err := vAppConfig.PrepareForValidation(ctx, h.Client, obj); err != nil { klog.InfoS("failed to prepare information before validation ", " name: ", obj.Name, " errMsg: ", err.Error()) componentErrs = append(componentErrs, field.Invalid(field.NewPath("spec"), obj.Spec, fmt.Sprintf("failed to prepare information before validation, err = %s", err.Error()))) @@ -326,7 +324,6 @@ func (h *ValidatingHandler) InjectDecoder(d *admission.Decoder) error { func RegisterValidatingHandler(mgr manager.Manager, args controller.Args) { server := mgr.GetWebhookServer() server.Register("/validating-core-oam-dev-v1alpha2-applicationconfigurations", &webhook.Admission{Handler: &ValidatingHandler{ - Mapper: args.DiscoveryMapper, Validators: []AppConfigValidator{ AppConfigValidateFunc(ValidateRevisionNameFn), AppConfigValidateFunc(ValidateWorkloadNameForVersioningFn), diff --git a/pkg/webhook/core.oam.dev/v1alpha2/component/component_test.go b/pkg/webhook/core.oam.dev/v1alpha2/component/component_test.go index adaeeb849..c977eb666 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/component/component_test.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/component/component_test.go @@ -20,15 +20,15 @@ import ( "context" "fmt" + "github.com/crossplane/crossplane-runtime/pkg/test" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" - - "github.com/crossplane/crossplane-runtime/pkg/test" admissionv1 "k8s.io/api/admission/v1" crdv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" utilpointer "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" @@ -193,11 +193,10 @@ var _ = Describe("Component Admission controller Test", func() { By(fmt.Sprintf("start test : %s", testCase)) component.Spec.Workload = runtime.RawExtension{Raw: util.JSONMarshal(test.workload)} injc := handler.(inject.Client) - injc.InjectClient(test.client) + injc.InjectClient(mock.NewClient(test.client, map[schema.GroupVersionResource][]schema.GroupVersionKind{ + schema.GroupVersionResource{Group: "example.com", Resource: "foos"}: {{Group: "example.com", Version: "v1", Kind: "Foo"}}, + })) mutatingHandler := handler.(*MutatingHandler) - dm := mock.NewMockDiscoveryMapper() - dm.MockKindsFor = mock.NewMockKindsFor("Foo", "v1") - mutatingHandler.Mapper = dm err := mutatingHandler.Mutate(context.Background(), &component) if len(test.errMsg) == 0 { Expect(err).Should(BeNil()) diff --git a/pkg/webhook/core.oam.dev/v1alpha2/component/mutating_handler.go b/pkg/webhook/core.oam.dev/v1alpha2/component/mutating_handler.go index 69599cd92..8bed62d87 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/component/mutating_handler.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/component/mutating_handler.go @@ -35,7 +35,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" controller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) @@ -47,7 +46,6 @@ const ( // MutatingHandler handles Component type MutatingHandler struct { Client client.Client - Mapper discoverymapper.DiscoveryMapper // Decoder decodes objects Decoder *admission.Decoder @@ -100,7 +98,7 @@ func (h *MutatingHandler) Mutate(ctx context.Context, obj *v1alpha2.Component) e if err := h.Client.Get(ctx, types.NamespacedName{Name: workloadType}, workloadDefinition); err != nil { return err } - gvk, err := util.GetGVKFromDefinition(h.Mapper, workloadDefinition.Spec.Reference) + gvk, err := util.GetGVKFromDefinition(h.Client.RESTMapper(), workloadDefinition.Spec.Reference) if err != nil { return err } @@ -151,5 +149,5 @@ func (h *MutatingHandler) InjectDecoder(d *admission.Decoder) error { // RegisterMutatingHandler will register component mutation handler to the webhook func RegisterMutatingHandler(mgr manager.Manager, args controller.Args) { server := mgr.GetWebhookServer() - server.Register("/mutating-core-oam-dev-v1alpha2-components", &webhook.Admission{Handler: &MutatingHandler{Mapper: args.DiscoveryMapper}}) + server.Register("/mutating-core-oam-dev-v1alpha2-components", &webhook.Admission{Handler: &MutatingHandler{}}) } diff --git a/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/mutating_handler.go b/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/mutating_handler.go index 90d9a8aa3..e300bfee7 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/mutating_handler.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/mutating_handler.go @@ -34,13 +34,11 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/apis/types" controller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) // MutatingHandler handles ComponentDefinition type MutatingHandler struct { - Mapper discoverymapper.DiscoveryMapper Client client.Client // Decoder decodes objects Decoder *admission.Decoder @@ -89,7 +87,7 @@ func (h *MutatingHandler) Mutate(obj *v1beta1.ComponentDefinition) error { if obj.Spec.Workload.Definition != (common.WorkloadGVK{}) { // If only Definition field exists, fill Type field according to Definition. - defRef, err := util.ConvertWorkloadGVK2Definition(h.Mapper, obj.Spec.Workload.Definition) + defRef, err := util.ConvertWorkloadGVK2Definition(h.Client.RESTMapper(), obj.Spec.Workload.Definition) if err != nil { return err } @@ -146,6 +144,6 @@ func (h *MutatingHandler) InjectClient(c client.Client) error { func RegisterMutatingHandler(mgr manager.Manager, args controller.Args) { server := mgr.GetWebhookServer() server.Register("/mutating-core-oam-dev-v1beta1-componentdefinitions", &webhook.Admission{ - Handler: &MutatingHandler{Mapper: args.DiscoveryMapper, AutoGenWorkloadDef: args.AutoGenWorkloadDefinition}, + Handler: &MutatingHandler{AutoGenWorkloadDef: args.AutoGenWorkloadDefinition}, }) } diff --git a/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler.go b/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler.go index 9b1d31fa9..ce6cd095e 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler.go @@ -22,6 +22,7 @@ import ( "net/http" admissionv1 "k8s.io/api/admission/v1" + "k8s.io/apimachinery/pkg/api/meta" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" @@ -30,9 +31,7 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" - controller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" webhookutils "github.com/oam-dev/kubevela/pkg/webhook/utils" ) @@ -41,8 +40,6 @@ var componentDefGVR = v1beta1.SchemeGroupVersion.WithResource("componentdefiniti // ValidatingHandler handles validation of component definition type ValidatingHandler struct { - Mapper discoverymapper.DiscoveryMapper - // Decoder decodes object Decoder *admission.Decoder Client client.Client @@ -73,7 +70,7 @@ func (h *ValidatingHandler) Handle(ctx context.Context, req admission.Request) a if err != nil { return admission.Errored(http.StatusBadRequest, err) } - err = ValidateWorkload(h.Mapper, obj) + err = ValidateWorkload(h.Client.RESTMapper(), obj) if err != nil { return admission.Denied(err.Error()) } @@ -99,15 +96,13 @@ func (h *ValidatingHandler) InjectDecoder(d *admission.Decoder) error { } // RegisterValidatingHandler will register ComponentDefinition validation to webhook -func RegisterValidatingHandler(mgr manager.Manager, args controller.Args) { +func RegisterValidatingHandler(mgr manager.Manager) { server := mgr.GetWebhookServer() - server.Register("/validating-core-oam-dev-v1beta1-componentdefinitions", &webhook.Admission{Handler: &ValidatingHandler{ - Mapper: args.DiscoveryMapper, - }}) + server.Register("/validating-core-oam-dev-v1beta1-componentdefinitions", &webhook.Admission{Handler: &ValidatingHandler{}}) } // ValidateWorkload validates whether the Workload field is valid -func ValidateWorkload(dm discoverymapper.DiscoveryMapper, cd *v1beta1.ComponentDefinition) error { +func ValidateWorkload(mapper meta.RESTMapper, cd *v1beta1.ComponentDefinition) error { // If the Type and Definition are all empty, it will be rejected. if cd.Spec.Workload.Type == "" && cd.Spec.Workload.Definition == (common.WorkloadGVK{}) { @@ -116,7 +111,7 @@ func ValidateWorkload(dm discoverymapper.DiscoveryMapper, cd *v1beta1.ComponentD // if Type and Definitiondonā€˜t point to the same workloaddefinition, it will be rejected. if cd.Spec.Workload.Type != "" && cd.Spec.Workload.Definition != (common.WorkloadGVK{}) { - defRef, err := util.ConvertWorkloadGVK2Definition(dm, cd.Spec.Workload.Definition) + defRef, err := util.ConvertWorkloadGVK2Definition(mapper, cd.Spec.Workload.Definition) if err != nil { return err } diff --git a/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler_test.go b/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler_test.go index 42d4a4ea4..5a73e9968 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler_test.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/componentdefinition/validating_handler_test.go @@ -31,13 +31,13 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" core "github.com/oam-dev/kubevela/apis/core.oam.dev" "github.com/oam-dev/kubevela/apis/core.oam.dev/common" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) var handler ValidatingHandler @@ -92,13 +92,13 @@ var _ = AfterSuite(func() { var _ = Describe("Test ComponentDefinition validating handler", func() { BeforeEach(func() { - dm, err := discoverymapper.New(cfg) + cli, err := client.New(cfg, client.Options{}) Expect(err).Should(BeNil()) reqResource = metav1.GroupVersionResource{ Group: v1beta1.Group, Version: v1beta1.Version, Resource: "componentdefinitions"} - handler = ValidatingHandler{Mapper: dm} + handler = ValidatingHandler{Client: cli} handler.InjectDecoder(decoder) }) diff --git a/pkg/webhook/core.oam.dev/v1alpha2/traitdefinition/validating_handler.go b/pkg/webhook/core.oam.dev/v1alpha2/traitdefinition/validating_handler.go index 2b426cf74..71e333eff 100644 --- a/pkg/webhook/core.oam.dev/v1alpha2/traitdefinition/validating_handler.go +++ b/pkg/webhook/core.oam.dev/v1alpha2/traitdefinition/validating_handler.go @@ -34,7 +34,6 @@ import ( "github.com/oam-dev/kubevela/pkg/appfile" controller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" webhookutils "github.com/oam-dev/kubevela/pkg/webhook/utils" ) @@ -49,7 +48,6 @@ var traitDefGVR = v1beta1.SchemeGroupVersion.WithResource("traitdefinitions") // ValidatingHandler handles validation of trait definition type ValidatingHandler struct { Client client.Client - Mapper discoverymapper.DiscoveryMapper // Decoder decodes object Decoder *admission.Decoder @@ -124,7 +122,6 @@ func (h *ValidatingHandler) InjectDecoder(d *admission.Decoder) error { func RegisterValidatingHandler(mgr manager.Manager, args controller.Args) { server := mgr.GetWebhookServer() server.Register("/validating-core-oam-dev-v1alpha2-traitdefinitions", &webhook.Admission{Handler: &ValidatingHandler{ - Mapper: args.DiscoveryMapper, Validators: []TraitDefValidator{ TraitDefValidatorFn(ValidateDefinitionReference), // add more validators here diff --git a/pkg/workflow/operation/operation.go b/pkg/workflow/operation/operation.go index 5ee266a05..c22faab4a 100644 --- a/pkg/workflow/operation/operation.go +++ b/pkg/workflow/operation/operation.go @@ -442,7 +442,7 @@ func (wo appWorkflowStepOperator) Restart(ctx context.Context, step string) erro return err } } - appParser := appfile.NewApplicationParser(wo.cli, nil, nil) + appParser := appfile.NewApplicationParser(wo.cli, nil) appFile, err := appParser.GenerateAppFile(ctx, app) if err != nil { return fmt.Errorf("failed to parse appfile: %w", err) diff --git a/pkg/workflow/operation/suit_test.go b/pkg/workflow/operation/suit_test.go index c55f4037b..feff3e51d 100644 --- a/pkg/workflow/operation/suit_test.go +++ b/pkg/workflow/operation/suit_test.go @@ -45,7 +45,6 @@ import ( "github.com/kubevela/workflow/pkg/cue/packages" coreoam "github.com/oam-dev/kubevela/apis/core.oam.dev" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" // +kubebuilder:scaffold:imports ) @@ -53,7 +52,6 @@ var cfg *rest.Config var scheme *runtime.Scheme var k8sClient client.Client var testEnv *envtest.Environment -var dm discoverymapper.DiscoveryMapper var pd *packages.PackageDiscover var testns string var dc *discovery.DiscoveryClient @@ -94,9 +92,6 @@ var _ = BeforeSuite(func() { Expect(err).ToNot(HaveOccurred()) Expect(dc).ShouldNot(BeNil()) - dm, err = discoverymapper.New(cfg) - Expect(err).ToNot(HaveOccurred()) - Expect(dm).ToNot(BeNil()) pd, err = packages.NewPackageDiscover(cfg) Expect(err).ToNot(HaveOccurred()) Expect(pd).ToNot(BeNil()) diff --git a/pkg/workflow/template/load.go b/pkg/workflow/template/load.go index c1f45ce0f..f9ac40d5b 100644 --- a/pkg/workflow/template/load.go +++ b/pkg/workflow/template/load.go @@ -23,6 +23,7 @@ import ( "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" "sigs.k8s.io/controller-runtime/pkg/client" "github.com/kubevela/workflow/pkg/tasks/template" @@ -31,7 +32,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/appfile" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" ) var ( @@ -79,19 +79,19 @@ func (loader *WorkflowStepLoader) LoadTemplate(ctx context.Context, name string) } // NewWorkflowStepTemplateLoader create a task template loader. -func NewWorkflowStepTemplateLoader(client client.Client, dm discoverymapper.DiscoveryMapper) template.Loader { +func NewWorkflowStepTemplateLoader(client client.Client) template.Loader { return &WorkflowStepLoader{ loadCapabilityDefinition: func(ctx context.Context, capName string) (*appfile.Template, error) { - return appfile.LoadTemplate(ctx, dm, client, capName, types.TypeWorkflowStep) + return appfile.LoadTemplate(ctx, client, capName, types.TypeWorkflowStep) }, } } // NewWorkflowStepTemplateRevisionLoader create a task template loader from ApplicationRevision. -func NewWorkflowStepTemplateRevisionLoader(rev *v1beta1.ApplicationRevision, dm discoverymapper.DiscoveryMapper) template.Loader { +func NewWorkflowStepTemplateRevisionLoader(rev *v1beta1.ApplicationRevision, mapper meta.RESTMapper) template.Loader { return &WorkflowStepLoader{ loadCapabilityDefinition: func(ctx context.Context, capName string) (*appfile.Template, error) { - return appfile.LoadTemplateFromRevision(capName, types.TypeWorkflowStep, rev, dm) + return appfile.LoadTemplateFromRevision(capName, types.TypeWorkflowStep, rev, mapper) }, } } diff --git a/pkg/workflow/template/load_test.go b/pkg/workflow/template/load_test.go index 7e849cb5a..e20c52010 100644 --- a/pkg/workflow/template/load_test.go +++ b/pkg/workflow/template/load_test.go @@ -28,7 +28,6 @@ import ( "sigs.k8s.io/yaml" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" - "github.com/oam-dev/kubevela/pkg/oam/mock" ) func TestLoad(t *testing.T) { @@ -50,8 +49,7 @@ func TestLoad(t *testing.T) { return nil }, } - tdm := mock.NewMockDiscoveryMapper() - loader := NewWorkflowStepTemplateLoader(cli, tdm) + loader := NewWorkflowStepTemplateLoader(cli) tmpl, err := loader.LoadTemplate(context.Background(), "builtin-apply-component") assert.NilError(t, err) diff --git a/references/appfile/addon.go b/references/appfile/addon.go index ebf39a4b5..3a0991012 100644 --- a/references/appfile/addon.go +++ b/references/appfile/addon.go @@ -48,10 +48,6 @@ const ( // ApplyTerraform deploys addon resources func ApplyTerraform(app *v1beta1.Application, k8sClient client.Client, ioStream util.IOStreams, namespace string, args common.Args) ([]commontypes.ApplicationComponent, error) { - dm, err := args.GetDiscoveryMapper() - if err != nil { - return nil, err - } pd, err := args.GetPackageDiscover() if err != nil { return nil, err @@ -60,7 +56,7 @@ func ApplyTerraform(app *v1beta1.Application, k8sClient client.Client, ioStream // TODO(zzxwill) Need to check whether authentication credentials of a specific cloud provider are exported as environment variables, like `ALICLOUD_ACCESS_KEY` var nativeVelaComponents []commontypes.ApplicationComponent // parse template - appParser := appfile.NewApplicationParser(k8sClient, dm, pd) + appParser := appfile.NewApplicationParser(k8sClient, pd) ctx := util2.SetNamespaceInCtx(context.Background(), namespace) appFile, err := appParser.GenerateAppFile(ctx, app) diff --git a/references/cli/components.go b/references/cli/components.go index 97c1a8393..18933684c 100644 --- a/references/cli/components.go +++ b/references/cli/components.go @@ -221,10 +221,6 @@ func PrintInstalledCompDef(c common2.Args, io cmdutil.IOStreams, filter filterFu if err != nil { return errors.Wrap(err, "get component definition list error") } - dm, err := (&common2.Args{}).GetDiscoveryMapper() - if err != nil { - return errors.Wrap(err, "get discovery mapper error") - } table := newUITable() table.AddRow("NAME", "DEFINITION", "DESCRIPTION") @@ -235,7 +231,7 @@ func PrintInstalledCompDef(c common2.Args, io cmdutil.IOStreams, filter filterFu io.Infof("error encoding definition: %s\n", cd.Name) continue } - capa, err := ParseCapability(dm, data) + capa, err := ParseCapability(clt.RESTMapper(), data) if err != nil { io.Errorf("error parsing capability: %s\n", cd.Name) continue diff --git a/references/cli/debug.go b/references/cli/debug.go index 1f2efc4b3..c757eb751 100644 --- a/references/cli/debug.go +++ b/references/cli/debug.go @@ -43,7 +43,6 @@ import ( "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/appfile/dryrun" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/utils/common" cmdutil "github.com/oam-dev/kubevela/pkg/utils/util" ) @@ -120,11 +119,7 @@ func (d *debugOpts) debugApplication(ctx context.Context, wargs *WorkflowArgs, c return d.debugWorkflow(ctx, wargs, cli, pd, ioStreams) } - dm, err := discoverymapper.New(config) - if err != nil { - return err - } - dryRunOpt := dryrun.NewDryRunOption(cli, config, dm, pd, []oam.Object{}, false) + dryRunOpt := dryrun.NewDryRunOption(cli, config, pd, []oam.Object{}, false) comps, _, err := dryRunOpt.ExecuteDryRun(ctx, app) if err != nil { ioStreams.Info(color.RedString("%s%s", emojiFail, err.Error())) diff --git a/references/cli/dryrun.go b/references/cli/dryrun.go index dad6af1a9..dda53481b 100644 --- a/references/cli/dryrun.go +++ b/references/cli/dryrun.go @@ -42,7 +42,6 @@ import ( "github.com/oam-dev/kubevela/pkg/appfile/dryrun" pkgdef "github.com/oam-dev/kubevela/pkg/definition" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" oamutil "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/utils" "github.com/oam-dev/kubevela/pkg/utils/common" @@ -158,12 +157,8 @@ func DryRunApplication(cmdOption *DryRunCmdOptions, c common.Args, namespace str if err != nil { return buff, err } - dm, err := discoverymapper.New(config) - if err != nil { - return buff, err - } - dryRunOpt := dryrun.NewDryRunOption(newClient, config, dm, pd, objs, false) + dryRunOpt := dryrun.NewDryRunOption(newClient, config, pd, objs, false) ctx := oamutil.SetNamespaceInCtx(context.Background(), namespace) // Perform validation only if not in offline mode diff --git a/references/cli/livediff.go b/references/cli/livediff.go index d58a51974..cd758b535 100644 --- a/references/cli/livediff.go +++ b/references/cli/livediff.go @@ -30,7 +30,6 @@ import ( "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/appfile/dryrun" "github.com/oam-dev/kubevela/pkg/oam" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/utils/common" cmdutil "github.com/oam-dev/kubevela/pkg/utils/util" ) @@ -117,11 +116,7 @@ func LiveDiffApplication(cmdOption *LiveDiffCmdOptions, c common.Args) (bytes.Bu if err != nil { return buff, err } - dm, err := discoverymapper.New(config) - if err != nil { - return buff, err - } - liveDiffOption := dryrun.NewLiveDiffOption(newClient, config, dm, pd, objs) + liveDiffOption := dryrun.NewLiveDiffOption(newClient, config, pd, objs) if cmdOption.ApplicationFile == "" { return cmdOption.renderlessDiff(newClient, liveDiffOption) } diff --git a/references/cli/registry.go b/references/cli/registry.go index 540a472f8..0f8045523 100644 --- a/references/cli/registry.go +++ b/references/cli/registry.go @@ -33,11 +33,11 @@ import ( "github.com/pkg/errors" "github.com/spf13/cobra" "golang.org/x/oauth2" + "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "sigs.k8s.io/yaml" "github.com/oam-dev/kubevela/apis/types" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/utils/common" "github.com/oam-dev/kubevela/pkg/utils/system" cmdutil "github.com/oam-dev/kubevela/pkg/utils/util" @@ -582,11 +582,11 @@ func (l LocalRegistry) ListCaps() ([]types.Capability, error) { } func (item RegistryFile) toCapability() (types.Capability, error) { - dm, err := (&common.Args{}).GetDiscoveryMapper() + cli, err := (&common.Args{}).GetClient() if err != nil { return types.Capability{}, err } - capability, err := ParseCapability(dm, item.data) + capability, err := ParseCapability(cli.RESTMapper(), item.data) if err != nil { return types.Capability{}, err } @@ -736,7 +736,7 @@ func StoreRepos(registries []apis.RegistryConfig) error { } // ParseCapability will convert config from remote center to capability -func ParseCapability(mapper discoverymapper.DiscoveryMapper, data []byte) (types.Capability, error) { +func ParseCapability(mapper meta.RESTMapper, data []byte) (types.Capability, error) { var obj = unstructured.Unstructured{Object: make(map[string]interface{})} err := yaml.Unmarshal(data, &obj.Object) if err != nil { diff --git a/references/cli/revision.go b/references/cli/revision.go index 29c0dfc7c..186fc8b3f 100644 --- a/references/cli/revision.go +++ b/references/cli/revision.go @@ -134,11 +134,6 @@ func getRevision(ctx context.Context, c common.Args, format string, out io.Write return err } - dm, err := c.GetDiscoveryMapper() - if err != nil { - return err - } - pd, err := c.GetPackageDiscover() if err != nil { return err @@ -154,7 +149,7 @@ func getRevision(ctx context.Context, c common.Args, format string, out io.Write return fmt.Errorf(fmt.Sprintf("Unable to get application revision %s in namespace %s", name, namespace)) } - queryValue, err := velaql.NewViewHandler(cli, kubeConfig, dm, pd).QueryView(ctx, query) + queryValue, err := velaql.NewViewHandler(cli, kubeConfig, pd).QueryView(ctx, query) if err != nil { klog.Errorf("fail to query the view %s", err.Error()) return fmt.Errorf(fmt.Sprintf("Unable to get application revision %s in namespace %s", name, namespace)) diff --git a/references/cli/show.go b/references/cli/show.go index 187de8753..26646b59e 100644 --- a/references/cli/show.go +++ b/references/cli/show.go @@ -207,16 +207,11 @@ func startReferenceDocsSite(ctx context.Context, ns string, c common.Args, ioStr if err != nil { return err } - dm, err := c.GetDiscoveryMapper() - if err != nil { - return err - } ref := &docgen.MarkdownReference{ ParseReference: docgen.ParseReference{ Client: cli, I18N: &docgen.En, }, - DiscoveryMapper: dm, } if err := ref.CreateMarkdown(ctx, capabilities, docsPath, true, pd); err != nil { @@ -476,10 +471,6 @@ func ShowReferenceMarkdown(ctx context.Context, c common.Args, ioStreams cmdutil return err } ref.ParseReference = paserRef - ref.DiscoveryMapper, err = c.GetDiscoveryMapper() - if err != nil { - return err - } if err := ref.GenerateReferenceDocs(ctx, c, outputPath); err != nil { return errors.Wrap(err, "failed to generate reference docs") } diff --git a/references/cli/status.go b/references/cli/status.go index 104dac53c..97208a496 100644 --- a/references/cli/status.go +++ b/references/cli/status.go @@ -48,7 +48,6 @@ import ( "github.com/oam-dev/kubevela/apis/types" pkgappfile "github.com/oam-dev/kubevela/pkg/appfile" "github.com/oam-dev/kubevela/pkg/multicluster" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/policy" "github.com/oam-dev/kubevela/pkg/resourcetracker" "github.com/oam-dev/kubevela/pkg/utils/common" @@ -485,10 +484,6 @@ func printApplicationTree(c common.Args, cmd *cobra.Command, appName string, app if err != nil { return err } - dm, err := discoverymapper.New(config) - if err != nil { - return err - } app, err := loadRemoteApplication(cli, appNs, appName) if err != nil { @@ -506,7 +501,7 @@ func printApplicationTree(c common.Args, cmd *cobra.Command, appName string, app } var placements []v1alpha1.PlacementDecision - af, err := pkgappfile.NewApplicationParser(cli, dm, pd).GenerateAppFile(context.Background(), app) + af, err := pkgappfile.NewApplicationParser(cli, pd).GenerateAppFile(context.Background(), app) if err == nil { placements, _ = policy.GetPlacementsFromTopologyPolicies(context.Background(), cli, app.GetNamespace(), af.Policies, true) } diff --git a/references/cli/traits.go b/references/cli/traits.go index 087e23a7e..249d2cf04 100644 --- a/references/cli/traits.go +++ b/references/cli/traits.go @@ -198,12 +198,8 @@ func InstallTraitByNameFromRegistry(args common2.Args, ioStream cmdutil.IOStream if err != nil { return err } - mapper, err := args.GetDiscoveryMapper() - if err != nil { - return err - } - err = common.InstallTraitDefinition(k8sClient, mapper, data, ioStream, &capObj) + err = common.InstallTraitDefinition(k8sClient, data, ioStream, &capObj) if err != nil { return err } @@ -222,10 +218,6 @@ func PrintInstalledTraitDef(c common2.Args, io cmdutil.IOStreams, filter filterF if err != nil { return errors.Wrap(err, "get trait definition list error") } - dm, err := (&common2.Args{}).GetDiscoveryMapper() - if err != nil { - return errors.Wrap(err, "get discovery mapper error") - } table := newUITable() table.AddRow("NAME", "APPLIES-TO") @@ -237,7 +229,7 @@ func PrintInstalledTraitDef(c common2.Args, io cmdutil.IOStreams, filter filterF io.Infof("error encoding definition: %s\n", td.Name) continue } - capa, err := ParseCapability(dm, data) + capa, err := ParseCapability(clt.RESTMapper(), data) if err != nil { io.Errorf("error parsing capability: %s (message: %s)\n", td.Name, err.Error()) continue diff --git a/references/cli/velaql.go b/references/cli/velaql.go index 3498b13e4..25451915d 100644 --- a/references/cli/velaql.go +++ b/references/cli/velaql.go @@ -355,10 +355,6 @@ func setFilterParams(f Filter, params map[string]string) { // QueryValue get queryValue from velaQL func QueryValue(ctx context.Context, velaC common.Args, queryView *velaql.QueryView) (*value.Value, error) { - dm, err := velaC.GetDiscoveryMapper() - if err != nil { - return nil, err - } pd, err := velaC.GetPackageDiscover() if err != nil { return nil, err @@ -371,7 +367,7 @@ func QueryValue(ctx context.Context, velaC common.Args, queryView *velaql.QueryV if err != nil { return nil, err } - queryValue, err := velaql.NewViewHandler(client, config, dm, pd).QueryView(ctx, *queryView) + queryValue, err := velaql.NewViewHandler(client, config, pd).QueryView(ctx, *queryView) if err != nil { return nil, err } diff --git a/references/common/registry.go b/references/common/registry.go index 0349b9902..8d7f9a30e 100644 --- a/references/common/registry.go +++ b/references/common/registry.go @@ -30,7 +30,6 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/apis/types" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" cmdutil "github.com/oam-dev/kubevela/pkg/utils/util" ) @@ -60,7 +59,7 @@ func InstallComponentDefinition(client client.Client, componentData []byte, ioSt } // InstallTraitDefinition will add a trait into K8s cluster and install it's controller -func InstallTraitDefinition(client client.Client, mapper discoverymapper.DiscoveryMapper, traitdata []byte, ioStreams cmdutil.IOStreams, cap *types.Capability) error { +func InstallTraitDefinition(client client.Client, traitdata []byte, ioStreams cmdutil.IOStreams, cap *types.Capability) error { var td v1beta1.TraitDefinition var err error if err = yaml.Unmarshal(traitdata, &td); err != nil { @@ -68,7 +67,7 @@ func InstallTraitDefinition(client client.Client, mapper discoverymapper.Discove } td.Namespace = types.DefaultKubeVelaNS ioStreams.Info("Installing trait " + td.Name) - gvk, err := util.GetGVKFromDefinition(mapper, td.Spec.Reference) + gvk, err := util.GetGVKFromDefinition(client.RESTMapper(), td.Spec.Reference) if err != nil { return err } diff --git a/references/docgen/cluster.go b/references/docgen/cluster.go index 3faace00d..c5f618fdf 100644 --- a/references/docgen/cluster.go +++ b/references/docgen/cluster.go @@ -23,6 +23,7 @@ import ( "github.com/pkg/errors" kerrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" @@ -37,7 +38,6 @@ import ( "github.com/oam-dev/kubevela/pkg/appfile" "github.com/oam-dev/kubevela/pkg/cue" "github.com/oam-dev/kubevela/pkg/definition" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" "github.com/oam-dev/kubevela/pkg/utils" "github.com/oam-dev/kubevela/pkg/utils/common" @@ -155,16 +155,11 @@ func GetComponentsFromClusterWithValidateOption(ctx context.Context, namespace s var templateErrors []error for _, cd := range componentsDefs.Items { - dm, err := c.GetDiscoveryMapper() - if err != nil { - return nil, nil, err - } - defRef := commontypes.DefinitionReference{ Name: cd.Spec.Workload.Type, } if cd.Spec.Workload.Type != types.AutoDetectWorkloadDefinition { - defRef, err = util.ConvertWorkloadGVK2Definition(dm, cd.Spec.Workload.Definition) + defRef, err = util.ConvertWorkloadGVK2Definition(newClient.RESTMapper(), cd.Spec.Workload.Definition) if err != nil { return nil, nil, err } @@ -176,7 +171,7 @@ func GetComponentsFromClusterWithValidateOption(ctx context.Context, namespace s continue } if validateFlag && defRef.Name != types.AutoDetectWorkloadDefinition { - if err = validateCapabilities(tmp, dm, cd.Name, defRef); err != nil { + if err = validateCapabilities(tmp, newClient.RESTMapper(), cd.Name, defRef); err != nil { return nil, nil, err } } @@ -196,14 +191,6 @@ func GetTraitsFromClusterWithValidateOption(ctx context.Context, namespace strin if err != nil { return nil, nil, err } - config, err := c.GetConfig() - if err != nil { - return nil, nil, err - } - dm, err := discoverymapper.New(config) - if err != nil { - return nil, nil, err - } var templates []types.Capability var traitDefs v1beta1.TraitDefinitionList err = newClient.List(ctx, &traitDefs, &client.ListOptions{Namespace: namespace, LabelSelector: selector}) @@ -227,7 +214,7 @@ func GetTraitsFromClusterWithValidateOption(ctx context.Context, namespace strin } tmp.Namespace = namespace if validateFlag { - if err = validateCapabilities(tmp, dm, td.Name, td.Spec.Reference); err != nil { + if err = validateCapabilities(tmp, newClient.RESTMapper(), td.Name, td.Spec.Reference); err != nil { return nil, nil, err } } @@ -298,9 +285,9 @@ func GetPolicies(ctx context.Context, namespace string, c common.Args) ([]types. } // validateCapabilities validates whether GVK are successfully retrieved. -func validateCapabilities(tmp *types.Capability, dm discoverymapper.DiscoveryMapper, definitionName string, reference commontypes.DefinitionReference) error { +func validateCapabilities(tmp *types.Capability, mapper meta.RESTMapper, definitionName string, reference commontypes.DefinitionReference) error { var err error - gvk, err := util.GetGVKFromDefinition(dm, reference) + gvk, err := util.GetGVKFromDefinition(mapper, reference) if err != nil { errMsg := err.Error() var substr = "no matches for " @@ -451,11 +438,7 @@ func GetCapabilityByName(ctx context.Context, c common.Args, capabilityName stri if componentDef.Spec.Workload.Type == types.AutoDetectWorkloadDefinition { refName = types.AutoDetectWorkloadDefinition } else { - dm, err := c.GetDiscoveryMapper() - if err != nil { - return nil, err - } - ref, err := util.ConvertWorkloadGVK2Definition(dm, componentDef.Spec.Workload.Definition) + ref, err := util.ConvertWorkloadGVK2Definition(newClient.RESTMapper(), componentDef.Spec.Workload.Definition) if err != nil { return nil, err } @@ -548,11 +531,7 @@ func GetCapabilityFromDefinitionRevision(ctx context.Context, c common.Args, pd if componentDef.Spec.Workload.Type == types.AutoDetectWorkloadDefinition { refName = types.AutoDetectWorkloadDefinition } else { - dm, err := c.GetDiscoveryMapper() - if err != nil { - return nil, err - } - ref, err := util.ConvertWorkloadGVK2Definition(dm, componentDef.Spec.Workload.Definition) + ref, err := util.ConvertWorkloadGVK2Definition(k8sClient.RESTMapper(), componentDef.Spec.Workload.Definition) if err != nil { return nil, err } diff --git a/references/docgen/convert.go b/references/docgen/convert.go index 7b2af22ca..145cd25d9 100644 --- a/references/docgen/convert.go +++ b/references/docgen/convert.go @@ -19,6 +19,7 @@ package docgen import ( "fmt" + "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" @@ -26,12 +27,11 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/apis/types" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/oam/util" ) // ParseCapabilityFromUnstructured will convert Unstructured to Capability -func ParseCapabilityFromUnstructured(mapper discoverymapper.DiscoveryMapper, pd *packages.PackageDiscover, obj unstructured.Unstructured) (types.Capability, error) { +func ParseCapabilityFromUnstructured(mapper meta.RESTMapper, pd *packages.PackageDiscover, obj unstructured.Unstructured) (types.Capability, error) { var err error switch obj.GetKind() { case "ComponentDefinition": diff --git a/references/docgen/markdown.go b/references/docgen/markdown.go index 7ee4971e0..830a4054f 100644 --- a/references/docgen/markdown.go +++ b/references/docgen/markdown.go @@ -32,7 +32,6 @@ import ( "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/cue" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" "github.com/oam-dev/kubevela/pkg/utils/common" ) @@ -45,7 +44,6 @@ type MarkdownReference struct { AllInOne bool ForceExample bool CustomDocHeader string - DiscoveryMapper discoverymapper.DiscoveryMapper ParseReference } @@ -173,7 +171,7 @@ func (ref *MarkdownReference) GenerateMarkdownForCap(ctx context.Context, c type } if c.Type == types.TypeComponentDefinition { var warnErr error - baseDoc, warnErr = GetBaseResourceKinds(c.CueTemplate, pd, ref.DiscoveryMapper) + baseDoc, warnErr = GetBaseResourceKinds(c.CueTemplate, pd, ref.Client.RESTMapper()) if warnErr != nil { klog.Warningf("failed to get base resource kinds for %s: %v", c.Name, warnErr) } diff --git a/references/docgen/markdown_test.go b/references/docgen/markdown_test.go index 59193b21c..9bc020f4f 100644 --- a/references/docgen/markdown_test.go +++ b/references/docgen/markdown_test.go @@ -26,6 +26,7 @@ import ( "github.com/crossplane/crossplane-runtime/pkg/test" "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" + "sigs.k8s.io/controller-runtime/pkg/client/fake" "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/utils/common" @@ -42,7 +43,7 @@ func TestCreateMarkdownForCUE(t *testing.T) { time.Sleep(time.Millisecond) - mr := MarkdownReference{} + mr := MarkdownReference{ParseReference: ParseReference{Client: fake.NewClientBuilder().Build()}} mr.Local = &FromLocal{Paths: []string{"./testdata/testdef.cue"}} capp, err := ParseLocalFile(mr.Local.Paths[0], common.Args{}) assert.NoError(t, err) diff --git a/references/docgen/parser.go b/references/docgen/parser.go index dedee96ee..6a4610e5b 100644 --- a/references/docgen/parser.go +++ b/references/docgen/parser.go @@ -34,10 +34,12 @@ import ( "github.com/pkg/errors" "github.com/rogpeppe/go-internal/modfile" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/yaml" "github.com/kubevela/workflow/pkg/cue/model/value" @@ -49,7 +51,6 @@ import ( velacue "github.com/oam-dev/kubevela/pkg/cue" velaprocess "github.com/oam-dev/kubevela/pkg/cue/process" pkgdef "github.com/oam-dev/kubevela/pkg/definition" - "github.com/oam-dev/kubevela/pkg/oam/discoverymapper" pkgUtils "github.com/oam-dev/kubevela/pkg/utils" "github.com/oam-dev/kubevela/pkg/utils/common" "github.com/oam-dev/kubevela/pkg/utils/terraform" @@ -687,9 +688,13 @@ func ParseLocalFile(localFilePath string, c common.Args) (*types.Capability, err if err != nil { klog.Warning("fail to build package discover, use local info instead", err) } - mapper, err := c.GetDiscoveryMapper() + cli, err := c.GetClient() if err != nil { - klog.Warning("fail to build discover mapper, use local info instead", err) + klog.Warning("fail to build client, use local info instead", err) + } + mapper := fake.NewClientBuilder().Build().RESTMapper() + if cli != nil { + mapper = cli.RESTMapper() } lcap, err := ParseCapabilityFromUnstructured(mapper, pd, def.Unstructured) if err != nil { @@ -748,7 +753,7 @@ func WalkParameterSchema(parameters *openapi3.Schema, name string, depth int) { } // GetBaseResourceKinds helps get resource.group string of components' base resource -func GetBaseResourceKinds(cueStr string, pd *packages.PackageDiscover, dm discoverymapper.DiscoveryMapper) (string, error) { +func GetBaseResourceKinds(cueStr string, pd *packages.PackageDiscover, mapper meta.RESTMapper) (string, error) { t, err := value.NewValue(cueStr+velacue.BaseTemplate, pd, "") if err != nil { return "", errors.Wrap(err, "failed to parse base template") @@ -769,11 +774,8 @@ func GetBaseResourceKinds(cueStr string, pd *packages.PackageDiscover, dm discov if len(GroupAndVersion) == 1 { GroupAndVersion = append([]string{""}, GroupAndVersion...) } - gvr, err := dm.ResourcesFor(schema.GroupVersionKind{ - Group: GroupAndVersion[0], - Version: GroupAndVersion[1], - Kind: kind, - }) + mapping, err := mapper.RESTMapping(schema.GroupKind{Group: GroupAndVersion[0], Kind: kind}, GroupAndVersion[1]) + gvr := mapping.Resource if err != nil { return "", err }