# kagent DevOps Remediator Function OCI Function bridge used by OCI DevOps to ask kagent for post-deployment diagnosis, business degradation analysis, pod troubleshooting, or remediation recommendations. ## Network prerequisite The function cannot resolve Kubernetes `svc.cluster.local` names. Expose the kagent controller through a private LoadBalancer: ```bash kubectl apply -f k8s/kagent/kagent-controller-private-lb.yaml kubectl get svc kagent-controller-private-lb -n kagent ``` Set `KAGENT_MCP_URL` to: ```text http://:8083/mcp ``` The Function must run in a subnet that can reach that private LB. ## Function config Required config: ```text KAGENT_MCP_URL=http://:8083/mcp KAGENT_AGENT_NAME=k8s-agent KAGENT_AGENT_NAMESPACE=kagent APP_NAMESPACE=kagent-demo ORDER_OBSERVABILITY_URL=http:///api/observability OCI_REGION=mx-monterrey-1 NOTIFICATION_TOPIC_OCID= DEVOPS_APPROVAL_URL=https://cloud.oracle.com/devops/projects//deploy-pipelines/?region=mx-monterrey-1 ``` `NOTIFICATION_TOPIC_OCID` is optional. If it is configured, the Function publishes an OCI Notifications message only when kagent reports an active failure or degradation. Healthy results do not send email. `DEVOPS_APPROVAL_URL` is optional but recommended for the demo. Use a stable remediation pipeline URL because deployment OCIDs change on every run: ```text DEVOPS_APPROVAL_URL=https://cloud.oracle.com/devops/projects//deploy-pipelines/?region=mx-monterrey-1 ``` If you later want to include a specific deployment URL, pass it in the Function payload as `devopsApprovalUrl`. Payload values override the environment variable. ## Default diagnosis payload ```json { "appNamespace": "kagent-demo", "agentNamespace": "kagent", "agentName": "k8s-agent", "observabilityUrl": "http://40.233.26.150/api/observability" } ``` If no `prompt` is provided, the Function uses the default business-remediation prompt for the `kagent-demo` application. ## OCI DevOps parameterized payload For the Invoke Function stage, create a General artifact using `k8s/kagent-multi-error-payload.json` and enable parameter substitution. Recommended OCI DevOps deployment pipeline parameters: ```text OCI_REGION=mx-monterrey-1 APP_NAMESPACE=kagent-demo ORDER_OBSERVABILITY_URL=http:///api/observability NOTIFICATION_TOPIC_OCID= DEVOPS_APPROVAL_URL=https://cloud.oracle.com/devops/projects//deploy-pipelines/?region=mx-monterrey-1 BUSINESS_REMEDIATION_PIPELINE_OCID= IMAGEPULL_REMEDIATION_PIPELINE_OCID= HPA_REMEDIATION_PIPELINE_OCID= BUSINESS_REMEDIATION_PROJECT_OCID= IMAGEPULL_REMEDIATION_PROJECT_OCID= HPA_REMEDIATION_PROJECT_OCID= ``` The Function uses these payload values before falling back to `func.yaml` environment variables. This lets each OCI DevOps pipeline control its own topic, URLs, and remediation pipeline OCIDs. ## Generic prompt payload Use this mode when OCI DevOps needs to ask a different question. ```json { "agentNamespace": "kagent", "agentName": "k8s-agent", "responseMode": "json", "prompt": "Analiza el namespace kagent-demo. Identifica pods con ImagePullBackOff, causa raiz, imagen afectada y accion recomendada para OCI DevOps. Responde JSON valido con fields: status, failureType, rootCause, evidence, recommendedAction." } ``` For free-form answers: ```json { "agentNamespace": "kagent", "agentName": "k8s-agent", "responseMode": "text", "prompt": "Resume el estado actual del namespace kagent-demo y separa eventos historicos de fallas activas." } ``` ## Recommended generic JSON contract For OCI DevOps automation, prompts should request this kind of structure: ```json { "status": "HEALTHY|DEGRADED|FAILED", "failureType": "OKE_PLATFORM_FAILURE|DEPENDENCY_FAILURE|DEPLOYMENT_FAILURE|BUSINESS_PROCESS_DEGRADATION|NO_ACTIVE_FAILURE", "rootCause": "", "evidence": [], "recommendedAction": "CONTINUE|APPROVAL_REQUIRED|APPLY_CONFIGMAP_FIX|ROLLBACK|REDEPLOY", "configMapPatchRequired": false, "recommendedConfigMapData": {}, "deploymentsToRestart": [] } ```