terraformgraph 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,183 @@
1
+ # Logical connections between services for diagram rendering
2
+ # Format: source -> target -> connection properties
3
+
4
+ connections:
5
+ - source: cloudfront
6
+ target: s3
7
+ label: "Origin"
8
+ type: data_flow
9
+
10
+ - source: cloudfront
11
+ target: alb
12
+ label: "Origin"
13
+ type: data_flow
14
+
15
+ - source: waf
16
+ target: cloudfront
17
+ label: "Protect"
18
+ type: default
19
+
20
+ - source: waf
21
+ target: alb
22
+ label: "Protect"
23
+ type: default
24
+
25
+ - source: route53
26
+ target: cloudfront
27
+ label: "DNS"
28
+ type: default
29
+
30
+ - source: route53
31
+ target: alb
32
+ label: "DNS"
33
+ type: default
34
+
35
+ - source: acm
36
+ target: cloudfront
37
+ label: "TLS"
38
+ type: default
39
+
40
+ - source: acm
41
+ target: alb
42
+ label: "TLS"
43
+ type: default
44
+
45
+ - source: alb
46
+ target: ecs
47
+ label: "Route"
48
+ type: data_flow
49
+
50
+ - source: alb
51
+ target: ec2
52
+ label: "Route"
53
+ type: data_flow
54
+
55
+ - source: alb
56
+ target: lambda
57
+ label: "Route"
58
+ type: data_flow
59
+
60
+ - source: ecs
61
+ target: dynamodb
62
+ label: "Read/Write"
63
+ type: data_flow
64
+
65
+ - source: ecs
66
+ target: s3
67
+ label: "Read/Write"
68
+ type: data_flow
69
+
70
+ - source: ecs
71
+ target: rds
72
+ label: "Read/Write"
73
+ type: data_flow
74
+
75
+ - source: ecs
76
+ target: elasticache
77
+ label: "Cache"
78
+ type: data_flow
79
+
80
+ - source: ecs
81
+ target: sqs
82
+ label: "Queue"
83
+ type: trigger
84
+
85
+ - source: ecs
86
+ target: sns
87
+ label: "Publish"
88
+ type: trigger
89
+
90
+ - source: lambda
91
+ target: dynamodb
92
+ label: "Read/Write"
93
+ type: data_flow
94
+
95
+ - source: lambda
96
+ target: s3
97
+ label: "Read/Write"
98
+ type: data_flow
99
+
100
+ - source: lambda
101
+ target: sqs
102
+ label: "Process"
103
+ type: trigger
104
+
105
+ - source: sqs
106
+ target: lambda
107
+ label: "Trigger"
108
+ type: trigger
109
+
110
+ - source: sns
111
+ target: sqs
112
+ label: "Subscribe"
113
+ type: trigger
114
+
115
+ - source: sns
116
+ target: lambda
117
+ label: "Trigger"
118
+ type: trigger
119
+
120
+ - source: eventbridge
121
+ target: lambda
122
+ label: "Trigger"
123
+ type: trigger
124
+
125
+ - source: eventbridge
126
+ target: sqs
127
+ label: "Route"
128
+ type: trigger
129
+
130
+ - source: kms
131
+ target: s3
132
+ label: "Encrypt"
133
+ type: encrypt
134
+
135
+ - source: kms
136
+ target: dynamodb
137
+ label: "Encrypt"
138
+ type: encrypt
139
+
140
+ - source: kms
141
+ target: sqs
142
+ label: "Encrypt"
143
+ type: encrypt
144
+
145
+ - source: kms
146
+ target: sns
147
+ label: "Encrypt"
148
+ type: encrypt
149
+
150
+ - source: kms
151
+ target: secrets_manager
152
+ label: "Encrypt"
153
+ type: encrypt
154
+
155
+ - source: secrets_manager
156
+ target: ecs
157
+ label: "Inject"
158
+ type: default
159
+
160
+ - source: secrets_manager
161
+ target: lambda
162
+ label: "Inject"
163
+ type: default
164
+
165
+ - source: cognito
166
+ target: api_gateway
167
+ label: "Auth"
168
+ type: default
169
+
170
+ - source: cognito
171
+ target: alb
172
+ label: "Auth"
173
+ type: default
174
+
175
+ - source: api_gateway
176
+ target: lambda
177
+ label: "Invoke"
178
+ type: trigger
179
+
180
+ - source: step_functions
181
+ target: lambda
182
+ label: "Orchestrate"
183
+ type: trigger
@@ -0,0 +1,55 @@
1
+ """Configuration loader for Terraform Diagram Generator."""
2
+
3
+ from pathlib import Path
4
+ from typing import Any, Dict, List, Optional
5
+
6
+ import yaml
7
+
8
+
9
+ class ConfigLoader:
10
+ """Loads configuration from YAML files with fallback to defaults."""
11
+
12
+ def __init__(
13
+ self,
14
+ aggregation_rules_path: Optional[Path] = None,
15
+ logical_connections_path: Optional[Path] = None
16
+ ):
17
+ self._config_dir = Path(__file__).parent / "config"
18
+ self._aggregation_rules_path = aggregation_rules_path or self._config_dir / "aggregation_rules.yaml"
19
+ self._logical_connections_path = logical_connections_path or self._config_dir / "logical_connections.yaml"
20
+
21
+ self._aggregation_rules: Optional[Dict[str, Any]] = None
22
+ self._logical_connections: Optional[List[Dict[str, Any]]] = None
23
+
24
+ def get_aggregation_rules(self) -> Dict[str, Any]:
25
+ """Load and return aggregation rules."""
26
+ if self._aggregation_rules is None:
27
+ self._aggregation_rules = self._load_yaml(self._aggregation_rules_path)
28
+ return self._aggregation_rules
29
+
30
+ def get_logical_connections(self) -> List[Dict[str, Any]]:
31
+ """Load and return logical connections."""
32
+ if self._logical_connections is None:
33
+ data = self._load_yaml(self._logical_connections_path)
34
+ self._logical_connections = data.get("connections", [])
35
+ return self._logical_connections
36
+
37
+ def _load_yaml(self, path: Path) -> Dict[str, Any]:
38
+ """Load YAML file and return parsed content."""
39
+ if not path.exists():
40
+ raise FileNotFoundError(f"Configuration file not found: {path}")
41
+
42
+ with open(path, "r") as f:
43
+ return yaml.safe_load(f) or {}
44
+
45
+ def get_flat_aggregation_rules(self) -> Dict[str, Dict[str, Any]]:
46
+ """Return aggregation rules flattened to service_name -> config mapping."""
47
+ rules = self.get_aggregation_rules()
48
+ flat = {}
49
+ for category, services in rules.items():
50
+ for service_name, config in services.items():
51
+ flat[service_name] = {
52
+ "category": category,
53
+ **config
54
+ }
55
+ return flat