Skip to content

Commit 6c0de4f

Browse files
authored
Merge pull request #426 from andyzhangx/nfs-dynamic
feat: NFSv3 account dynamic creation support
2 parents 3732fd9 + 665e2e4 commit 6c0de4f

File tree

10 files changed

+56
-50
lines changed

10 files changed

+56
-50
lines changed

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/Azure/azure-sdk-for-go v54.1.0+incompatible
77
github.com/Azure/go-autorest/autorest v0.11.17
88
github.com/Azure/go-autorest/autorest/adal v0.9.10
9+
github.com/Azure/go-autorest/autorest/to v0.2.0
910
github.com/container-storage-interface/spec v1.3.0
1011
github.com/golang/mock v1.4.4
1112
github.com/golang/protobuf v1.4.3
@@ -64,5 +65,5 @@ replace (
6465
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.21.0
6566
k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.21.0
6667
k8s.io/sample-controller => k8s.io/sample-controller v0.21.0
67-
sigs.k8s.io/cloud-provider-azure => sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210513142225-eef91820946e
68+
sigs.k8s.io/cloud-provider-azure => sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210514120805-954ffe971aa2
6869
)

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -968,8 +968,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
968968
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
969969
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15 h1:4uqm9Mv+w2MmBYD+F4qf/v6tDFUdPOk29C095RbU5mY=
970970
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
971-
sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210513142225-eef91820946e h1:WvfOGKrst2JID0oDjhmB0s9SVJbtzFPlLx4XvGtuFKI=
972-
sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210513142225-eef91820946e/go.mod h1:tVaahhbgqUi1GEIG9uKjAt/MgiLZCfqw9erMIvMK4dA=
971+
sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210514120805-954ffe971aa2 h1:KpUVClwCWX4weALkO2o/UzWRD0humOLgB0dW7o+SvOA=
972+
sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210514120805-954ffe971aa2/go.mod h1:tVaahhbgqUi1GEIG9uKjAt/MgiLZCfqw9erMIvMK4dA=
973973
sigs.k8s.io/kustomize/api v0.8.5/go.mod h1:M377apnKT5ZHJS++6H4rQoCHmWtt6qTpp3mbe7p6OLY=
974974
sigs.k8s.io/kustomize/cmd/config v0.9.7/go.mod h1:MvXCpHs77cfyxRmCNUQjIqCmZyYsbn5PyQpWiq44nW0=
975975
sigs.k8s.io/kustomize/kustomize/v4 v4.0.5/go.mod h1:C7rYla7sI8EnxHE/xEhRBSHMNfcL91fx0uKmUlUhrBk=

pkg/blob/blob.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ const (
8383

8484
// containerMaxSize is the max size of the blob container. See https://docs.microsoft.com/en-us/azure/storage/blobs/scalability-targets#scale-targets-for-blob-storage
8585
containerMaxSize = 100 * util.TiB
86+
87+
subnetTemplate = "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s/subnets/%s"
8688
)
8789

8890
var (
@@ -536,3 +538,18 @@ func (d *Driver) GetStorageAccesskeyFromSecret(accountName, secretNamespace stri
536538

537539
return string(secret.Data[defaultSecretAccountKey][:]), nil
538540
}
541+
542+
// getSubnetResourceID get default subnet resource ID from cloud provider config
543+
func (d *Driver) getSubnetResourceID() string {
544+
subsID := d.cloud.SubscriptionID
545+
if len(d.cloud.NetworkResourceSubscriptionID) > 0 {
546+
subsID = d.cloud.NetworkResourceSubscriptionID
547+
}
548+
549+
rg := d.cloud.ResourceGroup
550+
if len(d.cloud.VnetResourceGroup) > 0 {
551+
rg = d.cloud.VnetResourceGroup
552+
}
553+
554+
return fmt.Sprintf(subnetTemplate, subsID, rg, d.cloud.VnetName, d.cloud.SubnetName)
555+
}

pkg/blob/controllerserver.go

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2021-02-01/storage"
2828
azstorage "github.com/Azure/azure-sdk-for-go/storage"
29+
"github.com/Azure/go-autorest/autorest/to"
2930
"github.com/container-storage-interface/spec/lib/go/csi"
3031

3132
"k8s.io/apimachinery/pkg/util/wait"
@@ -111,16 +112,21 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
111112
}
112113

113114
enableHTTPSTrafficOnly := true
115+
accountKind := string(storage.KindStorageV2)
116+
var vnetResourceIDs []string
117+
var isHnsEnabled, enableNfsV3 *bool
114118
if protocol == nfs {
115-
if account == "" {
116-
return nil, status.Errorf(codes.InvalidArgument, "storage account must be specified when provisioning nfs file share")
117-
}
118119
enableHTTPSTrafficOnly = false
120+
isHnsEnabled = to.BoolPtr(true)
121+
enableNfsV3 = to.BoolPtr(true)
122+
// set VirtualNetworkResourceIDs for storage account firewall setting
123+
vnetResourceID := d.getSubnetResourceID()
124+
klog.V(2).Infof("set vnetResourceID(%s) for NFS protocol", vnetResourceID)
125+
vnetResourceIDs = []string{vnetResourceID}
119126
// NFS protocol does not need account key
120127
storeAccountKey = storeAccountKeyFalse
121128
}
122129

123-
accountKind := string(storage.KindStorageV2)
124130
if strings.HasPrefix(strings.ToLower(storageAccountType), "premium") {
125131
accountKind = string(storage.KindBlockBlobStorage)
126132
}
@@ -137,13 +143,16 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
137143
}
138144

139145
accountOptions := &azure.AccountOptions{
140-
Name: account,
141-
Type: storageAccountType,
142-
Kind: accountKind,
143-
ResourceGroup: resourceGroup,
144-
Location: location,
145-
EnableHTTPSTrafficOnly: enableHTTPSTrafficOnly,
146-
Tags: tags,
146+
Name: account,
147+
Type: storageAccountType,
148+
Kind: accountKind,
149+
ResourceGroup: resourceGroup,
150+
Location: location,
151+
EnableHTTPSTrafficOnly: enableHTTPSTrafficOnly,
152+
VirtualNetworkResourceIDs: vnetResourceIDs,
153+
Tags: tags,
154+
IsHnsEnabled: isHnsEnabled,
155+
EnableNfsV3: enableNfsV3,
147156
}
148157

149158
var accountKey string

pkg/blob/controllerserver_test.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -143,28 +143,6 @@ func TestCreateVolume(t *testing.T) {
143143
}
144144
},
145145
},
146-
{
147-
name: "storageacount empty while nfs",
148-
testFunc: func(t *testing.T) {
149-
d := NewFakeDriver()
150-
d.cloud = &azure.Cloud{}
151-
mp := make(map[string]string)
152-
mp["protocol"] = "nfs"
153-
req := &csi.CreateVolumeRequest{
154-
Name: "unit-test",
155-
VolumeCapabilities: stdVolumeCapabilities,
156-
Parameters: mp,
157-
}
158-
d.Cap = []*csi.ControllerServiceCapability{
159-
controllerServiceCapability,
160-
}
161-
_, err := d.CreateVolume(context.Background(), req)
162-
expectedErr := status.Errorf(codes.InvalidArgument, "storage account must be specified when provisioning nfs file share")
163-
if !reflect.DeepEqual(err, expectedErr) {
164-
t.Errorf("actualErr: (%v), expectedErr: (%v)", err, expectedErr)
165-
}
166-
},
167-
},
168146
{
169147
name: "tags error",
170148
testFunc: func(t *testing.T) {

vendor/modules.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ github.com/Azure/go-autorest/autorest/date
2323
# github.com/Azure/go-autorest/autorest/mocks v0.4.1
2424
github.com/Azure/go-autorest/autorest/mocks
2525
# github.com/Azure/go-autorest/autorest/to v0.2.0
26+
## explicit
2627
github.com/Azure/go-autorest/autorest/to
2728
# github.com/Azure/go-autorest/autorest/validation v0.1.0
2829
github.com/Azure/go-autorest/autorest/validation
@@ -901,7 +902,7 @@ k8s.io/utils/trace
901902
# sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15
902903
sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client
903904
sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client
904-
# sigs.k8s.io/cloud-provider-azure v0.7.4 => sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210513142225-eef91820946e
905+
# sigs.k8s.io/cloud-provider-azure v0.7.4 => sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210514120805-954ffe971aa2
905906
## explicit
906907
sigs.k8s.io/cloud-provider-azure/pkg/auth
907908
sigs.k8s.io/cloud-provider-azure/pkg/azureclients
@@ -982,4 +983,4 @@ sigs.k8s.io/yaml
982983
# k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.21.0
983984
# k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.21.0
984985
# k8s.io/sample-controller => k8s.io/sample-controller v0.21.0
985-
# sigs.k8s.io/cloud-provider-azure => sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210513142225-eef91820946e
986+
# sigs.k8s.io/cloud-provider-azure => sigs.k8s.io/cloud-provider-azure v0.7.4-0.20210514120805-954ffe971aa2

vendor/sigs.k8s.io/cloud-provider-azure/pkg/consts/consts.go

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_loadbalancer.go

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_storageaccount.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/sigs.k8s.io/cloud-provider-azure/pkg/provider/azure_vmss.go

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)