63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package middlewares
|
|
|
|
import (
|
|
"github.com/snyk/driftctl/enumeration/resource"
|
|
"github.com/snyk/driftctl/enumeration/resource/azurerm"
|
|
)
|
|
|
|
// Explodes subnet found in azurerm_virtual_network.subnet from state resources to dedicated resources
|
|
type AzurermSubnetExpander struct {
|
|
resourceFactory resource.ResourceFactory
|
|
}
|
|
|
|
func NewAzurermSubnetExpander(resourceFactory resource.ResourceFactory) AzurermSubnetExpander {
|
|
return AzurermSubnetExpander{
|
|
resourceFactory: resourceFactory,
|
|
}
|
|
}
|
|
|
|
func (m AzurermSubnetExpander) Execute(_, resourcesFromState *[]*resource.Resource) error {
|
|
newList := make([]*resource.Resource, 0)
|
|
for _, res := range *resourcesFromState {
|
|
newList = append(newList, res)
|
|
|
|
// Ignore all resources other than azurerm_virtual_network
|
|
if res.ResourceType() != azurerm.AzureVirtualNetworkResourceType {
|
|
continue
|
|
}
|
|
|
|
subnets, exist := res.Attributes().Get("subnet")
|
|
if !exist || subnets == nil {
|
|
continue
|
|
}
|
|
|
|
for _, subnet := range subnets.([]interface{}) {
|
|
subnet := subnet.(map[string]interface{})
|
|
id := subnet["id"].(string)
|
|
exist := false
|
|
for _, resFromState := range *resourcesFromState {
|
|
if resFromState.ResourceType() == azurerm.AzureSubnetResourceType &&
|
|
resFromState.ResourceId() == id {
|
|
exist = true
|
|
break
|
|
}
|
|
}
|
|
if exist {
|
|
continue
|
|
}
|
|
res := m.resourceFactory.CreateAbstractResource(
|
|
azurerm.AzureSubnetResourceType,
|
|
id,
|
|
map[string]interface{}{},
|
|
)
|
|
|
|
newList = append(newList, res)
|
|
|
|
}
|
|
|
|
res.Attrs.SafeDelete([]string{"subnet"})
|
|
}
|
|
*resourcesFromState = newList
|
|
return nil
|
|
}
|