Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added tests/__init__.py
Empty file.
20 changes: 20 additions & 0 deletions tests/test_terraform_import.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
"""Tests for Terraform resource name validation"""
import sys, os, unittest
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "tools"))
from terraform_import import validate_resource_name

class TestValidateResourceName(unittest.TestCase):
def test_valid_standard(self):
for n in ["my_resource", "MyResource", "resource_1", "test"]:
v, m = validate_resource_name(n)
self.assertTrue(v, f"{n}: {m}")
def test_hyphen_rejected(self):
v, m = validate_resource_name("my-resource")
self.assertFalse(v); self.assertIn("hyphen", m.lower())
def test_empty_rejected(self):
v, m = validate_resource_name(""); self.assertFalse(v)
def test_invalid_chars(self):
for n in ["123abc", "my.resource", "my resource"]:
self.assertFalse(validate_resource_name(n)[0])
if __name__ == "__main__":
unittest.main()
17 changes: 17 additions & 0 deletions tools/terraform_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,23 @@ class ImportResult:
# IMPORTER
# ---------------------------------------------------------------------------


import re

def validate_resource_name(name):
"""Validate a Terraform resource name. Returns (is_valid, error_message).
Resource names must match: [a-zA-Z_][a-zA-Z0-9_]*.
Hyphens are not allowed in Terraform resource names.
"""
if not name:
return False, "Resource name cannot be empty"
if "-" in name:
return False, f"Resource name '{name}' contains hyphens, which can corrupt Terraform state"
if not re.match(r"^[a-zA-Z_][a-zA-Z0-9_]*$", name):
return False, f"Resource name '{name}' is not a valid Terraform identifier"
return True, ""


class TerraformImporter:
def __init__(self, state_dir: str = ".", terraform_binary: str = "terraform"):
self.state_dir = Path(state_dir)
Expand Down