github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/azure/container.go (about) 1 // Copyright 2020 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/containerinstance/mgmt/2018-10-01/containerinstance" 22 "github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2019-05-01/containerregistry" 23 "github.com/Azure/go-autorest/autorest" 24 "github.com/GoogleCloudPlatform/terraformer/terraformutils" 25 "github.com/hashicorp/go-azure-helpers/authentication" 26 ) 27 28 type ContainerGenerator struct { 29 AzureService 30 } 31 32 func (g *ContainerGenerator) listAndAddForContainerGroup() ([]terraformutils.Resource, error) { 33 var resources []terraformutils.Resource 34 ctx := context.Background() 35 subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 36 ContainerGroupsClient := containerinstance.NewContainerGroupsClient(subscriptionID) 37 ContainerGroupsClient.Authorizer = g.Args["authorizer"].(autorest.Authorizer) 38 39 var ( 40 containerGroupIterator containerinstance.ContainerGroupListResultIterator 41 err error 42 ) 43 44 if rg := g.Args["resource_group"].(string); rg != "" { 45 containerGroupIterator, err = ContainerGroupsClient.ListByResourceGroupComplete(ctx, rg) 46 } else { 47 containerGroupIterator, err = ContainerGroupsClient.ListComplete(ctx) 48 } 49 if err != nil { 50 return nil, err 51 } 52 for containerGroupIterator.NotDone() { 53 containerGroup := containerGroupIterator.Value() 54 resources = append(resources, terraformutils.NewSimpleResource( 55 *containerGroup.ID, 56 *containerGroup.Name, 57 "azurerm_container_group", 58 g.ProviderName, 59 []string{})) 60 61 if err := containerGroupIterator.Next(); err != nil { 62 log.Println(err) 63 return resources, err 64 } 65 } 66 67 return resources, nil 68 } 69 70 func (g *ContainerGenerator) listRegistryWebhooks(resourceGroupName string, registryName string) ([]terraformutils.Resource, error) { 71 var resources []terraformutils.Resource 72 ctx := context.Background() 73 subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 74 WebhooksClient := containerregistry.NewWebhooksClient(subscriptionID) 75 WebhooksClient.Authorizer = g.Args["authorizer"].(autorest.Authorizer) 76 77 webhookIterator, err := WebhooksClient.ListComplete(ctx, resourceGroupName, registryName) 78 if err != nil { 79 return nil, err 80 } 81 for webhookIterator.NotDone() { 82 webhook := webhookIterator.Value() 83 resources = append(resources, terraformutils.NewSimpleResource( 84 *webhook.ID, 85 *webhook.Name, 86 "azurerm_container_registry_webhook", 87 g.ProviderName, 88 []string{})) 89 if err := webhookIterator.Next(); err != nil { 90 log.Println(err) 91 break 92 } 93 94 } 95 return resources, nil 96 } 97 98 func (g *ContainerGenerator) listAndAddForContainerRegistry() ([]terraformutils.Resource, error) { 99 var resources []terraformutils.Resource 100 ctx := context.Background() 101 subscriptionID := g.Args["config"].(authentication.Config).SubscriptionID 102 ContainerRegistriesClient := containerregistry.NewRegistriesClient(subscriptionID) 103 ContainerRegistriesClient.Authorizer = g.Args["authorizer"].(autorest.Authorizer) 104 105 var ( 106 containerRegistryIterator containerregistry.RegistryListResultIterator 107 err error 108 ) 109 110 if rg := g.Args["resource_group"].(string); rg != "" { 111 containerRegistryIterator, err = ContainerRegistriesClient.ListByResourceGroupComplete(ctx, rg) 112 } else { 113 containerRegistryIterator, err = ContainerRegistriesClient.ListComplete(ctx) 114 } 115 if err != nil { 116 return nil, err 117 } 118 for containerRegistryIterator.NotDone() { 119 containerRegistry := containerRegistryIterator.Value() 120 resources = append(resources, terraformutils.NewSimpleResource( 121 *containerRegistry.ID, 122 *containerRegistry.Name, 123 "azurerm_container_registry", 124 g.ProviderName, 125 []string{})) 126 127 id, err := ParseAzureResourceID(*containerRegistry.ID) 128 if err != nil { 129 return nil, err 130 } 131 132 webhooks, err := g.listRegistryWebhooks(id.ResourceGroup, *containerRegistry.Name) 133 if err != nil { 134 return nil, err 135 } 136 resources = append(resources, webhooks...) 137 138 if err := containerRegistryIterator.Next(); err != nil { 139 log.Println(err) 140 return resources, err 141 } 142 } 143 144 return resources, nil 145 } 146 147 func (g *ContainerGenerator) InitResources() error { 148 functions := []func() ([]terraformutils.Resource, error){ 149 g.listAndAddForContainerGroup, 150 g.listAndAddForContainerRegistry, 151 } 152 153 for _, f := range functions { 154 resources, err := f() 155 if err != nil { 156 return err 157 } 158 g.Resources = append(g.Resources, resources...) 159 } 160 161 return nil 162 }