github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/azure/synapse.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/preview/synapse/2019-06-01-preview/managedvirtualnetwork"
    22  	"github.com/Azure/azure-sdk-for-go/services/synapse/mgmt/2020-12-01/synapse"
    23  	// "github.com/Azure/azure-sdk-for-go/services/preview/synapse/2020-08-01-preview/accesscontrol"
    24  )
    25  
    26  type SynapseGenerator struct {
    27  	AzureService
    28  }
    29  
    30  func (az *SynapseGenerator) listWorkspaces() ([]synapse.Workspace, error) {
    31  	subscriptionID, resourceGroup, authorizer := az.getClientArgs()
    32  	client := synapse.NewWorkspacesClient(subscriptionID)
    33  	client.Authorizer = authorizer
    34  	var (
    35  		iterator synapse.WorkspaceInfoListResultIterator
    36  		err      error
    37  	)
    38  	ctx := context.Background()
    39  	if resourceGroup != "" {
    40  		iterator, err = client.ListByResourceGroupComplete(ctx, resourceGroup)
    41  	} else {
    42  		iterator, err = client.ListComplete(ctx)
    43  	}
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  	var resources []synapse.Workspace
    48  	for iterator.NotDone() {
    49  		item := iterator.Value()
    50  		resources = append(resources, item)
    51  		if err := iterator.NextWithContext(ctx); err != nil {
    52  			log.Println(err)
    53  			return resources, err
    54  		}
    55  	}
    56  	return resources, nil
    57  }
    58  
    59  func (az *SynapseGenerator) appendWorkspace(workspace *synapse.Workspace) {
    60  	az.AppendSimpleResource(*workspace.ID, *workspace.Name, "azurerm_synapse_workspace")
    61  }
    62  
    63  func (az *SynapseGenerator) appendSQLPools(workspace *synapse.Workspace, workspaceRg *ResourceID) error {
    64  	subscriptionID, _, authorizer := az.getClientArgs()
    65  	client := synapse.NewSQLPoolsClient(subscriptionID)
    66  	client.Authorizer = authorizer
    67  	ctx := context.Background()
    68  	iterator, err := client.ListByWorkspaceComplete(ctx, workspaceRg.ResourceGroup, *workspace.Name)
    69  	if err != nil {
    70  		return err
    71  	}
    72  	for iterator.NotDone() {
    73  		item := iterator.Value()
    74  		az.AppendSimpleResource(*item.ID, *item.Name, "azurerm_synapse_sql_pool")
    75  		if err := iterator.NextWithContext(ctx); err != nil {
    76  			log.Println(err)
    77  			return err
    78  		}
    79  	}
    80  	return nil
    81  }
    82  
    83  func (az *SynapseGenerator) appendSparkPools(workspace *synapse.Workspace, workspaceRg *ResourceID) error {
    84  	subscriptionID, _, authorizer := az.getClientArgs()
    85  	client := synapse.NewBigDataPoolsClient(subscriptionID)
    86  	client.Authorizer = authorizer
    87  	ctx := context.Background()
    88  	iterator, err := client.ListByWorkspaceComplete(ctx, workspaceRg.ResourceGroup, *workspace.Name)
    89  	if err != nil {
    90  		return err
    91  	}
    92  	for iterator.NotDone() {
    93  		item := iterator.Value()
    94  		az.AppendSimpleResource(*item.ID, *item.Name, "azurerm_synapse_spark_pool")
    95  		if err := iterator.NextWithContext(ctx); err != nil {
    96  			log.Println(err)
    97  			return err
    98  		}
    99  	}
   100  	return nil
   101  }
   102  
   103  func (az *SynapseGenerator) appendFirewallRule(workspace *synapse.Workspace, workspaceRg *ResourceID) error {
   104  	subscriptionID, _, authorizer := az.getClientArgs()
   105  	client := synapse.NewIPFirewallRulesClient(subscriptionID)
   106  	client.Authorizer = authorizer
   107  	ctx := context.Background()
   108  	iterator, err := client.ListByWorkspaceComplete(ctx, workspaceRg.ResourceGroup, *workspace.Name)
   109  	if err != nil {
   110  		return err
   111  	}
   112  	for iterator.NotDone() {
   113  		item := iterator.Value()
   114  		az.AppendSimpleResource(*item.ID, *item.Name, "azurerm_synapse_firewall_rule")
   115  		if err := iterator.NextWithContext(ctx); err != nil {
   116  			log.Println(err)
   117  			return err
   118  		}
   119  	}
   120  	return nil
   121  }
   122  
   123  func (az *SynapseGenerator) appendManagedPrivateEndpoint(workspace *synapse.Workspace) error {
   124  
   125  	if workspace.WorkspaceProperties == nil || workspace.WorkspaceProperties.ManagedVirtualNetwork == nil {
   126  		return nil
   127  	}
   128  	virtualNetworkName := *workspace.WorkspaceProperties.ManagedVirtualNetwork
   129  	if virtualNetworkName == "" || virtualNetworkName == "default" {
   130  		return nil
   131  	}
   132  	subscriptionID, _, authorizer := az.getClientArgs()
   133  	client := managedvirtualnetwork.NewManagedPrivateEndpointsClient(subscriptionID)
   134  	client.Authorizer = authorizer
   135  	ctx := context.Background()
   136  	iterator, err := client.ListComplete(ctx, virtualNetworkName)
   137  	if err != nil {
   138  		return err
   139  	}
   140  	for iterator.NotDone() {
   141  		item := iterator.Value()
   142  		az.AppendSimpleResource(*item.ID, *item.Name, "azurerm_synapse_managed_private_endpoint")
   143  		if err := iterator.NextWithContext(ctx); err != nil {
   144  			log.Println(err)
   145  			return err
   146  		}
   147  	}
   148  	return nil
   149  }
   150  
   151  func (az *SynapseGenerator) listPrivateLinkHubs() ([]synapse.PrivateLinkHub, error) {
   152  	subscriptionID, resourceGroup, authorizer := az.getClientArgs()
   153  	client := synapse.NewPrivateLinkHubsClient(subscriptionID)
   154  	client.Authorizer = authorizer
   155  	var (
   156  		iterator synapse.PrivateLinkHubInfoListResultIterator
   157  		err      error
   158  	)
   159  	ctx := context.Background()
   160  	if resourceGroup != "" {
   161  		iterator, err = client.ListByResourceGroupComplete(ctx, resourceGroup)
   162  	} else {
   163  		iterator, err = client.ListComplete(ctx)
   164  	}
   165  	if err != nil {
   166  		return nil, err
   167  	}
   168  	var resources []synapse.PrivateLinkHub
   169  	for iterator.NotDone() {
   170  		item := iterator.Value()
   171  		resources = append(resources, item)
   172  		if err := iterator.NextWithContext(ctx); err != nil {
   173  			log.Println(err)
   174  			return resources, err
   175  		}
   176  	}
   177  	return resources, nil
   178  }
   179  
   180  func (az *SynapseGenerator) appendtPrivateLinkHubs(workspace *synapse.PrivateLinkHub) {
   181  	az.AppendSimpleResource(*workspace.ID, *workspace.Name, "azurerm_synapse_private_link_hub")
   182  }
   183  
   184  func (az *SynapseGenerator) InitResources() error {
   185  
   186  	workspaces, err := az.listWorkspaces()
   187  	if err != nil {
   188  		return err
   189  	}
   190  	for _, workspace := range workspaces {
   191  		az.appendWorkspace(&workspace)
   192  		workspaceRg, err := ParseAzureResourceID(*workspace.ID)
   193  		if err != nil {
   194  			return err
   195  		}
   196  		err = az.appendSQLPools(&workspace, workspaceRg)
   197  		if err != nil {
   198  			return err
   199  		}
   200  		err = az.appendSparkPools(&workspace, workspaceRg)
   201  		if err != nil {
   202  			return err
   203  		}
   204  		err = az.appendFirewallRule(&workspace, workspaceRg)
   205  		if err != nil {
   206  			return err
   207  		}
   208  		err = az.appendManagedPrivateEndpoint(&workspace)
   209  		if err != nil {
   210  			return err
   211  		}
   212  	}
   213  
   214  	hubs, err := az.listPrivateLinkHubs()
   215  	if err == nil {
   216  		for _, hub := range hubs {
   217  			az.appendtPrivateLinkHubs(&hub)
   218  		}
   219  	}
   220  	return nil
   221  }