feat: Expand workload host endpoints to include pooled and fixed resources

This commit is contained in:
2025-08-03 10:00:27 +09:30
parent 95b52a70b6
commit 1731e2c93a
+69 -3
View File
@@ -1,7 +1,7 @@
import uuid
from flask import request, jsonify
from app import app, db, logger
from app.models.models import WorkloadHost, Region, Label, Workload, WorkloadHostPooledResource
from app.models.models import WorkloadHost, Region, Label, Workload, WorkloadHostPooledResource, WorkloadHostFixedResource
from app.controller import api_bp
import ipaddress
@@ -39,7 +39,37 @@ def edit_workload_host(workload_host_id):
@api_bp.route('/workload_hosts/<workload_host_id>', methods=['GET'])
def get_workload_host(workload_host_id):
workload_host = WorkloadHost.query.filter_by(id=workload_host_id,deleted=0).first_or_404()
return jsonify(workload_host.to_json())
# Get pooled resources
pooled_resources = WorkloadHostPooledResource.query.filter_by(workload_host_id=workload_host_id).all()
pooled_resources_data = []
for resource in pooled_resources:
pooled_resources_data.append({
"id": str(resource.id),
"name": resource.name,
"resource_type": resource.resource_type,
"total_quantity": resource.total_quantity,
"quantity_in_use": resource.quantity_in_use,
"quantity_available": resource.quantity_available
})
# Get fixed resources
fixed_resources = WorkloadHostFixedResource.query.filter_by(workload_host_id=workload_host_id).all()
fixed_resources_data = []
for resource in fixed_resources:
fixed_resources_data.append({
"id": str(resource.id),
"name": resource.name,
"resource_type": resource.resource_type,
"quantity": resource.quantity
})
# Combine host data with resources
host_data = workload_host.to_json()
host_data["pooled_resources"] = pooled_resources_data
host_data["fixed_resources"] = fixed_resources_data
return jsonify(host_data)
@api_bp.route('/workload_hosts/<workload_host_id>', methods=['DELETE'])
def delete_workload_host(workload_host_id):
@@ -53,7 +83,43 @@ def get_workload_hosts():
# TODO - Filter only hosts this user can see.
# Regular users cant see this info, admins cna only see hosts in regions they have access to
workload_hosts = WorkloadHost.query.filter_by(deleted=0).all()
return jsonify([host.to_json() for host in workload_hosts])
# Prepare response with resources
hosts_data = []
for host in workload_hosts:
host_data = host.to_json()
# Get pooled resources
pooled_resources = WorkloadHostPooledResource.query.filter_by(workload_host_id=host.id).all()
pooled_resources_data = []
for resource in pooled_resources:
pooled_resources_data.append({
"id": str(resource.id),
"name": resource.name,
"resource_type": resource.resource_type,
"total_quantity": resource.total_quantity,
"quantity_in_use": resource.quantity_in_use,
"quantity_available": resource.quantity_available
})
# Get fixed resources
fixed_resources = WorkloadHostFixedResource.query.filter_by(workload_host_id=host.id).all()
fixed_resources_data = []
for resource in fixed_resources:
fixed_resources_data.append({
"id": str(resource.id),
"name": resource.name,
"resource_type": resource.resource_type,
"quantity": resource.quantity
})
# Add resources to host data
host_data["pooled_resources"] = pooled_resources_data
host_data["fixed_resources"] = fixed_resources_data
hosts_data.append(host_data)
return jsonify(hosts_data)
@api_bp.route("/workload_hosts/<workload_host_id>/ovs_bridges", methods=['GET'])
def get_all_ovs_bridges(workload_host_id):