diff --git a/docs/index.md b/docs/index.md index 1f0b029..0c65219 100644 --- a/docs/index.md +++ b/docs/index.md @@ -19,6 +19,11 @@ provider "sql" { url = "sqlserver://sa:password@localhost:1433" } +provider "sql" { + alias = "azuresql" + url = "azuresql://[CLIENT_ID]:[CLIENT_SECRET]@[SERVER_NAME].database.windows.net?database=[DB_NAME]&fedauth=ActiveDirectoryServicePrincipal" +} + # connect to PostgreSQL provider "sql" { alias = "postgres" diff --git a/examples/provider/provider.tf b/examples/provider/provider.tf index 43ddfd5..63445a6 100644 --- a/examples/provider/provider.tf +++ b/examples/provider/provider.tf @@ -4,6 +4,11 @@ provider "sql" { url = "sqlserver://sa:password@localhost:1433" } +provider "sql" { + alias = "azuresql" + url = "azuresql://[CLIENT_ID]:[CLIENT_SECRET]@[SERVER_NAME].database.windows.net?database=[DB_NAME]&fedauth=ActiveDirectoryServicePrincipal" +} + # connect to PostgreSQL provider "sql" { alias = "postgres" @@ -21,4 +26,4 @@ provider "sql" { provider "sql" { alias = "mysql" url = "mysql://root:password@tcp(localhost:3306)/mysql" -} \ No newline at end of file +} diff --git a/go.mod b/go.mod index 475586e..628ba0d 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,9 @@ require ( ) require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0 // indirect github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.1.1 // indirect @@ -79,6 +82,7 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.0.2 // indirect github.com/opencontainers/runc v1.1.2 // indirect + github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/posener/complete v1.2.3 // indirect github.com/russross/blackfriday v1.6.0 // indirect diff --git a/go.sum b/go.sum index 29ab9b2..4f25298 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,9 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0 h1:lhSJz9RMbJcTgxifR1hUNJnn6CNYtbgEDtQV22/9RBA= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0 h1:OYa9vmRX2XC5GXRAzeggG12sF/z5D9Ahtdm9EJ00WN4= github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0 h1:v9p9TfTbf7AwNb5NYQt7hI41IfPoLFiFkLtb+bmGjT0= github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -310,6 +313,7 @@ github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.m github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= github.com/ory/dockertest/v3 v3.9.1 h1:v4dkG+dlu76goxMiTT2j8zV7s4oPPEppKT8K8p2f1kY= github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/internal/provider/db.go b/internal/provider/db.go index f6a92f3..9066972 100644 --- a/internal/provider/db.go +++ b/internal/provider/db.go @@ -9,7 +9,7 @@ import ( "time" // database drivers - _ "github.com/denisenkom/go-mssqldb" + _ "github.com/denisenkom/go-mssqldb/azuread" _ "github.com/go-sql-driver/mysql" _ "github.com/jackc/pgx/v4/stdlib" @@ -48,6 +48,9 @@ func (p *provider) connect(dsn string) error { // TODO: also set parseTime=true https://github.com/go-sql-driver/mysql#parsetime case "sqlserver": p.Driver = "sqlserver" + case "azuresql": + p.Driver = "azuresql" + dsn = strings.Replace(dsn, "azuresql://", "sqlserver://", 1) default: return fmt.Errorf("unexpected datasource name scheme: %q", scheme) } @@ -178,6 +181,8 @@ func (p *provider) typeAndValueForColType(colType *sql.ColumnType) (tftypes.Type kind := scanType.Kind() switch p.Driver { + case "azuresql": + fallthrough case "sqlserver": switch dbName := colType.DatabaseTypeName(); dbName { case "UNIQUEIDENTIFIER":