diff --git a/pkg/volume/azure_file/azure_file.go b/pkg/volume/azure_file/azure_file.go index ff91f657f4e..d486c7d12c0 100644 --- a/pkg/volume/azure_file/azure_file.go +++ b/pkg/volume/azure_file/azure_file.go @@ -28,6 +28,8 @@ import ( "k8s.io/kubernetes/pkg/volume" "github.com/golang/glog" + "k8s.io/kubernetes/pkg/cloudprovider" + "k8s.io/kubernetes/pkg/cloudprovider/providers/azure" "k8s.io/kubernetes/pkg/volume/util" ) @@ -207,7 +209,12 @@ func (b *azureFileMounter) SetUpAt(dir string, fsGroup *int64) error { return err } os.MkdirAll(dir, 0750) - source := fmt.Sprintf("//%s.file.core.windows.net/%s", accountName, b.shareName) + + azure, err := getAzureCloud(b.plugin.host.GetCloudProvider()) + if err != nil { + return err + } + source := fmt.Sprintf("//%s.file.%s/%s", accountName, azure.Environment.StorageEndpointSuffix, b.shareName) // parameters suggested by https://azure.microsoft.com/en-us/documentation/articles/storage-how-to-use-files-linux/ options := []string{fmt.Sprintf("vers=3.0,username=%s,password=%s,dir_mode=0777,file_mode=0777", accountName, accountKey)} if b.readOnly { @@ -268,3 +275,12 @@ func getVolumeSource( return nil, false, fmt.Errorf("Spec does not reference an AzureFile volume type") } + +func getAzureCloud(cloudProvider cloudprovider.Interface) (*azure.Cloud, error) { + azure, ok := cloudProvider.(*azure.Cloud) + if !ok || azure == nil { + return nil, fmt.Errorf("Failed to get Azure Cloud Provider. GetCloudProvider returned %v instead", cloudProvider) + } + + return azure, nil +} diff --git a/pkg/volume/azure_file/azure_file_test.go b/pkg/volume/azure_file/azure_file_test.go index 646fdad345e..c209c0440b9 100644 --- a/pkg/volume/azure_file/azure_file_test.go +++ b/pkg/volume/azure_file/azure_file_test.go @@ -20,12 +20,15 @@ import ( "io/ioutil" "os" "path" + "strings" "testing" "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes/fake" + "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" + "k8s.io/kubernetes/pkg/cloudprovider/providers/azure" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" volumetest "k8s.io/kubernetes/pkg/volume/testing" @@ -82,6 +85,23 @@ func contains(modes []v1.PersistentVolumeAccessMode, mode v1.PersistentVolumeAcc return false } +func getTestCloud(t *testing.T) *azure.Cloud { + config := `{ + "aadClientId": "--aad-client-id--", + "aadClientSecret": "--aad-client-secret--" + }` + configReader := strings.NewReader(config) + cloud, err := azure.NewCloud(configReader) + if err != nil { + t.Error(err) + } + azureCloud, ok := cloud.(*azure.Cloud) + if !ok { + t.Error("NewCloud returned incorrect type") + } + return azureCloud +} + func TestPlugin(t *testing.T) { tmpDir, err := ioutil.TempDir(os.TempDir(), "azurefileTest") if err != nil { @@ -89,7 +109,7 @@ func TestPlugin(t *testing.T) { } defer os.RemoveAll(tmpDir) plugMgr := volume.VolumePluginMgr{} - plugMgr.InitPlugins(ProbeVolumePlugins(), volumetest.NewFakeVolumeHost(tmpDir, nil, nil)) + plugMgr.InitPlugins(ProbeVolumePlugins(), volumetest.NewFakeVolumeHostWithCloudProvider(tmpDir, nil, nil, getTestCloud(t))) plug, err := plugMgr.FindPluginByName("kubernetes.io/azure-file") if err != nil { diff --git a/pkg/volume/testing/testing.go b/pkg/volume/testing/testing.go index 2ff1d1259c7..9ccd840c893 100644 --- a/pkg/volume/testing/testing.go +++ b/pkg/volume/testing/testing.go @@ -53,7 +53,15 @@ type fakeVolumeHost struct { } func NewFakeVolumeHost(rootDir string, kubeClient clientset.Interface, plugins []VolumePlugin) *fakeVolumeHost { - host := &fakeVolumeHost{rootDir: rootDir, kubeClient: kubeClient, cloud: nil} + return newFakeVolumeHost(rootDir, kubeClient, plugins, nil) +} + +func NewFakeVolumeHostWithCloudProvider(rootDir string, kubeClient clientset.Interface, plugins []VolumePlugin, cloud cloudprovider.Interface) *fakeVolumeHost { + return newFakeVolumeHost(rootDir, kubeClient, plugins, cloud) +} + +func newFakeVolumeHost(rootDir string, kubeClient clientset.Interface, plugins []VolumePlugin, cloud cloudprovider.Interface) *fakeVolumeHost { + host := &fakeVolumeHost{rootDir: rootDir, kubeClient: kubeClient, cloud: cloud} host.mounter = &mount.FakeMounter{} host.writer = &io.StdWriter{} host.pluginMgr.InitPlugins(plugins, host)