Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(rdb): add support for acl rules #784

Merged
merged 29 commits into from
May 21, 2021
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
2c4ead6
feat(rdb): add support for acl rules
remyleone Feb 16, 2021
42d5669
Fix
remyleone Feb 17, 2021
4675d5e
Fix
remyleone Feb 17, 2021
75f540e
Add a wait
remyleone Feb 17, 2021
7d8f4be
Merge branch 'master' into rdb_acl
remyleone Feb 18, 2021
c9cc315
Fix
remyleone Feb 18, 2021
c69badc
Merge branch 'master' into rdb_acl
remyleone Apr 20, 2021
999fba7
fix: wrong IDs
jeansebastienh Apr 29, 2021
3648b05
chore: indent
jeansebastienh Apr 29, 2021
ba06f8e
fix: API return the IP in the CIDR format
jeansebastienh Apr 30, 2021
d300e30
fix: update should look to the instance id and test acl_rules changes
jeansebastienh Apr 30, 2021
fc5d1d4
feat(rdb): Supporting whole acl deletion
jeansebastienh Apr 30, 2021
40402ea
tests: adding rdb acl cassette recording
jeansebastienh Apr 30, 2021
68a8d33
Merge branch 'master' into rdb_acl
remyleone May 3, 2021
81682e2
fix: using ID instead if get(instance_id)
jeansebastienh May 3, 2021
3c55d3a
docs: adding rdb_acl
jeansebastienh May 3, 2021
e56d619
tests: testing update
jeansebastienh May 3, 2021
190a331
feat(rdb): Supporting the rdb acl data source
jeansebastienh May 4, 2021
2c3445c
docs(rdb): cosmetic
jeansebastienh May 4, 2021
e388c14
Merge pull request #2 from jeansebastienh/rdb_acl
remyleone May 4, 2021
e186a6b
fix(lint): Error: resourceScalewayRdbACLParseID is unused (deadcode)
jeansebastienh May 4, 2021
69d41a8
Merge pull request #5 from jeansebastienh/rdb_acl_fix
remyleone May 5, 2021
54f3ff2
fix(build): imported and not used: "strings"
jeansebastienh May 5, 2021
91ab173
Merge remote-tracking branch 'origin/master' into rdb-acl
jeansebastienh May 21, 2021
8408061
refactoring
jeansebastienh May 21, 2021
ac53dee
Merge pull request #6 from jeansebastienh/rdb-acl
remyleone May 21, 2021
fa07455
fix: removing useless comments
jeansebastienh May 21, 2021
116501f
docs: removing useless reference
jeansebastienh May 21, 2021
1ec4790
docs: instance_id is regionalized
jeansebastienh May 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
38 changes: 38 additions & 0 deletions docs/data-sources/rdb_acl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
layout: "scaleway"
page_title: "Scaleway: scaleway_rdb_acl"
description: |-
Gets information about the RDB instance network Access Control List.
---

# scaleway_rdb_acl

Gets information about the RDB instance network Access Control List.

## Example Usage

```hcl
# Get the database ACL for the instanceid 11111111-1111-1111-1111-111111111111
data "scaleway_rdb_acl" "my_acl" {
instance_id = "11111111-1111-1111-1111-111111111111"
}
```

## Argument Reference

- `instance_id` - (Required) The RDB instance ID.

- `region` - (Defaults to [provider](../index.md#region) `region`) The [region](../guides/regions_and_zones.md#zones) in which the RDB instance exists.

- `organization_id` - (Defaults to [provider](../index.md#organization_id) `organization_id`) The ID of the organization the RDB instance is in.

## Attribute Reference

In addition to all above arguments, the following attributes are exported:

- `acl_rules` - A list of ACLs (structure is described below)

The `acl_rules` block supports:

- `ip` - The ip range to whitelist in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation)
- `description` - A simple text describing this rule
57 changes: 57 additions & 0 deletions docs/resources/rdb_acl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
---
page_title: "Scaleway: scaleway_rdb_acl"
description: |-
Manages Scaleway Database Instances.
---

# scaleway_rdb_acl

Creates and manages Scaleway Database instance autorized IPs.
For more information, see [the documentation](https://developers.scaleway.com/en/products/rdb/api).

## Examples

### Basic

```hcl
resource scaleway_rdb_acl main {
instance_id = scaleway_rdb_instance.main.id
acl_rules {
ip = "1.2.3.4/32"
description = "foo"
}
}
```

## Arguments Reference

The following arguments are supported:

- `instance_id` - (Required) The instance on which to create the ACL.

~> **Important:** Updates to `instance_id` will recreate the Database ACL.

- `acl_rules` - A list of ACLs (structure is described below)

- `region` - (Defaults to [provider](../index.md#region) `region`) The [region](../guides/regions_and_zones.md#regions) in which the Database Instance should be created.

- `project_id` - (Defaults to [provider](../index.md#project_id) `project_id`) The ID of the project the Database Instance is associated with.

The `acl_rules` block supports:

- `ip` - (Required) The ip range to whitelist in [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation)
- `description` - (Optional) A simple text describing this rule


## Attributes Reference

All arguments above are exported.

## Import

Database Instance can be imported using the `{region}/{id}`, e.g.

```bash
$ terraform import scaleway_rdb_acl.acl01 fr-par/11111111-1111-1111-1111-111111111111
```

42 changes: 42 additions & 0 deletions scaleway/data_source_rdb_acl.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package scaleway

import (
"context"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func dataSourceScalewayRDBACL() *schema.Resource {
// Generate datasource schema from resource
dsSchema := datasourceSchemaFromResourceSchema(resourceScalewayRdbACL().Schema)

dsSchema["instance_id"].Computed = false
dsSchema["instance_id"].Required = true

return &schema.Resource{
ReadContext: dataSourceScalewayRDBACLRead,
Schema: dsSchema,
}
}

func dataSourceScalewayRDBACLRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
_, region, err := rdbAPIWithRegion(d, meta)
if err != nil {
return diag.FromErr(err)
}
instanceID, _ := d.GetOk("instance_id")

_, _, err = parseLocalizedID(instanceID.(string))
regionalID := instanceID
if err != nil {
regionalID = datasourceNewRegionalizedID(instanceID, region)
}

d.SetId(regionalID.(string))
err = d.Set("instance_id", regionalID)
if err != nil {
return diag.FromErr(err)
}
return resourceScalewayRdbACLRead(ctx, d, meta)
}
77 changes: 77 additions & 0 deletions scaleway/data_source_rdb_acl_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package scaleway

import (
"fmt"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

func TestAccScalewayDataSourceRDBAcl_Basic(t *testing.T) {
tt := NewTestTools(t)
defer tt.Cleanup()
instanceName := "TestAccScalewayDataSourceRDBAcl_Basic"
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: tt.ProviderFactories,
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
Steps: []resource.TestStep{
{
Config: fmt.Sprintf(`
resource "scaleway_rdb_instance" "main" {
name = "%s"
node_type = "db-dev-s"
engine = "PostgreSQL-12"
is_ha_cluster = false
}

resource "scaleway_rdb_acl" "main" {
instance_id = scaleway_rdb_instance.main.id
acl_rules {
ip = "1.2.3.4/32"
description = "foo"
}

acl_rules {
ip = "4.5.6.7/32"
description = "bar"
}
}
`, instanceName),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "1.2.3.4/32"),
),
},
{
Config: fmt.Sprintf(`
resource "scaleway_rdb_instance" "main" {
name = "%s"
node_type = "db-dev-s"
engine = "PostgreSQL-12"
is_ha_cluster = false
}

resource "scaleway_rdb_acl" "main" {
instance_id = scaleway_rdb_instance.main.id
acl_rules {
ip = "1.2.3.4/32"
description = "foo"
}

acl_rules {
ip = "4.5.6.7/32"
description = "bar"
}
}
data "scaleway_rdb_acl" "maindata" {
instance_id = scaleway_rdb_instance.main.id

}`, instanceName),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("scaleway_rdb_acl.main", "acl_rules.0.ip", "1.2.3.4/32"),
resource.TestCheckResourceAttr("data.scaleway_rdb_acl.maindata", "acl_rules.0.ip", "1.2.3.4/32"),
),
},
},
})
}
2 changes: 2 additions & 0 deletions scaleway/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ func Provider(config *ProviderConfig) plugin.ProviderFunc {
"scaleway_lb_certificate": resourceScalewayLbCertificate(),
"scaleway_lb_frontend": resourceScalewayLbFrontend(),
"scaleway_registry_namespace": resourceScalewayRegistryNamespace(),
"scaleway_rdb_acl": resourceScalewayRdbACL(),
"scaleway_rdb_database": resourceScalewayRdbDatabase(),
"scaleway_rdb_instance": resourceScalewayRdbInstance(),
"scaleway_rdb_user": resourceScalewayRdbUser(),
Expand All @@ -93,6 +94,7 @@ func Provider(config *ProviderConfig) plugin.ProviderFunc {
"scaleway_instance_image": dataSourceScalewayInstanceImage(),
"scaleway_instance_volume": dataSourceScalewayInstanceVolume(),
"scaleway_baremetal_offer": dataSourceScalewayBaremetalOffer(),
"scaleway_rdb_acl": dataSourceScalewayRDBACL(),
"scaleway_rdb_instance": dataSourceScalewayRDBInstance(),
"scaleway_rdb_database": dataSourceScalewayRDBDatabase(),
"scaleway_k8s_cluster": dataSourceScalewayK8SCluster(),
Expand Down