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 }