Add DevOps reconciliation models and integrate into deployment service
Signed-off-by: zhenyus <zhenyus@mathmast.com>
This commit is contained in:
parent
d660002076
commit
979fcd298c
@ -1,5 +1,6 @@
|
||||
from app.common.models.code_depot.code_depot import CodeDepotDoc
|
||||
from app.common.models.deployment.deployment import Deployment
|
||||
from app.common.models.deployment.deployment import DevOpsReconcileRequest, DevOpsReconcileOperationType
|
||||
|
||||
# list of beanie document models,
|
||||
# must add here so that the mongo db collection can be automatically created
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Literal, List
|
||||
from typing import Literal, List, Optional
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
|
||||
from beanie import Document
|
||||
from bson import ObjectId
|
||||
@ -69,8 +71,19 @@ class CheckApplicationLogsResponse(BaseModel):
|
||||
limit: int
|
||||
logs: list[str]
|
||||
|
||||
class DevOpsReconcileOperationType(Enum):
|
||||
START = "start"
|
||||
TERMINATE = "terminate"
|
||||
RESTART = "restart"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@dataclass
|
||||
class DevOpsReconcileRequest(BaseModel):
|
||||
operation: DevOpsReconcileOperationType
|
||||
id: str
|
||||
devops_proj_id: str
|
||||
triggered_user_id: str
|
||||
causes: str
|
||||
commit_sha256: Optional[str] = None
|
||||
target_env: Literal["alpha", "prod"]
|
||||
ttl_controled: bool = False
|
||||
ttl: int = 10800
|
||||
@ -8,7 +8,7 @@ import requests
|
||||
from fastapi import HTTPException, Depends
|
||||
|
||||
from app.common.config.site_settings import site_settings
|
||||
from app.common.models import Deployment
|
||||
from app.common.models import Deployment, DevOpsReconcileRequest, DevOpsReconcileOperationType
|
||||
from app.common.models.code_depot.code_depot import CodeDepotDoc, DepotStatus
|
||||
from app.common.models.deployment.deployment import InitDeploymentRequest, CheckApplicationLogsRequest, \
|
||||
CheckApplicationLogsResponse
|
||||
@ -148,15 +148,28 @@ class DeploymentService:
|
||||
) -> bool:
|
||||
"""
|
||||
Start the deployment
|
||||
Return true atm, modify calling reconsile service later
|
||||
Return true atm, modify calling reconcile service later
|
||||
"""
|
||||
# async with httpx.AsyncClient() as client:
|
||||
# response = await client.post(
|
||||
# f"{reconsile_base_url}/api/devops/reconcile",
|
||||
# json=deployment.model_dump()
|
||||
# )
|
||||
# if response.status_code != 200:
|
||||
# raise HTTPException(status_code=response.status_code, detail=response.text)
|
||||
# construct request body
|
||||
request = DevOpsReconcileRequest(
|
||||
operation=DevOpsReconcileOperationType.START,
|
||||
id=deployment.deployment_id,
|
||||
devops_proj_id=deployment.deployment_project_id,
|
||||
triggered_user_id=deployment.deployed_by,
|
||||
causes=deployment.deployment_reason,
|
||||
target_env=deployment.deployment_target_env,
|
||||
ttl_controled=True,
|
||||
ttl=deployment.deployment_ttl_hours,
|
||||
commit_sha256=deployment.deployment_git_sha256,
|
||||
)
|
||||
# send request to reoncile service
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.post(
|
||||
f"{reconsile_base_url}/api/devops/reconcile",
|
||||
json=request.model_dump()
|
||||
)
|
||||
if response.status_code != 200:
|
||||
raise HTTPException(status_code=response.status_code, detail=response.text)
|
||||
return True
|
||||
|
||||
async def check_application_logs(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user