in io/azure.go [47:113]
func createAzureBucket(ctx context.Context, parsed *url.URL, props map[string]string) (*blob.Bucket, error) {
adlsSasTokens := propertiesWithPrefix(props, AdlsSasTokenPrefix)
adlsConnectionStrings := propertiesWithPrefix(props, AdlsConnectionStringPrefix)
// Construct the client
accountName := props[AdlsSharedKeyAccountName]
endpoint := props[AdlsEndpoint]
protocol := props[AdlsProtocol]
var client *container.Client
if accountName == "" {
return nil, errors.New("account name is required for azure bucket")
}
if accountKey, ok := props[AdlsSharedKeyAccountKey]; ok {
svcURL, err := azureblob.NewServiceURL(&azureblob.ServiceURLOptions{
AccountName: accountName,
Protocol: protocol,
StorageDomain: endpoint,
})
if err != nil {
return nil, err
}
containerURL, err := url.JoinPath(string(svcURL), parsed.Host)
if err != nil {
return nil, err
}
sharedKeyCred, err := azblob.NewSharedKeyCredential(accountName, accountKey)
if err != nil {
return nil, fmt.Errorf("failed azblob.NewSharedKeyCredential: %w", err)
}
client, err = container.NewClientWithSharedKeyCredential(containerURL, sharedKeyCred, nil)
if err != nil {
return nil, fmt.Errorf("failed container.NewClientWithSharedKeyCredential: %w", err)
}
} else if sasToken, ok := adlsSasTokens[accountName]; ok {
svcURL, err := azureblob.NewServiceURL(&azureblob.ServiceURLOptions{
AccountName: accountName,
SASToken: sasToken,
Protocol: protocol,
StorageDomain: endpoint,
})
if err != nil {
return nil, err
}
containerURL, err := url.JoinPath(string(svcURL), parsed.Host)
if err != nil {
return nil, err
}
client, err = container.NewClientWithNoCredential(containerURL, nil)
if err != nil {
return nil, fmt.Errorf("failed container.NewClientWithNoCredential: %w", err)
}
} else if connectionString, ok := adlsConnectionStrings[accountName]; ok {
var err error
client, err = container.NewClientFromConnectionString(connectionString, parsed.Host, nil)
if err != nil {
return nil, fmt.Errorf("failed container.NewClientFromConnectionString: %w", err)
}
}
return azureblob.OpenBucket(ctx, client, nil)
}