diff --git a/virtcontainers/filesystem.go b/virtcontainers/filesystem_resource_storage.go similarity index 89% rename from virtcontainers/filesystem.go rename to virtcontainers/filesystem_resource_storage.go index 0723a39bba..b2ccc77943 100644 --- a/virtcontainers/filesystem.go +++ b/virtcontainers/filesystem_resource_storage.go @@ -112,49 +112,6 @@ var runStoragePath = filepath.Join("/run", storagePathSuffix, sandboxPathSuffix) // It will contain all guest vm sockets and shared mountpoints. var RunVMStoragePath = filepath.Join("/run", storagePathSuffix, vmPathSuffix) -// resourceStorage is the virtcontainers resources (configuration, state, etc...) -// storage interface. -// The default resource storage implementation is filesystem. -type resourceStorage interface { - // Create all resources for a sandbox - createAllResources(ctx context.Context, sandbox *Sandbox) error - - // Resources URIs functions return both the URI - // for the actual resource and the URI base. - containerURI(sandboxID, containerID string, resource sandboxResource) (string, string, error) - sandboxURI(sandboxID string, resource sandboxResource) (string, string, error) - - // Sandbox resources - storeSandboxResource(sandboxID string, resource sandboxResource, data interface{}) error - deleteSandboxResources(sandboxID string, resources []sandboxResource) error - fetchSandboxConfig(sandboxID string) (SandboxConfig, error) - fetchSandboxState(sandboxID string) (State, error) - fetchSandboxNetwork(sandboxID string) (NetworkNamespace, error) - storeSandboxNetwork(sandboxID string, networkNS NetworkNamespace) error - fetchSandboxDevices(sandboxID string) ([]api.Device, error) - storeSandboxDevices(sandboxID string, devices []api.Device) error - - // Hypervisor resources - fetchHypervisorState(sandboxID string, state interface{}) error - storeHypervisorState(sandboxID string, state interface{}) error - - // Agent resources - fetchAgentState(sandboxID string, state interface{}) error - storeAgentState(sandboxID string, state interface{}) error - - // Container resources - storeContainerResource(sandboxID, containerID string, resource sandboxResource, data interface{}) error - deleteContainerResources(sandboxID, containerID string, resources []sandboxResource) error - fetchContainerConfig(sandboxID, containerID string) (ContainerConfig, error) - fetchContainerState(sandboxID, containerID string) (State, error) - fetchContainerProcess(sandboxID, containerID string) (Process, error) - storeContainerProcess(sandboxID, containerID string, process Process) error - fetchContainerMounts(sandboxID, containerID string) ([]Mount, error) - storeContainerMounts(sandboxID, containerID string, mounts []Mount) error - fetchContainerDevices(sandboxID, containerID string) ([]ContainerDevice, error) - storeContainerDevices(sandboxID, containerID string, devices []ContainerDevice) error -} - // filesystem is a resourceStorage interface implementation for a local filesystem. type filesystem struct { ctx context.Context @@ -246,17 +203,6 @@ func (fs *filesystem) storeFile(file string, data interface{}) error { return nil } -// TypedDevice is used as an intermediate representation for marshalling -// and unmarshalling Device implementations. -type TypedDevice struct { - Type string - - // Data is assigned the Device object. - // This being declared as RawMessage prevents it from being marshalled/unmarshalled. - // We do that explicitly depending on Type. - Data json.RawMessage -} - // storeDeviceIDFile is used to marshal and store device IDs to disk. func (fs *filesystem) storeDeviceIDFile(file string, data interface{}) error { if file == "" { diff --git a/virtcontainers/filesystem_test.go b/virtcontainers/filesystem_resource_storage_test.go similarity index 100% rename from virtcontainers/filesystem_test.go rename to virtcontainers/filesystem_resource_storage_test.go diff --git a/virtcontainers/resource_storage.go b/virtcontainers/resource_storage.go new file mode 100644 index 0000000000..e4f06ebc09 --- /dev/null +++ b/virtcontainers/resource_storage.go @@ -0,0 +1,67 @@ +// Copyright (c) 2018 Intel Corporation +// +// SPDX-License-Identifier: Apache-2.0 +// + +package virtcontainers + +import ( + "context" + "encoding/json" + + "github.com/kata-containers/runtime/virtcontainers/device/api" +) + +// TypedDevice is used as an intermediate representation for marshalling +// and unmarshalling Device implementations. +type TypedDevice struct { + Type string + + // Data is assigned the Device object. + // This being declared as RawMessage prevents it from being marshalled/unmarshalled. + // We do that explicitly depending on Type. + Data json.RawMessage +} + +// resourceStorage is the virtcontainers resources (configuration, state, etc...) +// storage interface. +// The default resource storage implementation is filesystem. +type resourceStorage interface { + // Create all resources for a sandbox + createAllResources(ctx context.Context, sandbox *Sandbox) error + + // Resources URIs functions return both the URI + // for the actual resource and the URI base. + containerURI(sandboxID, containerID string, resource sandboxResource) (string, string, error) + sandboxURI(sandboxID string, resource sandboxResource) (string, string, error) + + // Sandbox resources + storeSandboxResource(sandboxID string, resource sandboxResource, data interface{}) error + deleteSandboxResources(sandboxID string, resources []sandboxResource) error + fetchSandboxConfig(sandboxID string) (SandboxConfig, error) + fetchSandboxState(sandboxID string) (State, error) + fetchSandboxNetwork(sandboxID string) (NetworkNamespace, error) + storeSandboxNetwork(sandboxID string, networkNS NetworkNamespace) error + fetchSandboxDevices(sandboxID string) ([]api.Device, error) + storeSandboxDevices(sandboxID string, devices []api.Device) error + + // Hypervisor resources + fetchHypervisorState(sandboxID string, state interface{}) error + storeHypervisorState(sandboxID string, state interface{}) error + + // Agent resources + fetchAgentState(sandboxID string, state interface{}) error + storeAgentState(sandboxID string, state interface{}) error + + // Container resources + storeContainerResource(sandboxID, containerID string, resource sandboxResource, data interface{}) error + deleteContainerResources(sandboxID, containerID string, resources []sandboxResource) error + fetchContainerConfig(sandboxID, containerID string) (ContainerConfig, error) + fetchContainerState(sandboxID, containerID string) (State, error) + fetchContainerProcess(sandboxID, containerID string) (Process, error) + storeContainerProcess(sandboxID, containerID string, process Process) error + fetchContainerMounts(sandboxID, containerID string) ([]Mount, error) + storeContainerMounts(sandboxID, containerID string, mounts []Mount) error + fetchContainerDevices(sandboxID, containerID string) ([]ContainerDevice, error) + storeContainerDevices(sandboxID, containerID string, devices []ContainerDevice) error +}