implement the registry/docker-credentials endpoint (#273)
This commit is contained in:
parent
9ccfbd9c44
commit
4e7bcaa613
31
registry.go
31
registry.go
|
@ -1,7 +1,9 @@
|
|||
package godo
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -16,6 +18,7 @@ type RegistryService interface {
|
|||
Create(context.Context, *RegistryCreateRequest) (*Registry, *Response, error)
|
||||
Get(context.Context) (*Registry, *Response, error)
|
||||
Delete(context.Context) (*Response, error)
|
||||
DockerCredentials(context.Context) (*DockerCredentials, *Response, error)
|
||||
}
|
||||
|
||||
var _ RegistryService = &RegistryServiceOp{}
|
||||
|
@ -80,3 +83,31 @@ func (svc *RegistryServiceOp) Delete(ctx context.Context) (*Response, error) {
|
|||
}
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// DockerCredentials is the content of a Docker config file
|
||||
// that is used by the docker CLI
|
||||
// See: https://docs.docker.com/engine/reference/commandline/cli/#configjson-properties
|
||||
type DockerCredentials struct {
|
||||
DockerConfigJSON []byte
|
||||
}
|
||||
|
||||
// DockerCredentials retrieves a Docker config file with the registry's credentials.
|
||||
func (svc *RegistryServiceOp) DockerCredentials(ctx context.Context) (*DockerCredentials, *Response, error) {
|
||||
path := fmt.Sprintf("%s/%s", registryPath, "docker-credentials")
|
||||
|
||||
req, err := svc.client.NewRequest(ctx, http.MethodGet, path, nil)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
resp, err := svc.client.Do(ctx, req, &buf)
|
||||
if err != nil {
|
||||
return nil, resp, err
|
||||
}
|
||||
|
||||
dc := &DockerCredentials{
|
||||
DockerConfigJSON: buf.Bytes(),
|
||||
}
|
||||
return dc, resp, nil
|
||||
}
|
||||
|
|
|
@ -80,3 +80,19 @@ func TestRegistry_Delete(t *testing.T) {
|
|||
_, err := client.Registry.Delete(ctx)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestRegistry_DockerCredentials(t *testing.T) {
|
||||
setup()
|
||||
defer teardown()
|
||||
|
||||
want := []byte("this is a valid docker config json")
|
||||
|
||||
mux.HandleFunc("/v2/registry/docker-credentials", func(w http.ResponseWriter, r *http.Request) {
|
||||
testMethod(t, r, http.MethodGet)
|
||||
w.Write(want)
|
||||
})
|
||||
got, _, err := client.Registry.DockerCredentials(ctx)
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, want, got.DockerConfigJSON)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue