diff --git a/pkg/hostscheduler/gkescheduler/helper.go b/pkg/hostscheduler/gkescheduler/helper.go index 3eed49e6cd..6a3393cf20 100644 --- a/pkg/hostscheduler/gkescheduler/helper.go +++ b/pkg/hostscheduler/gkescheduler/helper.go @@ -98,8 +98,8 @@ func restConfigFromCluster(cluster *containerpb.Cluster) (*rest.Config, error) { CertData: cert, KeyData: key, }, - Username: auth.GetUsername(), - Password: auth.GetPassword(), + Username: auth.GetUsername(), //nolint + Password: auth.GetPassword(), //nolint } return cfg, nil } diff --git a/pkg/testrunner/componentdescriptor/componentdescriptor.go b/pkg/testrunner/componentdescriptor/componentdescriptor.go index d2cc0c6736..4cfedaa3e4 100644 --- a/pkg/testrunner/componentdescriptor/componentdescriptor.go +++ b/pkg/testrunner/componentdescriptor/componentdescriptor.go @@ -17,13 +17,17 @@ import ( "context" "fmt" "io/ioutil" + "os" "strings" "github.com/gardener/component-cli/ociclient" ociopts "github.com/gardener/component-cli/ociclient/options" - comphelper "github.com/gardener/component-cli/pkg/components" + "github.com/gardener/component-cli/pkg/commands/constants" + cdcomponents "github.com/gardener/component-cli/pkg/components" cdv2 "github.com/gardener/component-spec/bindings-go/apis/v2" "github.com/gardener/component-spec/bindings-go/codec" + "github.com/gardener/component-spec/bindings-go/ctf/ctfutils" + cdoci "github.com/gardener/component-spec/bindings-go/oci" "github.com/go-logr/logr" "github.com/mandelsoft/vfs/pkg/osfs" @@ -42,8 +46,11 @@ func GetComponents(ctx context.Context, log logr.Logger, ociClient ociclient.Cli if err := codec.Decode(content, compDesc, codec.DisableValidation(true)); err != nil { return nil, err } - resolver := comphelper.New(log, osfs.New(), ociClient, codec.DisableValidation(true)) - compList, err := comphelper.ResolveTransitiveComponentDescriptors(ctx, resolver, compDesc) + resolver := cdoci.NewResolver(ociClient, codec.DisableValidation(true)).WithLog(log) + if len(os.Getenv(constants.ComponentRepositoryCacheDirEnvVar)) != 0 { + resolver.WithCache(cdcomponents.NewLocalComponentCache(osfs.New())) + } + compList, err := ctfutils.ResolveList(ctx, resolver, compDesc.GetEffectiveRepositoryContext(), compDesc.GetName(), compDesc.GetVersion()) if err != nil { return nil, err } diff --git a/vendor/github.com/gardener/component-spec/bindings-go/ctf/ctfutils/ctfutils.go b/vendor/github.com/gardener/component-spec/bindings-go/ctf/ctfutils/ctfutils.go new file mode 100644 index 0000000000..506e10cfe8 --- /dev/null +++ b/vendor/github.com/gardener/component-spec/bindings-go/ctf/ctfutils/ctfutils.go @@ -0,0 +1,82 @@ +// SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors. +// +// SPDX-License-Identifier: Apache-2.0 + +package ctfutils + +import ( + "context" + "fmt" + + cdv2 "github.com/gardener/component-spec/bindings-go/apis/v2" + "github.com/gardener/component-spec/bindings-go/ctf" +) + +// ResolveList resolves all component descriptors of a given root component descriptor. +func ResolveList(ctx context.Context, + resolver ctf.ComponentResolver, + repoCtx cdv2.Repository, + name, + version string) (*cdv2.ComponentDescriptorList, error) { + + list := &cdv2.ComponentDescriptorList{} + err := ResolveRecursive(ctx, resolver, repoCtx, name, version, func(cd *cdv2.ComponentDescriptor) (stop bool, err error) { + if _, err := list.GetComponent(cd.Name, cd.Version); err != nil { + list.Components = append(list.Components, *cd) + } + return false, nil + }) + if err != nil { + return nil, err + } + return list, nil +} + +// ResolvedCallbackFunc describes a function that is called when a component descriptor is resolved. +// The function can optionally return an bool which when set to true stops the resolve of further component descriptors +type ResolvedCallbackFunc func(descriptor *cdv2.ComponentDescriptor) (stop bool, err error) + +// ResolveRecursive recursively resolves all component descriptors dependencies. +// Everytime a new component descriptor is resolved the given callback function is called. +// The resolve of further components can be stopped when +// - the callback returns true for the stop parameter +// - the callback returns an error +// - all components are successfully resolved. +func ResolveRecursive(ctx context.Context, resolver ctf.ComponentResolver, repoCtx cdv2.Repository, name, version string, cb ResolvedCallbackFunc) error { + cd, err := resolver.Resolve(ctx, repoCtx, name, version) + if err != nil { + return fmt.Errorf("unable to resolve component descriptor for %q %q %q: %w", repoCtx.GetType(), name, version, err) + } + stop, err := cb(cd) + if err != nil { + return fmt.Errorf("error while calling callback for %q %q %q: %w", repoCtx.GetType(), name, version, err) + } + if stop { + return nil + } + return resolveRecursive(ctx, resolver, repoCtx, cd, cb) +} + +func resolveRecursive(ctx context.Context, resolver ctf.ComponentResolver, repoCtx cdv2.Repository, cd *cdv2.ComponentDescriptor, cb ResolvedCallbackFunc) error { + components := make([]*cdv2.ComponentDescriptor, 0) + for _, ref := range cd.ComponentReferences { + cd, err := resolver.Resolve(ctx, repoCtx, ref.ComponentName, ref.Version) + if err != nil { + return fmt.Errorf("unable to resolve component descriptor for %q %q %q: %w", repoCtx.GetType(), ref.ComponentName, ref.Version, err) + } + components = append(components, cd) + stop, err := cb(cd) + if err != nil { + return fmt.Errorf("error while calling callback for %q %q %q: %w", repoCtx.GetType(), ref.ComponentName, ref.Version, err) + } + if stop { + return nil + } + } + for _, ref := range components { + if err := resolveRecursive(ctx, resolver, repoCtx, ref, cb); err != nil { + return err + } + } + return nil +} diff --git a/vendor/k8s.io/code-generator/generate-internal-groups.sh b/vendor/k8s.io/code-generator/generate-internal-groups.sh old mode 100755 new mode 100644 diff --git a/vendor/modules.txt b/vendor/modules.txt index 019795eeb8..84df7dbf69 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -115,6 +115,7 @@ github.com/gardener/component-spec/bindings-go/apis/v2/jsonscheme github.com/gardener/component-spec/bindings-go/apis/v2/validation github.com/gardener/component-spec/bindings-go/codec github.com/gardener/component-spec/bindings-go/ctf +github.com/gardener/component-spec/bindings-go/ctf/ctfutils github.com/gardener/component-spec/bindings-go/oci github.com/gardener/component-spec/bindings-go/utils/selector # github.com/gardener/external-dns-management v0.7.18