Before this change, for several of the services that `WithServices` handles, only the grpc client is supported. Now, for instance, one can use an `images.Store` directly instead of only an `imagesapi.StoreSlient`. Some of the methods have been renamed to satisfy the difference between using a grpc `<Foo>Client` vs the main interface. I did not see a good candidate for TaskService so have left that mostly unchanged. Signed-off-by: Brian Goff <cpuguy83@gmail.com>
		
			
				
	
	
		
			158 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
   Copyright The containerd Authors.
 | 
						|
 | 
						|
   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 containerd
 | 
						|
 | 
						|
import (
 | 
						|
	containersapi "github.com/containerd/containerd/api/services/containers/v1"
 | 
						|
	"github.com/containerd/containerd/api/services/diff/v1"
 | 
						|
	imagesapi "github.com/containerd/containerd/api/services/images/v1"
 | 
						|
	introspectionapi "github.com/containerd/containerd/api/services/introspection/v1"
 | 
						|
	namespacesapi "github.com/containerd/containerd/api/services/namespaces/v1"
 | 
						|
	"github.com/containerd/containerd/api/services/tasks/v1"
 | 
						|
	"github.com/containerd/containerd/containers"
 | 
						|
	"github.com/containerd/containerd/content"
 | 
						|
	"github.com/containerd/containerd/images"
 | 
						|
	"github.com/containerd/containerd/leases"
 | 
						|
	"github.com/containerd/containerd/namespaces"
 | 
						|
	"github.com/containerd/containerd/services/introspection"
 | 
						|
	"github.com/containerd/containerd/snapshots"
 | 
						|
)
 | 
						|
 | 
						|
type services struct {
 | 
						|
	contentStore         content.Store
 | 
						|
	imageStore           images.Store
 | 
						|
	containerStore       containers.Store
 | 
						|
	namespaceStore       namespaces.Store
 | 
						|
	snapshotters         map[string]snapshots.Snapshotter
 | 
						|
	taskService          tasks.TasksClient
 | 
						|
	diffService          DiffService
 | 
						|
	eventService         EventService
 | 
						|
	leasesService        leases.Manager
 | 
						|
	introspectionService introspection.Service
 | 
						|
}
 | 
						|
 | 
						|
// ServicesOpt allows callers to set options on the services
 | 
						|
type ServicesOpt func(c *services)
 | 
						|
 | 
						|
// WithContentStore sets the content store.
 | 
						|
func WithContentStore(contentStore content.Store) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.contentStore = contentStore
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithImageClient sets the image service to use using an images client.
 | 
						|
func WithImageClient(imageService imagesapi.ImagesClient) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.imageStore = NewImageStoreFromClient(imageService)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithImageStore sets the image store.
 | 
						|
func WithImageStore(imageStore images.Store) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.imageStore = imageStore
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithSnapshotters sets the snapshotters.
 | 
						|
func WithSnapshotters(snapshotters map[string]snapshots.Snapshotter) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.snapshotters = make(map[string]snapshots.Snapshotter)
 | 
						|
		for n, sn := range snapshotters {
 | 
						|
			s.snapshotters[n] = sn
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithContainerClient sets the container service to use using a containers client.
 | 
						|
func WithContainerClient(containerService containersapi.ContainersClient) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.containerStore = NewRemoteContainerStore(containerService)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithContainerStore sets the container store.
 | 
						|
func WithContainerStore(containerStore containers.Store) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.containerStore = containerStore
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithTaskClient sets the task service to use from a tasks client.
 | 
						|
func WithTaskClient(taskService tasks.TasksClient) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.taskService = taskService
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithDiffClient sets the diff service to use from a diff client.
 | 
						|
func WithDiffClient(diffService diff.DiffClient) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.diffService = NewDiffServiceFromClient(diffService)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithDiffService sets the diff store.
 | 
						|
func WithDiffService(diffService DiffService) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.diffService = diffService
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithEventService sets the event service.
 | 
						|
func WithEventService(eventService EventService) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.eventService = eventService
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithNamespaceClient sets the namespace service using a namespaces client.
 | 
						|
func WithNamespaceClient(namespaceService namespacesapi.NamespacesClient) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.namespaceStore = NewNamespaceStoreFromClient(namespaceService)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithNamespaceService sets the namespace service.
 | 
						|
func WithNamespaceService(namespaceService namespaces.Store) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.namespaceStore = namespaceService
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithLeasesService sets the lease service.
 | 
						|
func WithLeasesService(leasesService leases.Manager) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.leasesService = leasesService
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithIntrospectionClient sets the introspection service using an introspection client.
 | 
						|
func WithIntrospectionClient(in introspectionapi.IntrospectionClient) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.introspectionService = introspection.NewIntrospectionServiceFromClient(in)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// WithIntrospectionService sets the introspection service.
 | 
						|
func WithIntrospectionService(in introspection.Service) ServicesOpt {
 | 
						|
	return func(s *services) {
 | 
						|
		s.introspectionService = in
 | 
						|
	}
 | 
						|
}
 |