/
load_balancer.go
63 lines (60 loc) · 1.56 KB
/
load_balancer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package action
import "strings"
func (a CPI) setLoadBalancers(lbProps LBCloudProperties, vmID, zoneId, networkId string) error {
for _, lbConf := range lbProps.Lbs {
err := a.setLoadBalancer(lbConf, vmID, zoneId, networkId)
if err != nil {
return err
}
}
return nil
}
func (a CPI) setLoadBalancer(lbConf LBConfig, vmID, zoneId, networkId string) error {
lbId := ""
lb, err := a.findLBRuleByName(lbConf.Name)
if err != nil {
return err
}
if lb != nil {
lbId = lb.Id
}
if lbId == "" {
lbId, err = a.createLoadBalancer(lbConf, zoneId, networkId)
if err != nil {
if strings.Contains(err.Error(), "already exists") {
lb, err := a.findLBRuleByName(lbConf.Name)
if err != nil {
return err
}
if lb != nil {
lbId = lb.Id
}
} else {
return err
}
}
}
p := a.client.LoadBalancer.NewAssignToLoadBalancerRuleParams(lbId)
p.SetVirtualmachineids([]string{vmID})
_, err = a.client.LoadBalancer.AssignToLoadBalancerRule(p)
return err
}
func (a CPI) createLoadBalancer(lbConf LBConfig, zoneId, networkId string) (string, error) {
p := a.client.LoadBalancer.NewCreateLoadBalancerRuleParams(lbConf.Algorithm, lbConf.Name, lbConf.PrivatePort, lbConf.PublicPort)
p.SetZoneid(zoneId)
p.SetOpenfirewall(lbConf.OpenFirewall)
if lbConf.PublicIp != "" {
publicIp, err := a.findPublicIpByIp(lbConf.PublicIp)
if err != nil {
return "", err
}
p.SetPublicipid(publicIp.Id)
} else {
p.SetNetworkid(networkId)
}
resp, err := a.client.LoadBalancer.CreateLoadBalancerRule(p)
if err != nil {
return "", err
}
return resp.Id, nil
}