object_manager_forward_zone.go raw

   1  package ibclient
   2  
   3  import (
   4  	"encoding/json"
   5  	"fmt"
   6  	"reflect"
   7  )
   8  
   9  // Forwarding Server to be [] list
  10  type NullableForwardingServers struct {
  11  	Servers []*Forwardingmemberserver
  12  	IsNull  bool // Indicates if the entire slice should be null
  13  }
  14  
  15  func (nfs NullableForwardingServers) MarshalJSON() ([]byte, error) {
  16  	if reflect.DeepEqual(nfs.Servers, []*Forwardingmemberserver{}) {
  17  		return []byte("[]"), nil
  18  	}
  19  
  20  	return json.Marshal(nfs.Servers)
  21  }
  22  
  23  func (nfs *NullableForwardingServers) UnmarshalJSON(data []byte) error {
  24  	if string(data) == "null" {
  25  		nfs.IsNull = true
  26  		nfs.Servers = nil
  27  		return nil
  28  	}
  29  	nfs.IsNull = false
  30  	return json.Unmarshal(data, &nfs.Servers)
  31  }
  32  
  33  func (objMgr *ObjectManager) CreateZoneForward(
  34  	comment string,
  35  	disable bool,
  36  	eas EA,
  37  	forwardTo NullableNameServers,
  38  	forwardersOnly bool,
  39  	forwardingServers *NullableForwardingServers,
  40  	fqdn string,
  41  	nsGroup string,
  42  	view string,
  43  	zoneFormat string,
  44  	externalNsGroup string) (*ZoneForward, error) {
  45  	// check if required fields are present
  46  	// Check for FQDN
  47  	if fqdn == "" {
  48  		return nil, fmt.Errorf("FQDN is required to create a forward zone")
  49  	}
  50  	if forwardingServers != nil && forwardingServers.Servers != nil {
  51  		forwardingServers = &NullableForwardingServers{Servers: forwardingServers.Servers}
  52  	} else {
  53  		forwardingServers = nil
  54  	}
  55  	zoneForward := NewZoneForward(comment, disable, eas, forwardTo, forwardersOnly, forwardingServers, fqdn, nsGroup, view, zoneFormat, "", externalNsGroup)
  56  	ref, err := objMgr.connector.CreateObject(zoneForward)
  57  	if err != nil {
  58  		return nil, err
  59  	}
  60  	zoneForward.Ref = ref
  61  	return zoneForward, nil
  62  }
  63  
  64  func (objMgr *ObjectManager) DeleteZoneForward(ref string) (string, error) {
  65  	return objMgr.connector.DeleteObject(ref)
  66  
  67  }
  68  
  69  func (objMgr *ObjectManager) GetZoneForwardByRef(ref string) (*ZoneForward, error) {
  70  	zoneForward := NewEmptyZoneForward()
  71  	err := objMgr.connector.GetObject(zoneForward, ref, NewQueryParams(false, nil), &zoneForward)
  72  	if err != nil {
  73  		return nil, err
  74  	}
  75  	return zoneForward, nil
  76  }
  77  
  78  func (objMgr *ObjectManager) GetZoneForwardFilters(queryParams *QueryParams) ([]ZoneForward, error) {
  79  
  80  	var res []ZoneForward
  81  	zoneForward := NewEmptyZoneForward()
  82  
  83  	err := objMgr.connector.GetObject(
  84  		zoneForward, "", queryParams, &res)
  85  	if err != nil {
  86  		return nil, err
  87  	}
  88  
  89  	return res, err
  90  }
  91  
  92  func (objMgr *ObjectManager) UpdateZoneForward(
  93  	ref string,
  94  	comment string,
  95  	disable bool,
  96  	eas EA,
  97  	forwardTo NullableNameServers,
  98  	forwardersOnly bool,
  99  	forwardingServers *NullableForwardingServers,
 100  	nsGroup string,
 101  	externlNsGroup string) (*ZoneForward, error) {
 102  
 103  	zoneForward := NewEmptyZoneForward()
 104  
 105  	zoneForward.Comment = &comment
 106  	zoneForward.Disable = &disable
 107  	zoneForward.Ea = eas
 108  	zoneForward.ForwardTo = forwardTo
 109  	zoneForward.ForwardersOnly = &forwardersOnly
 110  	if forwardingServers != nil && forwardingServers.Servers != nil {
 111  		zoneForward.ForwardingServers = &NullableForwardingServers{Servers: forwardingServers.Servers}
 112  	} else {
 113  		zoneForward.ForwardingServers = nil
 114  	}
 115  	if nsGroup != "" {
 116  		zoneForward.NsGroup = &nsGroup
 117  	} else {
 118  		zoneForward.NsGroup = nil
 119  	}
 120  	if externlNsGroup != "" {
 121  		zoneForward.ExternalNsGroup = &externlNsGroup
 122  	} else {
 123  		zoneForward.ExternalNsGroup = nil
 124  	}
 125  
 126  	new_ref, err := objMgr.connector.UpdateObject(zoneForward, ref)
 127  	if err != nil {
 128  		return nil, err
 129  	}
 130  	zoneForward.Ref = new_ref
 131  	return zoneForward, nil
 132  
 133  }
 134  
 135  func NewEmptyZoneForward() *ZoneForward {
 136  	zoneForward := &ZoneForward{}
 137  	zoneForward.SetReturnFields(append(zoneForward.ReturnFields(), "zone_format", "ns_group", "external_ns_group", "comment", "disable", "extattrs", "forwarders_only", "forwarding_servers"))
 138  	return zoneForward
 139  }
 140  
 141  func NewZoneForward(comment string,
 142  	disable bool,
 143  	eas EA,
 144  	forwardTo NullableNameServers,
 145  	forwardersOnly bool,
 146  	forwardingServers *NullableForwardingServers,
 147  	fqdn string,
 148  	nsGroup string,
 149  	view string,
 150  	zoneFormat string,
 151  	ref string,
 152  	externalNsGroup string) *ZoneForward {
 153  
 154  	zoneForward := NewEmptyZoneForward()
 155  
 156  	zoneForward.Comment = &comment
 157  	zoneForward.Disable = &disable
 158  	zoneForward.Ea = eas
 159  	zoneForward.ForwardTo = forwardTo
 160  	zoneForward.ForwardersOnly = &forwardersOnly
 161  	zoneForward.ForwardingServers = forwardingServers
 162  
 163  	zoneForward.Fqdn = fqdn
 164  	if nsGroup == "" {
 165  		zoneForward.NsGroup = nil
 166  	} else {
 167  		zoneForward.NsGroup = &nsGroup
 168  	}
 169  	if externalNsGroup == "" {
 170  		zoneForward.ExternalNsGroup = nil
 171  	} else {
 172  		zoneForward.ExternalNsGroup = &externalNsGroup
 173  	}
 174  	if view == "" {
 175  		view = "default"
 176  	}
 177  	zoneForward.View = &view
 178  	if zoneFormat == "" {
 179  		zoneFormat = "FORWARD"
 180  	}
 181  	zoneForward.ZoneFormat = zoneFormat
 182  	zoneForward.Ref = ref
 183  
 184  	return zoneForward
 185  }
 186