README
¶
libStorage

libStorage
provides a vendor agnostic storage orchestration model, API, and
reference client and server implementations.
Overview
libStorage
enables storage consumption by leveraging methods commonly
available, locally and/or externally, to an operating system (OS).
The Past
The libStorage
project and its architecture represents a culmination of
experience gained from the project authors' building of
several
different
storage
orchestration tools. While created using
different languages and targeting disparate storage platforms, all the tools
were architecturally aligned and embedded functionality directly inside the
tools and affected storage platforms.
This shared design goal enabled tools that natively consumed storage, sans external dependencies.
The Present
Today libStorage
focuses on adding value to container runtimes and storage
orchestration tools such as Docker
and Mesos
, however the libStorage
framework is available abstractly for more general usage across:
- Operating systems
- Storage platforms
- Hardware platforms
- Virtualization platforms
The client side implementation, focused on operating system activities, has a minimal set of dependencies in order to avoid a large, runtime footprint.
Storage Orchestration Tools Today
Today there are many storage orchestration and abstraction tools relevant to container runtimes. These tools often must be installed locally and run alongside the container runtime.
The solid green lines represent active communication paths. The dotted black lines represent passive paths. The orange volume represents a operating system device and volume path available to the container runtime.
libStorage Embedded Architecture
Embedding libStorage
client and server components enable container
runtimes to communicate directly with storage platforms, the ideal
architecture. This design requires minimal operational dependencies and is
still able to provide volume management for container runtimes.
libStorage Centralized Architecture
In a centralized architecture, libStorage
is hosted as a service, acting as a
go-between for container runtimes and backend storage platforms.
The libStorage
endpoint is advertised by a tool like REX-Ray, run from anywhere, and is
responsible for all control plane operations to the storage platform along with
maintaining escalated credentials for these platforms. All client based
processes within the operating system are still embedded in the container
runtime.
libStorage Decentralized Architecture
Similar to the centralized architecture, this implementation design involves
running a separate libStorage
process alongside each container runtime, across
one or several hosts.
API
Central to libStorage
is the HTTP
/JSON
API. It defines the control plane
calls that occur between the client and server. While the libStorage
package
includes reference implementations of the client and server written using Go,
both the client and server could be written using any language as long as both
adhere to the published libStorage
API.
Client
The libStorage
client is responsible for discovering a host's instance ID
and the next, available device name. The client's reference implementation is
written using Go and is compatible with C++.
The design goal of the client is to be lightweight, portable, and avoid obsolescence by minimizing dependencies and focusing on deferring as much of the logic as possible to the server.
Server
The libStorage
server implements the libStorage
API and is responsible for
coordinating requests between clients and backend orchestration packages. The
server's reference implementation is also written using Go.
Model
The libStorage
model
defines several data structures that are easily represented using Go structs or
a portable format such as JSON.
Documentation 
The libStorage
documentation is available at
libstorage.rtfd.org.
License
The libStorage
project is licensed to you under the Apache License, Version 2.0. Please reference the LICENSE file for additional information.
Documentation
¶
Overview ¶
Package libstorage provides a vendor agnostic storage orchestration model, API, and reference client and server implementations. libStorage enables storage consumption by leveraging methods commonly available, locally and/or externally, to an operating system (OS).
The Past ¶
The libStorage project and its architecture represents a culmination of experience gained from the project authors' building of several (http://bit.ly/1HIAet6) different storage (http://bit.ly/1Ya9Uft) orchestration tools (https://github.com/thecodeteam/rexray). While created using different languages and targeting disparate storage platforms, all the tools were architecturally aligned and embedded functionality directly inside the tools and affected storage platforms.
This shared design goal enabled tools that natively consumed storage, sans external dependencies.
The Present ¶
Today libStorage focuses on adding value to container runtimes and storage orchestration tools such as Docker and Mesos, however the libStorage framework is available abstractly for more general usage across:
- Operating systems
- Storage platforms
- Hardware platforms
- Virtualization platforms
The client side implementation, focused on operating system activities, has a minimal set of dependencies in order to avoid a large, runtime footprint.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func New ¶
func New( goCtx context.Context, config gofig.Config) (types.Client, types.Server, <-chan error, error)
New starts an embedded libStorage server and returns both the server instnace as well as a client connected to said instnace.
While a new server may be launched, it's still up to the caller to provide a config instance with the correct properties to specify service information for a libStorage server.
Types ¶
This section is empty.
Directories
¶
Path | Synopsis |
---|---|
api
|
|
registry
Package registry is the central hub for Drivers and other types that follow the init-time registration.
|
Package registry is the central hub for Drivers and other types that follow the init-time registration. |
utils/filters
Package filters is a piece of thievery as the LDAP filter parsing code was lifted serepticiously from https://github.com/tonnerre/go-ldap/blob/master/ldap.go.
|
Package filters is a piece of thievery as the LDAP filter parsing code was lifted serepticiously from https://github.com/tonnerre/go-ldap/blob/master/ldap.go. |
c
|
|
cli
|
|
drivers
|
|
os/linux
Package linux is the OS driver for linux.
|
Package linux is the OS driver for linux. |
imports
|
|