88 lines
3.7 KiB
Python
88 lines
3.7 KiB
Python
import streamlit as st
|
|
import pandas as pd
|
|
from streamlit_server.utils.helpers import format_timestamp
|
|
|
|
def render_list():
|
|
st.header("Virtual Data Center Management")
|
|
|
|
# Create VDC Form
|
|
with st.expander("Create New Virtual Data Center"):
|
|
with st.form("create_vdc"):
|
|
name = st.text_input("Virtual Data Center Name")
|
|
projects = st.session_state.client.get_projects()
|
|
project_choices = {p['name']: p['id'] for p in projects} if projects else {}
|
|
selected_project = st.selectbox("Select Project", list(project_choices.keys()))
|
|
submit = st.form_submit_button("Create VDC")
|
|
|
|
if submit and name and selected_project:
|
|
result = st.session_state.client.create_vdc(name, project_choices[selected_project])
|
|
if result:
|
|
st.success(f"Virtual Data Center '{name}' created successfully!")
|
|
|
|
# List VDCs
|
|
st.subheader("Existing Virtual Data Center")
|
|
vdcs = st.session_state.client.get_virtual_data_centers()
|
|
# projects = st.session_state.client.get_projects()
|
|
# regions = st.session_state.client.get_regions()
|
|
|
|
if vdcs:
|
|
for vdc in vdcs:
|
|
with st.container():
|
|
col1, col2, col3 = st.columns([3, 1, 1])
|
|
with col1:
|
|
st.markdown(f"### {vdc['name']}")
|
|
st.markdown(f"**Region:** {vdc['region_id']}")
|
|
st.markdown(f"**Project:** {vdc['project_id']}")
|
|
st.text(f"Created: {format_timestamp(vdc['created_at'])}")
|
|
with col2:
|
|
st.text(f"ID: {vdc['id']}")
|
|
# st.text(f"ID: {vdc['id'][:8]}...")
|
|
with col3:
|
|
if st.button("View Details", key=f"view_{vdc['id']}"):
|
|
st.session_state.selected_resource = vdc
|
|
st.session_state.view_type = 'detail'
|
|
st.session_state.selected_resource_type='virtual_data_center'
|
|
st.rerun() # Force Streamlit to rerun the script
|
|
|
|
|
|
|
|
def render_detail():
|
|
|
|
vdc = st.session_state.client.get_virtual_data_center(st.session_state.selected_resource['id'])
|
|
st.title(f"Virtual Data Center: {vdc['name']}")
|
|
|
|
if st.button("Back to list view"):
|
|
st.session_state.view_type = 'list'
|
|
st.rerun()
|
|
|
|
st.header("Virtual Data Center Details")
|
|
col1, col2 = st.columns(2)
|
|
with col1:
|
|
st.markdown(f"**ID:** `{vdc['id']}`")
|
|
st.markdown(f"**Created:** {format_timestamp(vdc['created_at'])}")
|
|
st.markdown(f"**Project ID:** `{vdc['project_id']}`") # Keep Project ID here or move if preferred
|
|
|
|
with col2:
|
|
# Fetch and display region details
|
|
region = None
|
|
if vdc.get('region_id'):
|
|
region = st.session_state.client.get_region(vdc['region_id'])
|
|
|
|
if region:
|
|
st.markdown(f"**Region:** {region.get('name', 'N/A')} (`{vdc['region_id'][:8]}...`)")
|
|
if st.button("View Region", key=f"view_region_{region['id']}"):
|
|
st.session_state.selected_resource = region
|
|
st.session_state.selected_resource_type = 'region'
|
|
st.session_state.view_type = 'detail' # Ensure detail view for region
|
|
st.switch_page("streamlit_server/views/regions.py")
|
|
else:
|
|
st.markdown(f"**Region ID:** `{vdc.get('region_id', 'Not Set')}`")
|
|
|
|
if vdc.get('updated_at'):
|
|
st.markdown(f"**Last Updated:** {format_timestamp(vdc['updated_at'])}")
|
|
|
|
if st.session_state.view_type == 'detail' and st.session_state.selected_resource_type=='virtual_data_center':
|
|
render_detail()
|
|
else:
|
|
render_list()
|