Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
|
|
|
|
|
|
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:
|