Skip to content

Commit 7e1a732

Browse files
authored
feat(mnq): add datasource for sns (#2718)
1 parent 3c28869 commit 7e1a732

File tree

5 files changed

+1080
-0
lines changed

5 files changed

+1080
-0
lines changed

docs/data-sources/mnq_sns.md

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
---
2+
subcategory: "Messaging and Queuing"
3+
page_title: "Scaleway: scaleway_mnq_sns"
4+
---
5+
6+
# scaleway_mnq_sns
7+
8+
Gets information about SNS for a Project
9+
10+
## Examples
11+
12+
### Basic
13+
14+
```hcl
15+
// For default project
16+
data "scaleway_mnq_sns" "main" {}
17+
18+
// For specific project
19+
data "scaleway_mnq_sns" "for_project" {
20+
project_id = scaleway_account_project.main.id
21+
}
22+
```
23+
24+
## Arguments Reference
25+
26+
The following arguments are supported:
27+
28+
- `region` - (Defaults to [provider](../index.md#region) `region`). The [region](../guides/regions_and_zones.md#regions) in which sns is enabled.
29+
30+
- `project_id` - (Defaults to [provider](../index.md#project_id) `project_id`) The ID of the Project in which sns is enabled.
31+
32+
33+
## Attributes Reference
34+
35+
In addition to all arguments above, the following attributes are exported:
36+
37+
- `id` - The ID of the Project
38+
39+
~> **Important:** Messaging and Queueing sns' IDs are [regional](../guides/regions_and_zones.md#resource-ids), which means they are of the form `{region}/{id}`, e.g. `fr-par/11111111-1111-1111-1111-111111111111`
40+
41+
- `endpoint` - The endpoint of the SNS service for this Project.

internal/provider/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ func Provider(config *Config) plugin.ProviderFunc {
287287
"scaleway_lbs": lb.DataSourceLbs(),
288288
"scaleway_marketplace_image": marketplace.DataSourceImage(),
289289
"scaleway_mnq_sqs": mnq.DataSourceSQS(),
290+
"scaleway_mnq_sns": mnq.DataSourceSNS(),
290291
"scaleway_object_bucket": object.DataSourceBucket(),
291292
"scaleway_object_bucket_policy": object.DataSourceBucketPolicy(),
292293
"scaleway_rdb_acl": rdb.DataSourceACL(),
+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package mnq
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
mnq "github.com/scaleway/scaleway-sdk-go/api/mnq/v1beta1"
10+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/datasource"
11+
)
12+
13+
func DataSourceSNS() *schema.Resource {
14+
// Generate datasource schema from resource
15+
dsSchema := datasource.SchemaFromResourceSchema(ResourceSNS().Schema)
16+
17+
datasource.AddOptionalFieldsToSchema(dsSchema, "region", "project_id")
18+
19+
return &schema.Resource{
20+
ReadContext: DataSourceMNQSNSRead,
21+
Schema: dsSchema,
22+
}
23+
}
24+
25+
func DataSourceMNQSNSRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
26+
api, region, err := newMNQSNSAPI(d, m)
27+
if err != nil {
28+
return diag.FromErr(err)
29+
}
30+
31+
sns, err := api.GetSnsInfo(&mnq.SnsAPIGetSnsInfoRequest{
32+
Region: region,
33+
ProjectID: d.Get("project_id").(string),
34+
})
35+
if err != nil {
36+
return diag.FromErr(err)
37+
}
38+
39+
if sns.Status != mnq.SnsInfoStatusEnabled {
40+
return diag.FromErr(fmt.Errorf("expected mnq sns status to be enabled, got: %s", sns.Status))
41+
}
42+
43+
regionID := datasource.NewRegionalID(sns.ProjectID, region)
44+
d.SetId(regionID)
45+
46+
diags := ResourceMNQSNSRead(ctx, d, m)
47+
if diags != nil {
48+
return append(diags, diag.Errorf("failed to read sns state")...)
49+
}
50+
51+
if d.Id() == "" {
52+
return diag.Errorf("sns (%s) not found", regionID)
53+
}
54+
55+
return nil
56+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package mnq_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
8+
)
9+
10+
func TestAccDataSourceSNS_Basic(t *testing.T) {
11+
tt := acctest.NewTestTools(t)
12+
defer tt.Cleanup()
13+
resource.ParallelTest(t, resource.TestCase{
14+
PreCheck: func() { acctest.PreCheck(t) },
15+
ProviderFactories: tt.ProviderFactories,
16+
CheckDestroy: resource.ComposeTestCheckFunc(
17+
isSNSDestroyed(tt),
18+
),
19+
Steps: []resource.TestStep{
20+
{
21+
Config: `
22+
resource scaleway_account_project main {
23+
name = "tf_tests_ds_mnq_sns_basic"
24+
}
25+
26+
resource scaleway_mnq_sns main {
27+
project_id = scaleway_account_project.main.id
28+
}
29+
30+
data scaleway_mnq_sns main {
31+
project_id = scaleway_mnq_sns.main.project_id
32+
}
33+
`,
34+
Check: resource.ComposeTestCheckFunc(
35+
isSNSPresent(tt, "scaleway_mnq_sns.main"),
36+
37+
resource.TestCheckResourceAttrPair("scaleway_mnq_sns.main", "id", "data.scaleway_mnq_sns.main", "id"),
38+
),
39+
},
40+
},
41+
})
42+
}

0 commit comments

Comments
 (0)