github.com/sacloud/iaas-api-go@v1.12.0/customize_server.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go 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 15 package iaas 16 17 import "github.com/sacloud/iaas-api-go/types" 18 19 // BandWidthAt 指定インデックスのNICの帯域幅を算出 20 // 21 // 不明な場合は-1を、制限なしの場合は0を、以外の場合はMbps単位で返す 22 func (o *Server) BandWidthAt(index int) int { 23 if len(o.Interfaces) <= index { 24 return -1 25 } 26 27 nic := o.Interfaces[index] 28 29 switch nic.UpstreamType { 30 case types.UpstreamNetworkTypes.None: 31 return -1 32 case types.UpstreamNetworkTypes.Shared: 33 return 100 34 case types.UpstreamNetworkTypes.Switch, types.UpstreamNetworkTypes.Router: 35 // 36 // 上流ネットワークがスイッチだった場合の帯域制限 37 // https://manual.sakura.ad.jp/cloud/support/technical/network.html#support-network-03 38 // 39 40 // 専有ホストの場合は制限なし 41 if !o.PrivateHostID.IsEmpty() { 42 return 0 43 } 44 45 // メモリに応じた制限 46 memory := o.GetMemoryGB() 47 switch { 48 case memory < 32: 49 return 1000 50 case 32 <= memory && memory < 128: 51 return 2000 52 case 128 <= memory && memory < 224: 53 return 5000 54 case 224 <= memory: 55 return 10000 56 default: 57 return -1 58 } 59 default: 60 return -1 61 } 62 } 63 64 // GetInstanceStatus データベース(サービス)ステータスを返すためのアダプター実装 65 // PostgreSQLまたはMariaDBのステータス(詳細は以下)をInstanceStatusにラップして返す 66 // 67 // ステータス: GET /appliance/:id/status -> Appliance.ResponseStatus.DBConf.{MariaDB | postgres}.status 68 // 69 // 主にStateWaiterで利用する。 70 func (o *DatabaseStatus) GetInstanceStatus() types.EServerInstanceStatus { 71 if o.MariaDBStatus == "running" || o.PostgresStatus == "running" { 72 return types.ServerInstanceStatuses.Up 73 } 74 return types.ServerInstanceStatuses.Unknown 75 } 76 77 // SetInstanceStatus データベース(サービス)ステータスを返すためのアダプター実装 78 // accessor.InstanceStatusを満たすためのスタブ実装 79 func (o *DatabaseStatus) SetInstanceStatus(types.EServerInstanceStatus) { 80 // noop 81 }