README.md

# Openstex  [![Build Status](https://travis-ci.org/stephenmoloney/openstex_test.svg)](https://travis-ci.org/stephenmoloney/openstex_test) [![Hex Version](http://img.shields.io/hexpm/v/openstex.svg?style=flat)](https://hex.pm/packages/openstex) [![Hex docs](http://img.shields.io/badge/hex.pm-docs-green.svg?style=flat)](https://hexdocs.pm/openstex)

An elixir client for making requests to [Openstack compliant apis](http://developer.openstack.org/api-ref.html).

### Supported services

| Openstack Service | Supported |
|---|---|
| Identity 2.0 (Keystone) | :heavy_check_mark: |
| Object Storage 1.0 (Swift) | :heavy_check_mark: |


### Features


### 1. Request modules for generating `HTTPipe.Conn.t` structs which can subsequently be sent
to the API using a `request` function.

- Example - creating a new container

```elixir
  account = Client.Swift.get_account()
  conn = Openstex.Swift.V1.create_container("new_container", account)
  client.request(conn)
```


### 2. Helper modules for

a. One liners for sending queries to the client API.

- Example - Uploading a file

```elixir
  file_path = Path.join(Path.expand(__DIR__, "priv/test.json")
  Client.Swift.upload_file(file_path, server_object, container,
```

b. Sending more complex queries such as multi-step queries to the client API.

- Example - Getting all objects in a pseudofolder recursively, `[nested: :true]` will
check for objects recursively in deeper folders.

```elixir
  file_path = Path.join(Path.expand(__DIR__, "priv/test.json")
  Client.Swift.list_objects("nested_folder", "new_container", [nested: :true])
```


### 3. Adapter modules for

- [OVH Cloudstorage](https://www.ovh.ie/cloud/storage/)
- [Rackspace Cloudfiles CDN](https://www.rackspace.com/cloud/cdn-content-delivery-network).
- [Rackspace Cloudfiles](https://www.rackspace.com/cloud/files)


All of the above Adapters provide access to Swift Object Storage services which are (mostly) openstack compliant.



## Installation and Getting Started

| Adapter | Getting started |
|---|---|
| Ovh Adapter | [openstex_adapters_ovh](https://github.com/stephenmoloney/openstex_adapters_ovh) |
| Rackspace Adapter | [openstex_adapters_rackspace](https://github.com/stephenmoloney/openstex_adapters_rackspace) |


## Tests

- `mix test`


## Available Services

| Tables        | Version           | Status  |
| ------------- |:-------------:| -----:|
| Identity (Keystone) , [overview](https://wiki.openstack.org/wiki/keystone), [api](http://developer.openstack.org/api-ref-identity-v2.html)     | v2   | :heavy_check_mark:  |
| Identity (Keystone) , [overview](https://wiki.openstack.org/wiki/keystone), [api](http://developer.openstack.org/api-ref-identity-v3.html)     | v3   | :x: |
| Object Storage (Swift) , [overview](https://wiki.openstack.org/wiki/swift), [api](http://developer.openstack.org/api-ref-objectstorage-v1.html)     | v1   | :heavy_check_mark: |

[Openstack api reference](http://developer.openstack.org/api-ref.html)


## TODO

- [ ] improve the docs for some of the functions
- [ ] add tests for genserver workings in `Openstex.Adapters.Bypass.Keystone`
- [ ] add tests for `Openstex.Keystone.V2.HelpersTest`
- [ ] add tests for `Openstex.Swift.V1` with the execution of the `HTTPipe.Conn` structs with bypass.
`

## Licence

[MIT Licence](LICENCE.md)