object_manager_dtc_server.go raw
1 package ibclient
2
3 import (
4 "encoding/json"
5 "fmt"
6 )
7
8 func (d *DtcServer) MarshalJSON() ([]byte, error) {
9 type Alias DtcServer
10 aux := &struct {
11 Monitors []*DtcServerMonitor `json:"monitors"`
12 *Alias
13 }{
14 Alias: (*Alias)(d),
15 }
16
17 if len(d.Monitors) == 0 {
18 aux.Monitors = []*DtcServerMonitor{}
19 } else {
20 aux.Monitors = d.Monitors
21 }
22
23 return json.Marshal(aux)
24 }
25
26 func NewEmptyDtcServer() *DtcServer {
27 dtcServer := &DtcServer{}
28 dtcServer.SetReturnFields(append(dtcServer.ReturnFields(), "extattrs", "auto_create_host_record", "disable", "health", "monitors", "sni_hostname", "use_sni_hostname"))
29 return dtcServer
30 }
31
32 func NewDtcServer(comment string,
33 name string,
34 host string,
35 autoCreateHostRecord bool,
36 disable bool,
37 ea EA,
38 monitors []*DtcServerMonitor,
39 sniHostname string,
40 useSniHostname bool,
41 ) *DtcServer {
42 DtcServer := NewEmptyDtcServer()
43 DtcServer.Comment = &comment
44 DtcServer.Name = &name
45 DtcServer.Host = &host
46 DtcServer.AutoCreateHostRecord = &autoCreateHostRecord
47 DtcServer.Disable = &disable
48 DtcServer.Ea = ea
49 DtcServer.Monitors = monitors
50 DtcServer.SniHostname = &sniHostname
51 DtcServer.UseSniHostname = &useSniHostname
52 return DtcServer
53 }
54
55 func (objMgr *ObjectManager) CreateDtcServer(
56 comment string,
57 name string,
58 host string,
59 autoCreateHostRecord bool,
60 disable bool,
61 ea EA,
62 monitors []map[string]interface{},
63 sniHostname string,
64 useSniHostname bool,
65 ) (*DtcServer, error) {
66
67 if name == "" || host == "" {
68 return nil, fmt.Errorf("name and host fields are required to create a Dtc Server object")
69 }
70 if (useSniHostname && sniHostname == "") || (!useSniHostname && sniHostname != "") {
71 return nil, fmt.Errorf("'sni_hostname' must be provided when 'use_sni_hostname' is enabled, " +
72 "and 'use_sni_hostname' must be enabled if 'sni_hostname' is provided")
73 }
74 var serverMonitors []*DtcServerMonitor
75 for _, userMonitor := range monitors {
76 monitor, okMonitor := userMonitor["monitor"].(Monitor)
77 monitorHost, _ := userMonitor["host"].(string)
78 if !okMonitor {
79 return nil, fmt.Errorf("required field missing: monitor")
80 }
81 monitorRef, err := getMonitorReference(monitor.Name, monitor.Type, objMgr)
82 if err != nil {
83 return nil, err
84 }
85
86 serverMonitor := &DtcServerMonitor{
87 Monitor: monitorRef,
88 Host: monitorHost,
89 }
90
91 serverMonitors = append(serverMonitors, serverMonitor)
92 }
93 dtcServer := NewDtcServer(comment, name, host, autoCreateHostRecord, disable, ea, serverMonitors, sniHostname, useSniHostname)
94 ref, err := objMgr.connector.CreateObject(dtcServer)
95 if err != nil {
96 return nil, err
97 }
98 dtcServer.Ref = ref
99 return dtcServer, nil
100 }
101
102 func (objMgr *ObjectManager) GetAllDtcServer(queryParams *QueryParams) ([]DtcServer, error) {
103 var res []DtcServer
104 server := NewEmptyDtcServer()
105 err := objMgr.connector.GetObject(server, "", queryParams, &res)
106 if err != nil {
107 return nil, fmt.Errorf("error getting Dtc Server object, err: %s", err)
108 }
109 return res, nil
110 }
111
112 func (objMgr *ObjectManager) GetDtcServer(name string, host string) (*DtcServer, error) {
113 var res []DtcServer
114 server := NewEmptyDtcServer()
115 if name == "" || host == "" {
116 return nil, fmt.Errorf("name and host of the server are required to retreive a unique dtc server")
117 }
118 sf := map[string]string{
119 "name": name,
120 "host": host,
121 }
122 queryParams := NewQueryParams(false, sf)
123 err := objMgr.connector.GetObject(server, "", queryParams, &res)
124 if err != nil {
125 return nil, err
126 } else if res == nil || len(res) == 0 {
127 return nil, NewNotFoundError(
128 fmt.Sprintf("Dtc server with name '%s' and host '%s' not found", name, host))
129 }
130 return &res[0], nil
131 }
132
133 func (objMgr *ObjectManager) UpdateDtcServer(
134 ref string,
135 comment string,
136 name string,
137 host string,
138 autoCreateHostRecord bool,
139 disable bool,
140 ea EA,
141 monitors []map[string]interface{},
142 sniHostname string,
143 useSniHostname bool) (*DtcServer, error) {
144 if (useSniHostname && sniHostname == "") || (!useSniHostname && sniHostname != "") {
145 return nil, fmt.Errorf("'sni_hostname' must be provided when 'use_sni_hostname' is enabled, " +
146 "and 'use_sni_hostname' must be enabled if 'sni_hostname' is provided")
147 }
148 var serverMonitors []*DtcServerMonitor
149 for _, userMonitor := range monitors {
150 monitor, okMonitor := userMonitor["monitor"].(Monitor)
151 monitorHost, _ := userMonitor["host"].(string)
152 if !okMonitor {
153 return nil, fmt.Errorf("required field missing: monitor")
154 }
155 monitorRef, err := getMonitorReference(monitor.Name, monitor.Type, objMgr)
156 if err != nil {
157 return nil, err
158 }
159
160 serverMonitor := &DtcServerMonitor{
161 Monitor: monitorRef,
162 Host: monitorHost,
163 }
164
165 serverMonitors = append(serverMonitors, serverMonitor)
166 }
167 dtcServer := NewDtcServer(comment, name, host, autoCreateHostRecord, disable, ea, serverMonitors, sniHostname, useSniHostname)
168 dtcServer.Ref = ref
169 ref, err := objMgr.connector.UpdateObject(dtcServer, ref)
170 if err != nil {
171 return nil, err
172 }
173 dtcServer.Ref = ref
174 return dtcServer, nil
175 }
176
177 func (objMgr *ObjectManager) GetDtcServerByRef(ref string) (*DtcServer, error) {
178 serverDtc := NewEmptyDtcServer()
179 err := objMgr.connector.GetObject(
180 serverDtc, ref, NewQueryParams(false, nil), &serverDtc)
181 return serverDtc, err
182 }
183
184 func (objMgr *ObjectManager) DeleteDtcServer(ref string) (string, error) {
185 return objMgr.connector.DeleteObject(ref)
186 }
187