1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# Schwift
this is a Go client library for [OpenStack Swift](https://github.com/openstack/swift). I made this after growing
frustrated with the bad API design of [`ncw/swift`](https://github.com/ncw/swift).
<p style="color:red;font-weight:bold">WARNING: This is in a pre-alpha stage and neither complete nor tested.</p>
## Installation
You can get this with `go get github.com/majewsky/schwift`. When using this in an application, vendoring is recommended.
## Usage
This library uses [Gophercloud](https://github.com/gophercloud/gophercloud) to handle authentication, so to use Schwift, you have to first build a `gophercloud.ServiceClient` and then pass that to `schwift.Account()` to get a handle on the Swift account.
For example, to connect to Swift using OpenStack Keystone authentication:
```go
import (
"log"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
"github.com/majewsky/schwift"
)
authOptions, err := openstack.AuthOptionsFromEnv()
handle(err)
provider, err := openstack.AuthenticatedClient(authOptions)
handle(err)
client, err := openstack.NewObjectStorageV1(provider, gophercloud.EndpointOpts {})
handle(err)
account, err := schwift.AccountFromClient(client)
handle(err)
```
To connect to Swift using Swift's built-in authentication:
```go
import (
"log"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
"github.com/gophercloud/gophercloud/openstack/objectstore/v1/swauth"
"github.com/majewsky/schwift"
)
provider, err := openstack.NewClient("http://swift.example.com:8080")
handle(err)
client, err := swauth.NewObjectStorageV1(provider, swauth.AuthOpts {
User: "project:user",
Key: "password",
})
handle(err)
account, err := schwift.AccountFromClient(client)
handle(err)
```
From this point, follow the [API documentation](https://godoc.org/github.com/majewsky/schwift) for what you can do with
the `schwift.Account` object.
|