1
0
Fork 0

ACME TLS ALPN

This commit is contained in:
Ludovic Fernandez 2018-07-03 12:44:04 +02:00 committed by Traefiker Bot
parent 17ad5153b8
commit 139f280f35
258 changed files with 25528 additions and 1516 deletions

344
vendor/github.com/sacloud/libsacloud/api/archive.go generated vendored Normal file
View file

@ -0,0 +1,344 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"github.com/sacloud/libsacloud/sacloud/ostype"
"strings"
"time"
)
// ArchiveAPI アーカイブAPI
type ArchiveAPI struct {
*baseAPI
findFuncMapPerOSType map[ostype.ArchiveOSTypes]func() (*sacloud.Archive, error)
}
var (
archiveLatestStableCentOSTags = []string{"current-stable", "distro-centos"}
archiveLatestStableCentOS6Tags = []string{"distro-centos", "distro-ver-6.9"}
archiveLatestStableUbuntuTags = []string{"current-stable", "distro-ubuntu"}
archiveLatestStableDebianTags = []string{"current-stable", "distro-debian"}
archiveLatestStableVyOSTags = []string{"current-stable", "distro-vyos"}
archiveLatestStableCoreOSTags = []string{"current-stable", "distro-coreos"}
archiveLatestStableRancherOSTags = []string{"current-stable", "distro-rancheros"}
archiveLatestStableKusanagiTags = []string{"current-stable", "pkg-kusanagi"}
archiveLatestStableSophosUTMTags = []string{"current-stable", "pkg-sophosutm"}
archiveLatestStableFreeBSDTags = []string{"current-stable", "distro-freebsd"}
archiveLatestStableWindows2012Tags = []string{"os-windows", "distro-ver-2012.2"}
archiveLatestStableWindows2012RDSTags = []string{"os-windows", "distro-ver-2012.2", "windows-rds"}
archiveLatestStableWindows2012RDSOfficeTags = []string{"os-windows", "distro-ver-2012.2", "windows-rds", "with-office"}
archiveLatestStableWindows2016Tags = []string{"os-windows", "distro-ver-2016"}
archiveLatestStableWindows2016RDSTags = []string{"os-windows", "distro-ver-2016", "windows-rds"}
archiveLatestStableWindows2016RDSOfficeTags = []string{"os-windows", "distro-ver-2016", "windows-rds", "with-office"}
archiveLatestStableWindows2016SQLServerWeb = []string{"os-windows", "distro-ver-2016", "windows-sqlserver", "sqlserver-2016", "edition-web"}
archiveLatestStableWindows2016SQLServerStandard = []string{"os-windows", "distro-ver-2016", "windows-sqlserver", "sqlserver-2016", "edition-standard"}
archiveLatestStableWindows2016SQLServerStandardAll = []string{"os-windows", "distro-ver-2016", "windows-sqlserver", "sqlserver-2016", "edition-standard", "windows-rds", "with-office"}
)
// NewArchiveAPI アーカイブAPI作成
func NewArchiveAPI(client *Client) *ArchiveAPI {
api := &ArchiveAPI{
baseAPI: &baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "archive"
},
},
}
api.findFuncMapPerOSType = map[ostype.ArchiveOSTypes]func() (*sacloud.Archive, error){
ostype.CentOS: api.FindLatestStableCentOS,
ostype.CentOS6: api.FindLatestStableCentOS6,
ostype.Ubuntu: api.FindLatestStableUbuntu,
ostype.Debian: api.FindLatestStableDebian,
ostype.VyOS: api.FindLatestStableVyOS,
ostype.CoreOS: api.FindLatestStableCoreOS,
ostype.RancherOS: api.FindLatestStableRancherOS,
ostype.Kusanagi: api.FindLatestStableKusanagi,
ostype.SophosUTM: api.FindLatestStableSophosUTM,
ostype.FreeBSD: api.FindLatestStableFreeBSD,
ostype.Windows2012: api.FindLatestStableWindows2012,
ostype.Windows2012RDS: api.FindLatestStableWindows2012RDS,
ostype.Windows2012RDSOffice: api.FindLatestStableWindows2012RDSOffice,
ostype.Windows2016: api.FindLatestStableWindows2016,
ostype.Windows2016RDS: api.FindLatestStableWindows2016RDS,
ostype.Windows2016RDSOffice: api.FindLatestStableWindows2016RDSOffice,
ostype.Windows2016SQLServerWeb: api.FindLatestStableWindows2016SQLServerWeb,
ostype.Windows2016SQLServerStandard: api.FindLatestStableWindows2016SQLServerStandard,
ostype.Windows2016SQLServerStandardAll: api.FindLatestStableWindows2016SQLServerStandardAll,
}
return api
}
// OpenFTP FTP接続開始
func (api *ArchiveAPI) OpenFTP(id int64) (*sacloud.FTPServer, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/ftp", api.getResourceURL(), id)
//body = map[string]bool{"ChangePassword": reset}
res = &sacloud.Response{}
)
result, err := api.action(method, uri, nil, res)
if !result || err != nil {
return nil, err
}
return res.FTPServer, nil
}
// CloseFTP FTP接続終了
func (api *ArchiveAPI) CloseFTP(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/ftp", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// SleepWhileCopying コピー終了まで待機
func (api *ArchiveAPI) SleepWhileCopying(id int64, timeout time.Duration) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *ArchiveAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, 0)
return poll(handler, timeout)
}
// CanEditDisk ディスクの修正が可能か判定
func (api *ArchiveAPI) CanEditDisk(id int64) (bool, error) {
archive, err := api.Read(id)
if err != nil {
return false, err
}
if archive == nil {
return false, nil
}
// BundleInfoがあれば編集不可
if archive.BundleInfo != nil && archive.BundleInfo.HostClass == bundleInfoWindowsHostClass {
// Windows
return false, nil
}
// SophosUTMであれば編集不可
if archive.HasTag("pkg-sophosutm") || archive.IsSophosUTM() {
return false, nil
}
for _, t := range allowDiskEditTags {
if archive.HasTag(t) {
// 対応OSインストール済みディスク
return true, nil
}
}
// ここまできても判定できないならソースに投げる
if archive.SourceDisk != nil && archive.SourceDisk.Availability != "discontinued" {
return api.client.Disk.CanEditDisk(archive.SourceDisk.ID)
}
if archive.SourceArchive != nil && archive.SourceArchive.Availability != "discontinued" {
return api.client.Archive.CanEditDisk(archive.SourceArchive.ID)
}
return false, nil
}
// GetPublicArchiveIDFromAncestors 祖先の中からパブリックアーカイブのIDを検索
func (api *ArchiveAPI) GetPublicArchiveIDFromAncestors(id int64) (int64, bool) {
emptyID := int64(0)
archive, err := api.Read(id)
if err != nil {
return emptyID, false
}
if archive == nil {
return emptyID, false
}
// BundleInfoがあれば編集不可
if archive.BundleInfo != nil && archive.BundleInfo.HostClass == bundleInfoWindowsHostClass {
// Windows
return emptyID, false
}
// SophosUTMであれば編集不可
if archive.HasTag("pkg-sophosutm") || archive.IsSophosUTM() {
return emptyID, false
}
for _, t := range allowDiskEditTags {
if archive.HasTag(t) {
// 対応OSインストール済みディスク
return archive.ID, true
}
}
// ここまできても判定できないならソースに投げる
if archive.SourceDisk != nil && archive.SourceDisk.Availability != "discontinued" {
return api.client.Disk.GetPublicArchiveIDFromAncestors(archive.SourceDisk.ID)
}
if archive.SourceArchive != nil && archive.SourceArchive.Availability != "discontinued" {
return api.client.Archive.GetPublicArchiveIDFromAncestors(archive.SourceArchive.ID)
}
return emptyID, false
}
// FindLatestStableCentOS 安定版最新のCentOSパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableCentOS() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableCentOSTags)
}
// FindLatestStableCentOS6 安定版最新のCentOS6パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableCentOS6() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableCentOS6Tags)
}
// FindLatestStableDebian 安定版最新のDebianパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableDebian() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableDebianTags)
}
// FindLatestStableUbuntu 安定版最新のUbuntuパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableUbuntu() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableUbuntuTags)
}
// FindLatestStableVyOS 安定版最新のVyOSパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableVyOS() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableVyOSTags)
}
// FindLatestStableCoreOS 安定版最新のCoreOSパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableCoreOS() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableCoreOSTags)
}
// FindLatestStableRancherOS 安定版最新のRancherOSパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableRancherOS() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableRancherOSTags)
}
// FindLatestStableKusanagi 安定版最新のKusanagiパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableKusanagi() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableKusanagiTags)
}
// FindLatestStableSophosUTM 安定板最新のSophosUTMパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableSophosUTM() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableSophosUTMTags)
}
// FindLatestStableFreeBSD 安定版最新のFreeBSDパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableFreeBSD() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableFreeBSDTags)
}
// FindLatestStableWindows2012 安定版最新のWindows2012パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2012() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2012Tags, map[string]interface{}{
"Name": "Windows Server 2012 R2 Datacenter Edition",
})
}
// FindLatestStableWindows2012RDS 安定版最新のWindows2012RDSパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2012RDS() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2012RDSTags, map[string]interface{}{
"Name": "Windows Server 2012 R2 for RDS",
})
}
// FindLatestStableWindows2012RDSOffice 安定版最新のWindows2012RDS(Office)パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2012RDSOffice() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2012RDSOfficeTags, map[string]interface{}{
"Name": "Windows Server 2012 R2 for RDS(MS Office付)",
})
}
// FindLatestStableWindows2016 安定版最新のWindows2016パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2016() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2016Tags, map[string]interface{}{
"Name": "Windows Server 2016 Datacenter Edition",
})
}
// FindLatestStableWindows2016RDS 安定版最新のWindows2016RDSパブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2016RDS() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2016RDSTags, map[string]interface{}{
"Name": "Windows Server 2016 for RDS",
})
}
// FindLatestStableWindows2016RDSOffice 安定版最新のWindows2016RDS(Office)パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2016RDSOffice() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2016RDSOfficeTags, map[string]interface{}{
"Name": "Windows Server 2016 for RDS(MS Office付)",
})
}
// FindLatestStableWindows2016SQLServerWeb 安定版最新のWindows2016 SQLServer(Web) パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2016SQLServerWeb() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2016SQLServerWeb, map[string]interface{}{
"Name": "Windows Server 2016 for MS SQL 2016(Web)",
})
}
// FindLatestStableWindows2016SQLServerStandard 安定版最新のWindows2016 SQLServer(Standard) パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2016SQLServerStandard() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2016SQLServerStandard, map[string]interface{}{
"Name": "Windows Server 2016 for MS SQL 2016(Standard)",
})
}
// FindLatestStableWindows2016SQLServerStandardAll 安定版最新のWindows2016 SQLServer(RDS+Office) パブリックアーカイブを取得
func (api *ArchiveAPI) FindLatestStableWindows2016SQLServerStandardAll() (*sacloud.Archive, error) {
return api.findByOSTags(archiveLatestStableWindows2016SQLServerStandard, map[string]interface{}{
"Name": "Windows Server 2016 for MS SQL 2016(Std) with RDS / MS Office",
})
}
// FindByOSType 指定のOS種別の安定版最新のパブリックアーカイブを取得
func (api *ArchiveAPI) FindByOSType(os ostype.ArchiveOSTypes) (*sacloud.Archive, error) {
if f, ok := api.findFuncMapPerOSType[os]; ok {
return f()
}
return nil, fmt.Errorf("OSType [%s] is invalid", os)
}
func (api *ArchiveAPI) findByOSTags(tags []string, filterMap ...map[string]interface{}) (*sacloud.Archive, error) {
api.Reset().WithTags(tags)
for _, filters := range filterMap {
for key, filter := range filters {
api.FilterMultiBy(key, filter)
}
}
res, err := api.Find()
if err != nil {
return nil, fmt.Errorf("Archive [%s] error : %s", strings.Join(tags, ","), err)
}
if len(res.Archives) == 0 {
return nil, fmt.Errorf("Archive [%s] Not Found", strings.Join(tags, ","))
}
return &res.Archives[0], nil
}

251
vendor/github.com/sacloud/libsacloud/api/archive_gen.go generated vendored Normal file
View file

@ -0,0 +1,251 @@
package api
/************************************************
generated by IDE. for [ArchiveAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件リセット
func (api *ArchiveAPI) Reset() *ArchiveAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ArchiveAPI) Offset(offset int) *ArchiveAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ArchiveAPI) Limit(limit int) *ArchiveAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ArchiveAPI) Include(key string) *ArchiveAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ArchiveAPI) Exclude(key string) *ArchiveAPI {
api.exclude(key)
return api
}
// FilterBy 任意項目でのフィルタ(部分一致)
func (api *ArchiveAPI) FilterBy(key string, value interface{}) *ArchiveAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ArchiveAPI) FilterMultiBy(key string, value interface{}) *ArchiveAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ArchiveAPI) WithNameLike(name string) *ArchiveAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *ArchiveAPI) WithTag(tag string) *ArchiveAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *ArchiveAPI) WithTags(tags []string) *ArchiveAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// WithSizeGib アーカイブサイズ条件
func (api *ArchiveAPI) WithSizeGib(size int) *ArchiveAPI {
api.FilterBy("SizeMB", size*1024)
return api
}
// WithSharedScope 共有スコープ条件
func (api *ArchiveAPI) WithSharedScope() *ArchiveAPI {
api.FilterBy("Scope", "shared")
return api
}
// WithUserScope ユーザースコープ条件
func (api *ArchiveAPI) WithUserScope() *ArchiveAPI {
api.FilterBy("Scope", "user")
return api
}
// SortBy 任意項目でのソート指定
func (api *ArchiveAPI) SortBy(key string, reverse bool) *ArchiveAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ArchiveAPI) SortByName(reverse bool) *ArchiveAPI {
api.sortByName(reverse)
return api
}
// SortBySize サイズでのソート
func (api *ArchiveAPI) SortBySize(reverse bool) *ArchiveAPI {
api.sortBy("SizeMB", reverse)
return api
}
/************************************************
To support Setxxx interfaces for Find()
************************************************/
// SetEmpty 検索条件リセット
func (api *ArchiveAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ArchiveAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ArchiveAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ArchiveAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ArchiveAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 任意項目でのフィルタ(部分一致)
func (api *ArchiveAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ArchiveAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ArchiveAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *ArchiveAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *ArchiveAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// SetSizeGib アーカイブサイズ条件
func (api *ArchiveAPI) SetSizeGib(size int) {
api.FilterBy("SizeMB", size*1024)
}
// SetSharedScope 共有スコープ条件
func (api *ArchiveAPI) SetSharedScope() {
api.FilterBy("Scope", "shared")
}
// SetUserScope ユーザースコープ条件
func (api *ArchiveAPI) SetUserScope() {
api.FilterBy("Scope", "user")
}
// SetSortBy 任意項目でのソート指定
func (api *ArchiveAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ArchiveAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// SetSortBySize サイズでのソート
func (api *ArchiveAPI) SetSortBySize(reverse bool) {
api.sortBy("SizeMB", reverse)
}
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// Create 新規作成
func (api *ArchiveAPI) Create(value *sacloud.Archive) (*sacloud.Archive, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *ArchiveAPI) Read(id int64) (*sacloud.Archive, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *ArchiveAPI) Update(id int64, value *sacloud.Archive) (*sacloud.Archive, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *ArchiveAPI) Delete(id int64) (*sacloud.Archive, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
// New 作成用パラメータ作成
func (api *ArchiveAPI) New() *sacloud.Archive {
return &sacloud.Archive{}
}
/************************************************
Inner functions
************************************************/
func (api *ArchiveAPI) setStateValue(setFunc func(*sacloud.Request)) *ArchiveAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ArchiveAPI) request(f func(*sacloud.Response) error) (*sacloud.Archive, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Archive, nil
}
func (api *ArchiveAPI) createRequest(value *sacloud.Archive) *sacloud.Request {
req := &sacloud.Request{}
req.Archive = value
return req
}

View file

@ -0,0 +1,42 @@
package api
import (
"encoding/json"
"github.com/sacloud/libsacloud/sacloud"
)
// AuthStatusAPI 認証状態API
type AuthStatusAPI struct {
*baseAPI
}
// NewAuthStatusAPI 認証状態API作成
func NewAuthStatusAPI(client *Client) *AuthStatusAPI {
return &AuthStatusAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "auth-status"
},
},
}
}
// Read 読み取り
func (api *AuthStatusAPI) Read() (*sacloud.AuthStatus, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), nil)
if err != nil {
return nil, err
}
var res sacloud.AuthStatus
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
// Find 検索
func (api *AuthStatusAPI) Find() (*sacloud.AuthStatus, error) {
return api.Read()
}

116
vendor/github.com/sacloud/libsacloud/api/auto_backup.go generated vendored Normal file
View file

@ -0,0 +1,116 @@
package api
import (
"encoding/json"
// "strings"
"github.com/sacloud/libsacloud/sacloud"
)
// SearchAutoBackupResponse 自動バックアップ 検索レスポンス
type SearchAutoBackupResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// CommonServiceAutoBackupItems 自動バックアップ リスト
CommonServiceAutoBackupItems []sacloud.AutoBackup `json:"CommonServiceItems,omitempty"`
}
type autoBackupRequest struct {
CommonServiceAutoBackupItem *sacloud.AutoBackup `json:"CommonServiceItem,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type autoBackupResponse struct {
*sacloud.ResultFlagValue
*sacloud.AutoBackup `json:"CommonServiceItem,omitempty"`
}
// AutoBackupAPI 自動バックアップAPI
type AutoBackupAPI struct {
*baseAPI
}
// NewAutoBackupAPI 自動バックアップAPI作成
func NewAutoBackupAPI(client *Client) *AutoBackupAPI {
return &AutoBackupAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "commonserviceitem"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Provider.Class", "autobackup")
return res
},
},
}
}
// Find 検索
func (api *AutoBackupAPI) Find() (*SearchAutoBackupResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchAutoBackupResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *AutoBackupAPI) request(f func(*autoBackupResponse) error) (*sacloud.AutoBackup, error) {
res := &autoBackupResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.AutoBackup, nil
}
func (api *AutoBackupAPI) createRequest(value *sacloud.AutoBackup) *autoBackupResponse {
return &autoBackupResponse{AutoBackup: value}
}
// New 新規作成用パラメーター作成
func (api *AutoBackupAPI) New(name string, diskID int64) *sacloud.AutoBackup {
return sacloud.CreateNewAutoBackup(name, diskID)
}
// Create 新規作成
func (api *AutoBackupAPI) Create(value *sacloud.AutoBackup) (*sacloud.AutoBackup, error) {
return api.request(func(res *autoBackupResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *AutoBackupAPI) Read(id int64) (*sacloud.AutoBackup, error) {
return api.request(func(res *autoBackupResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *AutoBackupAPI) Update(id int64, value *sacloud.AutoBackup) (*sacloud.AutoBackup, error) {
return api.request(func(res *autoBackupResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *AutoBackupAPI) Delete(id int64) (*sacloud.AutoBackup, error) {
return api.request(func(res *autoBackupResponse) error {
return api.delete(id, nil, res)
})
}

View file

@ -0,0 +1,239 @@
package api
/************************************************
generated by IDE. for [AutoBackupAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件リセット
func (api *AutoBackupAPI) Reset() *AutoBackupAPI {
api.reset()
return api
}
// Offset オフセット
func (api *AutoBackupAPI) Offset(offset int) *AutoBackupAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *AutoBackupAPI) Limit(limit int) *AutoBackupAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *AutoBackupAPI) Include(key string) *AutoBackupAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *AutoBackupAPI) Exclude(key string) *AutoBackupAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルタ
func (api *AutoBackupAPI) FilterBy(key string, value interface{}) *AutoBackupAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *AutoBackupAPI) FilterMultiBy(key string, value interface{}) *AutoBackupAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *AutoBackupAPI) WithNameLike(name string) *AutoBackupAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *AutoBackupAPI) WithTag(tag string) *AutoBackupAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *AutoBackupAPI) WithTags(tags []string) *AutoBackupAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *AutoBackupAPI) WithSizeGib(size int) *AutoBackupAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *AutoBackupAPI) WithSharedScope() *AutoBackupAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *AutoBackupAPI) WithUserScope() *AutoBackupAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *AutoBackupAPI) SortBy(key string, reverse bool) *AutoBackupAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名前でのソート
func (api *AutoBackupAPI) SortByName(reverse bool) *AutoBackupAPI {
api.sortByName(reverse)
return api
}
// func (api *AutoBackupAPI) SortBySize(reverse bool) *AutoBackupAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件リセット
func (api *AutoBackupAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *AutoBackupAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *AutoBackupAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *AutoBackupAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *AutoBackupAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルタ
func (api *AutoBackupAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *AutoBackupAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *AutoBackupAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *AutoBackupAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *AutoBackupAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *AutoBackupAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *AutoBackupAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *AutoBackupAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *AutoBackupAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名前でのソート
func (api *AutoBackupAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *AutoBackupAPI) SortBySize(reverse bool) *AutoBackupAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *AutoBackupAPI) New() *sacloud.AutoBackup {
// return &sacloud.AutoBackup{}
// }
// func (api *AutoBackupAPI) Create(value *sacloud.AutoBackup) (*sacloud.AutoBackup, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *AutoBackupAPI) Read(id string) (*sacloud.AutoBackup, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *AutoBackupAPI) Update(id string, value *sacloud.AutoBackup) (*sacloud.AutoBackup, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *AutoBackupAPI) Delete(id string) (*sacloud.AutoBackup, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *AutoBackupAPI) setStateValue(setFunc func(*sacloud.Request)) *AutoBackupAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *AutoBackupAPI) request(f func(*sacloud.Response) error) (*sacloud.AutoBackup, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.AutoBackup, nil
//}
//
//func (api *AutoBackupAPI) createRequest(value *sacloud.AutoBackup) *sacloud.Request {
// req := &sacloud.Request{}
// req.AutoBackup = value
// return req
//}

277
vendor/github.com/sacloud/libsacloud/api/base_api.go generated vendored Normal file
View file

@ -0,0 +1,277 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"net/url"
)
type baseAPI struct {
client *Client
FuncGetResourceURL func() string
FuncBaseSearchCondition func() *sacloud.Request
state *sacloud.Request
apiRootSuffix string
}
var (
sakuraCloudAPIRootSuffix = "api/cloud/1.1"
sakuraBillingAPIRootSuffix = "api/system/1.0"
sakuraWebAccelAPIRootSuffix = "api/webaccel/1.0"
)
func (api *baseAPI) getResourceURL() string {
suffix := api.apiRootSuffix
//デフォルト : クラウドAPI
if suffix == "" {
suffix = sakuraCloudAPIRootSuffix
}
url := ""
if api.FuncGetResourceURL != nil {
url = api.FuncGetResourceURL()
}
if suffix == "" {
return url
}
if url == "" {
return suffix
}
return fmt.Sprintf("%s/%s", suffix, url)
}
func (api *baseAPI) getSearchState() *sacloud.Request {
if api.state == nil {
api.reset()
}
return api.state
}
func (api *baseAPI) sortBy(key string, reverse bool) *baseAPI {
return api.setStateValue(func(state *sacloud.Request) {
if state.Sort == nil {
state.Sort = []string{}
}
col := key
if reverse {
col = "-" + col
}
state.Sort = append(state.Sort, col)
})
}
func (api *baseAPI) reset() *baseAPI {
if api.FuncBaseSearchCondition == nil {
api.state = &sacloud.Request{}
} else {
api.state = api.FuncBaseSearchCondition()
}
return api
}
func (api *baseAPI) setStateValue(setFunc func(*sacloud.Request)) *baseAPI {
state := api.getSearchState()
setFunc(state)
return api
}
func (api *baseAPI) offset(offset int) *baseAPI {
return api.setStateValue(func(state *sacloud.Request) {
state.From = offset
})
}
func (api *baseAPI) limit(limit int) *baseAPI {
return api.setStateValue(func(state *sacloud.Request) {
state.Count = limit
})
}
func (api *baseAPI) include(key string) *baseAPI {
return api.setStateValue(func(state *sacloud.Request) {
if state.Include == nil {
state.Include = []string{}
}
state.Include = append(state.Include, key)
})
}
func (api *baseAPI) exclude(key string) *baseAPI {
return api.setStateValue(func(state *sacloud.Request) {
if state.Exclude == nil {
state.Exclude = []string{}
}
state.Exclude = append(state.Exclude, key)
})
}
func (api *baseAPI) filterBy(key string, value interface{}, multiple bool) *baseAPI {
return api.setStateValue(func(state *sacloud.Request) {
//HACK さくらのクラウド側でqueryStringでの+エスケープに対応していないため、
// %20にエスケープされるurl.Pathを利用する。
// http://qiita.com/shibukawa/items/c0730092371c0e243f62
if strValue, ok := value.(string); ok {
u := &url.URL{Path: strValue}
value = u.String()
}
if state.Filter == nil {
state.Filter = map[string]interface{}{}
}
if multiple {
if state.Filter[key] == nil {
state.Filter[key] = []interface{}{}
}
state.Filter[key] = append(state.Filter[key].([]interface{}), value)
} else {
// どちらもstring型の場合はスペース区切りで繋げる
if f, ok := state.Filter[key]; ok {
if s, ok := f.(string); ok && s != "" {
if v, ok := value.(string); ok {
state.Filter[key] = fmt.Sprintf("%s %s", s, v)
return
}
}
}
state.Filter[key] = value
}
})
}
func (api *baseAPI) withNameLike(name string) *baseAPI {
return api.filterBy("Name", name, false)
}
func (api *baseAPI) withTag(tag string) *baseAPI {
return api.filterBy("Tags.Name", tag, false)
}
func (api *baseAPI) withTags(tags []string) *baseAPI {
return api.filterBy("Tags.Name", tags, false)
}
func (api *baseAPI) sortByName(reverse bool) *baseAPI {
return api.sortBy("Name", reverse)
}
func (api *baseAPI) Find() (*sacloud.SearchResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res sacloud.SearchResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *baseAPI) request(method string, uri string, body interface{}, res interface{}) error {
data, err := api.client.newRequest(method, uri, body)
if err != nil {
return err
}
if res != nil {
if err := json.Unmarshal(data, &res); err != nil {
return err
}
}
return nil
}
func (api *baseAPI) create(body interface{}, res interface{}) error {
var (
method = "POST"
uri = api.getResourceURL()
)
return api.request(method, uri, body, res)
}
func (api *baseAPI) read(id int64, body interface{}, res interface{}) error {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d", api.getResourceURL(), id)
)
return api.request(method, uri, body, res)
}
func (api *baseAPI) update(id int64, body interface{}, res interface{}) error {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d", api.getResourceURL(), id)
)
return api.request(method, uri, body, res)
}
func (api *baseAPI) delete(id int64, body interface{}, res interface{}) error {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d", api.getResourceURL(), id)
)
return api.request(method, uri, body, res)
}
func (api *baseAPI) modify(method string, uri string, body interface{}) (bool, error) {
res := &sacloud.ResultFlagValue{}
err := api.request(method, uri, body, res)
if err != nil {
return false, err
}
return res.IsOk, nil
}
func (api *baseAPI) action(method string, uri string, body interface{}, res interface{}) (bool, error) {
err := api.request(method, uri, body, res)
if err != nil {
return false, err
}
return true, nil
}
func (api *baseAPI) monitor(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/monitor", api.getResourceURL(), id)
)
res := &sacloud.ResourceMonitorResponse{}
err := api.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Data, nil
}
func (api *baseAPI) applianceMonitorBy(id int64, target string, nicIndex int, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/%s/%d/monitor", api.getResourceURL(), id, target, nicIndex)
)
if nicIndex == 0 {
uri = fmt.Sprintf("%s/%d/%s/monitor", api.getResourceURL(), id, target)
}
res := &sacloud.ResourceMonitorResponse{}
err := api.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Data, nil
}
func (api *baseAPI) NewResourceMonitorRequest() *sacloud.ResourceMonitorRequest {
return &sacloud.ResourceMonitorRequest{}
}

185
vendor/github.com/sacloud/libsacloud/api/bill.go generated vendored Normal file
View file

@ -0,0 +1,185 @@
package api
import (
"encoding/csv"
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"io"
"strings"
"time"
)
// BillAPI 請求情報API
type BillAPI struct {
*baseAPI
}
// NewBillAPI 請求情報API作成
func NewBillAPI(client *Client) *BillAPI {
return &BillAPI{
&baseAPI{
client: client,
apiRootSuffix: sakuraBillingAPIRootSuffix,
FuncGetResourceURL: func() string {
return "bill"
},
},
}
}
// BillResponse 請求情報レスポンス
type BillResponse struct {
*sacloud.ResultFlagValue
// Count 件数
Count int `json:",omitempty"`
// ResponsedAt 応答日時
ResponsedAt *time.Time `json:",omitempty"`
// Bills 請求情報 リスト
Bills []*sacloud.Bill
}
// BillDetailResponse 請求明細レスポンス
type BillDetailResponse struct {
*sacloud.ResultFlagValue
// Count 件数
Count int `json:",omitempty"`
// ResponsedAt 応答日時
ResponsedAt *time.Time `json:",omitempty"`
// BillDetails 請求明細 リスト
BillDetails []*sacloud.BillDetail
}
// BillDetailCSVResponse 請求明細CSVレスポンス
type BillDetailCSVResponse struct {
*sacloud.ResultFlagValue
// Count 件数
Count int `json:",omitempty"`
// ResponsedAt 応答日時
ResponsedAt *time.Time `json:",omitempty"`
// Filename ファイル名
Filename string `json:",omitempty"`
// RawBody ボディ(未加工)
RawBody string `json:"Body,omitempty"`
// HeaderRow ヘッダ行
HeaderRow []string
// BodyRows ボディ(各行/各列での配列)
BodyRows [][]string
}
func (res *BillDetailCSVResponse) buildCSVBody() {
if res == nil || res.RawBody == "" {
return
}
//CSV分割(先頭行/それ以降)、
reader := csv.NewReader(strings.NewReader(res.RawBody))
reader.LazyQuotes = true
isFirst := true
res.BodyRows = [][]string{}
for {
record, err := reader.Read()
if err == io.EOF {
break
} else if err != nil {
panic(err)
}
if isFirst {
res.HeaderRow = record
isFirst = false
} else {
res.BodyRows = append(res.BodyRows, record)
}
}
}
// ByContract アカウントIDごとの請求取得
func (api *BillAPI) ByContract(accountID int64) (*BillResponse, error) {
uri := fmt.Sprintf("%s/by-contract/%d", api.getResourceURL(), accountID)
return api.getContract(uri)
}
// ByContractYear 年指定での請求取得
func (api *BillAPI) ByContractYear(accountID int64, year int) (*BillResponse, error) {
uri := fmt.Sprintf("%s/by-contract/%d/%d", api.getResourceURL(), accountID, year)
return api.getContract(uri)
}
// ByContractYearMonth 年月指定での請求指定
func (api *BillAPI) ByContractYearMonth(accountID int64, year int, month int) (*BillResponse, error) {
uri := fmt.Sprintf("%s/by-contract/%d/%d/%d", api.getResourceURL(), accountID, year, month)
return api.getContract(uri)
}
// Read 読み取り
func (api *BillAPI) Read(billNo int64) (*BillResponse, error) {
uri := fmt.Sprintf("%s/id/%d/", api.getResourceURL(), billNo)
return api.getContract(uri)
}
func (api *BillAPI) getContract(uri string) (*BillResponse, error) {
data, err := api.client.newRequest("GET", uri, nil)
if err != nil {
return nil, err
}
var res BillResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
// GetDetail 請求明細取得
func (api *BillAPI) GetDetail(memberCD string, billNo int64) (*BillDetailResponse, error) {
oldFunc := api.FuncGetResourceURL
defer func() { api.FuncGetResourceURL = oldFunc }()
api.FuncGetResourceURL = func() string {
return "billdetail"
}
uri := fmt.Sprintf("%s/%s/%d", api.getResourceURL(), memberCD, billNo)
data, err := api.client.newRequest("GET", uri, nil)
if err != nil {
return nil, err
}
var res BillDetailResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
// GetDetailCSV 請求明細CSV取得
func (api *BillAPI) GetDetailCSV(memberCD string, billNo int64) (*BillDetailCSVResponse, error) {
oldFunc := api.FuncGetResourceURL
defer func() { api.FuncGetResourceURL = oldFunc }()
api.FuncGetResourceURL = func() string {
return "billdetail"
}
uri := fmt.Sprintf("%s/%s/%d/csv", api.getResourceURL(), memberCD, billNo)
data, err := api.client.newRequest("GET", uri, nil)
if err != nil {
return nil, err
}
var res BillDetailCSVResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
// build HeaderRow and BodyRows from RawBody
res.buildCSVBody()
return &res, nil
}

18
vendor/github.com/sacloud/libsacloud/api/bridge.go generated vendored Normal file
View file

@ -0,0 +1,18 @@
package api
// BridgeAPI ブリッジAPI
type BridgeAPI struct {
*baseAPI
}
// NewBridgeAPI ブリッジAPI作成
func NewBridgeAPI(client *Client) *BridgeAPI {
return &BridgeAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "bridge"
},
},
}
}

243
vendor/github.com/sacloud/libsacloud/api/bridge_gen.go generated vendored Normal file
View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [BridgeAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件リセット
func (api *BridgeAPI) Reset() *BridgeAPI {
api.reset()
return api
}
// Offset オフセット
func (api *BridgeAPI) Offset(offset int) *BridgeAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *BridgeAPI) Limit(limit int) *BridgeAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *BridgeAPI) Include(key string) *BridgeAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *BridgeAPI) Exclude(key string) *BridgeAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *BridgeAPI) FilterBy(key string, value interface{}) *BridgeAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *BridgeAPI) FilterMultiBy(key string, value interface{}) *BridgeAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *BridgeAPI) WithNameLike(name string) *BridgeAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *BridgeAPI) WithTag(tag string) *BridgeAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *BridgeAPI) WithTags(tags []string) *BridgeAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *BridgeAPI) WithSizeGib(size int) *BridgeAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *BridgeAPI) WithSharedScope() *BridgeAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *BridgeAPI) WithUserScope() *BridgeAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *BridgeAPI) SortBy(key string, reverse bool) *BridgeAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *BridgeAPI) SortByName(reverse bool) *BridgeAPI {
api.sortByName(reverse)
return api
}
// func (api *BridgeAPI) SortBySize(reverse bool) *BridgeAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件リセット
func (api *BridgeAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *BridgeAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *BridgeAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *BridgeAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *BridgeAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *BridgeAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *BridgeAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *BridgeAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *BridgeAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *BridgeAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *BridgeAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *BridgeAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *BridgeAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *BridgeAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *BridgeAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *BridgeAPI) SortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *BridgeAPI) New() *sacloud.Bridge {
return &sacloud.Bridge{}
}
// Create 新規作成
func (api *BridgeAPI) Create(value *sacloud.Bridge) (*sacloud.Bridge, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *BridgeAPI) Read(id int64) (*sacloud.Bridge, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *BridgeAPI) Update(id int64, value *sacloud.Bridge) (*sacloud.Bridge, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *BridgeAPI) Delete(id int64) (*sacloud.Bridge, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *BridgeAPI) setStateValue(setFunc func(*sacloud.Request)) *BridgeAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *BridgeAPI) request(f func(*sacloud.Response) error) (*sacloud.Bridge, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Bridge, nil
}
func (api *BridgeAPI) createRequest(value *sacloud.Bridge) *sacloud.Request {
req := &sacloud.Request{}
req.Bridge = value
return req
}

80
vendor/github.com/sacloud/libsacloud/api/cdrom.go generated vendored Normal file
View file

@ -0,0 +1,80 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
// CDROMAPI ISOイメージAPI
type CDROMAPI struct {
*baseAPI
}
// NewCDROMAPI ISOイメージAPI新規作成
func NewCDROMAPI(client *Client) *CDROMAPI {
return &CDROMAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "cdrom"
},
},
}
}
// Create 新規作成
func (api *CDROMAPI) Create(value *sacloud.CDROM) (*sacloud.CDROM, *sacloud.FTPServer, error) {
f := func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
}
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, nil, err
}
return res.CDROM, res.FTPServer, nil
}
// OpenFTP FTP接続開始
func (api *CDROMAPI) OpenFTP(id int64, reset bool) (*sacloud.FTPServer, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/ftp", api.getResourceURL(), id)
body = map[string]bool{"ChangePassword": reset}
res = &sacloud.Response{}
)
result, err := api.action(method, uri, body, res)
if !result || err != nil {
return nil, err
}
return res.FTPServer, nil
}
// CloseFTP FTP接続終了
func (api *CDROMAPI) CloseFTP(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/ftp", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// SleepWhileCopying コピー終了まで待機
func (api *CDROMAPI) SleepWhileCopying(id int64, timeout time.Duration) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *CDROMAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, 0)
return poll(handler, timeout)
}

250
vendor/github.com/sacloud/libsacloud/api/cdrom_gen.go generated vendored Normal file
View file

@ -0,0 +1,250 @@
package api
/************************************************
generated by IDE. for [CDROMAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件リセット
func (api *CDROMAPI) Reset() *CDROMAPI {
api.reset()
return api
}
// Offset オフセット
func (api *CDROMAPI) Offset(offset int) *CDROMAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *CDROMAPI) Limit(limit int) *CDROMAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *CDROMAPI) Include(key string) *CDROMAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *CDROMAPI) Exclude(key string) *CDROMAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *CDROMAPI) FilterBy(key string, value interface{}) *CDROMAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *CDROMAPI) FilterMultiBy(key string, value interface{}) *CDROMAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *CDROMAPI) WithNameLike(name string) *CDROMAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *CDROMAPI) WithTag(tag string) *CDROMAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *CDROMAPI) WithTags(tags []string) *CDROMAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// WithSizeGib サイズ条件
func (api *CDROMAPI) WithSizeGib(size int) *CDROMAPI {
api.FilterBy("SizeMB", size*1024)
return api
}
// WithSharedScope 公開スコープ条件
func (api *CDROMAPI) WithSharedScope() *CDROMAPI {
api.FilterBy("Scope", "shared")
return api
}
// WithUserScope ユーザースコープ条件
func (api *CDROMAPI) WithUserScope() *CDROMAPI {
api.FilterBy("Scope", "user")
return api
}
// SortBy 指定キーでのソート
func (api *CDROMAPI) SortBy(key string, reverse bool) *CDROMAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *CDROMAPI) SortByName(reverse bool) *CDROMAPI {
api.sortByName(reverse)
return api
}
// SortBySize サイズでのソート
func (api *CDROMAPI) SortBySize(reverse bool) *CDROMAPI {
api.sortBy("SizeMB", reverse)
return api
}
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件リセット
func (api *CDROMAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *CDROMAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *CDROMAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *CDROMAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *CDROMAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *CDROMAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *CDROMAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *CDROMAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *CDROMAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *CDROMAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// SetSizeGib サイズ条件
func (api *CDROMAPI) SetSizeGib(size int) {
api.FilterBy("SizeMB", size*1024)
}
// SetSharedScope 公開スコープ条件
func (api *CDROMAPI) SetSharedScope() {
api.FilterBy("Scope", "shared")
}
// SetUserScope ユーザースコープ条件
func (api *CDROMAPI) SetUserScope() {
api.FilterBy("Scope", "user")
}
// SetSortBy 指定キーでのソート
func (api *CDROMAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *CDROMAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// SetSortBySize サイズでのソート
func (api *CDROMAPI) SetSortBySize(reverse bool) {
api.sortBy("SizeMB", reverse)
}
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメータ作成
func (api *CDROMAPI) New() *sacloud.CDROM {
return &sacloud.CDROM{}
}
//func (api *CDROMAPI) Create(value *sacloud.CDROM) (*sacloud.CDROM, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
//}
// Read 読み取り
func (api *CDROMAPI) Read(id int64) (*sacloud.CDROM, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *CDROMAPI) Update(id int64, value *sacloud.CDROM) (*sacloud.CDROM, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *CDROMAPI) Delete(id int64) (*sacloud.CDROM, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *CDROMAPI) setStateValue(setFunc func(*sacloud.Request)) *CDROMAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *CDROMAPI) request(f func(*sacloud.Response) error) (*sacloud.CDROM, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.CDROM, nil
}
func (api *CDROMAPI) createRequest(value *sacloud.CDROM) *sacloud.Request {
req := &sacloud.Request{}
req.CDROM = value
return req
}

608
vendor/github.com/sacloud/libsacloud/api/client.go generated vendored Normal file
View file

@ -0,0 +1,608 @@
package api
import (
"bytes"
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud"
"github.com/sacloud/libsacloud/sacloud"
"io"
"io/ioutil"
"log"
"net/http"
"strings"
"time"
)
var (
// SakuraCloudAPIRoot APIリクエスト送信先ルートURL(末尾にスラッシュを含まない)
SakuraCloudAPIRoot = "https://secure.sakura.ad.jp/cloud/zone"
)
// Client APIクライアント
type Client struct {
// AccessToken アクセストークン
AccessToken string
// AccessTokenSecret アクセストークンシークレット
AccessTokenSecret string
// Zone 対象ゾーン
Zone string
*API
// TraceMode トレースモード
TraceMode bool
// DefaultTimeoutDuration デフォルトタイムアウト間隔
DefaultTimeoutDuration time.Duration
// ユーザーエージェント
UserAgent string
// Accept-Language
AcceptLanguage string
// リクエストパラメーター トレーサー
RequestTracer io.Writer
// レスポンス トレーサー
ResponseTracer io.Writer
// 503エラー時のリトライ回数
RetryMax int
// 503エラー時のリトライ待ち時間
RetryInterval time.Duration
}
// NewClient APIクライアント作成
func NewClient(token, tokenSecret, zone string) *Client {
c := &Client{
AccessToken: token,
AccessTokenSecret: tokenSecret,
Zone: zone,
TraceMode: false,
DefaultTimeoutDuration: 20 * time.Minute,
UserAgent: fmt.Sprintf("libsacloud/%s", libsacloud.Version),
AcceptLanguage: "",
RetryMax: 0,
RetryInterval: 5 * time.Second,
}
c.API = newAPI(c)
return c
}
// Clone APIクライアント クローン作成
func (c *Client) Clone() *Client {
n := &Client{
AccessToken: c.AccessToken,
AccessTokenSecret: c.AccessTokenSecret,
Zone: c.Zone,
TraceMode: c.TraceMode,
DefaultTimeoutDuration: c.DefaultTimeoutDuration,
UserAgent: c.UserAgent,
AcceptLanguage: c.AcceptLanguage,
RetryMax: c.RetryMax,
RetryInterval: c.RetryInterval,
}
n.API = newAPI(n)
return n
}
func (c *Client) getEndpoint() string {
return fmt.Sprintf("%s/%s", SakuraCloudAPIRoot, c.Zone)
}
func (c *Client) isOkStatus(code int) bool {
codes := map[int]bool{
200: true,
201: true,
202: true,
204: true,
305: false,
400: false,
401: false,
403: false,
404: false,
405: false,
406: false,
408: false,
409: false,
411: false,
413: false,
415: false,
500: false,
503: false,
}
return codes[code]
}
func (c *Client) newRequest(method, uri string, body interface{}) ([]byte, error) {
var (
client = &retryableHTTPClient{
retryMax: c.RetryMax,
retryInterval: c.RetryInterval,
}
err error
req *request
)
var url = uri
if !strings.HasPrefix(url, "https://") {
url = fmt.Sprintf("%s/%s", c.getEndpoint(), uri)
}
if body != nil {
var bodyJSON []byte
bodyJSON, err = json.Marshal(body)
if err != nil {
return nil, err
}
if method == "GET" {
url = fmt.Sprintf("%s?%s", url, bytes.NewBuffer(bodyJSON))
req, err = newRequest(method, url, nil)
} else {
req, err = newRequest(method, url, bytes.NewReader(bodyJSON))
}
b, _ := json.MarshalIndent(body, "", "\t")
if c.TraceMode {
log.Printf("[libsacloud:Client#request] method : %#v , url : %s , \nbody : %s", method, url, b)
}
if c.RequestTracer != nil {
c.RequestTracer.Write(b)
}
} else {
req, err = newRequest(method, url, nil)
if c.TraceMode {
log.Printf("[libsacloud:Client#request] method : %#v , url : %s ", method, url)
}
}
if err != nil {
return nil, fmt.Errorf("Error with request: %v - %q", url, err)
}
req.SetBasicAuth(c.AccessToken, c.AccessTokenSecret)
req.Header.Add("X-Sakura-Bigint-As-Int", "1") //Use BigInt on resource ids.
//if c.TraceMode {
// req.Header.Add("X-Sakura-API-Beautify", "1") // format response-JSON
//}
req.Header.Add("User-Agent", c.UserAgent)
if c.AcceptLanguage != "" {
req.Header.Add("Accept-Language", c.AcceptLanguage)
}
req.Method = method
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
v := &map[string]interface{}{}
json.Unmarshal(data, v)
b, _ := json.MarshalIndent(v, "", "\t")
if c.ResponseTracer != nil {
c.ResponseTracer.Write(b)
}
if c.TraceMode {
log.Printf("[libsacloud:Client#response] : %s", b)
}
if !c.isOkStatus(resp.StatusCode) {
errResponse := &sacloud.ResultErrorValue{}
err := json.Unmarshal(data, errResponse)
if err != nil {
return nil, fmt.Errorf("Error in response: %s", string(data))
}
return nil, NewError(resp.StatusCode, errResponse)
}
if err != nil {
return nil, err
}
return data, nil
}
type lenReader interface {
Len() int
}
type request struct {
// body is a seekable reader over the request body payload. This is
// used to rewind the request data in between retries.
body io.ReadSeeker
// Embed an HTTP request directly. This makes a *Request act exactly
// like an *http.Request so that all meta methods are supported.
*http.Request
}
func newRequest(method, url string, body io.ReadSeeker) (*request, error) {
var rcBody io.ReadCloser
if body != nil {
rcBody = ioutil.NopCloser(body)
}
httpReq, err := http.NewRequest(method, url, rcBody)
if err != nil {
return nil, err
}
if lr, ok := body.(lenReader); ok {
httpReq.ContentLength = int64(lr.Len())
}
return &request{body, httpReq}, nil
}
type retryableHTTPClient struct {
http.Client
retryInterval time.Duration
retryMax int
}
func (c *retryableHTTPClient) Do(req *request) (*http.Response, error) {
for i := 0; ; i++ {
if req.body != nil {
if _, err := req.body.Seek(0, 0); err != nil {
return nil, fmt.Errorf("failed to seek body: %v", err)
}
}
res, err := c.Client.Do(req.Request)
if res != nil && res.StatusCode != 503 {
return res, err
}
if res != nil && res.Body != nil {
res.Body.Close()
}
if err != nil {
return res, err
}
remain := c.retryMax - i
if remain == 0 {
break
}
time.Sleep(c.retryInterval)
}
return nil, fmt.Errorf("%s %s giving up after %d attempts",
req.Method, req.URL, c.retryMax+1)
}
// API libsacloudでサポートしているAPI群
type API struct {
AuthStatus *AuthStatusAPI // 認証状態API
AutoBackup *AutoBackupAPI // 自動バックアップAPI
Archive *ArchiveAPI // アーカイブAPI
Bill *BillAPI // 請求情報API
Bridge *BridgeAPI // ブリッジAPi
CDROM *CDROMAPI // ISOイメージAPI
Database *DatabaseAPI // データベースAPI
Disk *DiskAPI // ディスクAPI
DNS *DNSAPI // DNS API
Facility *FacilityAPI // ファシリティAPI
GSLB *GSLBAPI // GSLB API
Icon *IconAPI // アイコンAPI
Interface *InterfaceAPI // インターフェースAPI
Internet *InternetAPI // ルーターAPI
IPAddress *IPAddressAPI // IPアドレスAPI
IPv6Addr *IPv6AddrAPI // IPv6アドレスAPI
IPv6Net *IPv6NetAPI // IPv6ネットワークAPI
License *LicenseAPI // ライセンスAPI
LoadBalancer *LoadBalancerAPI // ロードバランサーAPI
MobileGateway *MobileGatewayAPI // モバイルゲートウェイAPI
NewsFeed *NewsFeedAPI // フィード(障害/メンテナンス情報)API
NFS *NFSAPI // NFS API
Note *NoteAPI // スタートアップスクリプトAPI
PacketFilter *PacketFilterAPI // パケットフィルタAPI
PrivateHost *PrivateHostAPI // 専有ホストAPI
Product *ProductAPI // 製品情報API
Server *ServerAPI // サーバーAPI
SIM *SIMAPI // SIM API
SimpleMonitor *SimpleMonitorAPI // シンプル監視API
SSHKey *SSHKeyAPI // 公開鍵API
Subnet *SubnetAPI // IPv4ネットワークAPI
Switch *SwitchAPI // スイッチAPI
VPCRouter *VPCRouterAPI // VPCルーターAPI
WebAccel *WebAccelAPI // ウェブアクセラレータAPI
}
// GetAuthStatusAPI 認証状態API取得
func (api *API) GetAuthStatusAPI() *AuthStatusAPI {
return api.AuthStatus
}
// GetAutoBackupAPI 自動バックアップAPI取得
func (api *API) GetAutoBackupAPI() *AutoBackupAPI {
return api.AutoBackup
}
// GetArchiveAPI アーカイブAPI取得
func (api *API) GetArchiveAPI() *ArchiveAPI {
return api.Archive
}
// GetBillAPI 請求情報API取得
func (api *API) GetBillAPI() *BillAPI {
return api.Bill
}
// GetBridgeAPI ブリッジAPI取得
func (api *API) GetBridgeAPI() *BridgeAPI {
return api.Bridge
}
// GetCDROMAPI ISOイメージAPI取得
func (api *API) GetCDROMAPI() *CDROMAPI {
return api.CDROM
}
// GetDatabaseAPI データベースAPI取得
func (api *API) GetDatabaseAPI() *DatabaseAPI {
return api.Database
}
// GetDiskAPI ディスクAPI取得
func (api *API) GetDiskAPI() *DiskAPI {
return api.Disk
}
// GetDNSAPI DNSAPI取得
func (api *API) GetDNSAPI() *DNSAPI {
return api.DNS
}
// GetRegionAPI リージョンAPI取得
func (api *API) GetRegionAPI() *RegionAPI {
return api.Facility.GetRegionAPI()
}
// GetZoneAPI ゾーンAPI取得
func (api *API) GetZoneAPI() *ZoneAPI {
return api.Facility.GetZoneAPI()
}
// GetGSLBAPI GSLB API取得
func (api *API) GetGSLBAPI() *GSLBAPI {
return api.GSLB
}
// GetIconAPI アイコンAPI取得
func (api *API) GetIconAPI() *IconAPI {
return api.Icon
}
// GetInterfaceAPI インターフェースAPI取得
func (api *API) GetInterfaceAPI() *InterfaceAPI {
return api.Interface
}
// GetInternetAPI ルーターAPI取得
func (api *API) GetInternetAPI() *InternetAPI {
return api.Internet
}
// GetIPAddressAPI IPアドレスAPI取得
func (api *API) GetIPAddressAPI() *IPAddressAPI {
return api.IPAddress
}
// GetIPv6AddrAPI IPv6アドレスAPI取得
func (api *API) GetIPv6AddrAPI() *IPv6AddrAPI {
return api.IPv6Addr
}
// GetIPv6NetAPI IPv6ネットワークAPI取得
func (api *API) GetIPv6NetAPI() *IPv6NetAPI {
return api.IPv6Net
}
// GetLicenseAPI ライセンスAPI取得
func (api *API) GetLicenseAPI() *LicenseAPI {
return api.License
}
// GetLoadBalancerAPI ロードバランサーAPI取得
func (api *API) GetLoadBalancerAPI() *LoadBalancerAPI {
return api.LoadBalancer
}
// GetMobileGatewayAPI モバイルゲートウェイAPI取得
func (api *API) GetMobileGatewayAPI() *MobileGatewayAPI {
return api.MobileGateway
}
// GetNewsFeedAPI フィード(障害/メンテナンス情報)API取得
func (api *API) GetNewsFeedAPI() *NewsFeedAPI {
return api.NewsFeed
}
// GetNFSAPI NFS API取得
func (api *API) GetNFSAPI() *NFSAPI {
return api.NFS
}
// GetNoteAPI スタートアップAPI取得
func (api *API) GetNoteAPI() *NoteAPI {
return api.Note
}
// GetPacketFilterAPI パケットフィルタAPI取得
func (api *API) GetPacketFilterAPI() *PacketFilterAPI {
return api.PacketFilter
}
// GetPrivateHostAPI 専有ホストAPI取得
func (api *API) GetPrivateHostAPI() *PrivateHostAPI {
return api.PrivateHost
}
// GetProductServerAPI サーバープランAPI取得
func (api *API) GetProductServerAPI() *ProductServerAPI {
return api.Product.GetProductServerAPI()
}
// GetProductLicenseAPI ライセンスプランAPI取得
func (api *API) GetProductLicenseAPI() *ProductLicenseAPI {
return api.Product.GetProductLicenseAPI()
}
// GetProductDiskAPI ディスクプランAPI取得
func (api *API) GetProductDiskAPI() *ProductDiskAPI {
return api.Product.GetProductDiskAPI()
}
// GetProductInternetAPI ルータープランAPI取得
func (api *API) GetProductInternetAPI() *ProductInternetAPI {
return api.Product.GetProductInternetAPI()
}
// GetPublicPriceAPI 価格情報API取得
func (api *API) GetPublicPriceAPI() *PublicPriceAPI {
return api.Product.GetPublicPriceAPI()
}
// GetServerAPI サーバーAPI取得
func (api *API) GetServerAPI() *ServerAPI {
return api.Server
}
// GetSIMAPI SIM API取得
func (api *API) GetSIMAPI() *SIMAPI {
return api.SIM
}
// GetSimpleMonitorAPI シンプル監視API取得
func (api *API) GetSimpleMonitorAPI() *SimpleMonitorAPI {
return api.SimpleMonitor
}
// GetSSHKeyAPI SSH公開鍵API取得
func (api *API) GetSSHKeyAPI() *SSHKeyAPI {
return api.SSHKey
}
// GetSubnetAPI サブネットAPI取得
func (api *API) GetSubnetAPI() *SubnetAPI {
return api.Subnet
}
// GetSwitchAPI スイッチAPI取得
func (api *API) GetSwitchAPI() *SwitchAPI {
return api.Switch
}
// GetVPCRouterAPI VPCルーターAPI取得
func (api *API) GetVPCRouterAPI() *VPCRouterAPI {
return api.VPCRouter
}
// GetWebAccelAPI ウェブアクセラレータAPI取得
func (api *API) GetWebAccelAPI() *WebAccelAPI {
return api.WebAccel
}
// ProductAPI 製品情報関連API群
type ProductAPI struct {
Server *ProductServerAPI // サーバープランAPI
License *ProductLicenseAPI // ライセンスプランAPI
Disk *ProductDiskAPI // ディスクプランAPI
Internet *ProductInternetAPI // ルータープランAPI
PrivateHost *ProductPrivateHostAPI // 専有ホストプランAPI
Price *PublicPriceAPI // 価格情報API
}
// GetProductServerAPI サーバープランAPI取得
func (api *ProductAPI) GetProductServerAPI() *ProductServerAPI {
return api.Server
}
// GetProductLicenseAPI ライセンスプランAPI取得
func (api *ProductAPI) GetProductLicenseAPI() *ProductLicenseAPI {
return api.License
}
// GetProductDiskAPI ディスクプランAPI取得
func (api *ProductAPI) GetProductDiskAPI() *ProductDiskAPI {
return api.Disk
}
// GetProductInternetAPI ルータープランAPI取得
func (api *ProductAPI) GetProductInternetAPI() *ProductInternetAPI {
return api.Internet
}
// GetProductPrivateHostAPI 専有ホストプラン取得API
func (api *ProductAPI) GetProductPrivateHostAPI() *ProductPrivateHostAPI {
return api.PrivateHost
}
// GetPublicPriceAPI 価格情報API取得
func (api *ProductAPI) GetPublicPriceAPI() *PublicPriceAPI {
return api.Price
}
// FacilityAPI ファシリティ関連API群
type FacilityAPI struct {
Region *RegionAPI // リージョンAPI
Zone *ZoneAPI // ゾーンAPI
}
// GetRegionAPI リージョンAPI取得
func (api *FacilityAPI) GetRegionAPI() *RegionAPI {
return api.Region
}
// GetZoneAPI ゾーンAPI取得
func (api *FacilityAPI) GetZoneAPI() *ZoneAPI {
return api.Zone
}
func newAPI(client *Client) *API {
return &API{
AuthStatus: NewAuthStatusAPI(client),
AutoBackup: NewAutoBackupAPI(client),
Archive: NewArchiveAPI(client),
Bill: NewBillAPI(client),
Bridge: NewBridgeAPI(client),
CDROM: NewCDROMAPI(client),
Database: NewDatabaseAPI(client),
Disk: NewDiskAPI(client),
DNS: NewDNSAPI(client),
Facility: &FacilityAPI{
Region: NewRegionAPI(client),
Zone: NewZoneAPI(client),
},
GSLB: NewGSLBAPI(client),
Icon: NewIconAPI(client),
Interface: NewInterfaceAPI(client),
Internet: NewInternetAPI(client),
IPAddress: NewIPAddressAPI(client),
IPv6Addr: NewIPv6AddrAPI(client),
IPv6Net: NewIPv6NetAPI(client),
License: NewLicenseAPI(client),
LoadBalancer: NewLoadBalancerAPI(client),
MobileGateway: NewMobileGatewayAPI(client),
NewsFeed: NewNewsFeedAPI(client),
NFS: NewNFSAPI(client),
Note: NewNoteAPI(client),
PacketFilter: NewPacketFilterAPI(client),
PrivateHost: NewPrivateHostAPI(client),
Product: &ProductAPI{
Server: NewProductServerAPI(client),
License: NewProductLicenseAPI(client),
Disk: NewProductDiskAPI(client),
Internet: NewProductInternetAPI(client),
PrivateHost: NewProductPrivateHostAPI(client),
Price: NewPublicPriceAPI(client),
},
Server: NewServerAPI(client),
SIM: NewSIMAPI(client),
SimpleMonitor: NewSimpleMonitorAPI(client),
SSHKey: NewSSHKeyAPI(client),
Subnet: NewSubnetAPI(client),
Switch: NewSwitchAPI(client),
VPCRouter: NewVPCRouterAPI(client),
WebAccel: NewWebAccelAPI(client),
}
}

429
vendor/github.com/sacloud/libsacloud/api/database.go generated vendored Normal file
View file

@ -0,0 +1,429 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
//HACK: さくらのAPI側仕様: Applianceの内容によってJSONフォーマットが異なるため
// ロードバランサ/VPCルータそれぞれでリクエスト/レスポンスデータ型を定義する。
// SearchDatabaseResponse データベース検索レスポンス
type SearchDatabaseResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// Databases データベースリスト
Databases []sacloud.Database `json:"Appliances,omitempty"`
}
type databaseRequest struct {
Database *sacloud.Database `json:"Appliance,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type databaseResponse struct {
*sacloud.ResultFlagValue
*sacloud.Database `json:"Appliance,omitempty"`
// Success
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}で受ける
}
type databaseStatusResponse struct {
*sacloud.ResultFlagValue
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}
Appliance *struct {
SettingsResponse *sacloud.DatabaseStatus
}
}
type databaseBackupResponse struct {
Log string `json:",omitempty"`
IsOk bool `json:"is_ok,omitempty"`
}
// DatabaseAPI データベースAPI
type DatabaseAPI struct {
*baseAPI
}
// NewDatabaseAPI データベースAPI作成
func NewDatabaseAPI(client *Client) *DatabaseAPI {
return &DatabaseAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "appliance"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Class", "database")
return res
},
},
}
}
// Find 検索
func (api *DatabaseAPI) Find() (*SearchDatabaseResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchDatabaseResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *DatabaseAPI) request(f func(*databaseResponse) error) (*sacloud.Database, error) {
res := &databaseResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.Database, nil
}
func (api *DatabaseAPI) createRequest(value *sacloud.Database) *databaseResponse {
return &databaseResponse{Database: value}
}
// New 新規作成用パラメーター作成
func (api *DatabaseAPI) New(values *sacloud.CreateDatabaseValue) *sacloud.Database {
return sacloud.CreateNewDatabase(values)
}
// Create 新規作成
func (api *DatabaseAPI) Create(value *sacloud.Database) (*sacloud.Database, error) {
return api.request(func(res *databaseResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *DatabaseAPI) Read(id int64) (*sacloud.Database, error) {
return api.request(func(res *databaseResponse) error {
return api.read(id, nil, res)
})
}
// Status DBの設定/起動状態の取得
func (api *DatabaseAPI) Status(id int64) (*sacloud.DatabaseStatus, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/status", api.getResourceURL(), id)
)
res := &databaseStatusResponse{}
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res.Appliance.SettingsResponse, nil
}
// Backup バックアップ取得
func (api *DatabaseAPI) Backup(id int64) (string, error) {
var (
method = "POST"
uri = fmt.Sprintf("%s/%d/action/history", api.getResourceURL(), id)
)
body := map[string]interface{}{
"Appliance": map[string]interface{}{
"Settings": map[string]interface{}{
"DBConf": map[string]interface{}{
"backup": map[string]string{
"availability": "discontinued",
},
},
},
},
}
res := &databaseBackupResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return "", err
}
return res.Log, nil
}
// DownloadLog ログ取得
func (api *DatabaseAPI) DownloadLog(id int64, logID string) (string, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/download/log/%s", api.getResourceURL(), id, logID)
)
res := &databaseBackupResponse{}
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return "", err
}
return res.Log, nil
}
// Restore バックアップからの復元
func (api *DatabaseAPI) Restore(id int64, backupID string) (string, error) {
var (
method = "POST"
uri = fmt.Sprintf("%s/%d/action/history/%s", api.getResourceURL(), id, backupID)
)
body := map[string]interface{}{
"Appliance": map[string]interface{}{},
}
res := &databaseBackupResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return "", err
}
return res.Log, nil
}
// DeleteBackup バックアップの削除
func (api *DatabaseAPI) DeleteBackup(id int64, backupID string) (string, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/action/history/%s", api.getResourceURL(), id, backupID)
)
body := map[string]interface{}{
"Appliance": map[string]interface{}{},
}
res := &databaseBackupResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return "", err
}
return res.Log, nil
}
// HistoryLock バックアップ削除ロック
func (api *DatabaseAPI) HistoryLock(id int64, backupID string) (string, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/action/history-lock/%s", api.getResourceURL(), id, backupID)
)
body := map[string]interface{}{
"Appliance": map[string]interface{}{},
}
res := &databaseBackupResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return "", err
}
return res.Log, nil
}
// HistoryUnlock バックアップ削除アンロック
func (api *DatabaseAPI) HistoryUnlock(id int64, backupID string) (string, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/action/history-lock/%s", api.getResourceURL(), id, backupID)
)
body := map[string]interface{}{
"Appliance": map[string]interface{}{},
}
res := &databaseBackupResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return "", err
}
return res.Log, nil
}
// Update 更新
func (api *DatabaseAPI) Update(id int64, value *sacloud.Database) (*sacloud.Database, error) {
return api.request(func(res *databaseResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// UpdateSetting 設定更新
func (api *DatabaseAPI) UpdateSetting(id int64, value *sacloud.Database) (*sacloud.Database, error) {
req := &sacloud.Database{
// Settings
Settings: value.Settings,
}
return api.request(func(res *databaseResponse) error {
return api.update(id, api.createRequest(req), res)
})
}
// Delete 削除
func (api *DatabaseAPI) Delete(id int64) (*sacloud.Database, error) {
return api.request(func(res *databaseResponse) error {
return api.delete(id, nil, res)
})
}
// Config 設定変更の反映
func (api *DatabaseAPI) Config(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/config", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// IsUp 起動しているか判定
func (api *DatabaseAPI) IsUp(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsUp(), nil
}
// IsDown ダウンしているか判定
func (api *DatabaseAPI) IsDown(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsDown(), nil
}
// IsDatabaseRunning データベースプロセスが起動しているか判定
func (api *DatabaseAPI) IsDatabaseRunning(id int64) (bool, error) {
db, err := api.Status(id)
if err != nil {
return false, err
}
return db.IsUp(), nil
}
// Boot 起動
func (api *DatabaseAPI) Boot(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Shutdown シャットダウン(graceful)
func (api *DatabaseAPI) Shutdown(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Stop シャットダウン(force)
func (api *DatabaseAPI) Stop(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"Force": true})
}
// RebootForce 再起動
func (api *DatabaseAPI) RebootForce(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// ResetForce リセット
func (api *DatabaseAPI) ResetForce(id int64, recycleProcess bool) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"RecycleProcess": recycleProcess})
}
// SleepUntilUp 起動するまで待機
func (api *DatabaseAPI) SleepUntilUp(id int64, timeout time.Duration) error {
handler := waitingForUpFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepUntilDatabaseRunning 起動するまで待機
func (api *DatabaseAPI) SleepUntilDatabaseRunning(id int64, timeout time.Duration, maxRetry int) error {
handler := waitingForUpFunc(func() (hasUpDown, error) {
return api.Read(id)
}, maxRetry)
return blockingPoll(handler, timeout)
}
// SleepUntilDown ダウンするまで待機
func (api *DatabaseAPI) SleepUntilDown(id int64, timeout time.Duration) error {
handler := waitingForDownFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepWhileCopying コピー終了まで待機
func (api *DatabaseAPI) SleepWhileCopying(id int64, timeout time.Duration, maxRetry int) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *DatabaseAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration, maxRetry int) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return poll(handler, timeout)
}
// MonitorCPU CPUアクティビティーモニター取得
func (api *DatabaseAPI) MonitorCPU(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "cpu", 0, body)
}
// MonitorDatabase データーベース固有項目アクティビティモニター取得
func (api *DatabaseAPI) MonitorDatabase(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "database", 0, body)
}
// MonitorInterface NICアクティビティーモニター取得
func (api *DatabaseAPI) MonitorInterface(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "interface", 0, body)
}
// MonitorSystemDisk システムディスクアクティビティーモニター取得
func (api *DatabaseAPI) MonitorSystemDisk(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "disk", 1, body)
}
// MonitorBackupDisk バックアップディスクアクティビティーモニター取得
func (api *DatabaseAPI) MonitorBackupDisk(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "disk", 2, body)
}

View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [DatabaseAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *DatabaseAPI) Reset() *DatabaseAPI {
api.reset()
return api
}
// Offset オフセット
func (api *DatabaseAPI) Offset(offset int) *DatabaseAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *DatabaseAPI) Limit(limit int) *DatabaseAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *DatabaseAPI) Include(key string) *DatabaseAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *DatabaseAPI) Exclude(key string) *DatabaseAPI {
api.exclude(key)
return api
}
// FilterBy 指定項目でのフィルター
func (api *DatabaseAPI) FilterBy(key string, value interface{}) *DatabaseAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *DatabaseAPI) FilterMultiBy(key string, value interface{}) *DatabaseAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *DatabaseAPI) WithNameLike(name string) *DatabaseAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *DatabaseAPI) WithTag(tag string) *DatabaseAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *DatabaseAPI) WithTags(tags []string) *DatabaseAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *DatabaseAPI) WithSizeGib(size int) *DatabaseAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *DatabaseAPI) WithSharedScope() *DatabaseAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *DatabaseAPI) WithUserScope() *DatabaseAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *DatabaseAPI) SortBy(key string, reverse bool) *DatabaseAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *DatabaseAPI) SortByName(reverse bool) *DatabaseAPI {
api.sortByName(reverse)
return api
}
// func (api *DatabaseAPI) SortBySize(reverse bool) *DatabaseAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support fluent interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *DatabaseAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *DatabaseAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *DatabaseAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *DatabaseAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *DatabaseAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定項目でのフィルター
func (api *DatabaseAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *DatabaseAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *DatabaseAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *DatabaseAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *DatabaseAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *DatabaseAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *DatabaseAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *DatabaseAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *DatabaseAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *DatabaseAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *DatabaseAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *DatabaseAPI) New() *sacloud.Database {
// return &sacloud.Database{}
// }
// func (api *DatabaseAPI) Create(value *sacloud.Database) (*sacloud.Database, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *DatabaseAPI) Read(id string) (*sacloud.Database, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *DatabaseAPI) Update(id string, value *sacloud.Database) (*sacloud.Database, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *DatabaseAPI) Delete(id string) (*sacloud.Database, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *DatabaseAPI) setStateValue(setFunc func(*sacloud.Request)) *DatabaseAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *DatabaseAPI) request(f func(*sacloud.Response) error) (*sacloud.Database, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.Database, nil
//}
//
//func (api *DatabaseAPI) createRequest(value *sacloud.Database) *sacloud.Request {
// req := &sacloud.Request{}
// req.Database = value
// return req
//}

283
vendor/github.com/sacloud/libsacloud/api/disk.go generated vendored Normal file
View file

@ -0,0 +1,283 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
var (
// allowDiskEditTags ディスクの編集可否判定に用いるタグ
allowDiskEditTags = []string{
"os-unix",
"os-linux",
}
// bundleInfoWindowsHostClass ディスクの編集可否判定に用いる、BundleInfoでのWindows判定文字列
bundleInfoWindowsHostClass = "ms_windows"
)
// DiskAPI ディスクAPI
type DiskAPI struct {
*baseAPI
}
// NewDiskAPI ディスクAPI作成
func NewDiskAPI(client *Client) *DiskAPI {
return &DiskAPI{
&baseAPI{
client: client,
// FuncGetResourceURL
FuncGetResourceURL: func() string {
return "disk"
},
},
}
}
// SortByConnectionOrder 接続順でのソート
func (api *DiskAPI) SortByConnectionOrder(reverse bool) *DiskAPI {
api.sortBy("ConnectionOrder", reverse)
return api
}
// WithServerID サーバーID条件
func (api *DiskAPI) WithServerID(id int64) *DiskAPI {
api.FilterBy("Server.ID", id)
return api
}
// Create 新規作成
func (api *DiskAPI) Create(value *sacloud.Disk) (*sacloud.Disk, error) {
//HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないため文字列で受ける
type diskResponse struct {
*sacloud.Response
// Success
Success string `json:",omitempty"`
}
res := &diskResponse{}
err := api.create(api.createRequest(value), res)
if err != nil {
return nil, err
}
return res.Disk, nil
}
// NewCondig ディスクの修正用パラメーター作成
func (api *DiskAPI) NewCondig() *sacloud.DiskEditValue {
return &sacloud.DiskEditValue{}
}
// Config ディスクの修正
func (api *DiskAPI) Config(id int64, disk *sacloud.DiskEditValue) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/config", api.getResourceURL(), id)
)
return api.modify(method, uri, disk)
}
func (api *DiskAPI) install(id int64, body *sacloud.Disk) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/install", api.getResourceURL(), id)
)
//HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないため文字列で受ける
type diskResponse struct {
*sacloud.ResultFlagValue
// Success
Success string `json:",omitempty"`
}
res := &diskResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return false, err
}
return res.IsOk, nil
}
// ReinstallFromBlank ブランクディスクから再インストール
func (api *DiskAPI) ReinstallFromBlank(id int64, sizeMB int) (bool, error) {
var body = &sacloud.Disk{}
body.SetSizeMB(sizeMB)
return api.install(id, body)
}
// ReinstallFromArchive アーカイブからの再インストール
func (api *DiskAPI) ReinstallFromArchive(id int64, archiveID int64, distantFrom ...int64) (bool, error) {
var body = &sacloud.Disk{}
body.SetSourceArchive(archiveID)
if len(distantFrom) > 0 {
body.SetDistantFrom(distantFrom)
}
return api.install(id, body)
}
// ReinstallFromDisk ディスクからの再インストール
func (api *DiskAPI) ReinstallFromDisk(id int64, diskID int64, distantFrom ...int64) (bool, error) {
var body = &sacloud.Disk{}
body.SetSourceDisk(diskID)
if len(distantFrom) > 0 {
body.SetDistantFrom(distantFrom)
}
return api.install(id, body)
}
// ToBlank ディスクを空にする
func (api *DiskAPI) ToBlank(diskID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/to/blank", api.getResourceURL(), diskID)
)
return api.modify(method, uri, nil)
}
// ResizePartition パーティションのリサイズ
func (api *DiskAPI) ResizePartition(diskID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/resize-partition", api.getResourceURL(), diskID)
)
return api.modify(method, uri, nil)
}
// DisconnectFromServer サーバーとの接続解除
func (api *DiskAPI) DisconnectFromServer(diskID int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/to/server", api.getResourceURL(), diskID)
)
return api.modify(method, uri, nil)
}
// ConnectToServer サーバーとの接続
func (api *DiskAPI) ConnectToServer(diskID int64, serverID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/to/server/%d", api.getResourceURL(), diskID, serverID)
)
return api.modify(method, uri, nil)
}
// State ディスクの状態を取得し有効な状態か判定
func (api *DiskAPI) State(diskID int64) (bool, error) {
disk, err := api.Read(diskID)
if err != nil {
return false, err
}
return disk.IsAvailable(), nil
}
// SleepWhileCopying コピー終了まで待機
func (api *DiskAPI) SleepWhileCopying(id int64, timeout time.Duration) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *DiskAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, 0)
return poll(handler, timeout)
}
// Monitor アクティビティーモニター取得
func (api *DiskAPI) Monitor(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.monitor(id, body)
}
// CanEditDisk ディスクの修正が可能か判定
func (api *DiskAPI) CanEditDisk(id int64) (bool, error) {
disk, err := api.Read(id)
if err != nil {
return false, err
}
if disk == nil {
return false, nil
}
// BundleInfoがあれば編集不可
if disk.BundleInfo != nil && disk.BundleInfo.HostClass == bundleInfoWindowsHostClass {
// Windows
return false, nil
}
// SophosUTMであれば編集不可
if disk.HasTag("pkg-sophosutm") || disk.IsSophosUTM() {
return false, nil
}
// ソースアーカイブ/ソースディスクともに持っていない場合
if disk.SourceArchive == nil && disk.SourceDisk == nil {
//ブランクディスクがソース
return false, nil
}
for _, t := range allowDiskEditTags {
if disk.HasTag(t) {
// 対応OSインストール済みディスク
return true, nil
}
}
// ここまできても判定できないならソースに投げる
if disk.SourceDisk != nil && disk.SourceDisk.Availability != "discontinued" {
return api.client.Disk.CanEditDisk(disk.SourceDisk.ID)
}
if disk.SourceArchive != nil && disk.SourceArchive.Availability != "discontinued" {
return api.client.Archive.CanEditDisk(disk.SourceArchive.ID)
}
return false, nil
}
// GetPublicArchiveIDFromAncestors 祖先の中からパブリックアーカイブのIDを検索
func (api *DiskAPI) GetPublicArchiveIDFromAncestors(id int64) (int64, bool) {
emptyID := int64(0)
disk, err := api.Read(id)
if err != nil {
return emptyID, false
}
if disk == nil {
return emptyID, false
}
// BundleInfoがあれば編集不可
if disk.BundleInfo != nil && disk.BundleInfo.HostClass == bundleInfoWindowsHostClass {
// Windows
return emptyID, false
}
// SophosUTMであれば編集不可
if disk.HasTag("pkg-sophosutm") || disk.IsSophosUTM() {
return emptyID, false
}
for _, t := range allowDiskEditTags {
if disk.HasTag(t) {
// 対応OSインストール済みディスク
return disk.ID, true
}
}
// ここまできても判定できないならソースに投げる
if disk.SourceDisk != nil && disk.SourceDisk.Availability != "discontinued" {
return api.client.Disk.GetPublicArchiveIDFromAncestors(disk.SourceDisk.ID)
}
if disk.SourceArchive != nil && disk.SourceArchive.Availability != "discontinued" {
return api.client.Archive.GetPublicArchiveIDFromAncestors(disk.SourceArchive.ID)
}
return emptyID, false
}

228
vendor/github.com/sacloud/libsacloud/api/disk_gen.go generated vendored Normal file
View file

@ -0,0 +1,228 @@
package api
/************************************************
generated by IDE. for [DiskAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *DiskAPI) Reset() *DiskAPI {
api.reset()
return api
}
// Offset オフセット
func (api *DiskAPI) Offset(offset int) *DiskAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *DiskAPI) Limit(limit int) *DiskAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *DiskAPI) Include(key string) *DiskAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *DiskAPI) Exclude(key string) *DiskAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *DiskAPI) FilterBy(key string, value interface{}) *DiskAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *DiskAPI) FilterMultiBy(key string, value interface{}) *DiskAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *DiskAPI) WithNameLike(name string) *DiskAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *DiskAPI) WithTag(tag string) *DiskAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *DiskAPI) WithTags(tags []string) *DiskAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// WithSizeGib サイズ条件
func (api *DiskAPI) WithSizeGib(size int) *DiskAPI {
api.FilterBy("SizeMB", size*1024)
return api
}
// SortBy 指定キーでのソート
func (api *DiskAPI) SortBy(key string, reverse bool) *DiskAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *DiskAPI) SortByName(reverse bool) *DiskAPI {
api.sortByName(reverse)
return api
}
// SortBySize サイズでのソート
func (api *DiskAPI) SortBySize(reverse bool) *DiskAPI {
api.sortBy("SizeMB", reverse)
return api
}
/************************************************
To support fluent interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *DiskAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *DiskAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *DiskAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *DiskAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *DiskAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *DiskAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *DiskAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *DiskAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *DiskAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *DiskAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// SetSizeGib サイズ条件
func (api *DiskAPI) SetSizeGib(size int) {
api.FilterBy("SizeMB", size*1024)
}
// SetSortBy 指定キーでのソート
func (api *DiskAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *DiskAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// SetSortBySize サイズでのソート
func (api *DiskAPI) SetSortBySize(reverse bool) {
api.sortBy("SizeMB", reverse)
}
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *DiskAPI) New() *sacloud.Disk {
return sacloud.CreateNewDisk()
}
//func (api *DiskAPI) Create(value *sacloud.Disk) (*sacloud.Disk, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
//}
// Read 読み取り
func (api *DiskAPI) Read(id int64) (*sacloud.Disk, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *DiskAPI) Update(id int64, value *sacloud.Disk) (*sacloud.Disk, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *DiskAPI) Delete(id int64) (*sacloud.Disk, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *DiskAPI) setStateValue(setFunc func(*sacloud.Request)) *DiskAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *DiskAPI) request(f func(*sacloud.Response) error) (*sacloud.Disk, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Disk, nil
}
func (api *DiskAPI) createRequest(value *sacloud.Disk) *sacloud.Request {
req := &sacloud.Request{}
req.Disk = value
return req
}

206
vendor/github.com/sacloud/libsacloud/api/dns.go generated vendored Normal file
View file

@ -0,0 +1,206 @@
package api
import (
"encoding/json"
"github.com/sacloud/libsacloud/sacloud"
"strings"
)
//HACK: さくらのAPI側仕様: CommonServiceItemsの内容によってJSONフォーマットが異なるため
// DNS/GSLB/シンプル監視それぞれでリクエスト/レスポンスデータ型を定義する。
// SearchDNSResponse DNS検索レスポンス
type SearchDNSResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// CommonServiceDNSItems DNSリスト
CommonServiceDNSItems []sacloud.DNS `json:"CommonServiceItems,omitempty"`
}
type dnsRequest struct {
CommonServiceDNSItem *sacloud.DNS `json:"CommonServiceItem,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type dnsResponse struct {
*sacloud.ResultFlagValue
*sacloud.DNS `json:"CommonServiceItem,omitempty"`
}
// DNSAPI DNS API
type DNSAPI struct {
*baseAPI
}
// NewDNSAPI DNS API作成
func NewDNSAPI(client *Client) *DNSAPI {
return &DNSAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "commonserviceitem"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Provider.Class", "dns")
return res
},
},
}
}
// Find 検索
func (api *DNSAPI) Find() (*SearchDNSResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchDNSResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *DNSAPI) request(f func(*dnsResponse) error) (*sacloud.DNS, error) {
res := &dnsResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.DNS, nil
}
func (api *DNSAPI) createRequest(value *sacloud.DNS) *dnsRequest {
req := &dnsRequest{}
req.CommonServiceDNSItem = value
return req
}
// Create 新規作成
func (api *DNSAPI) Create(value *sacloud.DNS) (*sacloud.DNS, error) {
return api.request(func(res *dnsResponse) error {
return api.create(api.createRequest(value), res)
})
}
// New 新規作成用パラメーター作成
func (api *DNSAPI) New(zoneName string) *sacloud.DNS {
return sacloud.CreateNewDNS(zoneName)
}
// Read 読み取り
func (api *DNSAPI) Read(id int64) (*sacloud.DNS, error) {
return api.request(func(res *dnsResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *DNSAPI) Update(id int64, value *sacloud.DNS) (*sacloud.DNS, error) {
return api.request(func(res *dnsResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *DNSAPI) Delete(id int64) (*sacloud.DNS, error) {
return api.request(func(res *dnsResponse) error {
return api.delete(id, nil, res)
})
}
// SetupDNSRecord DNSレコード作成
func (api *DNSAPI) SetupDNSRecord(zoneName string, hostName string, ip string) ([]string, error) {
dnsItem, err := api.findOrCreateBy(zoneName)
if err != nil {
return nil, err
}
if strings.HasSuffix(hostName, zoneName) {
hostName = strings.Replace(hostName, zoneName, "", -1)
}
dnsItem.Settings.DNS.AddDNSRecordSet(hostName, ip)
res, err := api.updateDNSRecord(dnsItem)
if err != nil {
return nil, err
}
if dnsItem.ID == sacloud.EmptyID {
return res.Status.NS, nil
}
return nil, nil
}
// DeleteDNSRecord DNSレコード削除
func (api *DNSAPI) DeleteDNSRecord(zoneName string, hostName string, ip string) error {
dnsItem, err := api.findOrCreateBy(zoneName)
if err != nil {
return err
}
dnsItem.Settings.DNS.DeleteDNSRecordSet(hostName, ip)
if dnsItem.HasDNSRecord() {
_, err = api.updateDNSRecord(dnsItem)
if err != nil {
return err
}
} else {
_, err = api.Delete(dnsItem.ID)
if err != nil {
return err
}
}
return nil
}
func (api *DNSAPI) findOrCreateBy(zoneName string) (*sacloud.DNS, error) {
res, err := api.Reset().WithNameLike(zoneName).Limit(1).Find()
if err != nil {
return nil, err
}
//すでに登録されている場合
var dnsItem *sacloud.DNS
if res.Count > 0 {
dnsItem = &res.CommonServiceDNSItems[0]
} else {
dnsItem = sacloud.CreateNewDNS(zoneName)
}
return dnsItem, nil
}
func (api *DNSAPI) updateDNSRecord(dnsItem *sacloud.DNS) (*sacloud.DNS, error) {
var item *sacloud.DNS
var err error
if dnsItem.ID == sacloud.EmptyID {
item, err = api.Create(dnsItem)
} else {
item, err = api.Update(dnsItem.ID, dnsItem)
}
if err != nil {
return nil, err
}
return item, nil
}

238
vendor/github.com/sacloud/libsacloud/api/dns_gen.go generated vendored Normal file
View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [DNSAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *DNSAPI) Reset() *DNSAPI {
api.reset()
return api
}
// Offset オフセット
func (api *DNSAPI) Offset(offset int) *DNSAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *DNSAPI) Limit(limit int) *DNSAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *DNSAPI) Include(key string) *DNSAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *DNSAPI) Exclude(key string) *DNSAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *DNSAPI) FilterBy(key string, value interface{}) *DNSAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *DNSAPI) FilterMultiBy(key string, value interface{}) *DNSAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *DNSAPI) WithNameLike(name string) *DNSAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *DNSAPI) WithTag(tag string) *DNSAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *DNSAPI) WithTags(tags []string) *DNSAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *DNSAPI) WithSizeGib(size int) *DNSAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *DNSAPI) WithSharedScope() *DNSAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *DNSAPI) WithUserScope() *DNSAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *DNSAPI) SortBy(key string, reverse bool) *DNSAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *DNSAPI) SortByName(reverse bool) *DNSAPI {
api.sortByName(reverse)
return api
}
// func (api *DNSAPI) SortBySize(reverse bool) *DNSAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *DNSAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *DNSAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *DNSAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *DNSAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *DNSAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *DNSAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *DNSAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *DNSAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *DNSAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *DNSAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *DNSAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *DNSAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *DNSAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *DNSAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *DNSAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *DNSAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *DNSAPI) New() *sacloud.DNS {
// return &sacloud.DNS{}
// }
// func (api *DNSAPI) Create(value *sacloud.DNS) (*sacloud.DNS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *DNSAPI) Read(id string) (*sacloud.DNS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *DNSAPI) Update(id string, value *sacloud.DNS) (*sacloud.DNS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *DNSAPI) Delete(id string) (*sacloud.DNS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *DNSAPI) setStateValue(setFunc func(*sacloud.Request)) *DNSAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *DNSAPI) request(f func(*sacloud.Response) error) (*sacloud.DNS, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.DNS, nil
//}
//
//func (api *DNSAPI) createRequest(value *sacloud.DNS) *dnsRequest {
// req := &dnsRequest{}
// req.CommonServiceDNSItem = value
// return req
//}

176
vendor/github.com/sacloud/libsacloud/api/doc.go generated vendored Normal file
View file

@ -0,0 +1,176 @@
// Package api is the Low Level APIs for maganing resources on SakuraCloud.
//
// さくらのクラウドでのリソース操作用の低レベルAPIです。
// さくらのクラウドAPI呼び出しを行います。
//
// Basic usage
//
// はじめにAPIクライアントを作成します。以降は作成したAPIクライアントを通じて各操作を行います。
//
// APIクライアントの作成にはAPIトークン、APIシークレット、対象ゾーン情報が必要です。
//
// あらかじめ、さくらのクラウド コントロールパネルにてAPIキーを発行しておいてください。
//
// token := "PUT YOUR TOKEN"
// secret := "PUT YOUR SECRET"
// zone := "tk1a"
//
// // クライアントの作成
// client := api.NewClient(token, secret, zone)
//
// Select target resource
//
// 操作対象のリソースごとにAPIクライアントのフィールドを用意しています。
// 例えばサーバーの操作を行う場合はAPIクライアントの"Server"フィールドを通じて操作します。
//
// フィールドの一覧は[type API]のドキュメントを参照してください。
//
// // サーバーの検索の場合
// client.Server.Find()
//
// // ディスクの検索の場合
// client.Disk.Find()
//
//
// Find resource
//
// リソースの検索を行うには、条件を指定してFind()を呼び出します。
//
// APIクライアントでは、検索条件の指定にFluent APIを採用しているため、メソッドチェーンで条件を指定できます。
//
// // サーバーの検索
// res, err := client.Server.
// WithNameLike("server name"). // サーバー名に"server name"が含まれる
// Offset(0). // 検索結果の位置0(先頭)から取得
// Limit(5). // 5件取得
// Include("Name"). // 結果にName列を含める
// Include("Description"). // 結果にDescription列を含める
// Find() // 検索実施
//
// if err != nil {
// panic(err)
// }
//
// fmt.Printf("response: %#v", res.Servers)
//
// Create resource
//
// 新規作成用パラメーターを作成し、値を設定します。
// その後APIクライアントのCreate()を呼び出します。
//
// // スイッチの作成
// param := client.Switch.New() // 新規作成用パラメーターの作成
// param.Name = "example" // 値の設定(名前)
// param.Description = "example" // 値の設定(説明)
// sw, err := client.Switch.Create(param) // 作成
//
// if err != nil {
// panic(err)
// }
//
// fmt.Printf("Created switch: %#v", sw)
//
// リソースの作成は非同期で行われます。
//
// このため、サーバーやディスクなどの作成に時間がかかるリソースに対して
// Create()呼び出し直後に操作を行おうとした場合にエラーとなることがあります。
//
// 必要に応じて適切なメソッドを呼び出し、リソースが適切な状態になるまで待機してください。
//
// // パブリックアーカイブからディスク作成
// archive, _ := client.Archive.FindLatestStableCentOS()
// // ディスクの作成
// param := client.Disk.New()
// param.Name = "example" // 値の設定(名前)
// param.SetSourceArchive(archive.ID) // コピー元にCentOSパブリックアーカイブを指定
// disk, err := client.Disk.Create(param) // 作成
//
// if err != nil {
// panic(err)
// }
//
// // 作成完了まで待機
// err = client.Disk.SleepWhileCopying(disk.ID, client.DefaultTimeoutDuration)
//
// // タイムアウト発生の場合errが返る
// if err != nil {
// panic(err)
// }
//
// fmt.Printf("Created disk: %#v", disk)
//
// Update resource
//
// APIクライアントのUpdate()メソッドを呼び出します。
//
// req, err := client.Server.Find()
// if err != nil {
// panic(err)
// }
// server := &req.Servers[0]
//
// // 更新
// server.Name = "update" // サーバー名を変更
// server.AppendTag("example-tag") // タグを追加
// updatedServer, err := client.Server.Update(server.ID, server) //更新実行
// if err != nil {
// panic(err)
// }
// fmt.Printf("Updated server: %#v", updatedServer)
//
// 更新内容によってはあらかじめシャットダウンなどのリソースの操作が必要になる場合があります。
//
// 詳細はさくらのクラウド ドキュメントを参照下さい。
// http://cloud.sakura.ad.jp/document/
//
// Delete resource
//
// APIクライアントのDeleteメソッドを呼び出します。
//
// // 削除
// deletedSwitch, err := client.Switch.Delete(sw.ID)
// if err != nil {
// panic(err)
// }
// fmt.Printf("Deleted switch: %#v", deletedSwitch)
//
// 対象リソースによってはあらかじめシャットダウンや切断などの操作が必要になる場合があります。
//
// 詳細はさくらのクラウド ドキュメントを参照下さい。
// http://cloud.sakura.ad.jp/document/
//
// PowerManagement
//
// サーバーやアプライアンスなどの電源操作もAPIを通じて行えます。
//
// // 起動
// _, err = client.Server.Boot(server.ID)
// if err != nil {
// panic(err)
// }
//
// // 起動完了まで待機
// err = client.Server.SleepUntilUp(server.ID, client.DefaultTimeoutDuration)
//
// // シャットダウン
// _, err = client.Server.Shutdown(server.ID) // gracefulシャットダウン
//
// if err != nil {
// panic(err)
// }
//
// // ダウンまで待機
// err = client.Server.SleepUntilDown(server.ID, client.DefaultTimeoutDuration)
//
// 電源関連のAPI呼び出しは非同期で行われます。
//
// 必要に応じて適切なメソッドを呼び出し、リソースが適切な状態になるまで待機してください。
//
// Other
//
// APIクライアントでは開発時のデバッグ出力が可能です。
// 以下のようにTraceModeフラグをtrueに設定した上でAPI呼び出しを行うと、標準出力へトレースログが出力されます。
//
// client.TraceMode = true
//
package api

79
vendor/github.com/sacloud/libsacloud/api/error.go generated vendored Normal file
View file

@ -0,0 +1,79 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
// Error APIコール時のエラー情報
type Error interface {
// errorインターフェースを内包
error
// エラー発生時のレスポンスコード
ResponseCode() int
// エラーコード
Code() string
// エラー発生時のメッセージ
Message() string
// エラー追跡用シリアルコード
Serial() string
// エラー(オリジナル)
OrigErr() *sacloud.ResultErrorValue
}
// NewError APIコール時のエラー情報
func NewError(responseCode int, err *sacloud.ResultErrorValue) Error {
return &apiError{
responseCode: responseCode,
origErr: err,
}
}
type apiError struct {
responseCode int
origErr *sacloud.ResultErrorValue
}
// Error errorインターフェース
func (e *apiError) Error() string {
return fmt.Sprintf("Error in response: %#v", e.origErr)
}
// ResponseCode エラー発生時のレスポンスコード
func (e *apiError) ResponseCode() int {
return e.responseCode
}
// Code エラーコード
func (e *apiError) Code() string {
if e.origErr != nil {
return e.origErr.ErrorCode
}
return ""
}
// Message エラー発生時のメッセージ(
func (e *apiError) Message() string {
if e.origErr != nil {
return e.origErr.ErrorMessage
}
return ""
}
// Serial エラー追跡用シリアルコード
func (e *apiError) Serial() string {
if e.origErr != nil {
return e.origErr.Serial
}
return ""
}
// OrigErr エラー(オリジナル)
func (e *apiError) OrigErr() *sacloud.ResultErrorValue {
return e.origErr
}

202
vendor/github.com/sacloud/libsacloud/api/gslb.go generated vendored Normal file
View file

@ -0,0 +1,202 @@
package api
import (
"encoding/json"
// "strings"
"github.com/sacloud/libsacloud/sacloud"
)
//HACK: さくらのAPI側仕様: CommonServiceItemsの内容によってJSONフォーマットが異なるため
// DNS/GSLB/シンプル監視それぞれでリクエスト/レスポンスデータ型を定義する。
// SearchGSLBResponse GSLB検索レスポンス
type SearchGSLBResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// CommonServiceGSLBItems GSLBリスト
CommonServiceGSLBItems []sacloud.GSLB `json:"CommonServiceItems,omitempty"`
}
type gslbRequest struct {
CommonServiceGSLBItem *sacloud.GSLB `json:"CommonServiceItem,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type gslbResponse struct {
*sacloud.ResultFlagValue
*sacloud.GSLB `json:"CommonServiceItem,omitempty"`
}
// GSLBAPI GSLB API
type GSLBAPI struct {
*baseAPI
}
// NewGSLBAPI GSLB API作成
func NewGSLBAPI(client *Client) *GSLBAPI {
return &GSLBAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "commonserviceitem"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Provider.Class", "gslb")
return res
},
},
}
}
// Find 検索
func (api *GSLBAPI) Find() (*SearchGSLBResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchGSLBResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *GSLBAPI) request(f func(*gslbResponse) error) (*sacloud.GSLB, error) {
res := &gslbResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.GSLB, nil
}
func (api *GSLBAPI) createRequest(value *sacloud.GSLB) *gslbResponse {
return &gslbResponse{GSLB: value}
}
// New 新規作成用パラメーター作成
func (api *GSLBAPI) New(name string) *sacloud.GSLB {
return sacloud.CreateNewGSLB(name)
}
// Create 新規作成
func (api *GSLBAPI) Create(value *sacloud.GSLB) (*sacloud.GSLB, error) {
return api.request(func(res *gslbResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *GSLBAPI) Read(id int64) (*sacloud.GSLB, error) {
return api.request(func(res *gslbResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *GSLBAPI) Update(id int64, value *sacloud.GSLB) (*sacloud.GSLB, error) {
return api.request(func(res *gslbResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *GSLBAPI) Delete(id int64) (*sacloud.GSLB, error) {
return api.request(func(res *gslbResponse) error {
return api.delete(id, nil, res)
})
}
// SetupGSLBRecord GSLB配下にサーバー追加
func (api *GSLBAPI) SetupGSLBRecord(gslbName string, ip string) ([]string, error) {
gslbItem, err := api.findOrCreateBy(gslbName)
if err != nil {
return nil, err
}
gslbItem.Settings.GSLB.AddServer(ip)
res, err := api.updateGSLBServers(gslbItem)
if err != nil {
return nil, err
}
if gslbItem.ID == sacloud.EmptyID {
return []string{res.Status.FQDN}, nil
}
return nil, nil
}
// DeleteGSLBServer GSLB配下のサーバー削除
func (api *GSLBAPI) DeleteGSLBServer(gslbName string, ip string) error {
gslbItem, err := api.findOrCreateBy(gslbName)
if err != nil {
return err
}
gslbItem.Settings.GSLB.DeleteServer(ip)
if gslbItem.HasGSLBServer() {
_, err = api.updateGSLBServers(gslbItem)
if err != nil {
return err
}
} else {
_, err = api.Delete(gslbItem.ID)
if err != nil {
return err
}
}
return nil
}
func (api *GSLBAPI) findOrCreateBy(gslbName string) (*sacloud.GSLB, error) {
req := &sacloud.Request{}
req.AddFilter("Name", gslbName)
res, err := api.Find()
if err != nil {
return nil, err
}
//すでに登録されている場合
var gslbItem *sacloud.GSLB
if res.Count > 0 {
gslbItem = &res.CommonServiceGSLBItems[0]
} else {
gslbItem = sacloud.CreateNewGSLB(gslbName)
}
return gslbItem, nil
}
func (api *GSLBAPI) updateGSLBServers(gslbItem *sacloud.GSLB) (*sacloud.GSLB, error) {
var item *sacloud.GSLB
var err error
if gslbItem.ID == sacloud.EmptyID {
item, err = api.Create(gslbItem)
} else {
item, err = api.Update(gslbItem.ID, gslbItem)
}
if err != nil {
return nil, err
}
return item, nil
}

238
vendor/github.com/sacloud/libsacloud/api/gslb_gen.go generated vendored Normal file
View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [GSLBAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *GSLBAPI) Reset() *GSLBAPI {
api.reset()
return api
}
// Offset オフセット
func (api *GSLBAPI) Offset(offset int) *GSLBAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *GSLBAPI) Limit(limit int) *GSLBAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *GSLBAPI) Include(key string) *GSLBAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *GSLBAPI) Exclude(key string) *GSLBAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *GSLBAPI) FilterBy(key string, value interface{}) *GSLBAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *GSLBAPI) FilterMultiBy(key string, value interface{}) *GSLBAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *GSLBAPI) WithNameLike(name string) *GSLBAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *GSLBAPI) WithTag(tag string) *GSLBAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *GSLBAPI) WithTags(tags []string) *GSLBAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *GSLBAPI) WithSizeGib(size int) *GSLBAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *GSLBAPI) WithSharedScope() *GSLBAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *GSLBAPI) WithUserScope() *GSLBAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *GSLBAPI) SortBy(key string, reverse bool) *GSLBAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *GSLBAPI) SortByName(reverse bool) *GSLBAPI {
api.sortByName(reverse)
return api
}
// func (api *GSLBAPI) SortBySize(reverse bool) *GSLBAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *GSLBAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *GSLBAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *GSLBAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *GSLBAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *GSLBAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *GSLBAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *GSLBAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *GSLBAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *GSLBAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *GSLBAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *GSLBAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *GSLBAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *GSLBAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *GSLBAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *GSLBAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *GSLBAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *GSLBAPI) New() *sacloud.GSLB {
// return &sacloud.GSLB{}
// }
// func (api *GSLBAPI) Create(value *sacloud.GSLB) (*sacloud.GSLB, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *GSLBAPI) Read(id string) (*sacloud.GSLB, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *GSLBAPI) Update(id string, value *sacloud.GSLB) (*sacloud.GSLB, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *GSLBAPI) Delete(id string) (*sacloud.GSLB, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *GSLBAPI) setStateValue(setFunc func(*sacloud.Request)) *GSLBAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *GSLBAPI) request(f func(*sacloud.Response) error) (*sacloud.GSLB, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.GSLB, nil
//}
//
//func (api *GSLBAPI) createRequest(value *sacloud.GSLB) *sacloud.Request {
// req := &sacloud.Request{}
// req.GSLB = value
// return req
//}

31
vendor/github.com/sacloud/libsacloud/api/icon.go generated vendored Normal file
View file

@ -0,0 +1,31 @@
package api
import "github.com/sacloud/libsacloud/sacloud"
// IconAPI アイコンAPI
type IconAPI struct {
*baseAPI
}
// NewIconAPI アイコンAPI作成
func NewIconAPI(client *Client) *IconAPI {
return &IconAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "icon"
},
},
}
}
// GetImage アイコン画像データ(BASE64文字列)取得
func (api *IconAPI) GetImage(id int64, size string) (*sacloud.Image, error) {
res := &sacloud.Response{}
err := api.read(id, map[string]string{"Size": size}, res)
if err != nil {
return nil, err
}
return res.Image, nil
}

247
vendor/github.com/sacloud/libsacloud/api/icon_gen.go generated vendored Normal file
View file

@ -0,0 +1,247 @@
package api
/************************************************
generated by IDE. for [IconAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *IconAPI) Reset() *IconAPI {
api.reset()
return api
}
// Offset オフセット
func (api *IconAPI) Offset(offset int) *IconAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *IconAPI) Limit(limit int) *IconAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *IconAPI) Include(key string) *IconAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *IconAPI) Exclude(key string) *IconAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *IconAPI) FilterBy(key string, value interface{}) *IconAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IconAPI) FilterMultiBy(key string, value interface{}) *IconAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *IconAPI) WithNameLike(name string) *IconAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *IconAPI) WithTag(tag string) *IconAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *IconAPI) WithTags(tags []string) *IconAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *IconAPI) WithSizeGib(size int) *IconAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// WithSharedScope 公開スコープ条件
func (api *IconAPI) WithSharedScope() *IconAPI {
api.FilterBy("Scope", "shared")
return api
}
// WithUserScope ユーザースコープ条件
func (api *IconAPI) WithUserScope() *IconAPI {
api.FilterBy("Scope", "user")
return api
}
// SortBy 指定キーでのソート
func (api *IconAPI) SortBy(key string, reverse bool) *IconAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *IconAPI) SortByName(reverse bool) *IconAPI {
api.sortByName(reverse)
return api
}
// func (api *IconAPI) SortBySize(reverse bool) *IconAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *IconAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *IconAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *IconAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *IconAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *IconAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *IconAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IconAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *IconAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *IconAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *IconAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *IconAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// SetSharedScope 公開スコープ条件
func (api *IconAPI) SetSharedScope() {
api.FilterBy("Scope", "shared")
}
// SetUserScope ユーザースコープ条件
func (api *IconAPI) SetUserScope() {
api.FilterBy("Scope", "user")
}
// SetSortBy 指定キーでのソート
func (api *IconAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *IconAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *IconAPI) SortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *IconAPI) New() *sacloud.Icon {
return &sacloud.Icon{}
}
// Create 新規作成
func (api *IconAPI) Create(value *sacloud.Icon) (*sacloud.Icon, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *IconAPI) Read(id int64) (*sacloud.Icon, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *IconAPI) Update(id int64, value *sacloud.Icon) (*sacloud.Icon, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *IconAPI) Delete(id int64) (*sacloud.Icon, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *IconAPI) setStateValue(setFunc func(*sacloud.Request)) *IconAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *IconAPI) request(f func(*sacloud.Response) error) (*sacloud.Icon, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Icon, nil
}
func (api *IconAPI) createRequest(value *sacloud.Icon) *sacloud.Request {
req := &sacloud.Request{}
req.Icon = value
return req
}

83
vendor/github.com/sacloud/libsacloud/api/interface.go generated vendored Normal file
View file

@ -0,0 +1,83 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
// InterfaceAPI インターフェースAPI
type InterfaceAPI struct {
*baseAPI
}
// NewInterfaceAPI インターフェースAPI作成
func NewInterfaceAPI(client *Client) *InterfaceAPI {
return &InterfaceAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "interface"
},
},
}
}
// CreateAndConnectToServer 新規作成しサーバーへ接続する
func (api *InterfaceAPI) CreateAndConnectToServer(serverID int64) (*sacloud.Interface, error) {
iface := api.New()
iface.Server = &sacloud.Server{
// Resource
Resource: &sacloud.Resource{ID: serverID},
}
return api.Create(iface)
}
// ConnectToSwitch スイッチへ接続する
func (api *InterfaceAPI) ConnectToSwitch(interfaceID int64, switchID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/to/switch/%d", api.getResourceURL(), interfaceID, switchID)
)
return api.modify(method, uri, nil)
}
// ConnectToSharedSegment 共有セグメントへ接続する
func (api *InterfaceAPI) ConnectToSharedSegment(interfaceID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/to/switch/shared", api.getResourceURL(), interfaceID)
)
return api.modify(method, uri, nil)
}
// DisconnectFromSwitch スイッチと切断する
func (api *InterfaceAPI) DisconnectFromSwitch(interfaceID int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/to/switch", api.getResourceURL(), interfaceID)
)
return api.modify(method, uri, nil)
}
// Monitor アクティビティーモニター取得
func (api *InterfaceAPI) Monitor(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.monitor(id, body)
}
// ConnectToPacketFilter パケットフィルター適用
func (api *InterfaceAPI) ConnectToPacketFilter(interfaceID int64, packetFilterID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("/%s/%d/to/packetfilter/%d", api.getResourceURL(), interfaceID, packetFilterID)
)
return api.modify(method, uri, nil)
}
// DisconnectFromPacketFilter パケットフィルター切断
func (api *InterfaceAPI) DisconnectFromPacketFilter(interfaceID int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("/%s/%d/to/packetfilter", api.getResourceURL(), interfaceID)
)
return api.modify(method, uri, nil)
}

View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [InterfaceAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *InterfaceAPI) Reset() *InterfaceAPI {
api.reset()
return api
}
// Offset オフセット
func (api *InterfaceAPI) Offset(offset int) *InterfaceAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *InterfaceAPI) Limit(limit int) *InterfaceAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *InterfaceAPI) Include(key string) *InterfaceAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *InterfaceAPI) Exclude(key string) *InterfaceAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *InterfaceAPI) FilterBy(key string, value interface{}) *InterfaceAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *InterfaceAPI) FilterMultiBy(key string, value interface{}) *InterfaceAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *InterfaceAPI) WithNameLike(name string) *InterfaceAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *InterfaceAPI) WithTag(tag string) *InterfaceAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *InterfaceAPI) WithTags(tags []string) *InterfaceAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *InterfaceAPI) WithSizeGib(size int) *InterfaceAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *InterfaceAPI) WithSharedScope() *InterfaceAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *InterfaceAPI) WithUserScope() *InterfaceAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *InterfaceAPI) SortBy(key string, reverse bool) *InterfaceAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *InterfaceAPI) SortByName(reverse bool) *InterfaceAPI {
api.sortByName(reverse)
return api
}
// func (api *InterfaceAPI) SortBySize(reverse bool) *InterfaceAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *InterfaceAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *InterfaceAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *InterfaceAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *InterfaceAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *InterfaceAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *InterfaceAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *InterfaceAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *InterfaceAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *InterfaceAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *InterfaceAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *InterfaceAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *InterfaceAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *InterfaceAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *InterfaceAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *InterfaceAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *InterfaceAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *InterfaceAPI) New() *sacloud.Interface {
return &sacloud.Interface{}
}
// Create 新規作成
func (api *InterfaceAPI) Create(value *sacloud.Interface) (*sacloud.Interface, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *InterfaceAPI) Read(id int64) (*sacloud.Interface, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *InterfaceAPI) Update(id int64, value *sacloud.Interface) (*sacloud.Interface, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *InterfaceAPI) Delete(id int64) (*sacloud.Interface, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *InterfaceAPI) setStateValue(setFunc func(*sacloud.Request)) *InterfaceAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *InterfaceAPI) request(f func(*sacloud.Response) error) (*sacloud.Interface, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Interface, nil
}
func (api *InterfaceAPI) createRequest(value *sacloud.Interface) *sacloud.Request {
req := &sacloud.Request{}
req.Interface = value
return req
}

143
vendor/github.com/sacloud/libsacloud/api/internet.go generated vendored Normal file
View file

@ -0,0 +1,143 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
// InternetAPI ルーターAPI
type InternetAPI struct {
*baseAPI
}
// NewInternetAPI ルーターAPI作成
func NewInternetAPI(client *Client) *InternetAPI {
return &InternetAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "internet"
},
},
}
}
// UpdateBandWidth 帯域幅更新
func (api *InternetAPI) UpdateBandWidth(id int64, bandWidth int) (*sacloud.Internet, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/bandwidth", api.getResourceURL(), id)
body = &sacloud.Request{}
)
body.Internet = &sacloud.Internet{BandWidthMbps: bandWidth}
return api.request(func(res *sacloud.Response) error {
return api.baseAPI.request(method, uri, body, res)
})
}
// AddSubnet IPアドレスブロックの追加割り当て
func (api *InternetAPI) AddSubnet(id int64, nwMaskLen int, nextHop string) (*sacloud.Subnet, error) {
var (
method = "POST"
uri = fmt.Sprintf("%s/%d/subnet", api.getResourceURL(), id)
)
body := &map[string]interface{}{
"NetworkMaskLen": nwMaskLen,
"NextHop": nextHop,
}
res := &sacloud.Response{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Subnet, nil
}
// UpdateSubnet IPアドレスブロックの更新
func (api *InternetAPI) UpdateSubnet(id int64, subnetID int64, nextHop string) (*sacloud.Subnet, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/subnet/%d", api.getResourceURL(), id, subnetID)
)
body := &map[string]interface{}{
"NextHop": nextHop,
}
res := &sacloud.Response{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Subnet, nil
}
// DeleteSubnet IPアドレスブロックの削除
func (api *InternetAPI) DeleteSubnet(id int64, subnetID int64) (*sacloud.ResultFlagValue, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/subnet/%d", api.getResourceURL(), id, subnetID)
)
res := &sacloud.ResultFlagValue{}
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res, nil
}
// EnableIPv6 IPv6有効化
func (api *InternetAPI) EnableIPv6(id int64) (*sacloud.IPv6Net, error) {
var (
method = "POST"
uri = fmt.Sprintf("%s/%d/ipv6net", api.getResourceURL(), id)
)
res := &sacloud.Response{}
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res.IPv6Net, nil
}
// DisableIPv6 IPv6無効化
func (api *InternetAPI) DisableIPv6(id int64, ipv6NetID int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/ipv6net/%d", api.getResourceURL(), id, ipv6NetID)
)
res := &sacloud.Response{}
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return false, err
}
return true, nil
}
// SleepWhileCreating 作成完了まで待機(リトライ10)
func (api *InternetAPI) SleepWhileCreating(id int64, timeout time.Duration) error {
handler := waitingForReadFunc(func() (interface{}, error) {
return api.Read(id)
}, 10) // 作成直後はReadが404を返すことがあるためリトライ
return blockingPoll(handler, timeout)
}
// RetrySleepWhileCreating 作成完了まで待機 作成直後はReadが404を返すことがあるためmaxRetryまでリトライする
func (api *InternetAPI) RetrySleepWhileCreating(id int64, timeout time.Duration, maxRetry int) error {
handler := waitingForReadFunc(func() (interface{}, error) {
return api.Read(id)
}, maxRetry)
return blockingPoll(handler, timeout)
}
// Monitor アクティビティーモニター取得
func (api *InternetAPI) Monitor(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.monitor(id, body)
}

View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [InternetAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *InternetAPI) Reset() *InternetAPI {
api.reset()
return api
}
// Offset オフセット
func (api *InternetAPI) Offset(offset int) *InternetAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *InternetAPI) Limit(limit int) *InternetAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *InternetAPI) Include(key string) *InternetAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *InternetAPI) Exclude(key string) *InternetAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *InternetAPI) FilterBy(key string, value interface{}) *InternetAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *InternetAPI) FilterMultiBy(key string, value interface{}) *InternetAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *InternetAPI) WithNameLike(name string) *InternetAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *InternetAPI) WithTag(tag string) *InternetAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *InternetAPI) WithTags(tags []string) *InternetAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *InternetAPI) WithSizeGib(size int) *InternetAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *InternetAPI) WithSharedScope() *InternetAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *InternetAPI) WithUserScope() *InternetAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *InternetAPI) SortBy(key string, reverse bool) *InternetAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *InternetAPI) SortByName(reverse bool) *InternetAPI {
api.sortByName(reverse)
return api
}
// func (api *InternetAPI) SortBySize(reverse bool) *InternetAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *InternetAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *InternetAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *InternetAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *InternetAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *InternetAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *InternetAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *InternetAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *InternetAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *InternetAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *InternetAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *InternetAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *InternetAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *InternetAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *InternetAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *InternetAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *InternetAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *InternetAPI) New() *sacloud.Internet {
return &sacloud.Internet{}
}
// Create 新規作成
func (api *InternetAPI) Create(value *sacloud.Internet) (*sacloud.Internet, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *InternetAPI) Read(id int64) (*sacloud.Internet, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *InternetAPI) Update(id int64, value *sacloud.Internet) (*sacloud.Internet, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *InternetAPI) Delete(id int64) (*sacloud.Internet, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *InternetAPI) setStateValue(setFunc func(*sacloud.Request)) *InternetAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *InternetAPI) request(f func(*sacloud.Response) error) (*sacloud.Internet, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Internet, nil
}
func (api *InternetAPI) createRequest(value *sacloud.Internet) *sacloud.Request {
req := &sacloud.Request{}
req.Internet = value
return req
}

56
vendor/github.com/sacloud/libsacloud/api/ipaddress.go generated vendored Normal file
View file

@ -0,0 +1,56 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
// IPAddressAPI IPアドレスAPI
type IPAddressAPI struct {
*baseAPI
}
// NewIPAddressAPI IPアドレスAPI新規作成
func NewIPAddressAPI(client *Client) *IPAddressAPI {
return &IPAddressAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "ipaddress"
},
},
}
}
// Read 読み取り
func (api *IPAddressAPI) Read(ip string) (*sacloud.IPAddress, error) {
return api.request(func(res *sacloud.Response) error {
var (
method = "GET"
uri = fmt.Sprintf("%s/%s", api.getResourceURL(), ip)
)
return api.baseAPI.request(method, uri, nil, res)
})
}
// Update 更新(ホスト名逆引き設定)
func (api *IPAddressAPI) Update(ip string, hostName string) (*sacloud.IPAddress, error) {
type request struct {
// IPAddress
IPAddress map[string]string
}
var (
method = "PUT"
uri = fmt.Sprintf("%s/%s", api.getResourceURL(), ip)
body = &request{IPAddress: map[string]string{}}
)
body.IPAddress["HostName"] = hostName
return api.request(func(res *sacloud.Response) error {
return api.baseAPI.request(method, uri, body, res)
})
}

View file

@ -0,0 +1,231 @@
package api
/************************************************
generated by IDE. for [IPAddressAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *IPAddressAPI) Reset() *IPAddressAPI {
api.reset()
return api
}
// Offset オフセット
func (api *IPAddressAPI) Offset(offset int) *IPAddressAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *IPAddressAPI) Limit(limit int) *IPAddressAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *IPAddressAPI) Include(key string) *IPAddressAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *IPAddressAPI) Exclude(key string) *IPAddressAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルタ
func (api *IPAddressAPI) FilterBy(key string, value interface{}) *IPAddressAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IPAddressAPI) FilterMultiBy(key string, value interface{}) *IPAddressAPI {
api.filterBy(key, value, true)
return api
}
//func (api *IPAddressAPI) WithNameLike(name string) *IPAddressAPI {
// return api.FilterBy("Name", name)
//}
//func (api *IPAddressAPI) WithTag(tag string) *IPAddressAPI {
// return api.FilterBy("Tags.Name", tag)
//}
//func (api *IPAddressAPI) WithTags(tags []string) *IPAddressAPI {
// return api.FilterBy("Tags.Name", []interface{}{tags})
//}
//
//func (api *IPAddressAPI) WithSizeGib(size int) *IPAddressAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
//}
//
//func (api *IPAddressAPI) WithSharedScope() *IPAddressAPI {
// api.FilterBy("Scope", "shared")
// return api
//}
//
//func (api *IPAddressAPI) WithUserScope() *IPAddressAPI {
// api.FilterBy("Scope", "user")
// return api
//}
// SortBy 指定キーでのソート
func (api *IPAddressAPI) SortBy(key string, reverse bool) *IPAddressAPI {
api.sortBy(key, reverse)
return api
}
//// SortByName 名称でのソート
//func (api *IPAddressAPI) SortByName(reverse bool) *IPAddressAPI {
// api.sortByName(reverse)
// return api
//}
//func (api *IPAddressAPI) SortBySize(reverse bool) *IPAddressAPI {
// api.sortBy("SizeMB", reverse)
// return api
//}
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *IPAddressAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *IPAddressAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *IPAddressAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *IPAddressAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *IPAddressAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルタ
func (api *IPAddressAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IPAddressAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
//func (api *IPAddressAPI) SetNameLike(name string) {
// api.FilterBy("Name", name)
//}
//func (api *IPAddressAPI) SetTag(tag string) {
// api.FilterBy("Tags.Name", tag)
//}
//func (api *IPAddressAPI) SetTags(tags []string) {
// api.FilterBy("Tags.Name", []interface{}{tags})
//}
//
//func (api *IPAddressAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
//}
//
//func (api *IPAddressAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
//}
//
//func (api *IPAddressAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
//}
// SetSortBy 指定キーでのソート
func (api *IPAddressAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
//// SetSortByName 名称でのソート
//func (api *IPAddressAPI) SetSortByName(reverse bool) {
// api.sortByName(reverse)
//}
//func (api *IPAddressAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
//}
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *IPAddressAPI) Create(value *sacloud.IPAddress) (*sacloud.IPAddress, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
//}
//func (api *IPAddressAPI) Read(id int64) (*sacloud.IPAddress, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
//}
//func (api *IPAddressAPI) Update(id int64, value *sacloud.IPAddress) (*sacloud.IPAddress, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
//}
//
//func (api *IPAddressAPI) Delete(id int64) (*sacloud.IPAddress, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
//}
//
//func (api *IPAddressAPI) New() *sacloud.IPAddress {
// return &sacloud.IPAddress{
// }
//}
/************************************************
Inner functions
************************************************/
func (api *IPAddressAPI) setStateValue(setFunc func(*sacloud.Request)) *IPAddressAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *IPAddressAPI) request(f func(*sacloud.Response) error) (*sacloud.IPAddress, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.IPAddress, nil
}
func (api *IPAddressAPI) createRequest(value *sacloud.IPAddress) *sacloud.Request {
req := &sacloud.Request{}
req.IPAddress = value
return req
}

96
vendor/github.com/sacloud/libsacloud/api/ipv6addr.go generated vendored Normal file
View file

@ -0,0 +1,96 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
// IPv6AddrAPI IPv6アドレスAPI
type IPv6AddrAPI struct {
*baseAPI
}
// NewIPv6AddrAPI IPv6アドレスAPI新規作成
func NewIPv6AddrAPI(client *Client) *IPv6AddrAPI {
return &IPv6AddrAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "ipv6addr"
},
},
}
}
// Read 読み取り
func (api *IPv6AddrAPI) Read(ip string) (*sacloud.IPv6Addr, error) {
return api.request(func(res *sacloud.Response) error {
var (
method = "GET"
uri = fmt.Sprintf("%s/%s", api.getResourceURL(), ip)
)
return api.baseAPI.request(method, uri, nil, res)
})
}
// Create 新規作成
func (api *IPv6AddrAPI) Create(ip string, hostName string) (*sacloud.IPv6Addr, error) {
type request struct {
// IPv6Addr
IPv6Addr map[string]string
}
var (
method = "POST"
uri = api.getResourceURL()
body = &request{IPv6Addr: map[string]string{}}
)
body.IPv6Addr["IPv6Addr"] = ip
body.IPv6Addr["HostName"] = hostName
return api.request(func(res *sacloud.Response) error {
return api.baseAPI.request(method, uri, body, res)
})
}
// Update 更新
func (api *IPv6AddrAPI) Update(ip string, hostName string) (*sacloud.IPv6Addr, error) {
type request struct {
// IPv6Addr
IPv6Addr map[string]string
}
var (
method = "PUT"
uri = fmt.Sprintf("%s/%s", api.getResourceURL(), ip)
body = &request{IPv6Addr: map[string]string{}}
)
body.IPv6Addr["HostName"] = hostName
return api.request(func(res *sacloud.Response) error {
return api.baseAPI.request(method, uri, body, res)
})
}
// Delete 削除
func (api *IPv6AddrAPI) Delete(ip string) (*sacloud.IPv6Addr, error) {
type request struct {
// IPv6Addr
IPv6Addr map[string]string
}
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%s", api.getResourceURL(), ip)
body = &request{IPv6Addr: map[string]string{}}
)
return api.request(func(res *sacloud.Response) error {
return api.baseAPI.request(method, uri, body, res)
})
}

View file

@ -0,0 +1,232 @@
package api
/************************************************
generated by IDE. for [IPv6AddrAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *IPv6AddrAPI) Reset() *IPv6AddrAPI {
api.reset()
return api
}
// Offset オフセット
func (api *IPv6AddrAPI) Offset(offset int) *IPv6AddrAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *IPv6AddrAPI) Limit(limit int) *IPv6AddrAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *IPv6AddrAPI) Include(key string) *IPv6AddrAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *IPv6AddrAPI) Exclude(key string) *IPv6AddrAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *IPv6AddrAPI) FilterBy(key string, value interface{}) *IPv6AddrAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IPv6AddrAPI) FilterMultiBy(key string, value interface{}) *IPv6AddrAPI {
api.filterBy(key, value, true)
return api
}
//func (api *IPv6AddrAPI) WithNameLike(name string) *IPv6AddrAPI {
// return api.FilterBy("Name", name)
//}
//func (api *IPv6AddrAPI) WithTag(tag string) *IPv6AddrAPI {
// return api.FilterBy("Tags.Name", tag)
//}
//func (api *IPv6AddrAPI) WithTags(tags []string) *IPv6AddrAPI {
// return api.FilterBy("Tags.Name", []interface{}{tags})
//}
//
//func (api *IPv6AddrAPI) WithSizeGib(size int) *IPv6AddrAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
//}
//
//func (api *IPv6AddrAPI) WithSharedScope() *IPv6AddrAPI {
// api.FilterBy("Scope", "shared")
// return api
//}
//
//func (api *IPv6AddrAPI) WithUserScope() *IPv6AddrAPI {
// api.FilterBy("Scope", "user")
// return api
//}
// SortBy 指定キーでのソート
func (api *IPv6AddrAPI) SortBy(key string, reverse bool) *IPv6AddrAPI {
api.sortBy(key, reverse)
return api
}
//// SortByName
//func (api *IPv6AddrAPI) SortByName(reverse bool) *IPv6AddrAPI {
// api.sortByName(reverse)
// return api
//}
//func (api *IPv6AddrAPI) SortBySize(reverse bool) *IPv6AddrAPI {
// api.sortBy("SizeMB", reverse)
// return api
//}
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *IPv6AddrAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *IPv6AddrAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *IPv6AddrAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *IPv6AddrAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *IPv6AddrAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *IPv6AddrAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IPv6AddrAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
//func (api *IPv6AddrAPI) SetNameLike(name string) {
//}
//func (api *IPv6AddrAPI) SetTag(tag string) {
// api.FilterBy("Tags.Name", tag)
//}
//func (api *IPv6AddrAPI) SetTags(tags []string) {
// api.FilterBy("Tags.Name", []interface{}{tags})
//}
//
//func (api *IPv6AddrAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
//}
//
//func (api *IPv6AddrAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
//}
//
//func (api *IPv6AddrAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
//}
// SetSortBy 指定キーでのソート
func (api *IPv6AddrAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
//// SetSortByName
//func (api *IPv6AddrAPI) SetSortByName(reverse bool) {
// api.sortByName(reverse)
//}
//func (api *IPv6AddrAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
//}
/************************************************
// To
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *IPv6AddrAPI) Create(value *sacloud.IPv6Addr) (*sacloud.IPv6Addr, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
//}
//func (api *IPv6AddrAPI) Read(id int64) (*sacloud.IPv6Addr, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
//}
//func (api *IPv6AddrAPI) Update(id int64, value *sacloud.IPv6Addr) (*sacloud.IPv6Addr, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
//}
//
//func (api *IPv6AddrAPI) Delete(id int64) (*sacloud.IPv6Addr, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
//}
//
// New 新規作成用パラメーター作成
func (api *IPv6AddrAPI) New() *sacloud.IPv6Addr {
return sacloud.CreateNewIPv6Addr()
}
/************************************************
Inner functions
************************************************/
func (api *IPv6AddrAPI) setStateValue(setFunc func(*sacloud.Request)) *IPv6AddrAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *IPv6AddrAPI) request(f func(*sacloud.Response) error) (*sacloud.IPv6Addr, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.IPv6Addr, nil
}
func (api *IPv6AddrAPI) createRequest(value *sacloud.IPv6Addr) *sacloud.Request {
req := &sacloud.Request{}
req.IPv6Addr = value
return req
}

18
vendor/github.com/sacloud/libsacloud/api/ipv6net.go generated vendored Normal file
View file

@ -0,0 +1,18 @@
package api
// IPv6NetAPI IPv6ネットワークAPI
type IPv6NetAPI struct {
*baseAPI
}
// NewIPv6NetAPI IPv6ネットワークAPI作成
func NewIPv6NetAPI(client *Client) *IPv6NetAPI {
return &IPv6NetAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "ipv6net"
},
},
}
}

229
vendor/github.com/sacloud/libsacloud/api/ipv6net_gen.go generated vendored Normal file
View file

@ -0,0 +1,229 @@
package api
/************************************************
generated by IDE. for [IPv6NetAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のクリア
func (api *IPv6NetAPI) Reset() *IPv6NetAPI {
api.reset()
return api
}
// Offset オフセット
func (api *IPv6NetAPI) Offset(offset int) *IPv6NetAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *IPv6NetAPI) Limit(limit int) *IPv6NetAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *IPv6NetAPI) Include(key string) *IPv6NetAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *IPv6NetAPI) Exclude(key string) *IPv6NetAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *IPv6NetAPI) FilterBy(key string, value interface{}) *IPv6NetAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IPv6NetAPI) FilterMultiBy(key string, value interface{}) *IPv6NetAPI {
api.filterBy(key, value, true)
return api
}
//func (api *IPv6NetAPI) WithNameLike(name string) *IPv6NetAPI {
// return api.FilterBy("Name", name)
//}
//
//func (api *IPv6NetAPI) WithTag(tag string) *IPv6NetAPI {
// return api.FilterBy("Tags.Name", tag)
//}
//func (api *IPv6NetAPI) WithTags(tags []string) *IPv6NetAPI {
// return api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *IPv6NetAPI) WithSizeGib(size int) *IPv6NetAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *IPv6NetAPI) WithSharedScope() *IPv6NetAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *IPv6NetAPI) WithUserScope() *IPv6NetAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *IPv6NetAPI) SortBy(key string, reverse bool) *IPv6NetAPI {
api.sortBy(key, reverse)
return api
}
//func (api *IPv6NetAPI) SortByName(reverse bool) *IPv6NetAPI {
// api.sortByName(reverse)
// return api
//}
// func (api *IPv6NetAPI) SortBySize(reverse bool) *IPv6NetAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のクリア
func (api *IPv6NetAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *IPv6NetAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *IPv6NetAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *IPv6NetAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *IPv6NetAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *IPv6NetAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *IPv6NetAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
//func (api *IPv6NetAPI) SetNameLike(name string) {
// api.FilterBy("Name", name)
//}
//
//func (api *IPv6NetAPI) SetTag(tag string) {
// api.FilterBy("Tags.Name", tag)
//}
//func (api *IPv6NetAPI) SetTags(tags []string) {
// api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *IPv6NetAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *IPv6NetAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *IPv6NetAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *IPv6NetAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
//func (api *IPv6NetAPI) SetSortByName(reverse bool) {
// api.sortByName(reverse)
//}
// func (api *IPv6NetAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *IPv6NetAPI) New() *sacloud.IPv6Net {
// return &sacloud.IPv6Net{}
//}
//func (api *IPv6NetAPI) Create(value *sacloud.IPv6Net) (*sacloud.IPv6Net, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
//}
// Read 読み取り
func (api *IPv6NetAPI) Read(id int64) (*sacloud.IPv6Net, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
//func (api *IPv6NetAPI) Update(id int64, value *sacloud.IPv6Net) (*sacloud.IPv6Net, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
//}
//
//func (api *IPv6NetAPI) Delete(id int64) (*sacloud.IPv6Net, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
//}
/************************************************
Inner functions
************************************************/
func (api *IPv6NetAPI) setStateValue(setFunc func(*sacloud.Request)) *IPv6NetAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *IPv6NetAPI) request(f func(*sacloud.Response) error) (*sacloud.IPv6Net, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.IPv6Net, nil
}
func (api *IPv6NetAPI) createRequest(value *sacloud.IPv6Net) *sacloud.Request {
req := &sacloud.Request{}
req.IPv6Net = value
return req
}

18
vendor/github.com/sacloud/libsacloud/api/license.go generated vendored Normal file
View file

@ -0,0 +1,18 @@
package api
// LicenseAPI ライセンスAPI
type LicenseAPI struct {
*baseAPI
}
// NewLicenseAPI ライセンスAPI作成
func NewLicenseAPI(client *Client) *LicenseAPI {
return &LicenseAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "license"
},
},
}
}

243
vendor/github.com/sacloud/libsacloud/api/license_gen.go generated vendored Normal file
View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [LicenseAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *LicenseAPI) Reset() *LicenseAPI {
api.reset()
return api
}
// Offset オフセット
func (api *LicenseAPI) Offset(offset int) *LicenseAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *LicenseAPI) Limit(limit int) *LicenseAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *LicenseAPI) Include(key string) *LicenseAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *LicenseAPI) Exclude(key string) *LicenseAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *LicenseAPI) FilterBy(key string, value interface{}) *LicenseAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *LicenseAPI) FilterMultiBy(key string, value interface{}) *LicenseAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *LicenseAPI) WithNameLike(name string) *LicenseAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *LicenseAPI) WithTag(tag string) *LicenseAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *LicenseAPI) WithTags(tags []string) *LicenseAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *LicenseAPI) WithSizeGib(size int) *LicenseAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *LicenseAPI) WithSharedScope() *LicenseAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *LicenseAPI) WithUserScope() *LicenseAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *LicenseAPI) SortBy(key string, reverse bool) *LicenseAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *LicenseAPI) SortByName(reverse bool) *LicenseAPI {
api.sortByName(reverse)
return api
}
// func (api *LicenseAPI) SortBySize(reverse bool) *LicenseAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *LicenseAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *LicenseAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *LicenseAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *LicenseAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *LicenseAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *LicenseAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *LicenseAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *LicenseAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *LicenseAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *LicenseAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *LicenseAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *LicenseAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *LicenseAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *LicenseAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *LicenseAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *LicenseAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *LicenseAPI) New() *sacloud.License {
return &sacloud.License{}
}
// Create 新規作成
func (api *LicenseAPI) Create(value *sacloud.License) (*sacloud.License, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *LicenseAPI) Read(id int64) (*sacloud.License, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *LicenseAPI) Update(id int64, value *sacloud.License) (*sacloud.License, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *LicenseAPI) Delete(id int64) (*sacloud.License, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *LicenseAPI) setStateValue(setFunc func(*sacloud.Request)) *LicenseAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *LicenseAPI) request(f func(*sacloud.Response) error) (*sacloud.License, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.License, nil
}
func (api *LicenseAPI) createRequest(value *sacloud.License) *sacloud.Request {
req := &sacloud.Request{}
req.License = value
return req
}

View file

@ -0,0 +1,232 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
//HACK: さくらのAPI側仕様: Applianceの内容によってJSONフォーマットが異なるため
// ロードバランサ/VPCルータそれぞれでリクエスト/レスポンスデータ型を定義する。
// SearchLoadBalancerResponse ロードバランサー検索レスポンス
type SearchLoadBalancerResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// LoadBalancers ロードバランサー リスト
LoadBalancers []sacloud.LoadBalancer `json:"Appliances,omitempty"`
}
type loadBalancerRequest struct {
LoadBalancer *sacloud.LoadBalancer `json:"Appliance,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type loadBalancerResponse struct {
*sacloud.ResultFlagValue
*sacloud.LoadBalancer `json:"Appliance,omitempty"`
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}
}
// LoadBalancerAPI ロードバランサーAPI
type LoadBalancerAPI struct {
*baseAPI
}
// NewLoadBalancerAPI ロードバランサーAPI作成
func NewLoadBalancerAPI(client *Client) *LoadBalancerAPI {
return &LoadBalancerAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "appliance"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Class", "loadbalancer")
return res
},
},
}
}
// Find 検索
func (api *LoadBalancerAPI) Find() (*SearchLoadBalancerResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchLoadBalancerResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *LoadBalancerAPI) request(f func(*loadBalancerResponse) error) (*sacloud.LoadBalancer, error) {
res := &loadBalancerResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.LoadBalancer, nil
}
func (api *LoadBalancerAPI) createRequest(value *sacloud.LoadBalancer) *loadBalancerResponse {
return &loadBalancerResponse{LoadBalancer: value}
}
//func (api *LoadBalancerAPI) New() *sacloud.LoadBalancer {
// return sacloud.CreateNewLoadBalancer()
//}
// Create 新規作成
func (api *LoadBalancerAPI) Create(value *sacloud.LoadBalancer) (*sacloud.LoadBalancer, error) {
return api.request(func(res *loadBalancerResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *LoadBalancerAPI) Read(id int64) (*sacloud.LoadBalancer, error) {
return api.request(func(res *loadBalancerResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *LoadBalancerAPI) Update(id int64, value *sacloud.LoadBalancer) (*sacloud.LoadBalancer, error) {
return api.request(func(res *loadBalancerResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *LoadBalancerAPI) Delete(id int64) (*sacloud.LoadBalancer, error) {
return api.request(func(res *loadBalancerResponse) error {
return api.delete(id, nil, res)
})
}
// Config 設定変更の反映
func (api *LoadBalancerAPI) Config(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/config", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// IsUp 起動しているか判定
func (api *LoadBalancerAPI) IsUp(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsUp(), nil
}
// IsDown ダウンしているか判定
func (api *LoadBalancerAPI) IsDown(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsDown(), nil
}
// Boot 起動
func (api *LoadBalancerAPI) Boot(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Shutdown シャットダウン(graceful)
func (api *LoadBalancerAPI) Shutdown(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Stop シャットダウン(force)
func (api *LoadBalancerAPI) Stop(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"Force": true})
}
// RebootForce 再起動
func (api *LoadBalancerAPI) RebootForce(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// ResetForce リセット
func (api *LoadBalancerAPI) ResetForce(id int64, recycleProcess bool) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"RecycleProcess": recycleProcess})
}
// SleepUntilUp 起動するまで待機
func (api *LoadBalancerAPI) SleepUntilUp(id int64, timeout time.Duration) error {
handler := waitingForUpFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepUntilDown ダウンするまで待機
func (api *LoadBalancerAPI) SleepUntilDown(id int64, timeout time.Duration) error {
handler := waitingForDownFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepWhileCopying コピー終了まで待機
func (api *LoadBalancerAPI) SleepWhileCopying(id int64, timeout time.Duration, maxRetry int) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *LoadBalancerAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration, maxRetry int) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return poll(handler, timeout)
}
// Monitor アクティビティーモニター取得
func (api *LoadBalancerAPI) Monitor(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "interface", 0, body)
}

View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [LoadBalancerAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *LoadBalancerAPI) Reset() *LoadBalancerAPI {
api.reset()
return api
}
// Offset オフセット
func (api *LoadBalancerAPI) Offset(offset int) *LoadBalancerAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *LoadBalancerAPI) Limit(limit int) *LoadBalancerAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *LoadBalancerAPI) Include(key string) *LoadBalancerAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *LoadBalancerAPI) Exclude(key string) *LoadBalancerAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *LoadBalancerAPI) FilterBy(key string, value interface{}) *LoadBalancerAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *LoadBalancerAPI) FilterMultiBy(key string, value interface{}) *LoadBalancerAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *LoadBalancerAPI) WithNameLike(name string) *LoadBalancerAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *LoadBalancerAPI) WithTag(tag string) *LoadBalancerAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *LoadBalancerAPI) WithTags(tags []string) *LoadBalancerAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *LoadBalancerAPI) WithSizeGib(size int) *LoadBalancerAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *LoadBalancerAPI) WithSharedScope() *LoadBalancerAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *LoadBalancerAPI) WithUserScope() *LoadBalancerAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *LoadBalancerAPI) SortBy(key string, reverse bool) *LoadBalancerAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *LoadBalancerAPI) SortByName(reverse bool) *LoadBalancerAPI {
api.sortByName(reverse)
return api
}
// func (api *LoadBalancerAPI) SortBySize(reverse bool) *LoadBalancerAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *LoadBalancerAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *LoadBalancerAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *LoadBalancerAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *LoadBalancerAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *LoadBalancerAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *LoadBalancerAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *LoadBalancerAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *LoadBalancerAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *LoadBalancerAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *LoadBalancerAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *LoadBalancerAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *LoadBalancerAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *LoadBalancerAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *LoadBalancerAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *LoadBalancerAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *LoadBalancerAPI) SortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *LoadBalancerAPI) New() *sacloud.LoadBalancer {
// return &sacloud.LoadBalancer{}
// }
// func (api *LoadBalancerAPI) Create(value *sacloud.LoadBalancer) (*sacloud.LoadBalancer, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *LoadBalancerAPI) Read(id string) (*sacloud.LoadBalancer, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *LoadBalancerAPI) Update(id string, value *sacloud.LoadBalancer) (*sacloud.LoadBalancer, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *LoadBalancerAPI) Delete(id string) (*sacloud.LoadBalancer, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *LoadBalancerAPI) setStateValue(setFunc func(*sacloud.Request)) *LoadBalancerAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *LoadBalancerAPI) request(f func(*sacloud.Response) error) (*sacloud.LoadBalancer, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.LoadBalancer, nil
//}
//
//func (api *LoadBalancerAPI) createRequest(value *sacloud.LoadBalancer) *sacloud.Request {
// req := &sacloud.Request{}
// req.LoadBalancer = value
// return req
//}

View file

@ -0,0 +1,414 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
// SearchMobileGatewayResponse モバイルゲートウェイ検索レスポンス
type SearchMobileGatewayResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// MobileGateways モバイルゲートウェイ リスト
MobileGateways []sacloud.MobileGateway `json:"Appliances,omitempty"`
}
// MobileGatewaySIMRequest SIM一覧取得リクエスト
type MobileGatewaySIMRequest struct {
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type mobileGatewayResponse struct {
*sacloud.ResultFlagValue
*sacloud.MobileGateway `json:"Appliance,omitempty"`
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}
}
type mobileGatewaySIMResponse struct {
*sacloud.ResultFlagValue
SIM []sacloud.SIMInfo `json:"sim,omitempty"`
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}
}
// MobileGatewayAPI モバイルゲートウェイAPI
type MobileGatewayAPI struct {
*baseAPI
}
// NewMobileGatewayAPI モバイルゲートウェイAPI作成
func NewMobileGatewayAPI(client *Client) *MobileGatewayAPI {
return &MobileGatewayAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "appliance"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Class", "mobilegateway")
return res
},
},
}
}
// Find 検索
func (api *MobileGatewayAPI) Find() (*SearchMobileGatewayResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchMobileGatewayResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *MobileGatewayAPI) request(f func(*mobileGatewayResponse) error) (*sacloud.MobileGateway, error) {
res := &mobileGatewayResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.MobileGateway, nil
}
func (api *MobileGatewayAPI) createRequest(value *sacloud.MobileGateway) *mobileGatewayResponse {
return &mobileGatewayResponse{MobileGateway: value}
}
// Create 新規作成
func (api *MobileGatewayAPI) Create(value *sacloud.MobileGateway) (*sacloud.MobileGateway, error) {
return api.request(func(res *mobileGatewayResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *MobileGatewayAPI) Read(id int64) (*sacloud.MobileGateway, error) {
return api.request(func(res *mobileGatewayResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *MobileGatewayAPI) Update(id int64, value *sacloud.MobileGateway) (*sacloud.MobileGateway, error) {
return api.request(func(res *mobileGatewayResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// UpdateSetting 設定更新
func (api *MobileGatewayAPI) UpdateSetting(id int64, value *sacloud.MobileGateway) (*sacloud.MobileGateway, error) {
req := &sacloud.MobileGateway{
// Settings
Settings: value.Settings,
}
return api.request(func(res *mobileGatewayResponse) error {
return api.update(id, api.createRequest(req), res)
})
}
// Delete 削除
func (api *MobileGatewayAPI) Delete(id int64) (*sacloud.MobileGateway, error) {
return api.request(func(res *mobileGatewayResponse) error {
return api.delete(id, nil, res)
})
}
// Config 設定変更の反映
func (api *MobileGatewayAPI) Config(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/config", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// IsUp 起動しているか判定
func (api *MobileGatewayAPI) IsUp(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsUp(), nil
}
// IsDown ダウンしているか判定
func (api *MobileGatewayAPI) IsDown(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsDown(), nil
}
// Boot 起動
func (api *MobileGatewayAPI) Boot(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Shutdown シャットダウン(graceful)
func (api *MobileGatewayAPI) Shutdown(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Stop シャットダウン(force)
func (api *MobileGatewayAPI) Stop(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"Force": true})
}
// RebootForce 再起動
func (api *MobileGatewayAPI) RebootForce(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// ResetForce リセット
func (api *MobileGatewayAPI) ResetForce(id int64, recycleProcess bool) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"RecycleProcess": recycleProcess})
}
// SleepUntilUp 起動するまで待機
func (api *MobileGatewayAPI) SleepUntilUp(id int64, timeout time.Duration) error {
handler := waitingForUpFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepUntilDown ダウンするまで待機
func (api *MobileGatewayAPI) SleepUntilDown(id int64, timeout time.Duration) error {
handler := waitingForDownFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepWhileCopying コピー終了まで待機
func (api *MobileGatewayAPI) SleepWhileCopying(id int64, timeout time.Duration, maxRetry int) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *MobileGatewayAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration, maxRetry int) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return poll(handler, timeout)
}
// ConnectToSwitch 指定のインデックス位置のNICをスイッチへ接続
func (api *MobileGatewayAPI) ConnectToSwitch(id int64, switchID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/interface/%d/to/switch/%d", api.getResourceURL(), id, 1, switchID)
)
return api.modify(method, uri, nil)
}
// DisconnectFromSwitch 指定のインデックス位置のNICをスイッチから切断
func (api *MobileGatewayAPI) DisconnectFromSwitch(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/interface/%d/to/switch", api.getResourceURL(), id, 1)
)
return api.modify(method, uri, nil)
}
// GetDNS DNSサーバ設定 取得
func (api *MobileGatewayAPI) GetDNS(id int64) (*sacloud.MobileGatewayResolver, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/mobilegateway/dnsresolver", api.getResourceURL(), id)
)
data, err := api.client.newRequest(method, uri, nil)
if err != nil {
return nil, err
}
var res sacloud.MobileGatewayResolver
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, err
}
// SetDNS DNSサーバ設定
func (api *MobileGatewayAPI) SetDNS(id int64, dns *sacloud.MobileGatewayResolver) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/mobilegateway/dnsresolver", api.getResourceURL(), id)
)
return api.modify(method, uri, dns)
}
// GetSIMRoutes SIMルート 取得
func (api *MobileGatewayAPI) GetSIMRoutes(id int64) ([]*sacloud.MobileGatewaySIMRoute, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/mobilegateway/simroutes", api.getResourceURL(), id)
)
data, err := api.client.newRequest(method, uri, nil)
if err != nil {
return nil, err
}
var res sacloud.MobileGatewaySIMRoutes
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return res.SIMRoutes, err
}
// SetSIMRoutes SIMルート 設定
func (api *MobileGatewayAPI) SetSIMRoutes(id int64, simRoutes *sacloud.MobileGatewaySIMRoutes) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/mobilegateway/simroutes", api.getResourceURL(), id)
)
return api.modify(method, uri, simRoutes)
}
// AddSIMRoute SIMルート 個別追加
func (api *MobileGatewayAPI) AddSIMRoute(id int64, simID int64, prefix string) (bool, error) {
routes, err := api.GetSIMRoutes(id)
if err != nil {
return false, err
}
param := &sacloud.MobileGatewaySIMRoutes{
SIMRoutes: routes,
}
added := param.AddSIMRoute(simID, prefix)
if !added {
return false, nil
}
return api.SetSIMRoutes(id, param)
}
// DeleteSIMRoute SIMルート 個別削除
func (api *MobileGatewayAPI) DeleteSIMRoute(id int64, simID int64, prefix string) (bool, error) {
routes, err := api.GetSIMRoutes(id)
if err != nil {
return false, err
}
param := &sacloud.MobileGatewaySIMRoutes{
SIMRoutes: routes,
}
deleted := param.DeleteSIMRoute(simID, prefix)
if !deleted {
return false, nil
}
_, err = api.SetSIMRoutes(id, param)
return deleted, err
}
// DeleteSIMRoutes SIMルート 全件削除
func (api *MobileGatewayAPI) DeleteSIMRoutes(id int64) (bool, error) {
return api.SetSIMRoutes(id, &sacloud.MobileGatewaySIMRoutes{
SIMRoutes: []*sacloud.MobileGatewaySIMRoute{},
})
}
// ListSIM SIM一覧取得
func (api *MobileGatewayAPI) ListSIM(id int64, req *MobileGatewaySIMRequest) ([]sacloud.SIMInfo, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/mobilegateway/sims", api.getResourceURL(), id)
)
data, err := api.client.newRequest(method, uri, req)
if err != nil {
return nil, err
}
var res mobileGatewaySIMResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return res.SIM, nil
}
// AddSIM SIM登録
func (api *MobileGatewayAPI) AddSIM(id int64, simID int64) (bool, error) {
var (
method = "POST"
uri = fmt.Sprintf("%s/%d/mobilegateway/sims", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]interface{}{
"sim": map[string]interface{}{
"resource_id": fmt.Sprintf("%d", simID),
},
})
}
// DeleteSIM SIM登録
func (api *MobileGatewayAPI) DeleteSIM(id int64, simID int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/mobilegateway/sims/%d", api.getResourceURL(), id, simID)
)
return api.modify(method, uri, nil)
}
// Logs セッションログ取得(複数SIM)
func (api *MobileGatewayAPI) Logs(id int64, body interface{}) ([]sacloud.SIMLog, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/mobilegateway/sessionlog", api.getResourceURL(), id)
)
res := &simLogResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Logs, nil
}

View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [MobileGatewayAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *MobileGatewayAPI) Reset() *MobileGatewayAPI {
api.reset()
return api
}
// Offset オフセット
func (api *MobileGatewayAPI) Offset(offset int) *MobileGatewayAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *MobileGatewayAPI) Limit(limit int) *MobileGatewayAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *MobileGatewayAPI) Include(key string) *MobileGatewayAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *MobileGatewayAPI) Exclude(key string) *MobileGatewayAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *MobileGatewayAPI) FilterBy(key string, value interface{}) *MobileGatewayAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *MobileGatewayAPI) FilterMultiBy(key string, value interface{}) *MobileGatewayAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *MobileGatewayAPI) WithNameLike(name string) *MobileGatewayAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *MobileGatewayAPI) WithTag(tag string) *MobileGatewayAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *MobileGatewayAPI) WithTags(tags []string) *MobileGatewayAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *MobileGatewayAPI) WithSizeGib(size int) *MobileGatewayAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *MobileGatewayAPI) WithSharedScope() *MobileGatewayAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *MobileGatewayAPI) WithUserScope() *MobileGatewayAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *MobileGatewayAPI) SortBy(key string, reverse bool) *MobileGatewayAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *MobileGatewayAPI) SortByName(reverse bool) *MobileGatewayAPI {
api.sortByName(reverse)
return api
}
// func (api *MobileGatewayAPI) SortBySize(reverse bool) *MobileGatewayAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *MobileGatewayAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *MobileGatewayAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *MobileGatewayAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *MobileGatewayAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *MobileGatewayAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *MobileGatewayAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *MobileGatewayAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *MobileGatewayAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *MobileGatewayAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *MobileGatewayAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *MobileGatewayAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *MobileGatewayAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *MobileGatewayAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *MobileGatewayAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *MobileGatewayAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *MobileGatewayAPI) SortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *MobileGatewayAPI) New() *sacloud.MobileGateway {
// return &sacloud.MobileGateway{}
// }
// func (api *MobileGatewayAPI) Create(value *sacloud.MobileGateway) (*sacloud.MobileGateway, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *MobileGatewayAPI) Read(id string) (*sacloud.MobileGateway, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *MobileGatewayAPI) Update(id string, value *sacloud.MobileGateway) (*sacloud.MobileGateway, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *MobileGatewayAPI) Delete(id string) (*sacloud.MobileGateway, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *MobileGatewayAPI) setStateValue(setFunc func(*sacloud.Request)) *MobileGatewayAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *MobileGatewayAPI) request(f func(*sacloud.Response) error) (*sacloud.MobileGateway, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.MobileGateway, nil
//}
//
//func (api *MobileGatewayAPI) createRequest(value *sacloud.MobileGateway) *sacloud.Request {
// req := &sacloud.Request{}
// req.MobileGateway = value
// return req
//}

50
vendor/github.com/sacloud/libsacloud/api/newsfeed.go generated vendored Normal file
View file

@ -0,0 +1,50 @@
package api
import (
"encoding/json"
"github.com/sacloud/libsacloud/sacloud"
)
// NewsFeedAPI フィード(障害/メンテナンス情報)API
type NewsFeedAPI struct {
client *Client
}
// NewsFeedURL フィード取得URL
var NewsFeedURL = "https://secure.sakura.ad.jp/rss/sakuranews/getfeeds.php?service=cloud&format=json"
// NewNewsFeedAPI フィード(障害/メンテナンス情報)API
func NewNewsFeedAPI(client *Client) *NewsFeedAPI {
return &NewsFeedAPI{
client: client,
}
}
// GetFeed フィード全件取得
func (api *NewsFeedAPI) GetFeed() ([]sacloud.NewsFeed, error) {
var res = []sacloud.NewsFeed{}
data, err := api.client.newRequest("GET", NewsFeedURL, nil)
if err != nil {
return res, err
}
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return res, nil
}
// GetFeedByURL 指定のURLを持つフィードを取得
func (api *NewsFeedAPI) GetFeedByURL(url string) (*sacloud.NewsFeed, error) {
res, err := api.GetFeed()
if err != nil {
return nil, err
}
for _, r := range res {
if r.URL == url {
return &r, nil
}
}
return nil, nil
}

234
vendor/github.com/sacloud/libsacloud/api/nfs.go generated vendored Normal file
View file

@ -0,0 +1,234 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
// SearchNFSResponse NFS検索レスポンス
type SearchNFSResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// NFSs NFS リスト
NFS []sacloud.NFS `json:"Appliances,omitempty"`
}
type nfsRequest struct {
NFS *sacloud.NFS `json:"Appliance,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type nfsResponse struct {
*sacloud.ResultFlagValue
*sacloud.NFS `json:"Appliance,omitempty"`
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}
}
// NFSAPI NFSAPI
type NFSAPI struct {
*baseAPI
}
// NewNFSAPI NFSAPI作成
func NewNFSAPI(client *Client) *NFSAPI {
return &NFSAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "appliance"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Class", "nfs")
return res
},
},
}
}
// Find 検索
func (api *NFSAPI) Find() (*SearchNFSResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchNFSResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *NFSAPI) request(f func(*nfsResponse) error) (*sacloud.NFS, error) {
res := &nfsResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.NFS, nil
}
func (api *NFSAPI) createRequest(value *sacloud.NFS) *nfsResponse {
return &nfsResponse{NFS: value}
}
//func (api *NFSAPI) New() *sacloud.NFS {
// return sacloud.CreateNewNFS()
//}
// Create 新規作成
func (api *NFSAPI) Create(value *sacloud.NFS) (*sacloud.NFS, error) {
return api.request(func(res *nfsResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *NFSAPI) Read(id int64) (*sacloud.NFS, error) {
return api.request(func(res *nfsResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *NFSAPI) Update(id int64, value *sacloud.NFS) (*sacloud.NFS, error) {
return api.request(func(res *nfsResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *NFSAPI) Delete(id int64) (*sacloud.NFS, error) {
return api.request(func(res *nfsResponse) error {
return api.delete(id, nil, res)
})
}
// Config 設定変更の反映
func (api *NFSAPI) Config(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/config", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// IsUp 起動しているか判定
func (api *NFSAPI) IsUp(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsUp(), nil
}
// IsDown ダウンしているか判定
func (api *NFSAPI) IsDown(id int64) (bool, error) {
lb, err := api.Read(id)
if err != nil {
return false, err
}
return lb.Instance.IsDown(), nil
}
// Boot 起動
func (api *NFSAPI) Boot(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Shutdown シャットダウン(graceful)
func (api *NFSAPI) Shutdown(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Stop シャットダウン(force)
func (api *NFSAPI) Stop(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"Force": true})
}
// RebootForce 再起動
func (api *NFSAPI) RebootForce(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// ResetForce リセット
func (api *NFSAPI) ResetForce(id int64, recycleProcess bool) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"RecycleProcess": recycleProcess})
}
// SleepUntilUp 起動するまで待機
func (api *NFSAPI) SleepUntilUp(id int64, timeout time.Duration) error {
handler := waitingForUpFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepUntilDown ダウンするまで待機
func (api *NFSAPI) SleepUntilDown(id int64, timeout time.Duration) error {
handler := waitingForDownFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepWhileCopying コピー終了まで待機
func (api *NFSAPI) SleepWhileCopying(id int64, timeout time.Duration, maxRetry int) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *NFSAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration, maxRetry int) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return poll(handler, timeout)
}
// MonitorNFS NFS固有項目アクティビティモニター取得
func (api *NFSAPI) MonitorNFS(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "nfs", 0, body)
}
// MonitorInterface NICアクティビティーモニター取得
func (api *NFSAPI) MonitorInterface(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "interface", 0, body)
}

238
vendor/github.com/sacloud/libsacloud/api/nfs_gen.go generated vendored Normal file
View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [NFSAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *NFSAPI) Reset() *NFSAPI {
api.reset()
return api
}
// Offset オフセット
func (api *NFSAPI) Offset(offset int) *NFSAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *NFSAPI) Limit(limit int) *NFSAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *NFSAPI) Include(key string) *NFSAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *NFSAPI) Exclude(key string) *NFSAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *NFSAPI) FilterBy(key string, value interface{}) *NFSAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *NFSAPI) FilterMultiBy(key string, value interface{}) *NFSAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *NFSAPI) WithNameLike(name string) *NFSAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *NFSAPI) WithTag(tag string) *NFSAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *NFSAPI) WithTags(tags []string) *NFSAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *NFSAPI) WithSizeGib(size int) *NFSAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *NFSAPI) WithSharedScope() *NFSAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *NFSAPI) WithUserScope() *NFSAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *NFSAPI) SortBy(key string, reverse bool) *NFSAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *NFSAPI) SortByName(reverse bool) *NFSAPI {
api.sortByName(reverse)
return api
}
// func (api *NFSAPI) SortBySize(reverse bool) *NFSAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *NFSAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *NFSAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *NFSAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *NFSAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *NFSAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *NFSAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *NFSAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *NFSAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *NFSAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *NFSAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *NFSAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *NFSAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *NFSAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *NFSAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *NFSAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *NFSAPI) SortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *NFSAPI) New() *sacloud.NFS {
// return &sacloud.NFS{}
// }
// func (api *NFSAPI) Create(value *sacloud.NFS) (*sacloud.NFS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *NFSAPI) Read(id string) (*sacloud.NFS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *NFSAPI) Update(id string, value *sacloud.NFS) (*sacloud.NFS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *NFSAPI) Delete(id string) (*sacloud.NFS, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *NFSAPI) setStateValue(setFunc func(*sacloud.Request)) *NFSAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *NFSAPI) request(f func(*sacloud.Response) error) (*sacloud.NFS, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.NFS, nil
//}
//
//func (api *NFSAPI) createRequest(value *sacloud.NFS) *sacloud.Request {
// req := &sacloud.Request{}
// req.NFS = value
// return req
//}

18
vendor/github.com/sacloud/libsacloud/api/note.go generated vendored Normal file
View file

@ -0,0 +1,18 @@
package api
// NoteAPI スタートアップスクリプトAPI
type NoteAPI struct {
*baseAPI
}
// NewNoteAPI スタートアップスクリプトAPI作成
func NewNoteAPI(client *Client) *NoteAPI {
return &NoteAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "note"
},
},
}
}

247
vendor/github.com/sacloud/libsacloud/api/note_gen.go generated vendored Normal file
View file

@ -0,0 +1,247 @@
package api
/************************************************
generated by IDE. for [NoteAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *NoteAPI) Reset() *NoteAPI {
api.reset()
return api
}
// Offset オフセット
func (api *NoteAPI) Offset(offset int) *NoteAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *NoteAPI) Limit(limit int) *NoteAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *NoteAPI) Include(key string) *NoteAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *NoteAPI) Exclude(key string) *NoteAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *NoteAPI) FilterBy(key string, value interface{}) *NoteAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *NoteAPI) FilterMultiBy(key string, value interface{}) *NoteAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *NoteAPI) WithNameLike(name string) *NoteAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *NoteAPI) WithTag(tag string) *NoteAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *NoteAPI) WithTags(tags []string) *NoteAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *NoteAPI) WithSizeGib(size int) *NoteAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// WithSharedScope 公開スコープ条件
func (api *NoteAPI) WithSharedScope() *NoteAPI {
api.FilterBy("Scope", "shared")
return api
}
// WithUserScope ユーザースコープ条件
func (api *NoteAPI) WithUserScope() *NoteAPI {
api.FilterBy("Scope", "user")
return api
}
// SortBy 指定キーでのソート
func (api *NoteAPI) SortBy(key string, reverse bool) *NoteAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *NoteAPI) SortByName(reverse bool) *NoteAPI {
api.sortByName(reverse)
return api
}
// func (api *NoteAPI) SortBySize(reverse bool) *NoteAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *NoteAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *NoteAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *NoteAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *NoteAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *NoteAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *NoteAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *NoteAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *NoteAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *NoteAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *NoteAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *NoteAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// SetSharedScope 公開スコープ条件
func (api *NoteAPI) SetSharedScope() {
api.FilterBy("Scope", "shared")
}
// SetUserScope ユーザースコープ条件
func (api *NoteAPI) SetUserScope() {
api.FilterBy("Scope", "user")
}
// SetSortBy 指定キーでのソート
func (api *NoteAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *NoteAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *NoteAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *NoteAPI) New() *sacloud.Note {
return &sacloud.Note{}
}
// Create 新規作成
func (api *NoteAPI) Create(value *sacloud.Note) (*sacloud.Note, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *NoteAPI) Read(id int64) (*sacloud.Note, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *NoteAPI) Update(id int64, value *sacloud.Note) (*sacloud.Note, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *NoteAPI) Delete(id int64) (*sacloud.Note, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *NoteAPI) setStateValue(setFunc func(*sacloud.Request)) *NoteAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *NoteAPI) request(f func(*sacloud.Response) error) (*sacloud.Note, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Note, nil
}
func (api *NoteAPI) createRequest(value *sacloud.Note) *sacloud.Request {
req := &sacloud.Request{}
req.Note = value
return req
}

View file

@ -0,0 +1,18 @@
package api
// PacketFilterAPI パケットフィルターAPI
type PacketFilterAPI struct {
*baseAPI
}
// NewPacketFilterAPI パケットフィルターAPI作成
func NewPacketFilterAPI(client *Client) *PacketFilterAPI {
return &PacketFilterAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "packetfilter"
},
},
}
}

View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [PacketFilterAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *PacketFilterAPI) Reset() *PacketFilterAPI {
api.reset()
return api
}
// Offset オフセット
func (api *PacketFilterAPI) Offset(offset int) *PacketFilterAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *PacketFilterAPI) Limit(limit int) *PacketFilterAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *PacketFilterAPI) Include(key string) *PacketFilterAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *PacketFilterAPI) Exclude(key string) *PacketFilterAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *PacketFilterAPI) FilterBy(key string, value interface{}) *PacketFilterAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *PacketFilterAPI) FilterMultiBy(key string, value interface{}) *PacketFilterAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *PacketFilterAPI) WithNameLike(name string) *PacketFilterAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *PacketFilterAPI) WithTag(tag string) *PacketFilterAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *PacketFilterAPI) WithTags(tags []string) *PacketFilterAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *PacketFilterAPI) WithSizeGib(size int) *PacketFilterAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *PacketFilterAPI) WithSharedScope() *PacketFilterAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *PacketFilterAPI) WithUserScope() *PacketFilterAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *PacketFilterAPI) SortBy(key string, reverse bool) *PacketFilterAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *PacketFilterAPI) SortByName(reverse bool) *PacketFilterAPI {
api.sortByName(reverse)
return api
}
// func (api *PacketFilterAPI) SortBySize(reverse bool) *PacketFilterAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *PacketFilterAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *PacketFilterAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *PacketFilterAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *PacketFilterAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *PacketFilterAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *PacketFilterAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *PacketFilterAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *PacketFilterAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *PacketFilterAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *PacketFilterAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *PacketFilterAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *PacketFilterAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *PacketFilterAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *PacketFilterAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *PacketFilterAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *PacketFilterAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *PacketFilterAPI) New() *sacloud.PacketFilter {
return sacloud.CreateNewPacketFilter()
}
// Create 新規作成
func (api *PacketFilterAPI) Create(value *sacloud.PacketFilter) (*sacloud.PacketFilter, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *PacketFilterAPI) Read(id int64) (*sacloud.PacketFilter, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *PacketFilterAPI) Update(id int64, value *sacloud.PacketFilter) (*sacloud.PacketFilter, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *PacketFilterAPI) Delete(id int64) (*sacloud.PacketFilter, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *PacketFilterAPI) setStateValue(setFunc func(*sacloud.Request)) *PacketFilterAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *PacketFilterAPI) request(f func(*sacloud.Response) error) (*sacloud.PacketFilter, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.PacketFilter, nil
}
func (api *PacketFilterAPI) createRequest(value *sacloud.PacketFilter) *sacloud.Request {
req := &sacloud.Request{}
req.PacketFilter = value
return req
}

156
vendor/github.com/sacloud/libsacloud/api/polling.go generated vendored Normal file
View file

@ -0,0 +1,156 @@
package api
import (
"fmt"
"time"
)
type pollingHandler func() (exit bool, state interface{}, err error)
func poll(handler pollingHandler, timeout time.Duration) (chan (interface{}), chan (interface{}), chan (error)) {
compChan := make(chan interface{})
progChan := make(chan interface{})
errChan := make(chan error)
tick := time.Tick(5 * time.Second)
bomb := time.After(timeout)
go func() {
for {
select {
case <-tick:
exit, state, err := handler()
if err != nil {
errChan <- fmt.Errorf("Failed: poll: %s", err)
return
}
if state != nil {
progChan <- state
if exit {
compChan <- state
return
}
}
case <-bomb:
errChan <- fmt.Errorf("Timeout")
return
}
}
}()
return compChan, progChan, errChan
}
func blockingPoll(handler pollingHandler, timeout time.Duration) error {
c, p, e := poll(handler, timeout)
for {
select {
case <-c:
return nil
case <-p:
// noop
case err := <-e:
return err
}
}
}
type hasAvailable interface {
IsAvailable() bool
}
type hasFailed interface {
IsFailed() bool
}
func waitingForAvailableFunc(readFunc func() (hasAvailable, error), maxRetry int) func() (bool, interface{}, error) {
counter := 0
return func() (bool, interface{}, error) {
counter++
v, err := readFunc()
if err != nil {
if maxRetry > 0 && counter < maxRetry {
return false, nil, nil
}
return false, nil, err
}
if v == nil {
return false, nil, fmt.Errorf("readFunc returns nil")
}
if v.IsAvailable() {
return true, v, nil
}
if f, ok := v.(hasFailed); ok && f.IsFailed() {
return false, v, fmt.Errorf("InstanceState is failed: %#v", v)
}
return false, v, nil
}
}
type hasUpDown interface {
IsUp() bool
IsDown() bool
}
func waitingForUpFunc(readFunc func() (hasUpDown, error), maxRetry int) func() (bool, interface{}, error) {
counter := 0
return func() (bool, interface{}, error) {
counter++
v, err := readFunc()
if err != nil {
if maxRetry > 0 && counter < maxRetry {
return false, nil, nil
}
return false, nil, err
}
if v == nil {
return false, nil, fmt.Errorf("readFunc returns nil")
}
if v.IsUp() {
return true, v, nil
}
return false, v, nil
}
}
func waitingForDownFunc(readFunc func() (hasUpDown, error), maxRetry int) func() (bool, interface{}, error) {
counter := 0
return func() (bool, interface{}, error) {
counter++
v, err := readFunc()
if err != nil {
if maxRetry > 0 && counter < maxRetry {
return false, nil, nil
}
return false, nil, err
}
if v == nil {
return false, nil, fmt.Errorf("readFunc returns nil")
}
if v.IsDown() {
return true, v, nil
}
return false, v, nil
}
}
func waitingForReadFunc(readFunc func() (interface{}, error), maxRetry int) func() (bool, interface{}, error) {
counter := 0
return func() (bool, interface{}, error) {
counter++
v, err := readFunc()
if err != nil {
if maxRetry > 0 && counter < maxRetry {
return false, nil, nil
}
return false, nil, err
}
if v != nil {
return true, v, nil
}
return false, v, nil
}
}

View file

@ -0,0 +1,18 @@
package api
// PrivateHostAPI 専有ホストAPI
type PrivateHostAPI struct {
*baseAPI
}
// NewPrivateHostAPI 専有ホストAPI作成
func NewPrivateHostAPI(client *Client) *PrivateHostAPI {
return &PrivateHostAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "privatehost"
},
},
}
}

View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [PrivateHostAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件リセット
func (api *PrivateHostAPI) Reset() *PrivateHostAPI {
api.reset()
return api
}
// Offset オフセット
func (api *PrivateHostAPI) Offset(offset int) *PrivateHostAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *PrivateHostAPI) Limit(limit int) *PrivateHostAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *PrivateHostAPI) Include(key string) *PrivateHostAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *PrivateHostAPI) Exclude(key string) *PrivateHostAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *PrivateHostAPI) FilterBy(key string, value interface{}) *PrivateHostAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *PrivateHostAPI) FilterMultiBy(key string, value interface{}) *PrivateHostAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *PrivateHostAPI) WithNameLike(name string) *PrivateHostAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *PrivateHostAPI) WithTag(tag string) *PrivateHostAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *PrivateHostAPI) WithTags(tags []string) *PrivateHostAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *PrivateHostAPI) WithSizeGib(size int) *PrivateHostAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *PrivateHostAPI) WithSharedScope() *PrivateHostAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *PrivateHostAPI) WithUserScope() *PrivateHostAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *PrivateHostAPI) SortBy(key string, reverse bool) *PrivateHostAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *PrivateHostAPI) SortByName(reverse bool) *PrivateHostAPI {
api.sortByName(reverse)
return api
}
// func (api *PrivateHostAPI) SortBySize(reverse bool) *PrivateHostAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件リセット
func (api *PrivateHostAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *PrivateHostAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *PrivateHostAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *PrivateHostAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *PrivateHostAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *PrivateHostAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *PrivateHostAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *PrivateHostAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *PrivateHostAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *PrivateHostAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *PrivateHostAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *PrivateHostAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *PrivateHostAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *PrivateHostAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *PrivateHostAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *PrivateHostAPI) SortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *PrivateHostAPI) New() *sacloud.PrivateHost {
return &sacloud.PrivateHost{}
}
// Create 新規作成
func (api *PrivateHostAPI) Create(value *sacloud.PrivateHost) (*sacloud.PrivateHost, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *PrivateHostAPI) Read(id int64) (*sacloud.PrivateHost, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *PrivateHostAPI) Update(id int64, value *sacloud.PrivateHost) (*sacloud.PrivateHost, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *PrivateHostAPI) Delete(id int64) (*sacloud.PrivateHost, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *PrivateHostAPI) setStateValue(setFunc func(*sacloud.Request)) *PrivateHostAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *PrivateHostAPI) request(f func(*sacloud.Response) error) (*sacloud.PrivateHost, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.PrivateHost, nil
}
func (api *PrivateHostAPI) createRequest(value *sacloud.PrivateHost) *sacloud.Request {
req := &sacloud.Request{}
req.PrivateHost = value
return req
}

View file

@ -0,0 +1,18 @@
package api
// ProductDiskAPI ディスクプランAPI
type ProductDiskAPI struct {
*baseAPI
}
// NewProductDiskAPI ディスクプランAPI作成
func NewProductDiskAPI(client *Client) *ProductDiskAPI {
return &ProductDiskAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "product/disk"
},
},
}
}

View file

@ -0,0 +1,239 @@
package api
/************************************************
generated by IDE. for [ProductDiskAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *ProductDiskAPI) Reset() *ProductDiskAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ProductDiskAPI) Offset(offset int) *ProductDiskAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ProductDiskAPI) Limit(limit int) *ProductDiskAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ProductDiskAPI) Include(key string) *ProductDiskAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ProductDiskAPI) Exclude(key string) *ProductDiskAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *ProductDiskAPI) FilterBy(key string, value interface{}) *ProductDiskAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductDiskAPI) FilterMultiBy(key string, value interface{}) *ProductDiskAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ProductDiskAPI) WithNameLike(name string) *ProductDiskAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *ProductDiskAPI) WithTag(tag string) *ProductDiskAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *ProductDiskAPI) WithTags(tags []string) *ProductDiskAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductDiskAPI) WithSizeGib(size int) *ProductDiskAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *ProductDiskAPI) WithSharedScope() *ProductDiskAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *ProductDiskAPI) WithUserScope() *ProductDiskAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *ProductDiskAPI) SortBy(key string, reverse bool) *ProductDiskAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ProductDiskAPI) SortByName(reverse bool) *ProductDiskAPI {
api.sortByName(reverse)
return api
}
// func (api *ProductDiskAPI) SortBySize(reverse bool) *ProductDiskAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *ProductDiskAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ProductDiskAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ProductDiskAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ProductDiskAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ProductDiskAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *ProductDiskAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductDiskAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ProductDiskAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *ProductDiskAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *ProductDiskAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductDiskAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *ProductDiskAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *ProductDiskAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *ProductDiskAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ProductDiskAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *ProductDiskAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *ProductDiskAPI) New() *sacloud.ProductDisk {
// return &sacloud.ProductDisk{}
// }
// func (api *ProductDiskAPI) Create(value *sacloud.ProductDisk) (*sacloud.ProductDisk, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// Read 読み取り
func (api *ProductDiskAPI) Read(id int64) (*sacloud.ProductDisk, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// func (api *ProductDiskAPI) Update(id int64, value *sacloud.ProductDisk) (*sacloud.ProductDisk, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *ProductDiskAPI) Delete(id int64) (*sacloud.ProductDisk, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *ProductDiskAPI) setStateValue(setFunc func(*sacloud.Request)) *ProductDiskAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ProductDiskAPI) request(f func(*sacloud.Response) error) (*sacloud.ProductDisk, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.DiskPlan, nil
}
func (api *ProductDiskAPI) createRequest(value *sacloud.ProductDisk) *sacloud.Request {
req := &sacloud.Request{}
req.DiskPlan = value
return req
}

View file

@ -0,0 +1,18 @@
package api
// ProductInternetAPI ルータープランAPI
type ProductInternetAPI struct {
*baseAPI
}
// NewProductInternetAPI ルータープランAPI作成
func NewProductInternetAPI(client *Client) *ProductInternetAPI {
return &ProductInternetAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "product/internet"
},
},
}
}

View file

@ -0,0 +1,239 @@
package api
/************************************************
generated by IDE. for [ProductInternetAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *ProductInternetAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ProductInternetAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ProductInternetAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ProductInternetAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ProductInternetAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *ProductInternetAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductInternetAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ProductInternetAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *ProductInternetAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *ProductInternetAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductInternetAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *ProductInternetAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *ProductInternetAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *ProductInternetAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ProductInternetAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *ProductInternetAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *ProductInternetAPI) Reset() *ProductInternetAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ProductInternetAPI) Offset(offset int) *ProductInternetAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ProductInternetAPI) Limit(limit int) *ProductInternetAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ProductInternetAPI) Include(key string) *ProductInternetAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ProductInternetAPI) Exclude(key string) *ProductInternetAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *ProductInternetAPI) FilterBy(key string, value interface{}) *ProductInternetAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductInternetAPI) FilterMultiBy(key string, value interface{}) *ProductInternetAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ProductInternetAPI) WithNameLike(name string) *ProductInternetAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *ProductInternetAPI) WithTag(tag string) *ProductInternetAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *ProductInternetAPI) WithTags(tags []string) *ProductInternetAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductInternetAPI) WithSizeGib(size int) *ProductInternetAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *ProductInternetAPI) WithSharedScope() *ProductInternetAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *ProductInternetAPI) WithUserScope() *ProductInternetAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *ProductInternetAPI) SortBy(key string, reverse bool) *ProductInternetAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ProductInternetAPI) SortByName(reverse bool) *ProductInternetAPI {
api.sortByName(reverse)
return api
}
// func (api *ProductInternetAPI) SortBySize(reverse bool) *ProductInternetAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *ProductInternetAPI) New() *sacloud.ProductInternet {
// return &sacloud.ProductInternet{}
//}
// func (api *ProductInternetAPI) Create(value *sacloud.ProductInternet) (*sacloud.ProductInternet, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// Read 読み取り
func (api *ProductInternetAPI) Read(id int64) (*sacloud.ProductInternet, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// func (api *ProductInternetAPI) Update(id int64, value *sacloud.ProductInternet) (*sacloud.ProductInternet, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *ProductInternetAPI) Delete(id int64) (*sacloud.ProductInternet, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *ProductInternetAPI) setStateValue(setFunc func(*sacloud.Request)) *ProductInternetAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ProductInternetAPI) request(f func(*sacloud.Response) error) (*sacloud.ProductInternet, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.InternetPlan, nil
}
func (api *ProductInternetAPI) createRequest(value *sacloud.ProductInternet) *sacloud.Request {
req := &sacloud.Request{}
req.InternetPlan = value
return req
}

View file

@ -0,0 +1,18 @@
package api
// ProductLicenseAPI ライセンスプランAPI
type ProductLicenseAPI struct {
*baseAPI
}
// NewProductLicenseAPI ライセンスプランAPI作成
func NewProductLicenseAPI(client *Client) *ProductLicenseAPI {
return &ProductLicenseAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "product/license"
},
},
}
}

View file

@ -0,0 +1,235 @@
package api
/************************************************
generated by IDE. for [ProductLicenseAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *ProductLicenseAPI) Reset() *ProductLicenseAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ProductLicenseAPI) Offset(offset int) *ProductLicenseAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ProductLicenseAPI) Limit(limit int) *ProductLicenseAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ProductLicenseAPI) Include(key string) *ProductLicenseAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ProductLicenseAPI) Exclude(key string) *ProductLicenseAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *ProductLicenseAPI) FilterBy(key string, value interface{}) *ProductLicenseAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductLicenseAPI) FilterMultiBy(key string, value interface{}) *ProductLicenseAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ProductLicenseAPI) WithNameLike(name string) *ProductLicenseAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *ProductLicenseAPI) WithTag(tag string) *ProductLicenseAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *ProductLicenseAPI) WithTags(tags []string) *ProductLicenseAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductLicenseAPI) WithSizeGib(size int) *ProductLicenseAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *ProductLicenseAPI) WithSharedScope() *ProductLicenseAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *ProductLicenseAPI) WithUserScope() *ProductLicenseAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *ProductLicenseAPI) SortBy(key string, reverse bool) *ProductLicenseAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ProductLicenseAPI) SortByName(reverse bool) *ProductLicenseAPI {
api.sortByName(reverse)
return api
}
// func (api *ProductLicenseAPI) SortBySize(reverse bool) *ProductLicenseAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *ProductLicenseAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ProductLicenseAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ProductLicenseAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ProductLicenseAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ProductLicenseAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *ProductLicenseAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductLicenseAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ProductLicenseAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *ProductLicenseAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *ProductLicenseAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductLicenseAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *ProductLicenseAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *ProductLicenseAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *ProductLicenseAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ProductLicenseAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *ProductLicenseAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *ProductLicenseAPI) Create(value *sacloud.ProductLicense) (*sacloud.ProductLicense, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// Read 読み取り
func (api *ProductLicenseAPI) Read(id int64) (*sacloud.ProductLicense, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// func (api *ProductLicenseAPI) Update(id int64, value *sacloud.ProductLicense) (*sacloud.ProductLicense, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *ProductLicenseAPI) Delete(id int64) (*sacloud.ProductLicense, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *ProductLicenseAPI) setStateValue(setFunc func(*sacloud.Request)) *ProductLicenseAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ProductLicenseAPI) request(f func(*sacloud.Response) error) (*sacloud.ProductLicense, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.LicenseInfo, nil
}
func (api *ProductLicenseAPI) createRequest(value *sacloud.ProductLicense) *sacloud.Request {
req := &sacloud.Request{}
req.LicenseInfo = value
return req
}

View file

@ -0,0 +1,19 @@
package api
// ProductPrivateHostAPI 専有ホストプランAPI
type ProductPrivateHostAPI struct {
*baseAPI
}
// NewProductPrivateHostAPI 専有ホストプランAPI作成
func NewProductPrivateHostAPI(client *Client) *ProductPrivateHostAPI {
return &ProductPrivateHostAPI{
&baseAPI{
client: client,
// FuncGetResourceURL
FuncGetResourceURL: func() string {
return "product/privatehost"
},
},
}
}

View file

@ -0,0 +1,239 @@
package api
/************************************************
generated by IDE. for [ProductPrivateHostAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *ProductPrivateHostAPI) Reset() *ProductPrivateHostAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ProductPrivateHostAPI) Offset(offset int) *ProductPrivateHostAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ProductPrivateHostAPI) Limit(limit int) *ProductPrivateHostAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ProductPrivateHostAPI) Include(key string) *ProductPrivateHostAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ProductPrivateHostAPI) Exclude(key string) *ProductPrivateHostAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *ProductPrivateHostAPI) FilterBy(key string, value interface{}) *ProductPrivateHostAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductPrivateHostAPI) FilterMultiBy(key string, value interface{}) *ProductPrivateHostAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ProductPrivateHostAPI) WithNameLike(name string) *ProductPrivateHostAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *ProductPrivateHostAPI) WithTag(tag string) *ProductPrivateHostAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *ProductPrivateHostAPI) WithTags(tags []string) *ProductPrivateHostAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductPrivateHostAPI) WithSizeGib(size int) *ProductPrivateHostAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *ProductPrivateHostAPI) WithSharedScope() *ProductPrivateHostAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *ProductPrivateHostAPI) WithUserScope() *ProductPrivateHostAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *ProductPrivateHostAPI) SortBy(key string, reverse bool) *ProductPrivateHostAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ProductPrivateHostAPI) SortByName(reverse bool) *ProductPrivateHostAPI {
api.sortByName(reverse)
return api
}
// func (api *ProductPrivateHostAPI) SortBySize(reverse bool) *ProductPrivateHostAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *ProductPrivateHostAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ProductPrivateHostAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ProductPrivateHostAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ProductPrivateHostAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ProductPrivateHostAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *ProductPrivateHostAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductPrivateHostAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ProductPrivateHostAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *ProductPrivateHostAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *ProductPrivateHostAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductPrivateHostAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *ProductPrivateHostAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *ProductPrivateHostAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *ProductPrivateHostAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ProductPrivateHostAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *ProductPrivateHostAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *ProductPrivateHostAPI) New() *sacloud.ProductPrivateHost {
// return &sacloud.ProductPrivateHost{}
//}
// func (api *ProductPrivateHostAPI) Create(value *sacloud.ProductPrivateHost) (*sacloud.ProductPrivateHost, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// Read 読み取り
func (api *ProductPrivateHostAPI) Read(id int64) (*sacloud.ProductPrivateHost, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// func (api *ProductPrivateHostAPI) Update(id int64, value *sacloud.ProductPrivateHost) (*sacloud.ProductPrivateHost, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *ProductPrivateHostAPI) Delete(id int64) (*sacloud.ProductPrivateHost, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *ProductPrivateHostAPI) setStateValue(setFunc func(*sacloud.Request)) *ProductPrivateHostAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ProductPrivateHostAPI) request(f func(*sacloud.Response) error) (*sacloud.ProductPrivateHost, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.PrivateHostPlan, nil
}
func (api *ProductPrivateHostAPI) createRequest(value *sacloud.ProductPrivateHost) *sacloud.Request {
req := &sacloud.Request{}
req.PrivateHostPlan = value
return req
}

View file

@ -0,0 +1,71 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"strconv"
)
// ProductServerAPI サーバープランAPI
type ProductServerAPI struct {
*baseAPI
}
// NewProductServerAPI サーバープランAPI作成
func NewProductServerAPI(client *Client) *ProductServerAPI {
return &ProductServerAPI{
&baseAPI{
client: client,
// FuncGetResourceURL
FuncGetResourceURL: func() string {
return "product/server"
},
},
}
}
func (api *ProductServerAPI) getPlanIDBySpec(core int, memGB int) (int64, error) {
//assert args
if core <= 0 {
return -1, fmt.Errorf("Invalid Parameter: CPU Core")
}
if memGB <= 0 {
return -1, fmt.Errorf("Invalid Parameter: Memory Size(GB)")
}
return strconv.ParseInt(fmt.Sprintf("%d%03d", memGB, core), 10, 64)
}
// IsValidPlan 指定のコア数/メモリサイズのプランが存在し、有効であるか判定
func (api *ProductServerAPI) IsValidPlan(core int, memGB int) (bool, error) {
planID, err := api.getPlanIDBySpec(core, memGB)
if err != nil {
return false, err
}
productServer, err := api.Read(planID)
if err != nil {
return false, err
}
if productServer != nil {
return true, nil
}
return false, fmt.Errorf("Server Plan[%d] Not Found", planID)
}
// GetBySpec 指定のコア数/メモリサイズのサーバープランを取得
func (api *ProductServerAPI) GetBySpec(core int, memGB int) (*sacloud.ProductServer, error) {
planID, err := api.getPlanIDBySpec(core, memGB)
productServer, err := api.Read(planID)
if err != nil {
return nil, err
}
return productServer, nil
}

View file

@ -0,0 +1,239 @@
package api
/************************************************
generated by IDE. for [ProductServerAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *ProductServerAPI) Reset() *ProductServerAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ProductServerAPI) Offset(offset int) *ProductServerAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ProductServerAPI) Limit(limit int) *ProductServerAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ProductServerAPI) Include(key string) *ProductServerAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ProductServerAPI) Exclude(key string) *ProductServerAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *ProductServerAPI) FilterBy(key string, value interface{}) *ProductServerAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductServerAPI) FilterMultiBy(key string, value interface{}) *ProductServerAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ProductServerAPI) WithNameLike(name string) *ProductServerAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *ProductServerAPI) WithTag(tag string) *ProductServerAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *ProductServerAPI) WithTags(tags []string) *ProductServerAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductServerAPI) WithSizeGib(size int) *ProductServerAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *ProductServerAPI) WithSharedScope() *ProductServerAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *ProductServerAPI) WithUserScope() *ProductServerAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *ProductServerAPI) SortBy(key string, reverse bool) *ProductServerAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ProductServerAPI) SortByName(reverse bool) *ProductServerAPI {
api.sortByName(reverse)
return api
}
// func (api *ProductServerAPI) SortBySize(reverse bool) *ProductServerAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *ProductServerAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ProductServerAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ProductServerAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ProductServerAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ProductServerAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *ProductServerAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ProductServerAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ProductServerAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *ProductServerAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *ProductServerAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ProductServerAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *ProductServerAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *ProductServerAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *ProductServerAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ProductServerAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *ProductServerAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *ProductServerAPI) New() *sacloud.ProductServer {
// return &sacloud.ProductServer{}
//}
// func (api *ProductServerAPI) Create(value *sacloud.ProductServer) (*sacloud.ProductServer, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// Read 読み取り
func (api *ProductServerAPI) Read(id int64) (*sacloud.ProductServer, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// func (api *ProductServerAPI) Update(id int64, value *sacloud.ProductServer) (*sacloud.ProductServer, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *ProductServerAPI) Delete(id int64) (*sacloud.ProductServer, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *ProductServerAPI) setStateValue(setFunc func(*sacloud.Request)) *ProductServerAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ProductServerAPI) request(f func(*sacloud.Response) error) (*sacloud.ProductServer, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.ServerPlan, nil
}
func (api *ProductServerAPI) createRequest(value *sacloud.ProductServer) *sacloud.Request {
req := &sacloud.Request{}
req.ServerPlan = value
return req
}

View file

@ -0,0 +1,18 @@
package api
// PublicPriceAPI 料金情報API
type PublicPriceAPI struct {
*baseAPI
}
// NewPublicPriceAPI 料金情報API
func NewPublicPriceAPI(client *Client) *PublicPriceAPI {
return &PublicPriceAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "public/price"
},
},
}
}

View file

@ -0,0 +1,236 @@
package api
/************************************************
generated by IDE. for [PublicPriceAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *PublicPriceAPI) Reset() *PublicPriceAPI {
api.reset()
return api
}
// Offset オフセット
func (api *PublicPriceAPI) Offset(offset int) *PublicPriceAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *PublicPriceAPI) Limit(limit int) *PublicPriceAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *PublicPriceAPI) Include(key string) *PublicPriceAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *PublicPriceAPI) Exclude(key string) *PublicPriceAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *PublicPriceAPI) FilterBy(key string, value interface{}) *PublicPriceAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *PublicPriceAPI) FilterMultiBy(key string, value interface{}) *PublicPriceAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件(DisplayName)
func (api *PublicPriceAPI) WithNameLike(name string) *PublicPriceAPI {
return api.FilterBy("DisplayName", name)
}
//// WithTag
//func (api *PublicPriceAPI) WithTag(tag string) *PublicPriceAPI {
// return api.FilterBy("Tags.Name", tag)
//}
//// WithTags
//func (api *PublicPriceAPI) WithTags(tags []string) *PublicPriceAPI {
// return api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *PublicPriceAPI) WithSizeGib(size int) *PublicPriceAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *PublicPriceAPI) WithSharedScope() *PublicPriceAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *PublicPriceAPI) WithUserScope() *PublicPriceAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *PublicPriceAPI) SortBy(key string, reverse bool) *PublicPriceAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート(DisplayName)
func (api *PublicPriceAPI) SortByName(reverse bool) *PublicPriceAPI {
api.sortBy("DisplayName", reverse)
return api
}
// func (api *PublicPriceAPI) SortBySize(reverse bool) *PublicPriceAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *PublicPriceAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *PublicPriceAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *PublicPriceAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *PublicPriceAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *PublicPriceAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *PublicPriceAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *PublicPriceAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件(DisplayName)
func (api *PublicPriceAPI) SetNameLike(name string) {
api.FilterBy("DisplayName", name)
}
//// SetTag
//func (api *PublicPriceAPI) SetTag(tag string) {
//}
//// SetTags
//func (api *PublicPriceAPI) SetTags(tags []string) {
//}
// func (api *PublicPriceAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *PublicPriceAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *PublicPriceAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *PublicPriceAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート(DisplayName)
func (api *PublicPriceAPI) SetSortByName(reverse bool) {
api.sortBy("DisplayName", reverse)
}
// func (api *PublicPriceAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *PublicPriceAPI) New() *sacloud.PublicPrice {
// return &sacloud.PublicPrice{}
// }
// func (api *PublicPriceAPI) Create(value *sacloud.PublicPrice) (*sacloud.PublicPrice, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *PublicPriceAPI) Read(id int64) (*sacloud.PublicPrice, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *PublicPriceAPI) Update(id int64, value *sacloud.PublicPrice) (*sacloud.PublicPrice, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *PublicPriceAPI) Delete(id int64) (*sacloud.PublicPrice, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *PublicPriceAPI) setStateValue(setFunc func(*sacloud.Request)) *PublicPriceAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *PublicPriceAPI) request(f func(*sacloud.Response) error) (*sacloud.PublicPrice, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.ServiceClass, nil
//}
//
//func (api *PublicPriceAPI) createRequest(value *sacloud.PublicPrice) *sacloud.Request {
// req := &sacloud.Request{}
// req.ServiceClass = value
// return req
//}

18
vendor/github.com/sacloud/libsacloud/api/region.go generated vendored Normal file
View file

@ -0,0 +1,18 @@
package api
// RegionAPI リージョンAPI
type RegionAPI struct {
*baseAPI
}
// NewRegionAPI リージョンAPI作成
func NewRegionAPI(client *Client) *RegionAPI {
return &RegionAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "region"
},
},
}
}

239
vendor/github.com/sacloud/libsacloud/api/region_gen.go generated vendored Normal file
View file

@ -0,0 +1,239 @@
package api
/************************************************
generated by IDE. for [RegionAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *RegionAPI) Reset() *RegionAPI {
api.reset()
return api
}
// Offset オフセット
func (api *RegionAPI) Offset(offset int) *RegionAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *RegionAPI) Limit(limit int) *RegionAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *RegionAPI) Include(key string) *RegionAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *RegionAPI) Exclude(key string) *RegionAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *RegionAPI) FilterBy(key string, value interface{}) *RegionAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *RegionAPI) FilterMultiBy(key string, value interface{}) *RegionAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *RegionAPI) WithNameLike(name string) *RegionAPI {
return api.FilterBy("Name", name)
}
//// WithTag
//func (api *RegionAPI) WithTag(tag string) *RegionAPI {
// return api.FilterBy("Tags.Name", tag)
//}
//
//// WithTags
//func (api *RegionAPI) WithTags(tags []string) *RegionAPI {
// return api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *RegionAPI) WithSizeGib(size int) *RegionAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *RegionAPI) WithSharedScope() *RegionAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *RegionAPI) WithUserScope() *RegionAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *RegionAPI) SortBy(key string, reverse bool) *RegionAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *RegionAPI) SortByName(reverse bool) *RegionAPI {
api.sortByName(reverse)
return api
}
// func (api *RegionAPI) SortBySize(reverse bool) *RegionAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *RegionAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *RegionAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *RegionAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *RegionAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *RegionAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *RegionAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *RegionAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *RegionAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
//// SetTag
//func (api *RegionAPI) SetTag(tag string) {
// api.FilterBy("Tags.Name", tag)
//}
//
//// SetTags
//func (api *RegionAPI) SetTags(tags []string) {
// api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *RegionAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *RegionAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *RegionAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *RegionAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *RegionAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *RegionAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *RegionAPI) New() *sacloud.Region {
// return &sacloud.Region{}
//}
// func (api *RegionAPI) Create(value *sacloud.Region) (*sacloud.Region, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// Read 読み取り
func (api *RegionAPI) Read(id int64) (*sacloud.Region, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// func (api *RegionAPI) Update(id int64, value *sacloud.Region) (*sacloud.Region, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *RegionAPI) Delete(id int64) (*sacloud.Region, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *RegionAPI) setStateValue(setFunc func(*sacloud.Request)) *RegionAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *RegionAPI) request(f func(*sacloud.Response) error) (*sacloud.Region, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Region, nil
}
func (api *RegionAPI) createRequest(value *sacloud.Region) *sacloud.Request {
req := &sacloud.Request{}
req.Region = value
return req
}

287
vendor/github.com/sacloud/libsacloud/api/server.go generated vendored Normal file
View file

@ -0,0 +1,287 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
// ServerAPI サーバーAPI
type ServerAPI struct {
*baseAPI
}
// NewServerAPI サーバーAPI作成
func NewServerAPI(client *Client) *ServerAPI {
return &ServerAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "server"
},
},
}
}
// WithPlan サーバープラン条件
func (api *ServerAPI) WithPlan(planID string) *ServerAPI {
return api.FilterBy("ServerPlan.ID", planID)
}
// WithStatus インスタンスステータス条件
func (api *ServerAPI) WithStatus(status string) *ServerAPI {
return api.FilterBy("Instance.Status", status)
}
// WithStatusUp 起動状態条件
func (api *ServerAPI) WithStatusUp() *ServerAPI {
return api.WithStatus("up")
}
// WithStatusDown ダウン状態条件
func (api *ServerAPI) WithStatusDown() *ServerAPI {
return api.WithStatus("down")
}
// WithISOImage ISOイメージ条件
func (api *ServerAPI) WithISOImage(imageID int64) *ServerAPI {
return api.FilterBy("Instance.CDROM.ID", imageID)
}
// SortByCPU CPUコア数でのソート
func (api *ServerAPI) SortByCPU(reverse bool) *ServerAPI {
api.sortBy("ServerPlan.CPU", reverse)
return api
}
// SortByMemory メモリサイズでのソート
func (api *ServerAPI) SortByMemory(reverse bool) *ServerAPI {
api.sortBy("ServerPlan.MemoryMB", reverse)
return api
}
// DeleteWithDisk 指定のディスクと共に削除する
func (api *ServerAPI) DeleteWithDisk(id int64, disks []int64) (*sacloud.Server, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, map[string]interface{}{"WithDisk": disks}, res)
})
}
// State ステータス(Availability)取得
func (api *ServerAPI) State(id int64) (string, error) {
server, err := api.Read(id)
if err != nil {
return "", err
}
return string(server.Availability), nil
}
// IsUp 起動しているか判定
func (api *ServerAPI) IsUp(id int64) (bool, error) {
server, err := api.Read(id)
if err != nil {
return false, err
}
return server.Instance.IsUp(), nil
}
// IsDown ダウンしているか判定
func (api *ServerAPI) IsDown(id int64) (bool, error) {
server, err := api.Read(id)
if err != nil {
return false, err
}
return server.Instance.IsDown(), nil
}
// Boot 起動
func (api *ServerAPI) Boot(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Shutdown シャットダウン(graceful)
func (api *ServerAPI) Shutdown(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Stop シャットダウン(force)
func (api *ServerAPI) Stop(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"Force": true})
}
// RebootForce 再起動
func (api *ServerAPI) RebootForce(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// SleepUntilUp 起動するまで待機
func (api *ServerAPI) SleepUntilUp(id int64, timeout time.Duration) error {
handler := waitingForUpFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepUntilDown ダウンするまで待機
func (api *ServerAPI) SleepUntilDown(id int64, timeout time.Duration) error {
handler := waitingForDownFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// ChangePlan サーバープラン変更(サーバーIDが変更となるため注意)
func (api *ServerAPI) ChangePlan(serverID int64, planID string) (*sacloud.Server, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/to/plan/%s", api.getResourceURL(), serverID, planID)
)
return api.request(func(res *sacloud.Response) error {
return api.baseAPI.request(method, uri, nil, res)
})
}
// FindDisk 指定サーバーに接続されているディスク一覧を取得
func (api *ServerAPI) FindDisk(serverID int64) ([]sacloud.Disk, error) {
server, err := api.Read(serverID)
if err != nil {
return nil, err
}
return server.Disks, nil
}
// InsertCDROM ISOイメージを挿入
func (api *ServerAPI) InsertCDROM(serverID int64, cdromID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/cdrom", api.getResourceURL(), serverID)
)
req := &sacloud.Request{
SakuraCloudResources: sacloud.SakuraCloudResources{
CDROM: &sacloud.CDROM{Resource: &sacloud.Resource{ID: cdromID}},
},
}
return api.modify(method, uri, req)
}
// EjectCDROM ISOイメージを取り出し
func (api *ServerAPI) EjectCDROM(serverID int64, cdromID int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/cdrom", api.getResourceURL(), serverID)
)
req := &sacloud.Request{
SakuraCloudResources: sacloud.SakuraCloudResources{
CDROM: &sacloud.CDROM{Resource: &sacloud.Resource{ID: cdromID}},
},
}
return api.modify(method, uri, req)
}
// NewKeyboardRequest キーボード入力リクエストパラメーター作成
func (api *ServerAPI) NewKeyboardRequest() *sacloud.KeyboardRequest {
return &sacloud.KeyboardRequest{}
}
// SendKey キーボード入力送信
func (api *ServerAPI) SendKey(serverID int64, body *sacloud.KeyboardRequest) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/keyboard", api.getResourceURL(), serverID)
)
return api.modify(method, uri, body)
}
// NewMouseRequest マウス入力リクエストパラメーター作成
func (api *ServerAPI) NewMouseRequest() *sacloud.MouseRequest {
return &sacloud.MouseRequest{
Buttons: &sacloud.MouseRequestButtons{},
}
}
// SendMouse マウス入力送信
func (api *ServerAPI) SendMouse(serverID int64, mouseIndex string, body *sacloud.MouseRequest) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/mouse/%s", api.getResourceURL(), serverID, mouseIndex)
)
return api.modify(method, uri, body)
}
// NewVNCSnapshotRequest VNCスナップショット取得リクエストパラメーター作成
func (api *ServerAPI) NewVNCSnapshotRequest() *sacloud.VNCSnapshotRequest {
return &sacloud.VNCSnapshotRequest{}
}
// GetVNCProxy VNCプロキシ情報取得
func (api *ServerAPI) GetVNCProxy(serverID int64) (*sacloud.VNCProxyResponse, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/vnc/proxy", api.getResourceURL(), serverID)
res = &sacloud.VNCProxyResponse{}
)
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res, nil
}
// GetVNCSize VNC画面サイズ取得
func (api *ServerAPI) GetVNCSize(serverID int64) (*sacloud.VNCSizeResponse, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/vnc/size", api.getResourceURL(), serverID)
res = &sacloud.VNCSizeResponse{}
)
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res, nil
}
// GetVNCSnapshot VNCスナップショット取得
func (api *ServerAPI) GetVNCSnapshot(serverID int64, body *sacloud.VNCSnapshotRequest) (*sacloud.VNCSnapshotResponse, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/vnc/snapshot", api.getResourceURL(), serverID)
res = &sacloud.VNCSnapshotResponse{}
)
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res, nil
}
// Monitor アクティビティーモニター(CPU-TIME)取得
func (api *ServerAPI) Monitor(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.monitor(id, body)
}

243
vendor/github.com/sacloud/libsacloud/api/server_gen.go generated vendored Normal file
View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [ServerAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *ServerAPI) Reset() *ServerAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ServerAPI) Offset(offset int) *ServerAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ServerAPI) Limit(limit int) *ServerAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ServerAPI) Include(key string) *ServerAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ServerAPI) Exclude(key string) *ServerAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *ServerAPI) FilterBy(key string, value interface{}) *ServerAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ServerAPI) FilterMultiBy(key string, value interface{}) *ServerAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ServerAPI) WithNameLike(name string) *ServerAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *ServerAPI) WithTag(tag string) *ServerAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *ServerAPI) WithTags(tags []string) *ServerAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ServerAPI) WithSizeGib(size int) *ServerAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *ServerAPI) WithSharedScope() *ServerAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *ServerAPI) WithUserScope() *ServerAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *ServerAPI) SortBy(key string, reverse bool) *ServerAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ServerAPI) SortByName(reverse bool) *ServerAPI {
api.sortByName(reverse)
return api
}
// func (api *ServerAPI) SortBySize(reverse bool) *ServerAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *ServerAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ServerAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ServerAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ServerAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ServerAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *ServerAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ServerAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ServerAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *ServerAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *ServerAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *ServerAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *ServerAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *ServerAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *ServerAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ServerAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *ServerAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *ServerAPI) New() *sacloud.Server {
return &sacloud.Server{}
}
// Create 新規作成
func (api *ServerAPI) Create(value *sacloud.Server) (*sacloud.Server, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *ServerAPI) Read(id int64) (*sacloud.Server, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *ServerAPI) Update(id int64, value *sacloud.Server) (*sacloud.Server, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *ServerAPI) Delete(id int64) (*sacloud.Server, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *ServerAPI) setStateValue(setFunc func(*sacloud.Request)) *ServerAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ServerAPI) request(f func(*sacloud.Response) error) (*sacloud.Server, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Server, nil
}
func (api *ServerAPI) createRequest(value *sacloud.Server) *sacloud.Request {
req := &sacloud.Request{}
req.Server = value
return req
}

219
vendor/github.com/sacloud/libsacloud/api/sim.go generated vendored Normal file
View file

@ -0,0 +1,219 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
// SearchSIMResponse SIM検索レスポンス
type SearchSIMResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// CommonServiceSIMItems SIMリスト
CommonServiceSIMItems []sacloud.SIM `json:"CommonServiceItems,omitempty"`
}
type simRequest struct {
CommonServiceSIMItem *sacloud.SIM `json:"CommonServiceItem,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type simResponse struct {
*sacloud.ResultFlagValue
*sacloud.SIM `json:"CommonServiceItem,omitempty"`
}
type simLogResponse struct {
Logs []sacloud.SIMLog `json:"logs,omitempty"`
IsOk bool `json:"is_ok,omitempty"`
}
// SIMAPI SIM API
type SIMAPI struct {
*baseAPI
}
// NewSIMAPI SIM API作成
func NewSIMAPI(client *Client) *SIMAPI {
return &SIMAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "commonserviceitem"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Provider.Class", "sim")
return res
},
},
}
}
// Find 検索
func (api *SIMAPI) Find() (*SearchSIMResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchSIMResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *SIMAPI) request(f func(*simResponse) error) (*sacloud.SIM, error) {
res := &simResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.SIM, nil
}
func (api *SIMAPI) createRequest(value *sacloud.SIM) *simRequest {
req := &simRequest{}
req.CommonServiceSIMItem = value
return req
}
// Create 新規作成
func (api *SIMAPI) Create(value *sacloud.SIM) (*sacloud.SIM, error) {
return api.request(func(res *simResponse) error {
return api.create(api.createRequest(value), res)
})
}
// New 新規作成用パラメーター作成
func (api *SIMAPI) New(name, iccID, passcode string) *sacloud.SIM {
return sacloud.CreateNewSIM(name, iccID, passcode)
}
// Read 読み取り
func (api *SIMAPI) Read(id int64) (*sacloud.SIM, error) {
return api.request(func(res *simResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *SIMAPI) Update(id int64, value *sacloud.SIM) (*sacloud.SIM, error) {
return api.request(func(res *simResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *SIMAPI) Delete(id int64) (*sacloud.SIM, error) {
return api.request(func(res *simResponse) error {
return api.delete(id, nil, res)
})
}
// Activate SIM有効化
func (api *SIMAPI) Activate(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/sim/activate", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Deactivate SIM無効化
func (api *SIMAPI) Deactivate(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/sim/deactivate", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// AssignIP SIMへのIP割り当て
func (api *SIMAPI) AssignIP(id int64, ip string) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/sim/ip", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]interface{}{
"sim": map[string]interface{}{
"ip": ip,
},
})
}
// ClearIP SIMからのIP割り当て解除
func (api *SIMAPI) ClearIP(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/sim/ip", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// IMEILock IMEIロック
func (api *SIMAPI) IMEILock(id int64, imei string) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/sim/imeilock", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]interface{}{
"sim": map[string]interface{}{
"imei": imei,
},
})
}
// IMEIUnlock IMEIアンロック
func (api *SIMAPI) IMEIUnlock(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/sim/imeilock", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Logs セッションログ取得
func (api *SIMAPI) Logs(id int64, body interface{}) ([]sacloud.SIMLog, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/sim/sessionlog", api.getResourceURL(), id)
)
res := &simLogResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Logs, nil
}
// Monitor アクティビティーモニター(Up/Down link BPS)取得
func (api *SIMAPI) Monitor(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/sim/metrics", api.getResourceURL(), id)
)
res := &sacloud.ResourceMonitorResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Data, nil
}

238
vendor/github.com/sacloud/libsacloud/api/sim_gen.go generated vendored Normal file
View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [SIMAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *SIMAPI) Reset() *SIMAPI {
api.reset()
return api
}
// Offset オフセット
func (api *SIMAPI) Offset(offset int) *SIMAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *SIMAPI) Limit(limit int) *SIMAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *SIMAPI) Include(key string) *SIMAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *SIMAPI) Exclude(key string) *SIMAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *SIMAPI) FilterBy(key string, value interface{}) *SIMAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SIMAPI) FilterMultiBy(key string, value interface{}) *SIMAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *SIMAPI) WithNameLike(name string) *SIMAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *SIMAPI) WithTag(tag string) *SIMAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *SIMAPI) WithTags(tags []string) *SIMAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SIMAPI) WithSizeGib(size int) *SIMAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *SIMAPI) WithSharedScope() *SIMAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *SIMAPI) WithUserScope() *SIMAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *SIMAPI) SortBy(key string, reverse bool) *SIMAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *SIMAPI) SortByName(reverse bool) *SIMAPI {
api.sortByName(reverse)
return api
}
// func (api *SIMAPI) SortBySize(reverse bool) *SIMAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *SIMAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *SIMAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *SIMAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *SIMAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *SIMAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *SIMAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SIMAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *SIMAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *SIMAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *SIMAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SIMAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *SIMAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *SIMAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *SIMAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *SIMAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *SIMAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *SIMAPI) New() *sacloud.SIM {
// return &sacloud.SIM{}
// }
// func (api *SIMAPI) Create(value *sacloud.SIM) (*sacloud.SIM, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *SIMAPI) Read(id string) (*sacloud.SIM, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *SIMAPI) Update(id string, value *sacloud.SIM) (*sacloud.SIM, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *SIMAPI) Delete(id string) (*sacloud.SIM, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *SIMAPI) setStateValue(setFunc func(*sacloud.Request)) *SIMAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *SIMAPI) request(f func(*sacloud.Response) error) (*sacloud.SIM, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.SIM, nil
//}
//
//func (api *SIMAPI) createRequest(value *sacloud.SIM) *simRequest {
// req := &simRequest{}
// req.CommonServiceSIMItem = value
// return req
//}

View file

@ -0,0 +1,133 @@
package api
import (
"encoding/json"
// "strings"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
//HACK: さくらのAPI側仕様: CommonServiceItemsの内容によってJSONフォーマットが異なるため
// DNS/GSLB/シンプル監視それぞれでリクエスト/レスポンスデータ型を定義する。
// SearchSimpleMonitorResponse シンプル監視検索レスポンス
type SearchSimpleMonitorResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// SimpleMonitors シンプル監視 リスト
SimpleMonitors []sacloud.SimpleMonitor `json:"CommonServiceItems,omitempty"`
}
type simpleMonitorRequest struct {
SimpleMonitor *sacloud.SimpleMonitor `json:"CommonServiceItem,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type simpleMonitorResponse struct {
*sacloud.ResultFlagValue
*sacloud.SimpleMonitor `json:"CommonServiceItem,omitempty"`
}
// SimpleMonitorAPI シンプル監視API
type SimpleMonitorAPI struct {
*baseAPI
}
// NewSimpleMonitorAPI シンプル監視API作成
func NewSimpleMonitorAPI(client *Client) *SimpleMonitorAPI {
return &SimpleMonitorAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "commonserviceitem"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Provider.Class", "simplemon")
return res
},
},
}
}
// Find 検索
func (api *SimpleMonitorAPI) Find() (*SearchSimpleMonitorResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchSimpleMonitorResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *SimpleMonitorAPI) request(f func(*simpleMonitorResponse) error) (*sacloud.SimpleMonitor, error) {
res := &simpleMonitorResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.SimpleMonitor, nil
}
func (api *SimpleMonitorAPI) createRequest(value *sacloud.SimpleMonitor) *simpleMonitorResponse {
return &simpleMonitorResponse{SimpleMonitor: value}
}
// New 新規作成用パラメーター作成
func (api *SimpleMonitorAPI) New(target string) *sacloud.SimpleMonitor {
return sacloud.CreateNewSimpleMonitor(target)
}
// Create 新規作成
func (api *SimpleMonitorAPI) Create(value *sacloud.SimpleMonitor) (*sacloud.SimpleMonitor, error) {
return api.request(func(res *simpleMonitorResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *SimpleMonitorAPI) Read(id int64) (*sacloud.SimpleMonitor, error) {
return api.request(func(res *simpleMonitorResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *SimpleMonitorAPI) Update(id int64, value *sacloud.SimpleMonitor) (*sacloud.SimpleMonitor, error) {
return api.request(func(res *simpleMonitorResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *SimpleMonitorAPI) Delete(id int64) (*sacloud.SimpleMonitor, error) {
return api.request(func(res *simpleMonitorResponse) error {
return api.delete(id, nil, res)
})
}
// MonitorResponseTimeSec アクティビティーモニター(レスポンスタイム)取得
func (api *SimpleMonitorAPI) MonitorResponseTimeSec(id int64, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/activity/responsetimesec/monitor", api.getResourceURL(), id)
)
res := &sacloud.ResourceMonitorResponse{}
err := api.baseAPI.request(method, uri, body, res)
if err != nil {
return nil, err
}
return res.Data, nil
}

View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [SimpleMonitorAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *SimpleMonitorAPI) Reset() *SimpleMonitorAPI {
api.reset()
return api
}
// Offset オフセット
func (api *SimpleMonitorAPI) Offset(offset int) *SimpleMonitorAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *SimpleMonitorAPI) Limit(limit int) *SimpleMonitorAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *SimpleMonitorAPI) Include(key string) *SimpleMonitorAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *SimpleMonitorAPI) Exclude(key string) *SimpleMonitorAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *SimpleMonitorAPI) FilterBy(key string, value interface{}) *SimpleMonitorAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SimpleMonitorAPI) FilterMultiBy(key string, value interface{}) *SimpleMonitorAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *SimpleMonitorAPI) WithNameLike(name string) *SimpleMonitorAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *SimpleMonitorAPI) WithTag(tag string) *SimpleMonitorAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *SimpleMonitorAPI) WithTags(tags []string) *SimpleMonitorAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SimpleMonitorAPI) WithSizeGib(size int) *SimpleMonitorAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *SimpleMonitorAPI) WithSharedScope() *SimpleMonitorAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *SimpleMonitorAPI) WithUserScope() *SimpleMonitorAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *SimpleMonitorAPI) SortBy(key string, reverse bool) *SimpleMonitorAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *SimpleMonitorAPI) SortByName(reverse bool) *SimpleMonitorAPI {
api.sortByName(reverse)
return api
}
// func (api *SimpleMonitorAPI) SortBySize(reverse bool) *SimpleMonitorAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *SimpleMonitorAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *SimpleMonitorAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *SimpleMonitorAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *SimpleMonitorAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *SimpleMonitorAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *SimpleMonitorAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SimpleMonitorAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *SimpleMonitorAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *SimpleMonitorAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *SimpleMonitorAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SimpleMonitorAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *SimpleMonitorAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *SimpleMonitorAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *SimpleMonitorAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *SimpleMonitorAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *SimpleMonitorAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *SimpleMonitorAPI) New() *sacloud.SimpleMonitor {
// return &sacloud.SimpleMonitor{}
// }
// func (api *SimpleMonitorAPI) Create(value *sacloud.SimpleMonitor) (*sacloud.SimpleMonitor, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *SimpleMonitorAPI) Read(id string) (*sacloud.SimpleMonitor, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *SimpleMonitorAPI) Update(id string, value *sacloud.SimpleMonitor) (*sacloud.SimpleMonitor, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *SimpleMonitorAPI) Delete(id string) (*sacloud.SimpleMonitor, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *SimpleMonitorAPI) setStateValue(setFunc func(*sacloud.Request)) *SimpleMonitorAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *SimpleMonitorAPI) request(f func(*sacloud.Response) error) (*sacloud.SimpleMonitor, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.SimpleMonitor, nil
//}
//
//func (api *SimpleMonitorAPI) createRequest(value *sacloud.SimpleMonitor) *sacloud.Request {
// req := &sacloud.Request{}
// req.SimpleMonitor = value
// return req
//}

64
vendor/github.com/sacloud/libsacloud/api/ssh_key.go generated vendored Normal file
View file

@ -0,0 +1,64 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
// SSHKeyAPI 公開鍵API
type SSHKeyAPI struct {
*baseAPI
}
// NewSSHKeyAPI 公開鍵API作成
func NewSSHKeyAPI(client *Client) *SSHKeyAPI {
return &SSHKeyAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "sshkey"
},
},
}
}
// Generate 公開鍵の作成
func (api *SSHKeyAPI) Generate(name string, passPhrase string, desc string) (*sacloud.SSHKeyGenerated, error) {
var (
method = "POST"
uri = fmt.Sprintf("%s/generate", api.getResourceURL())
)
type genRequest struct {
Name string
GenerateFormat string
Description string
PassPhrase string
}
type request struct {
SSHKey genRequest
}
type response struct {
*sacloud.ResultFlagValue
SSHKey *sacloud.SSHKeyGenerated
}
body := &request{
SSHKey: genRequest{
Name: name,
GenerateFormat: "openssh",
PassPhrase: passPhrase,
Description: desc,
},
}
res := &response{}
_, err := api.action(method, uri, body, res)
if err != nil {
return nil, fmt.Errorf("SSHKeyAPI: generate SSHKey is failed: %s", err)
}
return res.SSHKey, nil
}

243
vendor/github.com/sacloud/libsacloud/api/ssh_key_gen.go generated vendored Normal file
View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [SSHKeyAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *SSHKeyAPI) Reset() *SSHKeyAPI {
api.reset()
return api
}
// Offset オフセット
func (api *SSHKeyAPI) Offset(offset int) *SSHKeyAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *SSHKeyAPI) Limit(limit int) *SSHKeyAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *SSHKeyAPI) Include(key string) *SSHKeyAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *SSHKeyAPI) Exclude(key string) *SSHKeyAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *SSHKeyAPI) FilterBy(key string, value interface{}) *SSHKeyAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SSHKeyAPI) FilterMultiBy(key string, value interface{}) *SSHKeyAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *SSHKeyAPI) WithNameLike(name string) *SSHKeyAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *SSHKeyAPI) WithTag(tag string) *SSHKeyAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *SSHKeyAPI) WithTags(tags []string) *SSHKeyAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SSHKeyAPI) WithSizeGib(size int) *SSHKeyAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *SSHKeyAPI) WithSharedScope() *SSHKeyAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *SSHKeyAPI) WithUserScope() *SSHKeyAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *SSHKeyAPI) SortBy(key string, reverse bool) *SSHKeyAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *SSHKeyAPI) SortByName(reverse bool) *SSHKeyAPI {
api.sortByName(reverse)
return api
}
// func (api *SSHKeyAPI) SortBySize(reverse bool) *SSHKeyAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *SSHKeyAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *SSHKeyAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *SSHKeyAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *SSHKeyAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *SSHKeyAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *SSHKeyAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SSHKeyAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *SSHKeyAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *SSHKeyAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *SSHKeyAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SSHKeyAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *SSHKeyAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *SSHKeyAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *SSHKeyAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *SSHKeyAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *SSHKeyAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *SSHKeyAPI) New() *sacloud.SSHKey {
return &sacloud.SSHKey{}
}
// Create 新規作成
func (api *SSHKeyAPI) Create(value *sacloud.SSHKey) (*sacloud.SSHKey, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *SSHKeyAPI) Read(id int64) (*sacloud.SSHKey, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *SSHKeyAPI) Update(id int64, value *sacloud.SSHKey) (*sacloud.SSHKey, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *SSHKeyAPI) Delete(id int64) (*sacloud.SSHKey, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *SSHKeyAPI) setStateValue(setFunc func(*sacloud.Request)) *SSHKeyAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *SSHKeyAPI) request(f func(*sacloud.Response) error) (*sacloud.SSHKey, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.SSHKey, nil
}
func (api *SSHKeyAPI) createRequest(value *sacloud.SSHKey) *sacloud.Request {
req := &sacloud.Request{}
req.SSHKey = value
return req
}

18
vendor/github.com/sacloud/libsacloud/api/subnet.go generated vendored Normal file
View file

@ -0,0 +1,18 @@
package api
// SubnetAPI サブネットAPI
type SubnetAPI struct {
*baseAPI
}
// NewSubnetAPI サブネットAPI作成
func NewSubnetAPI(client *Client) *SubnetAPI {
return &SubnetAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "subnet"
},
},
}
}

229
vendor/github.com/sacloud/libsacloud/api/subnet_gen.go generated vendored Normal file
View file

@ -0,0 +1,229 @@
package api
/************************************************
generated by IDE. for [SubnetAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *SubnetAPI) Reset() *SubnetAPI {
api.reset()
return api
}
// Offset オフセット
func (api *SubnetAPI) Offset(offset int) *SubnetAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *SubnetAPI) Limit(limit int) *SubnetAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *SubnetAPI) Include(key string) *SubnetAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *SubnetAPI) Exclude(key string) *SubnetAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *SubnetAPI) FilterBy(key string, value interface{}) *SubnetAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SubnetAPI) FilterMultiBy(key string, value interface{}) *SubnetAPI {
api.filterBy(key, value, true)
return api
}
//func (api *SubnetAPI) WithNameLike(name string) *SubnetAPI {
// return api.FilterBy("Name", name)
//}
//
//func (api *SubnetAPI) WithTag(tag string) *SubnetAPI {
// return api.FilterBy("Tags.Name", tag)
//}
//func (api *SubnetAPI) WithTags(tags []string) *SubnetAPI {
// return api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *SubnetAPI) WithSizeGib(size int) *SubnetAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *SubnetAPI) WithSharedScope() *SubnetAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *SubnetAPI) WithUserScope() *SubnetAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *SubnetAPI) SortBy(key string, reverse bool) *SubnetAPI {
api.sortBy(key, reverse)
return api
}
//func (api *SubnetAPI) SortByName(reverse bool) *SubnetAPI {
// api.sortByName(reverse)
// return api
//}
// func (api *SubnetAPI) SortBySize(reverse bool) *SubnetAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *SubnetAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *SubnetAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *SubnetAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *SubnetAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *SubnetAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *SubnetAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SubnetAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
//func (api *SubnetAPI) SetNameLike(name string) {
// api.FilterBy("Name", name)
//}
//
//func (api *SubnetAPI) SetTag(tag string) {
// api.FilterBy("Tags.Name", tag)
//}
//func (api *SubnetAPI) SetTags(tags []string) {
// api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *SubnetAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *SubnetAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *SubnetAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *SubnetAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
//func (api *SubnetAPI) SetSortByName(reverse bool) {
// api.sortByName(reverse)
//}
// func (api *SubnetAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
//func (api *SubnetAPI) New() *sacloud.Subnet {
// return &sacloud.Subnet{}
//}
//func (api *SubnetAPI) Create(value *sacloud.Subnet) (*sacloud.Subnet, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
//}
// Read 読み取り
func (api *SubnetAPI) Read(id int64) (*sacloud.Subnet, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
//func (api *SubnetAPI) Update(id int64, value *sacloud.Subnet) (*sacloud.Subnet, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
//}
//
//func (api *SubnetAPI) Delete(id int64) (*sacloud.Subnet, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
//}
/************************************************
Inner functions
************************************************/
func (api *SubnetAPI) setStateValue(setFunc func(*sacloud.Request)) *SubnetAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *SubnetAPI) request(f func(*sacloud.Response) error) (*sacloud.Subnet, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Subnet, nil
}
func (api *SubnetAPI) createRequest(value *sacloud.Subnet) *sacloud.Request {
req := &sacloud.Request{}
req.Subnet = value
return req
}

55
vendor/github.com/sacloud/libsacloud/api/switch.go generated vendored Normal file
View file

@ -0,0 +1,55 @@
package api
import (
"fmt"
"github.com/sacloud/libsacloud/sacloud"
)
// SwitchAPI スイッチAPI
type SwitchAPI struct {
*baseAPI
}
// NewSwitchAPI スイッチAPI作成
func NewSwitchAPI(client *Client) *SwitchAPI {
return &SwitchAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "switch"
},
},
}
}
// DisconnectFromBridge ブリッジとの切断
func (api *SwitchAPI) DisconnectFromBridge(switchID int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/to/bridge", api.getResourceURL(), switchID)
)
return api.modify(method, uri, nil)
}
// ConnectToBridge ブリッジとの接続
func (api *SwitchAPI) ConnectToBridge(switchID int64, bridgeID int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/to/bridge/%d", api.getResourceURL(), switchID, bridgeID)
)
return api.modify(method, uri, nil)
}
// GetServers スイッチに接続されているサーバー一覧取得
func (api *SwitchAPI) GetServers(switchID int64) ([]sacloud.Server, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/server", api.getResourceURL(), switchID)
res = &sacloud.SearchResponse{}
)
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res.Servers, nil
}

243
vendor/github.com/sacloud/libsacloud/api/switch_gen.go generated vendored Normal file
View file

@ -0,0 +1,243 @@
package api
/************************************************
generated by IDE. for [SwitchAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *SwitchAPI) Reset() *SwitchAPI {
api.reset()
return api
}
// Offset オフセット
func (api *SwitchAPI) Offset(offset int) *SwitchAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *SwitchAPI) Limit(limit int) *SwitchAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *SwitchAPI) Include(key string) *SwitchAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *SwitchAPI) Exclude(key string) *SwitchAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *SwitchAPI) FilterBy(key string, value interface{}) *SwitchAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SwitchAPI) FilterMultiBy(key string, value interface{}) *SwitchAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *SwitchAPI) WithNameLike(name string) *SwitchAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *SwitchAPI) WithTag(tag string) *SwitchAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *SwitchAPI) WithTags(tags []string) *SwitchAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SwitchAPI) WithSizeGib(size int) *SwitchAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *SwitchAPI) WithSharedScope() *SwitchAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *SwitchAPI) WithUserScope() *SwitchAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *SwitchAPI) SortBy(key string, reverse bool) *SwitchAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *SwitchAPI) SortByName(reverse bool) *SwitchAPI {
api.sortByName(reverse)
return api
}
// func (api *SwitchAPI) SortBySize(reverse bool) *SwitchAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *SwitchAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *SwitchAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *SwitchAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *SwitchAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *SwitchAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *SwitchAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *SwitchAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *SwitchAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *SwitchAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *SwitchAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *SwitchAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *SwitchAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *SwitchAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *SwitchAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *SwitchAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *SwitchAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// New 新規作成用パラメーター作成
func (api *SwitchAPI) New() *sacloud.Switch {
return &sacloud.Switch{}
}
// Create 新規作成
func (api *SwitchAPI) Create(value *sacloud.Switch) (*sacloud.Switch, error) {
return api.request(func(res *sacloud.Response) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *SwitchAPI) Read(id int64) (*sacloud.Switch, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *SwitchAPI) Update(id int64, value *sacloud.Switch) (*sacloud.Switch, error) {
return api.request(func(res *sacloud.Response) error {
return api.update(id, api.createRequest(value), res)
})
}
// Delete 削除
func (api *SwitchAPI) Delete(id int64) (*sacloud.Switch, error) {
return api.request(func(res *sacloud.Response) error {
return api.delete(id, nil, res)
})
}
/************************************************
Inner functions
************************************************/
func (api *SwitchAPI) setStateValue(setFunc func(*sacloud.Request)) *SwitchAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *SwitchAPI) request(f func(*sacloud.Response) error) (*sacloud.Switch, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Switch, nil
}
func (api *SwitchAPI) createRequest(value *sacloud.Switch) *sacloud.Request {
req := &sacloud.Request{}
req.Switch = value
return req
}

437
vendor/github.com/sacloud/libsacloud/api/vpc_router.go generated vendored Normal file
View file

@ -0,0 +1,437 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"time"
)
//HACK: さくらのAPI側仕様: Applianceの内容によってJSONフォーマットが異なるため
// ロードバランサ/VPCルータそれぞれでリクエスト/レスポンスデータ型を定義する。
// SearchVPCRouterResponse VPCルーター検索レスポンス
type SearchVPCRouterResponse struct {
// Total 総件数
Total int `json:",omitempty"`
// From ページング開始位置
From int `json:",omitempty"`
// Count 件数
Count int `json:",omitempty"`
// VPCRouters VPCルーター リスト
VPCRouters []sacloud.VPCRouter `json:"Appliances,omitempty"`
}
type vpcRouterRequest struct {
VPCRouter *sacloud.VPCRouter `json:"Appliance,omitempty"`
From int `json:",omitempty"`
Count int `json:",omitempty"`
Sort []string `json:",omitempty"`
Filter map[string]interface{} `json:",omitempty"`
Exclude []string `json:",omitempty"`
Include []string `json:",omitempty"`
}
type vpcRouterResponse struct {
*sacloud.ResultFlagValue
*sacloud.VPCRouter `json:"Appliance,omitempty"`
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}
}
type vpcRouterStatusResponse struct {
*sacloud.ResultFlagValue
*sacloud.VPCRouterStatus `json:"Router"`
Success interface{} `json:",omitempty"` //HACK: さくらのAPI側仕様: 戻り値:Successがbool値へ変換できないためinterface{}
}
type vpcRouterS2sConnInfoResponse struct {
*sacloud.ResultFlagValue
*sacloud.SiteToSiteConnectionInfo
Name string
}
// VPCRouterAPI VPCルーターAPI
type VPCRouterAPI struct {
*baseAPI
}
// NewVPCRouterAPI VPCルーターAPI作成
func NewVPCRouterAPI(client *Client) *VPCRouterAPI {
return &VPCRouterAPI{
&baseAPI{
client: client,
FuncGetResourceURL: func() string {
return "appliance"
},
FuncBaseSearchCondition: func() *sacloud.Request {
res := &sacloud.Request{}
res.AddFilter("Class", "vpcrouter")
return res
},
},
}
}
// Find 検索
func (api *VPCRouterAPI) Find() (*SearchVPCRouterResponse, error) {
data, err := api.client.newRequest("GET", api.getResourceURL(), api.getSearchState())
if err != nil {
return nil, err
}
var res SearchVPCRouterResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
func (api *VPCRouterAPI) request(f func(*vpcRouterResponse) error) (*sacloud.VPCRouter, error) {
res := &vpcRouterResponse{}
err := f(res)
if err != nil {
return nil, err
}
return res.VPCRouter, nil
}
func (api *VPCRouterAPI) createRequest(value *sacloud.VPCRouter) *vpcRouterResponse {
return &vpcRouterResponse{VPCRouter: value}
}
// New 新規作成用パラメーター作成
func (api *VPCRouterAPI) New() *sacloud.VPCRouter {
return sacloud.CreateNewVPCRouter()
}
// Create 新規作成
func (api *VPCRouterAPI) Create(value *sacloud.VPCRouter) (*sacloud.VPCRouter, error) {
return api.request(func(res *vpcRouterResponse) error {
return api.create(api.createRequest(value), res)
})
}
// Read 読み取り
func (api *VPCRouterAPI) Read(id int64) (*sacloud.VPCRouter, error) {
return api.request(func(res *vpcRouterResponse) error {
return api.read(id, nil, res)
})
}
// Update 更新
func (api *VPCRouterAPI) Update(id int64, value *sacloud.VPCRouter) (*sacloud.VPCRouter, error) {
return api.request(func(res *vpcRouterResponse) error {
return api.update(id, api.createRequest(value), res)
})
}
// UpdateSetting 設定更新
func (api *VPCRouterAPI) UpdateSetting(id int64, value *sacloud.VPCRouter) (*sacloud.VPCRouter, error) {
req := &sacloud.VPCRouter{
// Settings
Settings: value.Settings,
}
return api.request(func(res *vpcRouterResponse) error {
return api.update(id, api.createRequest(req), res)
})
}
// Delete 削除
func (api *VPCRouterAPI) Delete(id int64) (*sacloud.VPCRouter, error) {
return api.request(func(res *vpcRouterResponse) error {
return api.delete(id, nil, res)
})
}
// Config 設定変更の反映
func (api *VPCRouterAPI) Config(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/config", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// ConnectToSwitch 指定のインデックス位置のNICをスイッチへ接続
func (api *VPCRouterAPI) ConnectToSwitch(id int64, switchID int64, nicIndex int) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/interface/%d/to/switch/%d", api.getResourceURL(), id, nicIndex, switchID)
)
return api.modify(method, uri, nil)
}
// DisconnectFromSwitch 指定のインデックス位置のNICをスイッチから切断
func (api *VPCRouterAPI) DisconnectFromSwitch(id int64, nicIndex int) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/interface/%d/to/switch", api.getResourceURL(), id, nicIndex)
)
return api.modify(method, uri, nil)
}
// IsUp 起動しているか判定
func (api *VPCRouterAPI) IsUp(id int64) (bool, error) {
router, err := api.Read(id)
if err != nil {
return false, err
}
return router.Instance.IsUp(), nil
}
// IsDown ダウンしているか判定
func (api *VPCRouterAPI) IsDown(id int64) (bool, error) {
router, err := api.Read(id)
if err != nil {
return false, err
}
return router.Instance.IsDown(), nil
}
// Boot 起動
func (api *VPCRouterAPI) Boot(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Shutdown シャットダウン(graceful)
func (api *VPCRouterAPI) Shutdown(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// Stop シャットダウン(force)
func (api *VPCRouterAPI) Stop(id int64) (bool, error) {
var (
method = "DELETE"
uri = fmt.Sprintf("%s/%d/power", api.getResourceURL(), id)
)
return api.modify(method, uri, map[string]bool{"Force": true})
}
// RebootForce 再起動
func (api *VPCRouterAPI) RebootForce(id int64) (bool, error) {
var (
method = "PUT"
uri = fmt.Sprintf("%s/%d/reset", api.getResourceURL(), id)
)
return api.modify(method, uri, nil)
}
// SleepUntilUp 起動するまで待機
func (api *VPCRouterAPI) SleepUntilUp(id int64, timeout time.Duration) error {
handler := waitingForUpFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepUntilDown ダウンするまで待機
func (api *VPCRouterAPI) SleepUntilDown(id int64, timeout time.Duration) error {
handler := waitingForDownFunc(func() (hasUpDown, error) {
return api.Read(id)
}, 0)
return blockingPoll(handler, timeout)
}
// SleepWhileCopying コピー終了まで待機
//
// maxRetry: リクエストタイミングによって、コピー完了までの間に404エラーとなる場合がある。
// 通常そのまま待てばコピー完了するため、404エラーが発生してもmaxRetryで指定した回数分は待機する。
func (api *VPCRouterAPI) SleepWhileCopying(id int64, timeout time.Duration, maxRetry int) error {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return blockingPoll(handler, timeout)
}
// AsyncSleepWhileCopying コピー終了まで待機(非同期)
func (api *VPCRouterAPI) AsyncSleepWhileCopying(id int64, timeout time.Duration, maxRetry int) (chan (interface{}), chan (interface{}), chan (error)) {
handler := waitingForAvailableFunc(func() (hasAvailable, error) {
return api.Read(id)
}, maxRetry)
return poll(handler, timeout)
}
// AddStandardInterface スタンダードプランでのインターフェース追加
func (api *VPCRouterAPI) AddStandardInterface(routerID int64, switchID int64, ipaddress string, maskLen int) (*sacloud.VPCRouter, error) {
return api.addInterface(routerID, switchID, &sacloud.VPCRouterInterface{
IPAddress: []string{ipaddress},
NetworkMaskLen: maskLen,
VirtualIPAddress: "",
})
}
// AddPremiumInterface プレミアムプランでのインターフェース追加
func (api *VPCRouterAPI) AddPremiumInterface(routerID int64, switchID int64, ipaddresses []string, maskLen int, virtualIP string) (*sacloud.VPCRouter, error) {
return api.addInterface(routerID, switchID, &sacloud.VPCRouterInterface{
IPAddress: ipaddresses,
NetworkMaskLen: maskLen,
VirtualIPAddress: virtualIP,
})
}
func (api *VPCRouterAPI) addInterface(routerID int64, switchID int64, routerNIC *sacloud.VPCRouterInterface) (*sacloud.VPCRouter, error) {
router, err := api.Read(routerID)
if err != nil {
return nil, err
}
req := &sacloud.VPCRouter{Settings: &sacloud.VPCRouterSettings{}}
if router.Settings == nil {
req.Settings = &sacloud.VPCRouterSettings{
Router: &sacloud.VPCRouterSetting{
Interfaces: []*sacloud.VPCRouterInterface{nil},
},
}
} else {
req.Settings.Router = router.Settings.Router
}
index := len(req.Settings.Router.Interfaces) // add to last
return api.addInterfaceAt(routerID, switchID, routerNIC, index)
}
// AddStandardInterfaceAt スタンダードプランでの指定位置へのインターフェース追加
func (api *VPCRouterAPI) AddStandardInterfaceAt(routerID int64, switchID int64, ipaddress string, maskLen int, index int) (*sacloud.VPCRouter, error) {
return api.addInterfaceAt(routerID, switchID, &sacloud.VPCRouterInterface{
IPAddress: []string{ipaddress},
NetworkMaskLen: maskLen,
VirtualIPAddress: "",
}, index)
}
// AddPremiumInterfaceAt プレミアムプランでの指定位置へのインターフェース追加
func (api *VPCRouterAPI) AddPremiumInterfaceAt(routerID int64, switchID int64, ipaddresses []string, maskLen int, virtualIP string, index int) (*sacloud.VPCRouter, error) {
return api.addInterfaceAt(routerID, switchID, &sacloud.VPCRouterInterface{
IPAddress: ipaddresses,
NetworkMaskLen: maskLen,
VirtualIPAddress: virtualIP,
}, index)
}
func (api *VPCRouterAPI) addInterfaceAt(routerID int64, switchID int64, routerNIC *sacloud.VPCRouterInterface, index int) (*sacloud.VPCRouter, error) {
router, err := api.Read(routerID)
if err != nil {
return nil, err
}
req := &sacloud.VPCRouter{Settings: &sacloud.VPCRouterSettings{}}
if router.Settings == nil {
req.Settings = &sacloud.VPCRouterSettings{
Router: &sacloud.VPCRouterSetting{
Interfaces: []*sacloud.VPCRouterInterface{nil},
},
}
} else {
req.Settings.Router = router.Settings.Router
}
//connect to switch
_, err = api.ConnectToSwitch(routerID, switchID, index)
if err != nil {
return nil, err
}
for i := 0; i < index; i++ {
if len(req.Settings.Router.Interfaces) < index {
req.Settings.Router.Interfaces = append(req.Settings.Router.Interfaces, nil)
}
}
if len(req.Settings.Router.Interfaces) < index+1 {
req.Settings.Router.Interfaces = append(req.Settings.Router.Interfaces, routerNIC)
} else {
req.Settings.Router.Interfaces[index] = routerNIC
}
res, err := api.UpdateSetting(routerID, req)
if err != nil {
return nil, err
}
return res, nil
}
// DeleteInterfaceAt 指定位置のインターフェース削除
func (api *VPCRouterAPI) DeleteInterfaceAt(routerID int64, index int) (*sacloud.VPCRouter, error) {
router, err := api.Read(routerID)
if err != nil {
return nil, err
}
req := &sacloud.VPCRouter{Settings: &sacloud.VPCRouterSettings{}}
if router.Settings == nil {
req.Settings = &sacloud.VPCRouterSettings{
// Router
Router: &sacloud.VPCRouterSetting{
// Interfaces
Interfaces: []*sacloud.VPCRouterInterface{nil},
},
}
} else {
req.Settings.Router = router.Settings.Router
}
//disconnect to switch
_, err = api.DisconnectFromSwitch(routerID, index)
if err != nil {
return nil, err
}
if index < len(req.Settings.Router.Interfaces) {
req.Settings.Router.Interfaces[index] = nil
}
res, err := api.UpdateSetting(routerID, req)
if err != nil {
return nil, err
}
return res, nil
}
// MonitorBy 指定位置のインターフェースのアクティビティーモニター取得
func (api *VPCRouterAPI) MonitorBy(id int64, nicIndex int, body *sacloud.ResourceMonitorRequest) (*sacloud.MonitorValues, error) {
return api.baseAPI.applianceMonitorBy(id, "interface", nicIndex, body)
}
// Status ログなどのステータス情報 取得
func (api *VPCRouterAPI) Status(id int64) (*sacloud.VPCRouterStatus, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/status", api.getResourceURL(), id)
res = &vpcRouterStatusResponse{}
)
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res.VPCRouterStatus, nil
}
// SiteToSiteConnectionDetails サイト間VPN接続情報を取得
func (api *VPCRouterAPI) SiteToSiteConnectionDetails(id int64) (*sacloud.SiteToSiteConnectionInfo, error) {
var (
method = "GET"
uri = fmt.Sprintf("%s/%d/vpcrouter/sitetosite/connectiondetails", api.getResourceURL(), id)
res = &vpcRouterS2sConnInfoResponse{}
)
err := api.baseAPI.request(method, uri, nil, res)
if err != nil {
return nil, err
}
return res.SiteToSiteConnectionInfo, nil
}

View file

@ -0,0 +1,238 @@
package api
/************************************************
generated by IDE. for [VPCRouterAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *VPCRouterAPI) Reset() *VPCRouterAPI {
api.reset()
return api
}
// Offset オフセット
func (api *VPCRouterAPI) Offset(offset int) *VPCRouterAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *VPCRouterAPI) Limit(limit int) *VPCRouterAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *VPCRouterAPI) Include(key string) *VPCRouterAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *VPCRouterAPI) Exclude(key string) *VPCRouterAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *VPCRouterAPI) FilterBy(key string, value interface{}) *VPCRouterAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *VPCRouterAPI) FilterMultiBy(key string, value interface{}) *VPCRouterAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *VPCRouterAPI) WithNameLike(name string) *VPCRouterAPI {
return api.FilterBy("Name", name)
}
// WithTag タグ条件
func (api *VPCRouterAPI) WithTag(tag string) *VPCRouterAPI {
return api.FilterBy("Tags.Name", tag)
}
// WithTags タグ(複数)条件
func (api *VPCRouterAPI) WithTags(tags []string) *VPCRouterAPI {
return api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *VPCRouterAPI) WithSizeGib(size int) *VPCRouterAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *VPCRouterAPI) WithSharedScope() *VPCRouterAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *VPCRouterAPI) WithUserScope() *VPCRouterAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *VPCRouterAPI) SortBy(key string, reverse bool) *VPCRouterAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *VPCRouterAPI) SortByName(reverse bool) *VPCRouterAPI {
api.sortByName(reverse)
return api
}
// func (api *VPCRouterAPI) SortBySize(reverse bool) *VPCRouterAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *VPCRouterAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *VPCRouterAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *VPCRouterAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *VPCRouterAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *VPCRouterAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *VPCRouterAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *VPCRouterAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *VPCRouterAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// SetTag タグ条件
func (api *VPCRouterAPI) SetTag(tag string) {
api.FilterBy("Tags.Name", tag)
}
// SetTags タグ(複数)条件
func (api *VPCRouterAPI) SetTags(tags []string) {
api.FilterBy("Tags.Name", []interface{}{tags})
}
// func (api *VPCRouterAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *VPCRouterAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *VPCRouterAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *VPCRouterAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *VPCRouterAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *VPCRouterAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *VPCRouterAPI) New() *sacloud.VPCRouter {
// return &sacloud.VPCRouter{}
// }
// func (api *VPCRouterAPI) Create(value *sacloud.VPCRouter) (*sacloud.VPCRouter, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// func (api *VPCRouterAPI) Read(id string) (*sacloud.VPCRouter, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.read(id, nil, res)
// })
// }
// func (api *VPCRouterAPI) Update(id string, value *sacloud.VPCRouter) (*sacloud.VPCRouter, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *VPCRouterAPI) Delete(id string) (*sacloud.VPCRouter, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *VPCRouterAPI) setStateValue(setFunc func(*sacloud.Request)) *VPCRouterAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
//func (api *VPCRouterAPI) request(f func(*sacloud.Response) error) (*sacloud.VPCRouter, error) {
// res := &sacloud.Response{}
// err := f(res)
// if err != nil {
// return nil, err
// }
// return res.VPCRouter, nil
//}
//
//func (api *VPCRouterAPI) createRequest(value *sacloud.VPCRouter) *sacloud.Request {
// req := &sacloud.Request{}
// req.VPCRouter = value
// return req
//}

114
vendor/github.com/sacloud/libsacloud/api/webaccel.go generated vendored Normal file
View file

@ -0,0 +1,114 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"strings"
)
// WebAccelAPI ウェブアクセラレータAPI
type WebAccelAPI struct {
*baseAPI
}
// NewWebAccelAPI ウェブアクセラレータAPI
func NewWebAccelAPI(client *Client) *WebAccelAPI {
return &WebAccelAPI{
&baseAPI{
client: client,
apiRootSuffix: sakuraWebAccelAPIRootSuffix,
FuncGetResourceURL: func() string {
return ""
},
},
}
}
// WebAccelDeleteCacheResponse ウェブアクセラレータ キャッシュ削除レスポンス
type WebAccelDeleteCacheResponse struct {
*sacloud.ResultFlagValue
Results []*sacloud.DeleteCacheResult
}
// Read サイト情報取得
func (api *WebAccelAPI) Read(id string) (*sacloud.WebAccelSite, error) {
uri := fmt.Sprintf("%s/site/%s", api.getResourceURL(), id)
data, err := api.client.newRequest("GET", uri, nil)
if err != nil {
return nil, err
}
var res struct {
Site sacloud.WebAccelSite
}
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res.Site, nil
}
// ReadCertificate 証明書 参照
func (api *WebAccelAPI) ReadCertificate(id string) (*sacloud.WebAccelCertResponseBody, error) {
uri := fmt.Sprintf("%s/site/%s/certificate", api.getResourceURL(), id)
data, err := api.client.newRequest("GET", uri, nil)
if err != nil {
return nil, err
}
var res sacloud.WebAccelCertResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return res.Certificate, nil
}
// UpdateCertificate 証明書 更新
func (api *WebAccelAPI) UpdateCertificate(id string, request *sacloud.WebAccelCertRequest) (*sacloud.WebAccelCertResponse, error) {
uri := fmt.Sprintf("%s/site/%s/certificate", api.getResourceURL(), id)
if request.CertificateChain != "" {
request.CertificateChain = strings.TrimRight(request.CertificateChain, "\n")
}
if request.Key != "" {
request.Key = strings.TrimRight(request.Key, "\n")
}
data, err := api.client.newRequest("PUT", uri, map[string]interface{}{
"Certificate": request,
})
if err != nil {
return nil, err
}
var res sacloud.WebAccelCertResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}
// DeleteCache キャッシュ削除
func (api *WebAccelAPI) DeleteCache(urls ...string) (*WebAccelDeleteCacheResponse, error) {
type request struct {
// URL
URL []string
}
uri := fmt.Sprintf("%s/deletecache", api.getResourceURL())
data, err := api.client.newRequest("POST", uri, &request{URL: urls})
if err != nil {
return nil, err
}
var res WebAccelDeleteCacheResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
return &res, nil
}

View file

@ -0,0 +1,85 @@
package api
import (
"encoding/json"
"fmt"
"github.com/sacloud/libsacloud/sacloud"
"net/url"
"strings"
)
// Reset 検索条件のリセット
func (api *WebAccelAPI) Reset() *WebAccelAPI {
api.SetEmpty()
return api
}
// SetEmpty 検索条件のリセット
func (api *WebAccelAPI) SetEmpty() {
api.reset()
}
// FilterBy 指定キーでのフィルター
func (api *WebAccelAPI) FilterBy(key string, value interface{}) *WebAccelAPI {
api.filterBy(key, value, false)
return api
}
// WithNameLike 名称条件
func (api *WebAccelAPI) WithNameLike(name string) *WebAccelAPI {
return api.FilterBy("Name", name)
}
// SetFilterBy 指定キーでのフィルター
func (api *WebAccelAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetNameLike 名称条件
func (api *WebAccelAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
// Find サイト一覧取得
func (api *WebAccelAPI) Find() (*sacloud.SearchResponse, error) {
uri := fmt.Sprintf("%s/site", api.getResourceURL())
data, err := api.client.newRequest("GET", uri, nil)
if err != nil {
return nil, err
}
var res sacloud.SearchResponse
if err := json.Unmarshal(data, &res); err != nil {
return nil, err
}
// handle filter(API側がFilterに対応していないためここでフィルタリング)
for key, filter := range api.getSearchState().Filter {
if key != "Name" {
continue
}
strNames, ok := filter.(string)
if !ok {
continue
}
names := strings.Split(strNames, " ")
filtered := []sacloud.WebAccelSite{}
for _, site := range res.WebAccelSites {
for _, name := range names {
u, _ := url.Parse(name)
if strings.Contains(site.Name, u.Path) {
filtered = append(filtered, site)
break
}
}
}
res.WebAccelSites = filtered
}
return &res, nil
}

19
vendor/github.com/sacloud/libsacloud/api/zone.go generated vendored Normal file
View file

@ -0,0 +1,19 @@
package api
// ZoneAPI ゾーンAPI
type ZoneAPI struct {
*baseAPI
}
// NewZoneAPI ゾーンAPI作成
func NewZoneAPI(client *Client) *ZoneAPI {
return &ZoneAPI{
&baseAPI{
client: client,
// FuncGetResourceURL
FuncGetResourceURL: func() string {
return "zone"
},
},
}
}

239
vendor/github.com/sacloud/libsacloud/api/zone_gen.go generated vendored Normal file
View file

@ -0,0 +1,239 @@
package api
/************************************************
generated by IDE. for [ZoneAPI]
************************************************/
import (
"github.com/sacloud/libsacloud/sacloud"
)
/************************************************
To support fluent interface for Find()
************************************************/
// Reset 検索条件のリセット
func (api *ZoneAPI) Reset() *ZoneAPI {
api.reset()
return api
}
// Offset オフセット
func (api *ZoneAPI) Offset(offset int) *ZoneAPI {
api.offset(offset)
return api
}
// Limit リミット
func (api *ZoneAPI) Limit(limit int) *ZoneAPI {
api.limit(limit)
return api
}
// Include 取得する項目
func (api *ZoneAPI) Include(key string) *ZoneAPI {
api.include(key)
return api
}
// Exclude 除外する項目
func (api *ZoneAPI) Exclude(key string) *ZoneAPI {
api.exclude(key)
return api
}
// FilterBy 指定キーでのフィルター
func (api *ZoneAPI) FilterBy(key string, value interface{}) *ZoneAPI {
api.filterBy(key, value, false)
return api
}
// FilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ZoneAPI) FilterMultiBy(key string, value interface{}) *ZoneAPI {
api.filterBy(key, value, true)
return api
}
// WithNameLike 名称条件
func (api *ZoneAPI) WithNameLike(name string) *ZoneAPI {
return api.FilterBy("Name", name)
}
//// WithTag タグ条件
//func (api *ZoneAPI) WithTag(tag string) *ZoneAPI {
// return api.FilterBy("Tags.Name", tag)
//}
//
//// WithTags タグ(複数)条件
//func (api *ZoneAPI) WithTags(tags []string) *ZoneAPI {
// return api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *ZoneAPI) WithSizeGib(size int) *ZoneAPI {
// api.FilterBy("SizeMB", size*1024)
// return api
// }
// func (api *ZoneAPI) WithSharedScope() *ZoneAPI {
// api.FilterBy("Scope", "shared")
// return api
// }
// func (api *ZoneAPI) WithUserScope() *ZoneAPI {
// api.FilterBy("Scope", "user")
// return api
// }
// SortBy 指定キーでのソート
func (api *ZoneAPI) SortBy(key string, reverse bool) *ZoneAPI {
api.sortBy(key, reverse)
return api
}
// SortByName 名称でのソート
func (api *ZoneAPI) SortByName(reverse bool) *ZoneAPI {
api.sortByName(reverse)
return api
}
// func (api *ZoneAPI) SortBySize(reverse bool) *ZoneAPI {
// api.sortBy("SizeMB", reverse)
// return api
// }
/************************************************
To support Setxxx interface for Find()
************************************************/
// SetEmpty 検索条件のリセット
func (api *ZoneAPI) SetEmpty() {
api.reset()
}
// SetOffset オフセット
func (api *ZoneAPI) SetOffset(offset int) {
api.offset(offset)
}
// SetLimit リミット
func (api *ZoneAPI) SetLimit(limit int) {
api.limit(limit)
}
// SetInclude 取得する項目
func (api *ZoneAPI) SetInclude(key string) {
api.include(key)
}
// SetExclude 除外する項目
func (api *ZoneAPI) SetExclude(key string) {
api.exclude(key)
}
// SetFilterBy 指定キーでのフィルター
func (api *ZoneAPI) SetFilterBy(key string, value interface{}) {
api.filterBy(key, value, false)
}
// SetFilterMultiBy 任意項目でのフィルタ(完全一致 OR条件)
func (api *ZoneAPI) SetFilterMultiBy(key string, value interface{}) {
api.filterBy(key, value, true)
}
// SetNameLike 名称条件
func (api *ZoneAPI) SetNameLike(name string) {
api.FilterBy("Name", name)
}
//// SetTag タグ条件
//func (api *ZoneAPI) SetTag(tag string) {
// api.FilterBy("Tags.Name", tag)
//}
//
//// SetTags タグ(複数)条件
//func (api *ZoneAPI) SetTags(tags []string) {
// api.FilterBy("Tags.Name", []interface{}{tags})
//}
// func (api *ZoneAPI) SetSizeGib(size int) {
// api.FilterBy("SizeMB", size*1024)
// }
// func (api *ZoneAPI) SetSharedScope() {
// api.FilterBy("Scope", "shared")
// }
// func (api *ZoneAPI) SetUserScope() {
// api.FilterBy("Scope", "user")
// }
// SetSortBy 指定キーでのソート
func (api *ZoneAPI) SetSortBy(key string, reverse bool) {
api.sortBy(key, reverse)
}
// SetSortByName 名称でのソート
func (api *ZoneAPI) SetSortByName(reverse bool) {
api.sortByName(reverse)
}
// func (api *ZoneAPI) SetSortBySize(reverse bool) {
// api.sortBy("SizeMB", reverse)
// }
/************************************************
To support CRUD(Create/Read/Update/Delete)
************************************************/
// func (api *ZoneAPI) New() *sacloud.Zone {
// return &sacloud.Zone{}
// }
// func (api *ZoneAPI) Create(value *sacloud.Zone) (*sacloud.Zone, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.create(api.createRequest(value), res)
// })
// }
// Read 読み取り
func (api *ZoneAPI) Read(id int64) (*sacloud.Zone, error) {
return api.request(func(res *sacloud.Response) error {
return api.read(id, nil, res)
})
}
// func (api *ZoneAPI) Update(id string, value *sacloud.Zone) (*sacloud.Zone, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.update(id, api.createRequest(value), res)
// })
// }
// func (api *ZoneAPI) Delete(id string) (*sacloud.Zone, error) {
// return api.request(func(res *sacloud.Response) error {
// return api.delete(id, nil, res)
// })
// }
/************************************************
Inner functions
************************************************/
func (api *ZoneAPI) setStateValue(setFunc func(*sacloud.Request)) *ZoneAPI {
api.baseAPI.setStateValue(setFunc)
return api
}
func (api *ZoneAPI) request(f func(*sacloud.Response) error) (*sacloud.Zone, error) {
res := &sacloud.Response{}
err := f(res)
if err != nil {
return nil, err
}
return res.Zone, nil
}
func (api *ZoneAPI) createRequest(value *sacloud.Zone) *sacloud.Request {
req := &sacloud.Request{}
req.Zone = value
return req
}