Skip to content

Commit

Permalink
Fix access-list address adds and deletes
Browse files Browse the repository at this point in the history
  • Loading branch information
emerkle826 committed Nov 23, 2021
1 parent 0a9ea41 commit e8dd621
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 32 deletions.
69 changes: 41 additions & 28 deletions internal/provider/resource_access_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,39 +73,38 @@ func resourceAccessListCreate(ctx context.Context, d *schema.ResourceData, meta
client := meta.(*astra.ClientWithResponses)

databaseID := d.Get("database_id").(string)
addresses := d.Get("addresses")
addresses := d.Get("addresses").([]interface{})

addressList := make([]astra.AddressRequest, len(addresses.([]interface{})))

for k, v := range d.Get("addresses").([]interface{}) {
for _, v := range addresses {
a := v.(map[string]interface{})["request"]
request := a.(*schema.Set)
addressList := make([]astra.AddressRequest, len(request.List()))
requestCount := 0
for _, val := range request.List() {
rMap := val.(map[string]interface{})
addressList[k] = astra.AddressRequest{
addressList[requestCount] = astra.AddressRequest{
Address: rMap["address"].(string),
Enabled: rMap["enabled"].(bool),
Description: rMap["description"].(string),
}

requestCount++
}
}
resp, err := client.AddAddressesToAccessListForDatabaseWithResponse(ctx,
astra.DatabaseIdParam(databaseID),
addressList,
)

resp, err := client.AddAddressesToAccessListForDatabaseWithResponse(ctx,
astra.DatabaseIdParam(databaseID),
addressList,
)
if err != nil {
return diag.FromErr(err)
} else if resp.StatusCode() >= 400 {
return diag.Errorf("error adding private link to database: %s", resp.Body)
}

if err != nil {
return diag.FromErr(err)
} else if resp.StatusCode() >= 400 {
return diag.Errorf("error adding private link to database: %s", resp.Body)
}
if err := setAccessListData(d, databaseID); err != nil {
return diag.FromErr(err)
}

if err := setAccessListData(d, databaseID); err != nil {
return diag.FromErr(err)
}

return nil
}

Expand All @@ -124,17 +123,31 @@ func resourceAccessListDelete(ctx context.Context, d *schema.ResourceData, meta
return diag.FromErr(err)
}

aResp := *accessList.Addresses
addressesQP := astra.AddressesQueryParam{}
for _, v := range aResp {
address:= *v.Address
addressesQP = append(addressesQP, address)
}
// aResp := *accessList.Addresses
// addressesQP := astra.AddressesQueryParam{}
// for _, v := range aResp {
// address:= *v.Address
// addressesQP = append(addressesQP, address)
// }

// params := &astra.DeleteAddressesOrAccessListForDatabaseParams{
// &addressesQP,
// }
// client.DeleteAddressesOrAccessListForDatabase(ctx, astra.DatabaseIdParam(databaseID), params)

params := &astra.DeleteAddressesOrAccessListForDatabaseParams{
&addressesQP,
// The above code should work, but Astra seems to only delete the first address passed as a query param
// Until it's fixed in Astra, call DELETE for each address
aResp := *accessList.Addresses
if len(aResp) > 0 {
for _, v := range aResp {
addressesQP:= astra.AddressesQueryParam{*v.Address}
params := &astra.DeleteAddressesOrAccessListForDatabaseParams{&addressesQP}
client.DeleteAddressesOrAccessListForDatabase(ctx, astra.DatabaseIdParam(databaseID), params)
}
} else {
params := &astra.DeleteAddressesOrAccessListForDatabaseParams{nil}
client.DeleteAddressesOrAccessListForDatabase(ctx, astra.DatabaseIdParam(databaseID), params)
}
client.DeleteAddressesOrAccessListForDatabase(ctx, astra.DatabaseIdParam(databaseID), params)

return nil
}
Expand Down
15 changes: 11 additions & 4 deletions internal/provider/resource_access_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"github.com/datastax/astra-client-go/v2/astra"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"testing"
"time"
)

func TestAccessList(t *testing.T){
Expand All @@ -27,7 +26,15 @@ resource "astra_access_list" "example" {
database_id = "aba3cf20-d579-4091-a36d-9c9f75096031"
addresses {
request {
address= "0.0.0.0/0"
address= "0.0.0.1/0"
enabled= true
}
request {
address= "0.0.0.2/0"
enabled= true
}
request {
address= "0.0.0.3/0"
enabled= true
}
}
Expand All @@ -40,7 +47,7 @@ func TestTimeUnmarshal(t *testing.T) {
//msg := `{"lastUpdateDateTime":"2021-08-03T15:20:29Z"}`
bodyBytes := []byte(msg)
type TestStruct struct{
LastUpdateDateTime *time.Time
LastUpdateDateTime *string
}
var dest TestStruct
if err := json.Unmarshal(bodyBytes, &dest); err != nil {
Expand Down Expand Up @@ -77,7 +84,7 @@ func TestMsgNewStructMarshal(t *testing.T){
Enabled *bool `json:"enabled,omitempty"`

// The last update date/time for the access list
//LastUpdateDateTime *time.Time `json:"lastUpdateDateTime,omitempty"`
LastUpdateDateTime *string `json:"lastUpdateDateTime,omitempty"`
}
// AccessListConfigurations defines model for AccessListConfigurations.
type AccessListConfigurations struct {
Expand Down

0 comments on commit e8dd621

Please sign in to comment.