mirror of https://github.com/harness/drone.git
feat: [AH-932]: fix for docker hub images with library prefix (#3454)
* feat: [AH-932]: fix go lint errors * feat: [AH-932]: fix go lint errors * feat: [AH-932]: fix for docker hub images with library prefixtry-new-ui
parent
6420c0b5d0
commit
91ce92080a
|
@ -183,6 +183,13 @@ func (r *RemoteRegistry) ManifestExist(
|
|||
errs = append(errs, errors.New("Proxy is down"))
|
||||
return responseHeaders, descriptor, manifestResult, errs
|
||||
}
|
||||
|
||||
artInfo.Image, err = remoteHelper.GetImageName(ctx, r.spaceFinder, artInfo.Image)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
return responseHeaders, descriptor, manifestResult, errs
|
||||
}
|
||||
|
||||
useLocal, man, err := r.proxyCtl.UseLocalManifest(ctx, registryInfo, remoteHelper, acceptHeaders, ifNoneMatchHeader)
|
||||
|
||||
if err != nil {
|
||||
|
@ -259,6 +266,13 @@ func (r *RemoteRegistry) PullManifest(
|
|||
errs = append(errs, errors.New("Proxy is down"))
|
||||
return responseHeaders, descriptor, manifestResult, errs
|
||||
}
|
||||
|
||||
artInfo.Image, err = remoteHelper.GetImageName(ctx, r.spaceFinder, artInfo.Image)
|
||||
if err != nil {
|
||||
errs = append(errs, err)
|
||||
return responseHeaders, descriptor, manifestResult, errs
|
||||
}
|
||||
|
||||
useLocal, man, err := r.proxyCtl.UseLocalManifest(ctx, registryInfo, remoteHelper, acceptHeaders, ifNoneMatchHeader)
|
||||
|
||||
if err != nil {
|
||||
|
|
|
@ -48,6 +48,7 @@ type Factory interface {
|
|||
type Adapter interface {
|
||||
// HealthCheck checks health status of registry.
|
||||
HealthCheck() (string, error)
|
||||
GetImageName(imageName string) (string, error)
|
||||
}
|
||||
|
||||
// ArtifactRegistry defines the capabilities that an artifact registry should have.
|
||||
|
|
|
@ -86,6 +86,10 @@ func (a *adapter) HealthCheck() (string, error) {
|
|||
return "Not implemented", nil
|
||||
}
|
||||
|
||||
func (a *adapter) GetImageName(imageName string) (string, error) {
|
||||
return imageName, nil
|
||||
}
|
||||
|
||||
var (
|
||||
_ adp.Adapter = (*adapter)(nil)
|
||||
_ adp.ArtifactRegistry = (*adapter)(nil)
|
||||
|
|
|
@ -18,6 +18,7 @@ package dockerhub
|
|||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/harness/gitness/app/services/refcache"
|
||||
"github.com/harness/gitness/registry/app/api/openapi/contracts/artifact"
|
||||
|
@ -62,6 +63,14 @@ func (f *factory) Create(
|
|||
return newAdapter(ctx, spaceFinder, service, record)
|
||||
}
|
||||
|
||||
func (a *adapter) GetImageName(imageName string) (string, error) {
|
||||
arr := strings.Split(imageName, "/")
|
||||
if len(arr) == 1 {
|
||||
imageName = "library/" + imageName
|
||||
}
|
||||
return imageName, nil
|
||||
}
|
||||
|
||||
var (
|
||||
_ adp.Adapter = (*adapter)(nil)
|
||||
_ adp.ArtifactRegistry = (*adapter)(nil)
|
||||
|
|
|
@ -97,3 +97,7 @@ func NewClient(_ types.UpstreamProxy) (*Client, error) {
|
|||
|
||||
return client, nil
|
||||
}
|
||||
|
||||
func (a *adapter) GetImageName(imageName string) (string, error) {
|
||||
return imageName, nil
|
||||
}
|
||||
|
|
|
@ -117,3 +117,7 @@ func (a *Adapter) DeleteTag(_, _ string) error {
|
|||
func (a *Adapter) CanBeMount(_ string) (mount bool, repository string, err error) {
|
||||
return false, "", nil
|
||||
}
|
||||
|
||||
func (a *Adapter) GetImageName(imageName string) (string, error) {
|
||||
return imageName, nil
|
||||
}
|
||||
|
|
|
@ -293,14 +293,20 @@ func (c *controller) HeadManifest(
|
|||
func (c *controller) ProxyBlob(
|
||||
ctx context.Context, art pkg.RegistryInfo, repoKey string, proxy types.UpstreamProxy,
|
||||
) (int64, io.ReadCloser, error) {
|
||||
remoteImage := getRemoteRepo(art)
|
||||
log.Debug().Msgf("The blob doesn't exist, proxy the request to the target server, url:%v", remoteImage)
|
||||
|
||||
rHelper, err := NewRemoteHelper(ctx, c.spaceFinder, c.secretService, repoKey, proxy)
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
art.Image, err = rHelper.GetImageName(ctx, c.spaceFinder, art.Image)
|
||||
if err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
|
||||
remoteImage := getRemoteRepo(art)
|
||||
log.Debug().Msgf("The blob doesn't exist, proxy the request to the target server, url:%v", remoteImage)
|
||||
|
||||
size, bReader, err := rHelper.BlobReader(remoteImage, art.Digest)
|
||||
if err != nil {
|
||||
log.Error().Stack().Err(err).Msgf("failed to pull blob, error %v", err)
|
||||
|
|
|
@ -45,6 +45,8 @@ type RemoteInterface interface {
|
|||
ManifestExist(registry string, ref string) (bool, *manifest.Descriptor, error)
|
||||
// ListTags returns all tags of the registry.
|
||||
ListTags(registry string) ([]string, error)
|
||||
|
||||
GetImageName(ctx context.Context, spacePathStore refcache.SpaceFinder, imageName string) (string, error)
|
||||
}
|
||||
|
||||
type remoteHelper struct {
|
||||
|
@ -116,3 +118,18 @@ func (r *remoteHelper) ManifestExist(registry string, ref string) (bool, *manife
|
|||
func (r *remoteHelper) ListTags(registry string) ([]string, error) {
|
||||
return r.registry.ListTags(registry)
|
||||
}
|
||||
|
||||
func (r *remoteHelper) GetImageName(
|
||||
ctx context.Context, spaceFinder refcache.SpaceFinder, imageName string,
|
||||
) (string, error) {
|
||||
adapterType := r.upstreamProxy.Source
|
||||
factory, err := adapter.GetFactory(adapterType)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
adp, err := factory.Create(ctx, spaceFinder, r.upstreamProxy, r.secretService)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return adp.GetImageName(imageName)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue