providers/azure/network_security_group.go (77 lines of code) (raw):
// Copyright 2021 The Terraformer Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package azure
import (
"context"
"log"
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-03-01/network"
)
type NetworkSecurityGroupGenerator struct {
AzureService
}
func (az *NetworkSecurityGroupGenerator) listResources() ([]network.SecurityGroup, error) {
subscriptionID, resourceGroup, authorizer, resourceManagerEndpoint := az.getClientArgs()
client := network.NewSecurityGroupsClientWithBaseURI(resourceManagerEndpoint, subscriptionID)
client.Authorizer = authorizer
var (
iterator network.SecurityGroupListResultIterator
err error
)
ctx := context.Background()
if resourceGroup != "" {
iterator, err = client.ListComplete(ctx, resourceGroup)
} else {
iterator, err = client.ListAllComplete(ctx)
}
if err != nil {
return nil, err
}
var resources []network.SecurityGroup
for iterator.NotDone() {
item := iterator.Value()
resources = append(resources, item)
if err := iterator.NextWithContext(ctx); err != nil {
log.Println(err)
return resources, err
}
}
return resources, nil
}
func (az *NetworkSecurityGroupGenerator) appendResource(resource *network.SecurityGroup) {
az.AppendSimpleResourceWithDuplicateCheck(*resource.ID, *resource.Name, "azurerm_network_security_group")
}
func (az *NetworkSecurityGroupGenerator) appendRules(parent *network.SecurityGroup, resourceGroupID *ResourceID) error {
subscriptionID, _, authorizer, resourceManagerEndpoint := az.getClientArgs()
client := network.NewSecurityRulesClientWithBaseURI(resourceManagerEndpoint, subscriptionID)
client.Authorizer = authorizer
ctx := context.Background()
iterator, err := client.ListComplete(ctx, resourceGroupID.ResourceGroup, *parent.Name)
if err != nil {
return err
}
for iterator.NotDone() {
item := iterator.Value()
az.AppendSimpleResourceWithDuplicateCheck(*item.ID, *item.Name, "azurerm_network_security_rule")
if err := iterator.NextWithContext(ctx); err != nil {
log.Println(err)
return err
}
}
return nil
}
func (az *NetworkSecurityGroupGenerator) InitResources() error {
resources, err := az.listResources()
if err != nil {
return err
}
for _, resource := range resources {
az.appendResource(&resource)
resourceGroupID, err := ParseAzureResourceID(*resource.ID)
if err != nil {
return err
}
err = az.appendRules(&resource, resourceGroupID)
if err != nil {
return err
}
}
return nil
}