customize_load_balancer_vip.go raw
1 // Copyright 2022-2025 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 type LoadBalancerVirtualIPAddresses []*LoadBalancerVirtualIPAddress
20
21 // AddGSLBServer サーバの追加
22 func (o *LoadBalancerVirtualIPAddresses) Add(vip *LoadBalancerVirtualIPAddress) {
23 if o.Exist(vip) {
24 return // noop if already exists
25 }
26 *o = append(*o, vip)
27 }
28
29 // Exist サーバの存在確認
30 func (o *LoadBalancerVirtualIPAddresses) Exist(vip *LoadBalancerVirtualIPAddress) bool {
31 for _, v := range *o {
32 if v.VirtualIPAddress == vip.VirtualIPAddress && v.Port == vip.Port {
33 return true
34 }
35 }
36 return false
37 }
38
39 // ExistAt サーバの存在確認
40 func (o *LoadBalancerVirtualIPAddresses) ExistAt(vip string, port int) bool {
41 return o.Exist(&LoadBalancerVirtualIPAddress{VirtualIPAddress: vip, Port: types.StringNumber(port)})
42 }
43
44 // Find サーバの検索
45 func (o *LoadBalancerVirtualIPAddresses) Find(vip *LoadBalancerVirtualIPAddress) *LoadBalancerVirtualIPAddress {
46 for _, v := range *o {
47 if v.VirtualIPAddress == vip.VirtualIPAddress && v.Port == vip.Port {
48 return v
49 }
50 }
51 return nil
52 }
53
54 // FindAt サーバの検索
55 func (o *LoadBalancerVirtualIPAddresses) FindAt(vip string, port int) *LoadBalancerVirtualIPAddress {
56 return o.Find(&LoadBalancerVirtualIPAddress{VirtualIPAddress: vip, Port: types.StringNumber(port)})
57 }
58
59 // Update サーバの更新
60 func (o *LoadBalancerVirtualIPAddresses) Update(old *LoadBalancerVirtualIPAddress, new *LoadBalancerVirtualIPAddress) {
61 for _, v := range *o {
62 if v.VirtualIPAddress == old.VirtualIPAddress && v.Port == old.Port {
63 *v = *new
64 return
65 }
66 }
67 }
68
69 // UpdateAt サーバの更新
70 func (o *LoadBalancerVirtualIPAddresses) UpdateAt(vip string, port int, new *LoadBalancerVirtualIPAddress) {
71 o.Update(&LoadBalancerVirtualIPAddress{VirtualIPAddress: vip, Port: types.StringNumber(port)}, new)
72 }
73
74 // Delete サーバの削除
75 func (o *LoadBalancerVirtualIPAddresses) Delete(vip *LoadBalancerVirtualIPAddress) {
76 var res []*LoadBalancerVirtualIPAddress
77 for _, v := range *o {
78 if !(v.VirtualIPAddress == vip.VirtualIPAddress && v.Port == vip.Port) {
79 res = append(res, v)
80 }
81 }
82 *o = res
83 }
84
85 // DeleteAt サーバの削除
86 func (o *LoadBalancerVirtualIPAddresses) DeleteAt(vip string, port int) {
87 o.Delete(&LoadBalancerVirtualIPAddress{VirtualIPAddress: vip, Port: types.StringNumber(port)})
88 }
89