eaglelandsonce commited on
Commit
33960b7
·
verified ·
1 Parent(s): fbffdca

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -5
app.py CHANGED
@@ -127,6 +127,26 @@ def lint_template(template):
127
 
128
  return lint_results
129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  def simulate_deployment(arm_template):
131
  try:
132
  template = json.loads(arm_template)
@@ -134,7 +154,7 @@ def simulate_deployment(arm_template):
134
  # Validate template
135
  is_valid, validation_message = validate_template(template)
136
  if not is_valid:
137
- return [], [], [], [], 0, [], validation_message
138
 
139
  # Resolve expressions
140
  resolved_template = resolve_template_expressions(template)
@@ -165,7 +185,8 @@ def simulate_deployment(arm_template):
165
  "name": resource_name,
166
  "type": resource_type,
167
  "location": location,
168
- "properties": properties
 
169
  })
170
 
171
  for resource_name in existing_resources:
@@ -181,9 +202,12 @@ def simulate_deployment(arm_template):
181
  # Lint template
182
  lint_results = lint_template(template)
183
 
184
- return resources_to_create, resources_to_update, resources_to_delete, resource_details, estimated_cost, dependency_graph, lint_results, "Simulation completed successfully."
 
 
 
185
  except json.JSONDecodeError:
186
- return [], [], [], [], 0, None, [], "Invalid JSON format. Please check your ARM template."
187
 
188
  # Streamlit UI
189
  st.title("Comprehensive ARM Template Simulator")
@@ -195,7 +219,7 @@ template_input = st.text_area("Paste ARM Template JSON here:", height=300)
195
  # Button to simulate the evaluation
196
  if st.button("Simulate Template"):
197
  if template_input:
198
- resources_to_create, resources_to_update, resources_to_delete, resource_details, estimated_cost, dependency_graph, lint_results, message = simulate_deployment(template_input)
199
 
200
  st.subheader("Simulation Results:")
201
  st.write(message)
@@ -237,6 +261,12 @@ if st.button("Simulate Template"):
237
  else:
238
  st.write("No dependencies found between resources.")
239
 
 
 
 
 
 
 
240
  st.write("### Template Lint Results:")
241
  if lint_results:
242
  for result in lint_results:
 
127
 
128
  return lint_results
129
 
130
+ def generate_system_diagram(resources):
131
+ diagram = ["graph TD"]
132
+ resource_nodes = {}
133
+
134
+ # Create nodes for each resource
135
+ for i, resource in enumerate(resources):
136
+ resource_type = resource['type'].split('/')[-1]
137
+ node_id = f"R{i}"
138
+ resource_nodes[resource['name']] = node_id
139
+ diagram.append(f"{node_id}[{resource_type}<br/>{resource['name']}]")
140
+
141
+ # Create connections based on dependencies
142
+ for resource in resources:
143
+ if 'dependsOn' in resource:
144
+ for dependency in resource['dependsOn']:
145
+ if dependency in resource_nodes:
146
+ diagram.append(f"{resource_nodes[dependency]} --> {resource_nodes[resource['name']]}")
147
+
148
+ return "\n".join(diagram)
149
+
150
  def simulate_deployment(arm_template):
151
  try:
152
  template = json.loads(arm_template)
 
154
  # Validate template
155
  is_valid, validation_message = validate_template(template)
156
  if not is_valid:
157
+ return [], [], [], [], 0, None, [], "", validation_message
158
 
159
  # Resolve expressions
160
  resolved_template = resolve_template_expressions(template)
 
185
  "name": resource_name,
186
  "type": resource_type,
187
  "location": location,
188
+ "properties": properties,
189
+ "dependsOn": resource.get('dependsOn', [])
190
  })
191
 
192
  for resource_name in existing_resources:
 
202
  # Lint template
203
  lint_results = lint_template(template)
204
 
205
+ # Generate system diagram
206
+ system_diagram = generate_system_diagram(resource_details)
207
+
208
+ return resources_to_create, resources_to_update, resources_to_delete, resource_details, estimated_cost, dependency_graph, lint_results, system_diagram, "Simulation completed successfully."
209
  except json.JSONDecodeError:
210
+ return [], [], [], [], 0, None, [], "", "Invalid JSON format. Please check your ARM template."
211
 
212
  # Streamlit UI
213
  st.title("Comprehensive ARM Template Simulator")
 
219
  # Button to simulate the evaluation
220
  if st.button("Simulate Template"):
221
  if template_input:
222
+ resources_to_create, resources_to_update, resources_to_delete, resource_details, estimated_cost, dependency_graph, lint_results, system_diagram, message = simulate_deployment(template_input)
223
 
224
  st.subheader("Simulation Results:")
225
  st.write(message)
 
261
  else:
262
  st.write("No dependencies found between resources.")
263
 
264
+ st.write("### System Diagram:")
265
+ if system_diagram:
266
+ st.mermaid(system_diagram)
267
+ else:
268
+ st.write("Unable to generate system diagram.")
269
+
270
  st.write("### Template Lint Results:")
271
  if lint_results:
272
  for result in lint_results: