github.com/sacloud/iaas-api-go@v1.12.0/naked/load_balancer.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 naked 16 17 import ( 18 "encoding/json" 19 "time" 20 21 "github.com/sacloud/iaas-api-go/types" 22 ) 23 24 // LoadBalancer ロードバランサ 25 type LoadBalancer struct { 26 ID types.ID `json:",omitempty" yaml:"id,omitempty" structs:",omitempty"` 27 Name string `json:",omitempty" yaml:"name,omitempty" structs:",omitempty"` 28 Description string `yaml:"description"` 29 Tags types.Tags `yaml:"tags"` 30 Icon *Icon `json:",omitempty" yaml:"icon,omitempty" structs:",omitempty"` 31 CreatedAt *time.Time `json:",omitempty" yaml:"created_at,omitempty" structs:",omitempty"` 32 ModifiedAt *time.Time `json:",omitempty" yaml:"modified_at,omitempty" structs:",omitempty"` 33 Availability types.EAvailability `json:",omitempty" yaml:"availability,omitempty" structs:",omitempty"` 34 Class string `json:",omitempty" yaml:"class,omitempty" structs:",omitempty"` 35 ServiceClass string `json:",omitempty" yaml:"service_class,omitempty" structs:",omitempty"` 36 Plan *AppliancePlan `json:",omitempty" yaml:"plan,omitempty" structs:",omitempty"` 37 Instance *Instance `json:",omitempty" yaml:"instance,omitempty" structs:",omitempty"` 38 Interfaces []*Interface `json:",omitempty" yaml:"interfaces,omitempty" structs:",omitempty"` 39 Switch *Switch `json:",omitempty" yaml:"switch,omitempty" structs:",omitempty"` 40 Settings *LoadBalancerSettings `json:",omitempty" yaml:"settings,omitempty" structs:",omitempty"` 41 SettingsHash string `json:",omitempty" yaml:"settings_hash,omitempty" structs:",omitempty"` 42 Remark *ApplianceRemark `json:",omitempty" yaml:"remark,omitempty" structs:",omitempty"` 43 } 44 45 // LoadBalancerSettingsUpdate ロードバランサ 46 type LoadBalancerSettingsUpdate struct { 47 Settings *LoadBalancerSettings `json:",omitempty" yaml:"settings,omitempty" structs:",omitempty"` 48 SettingsHash string `json:",omitempty" yaml:"settings_hash,omitempty" structs:",omitempty"` 49 } 50 51 // LoadBalancerSettings ロードバランサの設定 52 type LoadBalancerSettings struct { 53 LoadBalancer []*LoadBalancerSetting `yaml:"load_balancer"` 54 } 55 56 // MarshalJSON nullの場合に空配列を出力するための実装 57 func (s LoadBalancerSettings) MarshalJSON() ([]byte, error) { 58 if s.LoadBalancer == nil { 59 s.LoadBalancer = make([]*LoadBalancerSetting, 0) 60 } 61 type alias LoadBalancerSettings 62 tmp := alias(s) 63 return json.Marshal(&tmp) 64 } 65 66 // LoadBalancerSetting ロードバランサの設定 67 type LoadBalancerSetting struct { 68 VirtualIPAddress string `json:",omitempty" yaml:"virtual_ip_address,omitempty" structs:",omitempty"` 69 Port types.StringNumber `json:",omitempty" yaml:"port,omitempty" structs:",omitempty"` 70 DelayLoop types.StringNumber `json:",omitempty" yaml:"delay_loop,omitempty" structs:",omitempty"` 71 SorryServer string `json:",omitempty" yaml:"sorry_server,omitempty" structs:",omitempty"` 72 Description string `yaml:"description"` 73 Servers []*LoadBalancerDestinationServer `yaml:"servers"` 74 } 75 76 // MarshalJSON nullの場合に空配列を出力するための実装 77 func (s LoadBalancerSetting) MarshalJSON() ([]byte, error) { 78 if s.Servers == nil { 79 s.Servers = make([]*LoadBalancerDestinationServer, 0) 80 } 81 82 type alias LoadBalancerSetting 83 tmp := alias(s) 84 return json.Marshal(&tmp) 85 } 86 87 // LoadBalancerDestinationServer ロードバランサ配下の実サーバ 88 type LoadBalancerDestinationServer struct { 89 IPAddress string `json:",omitempty" yaml:"ip_address,omitempty" structs:",omitempty"` 90 Port types.StringNumber `json:",omitempty" yaml:"port,omitempty" structs:",omitempty"` 91 Enabled types.StringFlag `yaml:"enabled"` 92 HealthCheck *LoadBalancerHealthCheck `json:",omitempty" yaml:"health_check,omitempty" structs:",omitempty"` 93 } 94 95 // LoadBalancerHealthCheck ヘルスチェック 96 type LoadBalancerHealthCheck struct { 97 Protocol types.Protocol `json:",omitempty" yaml:"protocol,omitempty" structs:""` // プロトコル 98 Host string `json:",omitempty" yaml:"host,omitempty" structs:""` // 対象ホスト 99 Path string `json:",omitempty" yaml:"path,omitempty" structs:""` // HTTP/HTTPSの場合のリクエストパス 100 Status types.StringNumber `json:",omitempty" yaml:"status,omitempty" structs:""` // 期待するステータスコード 101 Port types.StringNumber `json:",omitempty" yaml:"port,omitempty" structs:""` // ポート番号 102 Retry types.StringNumber `json:",omitempty" yaml:"retry,omitempty" struct:",omitempty"` // リトライ回数 103 ConnectTimeout types.StringNumber `json:",omitempty" yaml:"connect_timeout,omitempty" struct:",omitempty"` // タイムアウト 104 } 105 106 // LoadBalancerStatus ロードバランサのステータス 107 type LoadBalancerStatus struct { 108 VirtualIPAddress string `json:",omitempty" yaml:"virtual_ip_address,omitempty" structs:",omitempty"` 109 Port types.StringNumber `json:",omitempty" yaml:"port,omitempty" structs:",omitempty"` 110 CPS types.StringNumber `json:",omitempty" yaml:"cps,omitempty" structs:",omitempty"` 111 Servers []*LoadBalancerServerStatus `json:",omitempty" yaml:"servers,omitempty" structs:",omitempty"` 112 } 113 114 // LoadBalancerServerStatus ロードバランサの実サーバのステータス 115 type LoadBalancerServerStatus struct { 116 ActiveConn types.StringNumber `json:",omitempty" yaml:"active_conn,omitempty" structs:",omitempty"` 117 Status types.EServerInstanceStatus `json:",omitempty" yaml:"status,omitempty" structs:",omitempty"` 118 IPAddress string `json:",omitempty" yaml:"ip_address,omitempty" structs:",omitempty"` 119 Port types.StringNumber `json:",omitempty" yaml:"port,omitempty" structs:",omitempty"` 120 CPS types.StringNumber `json:",omitempty" yaml:"cps,omitempty" structs:",omitempty"` 121 }