Skip to content

Commit

Permalink
Add support for enabling/disabling access lists (#82)
Browse files Browse the repository at this point in the history
  • Loading branch information
emerkle826 authored Mar 11, 2022
1 parent 65efbe7 commit 81e4a9c
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 35 deletions.
8 changes: 5 additions & 3 deletions docs/resources/access_list.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ description: |-
```terraform
resource "astra_access_list" "example" {
database_id = "a6bc9c26-e7ce-424f-84c7-0a00afb12588"
enabled = true
addresses {
request {
address = "0.0.0.0/0"
Expand All @@ -34,6 +35,7 @@ resource "astra_access_list" "example" {

### Optional

- **enabled** (Boolean) Public access restrictions enabled or disabled
- **id** (String) The ID of this resource.

<a id="nestedblock--addresses"></a>
Expand All @@ -48,12 +50,12 @@ Required:

Required:

- **address** (String) Address
- **enabled** (Boolean) Description
- **address** (String) IP Address/CIDR group that should have access
- **enabled** (Boolean) Enable/disable this IP Address/CIDR group's access

Optional:

- **description** (String) Description
- **description** (String) Description for the IP Address/CIDR group

## Import

Expand Down
1 change: 1 addition & 0 deletions examples/resources/astra_access_list/resource.tf
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
resource "astra_access_list" "example" {
database_id = "a6bc9c26-e7ce-424f-84c7-0a00afb12588"
enabled = true
addresses {
request {
address = "0.0.0.0/0"
Expand Down
2 changes: 1 addition & 1 deletion internal/provider/data_source_access_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func dataSourceAccessList() *schema.Resource {
},

"datacenter_id": {
Description: "Org id for the access list.",
Description: "Dataceneter id for the access list.",
Type: schema.TypeString,
Computed: true,
},
Expand Down
86 changes: 57 additions & 29 deletions internal/provider/resource_access_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,17 +45,17 @@ func resourceAccessList() *schema.Resource {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"address": {
Description: "Address",
Description: "IP Address/CIDR group that should have access",
Type: schema.TypeString,
Required: true,
},
"description": {
Description: "Description",
Description: "Description for the IP Address/CIDR group",
Type: schema.TypeString,
Optional: true,
},
"enabled": {
Description: "Description",
Description: "Enable/disable this IP Address/CIDR group's access",
Type: schema.TypeBool,
Required: true,
},
Expand All @@ -65,6 +65,12 @@ func resourceAccessList() *schema.Resource {
},
},
},
"enabled": {
Description: "Public access restrictions enabled or disabled",
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
},
},
}
}
Expand All @@ -74,37 +80,39 @@ func resourceAccessListCreate(ctx context.Context, d *schema.ResourceData, meta

databaseID := d.Get("database_id").(string)
addresses := d.Get("addresses").([]interface{})
restricted := d.Get("enabled").(bool)
addressList := getAddressList(addresses)

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[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,
)
addResp, 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 addResp.StatusCode() >= 400 {
return diag.Errorf("error adding private link to database: %s", addResp.Body)
}

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

accessListConfig := astra.AccessListConfigurations{AccessListEnabled: restricted}
updResp, err := client.UpdateAccessListForDatabaseWithResponse(ctx,
astra.DatabaseIdParam(databaseID),
astra.UpdateAccessListForDatabaseJSONRequestBody{
Addresses: &addressList,
Configurations: &accessListConfig,
},
)
if err != nil {
fmt.Print(err)
return diag.FromErr(err)
} else if updResp.StatusCode() >= 400 {
return diag.Errorf("error updating access list configuration: %d\n%s", updResp.StatusCode(), updResp.Body)
}

return nil
}

Expand Down Expand Up @@ -197,3 +205,23 @@ func parseAccessListID(id string) (string, error) {
}
return idParts[0], nil
}

func getAddressList(addresses []interface{}) []astra.AddressRequest {
var addressList []astra.AddressRequest
// There should only be 1 addresses object
v := addresses[0]
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[requestCount] = astra.AddressRequest{
Address: rMap["address"].(string),
Enabled: rMap["enabled"].(bool),
Description: rMap["description"].(string),
}
requestCount++
}
return addressList
}
5 changes: 3 additions & 2 deletions internal/provider/resource_access_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ func TestAccessList(t *testing.T){
func testAccAccessListConfiguration() string {
return fmt.Sprintf(`
resource "astra_access_list" "example" {
database_id = "aba3cf20-d579-4091-a36d-9c9f75096031"
database_id = "f6e6b500-61a0-48d5-a29f-3406d28974ee"
addresses {
request {
address= "0.0.0.1/0"
Expand All @@ -38,6 +38,7 @@ resource "astra_access_list" "example" {
enabled= true
}
}
enabled = true
}
`)
}
Expand Down Expand Up @@ -118,4 +119,4 @@ func TestMsgNewStructMarshal(t *testing.T){
fmt.Printf("succeed")


}
}

0 comments on commit 81e4a9c

Please sign in to comment.