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 database #782

Merged
merged 40 commits into from
May 21, 2021
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
f457f3c
feat(rdb): add support for database
remyleone Feb 16, 2021
7ac6d42
Merge branch 'master' into rdb_database
remyleone Feb 18, 2021
346ba8b
Fix
remyleone Feb 18, 2021
a26af54
Merge branch 'master' into rdb_database
remyleone Apr 16, 2021
db2377a
fix: owner is a computed field (not modifiable by api)
jeansebastienh Apr 22, 2021
bbb451b
docs: Describing scaleway_rdb_database
jeansebastienh Apr 22, 2021
4f3358c
docs: fix example labels
jeansebastienh Apr 22, 2021
49332f5
fix: rdb name is the database name
jeansebastienh Apr 23, 2021
56d0d1b
test: update test
jeansebastienh Apr 23, 2021
2795430
update cassette records
jeansebastienh Apr 28, 2021
6113cc2
feat: adding datasource scaleway_rdb_database
jeansebastienh Apr 29, 2021
cd916b7
Merge pull request #1 from jeansebastienh/rdb_database
remyleone Apr 29, 2021
6630943
docs(rdb): fix the meta information
jeansebastienh May 4, 2021
ff8b2b6
Merge pull request #3 from jeansebastienh/rdb_db_fix
remyleone May 4, 2021
27690cb
Merge branch 'master' into rdb_database
remyleone May 4, 2021
83c36fe
Update docs/data-sources/rdb_database.md
remyleone May 4, 2021
1cae0cd
Update scaleway/resource_rdb_database.go
remyleone May 4, 2021
fdb9afc
fix: name is required
jeansebastienh May 4, 2021
338b8e0
Merge pull request #4 from jeansebastienh/rdb_db_fix_2
remyleone May 5, 2021
cbb97e6
fix: Extract region from ID
jeansebastienh May 6, 2021
317be6b
removing matcher for error scenario
jeansebastienh May 7, 2021
0253091
refactor: moving all mocking utilities in rdb_helpers.go
jeansebastienh May 7, 2021
027a91e
Testing that CreatingDatabase without regionalized ID fallback to def…
jeansebastienh May 7, 2021
231470e
fix: lint errors
jeansebastienh May 7, 2021
ed84ee8
tests: testing delete database ressource
jeansebastienh May 7, 2021
b964b3b
tests: refactoring
jeansebastienh May 7, 2021
1b7327c
fix: accepting only localized UUID
jeansebastienh May 11, 2021
53adef2
fix:fake region name
jeansebastienh May 11, 2021
1706480
fix: non regional ID is no longer supported
jeansebastienh May 11, 2021
e69f138
remove mocks for now
jeansebastienh May 11, 2021
17db6c9
clean pr
jeansebastienh May 11, 2021
d2360e8
Merge pull request #7 from jeansebastienh/rdb_db_mocking
remyleone May 11, 2021
8fa271d
Merge branch 'master' into rdb_database
remyleone May 17, 2021
fdcc941
Update scaleway/resource_rdb_database.go
remyleone May 19, 2021
f007ca2
Merge branch 'master' into rdb_database
remyleone May 19, 2021
bd8207f
Fix
remyleone May 19, 2021
6612198
Merge remote-tracking branch 'origin/master' into rdbd
jeansebastienh May 20, 2021
e6559f4
fix doc
jeansebastienh May 20, 2021
baffe44
Merge remote-tracking branch 'origin/master' into rdbd
jeansebastienh May 21, 2021
dead3d7
Merge pull request #8 from jeansebastienh/rdbd
remyleone May 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions docs/data-sources/rdb_database.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
layout: "scaleway"
page_title: "Scaleway: scaleway_rdb_database"
description: |-
Gets information about an RDB database.
---

# scaleway_rdb_database

Gets information about a RDB database.

## Example Usage

```hcl
# Get the database foobar hosted on instance id 11111111-1111-1111-1111-111111111111
data "scaleway_rdb_database" "my_db" {
instance_id = "11111111-1111-1111-1111-111111111111"
name = "foobar"
}
```

## Argument Reference

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

- `name` - (Required) The name of the RDB instance.

- `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.

## Attributes Reference

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

- `owner` - The name of the owner of the database.
- `managed` - Whether or not the database is managed or not.
- `size` - Size of the database (in bytes).
4 changes: 2 additions & 2 deletions docs/data-sources/rdb_instance.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ Gets information about a RDB instance.
## Example Usage

```hcl
# Get info by IP address
# Get info by name
data "scaleway_rdb_instance" "my_instance" {
name = "foobar"
}

# Get info by IP ID
# Get info by instance ID
data "scaleway_rdb_instance" "my_instance" {
instance_id = "11111111-1111-1111-1111-111111111111"
}
Expand Down
47 changes: 47 additions & 0 deletions docs/resources/rdb_database.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
page_title: "Scaleway: scaleway_rdb_database"
description: |-
Manages Scaleway RDB Database.
---

# scaleway_rdb_database

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

## Examples

### Basic

```hcl
resource "scaleway_rdb_database" "main" {
instance_id = scaleway_rdb_instance.main.id
name = "my-new-database"
}
```

## Arguments Reference

The following arguments are supported:

- `instance_id` - (Required) UUID of the instance where to create the database.

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

- `name` - (Required) Name of the database (e.g. `my-new-database`).

## Attributes Reference

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

- `owner` - The name of the owner of the database.
- `managed` - Whether or not the database is managed or not.
- `size` - Size of the database (in bytes).

## Import

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

```bash
$ terraform import scaleway_rdb_database.rdb01_mydb fr-par/11111111-1111-1111-1111-111111111111/mydb
```
43 changes: 43 additions & 0 deletions scaleway/data_source_rdb_database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package scaleway

import (
"context"
"fmt"

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

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

fixDatasourceSchemaFlags(dsSchema, true, "instance_id", "name")

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

func dataSourceScalewayRDBDatabaseRead(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")
dbName, _ := d.GetOk("name")

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

d.SetId(fmt.Sprintf("%s/%s", regionalID, dbName.(string)))
err = d.Set("instance_id", regionalID)
if err != nil {
return diag.FromErr(err)
}
return resourceScalewayRdbDatabaseRead(ctx, d, meta)
}
56 changes: 56 additions & 0 deletions scaleway/data_source_rdb_database_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package scaleway

import (
"testing"

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

func TestAccScalewayDataSourceRdbDatabase_Basic(t *testing.T) {
tt := NewTestTools(t)
defer tt.Cleanup()
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: tt.ProviderFactories,
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
Steps: []resource.TestStep{
{
Config: `
resource "scaleway_rdb_instance" "server" {
name = "test-terraform"
node_type = "db-dev-s"
engine = "PostgreSQL-11"
}
resource "scaleway_rdb_database" "database" {
name = "test-terraform"
instance_id = scaleway_rdb_instance.server.id
}`,
},
{
Config: `
resource "scaleway_rdb_instance" "server" {
name = "test-terraform"
node_type = "db-dev-s"
engine = "PostgreSQL-11"
}
resource "scaleway_rdb_database" "database" {
name = "test-terraform"
instance_id = scaleway_rdb_instance.server.id
}
data "scaleway_rdb_database" "find_by_name_and_instance" {
name = scaleway_rdb_database.database.name
instance_id = scaleway_rdb_instance.server.id
}
`,
Check: resource.ComposeTestCheckFunc(
testAccCheckRdbDatabaseExists(tt, "scaleway_rdb_instance.server", "scaleway_rdb_database.database"),

resource.TestCheckResourceAttr("data.scaleway_rdb_database.find_by_name_and_instance", "name", "test-terraform"),
resource.TestCheckResourceAttr("data.scaleway_rdb_database.find_by_name_and_instance", "managed", "true"),
resource.TestCheckResourceAttrSet("data.scaleway_rdb_database.find_by_name_and_instance", "owner"),
resource.TestCheckResourceAttrSet("data.scaleway_rdb_database.find_by_name_and_instance", "size"),
),
},
},
})
}
14 changes: 8 additions & 6 deletions scaleway/helpers_rdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,30 @@ const (
defaultRdbInstanceTimeout = 15 * time.Minute
)

// newRdbAPI returns a new RDB API
func newRdbAPI(m interface{}) *rdb.API {
meta := m.(*Meta)
return rdb.NewAPI(meta.scwClient)
}

// rdbAPIWithRegion returns a new lb API and the region for a Create request
func rdbAPIWithRegion(d *schema.ResourceData, m interface{}) (*rdb.API, scw.Region, error) {
meta := m.(*Meta)
rdbAPI := rdb.NewAPI(meta.scwClient)

region, err := extractRegion(d, meta)
if err != nil {
return nil, "", err
}
return rdbAPI, region, nil
return newRdbAPI(m), region, nil
}

// rdbAPIWithRegionAndID returns an lb API with region and ID extracted from the state
func rdbAPIWithRegionAndID(m interface{}, id string) (*rdb.API, scw.Region, string, error) {
meta := m.(*Meta)
rdbAPI := rdb.NewAPI(meta.scwClient)

region, ID, err := parseRegionalID(id)
if err != nil {
return nil, "", "", err
}
return rdbAPI, region, ID, nil
return newRdbAPI(m), region, ID, nil
}

func flattenRdbInstanceReadReplicas(readReplicas []*rdb.Endpoint) interface{} {
Expand Down
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_database": resourceScalewayRdbDatabase(),
"scaleway_rdb_instance": resourceScalewayRdbInstance(),
"scaleway_rdb_user": resourceScalewayRdbUser(),
"scaleway_object_bucket": resourceScalewayObjectBucket(),
Expand All @@ -93,6 +94,7 @@ func Provider(config *ProviderConfig) plugin.ProviderFunc {
"scaleway_instance_volume": dataSourceScalewayInstanceVolume(),
"scaleway_baremetal_offer": dataSourceScalewayBaremetalOffer(),
"scaleway_rdb_instance": dataSourceScalewayRDBInstance(),
"scaleway_rdb_database": dataSourceScalewayRDBDatabase(),
"scaleway_k8s_cluster": dataSourceScalewayK8SCluster(),
"scaleway_k8s_pool": dataSourceScalewayK8SPool(),
"scaleway_lb_ip": dataSourceScalewayLbIP(),
Expand Down
Loading