1// Copyright 2016-2020 The Libsacloud Authors 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package builder 16 17import ( 18 "time" 19 20 "github.com/sacloud/libsacloud/api" 21 "github.com/sacloud/libsacloud/sacloud" 22 "github.com/sacloud/libsacloud/sacloud/ostype" 23) 24 25// APIClient represents SAKURA CLOUD api client 26type APIClient interface { 27 ServerNew() *sacloud.Server 28 ServerRead(serverID sacloud.ID) (*sacloud.Server, error) 29 ServerCreate(value *sacloud.Server) (*sacloud.Server, error) 30 ServerSleepUntilUp(serverID sacloud.ID, timeout time.Duration) error 31 ServerInsertCDROM(serverID sacloud.ID, cdromID sacloud.ID) (bool, error) 32 ServerBoot(serverID sacloud.ID) (bool, error) 33 34 SSHKeyNew() *sacloud.SSHKey 35 SSHKeyCreate(value *sacloud.SSHKey) (*sacloud.SSHKey, error) 36 SSHKeyDelete(sshKeyID sacloud.ID) (*sacloud.SSHKey, error) 37 SSHKeyGenerate(name string, passPhrase string, desc string) (*sacloud.SSHKeyGenerated, error) 38 39 NoteNew() *sacloud.Note 40 NoteCreate(value *sacloud.Note) (*sacloud.Note, error) 41 NoteDelete(noteID sacloud.ID) (*sacloud.Note, error) 42 43 DiskNew() *sacloud.Disk 44 DiskNewCondig() *sacloud.DiskEditValue 45 DiskCreate(value *sacloud.Disk) (*sacloud.Disk, error) 46 DiskCreateWithConfig(value *sacloud.Disk, config *sacloud.DiskEditValue, bootAtAvailable bool) (*sacloud.Disk, error) 47 DiskSleepWhileCopying(id sacloud.ID, timeout time.Duration) error 48 DiskConnectToServer(diskID sacloud.ID, serverID sacloud.ID) (bool, error) 49 50 InterfaceConnectToPacketFilter(interfaceID sacloud.ID, packetFilterID sacloud.ID) (bool, error) 51 InterfaceSetDisplayIPAddress(interfaceID sacloud.ID, ip string) (bool, error) // Interface 52 53 ServerPlanGetBySpec(core, memGB int, gen sacloud.PlanGenerations, commitment sacloud.ECommitment) (*sacloud.ProductServer, error) 54 55 ArchiveFindByOSType(os ostype.ArchiveOSTypes) (*sacloud.Archive, error) 56 57 GetTimeoutDuration() time.Duration 58} 59 60// NewAPIClient create new APICLient from *api.Client 61func NewAPIClient(client *api.Client) APIClient { 62 return &apiClient{client: client} 63} 64 65type apiClient struct { 66 client *api.Client 67} 68 69func (a *apiClient) ServerNew() *sacloud.Server { 70 return a.client.Server.New() 71} 72 73func (a *apiClient) ServerRead(serverID sacloud.ID) (*sacloud.Server, error) { 74 return a.client.Server.Read(serverID) 75} 76 77func (a *apiClient) ServerCreate(value *sacloud.Server) (*sacloud.Server, error) { 78 return a.client.Server.Create(value) 79} 80 81func (a *apiClient) ServerSleepUntilUp(serverID sacloud.ID, timeout time.Duration) error { 82 return a.client.Server.SleepUntilUp(serverID, timeout) 83} 84 85func (a *apiClient) ServerInsertCDROM(serverID sacloud.ID, cdromID sacloud.ID) (bool, error) { 86 return a.client.Server.InsertCDROM(serverID, cdromID) 87} 88 89func (a *apiClient) ServerBoot(serverID sacloud.ID) (bool, error) { 90 return a.client.Server.Boot(serverID) 91} 92 93func (a *apiClient) SSHKeyNew() *sacloud.SSHKey { 94 return a.client.SSHKey.New() 95} 96 97func (a *apiClient) SSHKeyCreate(value *sacloud.SSHKey) (*sacloud.SSHKey, error) { 98 return a.client.SSHKey.Create(value) 99} 100 101func (a *apiClient) SSHKeyDelete(sshKeyID sacloud.ID) (*sacloud.SSHKey, error) { 102 return a.client.SSHKey.Delete(sshKeyID) 103} 104 105func (a *apiClient) SSHKeyGenerate(name string, passPhrase string, desc string) (*sacloud.SSHKeyGenerated, error) { 106 return a.client.SSHKey.Generate(name, passPhrase, desc) 107} 108 109func (a *apiClient) NoteNew() *sacloud.Note { 110 return a.client.Note.New() 111} 112 113func (a *apiClient) NoteCreate(value *sacloud.Note) (*sacloud.Note, error) { 114 return a.client.Note.Create(value) 115} 116 117func (a *apiClient) NoteDelete(noteID sacloud.ID) (*sacloud.Note, error) { 118 return a.client.Note.Delete(noteID) 119} 120 121func (a *apiClient) DiskNew() *sacloud.Disk { 122 return a.client.Disk.New() 123} 124 125func (a *apiClient) DiskNewCondig() *sacloud.DiskEditValue { 126 return a.client.Disk.NewCondig() 127} 128 129func (a *apiClient) DiskCreate(value *sacloud.Disk) (*sacloud.Disk, error) { 130 return a.client.Disk.Create(value) 131} 132 133func (a *apiClient) DiskCreateWithConfig( 134 value *sacloud.Disk, 135 config *sacloud.DiskEditValue, 136 bootAtAvailable bool) (*sacloud.Disk, error) { 137 return a.client.Disk.CreateWithConfig(value, config, bootAtAvailable) 138} 139 140func (a *apiClient) DiskSleepWhileCopying(id sacloud.ID, timeout time.Duration) error { 141 return a.client.Disk.SleepWhileCopying(id, timeout) 142} 143 144func (a *apiClient) DiskConnectToServer(diskID sacloud.ID, serverID sacloud.ID) (bool, error) { 145 return a.client.Disk.ConnectToServer(diskID, serverID) 146} 147 148func (a *apiClient) InterfaceConnectToPacketFilter(interfaceID sacloud.ID, packetFilterID sacloud.ID) (bool, error) { 149 return a.client.Interface.ConnectToPacketFilter(interfaceID, packetFilterID) 150} 151 152func (a *apiClient) InterfaceSetDisplayIPAddress(interfaceID sacloud.ID, ip string) (bool, error) { 153 return a.client.Interface.SetDisplayIPAddress(interfaceID, ip) 154} 155 156func (a *apiClient) ServerPlanGetBySpec(core, memGB int, gen sacloud.PlanGenerations, commitment sacloud.ECommitment) (*sacloud.ProductServer, error) { 157 if string(commitment) == "" { 158 commitment = sacloud.ECommitmentStandard 159 } 160 return a.client.Product.Server.GetBySpecCommitment(core, memGB, gen, commitment) 161} 162 163func (a *apiClient) ArchiveFindByOSType(os ostype.ArchiveOSTypes) (*sacloud.Archive, error) { 164 return a.client.Archive.FindByOSType(os) 165} 166 167func (a *apiClient) GetTimeoutDuration() time.Duration { 168 return a.client.DefaultTimeoutDuration 169} 170