@@ -3,8 +3,6 @@ package aci
33import (
44 "fmt"
55 "log"
6- "reflect"
7- "sort"
86
97 "github.com/ciscoecosystem/aci-go-client/client"
108 "github.com/ciscoecosystem/aci-go-client/models"
@@ -72,9 +70,19 @@ func resourceAciDHCPRelayPolicy() *schema.Resource {
7270
7371 "relation_dhcp_rs_prov" : & schema.Schema {
7472 Type : schema .TypeSet ,
75- Elem : & schema.Schema {Type : schema .TypeString },
7673 Optional : true ,
77- Set : schema .HashString ,
74+ Elem : & schema.Resource {
75+ Schema : map [string ]* schema.Schema {
76+ "tdn" : {
77+ Type : schema .TypeString ,
78+ Required : true ,
79+ },
80+ "addr" : {
81+ Type : schema .TypeString ,
82+ Required : true ,
83+ },
84+ },
85+ },
7886 },
7987 }),
8088 }
@@ -171,9 +179,10 @@ func resourceAciDHCPRelayPolicyCreate(d *schema.ResourceData, m interface{}) err
171179 checkDns := make ([]string , 0 , 1 )
172180
173181 if relationTodhcpRsProv , ok := d .GetOk ("relation_dhcp_rs_prov" ); ok {
174- relationParamList := toStringList ( relationTodhcpRsProv .(* schema.Set ).List () )
182+ relationParamList := relationTodhcpRsProv .(* schema.Set ).List ()
175183 for _ , relationParam := range relationParamList {
176- checkDns = append (checkDns , relationParam )
184+ paramMap := relationParam .(map [string ]interface {})
185+ checkDns = append (checkDns , paramMap ["tdn" ].(string ))
177186 }
178187 }
179188
@@ -185,9 +194,10 @@ func resourceAciDHCPRelayPolicyCreate(d *schema.ResourceData, m interface{}) err
185194 d .Partial (false )
186195
187196 if relationTodhcpRsProv , ok := d .GetOk ("relation_dhcp_rs_prov" ); ok {
188- relationParamList := toStringList ( relationTodhcpRsProv .(* schema.Set ).List () )
197+ relationParamList := relationTodhcpRsProv .(* schema.Set ).List ()
189198 for _ , relationParam := range relationParamList {
190- err = aciClient .CreateRelationdhcpRsProvFromDHCPRelayPolicy (dhcpRelayP .DistinguishedName , relationParam )
199+ paramMap := relationParam .(map [string ]interface {})
200+ err = aciClient .CreateRelationdhcpRsProvFromDHCPRelayPolicy (dhcpRelayP .DistinguishedName , paramMap ["tdn" ].(string ), paramMap ["addr" ].(string ))
191201
192202 if err != nil {
193203 return err
@@ -247,13 +257,11 @@ func resourceAciDHCPRelayPolicyUpdate(d *schema.ResourceData, m interface{}) err
247257 checkDns := make ([]string , 0 , 1 )
248258
249259 if d .HasChange ("relation_dhcp_rs_prov" ) {
250- oldRel , newRel := d .GetChange ("relation_dhcp_rs_prov" )
251- oldRelSet := oldRel .(* schema.Set )
252- newRelSet := newRel .(* schema.Set )
253- relToCreate := toStringList (newRelSet .Difference (oldRelSet ).List ())
254-
255- for _ , relDn := range relToCreate {
256- checkDns = append (checkDns , relDn )
260+ newRel := d .Get ("relation_dhcp_rs_prov" )
261+ newRelList := newRel .(* schema.Set ).List ()
262+ for _ , relationParam := range newRelList {
263+ paramMap := relationParam .(map [string ]interface {})
264+ checkDns = append (checkDns , paramMap ["tdn" ].(string ))
257265 }
258266 }
259267
@@ -266,21 +274,21 @@ func resourceAciDHCPRelayPolicyUpdate(d *schema.ResourceData, m interface{}) err
266274
267275 if d .HasChange ("relation_dhcp_rs_prov" ) {
268276 oldRel , newRel := d .GetChange ("relation_dhcp_rs_prov" )
269- oldRelSet := oldRel .(* schema.Set )
270- newRelSet := newRel .(* schema.Set )
271- relToDelete := toStringList (oldRelSet .Difference (newRelSet ).List ())
272- relToCreate := toStringList (newRelSet .Difference (oldRelSet ).List ())
277+ oldRelList := oldRel .(* schema.Set ).List ()
278+ newRelList := newRel .(* schema.Set ).List ()
273279
274- for _ , relDn := range relToDelete {
275- err = aciClient .DeleteRelationdhcpRsProvFromDHCPRelayPolicy (dhcpRelayP .DistinguishedName , relDn )
280+ for _ , relationParam := range oldRelList {
281+ paramMap := relationParam .(map [string ]interface {})
282+ err = aciClient .DeleteRelationdhcpRsProvFromDHCPRelayPolicy (dhcpRelayP .DistinguishedName , paramMap ["tdn" ].(string ))
276283 if err != nil {
277284 return err
278285 }
279286
280287 }
281288
282- for _ , relDn := range relToCreate {
283- err = aciClient .CreateRelationdhcpRsProvFromDHCPRelayPolicy (dhcpRelayP .DistinguishedName , relDn )
289+ for _ , relationParam := range newRelList {
290+ paramMap := relationParam .(map [string ]interface {})
291+ err = aciClient .CreateRelationdhcpRsProvFromDHCPRelayPolicy (dhcpRelayP .DistinguishedName , paramMap ["tdn" ].(string ), paramMap ["addr" ].(string ))
284292 if err != nil {
285293 return err
286294 }
@@ -317,18 +325,18 @@ func resourceAciDHCPRelayPolicyRead(d *schema.ResourceData, m interface{}) error
317325
318326 if err != nil {
319327 log .Printf ("[DEBUG] Error while reading relation dhcpRsProv %v" , err )
320- d .Set ("relation_dhcp_rs_prov" , make ([]string , 0 , 1 ))
328+ d .Set ("relation_dhcp_rs_prov" , make ([]map [ string ] string , 0 ))
321329
322330 } else {
323- if _ , ok := d .GetOk ("relation_dhcp_rs_prov" ); ok {
324- relationParamList := toStringList (d .Get ("relation_dhcp_rs_prov" ).(* schema.Set ).List ())
325- dhcpRsProvDataList := toStringList (dhcpRsProvData .(* schema.Set ).List ())
326- sort .Strings (relationParamList )
327- sort .Strings (dhcpRsProvDataList )
328- if ! reflect .DeepEqual (relationParamList , dhcpRsProvDataList ) {
329- d .Set ("relation_dhcp_rs_prov" , make ([]string , 0 , 1 ))
330- }
331+ dhcpRsProvMap := dhcpRsProvData .([]map [string ]string )
332+ st := make ([]map [string ]string , 0 )
333+ for _ , dhcpRsProvObj := range dhcpRsProvMap {
334+ obj := make (map [string ]string , 0 )
335+ obj ["addr" ] = dhcpRsProvObj ["addr" ]
336+ obj ["tdn" ] = dhcpRsProvObj ["tDn" ]
337+ st = append (st , obj )
331338 }
339+ d .Set ("relation_dhcp_rs_prov" , st )
332340 }
333341
334342 log .Printf ("[DEBUG] %s: Read finished successfully" , d .Id ())
0 commit comments