feat(P4): Nova rebrand — AWS resource migration (REQ-163)

Rename all acdl-* AWS resources → nova-* across terraform (DynamoDB,
Secrets Manager, Lambda, SNS, SG, KMS alias, ECS, ECR, IAM user/policy,
state bucket, ALB, VPC/subnet names). Lambda default table names → nova-*
(D-111). State bucket backend → nova-tfstate (-migrate-state documented).
New docs/NOVA_AWS_MIGRATION.md runbook (staged migration + rollback).
New scripts/migrate_dynamodb_data.py (scan+copy, dry-run default).
acdl-deploy- → nova-deploy- role ARN in deploy workflows. Test fixtures
updated; terraform validate + pytest + run_ci.sh PASS.

---ci---
project: acdl
phase: 4
milestone: v1.15
status: execute
---/ci---
This commit is contained in:
Jon Chery
2026-07-30 01:54:26 +00:00
parent 267df4ad0d
commit 0e6ecae26d
46 changed files with 932 additions and 258 deletions
+6 -7
View File
@@ -107,12 +107,11 @@ class TestCreateStateBackend:
def test_state_bucket_name_construction(self, monkeypatch):
"""The state bucket name is derived from NOVA_AWS_ACCOUNT_ID
(P2 renamed from ACDL_AWS_ACCOUNT_ID; the bucket name acdl-tfstate-*
stays until P4, REQ-163)."""
(P4, REQ-163: bucket renamed acdl-tfstate-* → nova-tfstate-*)."""
monkeypatch.setenv("NOVA_AWS_ACCOUNT_ID", "123456789012")
account_id = os.environ.get("NOVA_AWS_ACCOUNT_ID", "581513795199")
state_bucket = f"acdl-tfstate-{account_id}-us-east-1"
assert state_bucket == "acdl-tfstate-123456789012-us-east-1"
state_bucket = f"nova-tfstate-{account_id}-us-east-1"
assert state_bucket == "nova-tfstate-123456789012-us-east-1"
def test_idempotent_bucket_creation(self, monkeypatch):
"""head_bucket success -> no create_bucket called."""
@@ -141,11 +140,11 @@ class TestCreateIamUser:
from unittest import mock
mock_iam = mock.MagicMock()
mock_iam.get_user.return_value = {"User": {"UserName": "acdl-spike-runner"}}
mock_iam.get_user.return_value = {"User": {"UserName": "nova-spike-runner"}}
monkeypatch.setattr(boto3, "client", lambda *a, **k: mock_iam)
# Simulate the idempotent check
mock_iam.get_user(UserName="acdl-spike-runner")
mock_iam.get_user(UserName="nova-spike-runner")
mock_iam.create_user.assert_not_called()
def test_policy_overwrite_is_idempotent(self, monkeypatch):
@@ -157,5 +156,5 @@ class TestCreateIamUser:
monkeypatch.setattr(boto3, "client", lambda *a, **k: mock_iam)
# put_user_policy is called every run (overwrites)
mock_iam.put_user_policy(UserName="acdl-spike-runner", PolicyName="p", PolicyDocument="{}")
mock_iam.put_user_policy(UserName="nova-spike-runner", PolicyName="p", PolicyDocument="{}")
mock_iam.put_user_policy.assert_called_once()