Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion storage/adls_gen1_mount.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func (m AzureADLSGen1Mount) ValidateAndApplyDefaults(d *schema.ResourceData, cli

// Config ...
func (m AzureADLSGen1Mount) Config(client *common.DatabricksClient) map[string]string {
aadEndpoint := client.Config.Environment().AzureActiveDirectoryEndpoint()
aadEndpoint := azureActiveDirectoryEndpoint(client.Config)
return map[string]string{
m.PrefixType + ".oauth2.access.token.provider.type": "ClientCredential",

Expand Down
19 changes: 2 additions & 17 deletions storage/adls_gen2_mount.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package storage

import (
"fmt"
"strings"

"github.com/databricks/terraform-provider-databricks/common"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand All @@ -21,23 +20,9 @@ type AzureADLSGen2Mount struct {
InitializeFileSystem bool `json:"initialize_file_system"`
}

func getAzureDomain(client *common.DatabricksClient) string {
domains := map[string]string{
"PUBLIC": "core.windows.net",
"USGOVERNMENT": "core.usgovcloudapi.net",
"CHINA": "core.chinacloudapi.cn",
}
azureEnvironment := client.Config.Environment().AzureEnvironment.Name
domain, ok := domains[strings.ToUpper(azureEnvironment)]
if !ok {
panic(fmt.Sprintf("Unknown Azure environment: '%s'", azureEnvironment))
}
return domain
}

// Source returns ABFSS URI backing the mount
func (m AzureADLSGen2Mount) Source(client *common.DatabricksClient) string {
return fmt.Sprintf("abfss://%s@%s.dfs.%s%s", m.ContainerName, m.StorageAccountName, getAzureDomain(client), m.Directory)
return fmt.Sprintf("abfss://%s@%s.dfs.%s%s", m.ContainerName, m.StorageAccountName, azureDomain(client.Config), m.Directory)
}

func (m AzureADLSGen2Mount) Name() string {
Expand All @@ -50,7 +35,7 @@ func (m AzureADLSGen2Mount) ValidateAndApplyDefaults(d *schema.ResourceData, cli

// Config returns mount configurations
func (m AzureADLSGen2Mount) Config(client *common.DatabricksClient) map[string]string {
aadEndpoint := client.Config.Environment().AzureActiveDirectoryEndpoint()
aadEndpoint := azureActiveDirectoryEndpoint(client.Config)
return map[string]string{
"fs.azure.account.auth.type": "OAuth",
"fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
Expand Down
2 changes: 1 addition & 1 deletion storage/azure_blob_mount.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type AzureBlobMount struct {
// Source ...
func (m AzureBlobMount) Source(client *common.DatabricksClient) string {
return fmt.Sprintf("wasbs://%[1]s@%[2]s.blob.%[3]s%[4]s",
m.ContainerName, m.StorageAccountName, getAzureDomain(client), m.Directory)
m.ContainerName, m.StorageAccountName, azureDomain(client.Config), m.Directory)
}

func (m AzureBlobMount) Name() string {
Expand Down
80 changes: 80 additions & 0 deletions storage/environments.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package storage

import (
"fmt"
"log"
"strings"

"github.com/databricks/databricks-sdk-go/config"
)

type azureEnvironment struct {
Name string
Domain string
ActiveDirectoryEndpoint string
}

var AzurePublicCloud = azureEnvironment{
Name: "PUBLIC",
Domain: "core.windows.net",
ActiveDirectoryEndpoint: "https://login.microsoftonline.com/",
}

var AzureUsGovernmentCloud = azureEnvironment{
Name: "USGOVERNMENT",
Domain: "core.usgovcloudapi.net",
ActiveDirectoryEndpoint: "https://login.microsoftonline.us/",
}

var AzureChinaCloud = azureEnvironment{
Name: "CHINA",
Domain: "core.chinacloudapi.cn",
ActiveDirectoryEndpoint: "https://login.chinacloudapi.cn/",
}

func azureActiveDirectoryEndpoint(cfg *config.Config) string {
env, err := environment(cfg)
if err != nil {
// TODO: The error is swallowed for backward compatibility. We should
// consider returning it to the caller.
log.Printf("[DEBUG] Failed to get Azure Active Directory endpoint: %s", err)
return ""
}
return env.ActiveDirectoryEndpoint
}

func azureDomain(cfg *config.Config) string {
env, err := environment(cfg)
if err != nil {
panic(fmt.Sprintf("Failed to get Azure domain: %s", err))
}
return env.Domain
}

func environment(cfg *config.Config) (azureEnvironment, error) {
switch strings.ToUpper(cfg.AzureEnvironment) {
case "PUBLIC", "":
return AzurePublicCloud, nil
case "USGOVERNMENT":
return AzureUsGovernmentCloud, nil
case "CHINA":
return AzureChinaCloud, nil
}

// If the environment is not specified, infer the environment from
// the host.
switch {
case strings.HasSuffix(cfg.Host, ".dev.azuredatabricks.net"):
return AzurePublicCloud, nil
case strings.HasSuffix(cfg.Host, ".staging.azuredatabricks.net"):
return AzurePublicCloud, nil
case strings.HasSuffix(cfg.Host, ".azuredatabricks.net"):
return AzurePublicCloud, nil
case strings.HasSuffix(cfg.Host, ".databricks.azure.us"):
return AzureUsGovernmentCloud, nil
case strings.HasSuffix(cfg.Host, ".databricks.azure.cn"):
return AzureChinaCloud, nil
}

return azureEnvironment{}, fmt.Errorf("unable to infer Azure environment")
}
8 changes: 4 additions & 4 deletions storage/generic_mounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ type AzureADLSGen2MountGeneric struct {

// Source returns ABFSS URI backing the mount
func (m *AzureADLSGen2MountGeneric) Source(client *common.DatabricksClient) string {
return fmt.Sprintf("abfss://%s@%s.dfs.%s%s", m.ContainerName, m.StorageAccountName, getAzureDomain(client), m.Directory)
return fmt.Sprintf("abfss://%s@%s.dfs.%s%s", m.ContainerName, m.StorageAccountName, azureDomain(client.Config), m.Directory)
}

func (m *AzureADLSGen2MountGeneric) Name() string {
Expand Down Expand Up @@ -168,7 +168,7 @@ func (m *AzureADLSGen2MountGeneric) ValidateAndApplyDefaults(d *schema.ResourceD

// Config returns mount configurations
func (m *AzureADLSGen2MountGeneric) Config(client *common.DatabricksClient) map[string]string {
aadEndpoint := client.Config.Environment().AzureActiveDirectoryEndpoint()
aadEndpoint := azureActiveDirectoryEndpoint(client.Config)
return map[string]string{
"fs.azure.account.auth.type": "OAuth",
"fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
Expand Down Expand Up @@ -233,7 +233,7 @@ func (m *AzureADLSGen1MountGeneric) ValidateAndApplyDefaults(d *schema.ResourceD

// Config ...
func (m *AzureADLSGen1MountGeneric) Config(client *common.DatabricksClient) map[string]string {
aadEndpoint := client.Config.Environment().AzureActiveDirectoryEndpoint()
aadEndpoint := azureActiveDirectoryEndpoint(client.Config)
return map[string]string{
m.PrefixType + ".oauth2.access.token.provider.type": "ClientCredential",
m.PrefixType + ".oauth2.client.id": m.ClientID,
Expand All @@ -257,7 +257,7 @@ type AzureBlobMountGeneric struct {
// Source ...
func (m *AzureBlobMountGeneric) Source(client *common.DatabricksClient) string {
return fmt.Sprintf("wasbs://%[1]s@%[2]s.blob.%[3]s%[4]s",
m.ContainerName, m.StorageAccountName, getAzureDomain(client), m.Directory)
m.ContainerName, m.StorageAccountName, azureDomain(client.Config), m.Directory)
}

func (m *AzureBlobMountGeneric) Name() string {
Expand Down
Loading