diff --git a/src/replication/adapter/harbor/adapter.go b/src/replication/adapter/harbor/adapter.go index 7cc83ef37..25fc8e5b5 100644 --- a/src/replication/adapter/harbor/adapter.go +++ b/src/replication/adapter/harbor/adapter.go @@ -43,9 +43,9 @@ func init() { type adapter struct { *adp.DefaultImageRegistry - registry *model.Registry - coreServiceURL string - client *common_http.Client + registry *model.Registry + url string + client *common_http.Client } func newAdapter(registry *model.Registry) (*adapter, error) { @@ -72,8 +72,8 @@ func newAdapter(registry *model.Registry) (*adapter, error) { return nil, err } return &adapter{ - registry: registry, - coreServiceURL: registry.URL, + registry: registry, + url: registry.URL, client: common_http.NewClient( &http.Client{ Transport: transport, @@ -112,7 +112,7 @@ func (a *adapter) Info() (*model.RegistryInfo, error) { sys := &struct { ChartRegistryEnabled bool `json:"with_chartmuseum"` }{} - if err := a.client.Get(a.coreServiceURL+"/api/systeminfo", sys); err != nil { + if err := a.client.Get(a.getURL()+"/api/systeminfo", sys); err != nil { return nil, err } if sys.ChartRegistryEnabled { @@ -158,7 +158,7 @@ func (a *adapter) PrepareForPush(resources []*model.Resource) error { Name: project.Name, Metadata: project.Metadata, } - err := a.client.Post(a.coreServiceURL+"/api/projects", pro) + err := a.client.Post(a.getURL()+"/api/projects", pro) if err != nil { if httpErr, ok := err.(*common_http.Error); ok && httpErr.Code == http.StatusConflict { log.Debugf("got 409 when trying to create project %s", project.Name) @@ -211,7 +211,7 @@ type project struct { func (a *adapter) getProjects(name string) ([]*project, error) { projects := []*project{} - url := fmt.Sprintf("%s/api/projects?name=%s&page=1&page_size=500", a.coreServiceURL, name) + url := fmt.Sprintf("%s/api/projects?name=%s&page=1&page_size=500", a.getURL(), name) if err := a.client.GetAndIteratePagination(url, &projects); err != nil { return nil, err } @@ -246,9 +246,19 @@ func (a *adapter) getProject(name string) (*project, error) { func (a *adapter) getRepositories(projectID int64) ([]*repository, error) { repositories := []*repository{} - url := fmt.Sprintf("%s/api/repositories?project_id=%d&page=1&page_size=500", a.coreServiceURL, projectID) + url := fmt.Sprintf("%s/api/repositories?project_id=%d&page=1&page_size=500", a.getURL(), projectID) if err := a.client.GetAndIteratePagination(url, &repositories); err != nil { return nil, err } return repositories, nil } + +// when the adapter is created for local Harbor, returns the "http://127.0.0.1:8080" +// as URL to avoid issue https://github.com/goharbor/harbor-helm/issues/222 +// when harbor is deployed on Kubernetes +func (a *adapter) getURL() string { + if a.registry.Type == model.RegistryTypeHarbor && a.registry.Name == "Local" { + return "http://127.0.0.1:8080" + } + return a.url +} diff --git a/src/replication/adapter/harbor/chart_registry.go b/src/replication/adapter/harbor/chart_registry.go index 10c13dd29..57abc6473 100644 --- a/src/replication/adapter/harbor/chart_registry.go +++ b/src/replication/adapter/harbor/chart_registry.go @@ -80,7 +80,7 @@ func (a *adapter) FetchCharts(filters []*model.Filter) ([]*model.Resource, error } resources := []*model.Resource{} for _, project := range projects { - url := fmt.Sprintf("%s/api/chartrepo/%s/charts", a.coreServiceURL, project.Name) + url := fmt.Sprintf("%s/api/chartrepo/%s/charts", a.getURL(), project.Name) charts := []*chart{} if err := a.client.Get(url, &charts); err != nil { return nil, err @@ -93,7 +93,7 @@ func (a *adapter) FetchCharts(filters []*model.Filter) ([]*model.Resource, error return nil, err } for _, chart := range charts { - url := fmt.Sprintf("%s/api/chartrepo/%s/charts/%s", a.coreServiceURL, project.Name, chart.Name) + url := fmt.Sprintf("%s/api/chartrepo/%s/charts/%s", a.getURL(), project.Name, chart.Name) chartVersions := []*chartVersion{} if err := a.client.Get(url, &chartVersions); err != nil { return nil, err @@ -136,7 +136,7 @@ func (a *adapter) getChartInfo(name, version string) (*chartVersionDetail, error if err != nil { return nil, err } - url := fmt.Sprintf("%s/api/chartrepo/%s/charts/%s/%s", a.coreServiceURL, project, name, version) + url := fmt.Sprintf("%s/api/chartrepo/%s/charts/%s/%s", a.getURL(), project, name, version) info := &chartVersionDetail{} if err = a.client.Get(url, info); err != nil { return nil, err @@ -159,7 +159,7 @@ func (a *adapter) DownloadChart(name, version string) (io.ReadCloser, error) { if err != nil { return nil, err } - url = fmt.Sprintf("%s/chartrepo/%s/%s", a.coreServiceURL, project, url) + url = fmt.Sprintf("%s/chartrepo/%s/%s", a.getURL(), project, url) } req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { @@ -189,7 +189,7 @@ func (a *adapter) UploadChart(name, version string, chart io.Reader) error { } w.Close() - url := fmt.Sprintf("%s/api/chartrepo/%s/charts", a.coreServiceURL, project) + url := fmt.Sprintf("%s/api/chartrepo/%s/charts", a.getURL(), project) req, err := http.NewRequest(http.MethodPost, url, buf) if err != nil { @@ -220,7 +220,7 @@ func (a *adapter) DeleteChart(name, version string) error { if err != nil { return err } - url := fmt.Sprintf("%s/api/chartrepo/%s/charts/%s/%s", a.coreServiceURL, project, name, version) + url := fmt.Sprintf("%s/api/chartrepo/%s/charts/%s/%s", a.getURL(), project, name, version) return a.client.Delete(url) } diff --git a/src/replication/adapter/harbor/image_registry.go b/src/replication/adapter/harbor/image_registry.go index 87420c4d2..c8d9fe75a 100644 --- a/src/replication/adapter/harbor/image_registry.go +++ b/src/replication/adapter/harbor/image_registry.go @@ -73,7 +73,7 @@ func (a *adapter) FetchImages(filters []*model.Filter) ([]*model.Resource, error return nil, err } for _, repository := range repositories { - url := fmt.Sprintf("%s/api/repositories/%s/tags", a.coreServiceURL, repository.Name) + url := fmt.Sprintf("%s/api/repositories/%s/tags", a.getURL(), repository.Name) tags := []*tag{} if err = a.client.Get(url, &tags); err != nil { return nil, err @@ -146,7 +146,7 @@ func (a *adapter) listCandidateProjects(filters []*model.Filter) ([]*project, er // override the default implementation from the default image registry // by calling Harbor API directly func (a *adapter) DeleteManifest(repository, reference string) error { - url := fmt.Sprintf("%s/api/repositories/%s/tags/%s", a.coreServiceURL, repository, reference) + url := fmt.Sprintf("%s/api/repositories/%s/tags/%s", a.getURL(), repository, reference) return a.client.Delete(url) } diff --git a/src/replication/transfer/image/transfer.go b/src/replication/transfer/image/transfer.go index d60d01b10..e47526b1b 100644 --- a/src/replication/transfer/image/transfer.go +++ b/src/replication/transfer/image/transfer.go @@ -139,7 +139,7 @@ func (t *transfer) copy(src *repository, dst *repository, override bool) error { srcRepo, strings.Join(src.tags, ","), dstRepo, strings.Join(dst.tags, ",")) var err error for i := range src.tags { - if e := t.copyImage(srcRepo, src.tags[i], dstRepo, dst.tags[i], override); err != nil { + if e := t.copyImage(srcRepo, src.tags[i], dstRepo, dst.tags[i], override); e != nil { t.logger.Errorf(e.Error()) err = e }