Skip to content
Snippets Groups Projects
Commit c0cd6c85 authored by Neda Moeini's avatar Neda Moeini
Browse files

Updated import site endpoint.

parent 531a3b96
No related branches found
No related tags found
1 merge request!60Feature/nat 217 import sites
This commit is part of merge request !60. Comments created here will be created in the context of that merge request.
from typing import Dict, Any
from fastapi import HTTPException
from fastapi import HTTPException, status
from fastapi.routing import APIRouter
from orchestrator.services import processes
from orchestrator.services import processes, subscriptions
from pydantic import BaseModel
from gso.products.product_blocks.site import SiteTier
......@@ -20,19 +20,31 @@ class SiteImport(BaseModel):
site_bgp_community_id: int
site_internal_id: int
site_tier: SiteTier
site_ts_address: str
@router.post("/", tags=["Import"])
@router.post("/", status_code=status.HTTP_201_CREATED, tags=["Import"])
def import_site(site: SiteImport) -> Dict[str, Any]:
"""
Import site by running the import_site workflow.
response:
- pid: The process id of the started process.
Raises:
HTTPException: If the site already exists or if there's an error in the process.
"""
subscription = subscriptions.retrieve_subscription_by_subscription_instance_value(
resource_type="site_name", value=site.site_name, sub_status=("provisioning", "active"))
if subscription:
raise HTTPException(status_code=status.HTTP_409_CONFLICT, detail="Site already exists.")
pid = processes.start_process("import_site", [site.dict()])
if pid is None:
raise HTTPException(status_code=500, detail="Failed to start the process.")
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to start the process.")
process = processes._get_process(pid) # pylint: disable=protected-access
if process.last_status == "failed":
raise HTTPException(
status_code=500, detail=f"Process {pid} failed because of an internal error.")
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail=f"Process {pid} failed because of an internal error.")
return {"pid": str(pid)}
......@@ -38,6 +38,7 @@ def generate_initial_input_form() -> FormGenerator:
site_bgp_community_id: int
site_internal_id: int
site_tier: SiteTier
site_ts_address: str
user_input = yield ImportSite
return user_input.dict()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment