libstorage

package module
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2017 License: Apache-2.0 Imports: 7 Imported by: 0

README

libStorage GoDoc Build Status Go Report Card codecov

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.

Storage Orchestration Tool Architecture Today

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 Embedded Architecture

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 Centralized Architecture

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.

libStorage De-Centralized Architecture

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 Docs

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/codedellemc/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
lss
lsx
drivers
os/linux
Package linux is the OS driver for linux.
Package linux is the OS driver for linux.
imports

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL