Skip to content

Commit

Permalink
Feat/mongodb (#68)
Browse files Browse the repository at this point in the history
* fix(test): change ressource name (%s -> rName)

* refractor(ressources): remove all .tf files

* feat: Mongo

* docs: new mongodb docs

---------

Co-authored-by: LeCrabe <[email protected]>
  • Loading branch information
TheCrabe and LeCrabe authored May 3, 2024
1 parent c6798b6 commit 5e9d95b
Show file tree
Hide file tree
Showing 52 changed files with 636 additions and 254 deletions.
33 changes: 33 additions & 0 deletions docs/resources/mongodb.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "clevercloud_mongodb Resource - terraform-provider-clevercloud"
subcategory: ""
description: |-
Manage MongoDB https://www.mongodb.com/ product.
See product specification https://www.clever-cloud.com/fr/product/mongodb/.
---

# clevercloud_mongodb (Resource)

Manage [MongoDB](https://www.mongodb.com/) product.

See [product specification](https://www.clever-cloud.com/fr/product/mongodb/).



<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `name` (String) Name of the service
- `plan` (String) Database size and spec

### Read-Only

- `creation_date` (Number) Date of database creation
- `host` (String) Database host, used to connect to
- `id` (String) Generated unique identifier
- `password` (String) Login password
- `port` (Number) Database port
- `user` (String) Login username
4 changes: 2 additions & 2 deletions pkg/provider/impl/provider_configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
var config ProviderData

tflog.Info(ctx, "configure provider...")
tflog.Debug(ctx, "configure provider...")

diags := req.Config.Get(ctx, &config)
resp.Diagnostics.Append(diags...)
Expand Down Expand Up @@ -59,5 +59,5 @@ func (p *Provider) Configure(ctx context.Context, req provider.ConfigureRequest,
resp.DataSourceData = p
resp.ResourceData = p

tflog.Info(ctx, "provider configured")
tflog.Debug(ctx, "provider configured")
}
12 changes: 7 additions & 5 deletions pkg/registry/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"go.clever-cloud.com/terraform-provider/pkg/resources/cellar/bucket"
"go.clever-cloud.com/terraform-provider/pkg/resources/java"
"go.clever-cloud.com/terraform-provider/pkg/resources/materiakv"
"go.clever-cloud.com/terraform-provider/pkg/resources/mongodb"
"go.clever-cloud.com/terraform-provider/pkg/resources/nodejs"
"go.clever-cloud.com/terraform-provider/pkg/resources/php"
"go.clever-cloud.com/terraform-provider/pkg/resources/postgresql"
Expand All @@ -19,15 +20,16 @@ import (
var Datasources = []func() datasource.DataSource{}

var Resources = []func() resource.Resource{
cellar.NewResourceCellar,
bucket.NewResourceCellarBucket,
addon.NewResourceAddon,
postgresql.NewResourcePostgreSQL,
bucket.NewResourceCellarBucket,
cellar.NewResourceCellar,
java.NewResourceJava("war"),
materiakv.NewResourceMateriaKV,
mongodb.NewResourceMongoDB,
nodejs.NewResourceNodeJS,
php.NewResourcePHP,
postgresql.NewResourcePostgreSQL,
python.NewResourcePython,
java.NewResourceJava("war"),
scala.NewResourceScala(),
static.NewResourceStatic(),
materiakv.NewResourceMateriaKV,
}
3 changes: 0 additions & 3 deletions pkg/resources/addon/provider_test_block.tf

This file was deleted.

6 changes: 3 additions & 3 deletions pkg/resources/addon/resource_addon_crud.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
// Weird behaviour, but TF can ask for a Resource without having configured a Provider (maybe for Meta and Schema)
// So we need to handle the case there is no ProviderData
func (r *ResourceAddon) Configure(ctx context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) {
tflog.Info(ctx, "ResourceAddon.Configure()")
tflog.Debug(ctx, "ResourceAddon.Configure()")

// Prevent panic if the provider has not been configured.
if req.ProviderData == nil {
Expand Down Expand Up @@ -97,7 +97,7 @@ func (r *ResourceAddon) Create(ctx context.Context, req resource.CreateRequest,

// Read resource information
func (r *ResourceAddon) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
tflog.Info(ctx, "Addon READ", map[string]interface{}{"request": req})
tflog.Debug(ctx, "Addon READ", map[string]interface{}{"request": req})

var ad Addon
diags := req.State.Get(ctx, &ad)
Expand Down Expand Up @@ -168,7 +168,7 @@ func (r *ResourceAddon) Delete(ctx context.Context, req resource.DeleteRequest,
if resp.Diagnostics.HasError() {
return
}
tflog.Info(ctx, "Addon DELETE", map[string]interface{}{"addon": ad})
tflog.Debug(ctx, "Addon DELETE", map[string]interface{}{"addon": ad})

res := tmp.DeleteAddon(ctx, r.cc, r.org, ad.ID.ValueString())
if res.IsNotFoundError() {
Expand Down
19 changes: 12 additions & 7 deletions pkg/resources/addon/resource_addon_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,12 @@ import (
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"go.clever-cloud.com/terraform-provider/pkg/helper"
"go.clever-cloud.com/terraform-provider/pkg/provider/impl"
"go.clever-cloud.com/terraform-provider/pkg/tmp"
"go.clever-cloud.dev/client"
)

//go:embed resource_addon_test_block.tf
var addonBlock string

//go:embed provider_test_block.tf
var providerBlock string

var protoV6Provider = map[string]func() (tfprotov6.ProviderServer, error){
"clevercloud": providerserver.NewProtocol6WithError(impl.New("test")()),
}
Expand All @@ -33,6 +28,16 @@ func TestAccAddon_basic(t *testing.T) {
fullName := fmt.Sprintf("clevercloud_addon.%s", rName)
cc := client.New(client.WithAutoOauthConfig())
org := os.Getenv("ORGANISATION")
providerBlock := helper.NewProvider("clevercloud").SetOrganisation(org).String()
addonBlock := helper.NewRessource(
"clevercloud_addon",
rName,
helper.SetKeyValues(map[string]any{
"name": rName,
"region": "par",
"plan": "clever_solo",
"third_party_provider": "mailpace",
})).String()

resource.Test(t, resource.TestCase{
PreCheck: func() {
Expand All @@ -57,7 +62,7 @@ func TestAccAddon_basic(t *testing.T) {
},
Steps: []resource.TestStep{{
ResourceName: rName,
Config: fmt.Sprintf(providerBlock, org) + fmt.Sprintf(addonBlock, rName, rName),
Config: providerBlock + addonBlock,
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestMatchResourceAttr(fullName, "id", regexp.MustCompile(`^addon_.*`)),
//resource.TestMatchResourceAttr(fullName, "password", regexp.MustCompile(`^[a-zA-Z0-9]+$`)),
Expand Down
7 changes: 0 additions & 7 deletions pkg/resources/addon/resource_addon_test_block.tf

This file was deleted.

3 changes: 0 additions & 3 deletions pkg/resources/cellar/bucket/provider_test_block.tf

This file was deleted.

6 changes: 3 additions & 3 deletions pkg/resources/cellar/bucket/resource_cellar_bucket_crud.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
// Weird behaviour, but TF can ask for a Resource without having configured a Provider (maybe for Meta and Schema)
// So we need to handle the case there is no ProviderData
func (r *ResourceCellarBucket) Configure(ctx context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) {
tflog.Info(ctx, "ResourceCellarBucket.Configure()")
tflog.Debug(ctx, "ResourceCellarBucket.Configure()")

// Prevent panic if the provider has not been configured.
if req.ProviderData == nil {
Expand Down Expand Up @@ -62,7 +62,7 @@ func (r *ResourceCellarBucket) Create(ctx context.Context, req resource.CreateRe

// Read resource information
func (r *ResourceCellarBucket) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
tflog.Info(ctx, "Cellar READ", map[string]interface{}{"request": req})
tflog.Debug(ctx, "Cellar READ", map[string]interface{}{"request": req})

var cellar CellarBucket
resp.Diagnostics.Append(req.State.Get(ctx, &cellar)...)
Expand Down Expand Up @@ -91,7 +91,7 @@ func (r *ResourceCellarBucket) Delete(ctx context.Context, req resource.DeleteRe
if resp.Diagnostics.HasError() {
return
}
tflog.Info(ctx, "CELLAR BUCKET DELETE", map[string]interface{}{"bucket": bucket})
tflog.Debug(ctx, "CELLAR BUCKET DELETE", map[string]interface{}{"bucket": bucket})

cellarEnvRes := tmp.GetAddonEnv(ctx, r.cc, r.org, bucket.CellarID.ValueString())
if cellarEnvRes.HasError() {
Expand Down
26 changes: 15 additions & 11 deletions pkg/resources/cellar/bucket/resource_cellar_bucket_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,23 @@ import (
"github.com/hashicorp/terraform-plugin-log/tflog"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"go.clever-cloud.com/terraform-provider/pkg/helper"
"go.clever-cloud.com/terraform-provider/pkg/provider/impl"
"go.clever-cloud.com/terraform-provider/pkg/s3"
"go.clever-cloud.com/terraform-provider/pkg/tmp"
"go.clever-cloud.dev/client"
)

//go:embed resource_cellar_bucket_test_block.tf
var cellarBucketBlock string

//go:embed provider_test_block.tf
var TestProviderBlock string

var TestProtoV6Provider = map[string]func() (tfprotov6.ProviderServer, error){
"clevercloud": providerserver.NewProtocol6WithError(impl.New("test")()),
}

func TestAccCellarBucket_basic(t *testing.T) {
ctx := context.Background()
bName := fmt.Sprintf("my-bucket-%d", time.Now().UnixMilli())
rName := fmt.Sprintf("my-bucket-%d", time.Now().UnixMilli())
cc := client.New(client.WithAutoOauthConfig())
org := os.Getenv("ORGANISATION")
providerBlock := helper.NewProvider("clevercloud").SetOrganisation(org).String()

cellar := &tmp.AddonResponse{}
if os.Getenv("TF_ACC") == "1" {
Expand All @@ -57,6 +53,14 @@ func TestAccCellarBucket_basic(t *testing.T) {
}()
}

cellarBucketBlock := helper.NewRessource(
"clevercloud_cellar_bucket",
rName,
helper.SetKeyValues(map[string]any{
"id": rName,
"cellar_id": cellar.RealID,
})).String()

resource.Test(t, resource.TestCase{
PreCheck: func() {
if org == "" {
Expand All @@ -68,8 +72,8 @@ func TestAccCellarBucket_basic(t *testing.T) {
},
ProtoV6ProviderFactories: TestProtoV6Provider,
Steps: []resource.TestStep{{
ResourceName: "cellar_bucket_" + bName,
Config: fmt.Sprintf(TestProviderBlock, org) + fmt.Sprintf(cellarBucketBlock, bName, bName, cellar.RealID),
ResourceName: "cellar_bucket_" + rName,
Config: providerBlock + cellarBucketBlock,
Check: resource.ComposeAggregateTestCheckFunc(
func(*terraform.State) error {
return nil
Expand All @@ -78,7 +82,7 @@ func TestAccCellarBucket_basic(t *testing.T) {
}},
CheckDestroy: func(state *terraform.State) error {
for resourceName, resourceState := range state.RootModule().Resources {
tflog.Info(ctx, "TEST DESTROY", map[string]interface{}{"bucket": resourceState})
tflog.Debug(ctx, "TEST DESTROY", map[string]interface{}{"bucket": resourceState})
res := tmp.GetAddonEnv(context.Background(), cc, org, cellar.ID) // TODO: resourceState.Primary.ID)
if res.IsNotFoundError() {
continue
Expand All @@ -92,7 +96,7 @@ func TestAccCellarBucket_basic(t *testing.T) {
return fmt.Errorf("unexpectd error: %s", res.Error().Error())
}

exists, err := minioClient.BucketExists(ctx, bName)
exists, err := minioClient.BucketExists(ctx, rName)
if err != nil {
return fmt.Errorf("unexpectd error: %s", res.Error().Error())
}
Expand Down

This file was deleted.

3 changes: 0 additions & 3 deletions pkg/resources/cellar/provider_test_block.tf

This file was deleted.

8 changes: 4 additions & 4 deletions pkg/resources/cellar/resource_cellar_crud.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
// Weird behaviour, but TF can ask for a Resource without having configured a Provider (maybe for Meta and Schema)
// So we need to handle the case there is no ProviderData
func (r *ResourceCellar) Configure(ctx context.Context, req resource.ConfigureRequest, resp *resource.ConfigureResponse) {
tflog.Info(ctx, "ResourceCellar.Configure()")
tflog.Debug(ctx, "ResourceCellar.Configure()")

// Prevent panic if the provider has not been configured.
if req.ProviderData == nil {
Expand Down Expand Up @@ -66,7 +66,7 @@ func (r *ResourceCellar) Create(ctx context.Context, req resource.CreateRequest,
}
addonRes := res.Payload()

tflog.Info(ctx, "get addon env vars", map[string]interface{}{"cellar": addonRes.RealID})
tflog.Debug(ctx, "get addon env vars", map[string]interface{}{"cellar": addonRes.RealID})
envRes := tmp.GetAddonEnv(ctx, r.cc, r.org, addonRes.RealID)
if envRes.HasError() {
resp.Diagnostics.AddError("failed to get addon env vars", envRes.Error().Error())
Expand All @@ -86,7 +86,7 @@ func (r *ResourceCellar) Create(ctx context.Context, req resource.CreateRequest,

// Read resource information
func (r *ResourceCellar) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
tflog.Info(ctx, "Cellar READ", map[string]interface{}{"request": req})
tflog.Debug(ctx, "Cellar READ", map[string]interface{}{"request": req})

var cellar Cellar
resp.Diagnostics.Append(req.State.Get(ctx, &cellar)...)
Expand Down Expand Up @@ -115,7 +115,7 @@ func (r *ResourceCellar) Delete(ctx context.Context, req resource.DeleteRequest,
if resp.Diagnostics.HasError() {
return
}
tflog.Info(ctx, "CELLAR DELETE", map[string]interface{}{"cellar": cellar})
tflog.Debug(ctx, "CELLAR DELETE", map[string]interface{}{"cellar": cellar})

addonRes := tmp.GetAddon(ctx, r.cc, r.org, cellar.ID.ValueString())
if addonRes.IsNotFoundError() {
Expand Down
23 changes: 13 additions & 10 deletions pkg/resources/cellar/resource_cellar_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,30 @@ import (
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
"go.clever-cloud.com/terraform-provider/pkg/helper"
"go.clever-cloud.com/terraform-provider/pkg/provider/impl"
"go.clever-cloud.com/terraform-provider/pkg/tmp"
"go.clever-cloud.dev/client"
)

//go:embed resource_cellar_test_block.tf
var cellarBlock string

//go:embed provider_test_block.tf
var providerBlock string

var TestProtoV6Provider = map[string]func() (tfprotov6.ProviderServer, error){
"clevercloud": providerserver.NewProtocol6WithError(impl.New("test")()),
}

func TestAccCellar_basic(t *testing.T) {
ctx := context.Background()
cName := fmt.Sprintf("tf-test-cellar-%d", time.Now().UnixMilli())
fullName := fmt.Sprintf("clevercloud_cellar.%s", cName)
rName := fmt.Sprintf("tf-test-cellar-%d", time.Now().UnixMilli())
fullName := fmt.Sprintf("clevercloud_cellar.%s", rName)
cc := client.New(client.WithAutoOauthConfig())
org := os.Getenv("ORGANISATION")
providerBlock := helper.NewProvider("clevercloud").SetOrganisation(org).String()
cellarBlock := helper.NewRessource(
"clevercloud_cellar",
rName,
helper.SetKeyValues(map[string]any{
"name": rName,
"region": "par",
})).String()

resource.Test(t, resource.TestCase{
PreCheck: func() {
Expand All @@ -43,8 +46,8 @@ func TestAccCellar_basic(t *testing.T) {
},
ProtoV6ProviderFactories: TestProtoV6Provider,
Steps: []resource.TestStep{{
ResourceName: "cellar_" + cName,
Config: fmt.Sprintf(providerBlock, org) + fmt.Sprintf(cellarBlock, cName, cName),
ResourceName: "cellar_" + rName,
Config: providerBlock + cellarBlock,
Check: resource.ComposeAggregateTestCheckFunc(
resource.TestMatchResourceAttr(fullName, "id", regexp.MustCompile(`^cellar_.*`)),
resource.TestMatchResourceAttr(fullName, "host", regexp.MustCompile(`^.*\.services.clever-cloud.com$`)),
Expand Down
5 changes: 0 additions & 5 deletions pkg/resources/cellar/resource_cellar_test_block.tf

This file was deleted.

3 changes: 0 additions & 3 deletions pkg/resources/java/provider_test_block.tf

This file was deleted.

Loading

0 comments on commit 5e9d95b

Please sign in to comment.