Skip to content

Commit

Permalink
fix: support PrivateDNSZone in sovereign cloud
Browse files Browse the repository at this point in the history
fix
  • Loading branch information
andyzhangx committed Dec 16, 2022
1 parent 8b84d01 commit 627cdd6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 15 deletions.
32 changes: 18 additions & 14 deletions pkg/provider/azure_storageaccount.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import (
const SkipMatchingTag = "skip-matching"
const LocationGlobal = "global"
const GroupIDFile = "file"
const PrivateDNSZoneName = "privatelink.file.core.windows.net"
const privateDNSZonePrefix = "privatelink.file."

// AccountOptions contains the fields which are used to create storage account.
type AccountOptions struct {
Expand Down Expand Up @@ -205,20 +205,21 @@ func (az *Cloud) EnsureStorageAccount(ctx context.Context, accountOptions *Accou
}

if accountOptions.CreatePrivateEndpoint {
if _, err := az.privatednsclient.Get(ctx, vnetResourceGroup, PrivateDNSZoneName); err != nil {
klog.V(2).Infof("get private dns zone %s returned with %v", PrivateDNSZoneName, err.Error())
privateDNSZoneName := privateDNSZonePrefix + az.cloud.Environment.StorageEndpointSuffix
if _, err := az.privatednsclient.Get(ctx, vnetResourceGroup, privateDNSZoneName); err != nil {
klog.V(2).Infof("get private dns zone %s returned with %v", privateDNSZoneName, err.Error())
// Create DNS zone first, this could make sure driver has write permission on vnetResourceGroup
if err := az.createPrivateDNSZone(ctx, vnetResourceGroup); err != nil {
return "", "", fmt.Errorf("create private DNS zone(%s) in resourceGroup(%s): %w", PrivateDNSZoneName, vnetResourceGroup, err)
return "", "", fmt.Errorf("create private DNS zone(%s) in resourceGroup(%s): %w", privateDNSZoneName, vnetResourceGroup, err)
}
}

// Create virtual link to the private DNS zone
vNetLinkName := accountName + "-vnetlink"
if _, err := az.virtualNetworkLinksClient.Get(ctx, vnetResourceGroup, PrivateDNSZoneName, vNetLinkName); err != nil {
klog.V(2).Infof("get virtual link for vnet(%s) and DNS Zone(%s) returned with %v", vnetName, PrivateDNSZoneName, err.Error())
if _, err := az.virtualNetworkLinksClient.Get(ctx, vnetResourceGroup, privateDNSZoneName, vNetLinkName); err != nil {
klog.V(2).Infof("get virtual link for vnet(%s) and DNS Zone(%s) returned with %v", vnetName, privateDNSZoneName, err.Error())
if err := az.createVNetLink(ctx, vNetLinkName, vnetResourceGroup, vnetName); err != nil {
return "", "", fmt.Errorf("create virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s): %w", vnetName, PrivateDNSZoneName, vnetResourceGroup, err)
return "", "", fmt.Errorf("create virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s): %w", vnetName, privateDNSZoneName, vnetResourceGroup, err)
}
}
}
Expand Down Expand Up @@ -418,12 +419,13 @@ func (az *Cloud) createPrivateEndpoint(ctx context.Context, accountName string,
}

func (az *Cloud) createPrivateDNSZone(ctx context.Context, vnetResourceGroup string) error {
klog.V(2).Infof("Creating private dns zone(%s) in resourceGroup (%s)", PrivateDNSZoneName, vnetResourceGroup)
privateDNSZoneName := privateDNSZonePrefix + az.cloud.Environment.StorageEndpointSuffix
klog.V(2).Infof("Creating private dns zone(%s) in resourceGroup (%s)", privateDNSZoneName, vnetResourceGroup)
location := LocationGlobal
privateDNSZone := privatedns.PrivateZone{Location: &location}
if err := az.privatednsclient.CreateOrUpdate(ctx, vnetResourceGroup, PrivateDNSZoneName, privateDNSZone, "", true); err != nil {
if err := az.privatednsclient.CreateOrUpdate(ctx, vnetResourceGroup, privateDNSZoneName, privateDNSZone, "", true); err != nil {
if strings.Contains(err.Error().Error(), "exists already") {
klog.V(2).Infof("private dns zone(%s) in resourceGroup (%s) already exists", PrivateDNSZoneName, vnetResourceGroup)
klog.V(2).Infof("private dns zone(%s) in resourceGroup (%s) already exists", privateDNSZoneName, vnetResourceGroup)
return nil
}
return err.Error()
Expand All @@ -432,7 +434,8 @@ func (az *Cloud) createPrivateDNSZone(ctx context.Context, vnetResourceGroup str
}

func (az *Cloud) createVNetLink(ctx context.Context, vNetLinkName, vnetResourceGroup, vnetName string) error {
klog.V(2).Infof("Creating virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s)", vNetLinkName, PrivateDNSZoneName, vnetResourceGroup)
privateDNSZoneName := privateDNSZonePrefix + az.cloud.Environment.StorageEndpointSuffix
klog.V(2).Infof("Creating virtual link for vnet(%s) and DNS Zone(%s) in resourceGroup(%s)", vNetLinkName, privateDNSZoneName, vnetResourceGroup)
location := LocationGlobal
vnetID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s", az.SubscriptionID, vnetResourceGroup, vnetName)
parameters := privatedns.VirtualNetworkLink{
Expand All @@ -441,13 +444,14 @@ func (az *Cloud) createVNetLink(ctx context.Context, vNetLinkName, vnetResourceG
VirtualNetwork: &privatedns.SubResource{ID: &vnetID},
RegistrationEnabled: to.BoolPtr(true)},
}
return az.virtualNetworkLinksClient.CreateOrUpdate(ctx, vnetResourceGroup, PrivateDNSZoneName, vNetLinkName, parameters, "", false).Error()
return az.virtualNetworkLinksClient.CreateOrUpdate(ctx, vnetResourceGroup, privateDNSZoneName, vNetLinkName, parameters, "", false).Error()
}

func (az *Cloud) createPrivateDNSZoneGroup(ctx context.Context, dnsZoneGroupName, privateEndpointName, vnetResourceGroup, vnetName string) error {
klog.V(2).Infof("Creating private DNS zone group(%s) with privateEndpoint(%s), vNetName(%s), resourceGroup(%s)", dnsZoneGroupName, privateEndpointName, vnetName, vnetResourceGroup)
privateDNSZoneID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/privateDnsZones/%s", az.SubscriptionID, vnetResourceGroup, PrivateDNSZoneName)
dnsZoneName := PrivateDNSZoneName
privateDNSZoneName := privateDNSZonePrefix + az.cloud.Environment.StorageEndpointSuffix
privateDNSZoneID := fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/privateDnsZones/%s", az.SubscriptionID, vnetResourceGroup, privateDNSZoneName)
dnsZoneName := privateDNSZoneName
privateDNSZoneConfig := network.PrivateDNSZoneConfig{
Name: &dnsZoneName,
PrivateDNSZonePropertiesFormat: &network.PrivateDNSZonePropertiesFormat{
Expand Down
2 changes: 1 addition & 1 deletion pkg/provider/azure_storageaccount_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ func TestEnsureStorageAccount(t *testing.T) {
subnetName := "SubnetName"
location := TestLocation

cloud := &Cloud{}
cloud := GetTestCloud(ctrl)
cloud.ResourceGroup = resourceGroup
cloud.VnetResourceGroup = vnetResourceGroup
cloud.VnetName = vnetName
Expand Down

0 comments on commit 627cdd6

Please sign in to comment.