diff --git a/README.md b/README.md index aa22032..03c5646 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# Checkout the release that supports API Keystone V3 [here](https://github.com/GoldenBees/svfs/releases) + # The Swift Virtual File System [](https://github.com/ovh/svfs/releases) @@ -57,6 +59,7 @@ SVFS supports reading the following set of environment variables : OS_PASSWORD OS_REGION_NAME OS_TENANT_NAME + OS_USER_DOMAIN_NAME ``` * If you already authenticated to an identity endpoint : ``` @@ -83,10 +86,11 @@ hubic_token: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX... #### Keystone options -* `auth_url`: keystone URL (default is https://auth.cloud.ovh.net/v2.0). +* `auth_url`: keystone URL (default is https://auth.cloud.ovh.net/v3/). * `username`: your keystone user name. * `password`: your keystone password. * `tenant`: your project name. +* `user_domain_name`: 'default' * `region`: the region where your tenant is. * `version`: authentication version (`0` means auto-discovery which is the default). * `storage_url`: the storage endpoint holding your data. diff --git a/cmd/mount.go b/cmd/mount.go index 2590b40..0467745 100644 --- a/cmd/mount.go +++ b/cmd/mount.go @@ -154,11 +154,12 @@ func setFlags() { flags := mountCmd.PersistentFlags() //Swift options - flags.StringVar(&svfs.SwiftConnection.AuthUrl, "os-auth-url", "https://auth.cloud.ovh.net/v2.0", "Authentification URL") + flags.StringVar(&svfs.SwiftConnection.AuthUrl, "os-auth-url", "https://auth.cloud.ovh.net/v3/", "Authentification URL") flags.StringVar(&svfs.TargetContainer, "os-container-name", "", "Container name") flags.StringVar(&svfs.SwiftConnection.AuthToken, "os-auth-token", "", "Authentification token") flags.StringVar(&svfs.SwiftConnection.UserName, "os-username", "", "Username") flags.StringVar(&svfs.SwiftConnection.ApiKey, "os-password", "", "User password") + flags.StringVar(&svfs.SwiftConnection.DomainId, "os-user-domain-name", "default", "User domain name") flags.StringVar(&svfs.SwiftConnection.Region, "os-region-name", "", "Region name") flags.StringVar(&svfs.SwiftConnection.StorageUrl, "os-storage-url", "", "Storage URL") flags.BoolVar(&svfs.SwiftConnection.Internal, "os-internal-endpoint", false, "Use internal storage URL") @@ -214,6 +215,7 @@ func setFlags() { viper.BindPFlag("os_auth_url", mountCmd.PersistentFlags().Lookup("os-auth-url")) viper.BindPFlag("os_username", mountCmd.PersistentFlags().Lookup("os-username")) viper.BindPFlag("os_password", mountCmd.PersistentFlags().Lookup("os-password")) + viper.BindPFlag("os_user_domain_name", mountCmd.PersistentFlags().Lookup("os-user-domain-name")) viper.BindPFlag("os_tenant_name", mountCmd.PersistentFlags().Lookup("os-tenant-name")) viper.BindPFlag("os_region_name", mountCmd.PersistentFlags().Lookup("os-region-name")) viper.BindPFlag("os_auth_token", mountCmd.PersistentFlags().Lookup("os-auth-token")) @@ -288,10 +290,10 @@ func useConfiguration() { svfs.SwiftConnection.AuthToken = viper.GetString("os_auth_token") svfs.SwiftConnection.StorageUrl = viper.GetString("os_storage_url") - svfs.SwiftConnection.AuthUrl = viper.GetString("os_auth_url") svfs.SwiftConnection.Tenant = viper.GetString("os_tenant_name") svfs.SwiftConnection.UserName = viper.GetString("os_username") svfs.SwiftConnection.ApiKey = viper.GetString("os_password") svfs.SwiftConnection.Region = viper.GetString("os_region_name") + svfs.SwiftConnection.DomainId = viper.GetString("os_user_domain_name") } diff --git a/config/config.go b/config/config.go index c0a9490..c2f6ec2 100644 --- a/config/config.go +++ b/config/config.go @@ -15,6 +15,7 @@ func LoadConfig() error { v.BindEnv("os_password") v.BindEnv("os_region_name") v.BindEnv("os_storage_url") + v.BindEnv("os_user_domain_name") v.BindEnv("hubic_auth") v.BindEnv("hubic_token") diff --git a/scripts/mount.svfs b/scripts/mount.svfs index a011b76..da803a0 100755 --- a/scripts/mount.svfs +++ b/scripts/mount.svfs @@ -33,6 +33,7 @@ OPTIONS = { 'ip' => '--client-ip', 'mode' => '--default-mode', 'password' => '--os-password', + 'user_domain_name' => '--os-user-domain-name', 'profile_addr' => '--profile-bind', 'profile_cpu' => '--profile-cpu', 'profile_ram' => '--profile-ram', diff --git a/svfs/version.go b/svfs/version.go index e23c3c1..9143ac0 100644 --- a/svfs/version.go +++ b/svfs/version.go @@ -1,4 +1,4 @@ package svfs // Version is the current SVFS version -const Version = "0.9.1" +const Version = "0.9.4" diff --git a/vendor/github.com/xlucas/swift/auth_v3.go b/vendor/github.com/xlucas/swift/auth_v3.go index 9a2c601..a2857ae 100644 --- a/vendor/github.com/xlucas/swift/auth_v3.go +++ b/vendor/github.com/xlucas/swift/auth_v3.go @@ -109,10 +109,11 @@ type v3AuthResponse struct { type v3Auth struct { Auth *v3AuthResponse Headers http.Header + Region string } func (auth *v3Auth) Request(c *Connection) (*http.Request, error) { - + auth.Region = c.Region var v3i interface{} v3 := v3AuthRequest{} @@ -197,15 +198,17 @@ func (auth *v3Auth) endpointUrl(Type string, Internal bool) string { for _, catalog := range auth.Auth.Token.Catalog { if catalog.Type == Type { for _, endpoint := range catalog.Endpoints { - if Internal { - if endpoint.Interface == v3InterfaceInternal { - return endpoint.Url - } - } else { - if endpoint.Interface == v3InterfacePublic { - return endpoint.Url - } - } + if auth.Region == "" || (auth.Region == endpoint.Region) { + if Internal { + if endpoint.Interface == v3InterfaceInternal { + return endpoint.Url + } + } else { + if endpoint.Interface == v3InterfacePublic { + return endpoint.Url + } + } + } } } }