Skip to content

Commit

Permalink
Extract ElastiCache node types to utils (#214)
Browse files Browse the repository at this point in the history
  • Loading branch information
wata727 committed Dec 9, 2021
1 parent 38304fa commit 13d58ea
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 187 deletions.
75 changes: 1 addition & 74 deletions rules/aws_elasticache_cluster_invalid_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,86 +12,13 @@ import (
type AwsElastiCacheClusterInvalidTypeRule struct {
resourceType string
attributeName string
nodeTypes map[string]bool
}

// NewAwsElastiCacheClusterInvalidTypeRule returns new rule with default attributes
func NewAwsElastiCacheClusterInvalidTypeRule() *AwsElastiCacheClusterInvalidTypeRule {
return &AwsElastiCacheClusterInvalidTypeRule{
resourceType: "aws_elasticache_cluster",
attributeName: "node_type",
nodeTypes: map[string]bool{
"cache.t2.micro": true,
"cache.t2.small": true,
"cache.t2.medium": true,
"cache.t3.micro": true,
"cache.t3.small": true,
"cache.t3.medium": true,
"cache.t4g.micro": true,
"cache.t4g.small": true,
"cache.t4g.medium": true,
"cache.m3.medium": true,
"cache.m3.large": true,
"cache.m3.xlarge": true,
"cache.m3.2xlarge": true,
"cache.m4.large": true,
"cache.m4.xlarge": true,
"cache.m4.2xlarge": true,
"cache.m4.4xlarge": true,
"cache.m4.10xlarge": true,
"cache.m5.large": true,
"cache.m5.xlarge": true,
"cache.m5.2xlarge": true,
"cache.m5.4xlarge": true,
"cache.m5.12xlarge": true,
"cache.m5.24xlarge": true,
"cache.m6g.large": true,
"cache.m6g.xlarge": true,
"cache.m6g.2xlarge": true,
"cache.m6g.4xlarge": true,
"cache.m6g.8xlarge": true,
"cache.m6g.12xlarge": true,
"cache.m6g.16xlarge": true,
"cache.r3.large": true,
"cache.r3.xlarge": true,
"cache.r3.2xlarge": true,
"cache.r3.4xlarge": true,
"cache.r3.8xlarge": true,
"cache.r4.large": true,
"cache.r4.xlarge": true,
"cache.r4.2xlarge": true,
"cache.r4.4xlarge": true,
"cache.r4.8xlarge": true,
"cache.r4.16xlarge": true,
"cache.r5.large": true,
"cache.r5.xlarge": true,
"cache.r5.2xlarge": true,
"cache.r5.4xlarge": true,
"cache.r5.12xlarge": true,
"cache.r5.24xlarge": true,
"cache.r6g.large": true,
"cache.r6g.xlarge": true,
"cache.r6g.2xlarge": true,
"cache.r6g.4xlarge": true,
"cache.r6g.8xlarge": true,
"cache.r6g.12xlarge": true,
"cache.r6g.16xlarge": true,
"cache.r6gd.xlarge": true,
"cache.r6gd.2xlarge": true,
"cache.r6gd.4xlarge": true,
"cache.r6gd.8xlarge": true,
"cache.r6gd.12xlarge": true,
"cache.r6gd.16xlarge": true,
"cache.m1.small": true,
"cache.m1.medium": true,
"cache.m1.large": true,
"cache.m1.xlarge": true,
"cache.m2.xlarge": true,
"cache.m2.2xlarge": true,
"cache.m2.4xlarge": true,
"cache.c1.xlarge": true,
"cache.t1.micro": true,
},
}
}

Expand Down Expand Up @@ -122,7 +49,7 @@ func (r *AwsElastiCacheClusterInvalidTypeRule) Check(runner tflint.Runner) error
err := runner.EvaluateExpr(attribute.Expr, &nodeType, nil)

return runner.EnsureNoError(err, func() error {
if !r.nodeTypes[nodeType] {
if !validElastiCacheNodeTypes[nodeType] {
runner.EmitIssueOnExpr(
r,
fmt.Sprintf("\"%s\" is invalid node type.", nodeType),
Expand Down
27 changes: 3 additions & 24 deletions rules/aws_elasticache_cluster_previous_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,15 @@ import (

// AwsElastiCacheClusterPreviousTypeRule checks whether the resource uses previous generation node type
type AwsElastiCacheClusterPreviousTypeRule struct {
resourceType string
attributeName string
previousNodeTypes map[string]bool
resourceType string
attributeName string
}

// NewAwsElastiCacheClusterPreviousTypeRule returns new rule with default attributes
func NewAwsElastiCacheClusterPreviousTypeRule() *AwsElastiCacheClusterPreviousTypeRule {
return &AwsElastiCacheClusterPreviousTypeRule{
resourceType: "aws_elasticache_cluster",
attributeName: "node_type",
previousNodeTypes: map[string]bool{
"cache.m1.small": true,
"cache.m1.medium": true,
"cache.m1.large": true,
"cache.m1.xlarge": true,
"cache.m2.xlarge": true,
"cache.m2.2xlarge": true,
"cache.m2.4xlarge": true,
"cache.m3.medium": true,
"cache.m3.large": true,
"cache.m3.xlarge": true,
"cache.m3.2xlarge": true,
"cache.r3.large": true,
"cache.r3.xlarge": true,
"cache.r3.2xlarge": true,
"cache.r3.4xlarge": true,
"cache.r3.8xlarge": true,
"cache.c1.xlarge": true,
"cache.t1.micro": true,
},
}
}

Expand Down Expand Up @@ -70,7 +49,7 @@ func (r *AwsElastiCacheClusterPreviousTypeRule) Check(runner tflint.Runner) erro
err := runner.EvaluateExpr(attribute.Expr, &nodeType, nil)

return runner.EnsureNoError(err, func() error {
if r.previousNodeTypes[nodeType] {
if previousElastiCacheNodeTypes[nodeType] {
runner.EmitIssueOnExpr(
r,
fmt.Sprintf("\"%s\" is previous generation node type.", nodeType),
Expand Down
66 changes: 1 addition & 65 deletions rules/aws_elasticache_replication_group_invalid_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,77 +12,13 @@ import (
type AwsElastiCacheReplicationGroupInvalidTypeRule struct {
resourceType string
attributeName string
nodeTypes map[string]bool
}

// NewAwsElastiCacheReplicationGroupInvalidTypeRule returns new rule with default attributes
func NewAwsElastiCacheReplicationGroupInvalidTypeRule() *AwsElastiCacheReplicationGroupInvalidTypeRule {
return &AwsElastiCacheReplicationGroupInvalidTypeRule{
resourceType: "aws_elasticache_replication_group",
attributeName: "node_type",
nodeTypes: map[string]bool{
"cache.t2.micro": true,
"cache.t2.small": true,
"cache.t2.medium": true,
"cache.t3.micro": true,
"cache.t3.small": true,
"cache.t3.medium": true,
"cache.m3.medium": true,
"cache.m3.large": true,
"cache.m3.xlarge": true,
"cache.m3.2xlarge": true,
"cache.m4.large": true,
"cache.m4.xlarge": true,
"cache.m4.2xlarge": true,
"cache.m4.4xlarge": true,
"cache.m4.10xlarge": true,
"cache.m5.large": true,
"cache.m5.xlarge": true,
"cache.m5.2xlarge": true,
"cache.m5.4xlarge": true,
"cache.m5.12xlarge": true,
"cache.m5.24xlarge": true,
"cache.m6g.large": true,
"cache.m6g.xlarge": true,
"cache.m6g.2xlarge": true,
"cache.m6g.4xlarge": true,
"cache.m6g.8xlarge": true,
"cache.m6g.12xlarge": true,
"cache.m6g.16xlarge": true,
"cache.r3.large": true,
"cache.r3.xlarge": true,
"cache.r3.2xlarge": true,
"cache.r3.4xlarge": true,
"cache.r3.8xlarge": true,
"cache.r4.large": true,
"cache.r4.xlarge": true,
"cache.r4.2xlarge": true,
"cache.r4.4xlarge": true,
"cache.r4.8xlarge": true,
"cache.r4.16xlarge": true,
"cache.r5.large": true,
"cache.r5.xlarge": true,
"cache.r5.2xlarge": true,
"cache.r5.4xlarge": true,
"cache.r5.12xlarge": true,
"cache.r5.24xlarge": true,
"cache.r6g.large": true,
"cache.r6g.xlarge": true,
"cache.r6g.2xlarge": true,
"cache.r6g.4xlarge": true,
"cache.r6g.8xlarge": true,
"cache.r6g.12xlarge": true,
"cache.r6g.16xlarge": true,
"cache.m1.small": true,
"cache.m1.medium": true,
"cache.m1.large": true,
"cache.m1.xlarge": true,
"cache.m2.xlarge": true,
"cache.m2.2xlarge": true,
"cache.m2.4xlarge": true,
"cache.c1.xlarge": true,
"cache.t1.micro": true,
},
}
}

Expand Down Expand Up @@ -113,7 +49,7 @@ func (r *AwsElastiCacheReplicationGroupInvalidTypeRule) Check(runner tflint.Runn
err := runner.EvaluateExpr(attribute.Expr, &nodeType, nil)

return runner.EnsureNoError(err, func() error {
if !r.nodeTypes[nodeType] {
if !validElastiCacheNodeTypes[nodeType] {
runner.EmitIssueOnExpr(
r,
fmt.Sprintf("\"%s\" is invalid node type.", nodeType),
Expand Down
27 changes: 3 additions & 24 deletions rules/aws_elasticache_replication_group_previous_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,15 @@ import (

// AwsElastiCacheReplicationGroupPreviousTypeRule checks whether the resource uses previous generation node type
type AwsElastiCacheReplicationGroupPreviousTypeRule struct {
resourceType string
attributeName string
previousNodeTypes map[string]bool
resourceType string
attributeName string
}

// NewAwsElastiCacheReplicationGroupPreviousTypeRule returns new rule with default attributes
func NewAwsElastiCacheReplicationGroupPreviousTypeRule() *AwsElastiCacheReplicationGroupPreviousTypeRule {
return &AwsElastiCacheReplicationGroupPreviousTypeRule{
resourceType: "aws_elasticache_replication_group",
attributeName: "node_type",
previousNodeTypes: map[string]bool{
"cache.m1.small": true,
"cache.m1.medium": true,
"cache.m1.large": true,
"cache.m1.xlarge": true,
"cache.m2.xlarge": true,
"cache.m2.2xlarge": true,
"cache.m2.4xlarge": true,
"cache.m3.medium": true,
"cache.m3.large": true,
"cache.m3.xlarge": true,
"cache.m3.2xlarge": true,
"cache.r3.large": true,
"cache.r3.xlarge": true,
"cache.r3.2xlarge": true,
"cache.r3.4xlarge": true,
"cache.r3.8xlarge": true,
"cache.c1.xlarge": true,
"cache.t1.micro": true,
},
}
}

Expand Down Expand Up @@ -70,7 +49,7 @@ func (r *AwsElastiCacheReplicationGroupPreviousTypeRule) Check(runner tflint.Run
err := runner.EvaluateExpr(attribute.Expr, &nodeType, nil)

return runner.EnsureNoError(err, func() error {
if r.previousNodeTypes[nodeType] {
if previousElastiCacheNodeTypes[nodeType] {
runner.EmitIssueOnExpr(
r,
fmt.Sprintf("\"%s\" is previous generation node type.", nodeType),
Expand Down
97 changes: 97 additions & 0 deletions rules/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package rules

var validElastiCacheNodeTypes = map[string]bool{
// https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html
"cache.t2.micro": true,
"cache.t2.small": true,
"cache.t2.medium": true,
"cache.t3.micro": true,
"cache.t3.small": true,
"cache.t3.medium": true,
"cache.t4g.micro": true,
"cache.t4g.small": true,
"cache.t4g.medium": true,
"cache.m3.medium": true,
"cache.m3.large": true,
"cache.m3.xlarge": true,
"cache.m3.2xlarge": true,
"cache.m4.large": true,
"cache.m4.xlarge": true,
"cache.m4.2xlarge": true,
"cache.m4.4xlarge": true,
"cache.m4.10xlarge": true,
"cache.m5.large": true,
"cache.m5.xlarge": true,
"cache.m5.2xlarge": true,
"cache.m5.4xlarge": true,
"cache.m5.12xlarge": true,
"cache.m5.24xlarge": true,
"cache.m6g.large": true,
"cache.m6g.xlarge": true,
"cache.m6g.2xlarge": true,
"cache.m6g.4xlarge": true,
"cache.m6g.8xlarge": true,
"cache.m6g.12xlarge": true,
"cache.m6g.16xlarge": true,
"cache.r3.large": true,
"cache.r3.xlarge": true,
"cache.r3.2xlarge": true,
"cache.r3.4xlarge": true,
"cache.r3.8xlarge": true,
"cache.r4.large": true,
"cache.r4.xlarge": true,
"cache.r4.2xlarge": true,
"cache.r4.4xlarge": true,
"cache.r4.8xlarge": true,
"cache.r4.16xlarge": true,
"cache.r5.large": true,
"cache.r5.xlarge": true,
"cache.r5.2xlarge": true,
"cache.r5.4xlarge": true,
"cache.r5.12xlarge": true,
"cache.r5.24xlarge": true,
"cache.r6g.large": true,
"cache.r6g.xlarge": true,
"cache.r6g.2xlarge": true,
"cache.r6g.4xlarge": true,
"cache.r6g.8xlarge": true,
"cache.r6g.12xlarge": true,
"cache.r6g.16xlarge": true,
"cache.r6gd.xlarge": true,
"cache.r6gd.2xlarge": true,
"cache.r6gd.4xlarge": true,
"cache.r6gd.8xlarge": true,
"cache.r6gd.12xlarge": true,
"cache.r6gd.16xlarge": true,
"cache.m1.small": true,
"cache.m1.medium": true,
"cache.m1.large": true,
"cache.m1.xlarge": true,
"cache.m2.xlarge": true,
"cache.m2.2xlarge": true,
"cache.m2.4xlarge": true,
"cache.c1.xlarge": true,
"cache.t1.micro": true,
}

var previousElastiCacheNodeTypes = map[string]bool{
// https://aws.amazon.com/elasticache/previous-generation/?nc1=h_ls
"cache.m1.small": true,
"cache.m1.medium": true,
"cache.m1.large": true,
"cache.m1.xlarge": true,
"cache.m2.xlarge": true,
"cache.m2.2xlarge": true,
"cache.m2.4xlarge": true,
"cache.m3.medium": true,
"cache.m3.large": true,
"cache.m3.xlarge": true,
"cache.m3.2xlarge": true,
"cache.r3.large": true,
"cache.r3.xlarge": true,
"cache.r3.2xlarge": true,
"cache.r3.4xlarge": true,
"cache.r3.8xlarge": true,
"cache.c1.xlarge": true,
"cache.t1.micro": true,
}

0 comments on commit 13d58ea

Please sign in to comment.