objectstorage

package module
v0.0.5 Latest Latest
Warning

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

Go to latest
Published: Mar 23, 2022 License: Apache-2.0 Imports: 7 Imported by: 9

README

object-storage-api-go

Go Reference Tests Go Report Card

Go言語向けのさくらのクラウド オブジェクトストレージAPIライブラリ

オブジェクトストレージAPIドキュメント: https://manual.sakura.ad.jp/cloud/objectstorage/api/api-json.html

概要

sacloud/object-storage-api-goはさくらのクラウド オブジェクトストレージAPIをGo言語から利用するためのAPIライブラリです。

利用イメージ:

import (
    "context"
    "os"
	
    objectstorage "github.com/sacloud/object-storage-api-go"
    v1 "github.com/sacloud/object-storage-api-go/apis/v1"
)

func main() {
    ctx := context.Background()
    client := &objectstorage.Client{} // デフォルトでusacloud互換プロファイル or 環境変数(SAKURACLOUD_ACCESS_TOKEN{_SECRET})が利用される

	// サイト一覧を取得
	siteOp := objectstorage.NewSiteOp(client)
	sites, err := siteOp.List(ctx)
	if err != nil {
		panic(err)
	}
	siteId := sites[0].Id

	// バケットの作成
	bucketName := "your-bucket-name"
	bucketAPI := objectstorage.NewBucketOp(client)
	bucket, err := bucketAPI.Create(ctx, siteId, bucketName)
	if err != nil {
		panic(err)
	}

	// バケットの削除
	defer func() {
		if err := bucketAPI.Delete(ctx, siteId, bucketName); err != nil {
			panic(err)
		}
	}()

	fmt.Println(bucket.Name)
}

⚠ v1.0に達するまでは互換性のない形で変更される可能性がありますのでご注意ください。

関連プロジェクト
  • sacloud/sacloud-go: sacloud/object-storage-api-goを用いた高レベルAPIライブラリ

License

sacloud/object-storage-api-go Copyright (C) 2022 The sacloud/object-storage-api-go Authors.

This project is published under Apache 2.0 License.

Documentation

Overview

Example (AccountAPI)

Example_accountAPI アカウントAPIの利用例

package main

import (
	"context"
	"fmt"

	objectstorage "github.com/sacloud/object-storage-api-go"
)

const defaultServerURL = "https://secure.sakura.ad.jp/cloud/zone/is1a/api/objectstorage/1.0"

var serverURL = defaultServerURL

func main() {
	client := &objectstorage.Client{
		APIRootURL: serverURL, // 省略可能
	}
	ctx := context.Background()

	// サイトIDが必要なため取得しておく
	siteOp := objectstorage.NewSiteOp(client)
	sites, err := siteOp.List(ctx)
	if err != nil {
		panic(err)
	}
	siteId := sites[0].Id

	// アカウントの参照
	accountOp := objectstorage.NewAccountOp(client)
	account, err := accountOp.Read(ctx, siteId)
	if err != nil {
		panic(err)
	}

	// アクセスキーの作成
	accessKey, err := accountOp.CreateAccessKey(ctx, siteId)
	if err != nil {
		panic(err)
	}

	// アクセスキーの一覧
	accessKeys, err := accountOp.ListAccessKeys(ctx, siteId)
	if err != nil {
		panic(err)
	}
	if len(accessKeys) == 0 {
		panic("ListAccessKeys failed")
	}

	// アクセスキーの削除
	defer func() {
		if err := accountOp.DeleteAccessKey(ctx, siteId, accessKey.Id.String()); err != nil {
			panic(err)
		}
	}()

	fmt.Printf("AccountCode: %s, Secret: %s", account.Code, accessKey.Secret)
}
Output:

AccountCode: member@account@isk01, Secret: secret
Example (BucketAPI)

Example_bucketAPI バケットAPIの利用例

package main

import (
	"context"
	"fmt"

	objectstorage "github.com/sacloud/object-storage-api-go"
)

const defaultServerURL = "https://secure.sakura.ad.jp/cloud/zone/is1a/api/objectstorage/1.0"

var serverURL = defaultServerURL

func main() {
	client := &objectstorage.Client{
		APIRootURL: serverURL, // 省略可能
	}
	ctx := context.Background()

	// サイトIDが必要なため取得しておく
	siteOp := objectstorage.NewSiteOp(client)
	sites, err := siteOp.List(ctx)
	if err != nil {
		panic(err)
	}
	siteId := sites[0].Id

	// バケットの作成
	bucketName := "your-bucket-name"
	bucketAPI := objectstorage.NewBucketOp(client)
	bucket, err := bucketAPI.Create(ctx, siteId, bucketName)
	if err != nil {
		panic(err)
	}

	// バケットの削除
	defer func() {
		if err := bucketAPI.Delete(ctx, siteId, bucketName); err != nil {
			panic(err)
		}
	}()

	fmt.Println(bucket.Name)
}
Output:

your-bucket-name
Example (ClusterAPI)

Example_clusterAPI サイト(クラスタ)APIの利用例

package main

import (
	"context"
	"fmt"

	objectstorage "github.com/sacloud/object-storage-api-go"
)

const defaultServerURL = "https://secure.sakura.ad.jp/cloud/zone/is1a/api/objectstorage/1.0"

var serverURL = defaultServerURL

func main() {
	client := &objectstorage.Client{
		APIRootURL: serverURL, // 省略可能
	}

	// サイト一覧の取得
	siteOp := objectstorage.NewSiteOp(client)
	sites, err := siteOp.List(context.Background())
	if err != nil {
		panic(err)
	}

	fmt.Println(sites[0].DisplayName)
}
Output:

石狩第1サイト
Example (PermissionAPI)

Example_permissionAPI パーミッションAPIの利用例

package main

import (
	"context"
	"fmt"

	objectstorage "github.com/sacloud/object-storage-api-go"
	v1 "github.com/sacloud/object-storage-api-go/apis/v1"
)

const defaultServerURL = "https://secure.sakura.ad.jp/cloud/zone/is1a/api/objectstorage/1.0"

var serverURL = defaultServerURL

func main() {
	client := &objectstorage.Client{
		APIRootURL: serverURL, // 省略可能
	}
	ctx := context.Background()

	// サイトIDが必要なため取得しておく
	siteOp := objectstorage.NewSiteOp(client)
	sites, err := siteOp.List(ctx)
	if err != nil {
		panic(err)
	}
	siteId := sites[0].Id

	// パーミッションの作成
	permissionOp := objectstorage.NewPermissionOp(client)
	permission, err := permissionOp.Create(ctx, siteId, &v1.CreatePermissionParams{
		BucketControls: v1.BucketControls{
			{
				BucketName: "bucket1",
				CanRead:    true,
				CanWrite:   true,
			},
		},
		DisplayName: "foobar",
	})
	if err != nil {
		panic(err)
	}

	// アクセスキーの作成
	accessKey, err := permissionOp.CreateAccessKey(ctx, siteId, permission.Id.Int64())
	if err != nil {
		panic(err)
	}

	// パーミッション/アクセスキーの削除
	defer func() {
		if err := permissionOp.DeleteAccessKey(ctx, siteId, permission.Id.Int64(), accessKey.Id.String()); err != nil {
			panic(err)
		}
		if err := permissionOp.Delete(ctx, siteId, permission.Id.Int64()); err != nil {
			panic(err)
		}
	}()

	fmt.Printf("Permission: %s, Secret: %s", permission.DisplayName, accessKey.Secret)
}
Output:

Permission: foobar, Secret: secret
Example (SiteStatusAPI)

Example_siteStatusAPI サイトステータスAPIの利用例

package main

import (
	"context"
	"fmt"

	objectstorage "github.com/sacloud/object-storage-api-go"
)

const defaultServerURL = "https://secure.sakura.ad.jp/cloud/zone/is1a/api/objectstorage/1.0"

var serverURL = defaultServerURL

func main() {
	client := &objectstorage.Client{
		APIRootURL: serverURL, // 省略可能
	}
	ctx := context.Background()

	// サイトIDが必要なため取得しておく
	siteOp := objectstorage.NewSiteOp(client)
	sites, err := siteOp.List(ctx)
	if err != nil {
		panic(err)
	}
	siteId := sites[0].Id

	// サイトステータスの参照
	statusOp := objectstorage.NewSiteStatusOp(client)
	status, err := statusOp.Read(ctx, siteId)
	if err != nil {
		panic(err)
	}

	fmt.Println(status.StatusCode.Status)
}
Output:

ok

Index

Examples

Constants

View Source
const DefaultAPIRootURL = "https://secure.sakura.ad.jp/cloud/zone/is1a/api/objectstorage/1.0"

DefaultAPIRootURL デフォルトのAPIルートURL

Variables

View Source
var (
	// Version app version
	Version = "v0.0.5"
	// Revision git commit short commit hash
	Revision = "xxxxxx" // set on build time
)
View Source
var UserAgent = fmt.Sprintf(
	"object-storage-api-go/%s (%s/%s; +https://github.com/sacloud/object-storage-api-go) %s",
	Version,
	runtime.GOOS,
	runtime.GOARCH,
	client.DefaultUserAgent,
)

UserAgent APIリクエスト時のユーザーエージェント

Functions

This section is empty.

Types

type AccountAPI

type AccountAPI interface {
	// Create アカウントの作成
	Create(ctx context.Context, siteId string) (*v1.Account, error)
	// Read アカウントの参照
	Read(ctx context.Context, siteId string) (*v1.Account, error)
	// Delete アカウントの削除
	Delete(ctx context.Context, siteId string) error

	// ListAccessKeys アクセスキーの参照
	//
	// Secretは常に空文字になっている
	ListAccessKeys(ctx context.Context, siteId string) ([]*v1.AccountKey, error)

	// CreateAccessKey アクセスキーの作成
	//
	// Secretはこの戻り値でのみ参照可能
	CreateAccessKey(ctx context.Context, siteId string) (*v1.AccountKey, error)
	// ReadAccessKey アクセスキーの参照
	//
	// Secretは常に空文字になっている
	ReadAccessKey(ctx context.Context, siteId, accessKeyId string) (*v1.AccountKey, error)
	// DeleteAccessKey アクセスキーの削除
	DeleteAccessKey(ctx context.Context, siteId, accessKeyId string) error
}

AccountAPI アカウント操作関連API

func NewAccountOp

func NewAccountOp(client *Client) AccountAPI

NewAccountOp アカウント操作関連API

type BucketAPI

type BucketAPI interface {
	// Create バケットの作成
	Create(ctx context.Context, siteId, bucketName string) (*v1.Bucket, error)
	// Delete バケットの削除
	Delete(ctx context.Context, siteId, bucketName string) error
}

BucketAPI バケット操作関連API

func NewBucketOp

func NewBucketOp(client *Client) BucketAPI

NewBucketOp バケット操作関連API

type Client

type Client struct {
	// Profile usacloud互換プロファイル名
	Profile string

	// Token APIキー: トークン
	Token string
	// Token APIキー: シークレット
	Secret string

	// APIRootURL APIのリクエスト先URLプレフィックス、省略可能
	APIRootURL string

	// Options HTTPクライアント関連オプション
	Options *client.Options

	// DisableProfile usacloud互換プロファイルからの設定読み取りを無効化
	DisableProfile bool
	// DisableEnv 環境変数からの設定読み取りを無効化
	DisableEnv bool
	// contains filtered or unexported fields
}

Client APIクライアント

type PermissionAPI

type PermissionAPI interface {
	List(ctx context.Context, siteId string) ([]*v1.Permission, error)
	// Create パーミッションの作成
	Create(ctx context.Context, siteId string, params *v1.CreatePermissionParams) (*v1.Permission, error)
	// Read パーミッションの参照
	Read(ctx context.Context, siteId string, permissionId int64) (*v1.Permission, error)
	// Update パーミッションの更新
	Update(ctx context.Context, siteId string, permissionId int64, params *v1.UpdatePermissionParams) (*v1.Permission, error)
	// Delete パーミッションの削除
	Delete(ctx context.Context, siteId string, permissionId int64) error

	// ListAccessKeys アクセスキー一覧
	ListAccessKeys(ctx context.Context, siteId string, permissionId int64) ([]*v1.PermissionKey, error)
	// CreateAccessKey アクセスキーの作成
	//
	// Secretはこの戻り値でのみ参照可能
	CreateAccessKey(ctx context.Context, siteId string, permissionId int64) (*v1.PermissionKey, error)
	// ReadAccessKey アクセスキーの参照
	//
	// Secretは常に空文字になっている
	ReadAccessKey(ctx context.Context, siteId string, permissionId int64, accessKeyId string) (*v1.PermissionKey, error)
	// DeleteAccessKey アクセスキーの削除
	DeleteAccessKey(ctx context.Context, siteId string, permissionId int64, accessKeyId string) error
}

PermissionAPI パーミッション関連API

func NewPermissionOp

func NewPermissionOp(client *Client) PermissionAPI

NewPermissionOp パーミッション関連API

type SiteAPI

type SiteAPI interface {
	// List サイト一覧
	List(ctx context.Context) ([]*v1.Cluster, error)
	// Read サイト詳細
	Read(ctx context.Context, siteId string) (*v1.Cluster, error)
}

SiteAPI サイト(クラスター)関連API

func NewSiteOp

func NewSiteOp(client *Client) SiteAPI

NewSiteOp .

type SiteStatusAPI

type SiteStatusAPI interface {
	// Read サイトステータスの参照
	Read(ctx context.Context, siteId string) (*v1.Status, error)
}

SiteStatusAPI サイトステータスAPI

func NewSiteStatusOp

func NewSiteStatusOp(client *Client) SiteStatusAPI

NewSiteStatusOp サイトステータスAPI

Directories

Path Synopsis
apis
v1
Package v1 provides primitives to interact with the openapi HTTP API.
Package v1 provides primitives to interact with the openapi HTTP API.
cmd

Jump to

Keyboard shortcuts

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