pkg/util/subnet/subnet.go (72 lines of code) (raw):
package subnet
// Copyright (c) Microsoft Corporation.
// Licensed under the Apache License 2.0.
import (
"context"
mgmtnetwork "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-08-01/network"
"github.com/Azure/go-autorest/autorest"
"github.com/Azure/go-autorest/autorest/azure"
apisubnet "github.com/Azure/ARO-RP/pkg/api/util/subnet"
"github.com/Azure/ARO-RP/pkg/util/azureclient"
"github.com/Azure/ARO-RP/pkg/util/azureclient/mgmt/network"
)
type Subnet struct {
ResourceID string
IsMaster bool
}
type Manager interface {
Get(ctx context.Context, subnetID string) (*mgmtnetwork.Subnet, error)
GetAll(ctx context.Context, subnetIds []string) ([]*mgmtnetwork.Subnet, error)
CreateOrUpdate(ctx context.Context, subnetID string, subnet *mgmtnetwork.Subnet) error
}
type manager struct {
subnets network.SubnetsClient
virtualNetworks network.VirtualNetworksClient
}
func NewManager(environment *azureclient.AROEnvironment, subscriptionID string, spAuthorizer autorest.Authorizer) Manager {
return &manager{
subnets: network.NewSubnetsClient(environment, subscriptionID, spAuthorizer),
virtualNetworks: network.NewVirtualNetworksClient(environment, subscriptionID, spAuthorizer),
}
}
// Get retrieves the linked subnet
func (m *manager) Get(ctx context.Context, subnetID string) (*mgmtnetwork.Subnet, error) {
return m.get(ctx, subnetID, "")
}
func (m *manager) get(ctx context.Context, subnetID, expand string) (*mgmtnetwork.Subnet, error) {
vnetID, subnetName, err := apisubnet.Split(subnetID)
if err != nil {
return nil, err
}
r, err := azure.ParseResourceID(vnetID)
if err != nil {
return nil, err
}
subnet, err := m.subnets.Get(ctx, r.ResourceGroup, r.ResourceName, subnetName, expand)
if err != nil {
return nil, err
}
return &subnet, nil
}
// CreateOrUpdate updates the linked subnet
func (m *manager) CreateOrUpdate(ctx context.Context, subnetID string, subnet *mgmtnetwork.Subnet) error {
vnetID, subnetName, err := apisubnet.Split(subnetID)
if err != nil {
return err
}
r, err := azure.ParseResourceID(vnetID)
if err != nil {
return err
}
return m.subnets.CreateOrUpdateAndWait(ctx, r.ResourceGroup, r.ResourceName, subnetName, *subnet)
}
func (m *manager) GetAll(ctx context.Context, subnetIds []string) ([]*mgmtnetwork.Subnet, error) {
if len(subnetIds) == 0 {
return nil, nil
}
subnets := make([]*mgmtnetwork.Subnet, len(subnetIds))
for i, subnetId := range subnetIds {
subnet, err := m.Get(ctx, subnetId)
if err != nil {
return nil, err
}
subnets[i] = subnet
}
return subnets, nil
}