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  }