client/distribution_inspect: Wrap options and result

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
Paweł Gronowski
2025-10-22 13:00:07 +02:00
parent 78d228b84e
commit 362e9d088f
7 changed files with 41 additions and 17 deletions

View File

@@ -99,7 +99,7 @@ type ExecAPIClient interface {
// DistributionAPIClient defines API client methods for the registry
type DistributionAPIClient interface {
DistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registry.DistributionInspect, error)
DistributionInspect(ctx context.Context, image string, options DistributionInspectOptions) (DistributionInspectResult, error)
}
// ImageAPIClient defines API client methods for the images

View File

@@ -9,16 +9,26 @@ import (
"github.com/moby/moby/api/types/registry"
)
// DistributionInspectResult holds the result of the DistributionInspect operation.
type DistributionInspectResult struct {
registry.DistributionInspect
}
// DistributionInspectOptions holds options for the DistributionInspect operation.
type DistributionInspectOptions struct {
EncodedRegistryAuth string
}
// DistributionInspect returns the image digest with the full manifest.
func (cli *Client) DistributionInspect(ctx context.Context, imageRef, encodedRegistryAuth string) (registry.DistributionInspect, error) {
func (cli *Client) DistributionInspect(ctx context.Context, imageRef string, options DistributionInspectOptions) (DistributionInspectResult, error) {
if imageRef == "" {
return registry.DistributionInspect{}, objectNotFoundError{object: "distribution", id: imageRef}
return DistributionInspectResult{}, objectNotFoundError{object: "distribution", id: imageRef}
}
var headers http.Header
if encodedRegistryAuth != "" {
if options.EncodedRegistryAuth != "" {
headers = http.Header{
registry.AuthHeader: {encodedRegistryAuth},
registry.AuthHeader: {options.EncodedRegistryAuth},
}
}
@@ -26,10 +36,10 @@ func (cli *Client) DistributionInspect(ctx context.Context, imageRef, encodedReg
resp, err := cli.get(ctx, "/distribution/"+imageRef+"/json", url.Values{}, headers)
defer ensureReaderClosed(resp)
if err != nil {
return registry.DistributionInspect{}, err
return DistributionInspectResult{}, err
}
var distributionInspect registry.DistributionInspect
err = json.NewDecoder(resp.Body).Decode(&distributionInspect)
return distributionInspect, err
return DistributionInspectResult{DistributionInspect: distributionInspect}, err
}

View File

@@ -16,6 +16,6 @@ func TestDistributionInspectWithEmptyID(t *testing.T) {
return nil, errors.New("should not make request")
}))
assert.NilError(t, err)
_, err = client.DistributionInspect(context.Background(), "", "")
_, err = client.DistributionInspect(context.Background(), "", DistributionInspectOptions{})
assert.Check(t, is.ErrorType(err, cerrdefs.IsNotFound))
}

View File

@@ -123,7 +123,9 @@ func resolvePluginSpecRemote(ctx context.Context, cli DistributionAPIClient, tas
}
func imageDigestAndPlatforms(ctx context.Context, cli DistributionAPIClient, image, encodedAuth string) (string, []swarm.Platform, error) {
distributionInspect, err := cli.DistributionInspect(ctx, image, encodedAuth)
distributionInspect, err := cli.DistributionInspect(ctx, image, DistributionInspectOptions{
EncodedRegistryAuth: encodedAuth,
})
var platforms []swarm.Platform
if err != nil {
return "", nil, err

View File

@@ -99,7 +99,7 @@ type ExecAPIClient interface {
// DistributionAPIClient defines API client methods for the registry
type DistributionAPIClient interface {
DistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registry.DistributionInspect, error)
DistributionInspect(ctx context.Context, image string, options DistributionInspectOptions) (DistributionInspectResult, error)
}
// ImageAPIClient defines API client methods for the images

View File

@@ -9,16 +9,26 @@ import (
"github.com/moby/moby/api/types/registry"
)
// DistributionInspectResult holds the result of the DistributionInspect operation.
type DistributionInspectResult struct {
registry.DistributionInspect
}
// DistributionInspectOptions holds options for the DistributionInspect operation.
type DistributionInspectOptions struct {
EncodedRegistryAuth string
}
// DistributionInspect returns the image digest with the full manifest.
func (cli *Client) DistributionInspect(ctx context.Context, imageRef, encodedRegistryAuth string) (registry.DistributionInspect, error) {
func (cli *Client) DistributionInspect(ctx context.Context, imageRef string, options DistributionInspectOptions) (DistributionInspectResult, error) {
if imageRef == "" {
return registry.DistributionInspect{}, objectNotFoundError{object: "distribution", id: imageRef}
return DistributionInspectResult{}, objectNotFoundError{object: "distribution", id: imageRef}
}
var headers http.Header
if encodedRegistryAuth != "" {
if options.EncodedRegistryAuth != "" {
headers = http.Header{
registry.AuthHeader: {encodedRegistryAuth},
registry.AuthHeader: {options.EncodedRegistryAuth},
}
}
@@ -26,10 +36,10 @@ func (cli *Client) DistributionInspect(ctx context.Context, imageRef, encodedReg
resp, err := cli.get(ctx, "/distribution/"+imageRef+"/json", url.Values{}, headers)
defer ensureReaderClosed(resp)
if err != nil {
return registry.DistributionInspect{}, err
return DistributionInspectResult{}, err
}
var distributionInspect registry.DistributionInspect
err = json.NewDecoder(resp.Body).Decode(&distributionInspect)
return distributionInspect, err
return DistributionInspectResult{DistributionInspect: distributionInspect}, err
}

View File

@@ -123,7 +123,9 @@ func resolvePluginSpecRemote(ctx context.Context, cli DistributionAPIClient, tas
}
func imageDigestAndPlatforms(ctx context.Context, cli DistributionAPIClient, image, encodedAuth string) (string, []swarm.Platform, error) {
distributionInspect, err := cli.DistributionInspect(ctx, image, encodedAuth)
distributionInspect, err := cli.DistributionInspect(ctx, image, DistributionInspectOptions{
EncodedRegistryAuth: encodedAuth,
})
var platforms []swarm.Platform
if err != nil {
return "", nil, err