driftctl/pkg/middlewares/google_compute_instance_gro...

51 lines
1.8 KiB
Go

package middlewares
import (
"github.com/snyk/driftctl/enumeration/resource"
"github.com/snyk/driftctl/enumeration/resource/google"
)
type GoogleComputeInstanceGroupManagerReconciler struct{}
// NewGoogleComputeInstanceGroupManagerReconciler imports remote instance groups when they're managed by a managed instance group manager.
// Creating a "google_compute_instance_group_manager" resource via Terraform leads to having several unmanaged instance groups.
// This middleware adds remote instance groups to the state by matching them with managed instance group managers.
func NewGoogleComputeInstanceGroupManagerReconciler() *GoogleComputeInstanceGroupManagerReconciler {
return &GoogleComputeInstanceGroupManagerReconciler{}
}
func (a GoogleComputeInstanceGroupManagerReconciler) Execute(remoteResources, resourcesFromState *[]*resource.Resource) error {
var newStateResources []*resource.Resource
instanceGroups := make([]*resource.Resource, 0)
for _, remoteResource := range *remoteResources {
// Ignore all resources other than google_compute_instance_group
if remoteResource.ResourceType() != google.GoogleComputeInstanceGroupResourceType {
continue
}
instanceGroups = append(instanceGroups, remoteResource)
}
for _, stateResource := range *resourcesFromState {
newStateResources = append(newStateResources, stateResource)
// Ignore all resources other than google_compute_instance_group_manager
if stateResource.ResourceType() != google.GoogleComputeInstanceGroupManagerResourceType {
continue
}
name := stateResource.Attributes().GetString("name")
for _, group := range instanceGroups {
// Import instance group in the state
if n := group.Attributes().GetString("name"); n != nil && *n == *name {
newStateResources = append(newStateResources, group)
}
}
}
*resourcesFromState = newStateResources
return nil
}