Skip to content

Commit 46d62b5

Browse files
authored
chore: migrate provider to its own package (#2459)
* chore: migrate provider to its own package * Fix * migrate cassettes
1 parent f3aadf6 commit 46d62b5

File tree

207 files changed

+1118
-1074
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

207 files changed

+1118
-1074
lines changed

cmd/tftemplate/datasource.go.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
99
)
1010

11-
func dataSourceScaleway{{.Resource}}() *schema.Resource {
11+
func DataSourceScaleway{{.Resource}}() *schema.Resource {
1212
// Generate datasource schema from resource
1313
dsSchema := datasourceSchemaFromResourceSchema(resourceScaleway{{.Resource}}().Schema)
1414

cmd/tftemplate/resource.go.tmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/scaleway/scaleway-sdk-go/scw"
1010
)
1111

12-
func resourceScaleway{{ .Resource }}() *schema.Resource {
12+
func ResourceScaleway{{ .Resource }}() *schema.Resource {
1313
return &schema.Resource{
1414
CreateContext: resourceScaleway{{ .Resource }}Create,
1515
ReadContext: resourceScaleway{{ .Resource }}Read,

internal/acctest/acctest.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
99

1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1111
"github.com/scaleway/terraform-provider-scaleway/v2/internal/meta"
12+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/provider"
1213
"github.com/scaleway/terraform-provider-scaleway/v2/internal/transport"
13-
"github.com/scaleway/terraform-provider-scaleway/v2/scaleway"
1414
"github.com/stretchr/testify/require"
1515
)
1616

@@ -48,7 +48,7 @@ func NewTestTools(t *testing.T) *TestTools {
4848
Meta: m,
4949
ProviderFactories: map[string]func() (*schema.Provider, error){
5050
"scaleway": func() (*schema.Provider, error) {
51-
return scaleway.Provider(&scaleway.ProviderConfig{Meta: m})(), nil
51+
return provider.Provider(&provider.Config{Meta: m})(), nil
5252
},
5353
},
5454
Cleanup: cleanup,

internal/provider/provider.go

Lines changed: 304 additions & 0 deletions
Large diffs are not rendered by default.

internal/provider/provider_test.go

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package provider_test
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
"github.com/scaleway/scaleway-sdk-go/scw"
11+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
12+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/meta"
13+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/provider"
14+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/iam"
15+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/instance"
16+
"github.com/stretchr/testify/require"
17+
)
18+
19+
func TestAccScalewayProvider_InstanceIPZones(t *testing.T) {
20+
tt := acctest.NewTestTools(t)
21+
defer tt.Cleanup()
22+
23+
ctx := context.Background()
24+
25+
resource.ParallelTest(t, resource.TestCase{
26+
PreCheck: func() { acctest.PreCheck(t) },
27+
ProviderFactories: func() map[string]func() (*schema.Provider, error) {
28+
metaProd, err := meta.NewMeta(ctx, &meta.Config{
29+
TerraformVersion: "terraform-tests",
30+
ForceZone: scw.ZoneFrPar2,
31+
HTTPClient: tt.Meta.HTTPClient(),
32+
})
33+
require.NoError(t, err)
34+
35+
metaDev, err := meta.NewMeta(ctx, &meta.Config{
36+
TerraformVersion: "terraform-tests",
37+
ForceZone: scw.ZoneFrPar1,
38+
HTTPClient: tt.Meta.HTTPClient(),
39+
})
40+
require.NoError(t, err)
41+
42+
return map[string]func() (*schema.Provider, error){
43+
"prod": func() (*schema.Provider, error) {
44+
return provider.Provider(&provider.Config{Meta: metaProd})(), nil
45+
},
46+
"dev": func() (*schema.Provider, error) {
47+
return provider.Provider(&provider.Config{Meta: metaDev})(), nil
48+
},
49+
}
50+
}(),
51+
CheckDestroy: iam.CheckSSHKeyDestroy(tt),
52+
Steps: []resource.TestStep{
53+
{
54+
Config: `
55+
resource scaleway_instance_ip dev {
56+
provider = "dev"
57+
}
58+
59+
resource scaleway_instance_ip prod {
60+
provider = "prod"
61+
}
62+
`,
63+
Check: resource.ComposeTestCheckFunc(
64+
instance.CheckIPExists(tt, "scaleway_instance_ip.prod"),
65+
instance.CheckIPExists(tt, "scaleway_instance_ip.dev"),
66+
resource.TestCheckResourceAttr("scaleway_instance_ip.prod", "zone", "fr-par-2"),
67+
resource.TestCheckResourceAttr("scaleway_instance_ip.dev", "zone", "fr-par-1"),
68+
),
69+
},
70+
},
71+
})
72+
}
73+
74+
func TestAccScalewayProvider_SSHKeys(t *testing.T) {
75+
tt := acctest.NewTestTools(t)
76+
defer tt.Cleanup()
77+
78+
SSHKeyName := "TestAccScalewayProvider_SSHKeys"
79+
SSHKey := "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEEYrzDOZmhItdKaDAEqJQ4ORS2GyBMtBozYsK5kiXXX [email protected]"
80+
81+
ctx := context.Background()
82+
83+
resource.ParallelTest(t, resource.TestCase{
84+
PreCheck: func() { acctest.PreCheck(t) },
85+
ProviderFactories: func() map[string]func() (*schema.Provider, error) {
86+
metaProd, err := meta.NewMeta(ctx, &meta.Config{
87+
TerraformVersion: "terraform-tests",
88+
HTTPClient: tt.Meta.HTTPClient(),
89+
})
90+
require.NoError(t, err)
91+
92+
metaDev, err := meta.NewMeta(ctx, &meta.Config{
93+
TerraformVersion: "terraform-tests",
94+
HTTPClient: tt.Meta.HTTPClient(),
95+
})
96+
require.NoError(t, err)
97+
98+
return map[string]func() (*schema.Provider, error){
99+
"prod": func() (*schema.Provider, error) {
100+
return provider.Provider(&provider.Config{Meta: metaProd})(), nil
101+
},
102+
"dev": func() (*schema.Provider, error) {
103+
return provider.Provider(&provider.Config{Meta: metaDev})(), nil
104+
},
105+
}
106+
}(),
107+
CheckDestroy: iam.CheckSSHKeyDestroy(tt),
108+
Steps: []resource.TestStep{
109+
{
110+
Config: fmt.Sprintf(`
111+
resource "scaleway_account_ssh_key" "prod" {
112+
provider = "prod"
113+
name = "%[1]s"
114+
public_key = "%[2]s"
115+
}
116+
117+
resource "scaleway_account_ssh_key" "dev" {
118+
provider = "dev"
119+
name = "%[1]s"
120+
public_key = "%[2]s"
121+
}
122+
`, SSHKeyName, SSHKey),
123+
Check: resource.ComposeTestCheckFunc(
124+
iam.CheckSSHKeyExists(tt, "scaleway_account_ssh_key.prod"),
125+
iam.CheckSSHKeyExists(tt, "scaleway_account_ssh_key.dev"),
126+
),
127+
},
128+
},
129+
})
130+
}

internal/services/iam/checks.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package iam
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
8+
iamSDK "github.com/scaleway/scaleway-sdk-go/api/iam/v1alpha1"
9+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
10+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
11+
"github.com/scaleway/terraform-provider-scaleway/v2/scaleway"
12+
)
13+
14+
func CheckSSHKeyDestroy(tt *acctest.TestTools) resource.TestCheckFunc {
15+
return func(state *terraform.State) error {
16+
for _, rs := range state.RootModule().Resources {
17+
if rs.Type != "scaleway_iam_ssh_key" {
18+
continue
19+
}
20+
21+
iamAPI := scaleway.IamAPI(tt.Meta)
22+
23+
_, err := iamAPI.GetSSHKey(&iamSDK.GetSSHKeyRequest{
24+
SSHKeyID: rs.Primary.ID,
25+
})
26+
27+
// If no error resource still exist
28+
if err == nil {
29+
return fmt.Errorf("SSH key (%s) still exists", rs.Primary.ID)
30+
}
31+
32+
// Unexpected api error we return it
33+
if !httperrors.Is404(err) {
34+
return err
35+
}
36+
}
37+
38+
return nil
39+
}
40+
}
41+
42+
func CheckSSHKeyExists(tt *acctest.TestTools, n string) resource.TestCheckFunc {
43+
return func(s *terraform.State) error {
44+
rs, ok := s.RootModule().Resources[n]
45+
if !ok {
46+
return fmt.Errorf("resource not found: %s", n)
47+
}
48+
49+
iamAPI := scaleway.IamAPI(tt.Meta)
50+
51+
_, err := iamAPI.GetSSHKey(&iamSDK.GetSSHKeyRequest{
52+
SSHKeyID: rs.Primary.ID,
53+
})
54+
if err != nil {
55+
return err
56+
}
57+
58+
return nil
59+
}
60+
}

0 commit comments

Comments
 (0)