Add DNS Provider for SAKURA Cloud (#456)

This commit is contained in:
Kazumichi Yamamoto 2018-06-22 04:24:45 +09:00 committed by Ludovic Fernandez
parent a1585a7b9a
commit 05921d9810
185 changed files with 22182 additions and 5 deletions

13
Gopkg.lock generated
View file

@ -226,6 +226,17 @@
packages = ["."]
revision = "1031fa0ce2f20c1c0e1e1b51951d8ea02c84fa05"
[[projects]]
branch = "master"
name = "github.com/sacloud/libsacloud"
packages = [
".",
"api",
"sacloud",
"sacloud/ostype"
]
revision = "178aa57136e8c6e3882b6b5ef37a48f0e7cf836f"
[[projects]]
name = "github.com/sirupsen/logrus"
packages = ["."]
@ -363,6 +374,6 @@
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "6b701827736620696c106773b62665f722b691a3025b851fe1a5d3c321d77d21"
inputs-digest = "d93e6f0825f1f7c1c3c2ccd421af4d99b77b390f3346ca751968af0609119c96"
solver-name = "gps-cdcl"
solver-version = 1

View file

@ -24,6 +24,11 @@
# go-tests = true
# unused-packages = true
[prune]
non-go = true
go-tests = true
unused-packages = true
[[constraint]]
branch = "master"
name = "github.com/decker502/dnspod-go"
@ -68,7 +73,6 @@
branch = "v2"
name = "gopkg.in/ns1/ns1-go.v2"
[prune]
non-go = true
go-tests = true
unused-packages = true
[[constraint]]
branch = "master"
name = "github.com/sacloud/libsacloud"

1
cli.go
View file

@ -226,6 +226,7 @@ Here is an example bash command using the CloudFlare DNS provider:
fmt.Fprintln(w, "\tpdns:\tPDNS_API_KEY, PDNS_API_URL")
fmt.Fprintln(w, "\tdnspod:\tDNSPOD_API_KEY")
fmt.Fprintln(w, "\totc:\tOTC_USER_NAME, OTC_PASSWORD, OTC_PROJECT_NAME, OTC_DOMAIN_NAME, OTC_IDENTITY_ENDPOINT")
fmt.Fprintln(w, "\tsakuracloud:\tSAKURACLOUD_ACCESS_TOKEN, SAKURACLOUD_ACCESS_TOKEN_SECRET")
fmt.Fprintln(w, "\texec:\tEXEC_PATH")
w.Flush()

View file

@ -34,6 +34,7 @@ import (
"github.com/xenolf/lego/providers/dns/rackspace"
"github.com/xenolf/lego/providers/dns/rfc2136"
"github.com/xenolf/lego/providers/dns/route53"
"github.com/xenolf/lego/providers/dns/sakuracloud"
"github.com/xenolf/lego/providers/dns/vultr"
)
@ -92,6 +93,8 @@ func NewDNSChallengeProviderByName(name string) (acme.ChallengeProvider, error)
return route53.NewDNSProvider()
case "rfc2136":
return rfc2136.NewDNSProvider()
case "sakuracloud":
return sakuracloud.NewDNSProvider()
case "vultr":
return vultr.NewDNSProvider()
case "ovh":

View file

@ -0,0 +1,144 @@
// Package sakuracloud implements a DNS provider for solving the DNS-01 challenge
// using sakuracloud DNS.
package sakuracloud
import (
"errors"
"fmt"
"net/http"
"strings"
"github.com/sacloud/libsacloud/api"
"github.com/sacloud/libsacloud/sacloud"
"github.com/xenolf/lego/acme"
"github.com/xenolf/lego/platform/config/env"
)
// DNSProvider is an implementation of the acme.ChallengeProvider interface.
type DNSProvider struct {
client *api.Client
}
// NewDNSProvider returns a DNSProvider instance configured for sakuracloud.
// Credentials must be passed in the environment variables: SAKURACLOUD_ACCESS_TOKEN & SAKURACLOUD_ACCESS_TOKEN_SECRET
func NewDNSProvider() (*DNSProvider, error) {
values, err := env.Get("SAKURACLOUD_ACCESS_TOKEN", "SAKURACLOUD_ACCESS_TOKEN_SECRET")
if err != nil {
return nil, fmt.Errorf("SakuraCloud: %v", err)
}
return NewDNSProviderCredentials(values["SAKURACLOUD_ACCESS_TOKEN"], values["SAKURACLOUD_ACCESS_TOKEN_SECRET"])
}
// NewDNSProviderCredentials uses the supplied credentials to return a
// DNSProvider instance configured for sakuracloud.
func NewDNSProviderCredentials(token, secret string) (*DNSProvider, error) {
if token == "" {
return nil, errors.New("SakuraCloud AccessToken is missing")
}
if secret == "" {
return nil, errors.New("SakuraCloud AccessSecret is missing")
}
client := api.NewClient(token, secret, "tk1a")
client.UserAgent = acme.UserAgent
return &DNSProvider{client: client}, nil
}
// Present creates a TXT record to fulfil the dns-01 challenge.
func (d *DNSProvider) Present(domain, token, keyAuth string) error {
fqdn, value, ttl := acme.DNS01Record(domain, keyAuth)
zone, err := d.getHostedZone(domain)
if err != nil {
return err
}
name := d.extractRecordName(fqdn, zone.Name)
zone.AddRecord(zone.CreateNewRecord(name, "TXT", value, ttl))
_, err = d.client.GetDNSAPI().Update(zone.ID, zone)
if err != nil {
return fmt.Errorf("SakuraCloud API call failed: %v", err)
}
return nil
}
// CleanUp removes the TXT record matching the specified parameters.
func (d *DNSProvider) CleanUp(domain, token, keyAuth string) error {
fqdn, _, _ := acme.DNS01Record(domain, keyAuth)
zone, err := d.getHostedZone(domain)
if err != nil {
return err
}
records, err := d.findTxtRecords(fqdn, zone)
if err != nil {
return err
}
for _, record := range records {
var updRecords []sacloud.DNSRecordSet
for _, r := range zone.Settings.DNS.ResourceRecordSets {
if !(r.Name == record.Name && r.Type == record.Type && r.RData == record.RData) {
updRecords = append(updRecords, r)
}
}
zone.Settings.DNS.ResourceRecordSets = updRecords
}
_, err = d.client.GetDNSAPI().Update(zone.ID, zone)
if err != nil {
return fmt.Errorf("SakuraCloud API call failed: %v", err)
}
return nil
}
func (d *DNSProvider) getHostedZone(domain string) (*sacloud.DNS, error) {
authZone, err := acme.FindZoneByFqdn(acme.ToFqdn(domain), acme.RecursiveNameservers)
if err != nil {
return nil, err
}
zoneName := acme.UnFqdn(authZone)
res, err := d.client.GetDNSAPI().WithNameLike(zoneName).Find()
if err != nil {
if notFound, ok := err.(api.Error); ok && notFound.ResponseCode() == http.StatusNotFound {
return nil, fmt.Errorf("zone %s not found on SakuraCloud DNS: %v", zoneName, err)
}
return nil, fmt.Errorf("SakuraCloud API call failed: %v", err)
}
for _, zone := range res.CommonServiceDNSItems {
if zone.Name == zoneName {
return &zone, nil
}
}
return nil, fmt.Errorf("zone %s not found on SakuraCloud DNS", zoneName)
}
func (d *DNSProvider) findTxtRecords(fqdn string, zone *sacloud.DNS) ([]sacloud.DNSRecordSet, error) {
recordName := d.extractRecordName(fqdn, zone.Name)
var res []sacloud.DNSRecordSet
for _, record := range zone.Settings.DNS.ResourceRecordSets {
if record.Name == recordName && record.Type == "TXT" {
res = append(res, record)
}
}
return res, nil
}
func (d *DNSProvider) extractRecordName(fqdn, domain string) string {
name := acme.UnFqdn(fqdn)
if idx := strings.Index(name, "."+domain); idx != -1 {
return name[:idx]
}
return name
}

View file

@ -0,0 +1,111 @@
package sakuracloud
import (
"os"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/xenolf/lego/acme"
)
var (
sakuracloudLiveTest bool
sakuracloudAccessToken string
sakuracloudAccessSecret string
sakuracloudDomain string
)
func init() {
sakuracloudAccessToken = os.Getenv("SAKURACLOUD_ACCESS_TOKEN")
sakuracloudAccessSecret = os.Getenv("SAKURACLOUD_ACCESS_TOKEN_SECRET")
sakuracloudDomain = os.Getenv("SAKURACLOUD_DOMAIN")
if len(sakuracloudAccessToken) > 0 && len(sakuracloudAccessSecret) > 0 && len(sakuracloudDomain) > 0 {
sakuracloudLiveTest = true
}
}
func restoreEnv() {
os.Setenv("SAKURACLOUD_ACCESS_TOKEN", sakuracloudAccessToken)
os.Setenv("SAKURACLOUD_ACCESS_TOKEN_SECRET", sakuracloudAccessSecret)
}
//
// NewDNSProvider
//
func TestNewDNSProviderValid(t *testing.T) {
defer restoreEnv()
os.Setenv("SAKURACLOUD_ACCESS_TOKEN", "123")
os.Setenv("SAKURACLOUD_ACCESS_TOKEN_SECRET", "456")
provider, err := NewDNSProvider()
assert.NotNil(t, provider)
assert.Equal(t, acme.UserAgent, provider.client.UserAgent)
assert.NoError(t, err)
}
func TestNewDNSProviderInvalidWithMissingAccessToken(t *testing.T) {
defer restoreEnv()
os.Setenv("SAKURACLOUD_ACCESS_TOKEN", "")
provider, err := NewDNSProvider()
assert.Nil(t, provider)
assert.EqualError(t, err, "SakuraCloud: some credentials information are missing: SAKURACLOUD_ACCESS_TOKEN,SAKURACLOUD_ACCESS_TOKEN_SECRET")
}
//
// NewDNSProviderCredentials
//
func TestNewDNSProviderCredentialsValid(t *testing.T) {
provider, err := NewDNSProviderCredentials("123", "456")
assert.NotNil(t, provider)
assert.Equal(t, acme.UserAgent, provider.client.UserAgent)
assert.NoError(t, err)
}
func TestNewDNSProviderCredentialsInvalidWithMissingAccessToken(t *testing.T) {
provider, err := NewDNSProviderCredentials("", "")
assert.Nil(t, provider)
assert.EqualError(t, err, "SakuraCloud AccessToken is missing")
}
//
// Present
//
func TestLiveSakuraCloudPresent(t *testing.T) {
if !sakuracloudLiveTest {
t.Skip("skipping live test")
}
provider, err := NewDNSProviderCredentials(sakuracloudAccessToken, sakuracloudAccessSecret)
assert.NoError(t, err)
err = provider.Present(sakuracloudDomain, "", "123d==")
assert.NoError(t, err)
}
//
// Cleanup
//
func TestLiveSakuraCloudCleanUp(t *testing.T) {
if !sakuracloudLiveTest {
t.Skip("skipping live test")
}
time.Sleep(time.Second * 1)
provider, err := NewDNSProviderCredentials(sakuracloudAccessToken, sakuracloudAccessSecret)
assert.NoError(t, err)
err = provider.CleanUp(sakuracloudDomain, "", "123d==")
assert.NoError(t, err)
}

207
vendor/github.com/sacloud/libsacloud/LICENSE.txt generated vendored Normal file
View file

@ -0,0 +1,207 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================================================
Copyright 2015-2018 Kazumichi Yamamoto.

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,339 @@
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)
}
// 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
}

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

@ -0,0 +1,217 @@
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
}

5
vendor/github.com/sacloud/libsacloud/libsacloud.go generated vendored Normal file
View file

@ -0,0 +1,5 @@
// Package libsacloud is the SAKURA CLOUD API v1.1 Client for Go.
package libsacloud
// Version バージョン
const Version = "1.0.0-rc5"

View file

@ -0,0 +1,9 @@
package sacloud
// Account さくらのクラウド アカウント
type Account struct {
*Resource
propName // 名称
Class string `json:",omitempty"` // リソースクラス
Code string `json:",omitempty"` // アカウントコード
}

View file

@ -0,0 +1,57 @@
package sacloud
// Appliance アプライアンス基底クラス
type Appliance struct {
*Resource // ID
propAvailability // 有功状態
propName // 名称
propDescription // 説明
propPlanID // プラン
propServiceClass // サービスクラス
propInstance // インスタンス
propSwitch // スイッチ
propInterfaces // インターフェース配列
propIcon // アイコン
propTags // タグ
propCreatedAt // 作成日時
Class string `json:",omitempty"` // リソースクラス
SettingHash string `json:",omitempty"` // 設定ハッシュ値
}
//HACK Appliance:Zone.IDがRoute/LoadBalancerの場合でデータ型が異なるため
//それぞれのstruct定義でZoneだけ上書きした構造体を定義して使う
// ApplianceRemarkBase アプライアンス Remark 基底クラス
type ApplianceRemarkBase struct {
Servers []interface{} // 配下のサーバー群
Switch *ApplianceRemarkSwitch `json:",omitempty"` // 接続先スイッチ
VRRP *ApplianceRemarkVRRP `json:",omitempty"` // VRRP
Network *ApplianceRemarkNetwork `json:",omitempty"` // ネットワーク
//Zone *Resource `json:",omitempty"`
//Plan *Resource
}
//type ApplianceServer struct {
// IPAddress string `json:",omitempty"`
//}
// ApplianceRemarkSwitch スイッチ
type ApplianceRemarkSwitch struct {
ID string `json:",omitempty"` // リソースID
propScope // スコープ
}
// ApplianceRemarkVRRP VRRP
type ApplianceRemarkVRRP struct {
VRID int // VRID
}
// ApplianceRemarkNetwork ネットワーク
type ApplianceRemarkNetwork struct {
NetworkMaskLen int `json:",omitempty"` // ネットワークマスク長
DefaultRoute string // デフォルトルート
}

View file

@ -0,0 +1,22 @@
package sacloud
// Archive アーカイブ
type Archive struct {
*Resource // ID
propAvailability // 有功状態
propName // 名称
propDescription // 説明
propSizeMB // サイズ(MB単位)
propMigratedMB // コピー済みデータサイズ(MB単位)
propScope // スコープ
propCopySource // コピー元情報
propServiceClass // サービスクラス
propPlanID // プランID
propJobStatus // マイグレーションジョブステータス
propOriginalArchiveID // オリジナルアーカイブID
propStorage // ストレージ
propBundleInfo // バンドル情報
propTags // タグ
propIcon // アイコン
propCreatedAt // 作成日時
}

View file

@ -0,0 +1,79 @@
package sacloud
// AuthStatus 現在の認証状態
type AuthStatus struct {
Account *Account // アカウント
Member *Member // 会員情報
AuthClass EAuthClass `json:",omitempty"` // 認証クラス
AuthMethod EAuthMethod `json:",omitempty"` // 認証方法
ExternalPermission string `json:",omitempty"` // 他サービスへのアクセス権
IsAPIKey bool `json:",omitempty"` // APIキーでのアクセスフラグ
OperationPenalty string `json:",omitempty"` // オペレーションペナルティ
Permission EPermission `json:",omitempty"` // 権限
IsOk bool `json:"is_ok,omitempty"` // 結果
// RESTFilter [unknown type] `json:",omitempty"`
// User [unknown type] `json:",omitempty"`
}
// --------------------------------------------------------
// EAuthClass 認証種別
type EAuthClass string
var (
// EAuthClassAccount アカウント認証
EAuthClassAccount = EAuthClass("account")
)
// --------------------------------------------------------
// EAuthMethod 認証方法
type EAuthMethod string
var (
// EAuthMethodAPIKey APIキー認証
EAuthMethodAPIKey = EAuthMethod("apikey")
)
// --------------------------------------------------------
// EExternalPermission 他サービスへのアクセス権
type EExternalPermission string
var (
// EExternalPermissionBill 請求情報
EExternalPermissionBill = EExternalPermission("bill")
// EExternalPermissionCDN ウェブアクセラレータ
EExternalPermissionCDN = EExternalPermission("cdn")
)
// --------------------------------------------------------
// EOperationPenalty ペナルティ
type EOperationPenalty string
var (
// EOperationPenaltyNone ペナルティなし
EOperationPenaltyNone = EOperationPenalty("none")
)
// --------------------------------------------------------
// EPermission アクセスレベル
type EPermission string
var (
// EPermissionCreate 作成・削除権限
EPermissionCreate = EPermission("create")
// EPermissionArrange 設定変更権限
EPermissionArrange = EPermission("arrange")
// EPermissionPower 電源操作権限
EPermissionPower = EPermission("power")
// EPermissionView リソース閲覧権限
EPermissionView = EPermission("view")
)

View file

@ -0,0 +1,88 @@
package sacloud
import (
"encoding/json"
"fmt"
)
// AutoBackup 自動バックアップ(CommonServiceItem)
type AutoBackup struct {
*Resource // ID
propName // 名称
propDescription // 説明
propServiceClass // サービスクラス
propIcon // アイコン
propTags // タグ
propCreatedAt // 作成日時
propModifiedAt // 変更日時
Status *AutoBackupStatus `json:",omitempty"` // ステータス
Provider *AutoBackupProvider `json:",omitempty"` // プロバイダ
Settings *AutoBackupSettings `json:",omitempty"` // 設定
}
// AutoBackupSettings 自動バックアップ設定
type AutoBackupSettings struct {
AccountID json.Number `json:"AccountId,omitempty"` // アカウントID
DiskID string `json:"DiskId,omitempty"` // ディスクID
ZoneID int64 `json:"ZoneId,omitempty"` // ゾーンID
ZoneName string `json:",omitempty"` // ゾーン名称
Autobackup *AutoBackupRecordSets `json:",omitempty"` // 自動バックアップ定義
}
// AutoBackupStatus 自動バックアップステータス
type AutoBackupStatus struct {
AccountID json.Number `json:"AccountId,omitempty"` // アカウントID
DiskID string `json:"DiskId,omitempty"` // ディスクID
ZoneID int64 `json:"ZoneId,omitempty"` // ゾーンID
ZoneName string `json:",omitempty"` // ゾーン名称
}
// AutoBackupProvider 自動バックアッププロバイダ
type AutoBackupProvider struct {
Class string `json:",omitempty"` // クラス
}
// CreateNewAutoBackup 自動バックアップ 作成(CommonServiceItem)
func CreateNewAutoBackup(backupName string, diskID int64) *AutoBackup {
return &AutoBackup{
Resource: &Resource{},
propName: propName{Name: backupName},
Status: &AutoBackupStatus{
DiskID: fmt.Sprintf("%d", diskID),
},
Provider: &AutoBackupProvider{
Class: "autobackup",
},
Settings: &AutoBackupSettings{
Autobackup: &AutoBackupRecordSets{
BackupSpanType: "weekdays",
},
},
}
}
// AllowAutoBackupWeekdays 自動バックアップ実行曜日リスト
func AllowAutoBackupWeekdays() []string {
return []string{"mon", "tue", "wed", "thu", "fri", "sat", "sun"}
}
// AutoBackupRecordSets 自動バックアップ定義
type AutoBackupRecordSets struct {
BackupSpanType string // バックアップ間隔タイプ
BackupSpanWeekdays []string // バックアップ実施曜日
MaximumNumberOfArchives int // 世代数
}
// SetBackupSpanWeekdays バックアップ実行曜日設定
func (a *AutoBackup) SetBackupSpanWeekdays(weekdays []string) {
a.Settings.Autobackup.BackupSpanWeekdays = weekdays
}
// SetBackupMaximumNumberOfArchives 世代数設定
func (a *AutoBackup) SetBackupMaximumNumberOfArchives(max int) {
a.Settings.Autobackup.MaximumNumberOfArchives = max
}

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

@ -0,0 +1,32 @@
package sacloud
import "time"
// Bill 請求情報
type Bill struct {
Amount int64 `json:",omitempty"` // 金額
BillID int64 `json:",omitempty"` // 請求ID
Date *time.Time `json:",omitempty"` // 請求日
MemberID string `json:",omitempty"` // 会員ID
Paid bool `json:",omitempty"` // 支払済フラグ
PayLimit *time.Time `json:",omitempty"` // 支払い期限
PaymentClassID int `json:",omitempty"` // 支払いクラスID
}
// BillDetail 支払い明細情報
type BillDetail struct {
Amount int64 `json:",omitempty"` // 金額
ContractID int64 `json:",omitempty"` // 契約ID
Description string `json:",omitempty"` // 説明
Index int `json:",omitempty"` // インデックス
ServiceClassID int64 `json:",omitempty"` // サービスクラスID
Usage int64 `json:",omitempty"` // 秒数
Zone string `json:",omitempty"` // ゾーン
ContractEndAt *time.Time `json:",omitempty"` // 契約終了日時
}
// IsContractEnded 支払済か判定
func (d *BillDetail) IsContractEnded(t time.Time) bool {
return d.ContractEndAt != nil && d.ContractEndAt.Before(t)
}

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

@ -0,0 +1,30 @@
package sacloud
import (
"encoding/json"
)
// Bridge ブリッジ
type Bridge struct {
*Resource // ID
propName // 名称
propDescription // 説明
propServiceClass // サービスクラス
propRegion // リージョン
propCreatedAt // 作成日時
Info *struct { // インフォ
Switches []*struct { // 接続スイッチリスト
*Switch // スイッチ
ID json.Number `json:",omitempty"` // (HACK) ID
}
}
SwitchInZone *struct { // ゾーン内接続スイッチ
*Resource // ID
propScope // スコープ
Name string `json:",omitempty"` // 名称
ServerCount int `json:",omitempty"` // 接続サーバー数
ApplianceCount int `json:",omitempty"` // 接続アプライアンス数
}
}

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

@ -0,0 +1,17 @@
package sacloud
// CDROM ISOイメージ(CDROM)
type CDROM struct {
*Resource // ID
propName // 名称
propDescription // 説明
propAvailability // 有功状態
propSizeMB // サイズ(MB単位)
propScope // スコープ
propServiceClass // サービスクラス
propStorageClass // ストレージクラス
propStorage // ストレージ
propIcon // アイコン
propTags // タグ
propCreatedAt // 作成日時
}

View file

@ -0,0 +1,326 @@
package sacloud
import (
"fmt"
"strconv"
"time"
)
// Resource IDを持つ、さくらのクラウド上のリソース
type Resource struct {
ID int64 // ID
}
// ResourceIDHolder ID保持インターフェース
type ResourceIDHolder interface {
SetID(int64)
GetID() int64
}
// EmptyID 空ID
const EmptyID int64 = 0
// NewResource 新規リソース作成
func NewResource(id int64) *Resource {
return &Resource{ID: id}
}
// NewResourceByStringID ID文字列からリソース作成
func NewResourceByStringID(id string) *Resource {
intID, err := strconv.ParseInt(id, 10, 64)
if err != nil {
panic(err)
}
return &Resource{ID: intID}
}
// SetID ID 設定
func (n *Resource) SetID(id int64) {
n.ID = id
}
// GetID ID 取得
func (n *Resource) GetID() int64 {
if n == nil {
return -1
}
return n.ID
}
// GetStrID 文字列でID取得
func (n *Resource) GetStrID() string {
if n == nil {
return ""
}
return fmt.Sprintf("%d", n.ID)
}
// EAvailability 有効状態
type EAvailability string
var (
// EAAvailable 有効
EAAvailable = EAvailability("available")
// EAUploading アップロード中
EAUploading = EAvailability("uploading")
// EAFailed 失敗
EAFailed = EAvailability("failed")
// EAMigrating マイグレーション中
EAMigrating = EAvailability("migrating")
)
// IsAvailable 有効状態が"有効"か判定
func (e EAvailability) IsAvailable() bool {
return e == EAAvailable
}
// IsUploading 有効状態が"アップロード中"か判定
func (e EAvailability) IsUploading() bool {
return e == EAUploading
}
// IsFailed 有効状態が"失敗"か判定
func (e EAvailability) IsFailed() bool {
return e == EAFailed
}
// IsMigrating 有効状態が"マイグレーション中"か判定
func (e EAvailability) IsMigrating() bool {
return e == EAMigrating
}
// EInterfaceDriver インターフェースドライバ
type EInterfaceDriver string
var (
// InterfaceDriverVirtIO virtio
InterfaceDriverVirtIO = EInterfaceDriver("virtio")
// InterfaceDriverE1000 e1000
InterfaceDriverE1000 = EInterfaceDriver("e1000")
)
// EServerInstanceStatus サーバーインスタンスステータス
type EServerInstanceStatus struct {
Status string `json:",omitempty"` // 現在のステータス
BeforeStatus string `json:",omitempty"` // 前のステータス
}
// IsUp インスタンスが起動しているか判定
func (e *EServerInstanceStatus) IsUp() bool {
return e.Status == "up"
}
// IsDown インスタンスがダウンしているか確認
func (e *EServerInstanceStatus) IsDown() bool {
return e.Status == "down"
}
// GetStatus ステータス 取得
func (e *EServerInstanceStatus) GetStatus() string {
return e.Status
}
// GetBeforeStatus 以前のステータス 取得
func (e *EServerInstanceStatus) GetBeforeStatus() string {
return e.BeforeStatus
}
// EScope スコープ
type EScope string
var (
// ESCopeShared sharedスコープ
ESCopeShared = EScope("shared")
// ESCopeUser userスコープ
ESCopeUser = EScope("user")
)
// EDiskConnection ディスク接続方法
type EDiskConnection string
// SakuraCloudResources さくらのクラウド上のリソース種別一覧
type SakuraCloudResources struct {
Server *Server `json:",omitempty"` // サーバー
Disk *Disk `json:",omitempty"` // ディスク
Note *Note `json:",omitempty"` // スタートアップスクリプト
Archive *Archive `json:",omitempty"` // アーカイブ
PacketFilter *PacketFilter `json:",omitempty"` // パケットフィルタ
PrivateHost *PrivateHost `json:",omitempty"` // 専有ホスト
Bridge *Bridge `json:",omitempty"` // ブリッジ
Icon *Icon `json:",omitempty"` // アイコン
Image *Image `json:",omitempty"` // 画像
Interface *Interface `json:",omitempty"` // インターフェース
Internet *Internet `json:",omitempty"` // ルーター
IPAddress *IPAddress `json:",omitempty"` // IPv4アドレス
IPv6Addr *IPv6Addr `json:",omitempty"` // IPv6アドレス
IPv6Net *IPv6Net `json:",omitempty"` // IPv6ネットワーク
License *License `json:",omitempty"` // ライセンス
Switch *Switch `json:",omitempty"` // スイッチ
CDROM *CDROM `json:",omitempty"` // ISOイメージ
SSHKey *SSHKey `json:",omitempty"` // 公開鍵
Subnet *Subnet `json:",omitempty"` // IPv4ネットワーク
DiskPlan *ProductDisk `json:",omitempty"` // ディスクプラン
InternetPlan *ProductInternet `json:",omitempty"` // ルータープラン
LicenseInfo *ProductLicense `json:",omitempty"` // ライセンス情報
ServerPlan *ProductServer `json:",omitempty"` // サーバープラン
PrivateHostPlan *ProductPrivateHost `json:",omitempty"` // 専有ホストプラン
Region *Region `json:",omitempty"` // リージョン
Zone *Zone `json:",omitempty"` // ゾーン
FTPServer *FTPServer `json:",omitempty"` // FTPサーバー情報
WebAccelSite *WebAccelSite `json:"Site,omitempty"` // ウェブアクセラレータ サイト
//REMARK: CommonServiceItemとApplianceはapiパッケージにて別途定義
}
// SakuraCloudResourceList さくらのクラウド上のリソース種別一覧(複数形)
type SakuraCloudResourceList struct {
Servers []Server `json:",omitempty"` // サーバー
Disks []Disk `json:",omitempty"` // ディスク
Notes []Note `json:",omitempty"` // スタートアップスクリプト
Archives []Archive `json:",omitempty"` // アーカイブ
PacketFilters []PacketFilter `json:",omitempty"` // パケットフィルタ
PrivateHosts []PrivateHost `json:",omitempty"` // 専有ホスト
Bridges []Bridge `json:",omitempty"` // ブリッジ
Icons []Icon `json:",omitempty"` // アイコン
Interfaces []Interface `json:",omitempty"` // インターフェース
Internet []Internet `json:",omitempty"` // ルーター
IPAddress []IPAddress `json:",omitempty"` // IPv4アドレス
IPv6Addrs []IPv6Addr `json:",omitempty"` // IPv6アドレス
IPv6Nets []IPv6Net `json:",omitempty"` // IPv6ネットワーク
Licenses []License `json:",omitempty"` // ライセンス
Switches []Switch `json:",omitempty"` // スイッチ
CDROMs []CDROM `json:",omitempty"` // ISOイメージ
SSHKeys []SSHKey `json:",omitempty"` // 公開鍵
Subnets []Subnet `json:",omitempty"` // IPv4ネットワーク
DiskPlans []ProductDisk `json:",omitempty"` // ディスクプラン
InternetPlans []ProductInternet `json:",omitempty"` // ルータープラン
LicenseInfo []ProductLicense `json:",omitempty"` // ライセンス情報
ServerPlans []ProductServer `json:",omitempty"` // サーバープラン
PrivateHostPlans []ProductPrivateHost `json:",omitempty"` // 専有ホストプラン
Regions []Region `json:",omitempty"` // リージョン
Zones []Zone `json:",omitempty"` // ゾーン
ServiceClasses []PublicPrice `json:",omitempty"` // サービスクラス(価格情報)
WebAccelSites []WebAccelSite `json:"Sites,omitempty"` // ウェブアクセラレータ サイト
//REMARK:CommonServiceItemとApplianceはapiパッケージにて別途定義
}
// Request APIリクエスト型
type Request struct {
SakuraCloudResources // さくらのクラウドリソース
From int `json:",omitempty"` // ページング FROM
Count int `json:",omitempty"` // 取得件数
Sort []string `json:",omitempty"` // ソート
Filter map[string]interface{} `json:",omitempty"` // フィルタ
Exclude []string `json:",omitempty"` // 除外する項目
Include []string `json:",omitempty"` // 取得する項目
}
// AddFilter フィルタの追加
func (r *Request) AddFilter(key string, value interface{}) *Request {
if r.Filter == nil {
r.Filter = map[string]interface{}{}
}
r.Filter[key] = value
return r
}
// AddSort ソートの追加
func (r *Request) AddSort(keyName string) *Request {
if r.Sort == nil {
r.Sort = []string{}
}
r.Sort = append(r.Sort, keyName)
return r
}
// AddExclude 除外対象の追加
func (r *Request) AddExclude(keyName string) *Request {
if r.Exclude == nil {
r.Exclude = []string{}
}
r.Exclude = append(r.Exclude, keyName)
return r
}
// AddInclude 選択対象の追加
func (r *Request) AddInclude(keyName string) *Request {
if r.Include == nil {
r.Include = []string{}
}
r.Include = append(r.Include, keyName)
return r
}
// ResultFlagValue レスポンス値でのフラグ項目
type ResultFlagValue struct {
IsOk bool `json:"is_ok,omitempty"` // is_ok項目
Success bool `json:",omitempty"` // success項目
}
// SearchResponse 検索レスポンス
type SearchResponse struct {
Total int `json:",omitempty"` // トータル件数
From int `json:",omitempty"` // ページング開始ページ
Count int `json:",omitempty"` // 件数
ResponsedAt *time.Time `json:",omitempty"` // 応答日時
*SakuraCloudResourceList // さくらのクラウドリソース(複数形)
}
// Response レスポンス型
type Response struct {
*ResultFlagValue // フラグ値
*SakuraCloudResources // さくらのクラウドリソース(単数形)
}
// ResultErrorValue レスポンスエラー型
type ResultErrorValue struct {
IsFatal bool `json:"is_fatal,omitempty"` // IsFatal
Serial string `json:"serial,omitempty"` // Serial
Status string `json:"status,omitempty"` // Status
ErrorCode string `json:"error_code,omitempty"` // ErrorCode
ErrorMessage string `json:"error_msg,omitempty"` // ErrorMessage
}
// MigrationJobStatus マイグレーションジョブステータス
type MigrationJobStatus struct {
Status string `json:",omitempty"` // ステータス
Delays *struct { // Delays
Start *struct { // 開始
Max int `json:",omitempty"` // 最大
Min int `json:",omitempty"` // 最小
} `json:",omitempty"`
Finish *struct { // 終了
Max int `json:",omitempty"` // 最大
Min int `json:",omitempty"` // 最小
} `json:",omitempty"`
}
}
var (
// TagGroupA サーバをグループ化し起動ホストを分離します(グループA)
TagGroupA = "@group=a"
// TagGroupB サーバをグループ化し起動ホストを分離します(グループB)
TagGroupB = "@group=b"
// TagGroupC サーバをグループ化し起動ホストを分離します(グループC)
TagGroupC = "@group=b"
// TagGroupD サーバをグループ化し起動ホストを分離します(グループD)
TagGroupD = "@group=b"
// TagAutoReboot サーバ停止時に自動起動します
TagAutoReboot = "@auto-reboot"
// TagKeyboardUS リモートスクリーン画面でUSキーボード入力します
TagKeyboardUS = "@keyboard-us"
// TagBootCDROM 優先ブートデバイスをCD-ROMに設定します
TagBootCDROM = "@boot-cdrom"
// TagBootNetwork 優先ブートデバイスをPXE bootに設定します
TagBootNetwork = "@boot-network"
)
// DatetimeLayout さくらのクラウドAPIで利用される日付型のレイアウト(RFC3339)
var DatetimeLayout = "2006-01-02T15:04:05-07:00"

View file

@ -0,0 +1,435 @@
package sacloud
import (
"encoding/json"
"strings"
)
// Database データベース(appliance)
type Database struct {
*Appliance // アプライアンス共通属性
Remark *DatabaseRemark `json:",omitempty"` // リマーク
Settings *DatabaseSettings `json:",omitempty"` // データベース設定
}
// DatabaseRemark データベースリマーク
type DatabaseRemark struct {
*ApplianceRemarkBase
propPlanID // プランID
DBConf *DatabaseCommonRemarks // コンフィグ
Network *DatabaseRemarkNetwork // ネットワーク
SourceAppliance *Resource // クローン元DB
Zone struct { // ゾーン
ID json.Number `json:",omitempty"` // ゾーンID
}
}
// DatabaseRemarkNetwork ネットワーク
type DatabaseRemarkNetwork struct {
NetworkMaskLen int `json:",omitempty"` // ネットワークマスク長
DefaultRoute string `json:",omitempty"` // デフォルトルート
}
// UnmarshalJSON JSONアンマーシャル(配列、オブジェクトが混在するためここで対応)
func (s *DatabaseRemarkNetwork) UnmarshalJSON(data []byte) error {
targetData := strings.Replace(strings.Replace(string(data), " ", "", -1), "\n", "", -1)
if targetData == `[]` {
return nil
}
tmp := &struct {
// NetworkMaskLen
NetworkMaskLen int `json:",omitempty"`
// DefaultRoute
DefaultRoute string `json:",omitempty"`
}{}
if err := json.Unmarshal(data, &tmp); err != nil {
return err
}
s.NetworkMaskLen = tmp.NetworkMaskLen
s.DefaultRoute = tmp.DefaultRoute
return nil
}
// DatabaseCommonRemarks リマークリスト
type DatabaseCommonRemarks struct {
Common *DatabaseCommonRemark // Common
}
// DatabaseCommonRemark リマーク
type DatabaseCommonRemark struct {
DatabaseName string `json:",omitempty"` // 名称
DatabaseRevision string `json:",omitempty"` // リビジョン
DatabaseTitle string `json:",omitempty"` // タイトル
DatabaseVersion string `json:",omitempty"` // バージョン
ReplicaPassword string `json:",omitempty"` // レプリケーションパスワード
ReplicaUser string `json:",omitempty"` // レプリケーションユーザー
}
// DatabaseSettings データベース設定リスト
type DatabaseSettings struct {
DBConf *DatabaseSetting `json:",omitempty"` // コンフィグ
}
// DatabaseSetting データベース設定
type DatabaseSetting struct {
Backup *DatabaseBackupSetting `json:",omitempty"` // バックアップ設定
Common *DatabaseCommonSetting `json:",oitempty"` // 共通設定
}
// DatabaseServer データベースサーバー情報
type DatabaseServer struct {
IPAddress string `json:",omitempty"` // IPアドレス
Port string `json:",omitempty"` // ポート
Enabled string `json:",omitempty"` // 有効/無効
Status string `json:",omitempty"` // ステータス
ActiveConn string `json:",omitempty"` // アクティブコネクション
}
// DatabasePlan プラン
type DatabasePlan int
var (
// DatabasePlanMini ミニプラン(後方互換用)
DatabasePlanMini = DatabasePlan(10)
// DatabasePlan10G 10Gプラン
DatabasePlan10G = DatabasePlan(10)
// DatabasePlan30G 30Gプラン
DatabasePlan30G = DatabasePlan(30)
// DatabasePlan90G 90Gプラン
DatabasePlan90G = DatabasePlan(90)
// DatabasePlan240G 240Gプラン
DatabasePlan240G = DatabasePlan(240)
// DatabasePlan500G 500Gプラン
DatabasePlan500G = DatabasePlan(500)
// DatabasePlan1T 1Tプラン
DatabasePlan1T = DatabasePlan(1000)
)
// AllowDatabasePlans 指定可能なデータベースプラン
func AllowDatabasePlans() []int {
return []int{
int(DatabasePlan10G),
int(DatabasePlan30G),
int(DatabasePlan90G),
int(DatabasePlan240G),
int(DatabasePlan500G),
int(DatabasePlan1T),
}
}
// DatabaseBackupSetting バックアップ設定
type DatabaseBackupSetting struct {
Rotate int `json:",omitempty"` // ローテーション世代数
Time string `json:",omitempty"` // 開始時刻
}
// DatabaseCommonSetting 共通設定
type DatabaseCommonSetting struct {
DefaultUser string `json:",omitempty"` // ユーザー名
UserPassword string `json:",omitempty"` // ユーザーパスワード
WebUI interface{} `json:",omitempty"` // WebUIのIPアドレス or FQDN
ServicePort string // ポート番号
SourceNetwork SourceNetwork // 接続許可ネットワーク
}
// SourceNetwork 接続許可ネットワーク
type SourceNetwork []string
// UnmarshalJSON JSONアンマーシャル(配列と文字列が混在するためここで対応)
func (s *SourceNetwork) UnmarshalJSON(data []byte) error {
// SourceNetworkが未設定の場合、APIレスポンスが""となるため回避する
if string(data) == `""` {
return nil
}
tmp := []string{}
if err := json.Unmarshal(data, &tmp); err != nil {
return err
}
source := SourceNetwork(tmp)
*s = source
return nil
}
// MarshalJSON JSONマーシャル(配列と文字列が混在するためここで対応)
func (s *SourceNetwork) MarshalJSON() ([]byte, error) {
if s == nil {
return []byte(""), nil
}
list := []string(*s)
if len(list) == 0 || (len(list) == 1 && list[0] == "") {
return []byte(`""`), nil
}
return json.Marshal(list)
}
// CreateDatabaseValue データベース作成用パラメータ
type CreateDatabaseValue struct {
Plan DatabasePlan // プラン
AdminPassword string // 管理者パスワード
DefaultUser string // ユーザー名
UserPassword string // パスワード
SourceNetwork []string // 接続許可ネットワーク
ServicePort string // ポート
// BackupRotate int // バックアップ世代数
BackupTime string // バックアップ開始時間
SwitchID string // 接続先スイッチ
IPAddress1 string // IPアドレス1
MaskLen int // ネットワークマスク長
DefaultRoute string // デフォルトルート
Name string // 名称
Description string // 説明
Tags []string // タグ
Icon *Resource // アイコン
WebUI bool // WebUI有効
DatabaseName string // データベース名
DatabaseRevision string // リビジョン
DatabaseTitle string // データベースタイトル
DatabaseVersion string // データベースバージョン
ReplicaUser string // ReplicaUser レプリケーションユーザー
SourceAppliance *Resource // クローン元DB
//ReplicaPassword string // in current API version , setted admin password
}
// NewCreatePostgreSQLDatabaseValue PostgreSQL作成用パラメーター
func NewCreatePostgreSQLDatabaseValue() *CreateDatabaseValue {
return &CreateDatabaseValue{
DatabaseName: "postgres",
DatabaseVersion: "10",
}
}
// NewCreateMariaDBDatabaseValue MariaDB作成用パラメーター
func NewCreateMariaDBDatabaseValue() *CreateDatabaseValue {
return &CreateDatabaseValue{
DatabaseName: "MariaDB",
DatabaseVersion: "10.2",
}
}
// NewCloneDatabaseValue クローンDB作成用パラメータ
func NewCloneDatabaseValue(db *Database) *CreateDatabaseValue {
return &CreateDatabaseValue{
DatabaseName: db.Remark.DBConf.Common.DatabaseName,
DatabaseVersion: db.Remark.DBConf.Common.DatabaseVersion,
SourceAppliance: NewResource(db.ID),
}
}
// CreateNewDatabase データベース作成
func CreateNewDatabase(values *CreateDatabaseValue) *Database {
db := &Database{
// Appliance
Appliance: &Appliance{
// Class
Class: "database",
// Name
propName: propName{Name: values.Name},
// Description
propDescription: propDescription{Description: values.Description},
// TagsType
propTags: propTags{
// Tags
Tags: values.Tags,
},
// Icon
propIcon: propIcon{
&Icon{
// Resource
Resource: values.Icon,
},
},
// Plan
//propPlanID: propPlanID{Plan: &Resource{ID: int64(values.Plan)}},
},
// Remark
Remark: &DatabaseRemark{
// ApplianceRemarkBase
ApplianceRemarkBase: &ApplianceRemarkBase{
// Servers
Servers: []interface{}{""},
},
// DBConf
DBConf: &DatabaseCommonRemarks{
// Common
Common: &DatabaseCommonRemark{
// DatabaseName
DatabaseName: values.DatabaseName,
// DatabaseRevision
DatabaseRevision: values.DatabaseRevision,
// DatabaseTitle
DatabaseTitle: values.DatabaseTitle,
// DatabaseVersion
DatabaseVersion: values.DatabaseVersion,
// ReplicaUser
// ReplicaUser: values.ReplicaUser,
// ReplicaPassword
// ReplicaPassword: values.AdminPassword,
},
},
// Plan
propPlanID: propPlanID{Plan: &Resource{ID: int64(values.Plan)}},
SourceAppliance: values.SourceAppliance,
},
// Settings
Settings: &DatabaseSettings{
// DBConf
DBConf: &DatabaseSetting{
// Backup
Backup: &DatabaseBackupSetting{
// Rotate
// Rotate: values.BackupRotate,
Rotate: 8,
// Time
Time: values.BackupTime,
},
// Common
Common: &DatabaseCommonSetting{
// DefaultUser
DefaultUser: values.DefaultUser,
// UserPassword
UserPassword: values.UserPassword,
// SourceNetwork
SourceNetwork: SourceNetwork(values.SourceNetwork),
// ServicePort
ServicePort: values.ServicePort,
},
},
},
}
db.Remark.Switch = &ApplianceRemarkSwitch{
// ID
ID: values.SwitchID,
}
db.Remark.Network = &DatabaseRemarkNetwork{
// NetworkMaskLen
NetworkMaskLen: values.MaskLen,
// DefaultRoute
DefaultRoute: values.DefaultRoute,
}
db.Remark.Servers = []interface{}{
map[string]interface{}{"IPAddress": values.IPAddress1},
}
if values.WebUI {
db.Settings.DBConf.Common.WebUI = values.WebUI
}
return db
}
// CloneNewDatabase データベース作成
func CloneNewDatabase(values *CreateDatabaseValue) *Database {
db := &Database{
// Appliance
Appliance: &Appliance{
// Class
Class: "database",
// Name
propName: propName{Name: values.Name},
// Description
propDescription: propDescription{Description: values.Description},
// TagsType
propTags: propTags{
// Tags
Tags: values.Tags,
},
// Icon
propIcon: propIcon{
&Icon{
// Resource
Resource: values.Icon,
},
},
// Plan
//propPlanID: propPlanID{Plan: &Resource{ID: int64(values.Plan)}},
},
// Remark
Remark: &DatabaseRemark{
// ApplianceRemarkBase
ApplianceRemarkBase: &ApplianceRemarkBase{
// Servers
Servers: []interface{}{""},
},
// DBConf
DBConf: &DatabaseCommonRemarks{
// Common
Common: &DatabaseCommonRemark{
DatabaseName: values.DatabaseName,
DatabaseVersion: values.DatabaseVersion,
},
},
// Plan
propPlanID: propPlanID{Plan: &Resource{ID: int64(values.Plan)}},
SourceAppliance: values.SourceAppliance,
},
// Settings
Settings: &DatabaseSettings{
// DBConf
DBConf: &DatabaseSetting{
// Backup
Backup: &DatabaseBackupSetting{
// Rotate
// Rotate: values.BackupRotate,
Rotate: 8,
// Time
Time: values.BackupTime,
},
// Common
Common: &DatabaseCommonSetting{
// SourceNetwork
SourceNetwork: SourceNetwork(values.SourceNetwork),
// ServicePort
ServicePort: values.ServicePort,
},
},
},
}
db.Remark.Switch = &ApplianceRemarkSwitch{
// ID
ID: values.SwitchID,
}
db.Remark.Network = &DatabaseRemarkNetwork{
// NetworkMaskLen
NetworkMaskLen: values.MaskLen,
// DefaultRoute
DefaultRoute: values.DefaultRoute,
}
db.Remark.Servers = []interface{}{
map[string]interface{}{"IPAddress": values.IPAddress1},
}
if values.WebUI {
db.Settings.DBConf.Common.WebUI = values.WebUI
}
return db
}
// AddSourceNetwork 接続許可ネットワーク 追加
func (s *Database) AddSourceNetwork(nw string) {
res := []string(s.Settings.DBConf.Common.SourceNetwork)
res = append(res, nw)
s.Settings.DBConf.Common.SourceNetwork = SourceNetwork(res)
}
// DeleteSourceNetwork 接続許可ネットワーク 削除
func (s *Database) DeleteSourceNetwork(nw string) {
res := []string{}
for _, s := range s.Settings.DBConf.Common.SourceNetwork {
if s != nw {
res = append(res, s)
}
}
s.Settings.DBConf.Common.SourceNetwork = SourceNetwork(res)
}

Some files were not shown because too many files have changed in this diff Show more