driftctl/pkg/middlewares/s3_bucket_acl.go

51 lines
1.3 KiB
Go

package middlewares
import (
"reflect"
"github.com/sirupsen/logrus"
"github.com/cloudskiff/driftctl/pkg/resource"
"github.com/cloudskiff/driftctl/pkg/resource/aws"
)
// Remove grant field on remote resources when acl field != private in state
type S3BucketAcl struct{}
func NewS3BucketAcl() S3BucketAcl {
return S3BucketAcl{}
}
func (m S3BucketAcl) Execute(remoteResources, resourcesFromState *[]resource.Resource) error {
for _, iacResource := range *resourcesFromState {
// Ignore all resources other than s3 buckets
if iacResource.TerraformType() != aws.AwsS3BucketResourceType {
continue
}
decodedIacResource, _ := iacResource.(*aws.AwsS3Bucket)
for _, remoteResource := range *remoteResources {
if resource.IsSameResource(remoteResource, decodedIacResource) {
decodedRemoteResource, _ := remoteResource.(*aws.AwsS3Bucket)
if decodedIacResource.Acl != nil && *decodedIacResource.Acl != "private" {
logrus.WithFields(logrus.Fields{
"type": decodedRemoteResource.TerraformType(),
"id": decodedRemoteResource.TerraformId(),
}).Debug("Found a resource to update")
// Use reflection to reset to zero value
reflect.ValueOf(decodedRemoteResource.Grant).Elem().Set(
reflect.Zero(
reflect.ValueOf(*decodedRemoteResource.Grant).Type(),
),
)
}
break
}
}
}
return nil
}