-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathpool.go
135 lines (119 loc) · 3.88 KB
/
pool.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package tmsh
import (
"fmt"
"strconv"
"strings"
)
// Pool contains information about each Pool
type Pool struct {
ActiveMemberCount int `ltm:"active-member-cnt"`
Name string `ltm:"name"`
MonitorRule string `ltm:"monitor-rule"`
AvailabilityState string `ltm:"status.availability-state"`
EnabledState string `ltm:"status.enabled-state"`
StatusReason string `ltm:"status.status-reason"`
PoolMembers []PoolMember `ltm:"members"`
}
// Pool contains information about each pool member in a pool
type PoolMember struct {
Name string `ltm:"node-name"`
Addr string `ltm:"addr"`
Port int `ltm:"port"`
MonitorRule string `ltm:"monitor-rule"`
MonitorStatus string `ltm:"monitor-status"`
EnabledState string `ltm:"status.enabled-state"`
AvailabilityState string `ltm:"status.availability-state"`
StatusReason string `ltm:"status.status-reason"`
}
// GetAllPools returns a list of all pools
func (bigip *BigIP) GetAllPools() ([]Pool, error) {
ret, err := bigip.ExecuteCommand("show ltm pool members field-fmt")
if err != nil {
return nil, err
}
var pools []Pool
for _, s := range splitLtmOutput(ret) {
var p Pool
if err := Unmarshal(s, &p); err != nil {
return nil, err
}
pools = append(pools, p)
}
return pools, nil
}
// GetPool gets a pool by name. Return nil if the pool does not exist.
func (bigip *BigIP) GetPool(name string) (*Pool, error) {
ret, _ := bigip.ExecuteCommand("show ltm pool " + name + " members field-fmt")
if strings.Contains(ret, "was not found.") {
return nil, fmt.Errorf(ret)
}
var pool Pool
if err := Unmarshal(ret, &pool); err != nil {
return nil, err
}
return &pool, nil
}
// CreatePool creates a new pool.
func (bigip *BigIP) CreatePool(name string) error {
ret, _ := bigip.ExecuteCommand("create ltm pool " + name)
if ret != "" {
return fmt.Errorf(ret)
}
return nil
}
// DeletePool removes a pool.
func (bigip *BigIP) DeletePool(name string) error {
ret, _ := bigip.ExecuteCommand("delete ltm pool " + name)
if ret != "" {
return fmt.Errorf(ret)
}
return nil
}
// DeletePoolMember adds a monitor to pool.
func (bigip *BigIP) AddMonitorToPool(poolName, monitorName string) error {
ret, _ := bigip.ExecuteCommand("modify ltm pool " + poolName + " monitor '" + monitorName + "'")
if ret != "" {
return fmt.Errorf(ret)
}
return nil
}
// DeletePoolMember adds a new pool member.
func (bigip *BigIP) AddPoolMember(poolName, nodeName, monitorName string, port int) error {
member := nodeName + ":" + strconv.Itoa(port)
cmd := "modify ltm pool " + poolName + " members add { " + member + " } monitor '" + monitorName + "'"
ret, _ := bigip.ExecuteCommand(cmd)
if ret != "" {
return fmt.Errorf(ret)
}
return nil
}
// DeletePoolMember removes a pool member.
func (bigip *BigIP) DeletePoolMember(poolName, nodeName string, port int) error {
member := nodeName + ":" + strconv.Itoa(port)
cmd := "modify ltm pool " + poolName + " members delete { " + member + " }"
ret, _ := bigip.ExecuteCommand(cmd)
if ret != "" {
return fmt.Errorf(ret)
}
return nil
}
// EnablePoolMember changes the status of pool member to enable.
func (bigip *BigIP) EnablePoolMember(poolName, nodeName string, port int) error {
member := nodeName + ":" + strconv.Itoa(port)
cmd := "modify ltm pool " + poolName + " members modify { " + member + " { session user-enabled } }"
ret, _ := bigip.ExecuteCommand(cmd)
if ret != "" {
return fmt.Errorf(ret)
}
return nil
}
// DisablePoolMember changes the status of pool member to disable.
func (bigip *BigIP) DisablePoolMember(poolName, nodeName string, port int) error {
member := nodeName + ":" + strconv.Itoa(port)
cmd := "modify ltm pool " + poolName + " members modify { " + member + " { session user-disabled } }"
ret, _ := bigip.ExecuteCommand(cmd)
if ret != "" {
return fmt.Errorf(ret)
}
return nil
}