Skip to content
Snippets Groups Projects

Feature/nat 217 import sites

Merged Neda Moeini requested to merge feature/NAT-217-Import-Sites into develop
2 files
+ 18
5
Compare changes
  • Side-by-side
  • Inline
Files
2
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)}
Loading