Skip to content

Commit

Permalink
azure: Move ID parsing from azuretasks to azure utils
Browse files Browse the repository at this point in the history
  • Loading branch information
hakman committed Jul 11, 2023
1 parent 344d5b3 commit 704daec
Show file tree
Hide file tree
Showing 5 changed files with 132 additions and 133 deletions.
9 changes: 4 additions & 5 deletions pkg/resources/azure/azure.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import (
"k8s.io/kops/pkg/resources"
"k8s.io/kops/upup/pkg/fi"
"k8s.io/kops/upup/pkg/fi/cloudup/azure"
"k8s.io/kops/upup/pkg/fi/cloudup/azuretasks"
)

const (
Expand Down Expand Up @@ -173,7 +172,7 @@ func (g *resourceGetter) toVirtualNetworkResource(vnet *network.VirtualNetwork)
if vnet.Subnets != nil {
for _, sn := range *vnet.Subnets {
if sn.NetworkSecurityGroup != nil {
nsgID, err := azuretasks.ParseNetworkSecurityGroupID(*sn.NetworkSecurityGroup.ID)
nsgID, err := azure.ParseNetworkSecurityGroupID(*sn.NetworkSecurityGroup.ID)
if err != nil {
return nil, fmt.Errorf("parsing network security group ID: %s", err)
}
Expand Down Expand Up @@ -347,15 +346,15 @@ func (g *resourceGetter) toVMScaleSetResource(vmss *compute.VirtualMachineScaleS
lbs := map[string]struct{}{}
for _, iface := range *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations {
for _, ip := range *iface.IPConfigurations {
subnetID, err := azuretasks.ParseSubnetID(*ip.Subnet.ID)
subnetID, err := azure.ParseSubnetID(*ip.Subnet.ID)
if err != nil {
return nil, fmt.Errorf("error on parsing subnet ID: %s", err)
}
vnets[subnetID.VirtualNetworkName] = struct{}{}
subnets[subnetID.SubnetName] = struct{}{}
if ip.LoadBalancerBackendAddressPools != nil {
for _, lb := range *ip.LoadBalancerBackendAddressPools {
lbID, err := azuretasks.ParseLoadBalancerID(*lb.ID)
lbID, err := azure.ParseLoadBalancerID(*lb.ID)
if err != nil {
return nil, fmt.Errorf("parsing load balancer ID: %s", err)
}
Expand Down Expand Up @@ -501,7 +500,7 @@ func (g *resourceGetter) toLoadBalancerResource(loadBalancer *network.LoadBalanc
if loadBalancer.FrontendIPConfigurations != nil {
for _, fip := range *loadBalancer.FrontendIPConfigurations {
if fip.PublicIPAddress != nil {
pipID, err := azuretasks.ParsePublicIPAddressID(*fip.PublicIPAddress.ID)
pipID, err := azure.ParsePublicIPAddressID(*fip.PublicIPAddress.ID)
if err != nil {
return nil, fmt.Errorf("parsing public IP address ID: %s", err)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/resources/azure/azure_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func TestListResourcesAzure(t *testing.T) {
}

vmsses := cloud.VMScaleSetsClient.VMSSes
subnetID := azuretasks.SubnetID{
subnetID := azure.SubnetID{
SubscriptionID: "sid",
ResourceGroupName: rgName,
VirtualNetworkName: vnetName,
Expand Down
116 changes: 116 additions & 0 deletions upup/pkg/fi/cloudup/azure/azure_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,119 @@ func ZoneToAvailabilityZoneNumber(zone string) (string, error) {
}
return l[1], nil
}

// SubnetID contains the resource ID/names required to construct a subnet ID.
type SubnetID struct {
SubscriptionID string
ResourceGroupName string
VirtualNetworkName string
SubnetName string
}

// String returns the subnet ID in the path format.
func (s *SubnetID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s/subnets/%s",
s.SubscriptionID,
s.ResourceGroupName,
s.VirtualNetworkName,
s.SubnetName)
}

// ParseSubnetID parses a given subnet ID string and returns a SubnetID.
func ParseSubnetID(s string) (*SubnetID, error) {
l := strings.Split(s, "/")
if len(l) != 11 {
return nil, fmt.Errorf("malformed format of subnet ID: %s, %d", s, len(l))
}
return &SubnetID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
VirtualNetworkName: l[8],
SubnetName: l[10],
}, nil
}

// NetworkSecurityGroupID contains the resource ID/names required to construct a NetworkSecurityGroup ID.
type NetworkSecurityGroupID struct {
SubscriptionID string
ResourceGroupName string
NetworkSecurityGroupName string
}

// String returns the NetworkSecurityGroup ID in the path format.
func (s *NetworkSecurityGroupID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/networkSecurityGroups/%s",
s.SubscriptionID,
s.ResourceGroupName,
s.NetworkSecurityGroupName)
}

// ParseNetworkSecurityGroupID parses a given NetworkSecurityGroup ID string and returns a NetworkSecurityGroup ID.
func ParseNetworkSecurityGroupID(s string) (*NetworkSecurityGroupID, error) {
l := strings.Split(s, "/")
if len(l) != 9 {
return nil, fmt.Errorf("malformed format of NetworkSecurityGroup ID: %s, %d", s, len(l))
}
return &NetworkSecurityGroupID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
NetworkSecurityGroupName: l[8],
}, nil
}

// LoadBalancerID contains the resource ID/names required to construct a load balancer ID.
type LoadBalancerID struct {
SubscriptionID string
ResourceGroupName string
LoadBalancerName string
}

// String returns the load balancer ID in the path format.
func (lb *LoadBalancerID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/loadbalancers/%s/backendAddressPools/LoadBalancerBackEnd",
lb.SubscriptionID,
lb.ResourceGroupName,
lb.LoadBalancerName,
)
}

// ParseLoadBalancerID parses a given load balancer ID string and returns a LoadBalancerID.
func ParseLoadBalancerID(lb string) (*LoadBalancerID, error) {
l := strings.Split(lb, "/")
if len(l) != 11 {
return nil, fmt.Errorf("malformed format of loadbalancer ID: %s, %d", lb, len(l))
}
return &LoadBalancerID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
LoadBalancerName: l[8],
}, nil
}

// PublicIPAddressID contains the resource ID/names required to construct a PublicIPAddress ID.
type PublicIPAddressID struct {
SubscriptionID string
ResourceGroupName string
PublicIPAddressName string
}

// String returns the PublicIPAddress ID in the path format.
func (s *PublicIPAddressID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/publicIPAddresss/%s",
s.SubscriptionID,
s.ResourceGroupName,
s.PublicIPAddressName)
}

// ParsePublicIPAddressID parses a given PublicIPAddress ID string and returns a PublicIPAddress ID.
func ParsePublicIPAddressID(s string) (*PublicIPAddressID, error) {
l := strings.Split(s, "/")
if len(l) != 9 {
return nil, fmt.Errorf("malformed format of PublicIPAddress ID: %s, %d", s, len(l))
}
return &PublicIPAddressID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
PublicIPAddressName: l[8],
}, nil
}
126 changes: 5 additions & 121 deletions upup/pkg/fi/cloudup/azuretasks/vmscaleset.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,122 +29,6 @@ import (
"k8s.io/kops/upup/pkg/fi/cloudup/azure"
)

// SubnetID contains the resource ID/names required to construct a subnet ID.
type SubnetID struct {
SubscriptionID string
ResourceGroupName string
VirtualNetworkName string
SubnetName string
}

// String returns the subnet ID in the path format.
func (s *SubnetID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s/subnets/%s",
s.SubscriptionID,
s.ResourceGroupName,
s.VirtualNetworkName,
s.SubnetName)
}

// ParseSubnetID parses a given subnet ID string and returns a SubnetID.
func ParseSubnetID(s string) (*SubnetID, error) {
l := strings.Split(s, "/")
if len(l) != 11 {
return nil, fmt.Errorf("malformed format of subnet ID: %s, %d", s, len(l))
}
return &SubnetID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
VirtualNetworkName: l[8],
SubnetName: l[10],
}, nil
}

// NetworkSecurityGroupID contains the resource ID/names required to construct a NetworkSecurityGroup ID.
type NetworkSecurityGroupID struct {
SubscriptionID string
ResourceGroupName string
NetworkSecurityGroupName string
}

// String returns the NetworkSecurityGroup ID in the path format.
func (s *NetworkSecurityGroupID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/networkSecurityGroups/%s",
s.SubscriptionID,
s.ResourceGroupName,
s.NetworkSecurityGroupName)
}

// ParseNetworkSecurityGroupID parses a given NetworkSecurityGroup ID string and returns a NetworkSecurityGroup ID.
func ParseNetworkSecurityGroupID(s string) (*NetworkSecurityGroupID, error) {
l := strings.Split(s, "/")
if len(l) != 9 {
return nil, fmt.Errorf("malformed format of NetworkSecurityGroup ID: %s, %d", s, len(l))
}
return &NetworkSecurityGroupID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
NetworkSecurityGroupName: l[8],
}, nil
}

// loadBalancerID contains the resource ID/names required to construct a loadbalancer ID.
type loadBalancerID struct {
SubscriptionID string
ResourceGroupName string
LoadBalancerName string
}

// String returns the loadbalancer ID in the path format.
func (lb *loadBalancerID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/loadbalancers/%s/backendAddressPools/LoadBalancerBackEnd",
lb.SubscriptionID,
lb.ResourceGroupName,
lb.LoadBalancerName,
)
}

// ParseLoadBalancerID parses a given loadbalancer ID string and returns a loadBalancerID.
func ParseLoadBalancerID(lb string) (*loadBalancerID, error) {
l := strings.Split(lb, "/")
if len(l) != 11 {
return nil, fmt.Errorf("malformed format of loadbalancer ID: %s, %d", lb, len(l))
}
return &loadBalancerID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
LoadBalancerName: l[8],
}, nil
}

// PublicIPAddressID contains the resource ID/names required to construct a PublicIPAddress ID.
type PublicIPAddressID struct {
SubscriptionID string
ResourceGroupName string
PublicIPAddressName string
}

// String returns the PublicIPAddress ID in the path format.
func (s *PublicIPAddressID) String() string {
return fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/publicIPAddresss/%s",
s.SubscriptionID,
s.ResourceGroupName,
s.PublicIPAddressName)
}

// ParsePublicIPAddressID parses a given PublicIPAddress ID string and returns a PublicIPAddress ID.
func ParsePublicIPAddressID(s string) (*PublicIPAddressID, error) {
l := strings.Split(s, "/")
if len(l) != 9 {
return nil, fmt.Errorf("malformed format of PublicIPAddress ID: %s, %d", s, len(l))
}
return &PublicIPAddressID{
SubscriptionID: l[2],
ResourceGroupName: l[4],
PublicIPAddressName: l[8],
}, nil
}

// VMScaleSet is an Azure VM Scale Set.
// +kops:fitask
type VMScaleSet struct {
Expand Down Expand Up @@ -229,18 +113,18 @@ func (s *VMScaleSet) Find(c *fi.CloudupContext) (*VMScaleSet, error) {
return nil, fmt.Errorf("unexpected number of IP configs found for VM ScaleSet %s: %d", *s.Name, len(ipConfigs))
}
ipConfig := ipConfigs[0]
subnetID, err := ParseSubnetID(*ipConfig.Subnet.ID)
subnetID, err := azure.ParseSubnetID(*ipConfig.Subnet.ID)
if err != nil {
return nil, fmt.Errorf("failed to parse subnet ID %s", *ipConfig.Subnet.ID)
}

var loadBalancerID *loadBalancerID
var loadBalancerID *azure.LoadBalancerID
if ipConfig.LoadBalancerBackendAddressPools != nil {
for _, i := range *ipConfig.LoadBalancerBackendAddressPools {
if !strings.Contains(*i.ID, "api") {
continue
}
loadBalancerID, err = ParseLoadBalancerID(*i.ID)
loadBalancerID, err = azure.ParseLoadBalancerID(*i.ID)
if err != nil {
return nil, fmt.Errorf("failed to parse loadbalancer ID %s", *ipConfig.Subnet.ID)
}
Expand Down Expand Up @@ -357,7 +241,7 @@ func (s *VMScaleSet) RenderAzure(t *azure.AzureAPITarget, a, e, changes *VMScale
},
}

subnetID := SubnetID{
subnetID := azure.SubnetID{
SubscriptionID: t.Cloud.SubscriptionID(),
ResourceGroupName: *e.ResourceGroup.Name,
VirtualNetworkName: *e.VirtualNetwork.Name,
Expand All @@ -379,7 +263,7 @@ func (s *VMScaleSet) RenderAzure(t *azure.AzureAPITarget, a, e, changes *VMScale
}
}
if e.LoadBalancer != nil {
loadBalancerID := loadBalancerID{
loadBalancerID := azure.LoadBalancerID{
SubscriptionID: t.Cloud.SubscriptionID(),
ResourceGroupName: *e.ResourceGroup.Name,
LoadBalancerName: *e.LoadBalancer.Name,
Expand Down
12 changes: 6 additions & 6 deletions upup/pkg/fi/cloudup/azuretasks/vmscaleset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ import (
)

func TestSubnetIDParse(t *testing.T) {
subnetID := &SubnetID{
subnetID := &azure.SubnetID{
SubscriptionID: "sid",
ResourceGroupName: "rg",
VirtualNetworkName: "vnet",
SubnetName: "sub",
}
actual, err := ParseSubnetID(subnetID.String())
actual, err := azure.ParseSubnetID(subnetID.String())
if err != nil {
t.Fatalf("unexpected error %s", err)
}
Expand All @@ -47,12 +47,12 @@ func TestSubnetIDParse(t *testing.T) {
}

func TestLoadBalancerIDParse(t *testing.T) {
loadBalancerID := &loadBalancerID{
loadBalancerID := &azure.LoadBalancerID{
SubscriptionID: "sid",
ResourceGroupName: "rg",
LoadBalancerName: "lb",
}
actual, err := ParseLoadBalancerID(loadBalancerID.String())
actual, err := azure.ParseLoadBalancerID(loadBalancerID.String())
if err != nil {
t.Fatalf("unexpected error %s", err)
}
Expand Down Expand Up @@ -193,13 +193,13 @@ func TestVMScaleSetFind(t *testing.T) {
Caching: compute.CachingTypes(compute.HostCachingReadWrite),
},
}
subnetID := SubnetID{
subnetID := azure.SubnetID{
SubscriptionID: "subID",
ResourceGroupName: *rg.Name,
VirtualNetworkName: "vnet",
SubnetName: "sub",
}
loadBalancerID := loadBalancerID{
loadBalancerID := azure.LoadBalancerID{
SubscriptionID: "subID",
ResourceGroupName: *rg.Name,
LoadBalancerName: "api-lb",
Expand Down

0 comments on commit 704daec

Please sign in to comment.