Setting the file. One moment.
Chapter 70 · Timestream Influxdb
Subchapter 70.12
scripts/input_validator.py
Python56 lines2 KB
#!/usr/bin/env python3
"""Validate user-provided inputs before AWS CLI or API calls."""
import re
import sys
VALIDATORS = {
"instance_name": (
r"^[a-zA-Z][a-zA-Z0-9-]{0,62}$",
"Must start with letter, alphanumeric/hyphens, max 63 chars",
),
"instance_type": (
r"^db\.influx\.(medium|large|x?large|[0-9]+xlarge)$",
"Must be db.influx.{medium|large|xlarge|Nxlarge}",
),
"region": (r"^[a-z]{2}-[a-z]+-\d$", "Must be valid AWS region format (e.g., us-east-1)"),
"vpc_id": (r"^vpc-[a-f0-9]{8,17}$", "Must be vpc-{hex}"),
"subnet_id": (r"^subnet-[a-f0-9]{8,17}$", "Must be subnet-{hex}"),
"sg_id": (r"^sg-[a-f0-9]{8,17}$", "Must be sg-{hex}"),
"snapshot_id": (r"^[a-zA-Z][a-zA-Z0-9-]{0,254}$", "Must start with letter, max 255 chars"),
"storage_gb": (lambda v: 20 <= int(v) <= 16384, "Must be 20-16384"),
}
def validate(key, value):
if key not in VALIDATORS:
return True, f"No validator for '{key}'"
rule = VALIDATORS[key]
if callable(rule[0]):
try:
ok = rule[0](value)
except (ValueError, TypeError):
ok = False
else:
ok = bool(re.match(str(rule[0]), value))
return ok, rule[1]
def validate_all(**kwargs):
errors = []
for k, v in kwargs.items():
ok, msg = validate(k, v)
if not ok:
errors.append(f" {k}={v} — {msg}")
if errors:
print("Validation FAILED:\n" + "\n".join(errors))
return False
print("All inputs valid.")
return True
if __name__ == "__main__":
pairs = {}
for arg in sys.argv[1:]:
k, v = arg.split("=", 1)
pairs[k] = v
sys.exit(0 if validate_all(**pairs) else 1)