Skip to main content

Datera Fabric Python SDK

Project description

# Datera Python SDK


## Introduction

This is Python SDK version 0.1 for the **Datera** Fabric Services API.
Download and use of this package implicitly accepts the terms in COPYING

Users of this package are assumed to have familiarity with the **Datera** API.
Details around the API itself are not necessarily covered through this SDK.


## Installation

### From Source
```bash
apt-get install python-virtualenv (or yum install python-virtualenv for CentOS)
virtualenv sdk
source sdk/bin/activate
git clone https://github.com/Datera/python-sdk.git
cd python-sdk
pip install -r requirements.txt
python setup.py install
```

### From PYPI
```bash
pip install -U dfs_sdk
```

## Universal Datera Config

The Universal Datera Config (UDC) is a config that can be specified in a
number of ways:

* JSON file with any of the following names:
- .datera-config
- datera-config
- .datera-config.json
- datera-config.json
* The JSON file has the following configuration:
```json
{"mgmt_ip": "1.1.1.1",
"username": "admin",
"password": "password",
"tenant": "/root",
"api_version": "2.2"'
"ldap": ""}
```
* The file can be in any of the following places. This is also the lookup
order for config files:
- current directory
- home directory
- home/config directory
- /etc/datera
* If no datera config file is found and a cinder.conf file is present, the
config parser will try and pull connection credentials from the
cinder.conf
* Tenant and API version and LDAP are always optional, but it's generally
suggested to include them in your UDC file for easy reference.
* Instead of a JSON file, environment variables can be used.
- `DAT_MGMT`
- `DAT_USER`
- `DAT_PASS`
- `DAT_TENANT`
- `DAT_API`
- `DAT_LDAP`
* Most tools built to use the Universal Datera Config will also allow
for providing/overriding any of the config values via command line flags.
- --hostname
- --username
- --password
- --tenant
- --api-version
- --ldap

## Developing with Universal Datera Config

To use UDC in a new python tool is very simple just add the following to
your python script:

```python
from dfs_sdk import scaffold

parser = scaffold.get_argparser()
parser.add_argument('my-new-arg')
args = parser.parse_args()
```

If you want to use subparsers, or customize the help outptu of your parser
then use the following

```python
import argparse
from dfs_sdk import scaffold

top_parser = scaffold.get_argparser(add_help=False)
new_parser = argparse.ArgumentParser(parents=[top_parser])
new_parser.add_argument('my-new-arg')
args = new_parser.parse_args()
```

Inside a script the config can be recieved by calling
```python
from dfs_sdk import scaffold

scaffold.get_argparser()
config = scaffold.get_config()
```
NOTE: It is no longer required to call ``scaffold.get_argparser()`` before
calling ``scaffold.get_config()``. This is only necessary if building
a CLI tool that needs the cli parser.

## Logging

To set custom logging.json file
```bash
export DSDK_LOG_CFG=your/log/location.json
```
Or the value can be set to a debug, info or error
```bash
export DSDK_LOG_CFG=info
```

To set logging to stdout. The value can be any logging level supported by
the python logging module (eg: debug, info, etc)
```bash
export DSDK_LOG_STDOUT=debug
```

The debug logs generated by the python-sdk are quite large, and are on a
rotating file handler (provided that a custom logging.json file is not provided)

## Managed Objects

Datera provides an application-driven storage management model, whose goal is to closely align storage
with a corresponding application's requirements.

The main storage objects are defined and differentiated as follows:

### Application Instance (AppInstance)
- Corresponds to an application, service, etc.
- Contains Zero or more Storage Instances

### Storage Instance
- Corresponds to one set of storage requirements for a given AppInstance
- ACL Policies, including IQN Initiators
- Target IQN
- Contains Zero or more Volumes

### Volumes
- Corresponds to a single allocated storage object
- Size (default unit is GB)
- Replication Factor
- Performance Policies (QoS for Bandwidth and IOPS)
- Protection Policies (Snapshot scheduling)

Another way of viewing the managed object hierarchy is as follows:

app_instances:
- storage_instances: (1 or more per app_instance)
+ acl_policy (1 or more host initiators )
+ iqn (target IQN)
+ ips (target IPs)
+ volumes: (1 or more per storage_instance)
* name
* size
* replication
* performance_policy (i.e. QoS)
* protection_policy (i.e. Snapshot schedules)


## Endpoints

HTTP operations on URL endpoints is the only way to interact with the set of managed objects.
URL's have the format:
```bash
http://192.168.42.13:7717/v2.2/<object_class>/[<instance>]/...
```
where **7717** is the port used to access the API, and "v2.2" corresponds to an API version control.

Briefly, the REST API supports 4 operations/methods **create (POST), modify (PUT), list (GET), delete (DELETE)**.
Any input payload is in JSON format; any return payload is in JSON format.
Login session keys are required within the "header" of any HTTP request.
Sessions keys have a 15 minute lifetime.

For a full reference documentation of the REST API, please review the Datera REST API Guide.

This Python SDK serves as a wrapper around the raw HTTP layer.

## Using this SDK

The Datera module is named **dfs_sdk**, and the main entry point is called __DateraApi__.
Obtaining an object handle can be done as follows:
```python
from dfs_sdk import get_api
[...]
api = get_api(mgmt_ip, username, password, "v2.2" **kwargs)
```

You can also initialize the SDK using a Datera UDC file. The following will read any valid
UDC file on the system or from the current environment variables.

```python
from dfs_sdk.scaffold import get_api
[...]
api = get_api()
```
## Configurable Options

These options can be set on instantiation via the ``get_api`` constructor

Option | Default | Description
-------|-------- | -----------
tenant | '/root' | Datera account tenant/subtenant
timeout | 300 (s) | Timeout for HTTP requests
secure | True | Whether to use HTTPS (False sets HTTP)
strict | False | Whether to check if an endpoint is valid before sending request
cert | None | HTTPS verification certificate
cert\_key | None | HTTPS verification certificate key
thread\_local | {} | Used for passing values down to the connection layer, usually for logging


## Common Objects, Examples and Use Cases

Please see the **utils** directory for programming examples that cover the following:

Common methods for all objects include **create(), set(), delete(), list()**

+ To create an app\_instance with name **FOO**:
```python
ai = api.app_instances.create(name="FOO")
```
+ Looping through objects can be done via **list()**:
```python
for ai in api.app_instances.list():
print "AppInstance: ", ai
```
+ To set a given **app_instance** into an _offline_ state:
```python
ai.set(admin_state="offline")
```
+ To delete a given app\_instance:
```python
ai.delete()
```
## Reporting Problems

For problems and feedback, please email "support@datera.io"


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dfs_sdk-1.2.21.tar.gz (34.1 kB view hashes)

Uploaded Source

Built Distribution

dfs_sdk-1.2.21-py3-none-any.whl (33.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page