Skip to content

Commit e71eb78

Browse files
committed
feat: add engine_version validation to prevent invalid formats
- Add comprehensive input validation for engine_version variable - Prevent software service versions (e.g., OpenSearch_2_19_R20250630-P5) - Enforce correct AWS engine version format (OpenSearch_X.Y) - Add length validation (≤18 chars) to catch overly long versions - Include clear error messages with examples of valid formats - Add pre-commit hook for engine version validation - Prevents accidental domain destruction from invalid version changes Fixes issue where users mistakenly use software service versions instead of engine versions, causing domain recreation failures.
1 parent 36a67fc commit e71eb78

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

.pre-commit-config.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,43 @@ repos:
2323
- '--args=--only=terraform_standard_module_structure'
2424
- '--args=--only=terraform_workspace_remote'
2525
- id: terraform_validate
26+
- id: terraform_tfsec
27+
args:
28+
- '--args=--soft-fail'
2629
- repo: https://github.com/pre-commit/pre-commit-hooks
2730
rev: v5.0.0
2831
hooks:
2932
- id: check-merge-conflict
3033
- id: end-of-file-fixer
3134
- id: trailing-whitespace
35+
- id: check-yaml
36+
- repo: local
37+
hooks:
38+
- id: validate-opensearch-version
39+
name: Validate OpenSearch Engine Version
40+
entry: bash -c
41+
args:
42+
- |
43+
# Check for engine_version in Terraform files
44+
if grep -r "engine_version.*=" . --include="*.tf" | grep -v "null" | grep -v "variables.tf" | grep -v "#"; then
45+
echo "Found engine_version configurations:"
46+
grep -r "engine_version.*=" . --include="*.tf" | grep -v "null" | grep -v "variables.tf" | grep -v "#"
47+
echo ""
48+
echo "⚠️ VALIDATION: Please ensure engine_version follows format 'OpenSearch_X.Y'"
49+
echo "❌ BAD: OpenSearch_2_19_R20250630-P5 (software service version)"
50+
echo "✅ GOOD: OpenSearch_2.19 (engine version)"
51+
echo ""
52+
# Extract and validate versions
53+
versions=$(grep -r "engine_version.*=" . --include="*.tf" | grep -v "null" | grep -v "variables.tf" | grep -v "#" | sed 's/.*engine_version.*=.*"\([^"]*\)".*/\1/' | sort | uniq)
54+
for version in $versions; do
55+
if [[ $version =~ ^OpenSearch_[0-9]{1,2}\.[0-9]{1,2}$ ]] || [[ $version =~ ^Elasticsearch_[0-9]{1}\.[0-9]{1,2}$ ]]; then
56+
echo "✅ Valid version: $version"
57+
else
58+
echo "❌ Invalid version: $version"
59+
echo " Must match pattern: OpenSearch_X.Y or Elasticsearch_X.Y"
60+
exit 1
61+
fi
62+
done
63+
fi
64+
language: system
65+
pass_filenames: false

variables.tf

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,28 @@ variable "encrypt_at_rest" {
8686
}
8787

8888
variable "engine_version" {
89-
description = "Version of the OpenSearch engine to use"
89+
description = "Version of the OpenSearch engine to use. Must follow format 'OpenSearch_X.Y' (e.g., 'OpenSearch_2.11')"
9090
type = string
9191
default = null
92+
93+
validation {
94+
condition = var.engine_version == null || can(regex("^(Elasticsearch_[0-9]{1}\\.[0-9]{1,2}|OpenSearch_[0-9]{1,2}\\.[0-9]{1,2})$", var.engine_version))
95+
error_message = <<-EOT
96+
The engine_version must be in the format:
97+
- 'OpenSearch_X.Y' where X is 1-2 digits and Y is 1-2 digits (e.g., 'OpenSearch_2.11', 'OpenSearch_1.3')
98+
- 'Elasticsearch_X.Y' where X is 1 digit and Y is 1-2 digits (e.g., 'Elasticsearch_7.10')
99+
100+
Your provided value appears to be a software service version (with release dates/patches).
101+
Please use only the engine version format. Common valid versions include:
102+
- OpenSearch_1.0, OpenSearch_1.1, OpenSearch_1.2, OpenSearch_1.3
103+
- OpenSearch_2.0, OpenSearch_2.3, OpenSearch_2.5, OpenSearch_2.7, OpenSearch_2.9, OpenSearch_2.11
104+
EOT
105+
}
106+
107+
validation {
108+
condition = var.engine_version == null || length(var.engine_version) <= 18
109+
error_message = "The engine_version must be 18 characters or less. Software service versions with dates/patches are not valid here."
110+
}
92111
}
93112

94113
variable "ip_address_type" {

0 commit comments

Comments
 (0)