diff --git a/docs/resources/migrate.md b/docs/resources/migrate.md new file mode 100644 index 0000000..0910fc7 --- /dev/null +++ b/docs/resources/migrate.md @@ -0,0 +1,68 @@ +--- +page_title: "sql_migrate Resource - terraform-provider-sql" +subcategory: "" +description: |- + +--- + +# Resource `sql_migrate` + + + +## Example Usage + +```terraform +resource "sql_migrate" "users" { + migration { + up = < +### Nested Schema for `migration` + +Required: + +- **down** (String, Required) +- **up** (String, Required) + +Optional: + +- **id** (String, Optional) Identifier can be any string to help identifying the migration in the source. + + diff --git a/examples/resources/sql_migrate/main.tf b/examples/resources/sql_migrate/main.tf new file mode 100644 index 0000000..1fdd2d4 --- /dev/null +++ b/examples/resources/sql_migrate/main.tf @@ -0,0 +1,11 @@ +terraform { + required_providers { + sql = { + source = "paultyng/sql" + } + } +} + +provider "sql" { + url = "postgres://postgres:tf@localhost:5432/tftest?sslmode=disable" +} diff --git a/examples/resources/sql_migrate/resource.tf b/examples/resources/sql_migrate/resource.tf new file mode 100644 index 0000000..30889f3 --- /dev/null +++ b/examples/resources/sql_migrate/resource.tf @@ -0,0 +1,29 @@ +resource "sql_migrate" "users" { + migration { + up = <= 0; i-- { + m := migrations[i] + + if !alreadyRun[m.ID] { + continue + } + + _, err := r.p.db.ExecContext(ctx, m.Down) + if err != nil { + return err + } + } + } + + return nil +} diff --git a/internal/provider/resource_migrate_test.go b/internal/provider/resource_migrate_test.go new file mode 100644 index 0000000..6f07bfd --- /dev/null +++ b/internal/provider/resource_migrate_test.go @@ -0,0 +1,115 @@ +package provider + +import ( + "fmt" + "testing" + + helperresource "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestResourceMigrate(t *testing.T) { + if testing.Short() { + t.Skip("skipping long test") + } + + for k, url := range testURLs { + t.Run(k, func(t *testing.T) { + _, err := schemeFromURL(url) + if err != nil { + t.Fatalf("unable to determine driver scheme for %s: %s", k, err) + } + + helperresource.UnitTest(t, helperresource.TestCase{ + ProtoV5ProviderFactories: protoV5ProviderFactories, + Steps: []helperresource.TestStep{ + { + Config: fmt.Sprintf(` +provider "sql" { + url = %q + + max_idle_conns = 0 +} + +resource "sql_migrate" "users" { + migration { + id = "create table" + + up = <