johnpoth commented on code in PR #4350: URL: https://github.com/apache/camel-k/pull/4350#discussion_r1189912622
########## pkg/kamelet/repository/oci_repository.go: ########## @@ -0,0 +1,170 @@ +package repository + +import ( + "context" + "encoding/json" + "fmt" + "github.com/containers/image/docker/reference" + "io/ioutil" + "path" + "path/filepath" + "sync" + + camelv1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1" + "k8s.io/apimachinery/pkg/util/yaml" + + "os" + "strings" + + "oras.land/oras-go/v2" + "oras.land/oras-go/v2/content/file" + "oras.land/oras-go/v2/registry/remote" + "oras.land/oras-go/v2/registry/remote/auth" + "oras.land/oras-go/v2/registry/remote/retry" +) + +type ociKameletRepository struct { + once sync.Once + image string + relative string + + kamelets map[string]string + pollRoot string + pollErr error +} + +func newOCIKameletRepository(image string) KameletRepository { + imageName := image + relativePath := "" + + items := strings.Split(image, "?") + if len(items) == 2 { + imageName = items[0] + relativePath = items[1] + } + + repo := ociKameletRepository{ + image: imageName, + relative: relativePath, + kamelets: make(map[string]string, 0), + } + + return &repo +} + +// Enforce type +var _ KameletRepository = &ociKameletRepository{} + +func (r *ociKameletRepository) List(ctx context.Context) ([]string, error) { + + r.pullAll(ctx) + + if r.pollErr != nil { + return nil, r.pollErr + } + + kamelets := make([]string, 0, len(r.kamelets)) + for k := range r.kamelets { + kamelets = append(kamelets, k) + } + + return kamelets, r.pollErr +} + +func (r *ociKameletRepository) Get(ctx context.Context, name string) (*camelv1.Kamelet, error) { + r.pullAll(ctx) Review Comment: You could store a Kamelet in a layer and have it referenced in the Manifest. That way if you could pull a single Kamelet by getting it's address in the Manifest. The only drawback is the 127 layer limit so you could "only" store 127 Kamelets per image ... -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@camel.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org