diff --git a/pkg/azuredisk/azuredisk.go b/pkg/azuredisk/azuredisk.go index fcd6a6aca8..307eb59bf1 100644 --- a/pkg/azuredisk/azuredisk.go +++ b/pkg/azuredisk/azuredisk.go @@ -55,6 +55,7 @@ type DriverOptions struct { CloudConfigSecretNamespace string CustomUserAgent string UserAgentSuffix string + UseCSIProxyGAInterface bool } // CSIDriver defines the interface for a CSI driver. @@ -85,6 +86,7 @@ type DriverCore struct { nodeInfo *optimization.NodeInfo ioHandler azureutils.IOHandler hostUtil hostUtil + useCSIProxyGAInterface bool } // Driver is the v1 implementation of the Azure Disk CSI Driver. @@ -108,6 +110,7 @@ func newDriverV1(options *DriverOptions) *Driver { driver.cloudConfigSecretNamespace = options.CloudConfigSecretNamespace driver.customUserAgent = options.CustomUserAgent driver.userAgentSuffix = options.UserAgentSuffix + driver.useCSIProxyGAInterface = options.UseCSIProxyGAInterface driver.volumeLocks = volumehelper.NewVolumeLocks() driver.ioHandler = azureutils.NewOSIOHandler() driver.hostUtil = hostutil.NewHostUtil() @@ -167,7 +170,7 @@ func (d *Driver) Run(endpoint, kubeconfig string, disableAVSetNodes, testingMock } } - d.mounter, err = mounter.NewSafeMounter() + d.mounter, err = mounter.NewSafeMounter(d.useCSIProxyGAInterface) if err != nil { klog.Fatalf("Failed to get safe mounter. Error: %v", err) } diff --git a/pkg/azuredisk/azuredisk_v2.go b/pkg/azuredisk/azuredisk_v2.go index be8dafd93e..e635ad3c9c 100644 --- a/pkg/azuredisk/azuredisk_v2.go +++ b/pkg/azuredisk/azuredisk_v2.go @@ -74,6 +74,7 @@ func newDriverV2(options *DriverOptions) *DriverV2 { driver.cloudConfigSecretNamespace = options.CloudConfigSecretNamespace driver.customUserAgent = options.CustomUserAgent driver.userAgentSuffix = options.UserAgentSuffix + driver.useCSIProxyGAInterface = options.UseCSIProxyGAInterface driver.ioHandler = azureutils.NewOSIOHandler() driver.hostUtil = hostutil.NewHostUtil() @@ -119,7 +120,7 @@ func (d *DriverV2) Run(endpoint, kubeconfig string, disableAVSetNodes, testingMo } } - d.mounter, err = mounter.NewSafeMounter() + d.mounter, err = mounter.NewSafeMounter(d.useCSIProxyGAInterface) if err != nil { klog.Fatalf("Failed to get safe mounter. Error: %v", err) } diff --git a/pkg/azuredisk/fake_azuredisk.go b/pkg/azuredisk/fake_azuredisk.go index 05c974e420..16dcfcbc8a 100644 --- a/pkg/azuredisk/fake_azuredisk.go +++ b/pkg/azuredisk/fake_azuredisk.go @@ -109,12 +109,13 @@ func newFakeDriverV1(t *testing.T) (*fakeDriverV1, error) { driver.VolumeAttachLimit = -1 driver.ioHandler = azureutils.NewFakeIOHandler() driver.hostUtil = azureutils.NewFakeHostUtil() + driver.useCSIProxyGAInterface = true ctrl := gomock.NewController(t) defer ctrl.Finish() driver.cloud = azure.GetTestCloud(ctrl) - mounter, err := mounter.NewSafeMounter() + mounter, err := mounter.NewSafeMounter(driver.useCSIProxyGAInterface) if err != nil { return nil, err } diff --git a/pkg/azuredisk/fake_azuredisk_v2.go b/pkg/azuredisk/fake_azuredisk_v2.go index f09542bde6..e7a1beb180 100644 --- a/pkg/azuredisk/fake_azuredisk_v2.go +++ b/pkg/azuredisk/fake_azuredisk_v2.go @@ -64,12 +64,13 @@ func newFakeDriverV2(t *testing.T) (*fakeDriverV2, error) { driver.VolumeAttachLimit = -1 driver.ioHandler = azureutils.NewFakeIOHandler() driver.hostUtil = azureutils.NewFakeHostUtil() + driver.useCSIProxyGAInterface = true ctrl := gomock.NewController(t) defer ctrl.Finish() driver.cloud = azure.GetTestCloud(ctrl) - mounter, err := mounter.NewSafeMounter() + mounter, err := mounter.NewSafeMounter(driver.useCSIProxyGAInterface) if err != nil { return nil, err } diff --git a/pkg/azurediskplugin/main.go b/pkg/azurediskplugin/main.go index 8cb12affd3..d9670328ce 100644 --- a/pkg/azurediskplugin/main.go +++ b/pkg/azurediskplugin/main.go @@ -50,6 +50,7 @@ var ( cloudConfigSecretNamespace = flag.String("cloud-config-secret-namespace", "kube-system", "cloud config secret namespace") customUserAgent = flag.String("custom-user-agent", "", "custom userAgent") userAgentSuffix = flag.String("user-agent-suffix", "", "userAgent suffix") + useCSIProxyGAInterface = flag.Bool("use-csiproxy-ga-interface", false, "boolean flag to enable csi-proxy GA interface on Windows") ) func main() { @@ -83,6 +84,7 @@ func handle() { CloudConfigSecretNamespace: *cloudConfigSecretNamespace, CustomUserAgent: *customUserAgent, UserAgentSuffix: *userAgentSuffix, + UseCSIProxyGAInterface: *useCSIProxyGAInterface, } driver := azuredisk.NewDriver(&driverOptions) if driver == nil { diff --git a/pkg/mounter/fake_safe_mounter.go b/pkg/mounter/fake_safe_mounter.go index aedce3bf08..19c000f8bb 100644 --- a/pkg/mounter/fake_safe_mounter.go +++ b/pkg/mounter/fake_safe_mounter.go @@ -35,7 +35,7 @@ type FakeSafeMounter struct { // NewFakeSafeMounter creates a mount.SafeFormatAndMount instance suitable for use in unit tests. func NewFakeSafeMounter() (*mount.SafeFormatAndMount, error) { if runtime.GOOS == "windows" { - return NewSafeMounter() + return NewSafeMounter(true) } fakeSafeMounter := FakeSafeMounter{} diff --git a/pkg/mounter/safe_mounter_unix.go b/pkg/mounter/safe_mounter_unix.go index 215047b001..72d0cdc915 100644 --- a/pkg/mounter/safe_mounter_unix.go +++ b/pkg/mounter/safe_mounter_unix.go @@ -24,7 +24,7 @@ import ( utilexec "k8s.io/utils/exec" ) -func NewSafeMounter() (*mount.SafeFormatAndMount, error) { +func NewSafeMounter(useCSIProxyGAInterface bool) (*mount.SafeFormatAndMount, error) { return &mount.SafeFormatAndMount{ Interface: mount.New(""), Exec: utilexec.New(), diff --git a/pkg/mounter/safe_mounter_unix_test.go b/pkg/mounter/safe_mounter_unix_test.go index 9acf46780d..7991c4736b 100644 --- a/pkg/mounter/safe_mounter_unix_test.go +++ b/pkg/mounter/safe_mounter_unix_test.go @@ -17,12 +17,13 @@ limitations under the License. package mounter import ( - "github.com/stretchr/testify/assert" "testing" + + "github.com/stretchr/testify/assert" ) func TestNewSafeMounter(t *testing.T) { - resp, err := NewSafeMounter() + resp, err := NewSafeMounter(true) assert.NotNil(t, resp) assert.Nil(t, err) } diff --git a/pkg/mounter/safe_mounter_windows.go b/pkg/mounter/safe_mounter_windows.go index 537fc9b899..9912628afb 100644 --- a/pkg/mounter/safe_mounter_windows.go +++ b/pkg/mounter/safe_mounter_windows.go @@ -371,17 +371,19 @@ func newCSIProxyMounter() (*csiProxyMounter, error) { }, nil } -func NewSafeMounter() (*mount.SafeFormatAndMount, error) { - csiProxyMounter, err := newCSIProxyMounter() - if err == nil { - klog.V(2).Infof("using CSIProxyMounterV1, %s", csiProxyMounter.GetAPIVersions()) - return &mount.SafeFormatAndMount{ - Interface: csiProxyMounter, - Exec: utilexec.New(), - }, nil +func NewSafeMounter(useCSIProxyGAInterface bool) (*mount.SafeFormatAndMount, error) { + if useCSIProxyGAInterface { + csiProxyMounter, err := newCSIProxyMounter() + if err == nil { + klog.V(2).Infof("using CSIProxyMounterV1, %s", csiProxyMounter.GetAPIVersions()) + return &mount.SafeFormatAndMount{ + Interface: csiProxyMounter, + Exec: utilexec.New(), + }, nil + } + klog.V(2).Infof("failed to connect to csi-proxy v1 with error: %v, will try with v1Beta", err) } - klog.V(2).Infof("failed to connect to csi-proxy v1 with error: %v, will try with v1Beta", err) csiProxyMounterV1Beta, err := newCSIProxyMounterV1Beta() if err == nil { klog.V(2).Infof("using CSIProxyMounterV1beta, %s", csiProxyMounterV1Beta.GetAPIVersions())