diff --git a/libkpod/container_server.go b/libkpod/container_server.go index 2f36ec16..a86274e7 100644 --- a/libkpod/container_server.go +++ b/libkpod/container_server.go @@ -18,13 +18,14 @@ import ( // ContainerServer implements the ImageServer type ContainerServer struct { - runtime *oci.Runtime - store cstorage.Store - storageImageServer storage.ImageServer - ctrNameIndex *registrar.Registrar - ctrIDIndex *truncindex.TruncIndex - podNameIndex *registrar.Registrar - podIDIndex *truncindex.TruncIndex + runtime *oci.Runtime + store cstorage.Store + storageImageServer storage.ImageServer + storageRuntimeServer storage.RuntimeServer + ctrNameIndex *registrar.Registrar + ctrIDIndex *truncindex.TruncIndex + podNameIndex *registrar.Registrar + podIDIndex *truncindex.TruncIndex imageContext *types.SystemContext stateLock sync.Locker @@ -47,6 +48,11 @@ func (c *ContainerServer) StorageImageServer() storage.ImageServer { return c.storageImageServer } +// StorageRuntimeServer returns the RuntimeServer for container storage +func (c *ContainerServer) StorageRuntimeServer() storage.RuntimeServer { + return c.storageRuntimeServer +} + // CtrNameIndex returns the Registrar for the ContainerServer func (c *ContainerServer) CtrNameIndex() *registrar.Registrar { return c.ctrNameIndex @@ -111,15 +117,16 @@ func New(config *Config) (*ContainerServer, error) { } return &ContainerServer{ - runtime: runtime, - store: store, - storageImageServer: imageService, - ctrNameIndex: registrar.NewRegistrar(), - ctrIDIndex: truncindex.NewTruncIndex([]string{}), - podNameIndex: registrar.NewRegistrar(), - podIDIndex: truncindex.NewTruncIndex([]string{}), - imageContext: &types.SystemContext{SignaturePolicyPath: config.SignaturePolicyPath}, - stateLock: lock, + runtime: runtime, + store: store, + storageImageServer: imageService, + storageRuntimeServer: storage.GetRuntimeService(imageService, pauseImage), + ctrNameIndex: registrar.NewRegistrar(), + ctrIDIndex: truncindex.NewTruncIndex([]string{}), + podNameIndex: registrar.NewRegistrar(), + podIDIndex: truncindex.NewTruncIndex([]string{}), + imageContext: &types.SystemContext{SignaturePolicyPath: config.SignaturePolicyPath}, + stateLock: lock, state: &containerServerState{ containers: oci.NewMemoryStore(), sandboxes: make(map[string]*sandbox.Sandbox), diff --git a/server/container_create.go b/server/container_create.go index f5029b06..2e6f500a 100644 --- a/server/container_create.go +++ b/server/container_create.go @@ -314,7 +314,7 @@ func (s *Server) CreateContainer(ctx context.Context, req *pb.CreateContainerReq } defer func() { if err != nil { - err2 := s.storageRuntimeServer.DeleteContainer(containerID) + err2 := s.StorageRuntimeServer().DeleteContainer(containerID) if err2 != nil { logrus.Warnf("Failed to cleanup container directory: %v", err2) } @@ -613,7 +613,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, metaname := metadata.Name attempt := metadata.Attempt - containerInfo, err := s.storageRuntimeServer.CreateContainer(s.ImageContext(), + containerInfo, err := s.StorageRuntimeServer().CreateContainer(s.ImageContext(), sb.Name(), sb.ID(), image, image, containerName, containerID, @@ -625,7 +625,7 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string, return nil, err } - mountPoint, err := s.storageRuntimeServer.StartContainer(containerID) + mountPoint, err := s.StorageRuntimeServer().StartContainer(containerID) if err != nil { return nil, fmt.Errorf("failed to mount container %s(%s): %v", containerName, containerID, err) } diff --git a/server/container_remove.go b/server/container_remove.go index 8e330e60..1c102e05 100644 --- a/server/container_remove.go +++ b/server/container_remove.go @@ -27,7 +27,7 @@ func (s *Server) RemoveContainer(ctx context.Context, req *pb.RemoveContainerReq if err := s.Runtime().StopContainer(c, -1); err != nil { return nil, fmt.Errorf("failed to stop container %s: %v", c.ID(), err) } - if err := s.storageRuntimeServer.StopContainer(c.ID()); err != nil { + if err := s.StorageRuntimeServer().StopContainer(c.ID()); err != nil { return nil, fmt.Errorf("failed to unmount container %s: %v", c.ID(), err) } } @@ -38,7 +38,7 @@ func (s *Server) RemoveContainer(ctx context.Context, req *pb.RemoveContainerReq s.removeContainer(c) - if err := s.storageRuntimeServer.DeleteContainer(c.ID()); err != nil { + if err := s.StorageRuntimeServer().DeleteContainer(c.ID()); err != nil { return nil, fmt.Errorf("failed to delete storage for container %s: %v", c.ID(), err) } diff --git a/server/container_stop.go b/server/container_stop.go index ccbde3cc..47339db1 100644 --- a/server/container_stop.go +++ b/server/container_stop.go @@ -25,7 +25,7 @@ func (s *Server) StopContainer(ctx context.Context, req *pb.StopContainerRequest if err := s.Runtime().StopContainer(c, req.Timeout); err != nil { return nil, fmt.Errorf("failed to stop container %s: %v", c.ID(), err) } - if err := s.storageRuntimeServer.StopContainer(c.ID()); err != nil { + if err := s.StorageRuntimeServer().StopContainer(c.ID()); err != nil { return nil, fmt.Errorf("failed to unmount container %s: %v", c.ID(), err) } } diff --git a/server/sandbox_remove.go b/server/sandbox_remove.go index 676ea1d8..cc380354 100644 --- a/server/sandbox_remove.go +++ b/server/sandbox_remove.go @@ -57,11 +57,11 @@ func (s *Server) RemovePodSandbox(ctx context.Context, req *pb.RemovePodSandboxR continue } - if err := s.storageRuntimeServer.StopContainer(c.ID()); err != nil && err != storage.ErrContainerUnknown { + if err := s.StorageRuntimeServer().StopContainer(c.ID()); err != nil && err != storage.ErrContainerUnknown { // assume container already umounted logrus.Warnf("failed to stop container %s in pod sandbox %s: %v", c.Name(), sb.ID(), err) } - if err := s.storageRuntimeServer.DeleteContainer(c.ID()); err != nil && err != storage.ErrContainerUnknown { + if err := s.StorageRuntimeServer().DeleteContainer(c.ID()); err != nil && err != storage.ErrContainerUnknown { return nil, fmt.Errorf("failed to delete container %s in pod sandbox %s: %v", c.Name(), sb.ID(), err) } @@ -75,10 +75,10 @@ func (s *Server) RemovePodSandbox(ctx context.Context, req *pb.RemovePodSandboxR s.removeContainer(podInfraContainer) // Remove the files related to the sandbox - if err := s.storageRuntimeServer.StopContainer(sb.ID()); err != nil && err != storage.ErrContainerUnknown { + if err := s.StorageRuntimeServer().StopContainer(sb.ID()); err != nil && err != storage.ErrContainerUnknown { logrus.Warnf("failed to stop sandbox container in pod sandbox %s: %v", sb.ID(), err) } - if err := s.storageRuntimeServer.RemovePodSandbox(sb.ID()); err != nil && err != pkgstorage.ErrInvalidSandboxID { + if err := s.StorageRuntimeServer().RemovePodSandbox(sb.ID()); err != nil && err != pkgstorage.ErrInvalidSandboxID { return nil, fmt.Errorf("failed to remove pod sandbox %s: %v", sb.ID(), err) } diff --git a/server/sandbox_run.go b/server/sandbox_run.go index 9bcd9005..89bcfe14 100644 --- a/server/sandbox_run.go +++ b/server/sandbox_run.go @@ -153,7 +153,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest } }() - podContainer, err := s.storageRuntimeServer.CreatePodSandbox(s.ImageContext(), + podContainer, err := s.StorageRuntimeServer().CreatePodSandbox(s.ImageContext(), name, id, s.config.PauseImage, "", containerName, @@ -170,7 +170,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest } defer func() { if err != nil { - if err2 := s.storageRuntimeServer.RemovePodSandbox(id); err2 != nil { + if err2 := s.StorageRuntimeServer().RemovePodSandbox(id); err2 != nil { logrus.Warnf("couldn't cleanup pod sandbox %q: %v", id, err2) } } @@ -447,7 +447,7 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest } saveOptions := generate.ExportOptions{} - mountPoint, err := s.storageRuntimeServer.StartContainer(id) + mountPoint, err := s.StorageRuntimeServer().StartContainer(id) if err != nil { return nil, fmt.Errorf("failed to mount container %s in pod sandbox %s(%s): %v", containerName, sb.Name(), id, err) } @@ -524,12 +524,12 @@ func convertPortMappings(in []*pb.PortMapping) []*hostport.PortMapping { } func (s *Server) setPodSandboxMountLabel(id, mountLabel string) error { - storageMetadata, err := s.storageRuntimeServer.GetContainerMetadata(id) + storageMetadata, err := s.StorageRuntimeServer().GetContainerMetadata(id) if err != nil { return err } storageMetadata.SetMountLabel(mountLabel) - return s.storageRuntimeServer.SetContainerMetadata(id, storageMetadata) + return s.StorageRuntimeServer().SetContainerMetadata(id, storageMetadata) } func getSELinuxLabels(selinuxOptions *pb.SELinuxOption) (processLabel string, mountLabel string, err error) { diff --git a/server/sandbox_stop.go b/server/sandbox_stop.go index 3f21b9e7..61e6e3e6 100644 --- a/server/sandbox_stop.go +++ b/server/sandbox_stop.go @@ -80,7 +80,7 @@ func (s *Server) StopPodSandbox(ctx context.Context, req *pb.StopPodSandboxReque if c.ID() == podInfraContainer.ID() { continue } - if err := s.storageRuntimeServer.StopContainer(c.ID()); err != nil && err != storage.ErrContainerUnknown { + if err := s.StorageRuntimeServer().StopContainer(c.ID()); err != nil && err != storage.ErrContainerUnknown { // assume container already umounted logrus.Warnf("failed to stop container %s in pod sandbox %s: %v", c.Name(), sb.ID(), err) } @@ -108,7 +108,7 @@ func (s *Server) StopPodSandbox(ctx context.Context, req *pb.StopPodSandboxReque } } } - if err := s.storageRuntimeServer.StopContainer(sb.ID()); err != nil && err != storage.ErrContainerUnknown { + if err := s.StorageRuntimeServer().StopContainer(sb.ID()); err != nil && err != storage.ErrContainerUnknown { logrus.Warnf("failed to stop sandbox container in pod sandbox %s: %v", sb.ID(), err) } diff --git a/server/server.go b/server/server.go index fa4ef56f..904eaf22 100644 --- a/server/server.go +++ b/server/server.go @@ -11,7 +11,6 @@ import ( "time" "github.com/Sirupsen/logrus" - cstorage "github.com/containers/storage" "github.com/kubernetes-incubator/cri-o/libkpod" "github.com/kubernetes-incubator/cri-o/libkpod/sandbox" "github.com/kubernetes-incubator/cri-o/oci" @@ -53,13 +52,11 @@ type Server struct { libkpod.ContainerServer config Config - storageRuntimeServer storage.RuntimeServer - updateLock sync.RWMutex - netPlugin ocicni.CNIPlugin - hostportManager hostport.HostPortManager - - seccompEnabled bool - seccompProfile seccomp.Seccomp + updateLock sync.RWMutex + netPlugin ocicni.CNIPlugin + hostportManager hostport.HostPortManager + seccompEnabled bool + seccompProfile seccomp.Seccomp appArmorEnabled bool appArmorProfile string @@ -292,7 +289,7 @@ func (s *Server) restore() { pods := map[string]*storage.RuntimeContainerMetadata{} podContainers := map[string]*storage.RuntimeContainerMetadata{} for _, container := range containers { - metadata, err2 := s.storageRuntimeServer.GetContainerMetadata(container.ID) + metadata, err2 := s.StorageRuntimeServer().GetContainerMetadata(container.ID) if err2 != nil { logrus.Warnf("error parsing metadata for %s: %v, ignoring", container.ID, err2) continue @@ -353,7 +350,7 @@ func (s *Server) update() error { continue } // not previously known, so figure out what it is - metadata, err2 := s.storageRuntimeServer.GetContainerMetadata(container.ID) + metadata, err2 := s.StorageRuntimeServer().GetContainerMetadata(container.ID) if err2 != nil { logrus.Errorf("error parsing metadata for %s: %v, ignoring", container.ID, err2) continue @@ -456,26 +453,6 @@ func (s *Server) Shutdown() error { // New creates a new Server with options provided func New(config *Config) (*Server, error) { - store, err := cstorage.GetStore(cstorage.StoreOptions{ - RunRoot: config.RunRoot, - GraphRoot: config.Root, - GraphDriverName: config.Storage, - GraphDriverOptions: config.StorageOptions, - }) - if err != nil { - return nil, err - } - - imageService, err := storage.GetImageService(store, config.DefaultTransport, config.InsecureRegistries) - if err != nil { - return nil, err - } - - storageRuntimeService := storage.GetRuntimeService(imageService, config.PauseImage) - if err != nil { - return nil, err - } - if err := os.MkdirAll("/var/run/crio", 0755); err != nil { return nil, err } @@ -493,14 +470,13 @@ func New(config *Config) (*Server, error) { hostportManager := hostport.NewHostportManager() s := &Server{ - ContainerServer: *containerServer, - storageRuntimeServer: storageRuntimeService, - netPlugin: netPlugin, - hostportManager: hostportManager, - config: *config, - seccompEnabled: seccomp.IsEnabled(), - appArmorEnabled: apparmor.IsEnabled(), - appArmorProfile: config.ApparmorProfile, + ContainerServer: *containerServer, + netPlugin: netPlugin, + hostportManager: hostportManager, + config: *config, + seccompEnabled: seccomp.IsEnabled(), + appArmorEnabled: apparmor.IsEnabled(), + appArmorProfile: config.ApparmorProfile, } if s.seccompEnabled {