github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/azure/eventhub.go (about)

     1  // Copyright 2021 The Terraformer Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package azure
    16  
    17  import (
    18  	"context"
    19  	"log"
    20  
    21  	"github.com/Azure/azure-sdk-for-go/services/eventhub/mgmt/2017-04-01/eventhub"
    22  )
    23  
    24  type EventHubGenerator struct {
    25  	AzureService
    26  }
    27  
    28  func (az *EventHubGenerator) listNamespaces() ([]eventhub.EHNamespace, error) {
    29  	subscriptionID, resourceGroup, authorizer := az.getClientArgs()
    30  	client := eventhub.NewNamespacesClient(subscriptionID)
    31  	client.Authorizer = authorizer
    32  	var (
    33  		iterator eventhub.EHNamespaceListResultIterator
    34  		err      error
    35  	)
    36  	ctx := context.Background()
    37  	if resourceGroup != "" {
    38  		iterator, err = client.ListByResourceGroupComplete(ctx, resourceGroup)
    39  	} else {
    40  		iterator, err = client.ListComplete(ctx)
    41  	}
    42  	if err != nil {
    43  		return nil, err
    44  	}
    45  	var resources []eventhub.EHNamespace
    46  	for iterator.NotDone() {
    47  		item := iterator.Value()
    48  		resources = append(resources, item)
    49  		if err := iterator.NextWithContext(ctx); err != nil {
    50  			log.Println(err)
    51  			return resources, err
    52  		}
    53  	}
    54  	return resources, nil
    55  }
    56  
    57  func (az *EventHubGenerator) AppendNamespace(namespace *eventhub.EHNamespace) {
    58  	az.AppendSimpleResource(*namespace.ID, *namespace.Name, "azurerm_eventhub_namespace")
    59  }
    60  
    61  func (az *EventHubGenerator) appendEventHubs(namespace *eventhub.EHNamespace, namespaceRg *ResourceID) error {
    62  	subscriptionID, _, authorizer := az.getClientArgs()
    63  	client := eventhub.NewEventHubsClient(subscriptionID)
    64  	client.Authorizer = authorizer
    65  	ctx := context.Background()
    66  	iterator, err := client.ListByNamespaceComplete(ctx, namespaceRg.ResourceGroup, *namespace.Name, nil, nil)
    67  	if err != nil {
    68  		return err
    69  	}
    70  	for iterator.NotDone() {
    71  		item := iterator.Value()
    72  
    73  		az.AppendSimpleResource(*item.ID, *item.Name, "azurerm_eventhub")
    74  		err = az.appendConsumerGroups(namespace, namespaceRg, *item.Name)
    75  		if err != nil {
    76  			return err
    77  		}
    78  		if err := iterator.NextWithContext(ctx); err != nil {
    79  			log.Println(err)
    80  			return err
    81  		}
    82  	}
    83  	return nil
    84  }
    85  
    86  func (az *EventHubGenerator) appendConsumerGroups(namespace *eventhub.EHNamespace, namespaceRg *ResourceID, eventHubName string) error {
    87  	subscriptionID, _, authorizer := az.getClientArgs()
    88  	client := eventhub.NewConsumerGroupsClient(subscriptionID)
    89  	client.Authorizer = authorizer
    90  	ctx := context.Background()
    91  	iterator, err := client.ListByEventHubComplete(ctx, namespaceRg.ResourceGroup, *namespace.Name, eventHubName, nil, nil)
    92  	if err != nil {
    93  		return err
    94  	}
    95  	for iterator.NotDone() {
    96  		item := iterator.Value()
    97  		az.AppendSimpleResource(*item.ID, *item.Name, "azurerm_eventhub_consumer_group")
    98  		if err := iterator.NextWithContext(ctx); err != nil {
    99  			log.Println(err)
   100  			return err
   101  		}
   102  	}
   103  	return nil
   104  }
   105  
   106  func (az *EventHubGenerator) appendAuthorizationRules(namespace *eventhub.EHNamespace, namespaceRg *ResourceID) error {
   107  	subscriptionID, _, authorizer := az.getClientArgs()
   108  	client := eventhub.NewNamespacesClient(subscriptionID)
   109  	client.Authorizer = authorizer
   110  	ctx := context.Background()
   111  	iterator, err := client.ListAuthorizationRulesComplete(ctx, namespaceRg.ResourceGroup, *namespace.Name)
   112  	if err != nil {
   113  		return err
   114  	}
   115  	for iterator.NotDone() {
   116  		item := iterator.Value()
   117  
   118  		az.AppendSimpleResource(*item.ID, *item.Name, "azurerm_eventhub_namespace_authorization_rule")
   119  		if err := iterator.NextWithContext(ctx); err != nil {
   120  			log.Println(err)
   121  			return err
   122  		}
   123  	}
   124  	return nil
   125  }
   126  
   127  func (az *EventHubGenerator) InitResources() error {
   128  
   129  	namespaces, err := az.listNamespaces()
   130  	if err != nil {
   131  		return err
   132  	}
   133  	for _, namespace := range namespaces {
   134  		az.AppendNamespace(&namespace)
   135  		namespaceRg, err := ParseAzureResourceID(*namespace.ID)
   136  		if err != nil {
   137  			return err
   138  		}
   139  		err = az.appendEventHubs(&namespace, namespaceRg)
   140  		if err != nil {
   141  			return err
   142  		}
   143  		err = az.appendAuthorizationRules(&namespace, namespaceRg)
   144  		if err != nil {
   145  			return err
   146  		}
   147  	}
   148  	return nil
   149  }