Skip to content

Commit

Permalink
feat(obj): data source object storage (#1068)
Browse files Browse the repository at this point in the history
  • Loading branch information
Monitob committed Feb 4, 2022
1 parent 6c24c75 commit c3ff493
Show file tree
Hide file tree
Showing 5 changed files with 1,203 additions and 0 deletions.
38 changes: 38 additions & 0 deletions docs/data-sources/object_bucket.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
page_title: "Scaleway: scaleway_object_bucket"
description: |-
Gets information about Scaleway object storage buckets.
---

# scaleway_object_bucket

Gets information about the Bucket.
For more information, see [the documentation](https://www.scaleway.com/en/docs/object-storage-feature/).

## Example Usage

```hcl
resource "scaleway_object_bucket" "main" {
name = "bucket.test.com"
tags = {
foo = "bar"
}
}
data "scaleway_object_bucket" "selected" {
name = "bucket.test.com"
}
```

## Argument Reference

- `name` - (Required) The bucket name.
- `region` - (Defaults to [provider](../index.md#region) `region`) The [region](../guides/regions_and_zones.md#zones) in which the Object Storage exists.


## Attributes Reference

In addition to all above arguments, the following attribute is exported:

* `id` - The unique name of the bucket.
* `endpoint` - The endpoint URL of the bucket
49 changes: 49 additions & 0 deletions scaleway/data_source_object_bucket.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package scaleway

import (
"context"
"fmt"
"log"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

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

// Set 'Optional' schema elements
addOptionalFieldsToSchema(dsSchema, "name", "region")

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

func dataSourceScalewayObjectStorageRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
s3Client, region, err := s3ClientWithRegion(d, meta)
if err != nil {
return diag.FromErr(err)
}

bucket := d.Get("name").(string)

input := &s3.HeadBucketInput{
Bucket: aws.String(bucket),
}

log.Printf("[DEBUG] Reading Object Storage bucket: %s", input)
_, err = s3Client.HeadBucket(input)

if err != nil {
return diag.FromErr(fmt.Errorf("failed getting Object Storage bucket (%s): %w", bucket, err))
}

bucketRegionalID := newRegionalIDString(region, bucket)
d.SetId(bucketRegionalID)
return resourceScalewayObjectBucketRead(ctx, d, meta)
}
43 changes: 43 additions & 0 deletions scaleway/data_source_object_bucket_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package scaleway

import (
"fmt"
"testing"

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

func TestAccScalewayDataSourceObjectStorage_Basic(t *testing.T) {
if !*UpdateCassettes {
t.Skip("Skipping ObjectStorage test as this kind of resource can't be deleted before 24h")
}
tt := NewTestTools(t)
defer tt.Cleanup()
bucketName := sdkacctest.RandomWithPrefix("test-acc-scaleway-object-bucket")
//resourceName := "data.scaleway_object_bucket.main"
resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: tt.ProviderFactories,
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
Steps: []resource.TestStep{
{
Config: fmt.Sprintf(`
resource "scaleway_object_bucket" "base-01" {
name = "%s"
tags = {
foo = "bar"
}
}
data "scaleway_object_bucket" "selected" {
name = scaleway_object_bucket.base-01.name
}
`, bucketName),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("data.scaleway_object_bucket.selected", "name", bucketName),
),
},
},
})
}
1 change: 1 addition & 0 deletions scaleway/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ func Provider(config *ProviderConfig) plugin.ProviderFunc {
"scaleway_lb": dataSourceScalewayLb(),
"scaleway_lb_ip": dataSourceScalewayLbIP(),
"scaleway_marketplace_image": dataSourceScalewayMarketplaceImage(),
"scaleway_object_bucket": dataSourceScalewayObjectBucket(),
"scaleway_rdb_acl": dataSourceScalewayRDBACL(),
"scaleway_rdb_instance": dataSourceScalewayRDBInstance(),
"scaleway_rdb_database": dataSourceScalewayRDBDatabase(),
Expand Down

0 comments on commit c3ff493

Please sign in to comment.