forked from TrueCloudLab/lego
Add DNS Provider for SAKURA Cloud (#456)
This commit is contained in:
parent
a1585a7b9a
commit
05921d9810
185 changed files with 22182 additions and 5 deletions
13
Gopkg.lock
generated
13
Gopkg.lock
generated
|
@ -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
|
||||
|
|
12
Gopkg.toml
12
Gopkg.toml
|
@ -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
1
cli.go
|
@ -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()
|
||||
|
||||
|
|
|
@ -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":
|
||||
|
|
144
providers/dns/sakuracloud/sakuracloud.go
Normal file
144
providers/dns/sakuracloud/sakuracloud.go
Normal 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
|
||||
}
|
111
providers/dns/sakuracloud/sakuracloud_test.go
Normal file
111
providers/dns/sakuracloud/sakuracloud_test.go
Normal 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
207
vendor/github.com/sacloud/libsacloud/LICENSE.txt
generated
vendored
Normal 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
344
vendor/github.com/sacloud/libsacloud/api/archive.go
generated
vendored
Normal 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
251
vendor/github.com/sacloud/libsacloud/api/archive_gen.go
generated
vendored
Normal 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
|
||||
}
|
42
vendor/github.com/sacloud/libsacloud/api/auth_status.go
generated
vendored
Normal file
42
vendor/github.com/sacloud/libsacloud/api/auth_status.go
generated
vendored
Normal 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
116
vendor/github.com/sacloud/libsacloud/api/auto_backup.go
generated
vendored
Normal 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)
|
||||
})
|
||||
}
|
239
vendor/github.com/sacloud/libsacloud/api/auto_backup_gen.go
generated
vendored
Normal file
239
vendor/github.com/sacloud/libsacloud/api/auto_backup_gen.go
generated
vendored
Normal 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
277
vendor/github.com/sacloud/libsacloud/api/base_api.go
generated
vendored
Normal 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
185
vendor/github.com/sacloud/libsacloud/api/bill.go
generated
vendored
Normal 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
18
vendor/github.com/sacloud/libsacloud/api/bridge.go
generated
vendored
Normal 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
243
vendor/github.com/sacloud/libsacloud/api/bridge_gen.go
generated
vendored
Normal 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
80
vendor/github.com/sacloud/libsacloud/api/cdrom.go
generated
vendored
Normal 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
250
vendor/github.com/sacloud/libsacloud/api/cdrom_gen.go
generated
vendored
Normal 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
608
vendor/github.com/sacloud/libsacloud/api/client.go
generated
vendored
Normal 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
429
vendor/github.com/sacloud/libsacloud/api/database.go
generated
vendored
Normal 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)
|
||||
}
|
238
vendor/github.com/sacloud/libsacloud/api/database_gen.go
generated
vendored
Normal file
238
vendor/github.com/sacloud/libsacloud/api/database_gen.go
generated
vendored
Normal 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
283
vendor/github.com/sacloud/libsacloud/api/disk.go
generated
vendored
Normal 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
228
vendor/github.com/sacloud/libsacloud/api/disk_gen.go
generated
vendored
Normal 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
206
vendor/github.com/sacloud/libsacloud/api/dns.go
generated
vendored
Normal 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
238
vendor/github.com/sacloud/libsacloud/api/dns_gen.go
generated
vendored
Normal 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
176
vendor/github.com/sacloud/libsacloud/api/doc.go
generated
vendored
Normal 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
79
vendor/github.com/sacloud/libsacloud/api/error.go
generated
vendored
Normal 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
202
vendor/github.com/sacloud/libsacloud/api/gslb.go
generated
vendored
Normal 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
238
vendor/github.com/sacloud/libsacloud/api/gslb_gen.go
generated
vendored
Normal 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
31
vendor/github.com/sacloud/libsacloud/api/icon.go
generated
vendored
Normal 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
247
vendor/github.com/sacloud/libsacloud/api/icon_gen.go
generated
vendored
Normal 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
83
vendor/github.com/sacloud/libsacloud/api/interface.go
generated
vendored
Normal 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)
|
||||
}
|
243
vendor/github.com/sacloud/libsacloud/api/interface_gen.go
generated
vendored
Normal file
243
vendor/github.com/sacloud/libsacloud/api/interface_gen.go
generated
vendored
Normal 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
143
vendor/github.com/sacloud/libsacloud/api/internet.go
generated
vendored
Normal 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)
|
||||
}
|
243
vendor/github.com/sacloud/libsacloud/api/internet_gen.go
generated
vendored
Normal file
243
vendor/github.com/sacloud/libsacloud/api/internet_gen.go
generated
vendored
Normal 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
56
vendor/github.com/sacloud/libsacloud/api/ipaddress.go
generated
vendored
Normal 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)
|
||||
})
|
||||
}
|
231
vendor/github.com/sacloud/libsacloud/api/ipaddress_gen.go
generated
vendored
Normal file
231
vendor/github.com/sacloud/libsacloud/api/ipaddress_gen.go
generated
vendored
Normal 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
96
vendor/github.com/sacloud/libsacloud/api/ipv6addr.go
generated
vendored
Normal 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)
|
||||
})
|
||||
}
|
232
vendor/github.com/sacloud/libsacloud/api/ipv6addr_gen.go
generated
vendored
Normal file
232
vendor/github.com/sacloud/libsacloud/api/ipv6addr_gen.go
generated
vendored
Normal 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
18
vendor/github.com/sacloud/libsacloud/api/ipv6net.go
generated
vendored
Normal 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
229
vendor/github.com/sacloud/libsacloud/api/ipv6net_gen.go
generated
vendored
Normal 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
18
vendor/github.com/sacloud/libsacloud/api/license.go
generated
vendored
Normal 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
243
vendor/github.com/sacloud/libsacloud/api/license_gen.go
generated
vendored
Normal 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
|
||||
}
|
232
vendor/github.com/sacloud/libsacloud/api/load_balancer.go
generated
vendored
Normal file
232
vendor/github.com/sacloud/libsacloud/api/load_balancer.go
generated
vendored
Normal 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)
|
||||
}
|
238
vendor/github.com/sacloud/libsacloud/api/load_balancer_gen.go
generated
vendored
Normal file
238
vendor/github.com/sacloud/libsacloud/api/load_balancer_gen.go
generated
vendored
Normal 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
|
||||
//}
|
339
vendor/github.com/sacloud/libsacloud/api/mobile_gateway.go
generated
vendored
Normal file
339
vendor/github.com/sacloud/libsacloud/api/mobile_gateway.go
generated
vendored
Normal 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
|
||||
}
|
238
vendor/github.com/sacloud/libsacloud/api/mobile_gateway_gen.go
generated
vendored
Normal file
238
vendor/github.com/sacloud/libsacloud/api/mobile_gateway_gen.go
generated
vendored
Normal 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
50
vendor/github.com/sacloud/libsacloud/api/newsfeed.go
generated
vendored
Normal 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
234
vendor/github.com/sacloud/libsacloud/api/nfs.go
generated
vendored
Normal 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
238
vendor/github.com/sacloud/libsacloud/api/nfs_gen.go
generated
vendored
Normal 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
18
vendor/github.com/sacloud/libsacloud/api/note.go
generated
vendored
Normal 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
247
vendor/github.com/sacloud/libsacloud/api/note_gen.go
generated
vendored
Normal 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
|
||||
}
|
18
vendor/github.com/sacloud/libsacloud/api/packet_filter.go
generated
vendored
Normal file
18
vendor/github.com/sacloud/libsacloud/api/packet_filter.go
generated
vendored
Normal 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"
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
243
vendor/github.com/sacloud/libsacloud/api/packet_filter_gen.go
generated
vendored
Normal file
243
vendor/github.com/sacloud/libsacloud/api/packet_filter_gen.go
generated
vendored
Normal 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
156
vendor/github.com/sacloud/libsacloud/api/polling.go
generated
vendored
Normal 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
|
||||
}
|
||||
}
|
18
vendor/github.com/sacloud/libsacloud/api/private_host.go
generated
vendored
Normal file
18
vendor/github.com/sacloud/libsacloud/api/private_host.go
generated
vendored
Normal 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"
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
243
vendor/github.com/sacloud/libsacloud/api/private_host_gen.go
generated
vendored
Normal file
243
vendor/github.com/sacloud/libsacloud/api/private_host_gen.go
generated
vendored
Normal 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
|
||||
}
|
18
vendor/github.com/sacloud/libsacloud/api/product_disk.go
generated
vendored
Normal file
18
vendor/github.com/sacloud/libsacloud/api/product_disk.go
generated
vendored
Normal 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"
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
239
vendor/github.com/sacloud/libsacloud/api/product_disk_gen.go
generated
vendored
Normal file
239
vendor/github.com/sacloud/libsacloud/api/product_disk_gen.go
generated
vendored
Normal 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
|
||||
}
|
18
vendor/github.com/sacloud/libsacloud/api/product_internet.go
generated
vendored
Normal file
18
vendor/github.com/sacloud/libsacloud/api/product_internet.go
generated
vendored
Normal 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"
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
239
vendor/github.com/sacloud/libsacloud/api/product_internet_gen.go
generated
vendored
Normal file
239
vendor/github.com/sacloud/libsacloud/api/product_internet_gen.go
generated
vendored
Normal 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
|
||||
}
|
18
vendor/github.com/sacloud/libsacloud/api/product_license.go
generated
vendored
Normal file
18
vendor/github.com/sacloud/libsacloud/api/product_license.go
generated
vendored
Normal 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"
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
235
vendor/github.com/sacloud/libsacloud/api/product_license_gen.go
generated
vendored
Normal file
235
vendor/github.com/sacloud/libsacloud/api/product_license_gen.go
generated
vendored
Normal 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
|
||||
}
|
19
vendor/github.com/sacloud/libsacloud/api/product_private_host.go
generated
vendored
Normal file
19
vendor/github.com/sacloud/libsacloud/api/product_private_host.go
generated
vendored
Normal 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"
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
239
vendor/github.com/sacloud/libsacloud/api/product_private_host_gen.go
generated
vendored
Normal file
239
vendor/github.com/sacloud/libsacloud/api/product_private_host_gen.go
generated
vendored
Normal 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
|
||||
}
|
71
vendor/github.com/sacloud/libsacloud/api/product_server.go
generated
vendored
Normal file
71
vendor/github.com/sacloud/libsacloud/api/product_server.go
generated
vendored
Normal 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
|
||||
}
|
239
vendor/github.com/sacloud/libsacloud/api/product_server_gen.go
generated
vendored
Normal file
239
vendor/github.com/sacloud/libsacloud/api/product_server_gen.go
generated
vendored
Normal 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
|
||||
}
|
18
vendor/github.com/sacloud/libsacloud/api/public_price.go
generated
vendored
Normal file
18
vendor/github.com/sacloud/libsacloud/api/public_price.go
generated
vendored
Normal 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"
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
236
vendor/github.com/sacloud/libsacloud/api/public_price_gen.go
generated
vendored
Normal file
236
vendor/github.com/sacloud/libsacloud/api/public_price_gen.go
generated
vendored
Normal 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
18
vendor/github.com/sacloud/libsacloud/api/region.go
generated
vendored
Normal 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
239
vendor/github.com/sacloud/libsacloud/api/region_gen.go
generated
vendored
Normal 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
287
vendor/github.com/sacloud/libsacloud/api/server.go
generated
vendored
Normal 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
243
vendor/github.com/sacloud/libsacloud/api/server_gen.go
generated
vendored
Normal 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
217
vendor/github.com/sacloud/libsacloud/api/sim.go
generated
vendored
Normal 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
238
vendor/github.com/sacloud/libsacloud/api/sim_gen.go
generated
vendored
Normal 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
|
||||
//}
|
133
vendor/github.com/sacloud/libsacloud/api/simple_monitor.go
generated
vendored
Normal file
133
vendor/github.com/sacloud/libsacloud/api/simple_monitor.go
generated
vendored
Normal 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
|
||||
}
|
238
vendor/github.com/sacloud/libsacloud/api/simple_monitor_gen.go
generated
vendored
Normal file
238
vendor/github.com/sacloud/libsacloud/api/simple_monitor_gen.go
generated
vendored
Normal 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
64
vendor/github.com/sacloud/libsacloud/api/ssh_key.go
generated
vendored
Normal 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
243
vendor/github.com/sacloud/libsacloud/api/ssh_key_gen.go
generated
vendored
Normal 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
18
vendor/github.com/sacloud/libsacloud/api/subnet.go
generated
vendored
Normal 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
229
vendor/github.com/sacloud/libsacloud/api/subnet_gen.go
generated
vendored
Normal 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
55
vendor/github.com/sacloud/libsacloud/api/switch.go
generated
vendored
Normal 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
243
vendor/github.com/sacloud/libsacloud/api/switch_gen.go
generated
vendored
Normal 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
437
vendor/github.com/sacloud/libsacloud/api/vpc_router.go
generated
vendored
Normal 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
|
||||
}
|
238
vendor/github.com/sacloud/libsacloud/api/vpc_router_gen.go
generated
vendored
Normal file
238
vendor/github.com/sacloud/libsacloud/api/vpc_router_gen.go
generated
vendored
Normal 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
114
vendor/github.com/sacloud/libsacloud/api/webaccel.go
generated
vendored
Normal 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
|
||||
}
|
85
vendor/github.com/sacloud/libsacloud/api/webaccel_search.go
generated
vendored
Normal file
85
vendor/github.com/sacloud/libsacloud/api/webaccel_search.go
generated
vendored
Normal 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
19
vendor/github.com/sacloud/libsacloud/api/zone.go
generated
vendored
Normal 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
239
vendor/github.com/sacloud/libsacloud/api/zone_gen.go
generated
vendored
Normal 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
5
vendor/github.com/sacloud/libsacloud/libsacloud.go
generated
vendored
Normal 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"
|
9
vendor/github.com/sacloud/libsacloud/sacloud/account.go
generated
vendored
Normal file
9
vendor/github.com/sacloud/libsacloud/sacloud/account.go
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
package sacloud
|
||||
|
||||
// Account さくらのクラウド アカウント
|
||||
type Account struct {
|
||||
*Resource
|
||||
propName // 名称
|
||||
Class string `json:",omitempty"` // リソースクラス
|
||||
Code string `json:",omitempty"` // アカウントコード
|
||||
}
|
57
vendor/github.com/sacloud/libsacloud/sacloud/appliance.go
generated
vendored
Normal file
57
vendor/github.com/sacloud/libsacloud/sacloud/appliance.go
generated
vendored
Normal 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 // デフォルトルート
|
||||
|
||||
}
|
22
vendor/github.com/sacloud/libsacloud/sacloud/archive.go
generated
vendored
Normal file
22
vendor/github.com/sacloud/libsacloud/sacloud/archive.go
generated
vendored
Normal 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 // 作成日時
|
||||
}
|
79
vendor/github.com/sacloud/libsacloud/sacloud/auth_status.go
generated
vendored
Normal file
79
vendor/github.com/sacloud/libsacloud/sacloud/auth_status.go
generated
vendored
Normal 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")
|
||||
)
|
88
vendor/github.com/sacloud/libsacloud/sacloud/auto_backup.go
generated
vendored
Normal file
88
vendor/github.com/sacloud/libsacloud/sacloud/auto_backup.go
generated
vendored
Normal 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
32
vendor/github.com/sacloud/libsacloud/sacloud/bill.go
generated
vendored
Normal 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
30
vendor/github.com/sacloud/libsacloud/sacloud/bridge.go
generated
vendored
Normal 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
17
vendor/github.com/sacloud/libsacloud/sacloud/cdrom.go
generated
vendored
Normal 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 // 作成日時
|
||||
}
|
326
vendor/github.com/sacloud/libsacloud/sacloud/common_types.go
generated
vendored
Normal file
326
vendor/github.com/sacloud/libsacloud/sacloud/common_types.go
generated
vendored
Normal 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"
|
435
vendor/github.com/sacloud/libsacloud/sacloud/database.go
generated
vendored
Normal file
435
vendor/github.com/sacloud/libsacloud/sacloud/database.go
generated
vendored
Normal 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
Loading…
Reference in a new issue