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