Skip to content

Commit 13d58ea

Browse files
authored
Extract ElastiCache node types to utils (#214)
1 parent 38304fa commit 13d58ea

5 files changed

+105
-187
lines changed

rules/aws_elasticache_cluster_invalid_type.go

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -12,86 +12,13 @@ import (
1212
type AwsElastiCacheClusterInvalidTypeRule struct {
1313
resourceType string
1414
attributeName string
15-
nodeTypes map[string]bool
1615
}
1716

1817
// NewAwsElastiCacheClusterInvalidTypeRule returns new rule with default attributes
1918
func NewAwsElastiCacheClusterInvalidTypeRule() *AwsElastiCacheClusterInvalidTypeRule {
2019
return &AwsElastiCacheClusterInvalidTypeRule{
2120
resourceType: "aws_elasticache_cluster",
2221
attributeName: "node_type",
23-
nodeTypes: map[string]bool{
24-
"cache.t2.micro": true,
25-
"cache.t2.small": true,
26-
"cache.t2.medium": true,
27-
"cache.t3.micro": true,
28-
"cache.t3.small": true,
29-
"cache.t3.medium": true,
30-
"cache.t4g.micro": true,
31-
"cache.t4g.small": true,
32-
"cache.t4g.medium": true,
33-
"cache.m3.medium": true,
34-
"cache.m3.large": true,
35-
"cache.m3.xlarge": true,
36-
"cache.m3.2xlarge": true,
37-
"cache.m4.large": true,
38-
"cache.m4.xlarge": true,
39-
"cache.m4.2xlarge": true,
40-
"cache.m4.4xlarge": true,
41-
"cache.m4.10xlarge": true,
42-
"cache.m5.large": true,
43-
"cache.m5.xlarge": true,
44-
"cache.m5.2xlarge": true,
45-
"cache.m5.4xlarge": true,
46-
"cache.m5.12xlarge": true,
47-
"cache.m5.24xlarge": true,
48-
"cache.m6g.large": true,
49-
"cache.m6g.xlarge": true,
50-
"cache.m6g.2xlarge": true,
51-
"cache.m6g.4xlarge": true,
52-
"cache.m6g.8xlarge": true,
53-
"cache.m6g.12xlarge": true,
54-
"cache.m6g.16xlarge": true,
55-
"cache.r3.large": true,
56-
"cache.r3.xlarge": true,
57-
"cache.r3.2xlarge": true,
58-
"cache.r3.4xlarge": true,
59-
"cache.r3.8xlarge": true,
60-
"cache.r4.large": true,
61-
"cache.r4.xlarge": true,
62-
"cache.r4.2xlarge": true,
63-
"cache.r4.4xlarge": true,
64-
"cache.r4.8xlarge": true,
65-
"cache.r4.16xlarge": true,
66-
"cache.r5.large": true,
67-
"cache.r5.xlarge": true,
68-
"cache.r5.2xlarge": true,
69-
"cache.r5.4xlarge": true,
70-
"cache.r5.12xlarge": true,
71-
"cache.r5.24xlarge": true,
72-
"cache.r6g.large": true,
73-
"cache.r6g.xlarge": true,
74-
"cache.r6g.2xlarge": true,
75-
"cache.r6g.4xlarge": true,
76-
"cache.r6g.8xlarge": true,
77-
"cache.r6g.12xlarge": true,
78-
"cache.r6g.16xlarge": true,
79-
"cache.r6gd.xlarge": true,
80-
"cache.r6gd.2xlarge": true,
81-
"cache.r6gd.4xlarge": true,
82-
"cache.r6gd.8xlarge": true,
83-
"cache.r6gd.12xlarge": true,
84-
"cache.r6gd.16xlarge": true,
85-
"cache.m1.small": true,
86-
"cache.m1.medium": true,
87-
"cache.m1.large": true,
88-
"cache.m1.xlarge": true,
89-
"cache.m2.xlarge": true,
90-
"cache.m2.2xlarge": true,
91-
"cache.m2.4xlarge": true,
92-
"cache.c1.xlarge": true,
93-
"cache.t1.micro": true,
94-
},
9522
}
9623
}
9724

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

12451
return runner.EnsureNoError(err, func() error {
125-
if !r.nodeTypes[nodeType] {
52+
if !validElastiCacheNodeTypes[nodeType] {
12653
runner.EmitIssueOnExpr(
12754
r,
12855
fmt.Sprintf("\"%s\" is invalid node type.", nodeType),

rules/aws_elasticache_cluster_previous_type.go

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,15 @@ import (
1010

1111
// AwsElastiCacheClusterPreviousTypeRule checks whether the resource uses previous generation node type
1212
type AwsElastiCacheClusterPreviousTypeRule struct {
13-
resourceType string
14-
attributeName string
15-
previousNodeTypes map[string]bool
13+
resourceType string
14+
attributeName string
1615
}
1716

1817
// NewAwsElastiCacheClusterPreviousTypeRule returns new rule with default attributes
1918
func NewAwsElastiCacheClusterPreviousTypeRule() *AwsElastiCacheClusterPreviousTypeRule {
2019
return &AwsElastiCacheClusterPreviousTypeRule{
2120
resourceType: "aws_elasticache_cluster",
2221
attributeName: "node_type",
23-
previousNodeTypes: map[string]bool{
24-
"cache.m1.small": true,
25-
"cache.m1.medium": true,
26-
"cache.m1.large": true,
27-
"cache.m1.xlarge": true,
28-
"cache.m2.xlarge": true,
29-
"cache.m2.2xlarge": true,
30-
"cache.m2.4xlarge": true,
31-
"cache.m3.medium": true,
32-
"cache.m3.large": true,
33-
"cache.m3.xlarge": true,
34-
"cache.m3.2xlarge": true,
35-
"cache.r3.large": true,
36-
"cache.r3.xlarge": true,
37-
"cache.r3.2xlarge": true,
38-
"cache.r3.4xlarge": true,
39-
"cache.r3.8xlarge": true,
40-
"cache.c1.xlarge": true,
41-
"cache.t1.micro": true,
42-
},
4322
}
4423
}
4524

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

7251
return runner.EnsureNoError(err, func() error {
73-
if r.previousNodeTypes[nodeType] {
52+
if previousElastiCacheNodeTypes[nodeType] {
7453
runner.EmitIssueOnExpr(
7554
r,
7655
fmt.Sprintf("\"%s\" is previous generation node type.", nodeType),

rules/aws_elasticache_replication_group_invalid_type.go

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -12,77 +12,13 @@ import (
1212
type AwsElastiCacheReplicationGroupInvalidTypeRule struct {
1313
resourceType string
1414
attributeName string
15-
nodeTypes map[string]bool
1615
}
1716

1817
// NewAwsElastiCacheReplicationGroupInvalidTypeRule returns new rule with default attributes
1918
func NewAwsElastiCacheReplicationGroupInvalidTypeRule() *AwsElastiCacheReplicationGroupInvalidTypeRule {
2019
return &AwsElastiCacheReplicationGroupInvalidTypeRule{
2120
resourceType: "aws_elasticache_replication_group",
2221
attributeName: "node_type",
23-
nodeTypes: map[string]bool{
24-
"cache.t2.micro": true,
25-
"cache.t2.small": true,
26-
"cache.t2.medium": true,
27-
"cache.t3.micro": true,
28-
"cache.t3.small": true,
29-
"cache.t3.medium": true,
30-
"cache.m3.medium": true,
31-
"cache.m3.large": true,
32-
"cache.m3.xlarge": true,
33-
"cache.m3.2xlarge": true,
34-
"cache.m4.large": true,
35-
"cache.m4.xlarge": true,
36-
"cache.m4.2xlarge": true,
37-
"cache.m4.4xlarge": true,
38-
"cache.m4.10xlarge": true,
39-
"cache.m5.large": true,
40-
"cache.m5.xlarge": true,
41-
"cache.m5.2xlarge": true,
42-
"cache.m5.4xlarge": true,
43-
"cache.m5.12xlarge": true,
44-
"cache.m5.24xlarge": true,
45-
"cache.m6g.large": true,
46-
"cache.m6g.xlarge": true,
47-
"cache.m6g.2xlarge": true,
48-
"cache.m6g.4xlarge": true,
49-
"cache.m6g.8xlarge": true,
50-
"cache.m6g.12xlarge": true,
51-
"cache.m6g.16xlarge": true,
52-
"cache.r3.large": true,
53-
"cache.r3.xlarge": true,
54-
"cache.r3.2xlarge": true,
55-
"cache.r3.4xlarge": true,
56-
"cache.r3.8xlarge": true,
57-
"cache.r4.large": true,
58-
"cache.r4.xlarge": true,
59-
"cache.r4.2xlarge": true,
60-
"cache.r4.4xlarge": true,
61-
"cache.r4.8xlarge": true,
62-
"cache.r4.16xlarge": true,
63-
"cache.r5.large": true,
64-
"cache.r5.xlarge": true,
65-
"cache.r5.2xlarge": true,
66-
"cache.r5.4xlarge": true,
67-
"cache.r5.12xlarge": true,
68-
"cache.r5.24xlarge": true,
69-
"cache.r6g.large": true,
70-
"cache.r6g.xlarge": true,
71-
"cache.r6g.2xlarge": true,
72-
"cache.r6g.4xlarge": true,
73-
"cache.r6g.8xlarge": true,
74-
"cache.r6g.12xlarge": true,
75-
"cache.r6g.16xlarge": true,
76-
"cache.m1.small": true,
77-
"cache.m1.medium": true,
78-
"cache.m1.large": true,
79-
"cache.m1.xlarge": true,
80-
"cache.m2.xlarge": true,
81-
"cache.m2.2xlarge": true,
82-
"cache.m2.4xlarge": true,
83-
"cache.c1.xlarge": true,
84-
"cache.t1.micro": true,
85-
},
8622
}
8723
}
8824

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

11551
return runner.EnsureNoError(err, func() error {
116-
if !r.nodeTypes[nodeType] {
52+
if !validElastiCacheNodeTypes[nodeType] {
11753
runner.EmitIssueOnExpr(
11854
r,
11955
fmt.Sprintf("\"%s\" is invalid node type.", nodeType),

rules/aws_elasticache_replication_group_previous_type.go

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,15 @@ import (
1010

1111
// AwsElastiCacheReplicationGroupPreviousTypeRule checks whether the resource uses previous generation node type
1212
type AwsElastiCacheReplicationGroupPreviousTypeRule struct {
13-
resourceType string
14-
attributeName string
15-
previousNodeTypes map[string]bool
13+
resourceType string
14+
attributeName string
1615
}
1716

1817
// NewAwsElastiCacheReplicationGroupPreviousTypeRule returns new rule with default attributes
1918
func NewAwsElastiCacheReplicationGroupPreviousTypeRule() *AwsElastiCacheReplicationGroupPreviousTypeRule {
2019
return &AwsElastiCacheReplicationGroupPreviousTypeRule{
2120
resourceType: "aws_elasticache_replication_group",
2221
attributeName: "node_type",
23-
previousNodeTypes: map[string]bool{
24-
"cache.m1.small": true,
25-
"cache.m1.medium": true,
26-
"cache.m1.large": true,
27-
"cache.m1.xlarge": true,
28-
"cache.m2.xlarge": true,
29-
"cache.m2.2xlarge": true,
30-
"cache.m2.4xlarge": true,
31-
"cache.m3.medium": true,
32-
"cache.m3.large": true,
33-
"cache.m3.xlarge": true,
34-
"cache.m3.2xlarge": true,
35-
"cache.r3.large": true,
36-
"cache.r3.xlarge": true,
37-
"cache.r3.2xlarge": true,
38-
"cache.r3.4xlarge": true,
39-
"cache.r3.8xlarge": true,
40-
"cache.c1.xlarge": true,
41-
"cache.t1.micro": true,
42-
},
4322
}
4423
}
4524

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

7251
return runner.EnsureNoError(err, func() error {
73-
if r.previousNodeTypes[nodeType] {
52+
if previousElastiCacheNodeTypes[nodeType] {
7453
runner.EmitIssueOnExpr(
7554
r,
7655
fmt.Sprintf("\"%s\" is previous generation node type.", nodeType),

rules/utils.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package rules
2+
3+
var validElastiCacheNodeTypes = map[string]bool{
4+
// https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/CacheNodes.SupportedTypes.html
5+
"cache.t2.micro": true,
6+
"cache.t2.small": true,
7+
"cache.t2.medium": true,
8+
"cache.t3.micro": true,
9+
"cache.t3.small": true,
10+
"cache.t3.medium": true,
11+
"cache.t4g.micro": true,
12+
"cache.t4g.small": true,
13+
"cache.t4g.medium": true,
14+
"cache.m3.medium": true,
15+
"cache.m3.large": true,
16+
"cache.m3.xlarge": true,
17+
"cache.m3.2xlarge": true,
18+
"cache.m4.large": true,
19+
"cache.m4.xlarge": true,
20+
"cache.m4.2xlarge": true,
21+
"cache.m4.4xlarge": true,
22+
"cache.m4.10xlarge": true,
23+
"cache.m5.large": true,
24+
"cache.m5.xlarge": true,
25+
"cache.m5.2xlarge": true,
26+
"cache.m5.4xlarge": true,
27+
"cache.m5.12xlarge": true,
28+
"cache.m5.24xlarge": true,
29+
"cache.m6g.large": true,
30+
"cache.m6g.xlarge": true,
31+
"cache.m6g.2xlarge": true,
32+
"cache.m6g.4xlarge": true,
33+
"cache.m6g.8xlarge": true,
34+
"cache.m6g.12xlarge": true,
35+
"cache.m6g.16xlarge": true,
36+
"cache.r3.large": true,
37+
"cache.r3.xlarge": true,
38+
"cache.r3.2xlarge": true,
39+
"cache.r3.4xlarge": true,
40+
"cache.r3.8xlarge": true,
41+
"cache.r4.large": true,
42+
"cache.r4.xlarge": true,
43+
"cache.r4.2xlarge": true,
44+
"cache.r4.4xlarge": true,
45+
"cache.r4.8xlarge": true,
46+
"cache.r4.16xlarge": true,
47+
"cache.r5.large": true,
48+
"cache.r5.xlarge": true,
49+
"cache.r5.2xlarge": true,
50+
"cache.r5.4xlarge": true,
51+
"cache.r5.12xlarge": true,
52+
"cache.r5.24xlarge": true,
53+
"cache.r6g.large": true,
54+
"cache.r6g.xlarge": true,
55+
"cache.r6g.2xlarge": true,
56+
"cache.r6g.4xlarge": true,
57+
"cache.r6g.8xlarge": true,
58+
"cache.r6g.12xlarge": true,
59+
"cache.r6g.16xlarge": true,
60+
"cache.r6gd.xlarge": true,
61+
"cache.r6gd.2xlarge": true,
62+
"cache.r6gd.4xlarge": true,
63+
"cache.r6gd.8xlarge": true,
64+
"cache.r6gd.12xlarge": true,
65+
"cache.r6gd.16xlarge": true,
66+
"cache.m1.small": true,
67+
"cache.m1.medium": true,
68+
"cache.m1.large": true,
69+
"cache.m1.xlarge": true,
70+
"cache.m2.xlarge": true,
71+
"cache.m2.2xlarge": true,
72+
"cache.m2.4xlarge": true,
73+
"cache.c1.xlarge": true,
74+
"cache.t1.micro": true,
75+
}
76+
77+
var previousElastiCacheNodeTypes = map[string]bool{
78+
// https://aws.amazon.com/elasticache/previous-generation/?nc1=h_ls
79+
"cache.m1.small": true,
80+
"cache.m1.medium": true,
81+
"cache.m1.large": true,
82+
"cache.m1.xlarge": true,
83+
"cache.m2.xlarge": true,
84+
"cache.m2.2xlarge": true,
85+
"cache.m2.4xlarge": true,
86+
"cache.m3.medium": true,
87+
"cache.m3.large": true,
88+
"cache.m3.xlarge": true,
89+
"cache.m3.2xlarge": true,
90+
"cache.r3.large": true,
91+
"cache.r3.xlarge": true,
92+
"cache.r3.2xlarge": true,
93+
"cache.r3.4xlarge": true,
94+
"cache.r3.8xlarge": true,
95+
"cache.c1.xlarge": true,
96+
"cache.t1.micro": true,
97+
}

0 commit comments

Comments
 (0)