summaryrefslogtreecommitdiffstats
path: root/pkg/v1/daemon/options.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/v1/daemon/options.go')
-rw-r--r--pkg/v1/daemon/options.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/pkg/v1/daemon/options.go b/pkg/v1/daemon/options.go
new file mode 100644
index 0000000..e8a5a1e
--- /dev/null
+++ b/pkg/v1/daemon/options.go
@@ -0,0 +1,103 @@
+// Copyright 2018 Google LLC All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package daemon
+
+import (
+ "context"
+ "io"
+
+ "github.com/docker/docker/api/types"
+ "github.com/docker/docker/client"
+)
+
+// ImageOption is an alias for Option.
+// Deprecated: Use Option instead.
+type ImageOption Option
+
+// Option is a functional option for daemon operations.
+type Option func(*options)
+
+type options struct {
+ ctx context.Context
+ client Client
+ buffered bool
+}
+
+var defaultClient = func() (Client, error) {
+ return client.NewClientWithOpts(client.FromEnv)
+}
+
+func makeOptions(opts ...Option) (*options, error) {
+ o := &options{
+ buffered: true,
+ ctx: context.Background(),
+ }
+ for _, opt := range opts {
+ opt(o)
+ }
+
+ if o.client == nil {
+ client, err := defaultClient()
+ if err != nil {
+ return nil, err
+ }
+ o.client = client
+ }
+ o.client.NegotiateAPIVersion(o.ctx)
+
+ return o, nil
+}
+
+// WithBufferedOpener buffers the image.
+func WithBufferedOpener() Option {
+ return func(o *options) {
+ o.buffered = true
+ }
+}
+
+// WithUnbufferedOpener streams the image to avoid buffering.
+func WithUnbufferedOpener() Option {
+ return func(o *options) {
+ o.buffered = false
+ }
+}
+
+// WithClient is a functional option to allow injecting a docker client.
+//
+// By default, github.com/docker/docker/client.FromEnv is used.
+func WithClient(client Client) Option {
+ return func(o *options) {
+ o.client = client
+ }
+}
+
+// WithContext is a functional option to pass through a context.Context.
+//
+// By default, context.Background() is used.
+func WithContext(ctx context.Context) Option {
+ return func(o *options) {
+ o.ctx = ctx
+ }
+}
+
+// Client represents the subset of a docker client that the daemon
+// package uses.
+type Client interface {
+ NegotiateAPIVersion(ctx context.Context)
+ ImageSave(context.Context, []string) (io.ReadCloser, error)
+ ImageLoad(context.Context, io.Reader, bool) (types.ImageLoadResponse, error)
+ ImageTag(context.Context, string, string) error
+ ImageInspectWithRaw(context.Context, string) (types.ImageInspect, []byte, error)
+}