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