github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/internal/adapters/terraform/aws/elasticache/adapt.go (about)

     1  package elasticache
     2  
     3  import (
     4  	"github.com/khulnasoft-lab/defsec/pkg/providers/aws/elasticache"
     5  	"github.com/khulnasoft-lab/defsec/pkg/terraform"
     6  )
     7  
     8  func Adapt(modules terraform.Modules) elasticache.ElastiCache {
     9  	return elasticache.ElastiCache{
    10  		Clusters:          adaptClusters(modules),
    11  		ReplicationGroups: adaptReplicationGroups(modules),
    12  		SecurityGroups:    adaptSecurityGroups(modules),
    13  	}
    14  }
    15  func adaptClusters(modules terraform.Modules) []elasticache.Cluster {
    16  	var clusters []elasticache.Cluster
    17  	for _, module := range modules {
    18  		for _, resource := range module.GetResourcesByType("aws_elasticache_cluster") {
    19  			clusters = append(clusters, adaptCluster(resource))
    20  		}
    21  	}
    22  	return clusters
    23  }
    24  
    25  func adaptReplicationGroups(modules terraform.Modules) []elasticache.ReplicationGroup {
    26  	var replicationGroups []elasticache.ReplicationGroup
    27  	for _, module := range modules {
    28  		for _, resource := range module.GetResourcesByType("aws_elasticache_replication_group") {
    29  			replicationGroups = append(replicationGroups, adaptReplicationGroup(resource))
    30  		}
    31  	}
    32  	return replicationGroups
    33  }
    34  
    35  func adaptSecurityGroups(modules terraform.Modules) []elasticache.SecurityGroup {
    36  	var securityGroups []elasticache.SecurityGroup
    37  	for _, module := range modules {
    38  		for _, resource := range module.GetResourcesByType("aws_elasticache_security_group") {
    39  			securityGroups = append(securityGroups, adaptSecurityGroup(resource))
    40  		}
    41  	}
    42  	return securityGroups
    43  }
    44  
    45  func adaptCluster(resource *terraform.Block) elasticache.Cluster {
    46  	engineAttr := resource.GetAttribute("engine")
    47  	engineVal := engineAttr.AsStringValueOrDefault("", resource)
    48  
    49  	nodeTypeAttr := resource.GetAttribute("node_type")
    50  	nodeTypeVal := nodeTypeAttr.AsStringValueOrDefault("", resource)
    51  
    52  	snapshotRetentionAttr := resource.GetAttribute("snapshot_retention_limit")
    53  	snapshotRetentionVal := snapshotRetentionAttr.AsIntValueOrDefault(0, resource)
    54  
    55  	return elasticache.Cluster{
    56  		Metadata:               resource.GetMetadata(),
    57  		Engine:                 engineVal,
    58  		NodeType:               nodeTypeVal,
    59  		SnapshotRetentionLimit: snapshotRetentionVal,
    60  	}
    61  }
    62  
    63  func adaptReplicationGroup(resource *terraform.Block) elasticache.ReplicationGroup {
    64  	transitEncryptionAttr := resource.GetAttribute("transit_encryption_enabled")
    65  	transitEncryptionVal := transitEncryptionAttr.AsBoolValueOrDefault(false, resource)
    66  
    67  	atRestEncryptionAttr := resource.GetAttribute("at_rest_encryption_enabled")
    68  	atRestEncryptionVal := atRestEncryptionAttr.AsBoolValueOrDefault(false, resource)
    69  
    70  	return elasticache.ReplicationGroup{
    71  		Metadata:                 resource.GetMetadata(),
    72  		TransitEncryptionEnabled: transitEncryptionVal,
    73  		AtRestEncryptionEnabled:  atRestEncryptionVal,
    74  	}
    75  }
    76  
    77  func adaptSecurityGroup(resource *terraform.Block) elasticache.SecurityGroup {
    78  	descriptionAttr := resource.GetAttribute("description")
    79  	descriptionVal := descriptionAttr.AsStringValueOrDefault("Managed by Terraform", resource)
    80  
    81  	return elasticache.SecurityGroup{
    82  		Metadata:    resource.GetMetadata(),
    83  		Description: descriptionVal,
    84  	}
    85  }