Skip to content

Commit 5e2b109

Browse files
authored
feat(cockpit): add plan datasource (#1939)
1 parent 2cfb0ef commit 5e2b109

4 files changed

+634
-0
lines changed

scaleway/data_source_cockpit_plan.go

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package scaleway
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
cockpit "github.com/scaleway/scaleway-sdk-go/api/cockpit/v1beta1"
9+
"github.com/scaleway/scaleway-sdk-go/scw"
10+
)
11+
12+
func dataSourceScalewayCockpitPlan() *schema.Resource {
13+
return &schema.Resource{
14+
ReadContext: dataSourceScalewayCockpitPlanRead,
15+
Schema: map[string]*schema.Schema{
16+
"name": {
17+
Type: schema.TypeString,
18+
Description: "The name of the plan",
19+
Required: true,
20+
},
21+
},
22+
}
23+
}
24+
25+
func dataSourceScalewayCockpitPlanRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
26+
api, err := cockpitAPI(meta)
27+
if err != nil {
28+
return diag.FromErr(err)
29+
}
30+
31+
name := d.Get("name").(string)
32+
33+
res, err := api.ListPlans(&cockpit.ListPlansRequest{}, scw.WithContext(ctx), scw.WithAllPages())
34+
if err != nil {
35+
return diag.FromErr(err)
36+
}
37+
38+
var plan *cockpit.Plan
39+
for _, p := range res.Plans {
40+
if p.Name.String() == name {
41+
plan = p
42+
break
43+
}
44+
}
45+
46+
if plan == nil {
47+
return diag.Errorf("could not find plan with name %s", name)
48+
}
49+
50+
d.SetId(plan.ID)
51+
_ = d.Set("name", plan.Name.String())
52+
53+
return nil
54+
}
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package scaleway
2+
3+
import (
4+
"regexp"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
)
9+
10+
func TestAccScalewayDataSourceCockpitPlan_Basic(t *testing.T) {
11+
tt := NewTestTools(t)
12+
defer tt.Cleanup()
13+
14+
resource.ParallelTest(t, resource.TestCase{
15+
PreCheck: func() { testAccPreCheck(t) },
16+
ProviderFactories: tt.ProviderFactories,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: `
20+
data "scaleway_cockpit_plan" "free" {
21+
name = "free"
22+
}
23+
24+
data "scaleway_cockpit_plan" "premium" {
25+
name = "premium"
26+
}
27+
28+
data "scaleway_cockpit_plan" "custom" {
29+
name = "custom"
30+
}
31+
`,
32+
Check: resource.ComposeTestCheckFunc(
33+
resource.TestCheckResourceAttrSet("data.scaleway_cockpit_plan.free", "id"),
34+
resource.TestCheckResourceAttrSet("data.scaleway_cockpit_plan.premium", "id"),
35+
resource.TestCheckResourceAttrSet("data.scaleway_cockpit_plan.custom", "id"),
36+
),
37+
},
38+
{
39+
Config: `
40+
data "scaleway_cockpit_plan" "random" {
41+
name = "plan? there ain't no plan"
42+
}
43+
`,
44+
ExpectError: regexp.MustCompile("could not find plan"),
45+
},
46+
},
47+
})
48+
}

scaleway/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ func Provider(config *ProviderConfig) plugin.ProviderFunc {
172172
"scaleway_baremetal_os": dataSourceScalewayBaremetalOs(),
173173
"scaleway_baremetal_server": dataSourceScalewayBaremetalServer(),
174174
"scaleway_cockpit": dataSourceScalewayCockpit(),
175+
"scaleway_cockpit_plan": dataSourceScalewayCockpitPlan(),
175176
"scaleway_domain_record": dataSourceScalewayDomainRecord(),
176177
"scaleway_domain_zone": dataSourceScalewayDomainZone(),
177178
"scaleway_container_namespace": dataSourceScalewayContainerNamespace(),

0 commit comments

Comments
 (0)