Skip to content

Commit

Permalink
chore: migrate provider to its own package (#2459)
Browse files Browse the repository at this point in the history
* chore: migrate provider to its own package

* Fix

* migrate cassettes
  • Loading branch information
remyleone committed Mar 14, 2024
1 parent f3aadf6 commit 46d62b5
Show file tree
Hide file tree
Showing 207 changed files with 1,118 additions and 1,074 deletions.
2 changes: 1 addition & 1 deletion cmd/tftemplate/datasource.go.tmpl
Expand Up @@ -8,7 +8,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func dataSourceScaleway{{.Resource}}() *schema.Resource {
func DataSourceScaleway{{.Resource}}() *schema.Resource {
// Generate datasource schema from resource
dsSchema := datasourceSchemaFromResourceSchema(resourceScaleway{{.Resource}}().Schema)

Expand Down
2 changes: 1 addition & 1 deletion cmd/tftemplate/resource.go.tmpl
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/scaleway/scaleway-sdk-go/scw"
)

func resourceScaleway{{ .Resource }}() *schema.Resource {
func ResourceScaleway{{ .Resource }}() *schema.Resource {
return &schema.Resource{
CreateContext: resourceScaleway{{ .Resource }}Create,
ReadContext: resourceScaleway{{ .Resource }}Read,
Expand Down
4 changes: 2 additions & 2 deletions internal/acctest/acctest.go
Expand Up @@ -9,8 +9,8 @@ import (

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/meta"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/provider"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/transport"
"github.com/scaleway/terraform-provider-scaleway/v2/scaleway"
"github.com/stretchr/testify/require"
)

Expand Down Expand Up @@ -48,7 +48,7 @@ func NewTestTools(t *testing.T) *TestTools {
Meta: m,
ProviderFactories: map[string]func() (*schema.Provider, error){
"scaleway": func() (*schema.Provider, error) {
return scaleway.Provider(&scaleway.ProviderConfig{Meta: m})(), nil
return provider.Provider(&provider.Config{Meta: m})(), nil
},
},
Cleanup: cleanup,
Expand Down
304 changes: 304 additions & 0 deletions internal/provider/provider.go

Large diffs are not rendered by default.

130 changes: 130 additions & 0 deletions internal/provider/provider_test.go
@@ -0,0 +1,130 @@
package provider_test

import (
"context"
"fmt"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/scaleway/scaleway-sdk-go/scw"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/meta"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/provider"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/iam"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/instance"
"github.com/stretchr/testify/require"
)

func TestAccScalewayProvider_InstanceIPZones(t *testing.T) {
tt := acctest.NewTestTools(t)
defer tt.Cleanup()

ctx := context.Background()

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(t) },
ProviderFactories: func() map[string]func() (*schema.Provider, error) {
metaProd, err := meta.NewMeta(ctx, &meta.Config{
TerraformVersion: "terraform-tests",
ForceZone: scw.ZoneFrPar2,
HTTPClient: tt.Meta.HTTPClient(),
})
require.NoError(t, err)

metaDev, err := meta.NewMeta(ctx, &meta.Config{
TerraformVersion: "terraform-tests",
ForceZone: scw.ZoneFrPar1,
HTTPClient: tt.Meta.HTTPClient(),
})
require.NoError(t, err)

return map[string]func() (*schema.Provider, error){
"prod": func() (*schema.Provider, error) {
return provider.Provider(&provider.Config{Meta: metaProd})(), nil
},
"dev": func() (*schema.Provider, error) {
return provider.Provider(&provider.Config{Meta: metaDev})(), nil
},
}
}(),
CheckDestroy: iam.CheckSSHKeyDestroy(tt),
Steps: []resource.TestStep{
{
Config: `
resource scaleway_instance_ip dev {
provider = "dev"
}
resource scaleway_instance_ip prod {
provider = "prod"
}
`,
Check: resource.ComposeTestCheckFunc(
instance.CheckIPExists(tt, "scaleway_instance_ip.prod"),
instance.CheckIPExists(tt, "scaleway_instance_ip.dev"),
resource.TestCheckResourceAttr("scaleway_instance_ip.prod", "zone", "fr-par-2"),
resource.TestCheckResourceAttr("scaleway_instance_ip.dev", "zone", "fr-par-1"),
),
},
},
})
}

func TestAccScalewayProvider_SSHKeys(t *testing.T) {
tt := acctest.NewTestTools(t)
defer tt.Cleanup()

SSHKeyName := "TestAccScalewayProvider_SSHKeys"
SSHKey := "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEEYrzDOZmhItdKaDAEqJQ4ORS2GyBMtBozYsK5kiXXX opensource@scaleway.com"

ctx := context.Background()

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(t) },
ProviderFactories: func() map[string]func() (*schema.Provider, error) {
metaProd, err := meta.NewMeta(ctx, &meta.Config{
TerraformVersion: "terraform-tests",
HTTPClient: tt.Meta.HTTPClient(),
})
require.NoError(t, err)

metaDev, err := meta.NewMeta(ctx, &meta.Config{
TerraformVersion: "terraform-tests",
HTTPClient: tt.Meta.HTTPClient(),
})
require.NoError(t, err)

return map[string]func() (*schema.Provider, error){
"prod": func() (*schema.Provider, error) {
return provider.Provider(&provider.Config{Meta: metaProd})(), nil
},
"dev": func() (*schema.Provider, error) {
return provider.Provider(&provider.Config{Meta: metaDev})(), nil
},
}
}(),
CheckDestroy: iam.CheckSSHKeyDestroy(tt),
Steps: []resource.TestStep{
{
Config: fmt.Sprintf(`
resource "scaleway_account_ssh_key" "prod" {
provider = "prod"
name = "%[1]s"
public_key = "%[2]s"
}
resource "scaleway_account_ssh_key" "dev" {
provider = "dev"
name = "%[1]s"
public_key = "%[2]s"
}
`, SSHKeyName, SSHKey),
Check: resource.ComposeTestCheckFunc(
iam.CheckSSHKeyExists(tt, "scaleway_account_ssh_key.prod"),
iam.CheckSSHKeyExists(tt, "scaleway_account_ssh_key.dev"),
),
},
},
})
}
60 changes: 60 additions & 0 deletions internal/services/iam/checks.go
@@ -0,0 +1,60 @@
package iam

import (
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
iamSDK "github.com/scaleway/scaleway-sdk-go/api/iam/v1alpha1"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/acctest"
"github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
"github.com/scaleway/terraform-provider-scaleway/v2/scaleway"
)

func CheckSSHKeyDestroy(tt *acctest.TestTools) resource.TestCheckFunc {
return func(state *terraform.State) error {
for _, rs := range state.RootModule().Resources {
if rs.Type != "scaleway_iam_ssh_key" {
continue
}

iamAPI := scaleway.IamAPI(tt.Meta)

_, err := iamAPI.GetSSHKey(&iamSDK.GetSSHKeyRequest{
SSHKeyID: rs.Primary.ID,
})

// If no error resource still exist
if err == nil {
return fmt.Errorf("SSH key (%s) still exists", rs.Primary.ID)
}

// Unexpected api error we return it
if !httperrors.Is404(err) {
return err
}
}

return nil
}
}

func CheckSSHKeyExists(tt *acctest.TestTools, n string) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
return fmt.Errorf("resource not found: %s", n)
}

iamAPI := scaleway.IamAPI(tt.Meta)

_, err := iamAPI.GetSSHKey(&iamSDK.GetSSHKeyRequest{
SSHKeyID: rs.Primary.ID,
})
if err != nil {
return err
}

return nil
}
}

0 comments on commit 46d62b5

Please sign in to comment.