object_manager_range.go raw

   1  package ibclient
   2  
   3  import (
   4  	"encoding/json"
   5  	"fmt"
   6  )
   7  
   8  func (d Range) MarshalJSON() ([]byte, error) {
   9  	type Alias Range
  10  	aux := &struct {
  11  		Member *Dhcpmember `json:"member"`
  12  		*Alias
  13  	}{
  14  		Member: d.Member,
  15  		Alias:  (*Alias)(&d),
  16  	}
  17  	return json.Marshal(aux)
  18  }
  19  
  20  func (d *Range) UnmarshalJSON(data []byte) error {
  21  	type Alias Range
  22  	aux := &struct {
  23  		Member *Dhcpmember `json:"member"`
  24  		*Alias
  25  	}{
  26  		Alias: (*Alias)(d),
  27  	}
  28  	if err := json.Unmarshal(data, &aux); err != nil {
  29  		return err
  30  	}
  31  	d.Member = aux.Member
  32  	return nil
  33  }
  34  func NewEmptyRange() *Range {
  35  	newRange := &Range{}
  36  	newRange.SetReturnFields(append(newRange.ReturnFields(), "extattrs", "name", "disable", "options", "use_options", "cloud_info", "failover_association", "member", "server_association_type", "ms_server"))
  37  	return newRange
  38  }
  39  func NewRange(comment string,
  40  	name string,
  41  	network *string,
  42  	startAddr string,
  43  	eas EA,
  44  	disable bool,
  45  	options []*Dhcpoption,
  46  	useOptions bool,
  47  	endAddr string,
  48  	failOverAssociation string,
  49  	member *Dhcpmember,
  50  	ServerAssociationType string,
  51  	template string,
  52  	msServer string,
  53  ) *Range {
  54  	newRange := NewEmptyRange()
  55  	newRange.Comment = &comment
  56  	newRange.Name = &name
  57  	newRange.Network = network
  58  	newRange.StartAddr = &startAddr
  59  	newRange.Ea = eas
  60  	newRange.Disable = &disable
  61  	if options != nil {
  62  		newRange.Options = options
  63  	}
  64  	newRange.UseOptions = &useOptions
  65  	newRange.EndAddr = &endAddr
  66  	newRange.FailoverAssociation = &failOverAssociation
  67  	newRange.Member = member
  68  	newRange.ServerAssociationType = ServerAssociationType
  69  	newRange.Template = template
  70  	newRange.MsServer = &Msdhcpserver{Ipv4Addr: msServer}
  71  	return newRange
  72  }
  73  func (objMgr *ObjectManager) CreateNetworkRange(comment string, name string, network string, networkView string, startAddr string, endAddr string, disable bool, eas EA, member *Dhcpmember, failOverAssociation string, options []*Dhcpoption, useOptions bool, serverAssociation string, template string, msServer string) (*Range, error) {
  74  
  75  	if startAddr == "" || endAddr == "" {
  76  		return nil, fmt.Errorf("start address and end address fields are required to create a range within a Network")
  77  	}
  78  	if networkView == "" {
  79  		networkView = "default"
  80  	}
  81  	var networkPointer *string
  82  	if network != "" {
  83  		networkPointer = &network
  84  	}
  85  	newRangeCreate := NewRange(comment, name, networkPointer, startAddr, eas, disable, options, useOptions, endAddr, failOverAssociation, member, serverAssociation, template, msServer)
  86  	newRangeCreate.NetworkView = &networkView
  87  	ref, err := objMgr.connector.CreateObject(newRangeCreate)
  88  	if err != nil {
  89  		return nil, err
  90  	}
  91  	newRangeCreate.Ref = ref
  92  	return newRangeCreate, nil
  93  }
  94  func (objMgr *ObjectManager) GetNetworkRangeByRef(ref string) (*Range, error) {
  95  	networkRange := NewEmptyRange()
  96  	err := objMgr.connector.GetObject(
  97  		networkRange, ref, NewQueryParams(false, nil), &networkRange)
  98  
  99  	return networkRange, err
 100  }
 101  func (objMgr *ObjectManager) GetNetworkRange(queryParams *QueryParams) ([]Range, error) {
 102  	var res []Range
 103  	networkRange := NewEmptyRange()
 104  	err := objMgr.connector.GetObject(
 105  		networkRange, "", queryParams, &res)
 106  	if err != nil {
 107  		return nil, fmt.Errorf("failed getting DHCP IPv4 Range: %s", err)
 108  	}
 109  	return res, nil
 110  }
 111  func (objMgr *ObjectManager) UpdateNetworkRange(ref string, comment string, name string, network string, startAddr string, endAddr string, disable bool, eas EA, member *Dhcpmember, failOverAssociation string, options []*Dhcpoption, useOptions bool, serverAssociationType string, NetworkView string, msServer string) (*Range, error) {
 112  	if startAddr == "" || endAddr == "" {
 113  		return nil, fmt.Errorf("start address and end address fields cannot be empty for a range within a Network")
 114  	}
 115  	var networkPointer *string
 116  	if network != "" {
 117  		networkPointer = &network
 118  	}
 119  	networkRange := NewRange(comment, name, networkPointer, startAddr, eas, disable, options, useOptions, endAddr, failOverAssociation, member, serverAssociationType, "", msServer)
 120  	networkRange.NetworkView = &NetworkView
 121  	networkRange.Ref = ref
 122  	reference, err := objMgr.connector.UpdateObject(networkRange, ref)
 123  	if err != nil {
 124  		return nil, err
 125  	}
 126  	networkRange.Ref = reference
 127  
 128  	networkRange, err = objMgr.GetNetworkRangeByRef(reference)
 129  	if err != nil {
 130  		return nil, err
 131  	}
 132  
 133  	return networkRange, nil
 134  }
 135  func (objMgr *ObjectManager) DeleteNetworkRange(ref string) (string, error) {
 136  	return objMgr.connector.DeleteObject(ref)
 137  }
 138