Skip to content

Commit b02b3b6

Browse files
authored
Merge pull request #1991 from andyzhangx/vnetlink-access-1.26
[release-1.26] feat: add VNetLinkName and PublicNetworkAccess in account creation
2 parents 473eaba + 8876c4e commit b02b3b6

File tree

5 files changed

+82
-1
lines changed

5 files changed

+82
-1
lines changed

pkg/blob/blob.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ const (
9494
storageAccountNameField = "storageaccountname"
9595
allowBlobPublicAccessField = "allowblobpublicaccess"
9696
allowSharedKeyAccessField = "allowsharedkeyaccess"
97+
publicNetworkAccessField = "publicnetworkaccess"
9798
requireInfraEncryptionField = "requireinfraencryption"
9899
ephemeralField = "csi.storage.k8s.io/ephemeral"
99100
podNamespaceField = "csi.storage.k8s.io/pod.namespace"
@@ -115,6 +116,7 @@ const (
115116
NFSv3 = "nfsv3"
116117
vnetResourceGroupField = "vnetresourcegroup"
117118
vnetNameField = "vnetname"
119+
vnetLinkNameField = "vnetlinkname"
118120
subnetNameField = "subnetname"
119121
accessTierField = "accesstier"
120122
networkEndpointTypeField = "networkendpointtype"
@@ -813,6 +815,18 @@ func isSupportedAccessTier(accessTier string) bool {
813815
return false
814816
}
815817

818+
func isSupportedPublicNetworkAccess(publicNetworkAccess string) bool {
819+
if publicNetworkAccess == "" {
820+
return true
821+
}
822+
for _, tier := range armstorage.PossiblePublicNetworkAccessValues() {
823+
if publicNetworkAccess == string(tier) {
824+
return true
825+
}
826+
}
827+
return false
828+
}
829+
816830
// container names can contain only lowercase letters, numbers, and hyphens,
817831
// and must begin and end with a letter or a number
818832
func isSupportedContainerNamePrefix(prefix string) bool {

pkg/blob/blob_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1966,3 +1966,34 @@ func TestParseServiceAccountToken(t *testing.T) {
19661966
t.Errorf("ParseServiceAccountToken(%s) = %s, want %s", saTokens, token, expectedToken)
19671967
}
19681968
}
1969+
1970+
func TestIsSupportedPublicNetworkAccess(t *testing.T) {
1971+
tests := []struct {
1972+
publicNetworkAccess string
1973+
expectedResult bool
1974+
}{
1975+
{
1976+
publicNetworkAccess: "",
1977+
expectedResult: true,
1978+
},
1979+
{
1980+
publicNetworkAccess: "Enabled",
1981+
expectedResult: true,
1982+
},
1983+
{
1984+
publicNetworkAccess: "Disabled",
1985+
expectedResult: true,
1986+
},
1987+
{
1988+
publicNetworkAccess: "InvalidValue",
1989+
expectedResult: false,
1990+
},
1991+
}
1992+
1993+
for _, test := range tests {
1994+
result := isSupportedPublicNetworkAccess(test.publicNetworkAccess)
1995+
if result != test.expectedResult {
1996+
t.Errorf("isSupportedPublicNetworkAccess(%s) returned %v, expected %v", test.publicNetworkAccess, result, test.expectedResult)
1997+
}
1998+
}
1999+
}

pkg/blob/controllerserver.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
9191
}
9292
var storageAccountType, subsID, resourceGroup, location, account, containerName, containerNamePrefix, protocol, customTags, secretName, secretNamespace, pvcNamespace, tagValueDelimiter string
9393
var isHnsEnabled, requireInfraEncryption, enableBlobVersioning, createPrivateEndpoint, enableNfsV3, allowSharedKeyAccess *bool
94-
var vnetResourceGroup, vnetName, subnetName, accessTier, networkEndpointType, storageEndpointSuffix, fsGroupChangePolicy, srcAccountName string
94+
var vnetResourceGroup, vnetName, vnetLinkName, publicNetworkAccess, subnetName, accessTier, networkEndpointType, storageEndpointSuffix, fsGroupChangePolicy, srcAccountName string
9595
var matchTags, useDataPlaneAPI, getLatestAccountKey bool
9696
var softDeleteBlobs, softDeleteContainers int32
9797
var vnetResourceIDs []string
@@ -164,6 +164,8 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
164164
if strings.EqualFold(v, trueValue) {
165165
allowBlobPublicAccess = ptr.To(true)
166166
}
167+
case publicNetworkAccessField:
168+
publicNetworkAccess = v
167169
case allowSharedKeyAccessField:
168170
var boolValue bool
169171
if boolValue, err = strconv.ParseBool(v); err != nil {
@@ -197,6 +199,8 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
197199
vnetResourceGroup = v
198200
case vnetNameField:
199201
vnetName = v
202+
case vnetLinkNameField:
203+
vnetLinkName = v
200204
case subnetNameField:
201205
subnetName = v
202206
case accessTierField:
@@ -256,6 +260,9 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
256260
if !isSupportedAccessTier(accessTier) {
257261
return nil, status.Errorf(codes.InvalidArgument, "accessTier(%s) is not supported, supported AccessTier list: %v", accessTier, armstorage.PossibleAccessTierValues())
258262
}
263+
if !isSupportedPublicNetworkAccess(publicNetworkAccess) {
264+
return nil, status.Errorf(codes.InvalidArgument, "publicNetworkAccess(%s) is not supported, supported PublicNetworkAccess list: %v", publicNetworkAccess, armstorage.PossiblePublicNetworkAccessValues())
265+
}
259266

260267
if containerName != "" && containerNamePrefix != "" {
261268
return nil, status.Errorf(codes.InvalidArgument, "containerName(%s) and containerNamePrefix(%s) could not be specified together", containerName, containerNamePrefix)
@@ -342,10 +349,12 @@ func (d *Driver) CreateVolume(ctx context.Context, req *csi.CreateVolumeRequest)
342349
IsHnsEnabled: isHnsEnabled,
343350
EnableNfsV3: enableNfsV3,
344351
AllowBlobPublicAccess: allowBlobPublicAccess,
352+
PublicNetworkAccess: publicNetworkAccess,
345353
AllowSharedKeyAccess: allowSharedKeyAccess,
346354
RequireInfrastructureEncryption: requireInfraEncryption,
347355
VNetResourceGroup: vnetResourceGroup,
348356
VNetName: vnetName,
357+
VNetLinkName: vnetLinkName,
349358
SubnetName: subnetName,
350359
AccessTier: accessTier,
351360
CreatePrivateEndpoint: createPrivateEndpoint,

pkg/blob/controllerserver_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,31 @@ func TestCreateVolume(t *testing.T) {
655655
}
656656
},
657657
},
658+
{
659+
name: "Failed with invalid PublicNetworkAccess",
660+
testFunc: func(t *testing.T) {
661+
d := NewFakeDriver()
662+
d.cloud = &storage.AccountRepo{}
663+
d.cloud.SubscriptionID = "subID"
664+
665+
mp := make(map[string]string)
666+
mp[publicNetworkAccessField] = "invalid"
667+
req := &csi.CreateVolumeRequest{
668+
Name: "unit-test",
669+
VolumeCapabilities: stdVolumeCapabilities,
670+
Parameters: mp,
671+
}
672+
d.Cap = []*csi.ControllerServiceCapability{
673+
controllerServiceCapability,
674+
}
675+
676+
expectedErr := status.Errorf(codes.InvalidArgument, "publicNetworkAccess(%s) is not supported, supported PublicNetworkAccess list: %v", "invalid", armstorage.PossiblePublicNetworkAccessValues())
677+
_, err := d.CreateVolume(context.Background(), req)
678+
if !reflect.DeepEqual(err, expectedErr) {
679+
t.Errorf("Unexpected error: %v\nExpected error: %v", err, expectedErr)
680+
}
681+
},
682+
},
658683
{
659684
name: "Failed with storeAccountKey is not supported for account with shared access key disabled",
660685
testFunc: func(t *testing.T) {
@@ -724,6 +749,7 @@ func TestCreateVolume(t *testing.T) {
724749
mp[resourceGroupField] = "unit-test"
725750
mp[containerNameField] = "unit-test"
726751
mp[mountPermissionsField] = "0750"
752+
mp[vnetLinkNameField] = "vnetlink"
727753
req := &csi.CreateVolumeRequest{
728754
Name: "unit-test",
729755
VolumeCapabilities: stdVolumeCapabilities,

test/e2e/dynamic_provisioning_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,7 @@ var _ = ginkgo.Describe("[blob-csi-e2e] Dynamic Provisioning", func() {
715715
StorageClassParameters: map[string]string{
716716
"skuName": "Standard_LRS",
717717
"networkEndpointType": "privateEndpoint",
718+
"publicNetworkAccess": "Disabled",
718719
},
719720
}
720721
test.Run(ctx, cs, ns)

0 commit comments

Comments
 (0)