@@ -38,7 +38,6 @@ const (
3838 virtualMachineScaleSetsList = "VirtualMachineScaleSets.List"
3939 virtualMachineScaleSetVMsGet = "VirtualMachineScaleSetVMs.Get"
4040 virtualMachineScaleSetVMsUpdate = "VirtualMachineScaleSetVMs.Update"
41- virtualNetworksListAll = "VirtualNetworks.ListAll"
4241 subnetsGet = "Subnets.Get"
4342
4443 interfacesListVirtualMachineScaleSetNetworkInterfaces = "Interfaces.ListVirtualMachineScaleSetNetworkInterfaces"
@@ -52,7 +51,6 @@ type Client struct {
5251 resourceGroup string
5352 interfaces * armnetwork.InterfacesClient
5453 publicIPPrefixes * armnetwork.PublicIPPrefixesClient
55- virtualNetworks * armnetwork.VirtualNetworksClient
5654 virtualMachines * armcompute.VirtualMachinesClient
5755 subnets * armnetwork.SubnetsClient
5856 virtualMachineScaleSetVMs * armcompute.VirtualMachineScaleSetVMsClient
@@ -132,11 +130,6 @@ func NewClient(logger *slog.Logger, cloudName, subscriptionID, resourceGroup, us
132130 return nil , err
133131 }
134132
135- virtualNetworksClient , err := armnetwork .NewVirtualNetworksClient (subscriptionID , credential , armClientOptions )
136- if err != nil {
137- return nil , err
138- }
139-
140133 virtualMachinesClient , err := armcompute .NewVirtualMachinesClient (subscriptionID , credential , armClientOptions )
141134 if err != nil {
142135 return nil , err
@@ -168,7 +161,6 @@ func NewClient(logger *slog.Logger, cloudName, subscriptionID, resourceGroup, us
168161 resourceGroup : resourceGroup ,
169162 interfaces : interfacesClient ,
170163 publicIPPrefixes : publicIPPrefixesClient ,
171- virtualNetworks : virtualNetworksClient ,
172164 virtualMachines : virtualMachinesClient ,
173165 subnets : subnetsClient ,
174166 virtualMachineScaleSetVMs : virtualMachineScaleSetVMsClient ,
@@ -446,96 +438,13 @@ func (c *Client) ParseInterfacesIntoInstance(networkInterfaces []*armnetwork.Int
446438 return & instance
447439}
448440
449- // listAllVPCs lists all VPCs
450- func (c * Client ) listAllVPCs (ctx context.Context ) (vpcs []* armnetwork.VirtualNetwork , err error ) {
451- c .limiter .Limit (ctx , virtualNetworksListAll )
452- sinceStart := spanstat .Start ()
453-
454- // Note: lists all VPCs, not just those in c.resourcegroup
455- pager := c .virtualNetworks .NewListAllPager (nil )
456-
457- defer func () {
458- c .metricsAPI .ObserveAPICall (virtualNetworksListAll , deriveStatus (err ), sinceStart .Seconds ())
459- }()
460-
461- for pager .More () {
462- nextResult , err := pager .NextPage (ctx )
463- if err != nil {
464- return nil , err
465- }
466- vpcs = append (vpcs , nextResult .Value ... )
467- }
468-
469- return vpcs , nil
470- }
471-
472- func parseSubnet (subnet * armnetwork.Subnet ) (s * ipamTypes.Subnet ) {
473- s = & ipamTypes.Subnet {ID : * subnet .ID }
474- if subnet .Name != nil {
475- s .Name = * subnet .Name
476- }
477-
478- if subnet .Properties .AddressPrefix != nil {
479- cidr , err := netip .ParsePrefix (* subnet .Properties .AddressPrefix )
480- if err != nil {
481- return nil
482- }
483- s .CIDR = cidr
484- if subnet .Properties .IPConfigurations != nil {
485- s .AvailableAddresses = availableIPs (cidr ) - len (subnet .Properties .IPConfigurations )
486- } else {
487- // Azure currently returns nil for subnet IPConfigs if the subnet has a large number of existing IPConfigs.
488- // API / SDK is supposed to return a IpConfigurationsNextLink which can be used to make an additional
489- // call to get all IPConfigs. This field however seems to be missing from the API spec.
490- // Since we cannot fall back to other subnets anyway, assume all IPs are available.
491- // TODO: Update this once azure-sdk-for-go supports ipConfigurationsNextLink
492- s .AvailableAddresses = availableIPs (cidr )
493- }
494- }
495-
496- return
497- }
498-
499441// availableIPs returns the number of IPs available in a CIDR
500442func availableIPs (p netip.Prefix ) int {
501443 ones := p .Bits ()
502444 bits := p .Addr ().BitLen ()
503445 return 1 << (bits - ones )
504446}
505447
506- // GetVpcsAndSubnets retrieves and returns all Vpcs
507- func (c * Client ) GetVpcsAndSubnets (ctx context.Context ) (ipamTypes.VirtualNetworkMap , ipamTypes.SubnetMap , error ) {
508- vpcs := ipamTypes.VirtualNetworkMap {}
509- subnets := ipamTypes.SubnetMap {}
510-
511- vpcList , err := c .listAllVPCs (ctx )
512- if err != nil {
513- return nil , nil , err
514- }
515-
516- for _ , v := range vpcList {
517- if v .ID == nil {
518- continue
519- }
520-
521- vpc := & ipamTypes.VirtualNetwork {ID : * v .ID }
522- vpcs [vpc .ID ] = vpc
523-
524- if v .Properties .Subnets != nil {
525- for _ , subnet := range v .Properties .Subnets {
526- if subnet .ID == nil {
527- continue
528- }
529- if s := parseSubnet (subnet ); s != nil {
530- subnets [* subnet .ID ] = s
531- }
532- }
533- }
534- }
535-
536- return vpcs , subnets , nil
537- }
538-
539448// parseSubnetID extracts resource group, virtual network, and subnet names from an Azure subnet ID.
540449// Expected format: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}
541450// Uses arm.ParseResourceID from the Azure SDK for robust parsing.
0 commit comments