forked from TrueCloudLab/distribution
ba4a6bbe02
Microsoft has updated the golang Azure SDK significantly. Update the azure storage driver to use the new SDK. Add support for client secret and MSI authentication schemes in addition to shared key authentication. Implement rootDirectory support for the azure storage driver to mirror the S3 driver. Signed-off-by: Kirat Singh <kirat.singh@beacon.io> Co-authored-by: Cory Snider <corhere@gmail.com>
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package azure
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/mitchellh/mapstructure"
|
|
)
|
|
|
|
const (
|
|
defaultRealm = "core.windows.net"
|
|
)
|
|
|
|
type Credentials struct {
|
|
Type string `mapstructure:"type"`
|
|
ClientID string `mapstructure:"clientid"`
|
|
TenantID string `mapstructure:"tenantid"`
|
|
Secret string `mapstructure:"secret"`
|
|
}
|
|
|
|
type Parameters struct {
|
|
Container string `mapstructure:"container"`
|
|
AccountName string `mapstructure:"accountname"`
|
|
AccountKey string `mapstructure:"accountkey"`
|
|
Credentials Credentials `mapstructure:"credentials"`
|
|
ConnectionString string `mapstructure:"connectionstring"`
|
|
Realm string `mapstructure:"realm"`
|
|
RootDirectory string `mapstructure:"rootdirectory"`
|
|
ServiceURL string `mapstructure:"serviceurl"`
|
|
}
|
|
|
|
func NewParameters(parameters map[string]interface{}) (*Parameters, error) {
|
|
params := Parameters{
|
|
Realm: defaultRealm,
|
|
}
|
|
if err := mapstructure.Decode(parameters, ¶ms); err != nil {
|
|
return nil, err
|
|
}
|
|
if params.AccountName == "" {
|
|
return nil, errors.New("no accountname parameter provided")
|
|
}
|
|
if params.Container == "" {
|
|
return nil, errors.New("no container parameter provider")
|
|
}
|
|
if params.ServiceURL == "" {
|
|
params.ServiceURL = fmt.Sprintf("https://%s.blob.%s", params.AccountName, params.Realm)
|
|
}
|
|
return ¶ms, nil
|
|
}
|